2012-11-09 19 views
7

私は十字を見つける必要があるバイナリ画像のセットを持っています(添付の例)。私はバイナリイメージから境界線を抽出するためにfindcontoursを使います。しかし、私はどのように私はこの形(国境)のクロスかどうかを判断することができます理解できませんか?たぶんopencvには、この問題を解決するのに役立つ組み込みのメソッドがいくつかあるかもしれません。私は機械学習を使ってこの問題を解決すると考えましたが、これを行う簡単な方法があると思います。ありがとう!画像の十字を見つける

Cross on binary image

cross on binary image 2

答えて

2

Viola-Jones object detection良いスタートである可能性があります。アルゴリズム(AFAIK)の主な用途は顔検出ですが、実際には十字架のようなオブジェクト検出のために設計されています。

アルゴリズムは機械学習ベースのアルゴリズムです(したがって、分類された「十字」と分類された「十字」のセットが必要です)。重要な「特徴」(パターン)を特定する必要があります。アルゴリズムが十字を認識するのに役立ちます。

アルゴリズムは、あなたの要件に応じてcvHaarDetectObjects()

0

としてのOpenCVで実装されている、あなたはSIFTまたはSURFのようないくつかの地域の特徴検出器を試みることができます。それには後者の興味深い実装であるOpenSURFをチェックしてください。

+0

クロスラインボーダー上にある異なるポイントは同じSIFT記述子を持つため、これは機能しません。 –

+0

ああ、私は見ている...十字架の周りの円は常に存在するとは限りませんか? (どちらの例も円内の十字を示しています) –

0

私はここで唯一堅牢な方法はSVM + HOGを使用することであるという結論に達しました。それで全部です。

2

元の画像から、潜在的にあなたの十字になる可能性のあるポリゴンのセットを抽出したとします。すべての辺が長さを持つように区別できる程度に、すべての十字が表示されていると仮定すると、次のことを試すことができます。

  • は あなたの多角形を形成するために必要な正確に12の頂点を持っていなかったすべてのポリゴンを拒否します。

  • 最短エッジ長が最初になるように頂点を並べ替えます。

  • 均一なサイズのクロスにあなたの頂点をマップするベストフィットperspective transformationを作成

  • 均一クロス、残留任意の点のために戻ってあなたのクロスを投影し、この変換を用いて生成された残差を調べ投影された点と対応する一様な点との間の距離である。

  • すべての残差が定義された許容値内にあれば、十字が見つかります。

これは主に、検索している幾何学的形状の単純さのために機能することに注意してください。あなたの等高線もノイズが除去されている必要があります。十字の各行を単一の単純な線に変換する必要があります。

0

それぞれのブロブを腐らせて、それらのピクセル数を分析することができます。十字の回転スケーリングは、残りの中心を閉じるときを除いて、常に同じ比率で降りてください。繰り返しますが、小塊が十分に小さい場合は、小塊が元の小塊の中心にあることを期待する必要があります。これを解決するために、機械学習アルゴリズムやトレーニングデータは必要ありません。

関連する問題