2

スキャン (撮影した写真) のポイント セットをテンプレートのポイント セット (画像の青、緑、赤、ピンクの円) に一致させる最良の方法は何ですか? opencv/c++ を使用しています。多分ある種のICPアルゴリズム?スキャン画像をテンプレート画像にラップしたい!

テンプレート ポイント セット: テンプレート画像

スキャンポイントセット: スキャン画像

4

4 に答える 4

1

赤い長方形に合わせる必要がありますか? 元の画像には、マッチング用に作成されたと思われる四隅に黒い四角形が含まれています。4行の Mathematica コードで確実に見つけることができます:

lotto = [source image]
lottoBW = Image[Map[Max, ImageData[lotto], {2}]]

これは、各ピクセルに max(R,G,B) を使用します。つまり、赤と黄色のプリントを (多かれ少なかれ) 除外します。結果は次のようになります。

bw フィルター結果

次に、Log フィルターを使用してダーク スポットを見つけ、結果の画像で極大値を探します。

lottoBWG = ImageAdjust[LaplacianGaussianFilter[lottoBW, 20]]
MaxDetect[lottoBWG, 0.5]

結果: ここに画像の説明を入力

于 2011-12-09T10:40:30.383 に答える
1

オブジェクトが適度に剛性があり、整列している場合、単純な自己相関でうまくいきます。そうでない場合は、RANSACを使用して、サブジェクトとテンプレートの間の変換を推定します (特徴点があるようです)。問題の詳細を教えてください。

編集: RANSAC (Random Sample Consensus) を使用できます。テンプレート内の不要なポイントをノイズ (フィーチャ検出器によって検出された偽のフィーチャ) と考えてください。これらはアウトライナーです。RANSAC は、特徴点の小さなサブセット (モデルを開始できる最小量) をランダムに選択し、モデルを開始して、モデルが特定のデータにどの程度一致するか (テンプレート内の他の点が対応する点) を計算するため、アウトライナーを処理できます。他の点)。間違ったサブセットを選択すると、この値が低くなり、モデルを削除します。適切なサブセットを選択すると、それは高くなり、LMS アルゴリズムを使用して一致を改善できます。

于 2011-12-08T09:40:57.377 に答える
0

次の手順を実行します:

  1. 2 つの画像のポイントまたはフィーチャを一致させます。これにより、ラッピングが決定されます。
  2. ラッピングのために探している変換を決定します。最も一般的なものはホモグラフィ (cv::findHomography() を参照) であり、あまり一般的でないものは単純な翻訳 (cv::matchTempalte() を使用) です。中間のケースは、x、y および回転に沿った移動です。このために、適切なメトリック (座標の二乗差) を最適化しながら自由度が少ないため、ホモグラフィよりも優れた高速関数を作成しました: https://stackoverflow.com/a/18091472/457687
  3. 一致に多くの外れ値があると思われる場合は、手順 1 に加えて RANSAC を使用します。基本的には、パラメータを見つけるために必要な最小限のポイント セットをランダムに選択し、解決し、インライアを決定し、すべてのインライアを使用して再度解決し、試行を繰り返す必要があります。現在のソリューションを改善する (インライアの数を増やす、エラーを減らす、またはその両方)。RANSAC アルゴリズムについては、ウィキペディアを参照してください: http://en.wikipedia.org/wiki/Ransac
于 2013-08-07T00:01:51.497 に答える