我怀疑您的问题是由于一些缩放问题而发生的。基本上,您需要通过减去模板的平均值将您的研究图像标准化为模式模板。并且最好计算两个图像的相关性与标准偏差的比率。
我不知道您使用的是哪种编程语言。我为您编写了一个 Matlab 代码,以便更好地理解我上面的意思(请注意,由于我在空间域上工作,所以我没有使用零填充,我认为这也不是导致您的虚假相关性的问题):
file1='https://lh3.googleusercontent.com/-GQSrln7qnO8/UtCT8elB_FI/AAAAAAAAEaw/bh7aKyyMRIo/s512/subimage.png'; % Research image
I1=double(rgb2gray(imread(file1)));
file2='https://lh5.googleusercontent.com/-YaDK_1QvqIQ/UtCT6-rNkNI/AAAAAAAAEao/41MOQJ_bXxU/s512/pattern_grey.png'; % Template pattern image
I2=double(rgb2gray(imread(file2)));
I2=I2(:,1:32); %% No padding
It=double(I2); % template
Ii=double(I1); % image
Ii_mean = conv2(Ii,ones(size(It))./numel(It),'same');
It_mean = mean(It(:));
corr_1 = conv2(Ii,rot90(It-It_mean,2),'same')./numel(It);
corr_2 = Ii_mean.*sum(It(:)-It_mean);
conv_std = sqrt(conv2(Ii.^2,ones(size(It))./numel(It),'same')-Ii_mean.^2);
It_std = std(It(:));
S = (corr_1-corr_2)./(conv_std.*It_std);
imagesc(abs(S))
你得到什么:
您可以观察到第 17 行第 450 列的相关峰,这是您的图案在原始图像中的位置。
您也可以使用 Matlab 内置函数normxcorr2(It,Ii);
,只需注意此函数会生成两个图像长度之和的相关图,而我的代码为您提供与研究图像相同大小的相关图。