gradients of image

2 views (last 30 days)
priya
priya on 22 Nov 2011
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
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
priya on 28 Nov 2011
Thanx for the reply. Do you know any links to understand conv2 by example. I looked into matlab documentation but I couldn't understand anything.
Srinibas Bhuyan
Srinibas Bhuyan on 28 Nov 2012
did you try with any one of prewitt/sobel operator?

Sign in to comment.


Matt J
Matt J on 28 Nov 2012
Edited: Matt J on 28 Nov 2012
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 Signal Processing Toolbox 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!