gradients of image
Show older comments
dx = 0.000283018867925 meters;
dy = 0.000089285714286 meters;
I am trying to find gradients of image of size 1000X1333. One pixel in x-direction represents dx and one pixel in y-direction represents dy. I applied two methods to find the gradients.. one is convolution method and the other is calling MATLAB gradient method. I was expecting the results to be identical but they are not. Would any one point out where I am going wrong. Below are the codes for convolution and gradient methods.
convolution method:
fx = conv2(image1,0.5*[-1 1; -1 1], 'same');
fy = conv2(image1,0.5*[-1 -1; 1 1], 'same');
fx = fx./dx;
fy = fy./dy;
MATLAB defined gradients:
[fx,fy] = gradient(image1,dx,dy);
Answers (2)
Jan
on 22 Nov 2011
Try the functions on simpler test data:
image1 = 1:10;
conv2(image1, 0.5 * [-1 1; -1 1], 'same')
% >> -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 5
gradient(image1)
% >> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
gradient uses the central difference for the interior points:
image1 = rand(1, 10);
gradient(image1)
conv(image1, 0.5 * [1, 0, -1], 'same')
Now the interior points are equal, but the edges differ. This can be expanded to the 2D case also.
2 Comments
priya
on 28 Nov 2011
Srinibas Bhuyan
on 28 Nov 2012
did you try with any one of prewitt/sobel operator?
Also, if you want non-central differences, as in your original code, you need to flip the kernels, since this is convolution and not correlation:
fx = conv2(image1,0.5*[1 , -1], 'same');
fy = conv2(image1,0.5*[1 ; -1], 'same');
Categories
Find more on Image Category Classification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!