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-
Discrepancy between xcorr2 and fft2
6 views (last 30 days)
Show older comments
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))
0 Comments
Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!