Discrepancy between xcorr2 and fft2
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))

Answers (1)
Categories
Find more on Correlation and Convolution 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!