I have searched Google for circular cross correlation using Matlab, and I have found it only for one dimensional signals.
Could you please help me implementing circular cross correlation between two images using MATLAB?
Signal Processing Stack Exchange is a question and answer site for practitioners of the art and science of signal, image and video processing. It only takes a minute to sign up.Sign up to join this community
Cross correlation can be implemented in the frequency domain using FFT by multiplying signals.
For a cyclic cross correlation you can use:
cc = ifft(fft(x).*conj(fft(y)));
You can also calculate the linear cross correlation using FFT by zero-padding the signals before the FFT.
Related: Cross correlation with FFT and fftshift
In order to calculate the cross correlation of two images you have 2 options:
yshould be the grayscale representation of the images
yare a single channel (r,g or b) from each image
For 1D signals MATLAB has the function
In order to apply correlation and not convolution just flip the signals:
c = cconv(a, b(end:-1:1));
For 2D, in case you the Image Processing toolbox you may use
imfilter(). Its default mode is correlation:
c = imfilter(a2D, b2D); c = imfilter(a2D, b2D, 'corr'); % Equals to the above