私は2つの画像(同じサイズ)を持っており、2番目の画像が最初の画像と同じであるかどうかを確認したいのですが、シフトがあります.したがって、より正式には、同じサイズの2つの行列A、Bがあり、部分行列B の発生は A で発生します。しかし、この写真は大きい (400x400) ため、効率的な方法が必要です。許容できる複雑さは O(n^3) です。実行できる方法はありますか、または画像を小さくする必要がありますか?:)
前もって感謝します。
私は2つの画像(同じサイズ)を持っており、2番目の画像が最初の画像と同じであるかどうかを確認したいのですが、シフトがあります.したがって、より正式には、同じサイズの2つの行列A、Bがあり、部分行列B の発生は A で発生します。しかし、この写真は大きい (400x400) ため、効率的な方法が必要です。許容できる複雑さは O(n^3) です。実行できる方法はありますか、または画像を小さくする必要がありますか?:)
前もって感謝します。
ありきたりの 2D 相互相関を使用して、最大値がどこにあるかを検出し、(x,y) オフセットを決定することができます。相互相関定理に従って、これをフーリエ領域で効率的に実装できます。
github の Matlab でこの簡単な例を参照してください。相互相関とピーク検出
編集
以下は、画像の厳密な位置合わせに関する短くてほとんど不完全なガイドです。相互相関のアイデアの要点は次のとおりです。1D ベクトルがあるとします。
t = [1 2 3 1 2 3 4 ]
このベクトルを -4 桁シフトして、新しいベクトルを作成しt2
ます。
t2 = [2 3 4 1 2 3 1]
ここで、とc
の間のいわゆる相互相関を調べます。t
t2
c = [1 5 11 15 17 25 38 37 28 24 29 18 8]
現在、この相互相関ベクトルには、38
位置またはインデックスに最大値があります7
。これを使用して、次のようにシフトを確認できます。
offset = round((7-(length(c)+1))/2)
offset = -4
ここlength()
で、相互相関結果の次元数またはこの次元の要素数を示します。
ここで明らかなように、空間領域での相互相関には多くの操作が必要です。ここで、空間領域の相関をフーリエ領域の乗算にリンクする、前述の相互相関定理が機能します。フーリエ変換は、必要な操作が非常に少ない多数の非常に高速な実装 (FFT) に恵まれているため、相互相関を決定するために使用されます。
医療画像アプリケーションでよく見られるように、衛星画像や休日の画像のスティッチングから、さまざまなソースからの画像のオーバーレイまで、いわゆる固定位置合わせに対処する方法は多数あります。
特定のケースでは、 Phase correlationを見たいと思うかもしれません。また、C ブックの Numercial レシピには、フーリエと相関に関する章が含まれています。
この問題は、文献では「2 次元パターン マッチング」として知られています (ヒント: google it)。
これは、最適アルゴリズムと単純アルゴリズムの両方を説明する論文です。
もう 1 つの一般的な用語は「サブマトリックス マッチング」ですが、これは通常、完全一致ではなく特定のレベルのあいまいさが必要な場合に使用されます。このようなアルゴリズムの例を次に示します。