필터 지우기
필터 지우기

Discrepancy between xcorr2 and fft2

조회 수: 9 (최근 30일)
Alessandro Masullo
Alessandro Masullo 2015년 10월 15일
편집: Tapas Bar 2020년 10월 9일
Hello!
I want to implement an fft cross-correlation in my algorithm in order to replace the much slower xcorr2. In theory, direct cross-correlation (xcorr2) and product of fft transform should be exactly the same. In practice, results can be different if the matrix size is not a power of two, because of the zero padding.
I made this snippet of code for a comparison, where matrices are exactly 128. The strange thing is that the two methods are almost the same in the centre of the correlation, but they differ quite a lot in the edges. How is that possible?
a = randn(128);
b = randn(128);
% Subtract the mean
a = a - mean(a(:));
b = b - mean(b(:));
% Direct cross-correlation
dc = xcorr2(b,a);
% Select the central part
dc = dc(65:128+64,65:128+64);
% FFT cross-correlation
fa = fft2(rot90(a,2));
fb = fft2(b);
cf = fftshift(real(ifft2(fa.*fb)));
figure,imagesc(abs(cf-dc))

답변 (1개)

Alessandro Masullo
Alessandro Masullo 2015년 10월 17일
I figured it out by myself, and I uploaded a script on the file exchange to get a numerically equivalent function of xcorr2 which uses FFT. http://www.mathworks.com/matlabcentral/fileexchange/53570-xcorr2-fft-a-b-
  댓글 수: 1
Tapas Bar
Tapas Bar 2020년 10월 9일
편집: Tapas Bar 2020년 10월 9일
Hello Mr. Masullo,
I also have the same problem. I could not understand your answer quite well regarding the difference in values (in two methods) at the edges. Please help !
Thanks

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

카테고리

Help CenterFile Exchange에서 Correlation and Convolution에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by