相位相关char

时间:2012-05-18 18:11:34

标签: matlab octave

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

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”,但图像是双倍的:正确的结果,但是在同一个最终图像上也会翻转正确的结果。这有什么问题?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

将角度反馈回IFFT不会隔离相位。你想要一个具有相同角度的复数,但幅度为1.你想要一个代表角度的实数。表达相位相关的一种方法是归一化共轭乘法的结果:

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

还有其他表达方式,但无论如何,镜像都会消失。要记住的一件事是,你的结果理想上应该是纯粹的真实。任何虚构的组件都是由于舍入误差造成的。如果你发现你需要对结果做abs(),你可能做错了。