模式识别中相位相关的模糊结果

信息处理 图像处理 信号分析 计算机视觉 互相关 模板匹配
2022-01-11 09:46:49

我们使用相位相关来查找图像上的模式,我们得到的是 15% 的结果是虚假的。我们的图案有 32x32 像素,用于研究的图像有 32x512 像素。所以我们把Pattern 放到32x512 像素的图像到左边,图像的其余部分被零像素填充。接下来,我们将 FFT 应用于图案和图像,而不应用窗口函数。然后我们制作 Hadamard 产品,对其进行归一化并对结果矩阵进行逆 FFT。有时我们几乎在图的中间得到假峰值,边缘效应和相关性的圆度应该被忽略。

问题:

还有什么可能是虚假峰值的原因?

图片:

搜索了什么以及我们得到了什么: 搜索了什么,我们得到了什么

真实研究图像 32x512(灰度前) 研究形象

真实图案(灰度) 真实模式

相关结果 相关结果

最好的祝福

大卫·D

1个回答

我怀疑您的问题是由于一些缩放问题而发生的。基本上,您需要通过减去模板的平均值将您的研究图像标准化为模式模板。并且最好计算两个图像的相关性与标准偏差的比率。

我不知道您使用的是哪种编程语言。我为您编写了一个 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);,只需注意此函数会生成两个图像长度之和的相关图,而我的代码为您提供与研究图像相同大小的相关图。