1

我正在尝试从黑白文本中检测字符。目前,文本是白色背景,只有几个黑色字符。我还创建了一些只包含一个字符的小图像。我想使用相位相关来检测初始文本中的字符。为此,我做了:

image = im2double(imread("text.png"));
si = size(image);

trans = fft2(image);

ch = im2double(imread("a.bmp"));
chtrans =  fft2(ch,si(1),si(2));        

outt = angle(trans).*conj(angle(chtrans));

outt = abs(ifft2(outt)).^2;

当我标准化我的 outt 变量时,我检测到例如我的文本中的所有“a”,但图像是双重的:有正确的结果,但也有正确的结果翻转,两者都在同一个最终图像上。这有什么问题?

4

2 回答 2

1

这是傅里叶变换的一个特征——它可以同时检测正负频率分量;如果你愿意,你可以忽略负面的部分。

于 2012-05-18T19:17:56.290 回答
1

将角度反馈回 IFFT 不会隔离相位。您需要一个具有相同角度但幅度为 1 的复数。您不需要表示角度的实数。表达相位相关性的一种方法是对共轭乘法的结果进行归一化:

outt = trans.*conj(chtrans);
outt = outt ./ abs(outt);
outt = real(ifft2(outt));

还有其他表达方式,但无论如何,镜像都会消失。要记住的一件事是,理想情况下,您的结果应该是纯真实的。任何虚部都是由于舍入误差。如果你发现你需要对结果执行 abs() ,你可能做错了什么。

于 2012-05-18T21:19:06.110 回答