MATLAB Answers

Nour Sd
0

How could I convert this Python code into Matlab?

Asked by Nour Sd
on 6 Dec 2018 at 15:00
Latest activity Edited by Nour Sd
on 8 Dec 2018 at 23:44
Hello, I'm working on edge detection and I want to convert a python code that runs perfectly to a matlab code because I can't call python from matlab since I don't have python installed in my own PC. I started converting the code but since I'm not familiar with python I had some difficulties to convert it all. Can you please help me out? This is the part of the python code I didn't know how to convert:
for r in range(iterations):
# approximate gradients
nabla
= [ ndimage.filters.convolve(u, w) for w in windows ]
# approximate diffusion function
diff
= [ 1./(1 + (n/kappa)**2) for n in nabla]
# update image
terms
= [diff[i]*nabla[i] for i in range(4)]
terms
+= [(1/(dd**2))*diff[i]*nabla[i] for i in range(4, 8)]
u
= u + delta*(sum(terms))
# Kernel for Gradient in x-direction
Kx = np.array(
[[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], np.int32
)
# Kernel for Gradient in y-direction
Ky = np.array(
[[1, 2, 1], [0, 0, 0], [-1, -2, -1]], np.int32
)
# Apply kernels to the image
Ix = ndimage.filters.convolve(u, Kx)
Iy = ndimage.filters.convolve(u, Ky)
Please help me converting it, I tried to understand how it works in python so I convert it to matlab but I couldn't. Thank you :)

  14 Comments

Thank you so much for your comment :)
I tried with conv2(A,B) and I think that it works right but I will try what you have suggest and compare.
My try to convert that part of the python code gave me the following :
for r = 1:iterations
for w = 1:windows
%approximate gradients
nabla = conv2(u,windows);
end
end
for n = 1:nabla
for i = 1:range(4)
%approximate diffusion function
A = (1./(1 + (n/kappa)*2));
%update image
terms = (1/(dd.^2))*A(i)*nabla(i);
end
for i = 1:range(4, 8)
u = u + delta*(sum(terms));
end
end
%Kernel for Gradient in x-direction
Kx = [-1 0 1; -2 0 2; -1 0 1];
%Kernel for Gradient in y-direction
Ky = [1 2 1; 0 0 0; -1 -2 -1];
%Apply kernels to the image
Ix = conv2(u, Kx);
Iy = conv2(u, Ky);
It seems giving the same result but I'm still working on make it better.
Thank you MATLAB forum!
We recommend against naming a variable diff as that is confusing because of the diff() function which exists in both numeric and symbolic form.
Okay I understand, I just thought it refers to diffusion, I will change it. I'm very thankful to you.

Sign in to comment.

Products


Release

R2018a

1 Answer

Answer by madhan ravi
on 6 Dec 2018 at 15:47

  1 Comment

Thank you for your answer. I tried what it said ( system('python python_script.py');) but I had this error:
AttributeError: 'module' object has no attribute 'imread'
Could you please tell me what to do?

Sign in to comment.