gradients of image

조회 수: 2 (최근 30일)
priya
priya 2011년 11월 22일
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);

답변 (2개)

Jan
Jan 2011년 11월 22일
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
priya
priya 2011년 11월 28일
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 2012년 11월 28일
did you try with any one of prewitt/sobel operator?

댓글을 달려면 로그인하십시오.


Matt J
Matt J 2012년 11월 28일
편집: Matt J 2012년 11월 28일
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');

카테고리

Help CenterFile Exchange에서 Signal Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by