スキャン (撮影した写真) のポイント セットをテンプレートのポイント セット (画像の青、緑、赤、ピンクの円) に一致させる最良の方法は何ですか? opencv/c++ を使用しています。多分ある種のICPアルゴリズム?スキャン画像をテンプレート画像にラップしたい!
テンプレート ポイント セット:
スキャンポイントセット:
スキャン (撮影した写真) のポイント セットをテンプレートのポイント セット (画像の青、緑、赤、ピンクの円) に一致させる最良の方法は何ですか? opencv/c++ を使用しています。多分ある種のICPアルゴリズム?スキャン画像をテンプレート画像にラップしたい!
テンプレート ポイント セット:
スキャンポイントセット:
赤い長方形に合わせる必要がありますか? 元の画像には、マッチング用に作成されたと思われる四隅に黒い四角形が含まれています。4行の Mathematica コードで確実に見つけることができます:
lotto = [source image]
lottoBW = Image[Map[Max, ImageData[lotto], {2}]]
これは、各ピクセルに max(R,G,B) を使用します。つまり、赤と黄色のプリントを (多かれ少なかれ) 除外します。結果は次のようになります。
次に、Log フィルターを使用してダーク スポットを見つけ、結果の画像で極大値を探します。
lottoBWG = ImageAdjust[LaplacianGaussianFilter[lottoBW, 20]]
MaxDetect[lottoBWG, 0.5]
結果:
オブジェクトが適度に剛性があり、整列している場合、単純な自己相関でうまくいきます。そうでない場合は、RANSACを使用して、サブジェクトとテンプレートの間の変換を推定します (特徴点があるようです)。問題の詳細を教えてください。
編集: RANSAC (Random Sample Consensus) を使用できます。テンプレート内の不要なポイントをノイズ (フィーチャ検出器によって検出された偽のフィーチャ) と考えてください。これらはアウトライナーです。RANSAC は、特徴点の小さなサブセット (モデルを開始できる最小量) をランダムに選択し、モデルを開始して、モデルが特定のデータにどの程度一致するか (テンプレート内の他の点が対応する点) を計算するため、アウトライナーを処理できます。他の点)。間違ったサブセットを選択すると、この値が低くなり、モデルを削除します。適切なサブセットを選択すると、それは高くなり、LMS アルゴリズムを使用して一致を改善できます。
次の手順を実行します: