2012-04-27 4 views
2

私は、スキャンされた部分のすべての可能性をディレクトリ内のイメージとして取得する、Cで部分スキャナを作成しています。私のコードは現在、そのディレクトリからすべてのイメージを取り出し、ベクトルにダンプします。私はすべての画像の輪郭のグループを生成します。その後、プログラムはWebカメラから画像を取得し、それらの輪郭を生成するwhileループに入ります。私は部品を載せるための治具を設置していますので、向きや大きさは問題ではありませんが、機械を校正する必要はないので、テンプレート画像と撮影された部品画像の間に動きがあるかもしれません。バイナリパターンイメージの2つの輪郭を比較するにはどうすればよいですか?

輪郭を比較する最良の方法は何ですか?私は輪郭のないmatchTemplateを含むいくつかのメソッドを試しましたが、下の2つの部分を見れば、これらの2つが非常に近いことがわかります。したがって、matchShapesとmatchTemplateでは、それら。また、cvMatchShapesの使い方もわかりません。マッチする図形にイメージを直接読み込むだけで動作しますが、結果は確定的ではありません。私は輪郭が行く方法だと思う、私はちょうど比較フェーズを実装する方法について行くのか分からない。どんな助けも素晴らしいだろう。

あなたがここにテンプレートを表示することができますhttp://www.cryogendesign.com/partDetection.html距離画像 『(輪郭に、画素ごとに最小のユークリッド距離を割り当てる」

+0

[OpenCVマッチングイメージ](http://stackoverflow.com/questions/8893539/opencv-matching-images) – karlphillip

+0

またはこのhttp://stackoverflow.com/questions/9444142/comparing-images-forの複製が可能です-similarity – karlphillip

答えて

1

をあなたがのために準備ができている場合は日曜大工は、1つのアプローチは、計算することができ』 http://en.wikipedia.org/wiki/Distance_transformを参照

この距離画像を使用すると、新しい輪郭の参照距離に対する平均距離を迅速に計算できます(すべての輪郭ピクセルについて、距離画像からの距離を取得します)。 distanceは適合度を示し、一連の参照テンプレートと最もよく一致するものを見つけることができます

パーツに動きの自由がある場合、状況は少し難しくなります。平均距離を計算する前に、新しい輪郭を基準に合わせる必要があります。適切な変換(翻訳、回転、スケーリング)を適用し、平均距離を最小にするパラメータを見つける必要があります。

+0

これが不明な場合は、私にもっとお気軽にお問い合わせください... –

0

あなたは、2つの輪郭間の面取り距離を計算することができます

chamfer

TEは、テンプレートと画像とxの辺の集合は、あなたが比較を開始する基準点であります2組のエッジ。だからそれぞれxあなたは異なる値を得る。

DTは、画像の距離変換です。 Matlabはアルゴリズムhereを提供します。

面取り距離の計算方法の詳細については、hereを参照してください。

関連する問題