How to calculate a gradient by fft ???

조회 수: 4 (최근 30일)
3omyer 3omayer
3omyer 3omayer 2011년 9월 19일
Hi;
someone can help me, how to calculate Gradient using fft ???

채택된 답변

David Young
David Young 2011년 9월 20일
It's still not clear what you mean by 'simple "gradient"' - that could refer to a variety of things.
One possibility is that you mean just the differences between adjacent values - what you'd get by computing
diff(im, 1, 2) % x differences - x component of gradient
and
diff(im, 1, 1) % y differences - y component of gradient
for example. You can do a similar operation in the frequency domain using the fact that the differentiation operator transforms to multiplication with ik (where k is the transform variable). The code looks like this for differentiating with respect to x:
im = imread('pout.tif'); % data
% compute differencing operator in the frequency domain
nx = size(im, 2);
hx = ceil(nx/2)-1;
ftdiff = (2i*pi/nx)*(0:hx); % ik
ftdiff(nx:-1:nx-hx+1) = -ftdiff(2:hx+1); % correct conjugate symmetry
% compute "gradient" in x using fft
g = ifft2( bsxfun(@times, fft2(im), ftdiff) );
imshow(g, []); % see result
As you can see, it's simpler to do it in the space domain. Why use the FFT?
  댓글 수: 7
3omyer 3omayer
3omyer 3omayer 2011년 9월 22일
I actually changed size(im,2) by size(im,1), but it gives me the same results ??
this is the following code
im = imread('pout.tif');
ny = size(im, 1);
hy = ceil(ny/2)-1;
ftdiff2 = (2i*pi/ny)*(0:hy);
ftdiff2(ny:-1:ny-hy+1) = -ftdiff2(2:hy+1);
% compute "gradient" in x using fft
g2 = ifft2( bsxfun(@times, fft2(im), ftdiff2) );
figure(2),
imshow(g2, []);
David Young
David Young 2011년 9월 28일
Well, you have to think about the shapes of the arrays. Differentiating with respect to x means multiplying each row of the the Fourier transform by ftdiff. If you want to differentiate with respect to y, you have to multiply each column by ftdiff. Changing the size of ftdiff is a start, but you also have to change it from a row vector to a column vector.

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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2011년 9월 19일
Is that plain "gradient", or is it "conjugate gradient" ?
(I notice you posted the same question to some other locations, all of which seem to have replied asking for clarification.)
  댓글 수: 1
3omyer 3omayer
3omyer 3omayer 2011년 9월 20일
I want to calculate simple "gradient" for images by using "fft"

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

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by