位相相関-ノイズ/ぼやけた画像のパフォーマンスが悪い?


9

1D 位相相関アルゴリズムのテストに成功し、2つの合成画像間の垂直シフトを特定しました。

しかし、実際の画像に移動すると、変換をまったく検出できません(ピークが0にあり、これは間違った結果です)。

次の画像があります。

ここに画像の説明を入力してください ここに画像の説明を入力してください

そして、結果の位相相関(マグニチュード、リアル、イマジナリー):

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

画像の最初のスキャンラインは完全に白ですが、シフトは明らかに大きくなります(20ピクセル)。

予想される結果は、20行目の白い線で、合成画像または光ノイズでのみ発生します。

私のアルゴリズムは非常に単純です-各画像列について:

  1. ソースおよびターゲット画像列の1D FTを計算します(a=FT(A)b=FT(B)
  2. クロスパワースペクトルの計算(cross_power = a *. conj(b) / |a *. conj(b)|)- *.点ごとの乗算をconj(x)示し、複素共役を示します
  3. 位相相関の計算(phase = IFT(cross_power)
  4. のすべての列で最大等級を見つけますphase
  5. コンセンサスピークの場所を見つける(たとえば、検出されたピークの場所の中央値)

実世界の(ノイズの多い)画像を処理するためにベースライン位相相関アルゴリズムを改善する方法を教えてください。

FFTベースの位相相関ではなく、NCC(正規化相互相関)を使用する必要がありますか?


更新

私はゼロパディングを試し、循環シフト(画像の単純な線形シフトのみが望ましい)によって引き起こされるエラーを除外し、Wikipediaの元の画像でこれをテストしました。

ここに画像の説明を入力してください ここに画像の説明を入力してください

単一のピークが存在するはずなので、明らかにそこにあります。

ここに画像の説明を入力してください

ただし、ノイズを減らして実際に結果を改善するためにわずかなスムージング(ガウスぼかし)を実行すると、位相相関が完全に損なわれます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

ここに画像の説明を入力してください

これが拡張バージョンです-元のピークは弱く(なぜ??)、ゼロシフトの周りに新しいピークが現れました(なぜ??):

ここに画像の説明を入力してください


ご覧のように、位相相関画像の最大ピークは対応するシフトを示しています。ただし、これらの画像間の相互相関の実際の振幅が何であるかはわかりません。
Eddy_Em 2013

@Eddy_Em実数部と虚数部に個別の画像を生成し、しばらくして投稿に追加します。これまでのところ、大きさの情報しかありません。
Libor

ウィキペディアでの参照では、2Dフーリエ変換を使用するように言われています。なぜ1D変換を使用するのですか?
Peter K.

1
ええ、でも、リンゴとリンゴを比較する必要があります。各画像の同じ列を比較するだけでは、期待どおりの結果が得られません。動きが十分に大きい場合、列間にはまったく相関関係がありません。画像全体を考慮する必要があります。機能する可能性のある1つの方法は、両方の画像の行を合計し、それに対して1D作業を行うことです。
Peter K.

1
@PeterK。これは2Dでした-位相相関がWikiの記事のように出て、反転しているだけであることを確認しました(おそらく、クロスパワースペクトルまたは反転した入力/出力を計算するときの乗数の反転が原因です)。平滑化(ガウスウィンドウ)は最終結果に本当に害を及ぼすことがわかりましたが、その理由はわかりません。低周波数データを処理する場合、位相相関が弱いように見えるので、代わりに正規化相互相関を最後に使用します。
Libor 2013

回答:


10

一次元バージョン

リストした1次元バージョンは機能しません。画像に十分なシフトがある場合(実世界の画像では1ピクセルまたは2ピクセル以上)、列ピクセルに関連するものは何もありません。

この例として、次を試してください:

I5 = rand(100,100)*255;
I6 = zeros(100,100);
I6(11:100,22:100) = I5(1:90,1:79);

I5ができるように:

ここに画像の説明を入力してください

とI6:

ここに画像の説明を入力してください

次に、1次元の位相相関は次のとおりです。

ここに画像の説明を入力してください

一方、2次元の位相相関は次のとおりです。

ここに画像の説明を入力してください

少しわかりにくいですが、画像の右下隅に非常に高いピークがあります。1次元バージョンには明確なピークはありません。

平滑化が役に立たないのはなぜですか?#1

相関関係が実行しようとしているのは、各画像の「類似した」変化を見つけることです。基礎となる信号が十分にランダムである場合、これはうまく機能します。ホワイトノイズとそれ自体の相関は、原点に非常に良いピークを与え、他の場所ではゼロに近くなります。

ガウス分布で「ランダムな」画像を平滑化すると、期待する相関関係を平滑化する効果が得られます---すべてのピークのエネルギーがより広い領域に分散されます。

スムージングは​​、画像を「プレホワイトニング」するのとは逆の効果があります。プレホワイトニング(名前が示すように)は、画像をホワイトノイズのようなものにしようとします-これは、相関ベースの検出(ピークが十分に局所化されている)を行う場合に最適な形式です。

あなたがやったほうがいいのはdiff、単純化された、しかし驚くほど効果的な、画像を事前に白くする方法としてmatlab 操作を使用することです。

この例を参照してください。

平滑化が役に立たないのはなぜですか?#2

なぜスムージングは​​余分なピークを引き起こすのですか?

カーネルで各画像を平滑化する場合 k(x,y) その後、次のようになります。

ha=gakhb=gbk
どこ 畳み込みです。

さて、

Ha=KGaHb=KGbR=HaHb|HaHb|=|K|2GaGb|K|2|GaGb|=GaGb|GaGb|

(確信はありませんが)私が起こっていると思うのは、おそらくカーネルに周波数領域でゼロに近い値があり、数値の問題を引き起こしているということですか?

カーネルを適用する場合:

K = one(5,5);

私のランダムな画像に、私は得ます:

ここに画像の説明を入力してください

2次元相関の場合、ピークがさらに広がりますが、発生している問題は発生しません。


ありがとうございます。私が抱えている問題は、ピークがローカライズされているだけでなく、完全に間違った位置に表示されることです。私は最終的にJPLewis: "Fast Normalized Cross-Correlation"を読みました。これは、位相相関にはさまざまな場所でのイメージエネルギーの変化に問題があるため、事前フィルタリングを適用する必要があることを示しています。するだろう。問題は、カットオフ周波数が事前に不明であり、高すぎるまたは低すぎるしきい値が再びマッチングを損なうということです。でもやってみます。
Libor 2013

1
オフトピック:「信号の白化」を検索するGoogleが練り歯磨きについて多くのことを教えてくれるのはおかしいです:D
Libor 2013

2

信号を白色化して位相相関から良好なパフォーマンスを得る最も簡単な方法は、振幅の対数を取ることです。結果の相関面からノイズを除去することもできます。詳細については、「イメージ登録の位相相関の改善」、(ICVNZ2011)Proceedings of(ICVNZ2011)Image and Vision Computing New Zealand 2011、p.488-493、http: //www98.griffith.edu.au/dspace/bitstream/handle/を参照してください。 10072/44512 / 74188_1.pdf?sequence = 1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.