私は2つの画像を持っています。1 つは参照イメージで、もう 1 つは参照イメージの回転バージョンです。2番目の画像が1番目の画像に対して回転する角度を知りたい.これを自動的に行いたい.
5 に答える
力ずくで!回転した画像の交点 (差の合計または各ポイント間の差の 2 乗の合計) を比較する関数を作成し、回転角度を反復処理して、最小の差に対応するものを見つけます。
matlab を知っていても、おそらく回転を伝えるだけの関数がありますが、それは奇妙なものと呼ばれています。
これを行う一般的な方法は次のとおりです。
SIFTなどのアルゴリズムを使用して、関心点記述子のリストを取得します。これらの記述子は、関心点のスケール、方向、およびジオメトリを提供します。ジオメトリ情報は、スケールおよび回転に対して不変です。
最近傍アルゴリズムを使用して、ジオメトリを比較することにより、各画像の関心点を一致させます。
一致する関心点の各ペアについて、スケールと回転を比較します。
理想的には、一致するすべての注視点の相対的なスケールと回転が同じになります。ただし、写真の撮影方法のばらつきと前の段階での不正確さにより、可変スケールと回転が導入されるため、次のようになります。
- RANSACなどのアルゴリズムを使用して、最適なスケールと回転を決定します。
QED
注:質問はもともと自動化されたソリューションを求めていなかったので、画像ごとにユーザーが一連のコントロール ポイントを選択する必要があるこのソリューションを投稿しました。質問の要件は更新されていますが、この回答は MATLAB で画像を登録したい人にとってはまだ役立つと思うので、ここに残しておきます...
自動化されていないアプローチ:
あなたが求めているのはimage registrationと呼ばれ、1 つのオプションはImage Processing ToolboxのCP2TFORM関数を使用することです。
実際、その関数のドキュメントには、解決しようとしているのとまったく同じ問題に取り組んでいるように見える非常に良い例があります。
これがコードです。
このアルゴリズムは、2つのオブジェクトが丸いという先験的な知識を使用します。YMMV
以下は、ローカル機能と Computer Vision System Toolbox の RANSAC を使用して 2 つのイメージ間の変換を復元する方法の例です。