5

下の画像は、アンチエイリアシングでレンダリングされた同じ半径の 2 つの円を示していますが、左側の円が水平方向に半ピクセルずれているだけです (円の水平方向の中心が左側のピクセルの中央にあり、右側のピクセル境界にあることに注意してください)。 )。

相互相関を実行すると、相関配列の最大値の位置を取得して、シフトを計算できます。しかし、ピクセル位置は常に整数であるため、私の質問は次のとおりです。

「Numpy/Scipy で相互相関を使用して、2 つの画像間のサブピクセル (浮動小数点) オフセットを取得するにはどうすればよいですか?」

私のスクリプトでは、 または のいずれかを使用していますがscipy.signal.correlate2dscipy.ndimage.filters.correlate同じ結果が得られるようです。

ここの円は単なる例ですが、私のドメイン固有の機能にはサブピクセル シフトがある傾向があり、現在は整数シフトしか得られないため、あまり良い結果が得られません...

どんな助けでも大歓迎です!

ここに画像の説明を入力

4

2 に答える 2

4

離散相互相関 (それらによって実装される) は、単一のピクセル精度しか持つことができません。私が見ることができる唯一の解決策は、2D 配列をより細かいグリッド (アップサンプリング) に補間することです。

相互相関前のアップサンプリングに関する DSP に関する議論を次に示します。

于 2012-12-05T23:08:54.553 に答える
4

私は非常によく似た問題を抱えており、円がシフトしていて、Adam Ginsburg による 'image registration' と呼ばれる素晴らしい Python パッケージに出くわしました。サブピクセルの 2D 画像シフトを提供し、かなり高速です。これは、x 相関のピーク付近の画像のみをアップサンプリングする、人気のある MATLAB モジュールの Python 実装だと思います。

確認してください: https://github.com/keflavich/image_registration

私は「chi2_shifts.py」を使用しており、良い結果が得られています。

于 2015-01-28T11:17:35.310 に答える