Image 为什么两个不同图像之间的循环互相关值高于同一图像和同一图像之间的循环互相关值?
我尝试使用从下载的Image 为什么两个不同图像之间的循环互相关值高于同一图像和同一图像之间的循环互相关值?,image,image-processing,signal-processing,correlation,cross-correlation,Image,Image Processing,Signal Processing,Correlation,Cross Correlation,我尝试使用从下载的cxcorr\u fft在两幅图像之间执行循环互相关 函数[h]=cxcorr\u fft(a,b) %CXCORRèU FFT计算两个输入的循环互相关 %使用基于fft的方法的矢量 % %作者:Johannes Schmitz,2013年10月16日 % schmitz@ti.rwth-亚琛 %zeropad到相同长度M if(长度(a)
cxcorr\u fft
在两幅图像之间执行循环互相关
函数[h]=cxcorr\u fft(a,b)
%CXCORRèU FFT计算两个输入的循环互相关
%使用基于fft的方法的矢量
%
%作者:Johannes Schmitz,2013年10月16日
% schmitz@ti.rwth-亚琛
%zeropad到相同长度M
if(长度(a)<长度(b))
c=[a零(1,长度(b)-长度(a))];
d=b;
其他的
c=a;
d=[b零(1,长度(a)-长度(b));
结束
%计算互相关
e=fft(c);
f=fft(d);
g=f*conj(e);
h=FFT换档(ifft(g));
结束
1-我在图像和自身之间应用了函数cxcorr\u fft
,该矩阵是相关结果的一部分:
然而,当我在两个不同的图像之间尝试时,相关结果是:
然后,我使用MATLAB函数crosscorr
执行互相关。
对于第一种情况,在图像和自身之间,相关结果是:
在第二种情况下(不同的图像),互相关结果是:
与循环互相关结果不同,互相关结果似乎是合乎逻辑的。循环互相关码的错误是什么?为什么两个不同图像之间的相关性值高于一个图像和同一图像之间的相关性值???您使用的函数用于1D输入。它正在计算
a
和b
中相应列之间的互相关
对于图像,用fft2
(2D)或fftn
(任意维度)替换类为fft
,用ifft2
或ifftn
替换调用ifft
零填充代码对于不是向量的输入也是不正确的,我将删除它,假设您的图像已经具有相同的大小
请注意,互相关函数中值的大小与输入图像中的大小有关。与具有非常低值的图像相比,计算具有非常大值的图像的互相关将导致更低的互相关结果。重要的是互相关函数的形状。应该有一个峰值,表示两幅图像最相似的偏移。这个峰值应该在输出的中间附近,因为您正在使用
fftshift
操作。我按照您描述的函数[h]=cxcorr\u fft(a,b)更改了函数%CXCORR\u FFT使用基于FFT的方法%calculate crosscorrelation e=fft2(a)计算两个输入%向量的循环互相关;f=fft2(b);g=f*conj(e);h=FFT换档(ifft2(g));结果仍然不合理,相同图像之间和不同图像之间的圆形交叉校正之间没有逻辑差异
function [ h ] = cxcorr_fft( a,b )
%CXCORR_FFT Calculates the circular crosscorrelation of the two input
% vectors using the fft based method
%
% Author: Johannes Schmitz, Oct. 16, 2013
% schmitz@ti.rwth-aachen.de
% zeropad to the same length M
if (length(a) < length(b))
c = [ a zeros(1,length(b)-length(a)) ];
d = b;
else
c = a;
d = [ b zeros(1,length(a)-length(b)) ];
end
% calculate crosscorrelation
e = fft(c);
f = fft(d);
g = f.*conj(e);
h = fftshift(ifft(g));
end