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」が検出されますが、画像は2倍になります。正しい結果がありますが、同じ最終画像で正しい結果が反転しています。これの何が問題になっていますか?

4

2 に答える 2

1

これはフーリエ変換の機能であり、正と負の両方の周波数成分を検出します。必要に応じて、ネガティブな部分は無視してかまいません。

于 2012-05-18T19:17:56.290 に答える
1

角度をIFFTにフィードバックしても、位相は分離されません。同じ角度で大きさが1の複素数が必要ですが、角度を表す実数は必要ありません。位相相関を表現する1つの方法は、共役乗算の結果を正規化することです。

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

それを表現する方法は他にもありますが、いずれにせよ、鏡像は消えてしまいます。覚えておくべきことの1つは、結果は理想的には純粋に本物である必要があるということです。架空のコンポーネントは、丸め誤差が原因です。結果に対してabs()を実行する必要がある場合は、おそらく何か間違ったことをしました。

于 2012-05-18T21:19:06.110 に答える