需要绘制两个图像之间的非线性相关性。当图像相同时,输出是一个尖峰。如果图像不同,我们会在表面上看到散布的图。
这种相关性的公式是:
abs ( IFT( {FT(img1) FT(img2)} x {FT(img1) FT(img2)} / abs(FT(img1) FT(img2)) ) ).^2
所需的输出显示在图片PIC 1 similar vs dissimilar
中可以使用Matlab的xcorr2()绘制由Maurits描述的图。我绘制了相似和不同的图像,如图所示:PIC 2 xcorr2 plots
但是我希望曲线具有如图1所示的尖锐峰值
这是我写的代码:
a=imread('pepper.tiff')
b=imread('cameraman.tiff')
Fa=fftshift(fft2(a))
Fb=fftshift(fft2(b))
z= abs (ifft2( (Fa.*Fb) .* (Fa.*Fb) ./ abs(Fa.*Fb) ) );
surf(abs(z))
但是我得到了一个疯狂的曲线,并且不喜欢原始图片中的曲线。有人熟悉非线性相关图吗? 谢谢
答案 0 :(得分:0)
似乎您忘记了共轭,即
% assuming your images are the same size
size_t = size(im_a);
% padding size
outsize = 2*size_t - 1;
% FFT
Fa = fft2(im_a, outsize(1), outsize(2));
Fb = fft2(im_b, outsize(1), outsize(2));
% Cross correlation
c = abs( fftshift( ifft2(Fa .* conj(Fb))) );
对于归一化互相关,可以使用normxcorr2。 Matlab帮助页面包含所用的公式以及相关论文的链接。