6

私は現在、かなり一般的な問題に直面しています。これは非常に簡単に解決できるはずですが、これまでのところ、すべてのアプローチが失敗したため、あなたに助けを求めています。

問題はいくつかのイラストで最もよく説明されていると思います。私はこれらの2つのようないくつかのパターンを持っています:

パターン1 パターン3

私はまた、次のような画像を持っています(おそらく、これが元の写真の照明が非常に不十分だったため、より良いでしょう):

写真

(画像のサイズに合わせてテンプレートがどのように拡大縮小されたかに注意してください)

最終的な目標は、ユーザーが親指を上に向ける/親指を下に向けるジェスチャを表示するかどうか、およびその間のいくつかの角度を表示するかどうかを決定するツールです。そのため、パターンを画像と照合して、どれが画像に最も似ているか(より正確には、手が示している角度)を確認したいと思います。パターン内で親指が表示されている方向がわかっているので、同じように見えるパターンを見つけた場合は、角度もわかります。

私はOpenCV(Python Bindingsを使用)を使用していて、すでにcvMatchTemplateとMatchShapesを試しましたが、これまでのところ、実際には確実に機能していません。

MatchTemplateが失敗した理由は推測できますが、白が小さい小さいパターンは画像の白い領域に完全に収まるため、実際には同じようには見えないことは明らかですが、最適な一致係数が作成されると思います。

まだ見つけていないOpenCVに隠されているメソッドがいくつかありますか、それとも再実装する必要があるこれらの種類の問題に対する既知のアルゴリズムがありますか?

あけましておめでとう。

4

3 に答える 3

7

いくつかの簡単なテクニックが有効です:

  1. 二値化とセグメンテーションの後、ブロブのフェレの直径 (別名、ポイント間の最も遠い距離、または主軸) を見つけます。
  2. ポイント セットの凸包を見つけて塗りつぶし、連結領域として扱います。元の画像を親指で引きます。違いは親指と拳の間の領域であり、重心に対するその領域の位置は、回転の指標を与えるはずです。
  3. ブロブ エッジまでの各ポイントの距離に流域アルゴリズムを使用します。これは、接続された薄い領域 (親指) を識別するのに役立ちます。
  4. ブロブ内の最大の円 (または最大の内接多角形) に合わせます。エッジの一部が背景と重なるまで、この円または多角形を拡張します。この膨張した図を元の画像から差し引きます。親指だけが残ります。
  5. 手のサイズが一貫している (または比較的一貫している) 場合は、親指が消えるまで N 回のモルフォロジー侵食操作を実行し、N 回の拡張操作を実行して拳を元のおおよそのサイズに戻すこともできます。元の BLOB からこの握りこぶしのみの BLOB を減算して、親指の BLOB を取得します。次に、親指ブロブの方向 (フェレの直径) および/または最初のブロブの重心に対する重心を使用して、方向を決定します。

臨界点 (方向が大きく変化する領域) を見つける手法は、よりトリッキーです。最も簡単な方法としては、コーナー検出器を使用して、あるコーナーから別のコーナーまでの距離をチェックして、親指の内側の端が拳と接触する場所を特定することもできます。

より複雑な方法については、Kimia、Siddiqi、Xiaofing Mi などの著者による形状分解に関する論文を参照してください。

于 2011-12-30T17:06:36.450 に答える
1

MatchTemplateは、あなたが説明する問題に適しているようです。それはあなたにとってどのような点で失敗していますか?サンプル画像で示したように、サムズアップ/サムズダウン/サムズイン間のサインを実際にマスキングしている場合は、すでに最も困難な部分を行っています.

MatchTemplate には、検索スペースに回転とスケーリングが含まれていないため、検出したいすべての回転で参照画像からより多くのテンプレートを生成する必要があり、見つかったサムズアップ/親指の一般的なサイズに一致するようにテンプレートをスケーリングする必要がありますダウンサイン。

[編集] MatchTemplate の結果配列には、画像内のテンプレートがその位置にどの程度適合しているかを示す整数値が含まれます。CV_TM_SQDIFF を使用すると、結果配列の最小値が最適な位置になり、CV_TM_CCORR または CV_TM_CCOEFF を使用すると、それが最大値になります。スケーリングおよび回転されたテンプレート画像の白いピクセルの数がすべて同じである場合は、すべての異なるテンプレート画像について見つけた最適の値を比較でき、全体的に最適なテンプレート画像が選択されます。

おそらく役立つ回転/スケーリングの独立した検出関数がたくさんありますが、MatchTemplate で動作するように問題を正規化するのが最も簡単です。

より高度なものについては、 SIFTHaar feature based classifiers、またはOpenCV で利用可能な他のいずれかをチェックしてください

于 2011-12-27T14:56:11.083 に答える
1

白を通過する最短経路を持つ 2 つのポイントを計算するだけで、優れた結果が得られると思います。親指が指している方向は、2 点を結ぶ線の方向です。

これは、白い領域のポイントをサンプリングし、 Floyd-Warshallを使用することで簡単に実行できます。

于 2011-12-29T23:57:38.057 に答える