2013-07-17 14 views
5

現在、バイナリイメージに別々の「ブランチ」を格納するためのきれいな方法を探しています。この小さなアニメーションは、それを説明する:OpenCV:単一ピクセルブランチに沿ったピクセルの検索

searching for branches

私は、単一ピクセル幅の枝を構成するピクセルのインデックスを収集する必要が枝に沿って行くように。接合点に当たったら、新しい分岐を分割して保存する必要があります。

3x3小領域を作成し、その中に白いピクセルがあるかどうかを調べ、それに応じて移動し、2つ以上ある場合は接合点を作成する方法があります。前の部分領域を常に保存して、すでにスキャンした領域に移動しないようにします。 どうすればいいのか分かりにくいです。

基本的には、「ライン/カーブ」階層に基づいてピクセルを並べ替える必要があります。アプリケーションの別の部分では、図形を再描画します。図形は、内部的には点間の線を作成するため、「順序付け」する必要があります。

+0

この接続点はノードと単一ピクセル幅の枝である[グラフのトラバーサルの問題(http://en.wikipedia.org/wiki/Graph_traversal)、のように見えるが、グラフのエッジです。任意の初期点から始めて、[幅優先検索](http://en.wikipedia.org/wiki/Breadth-first_search)や[深さ優先検索]のようなグラフトラバーサルアルゴリズムを適用して、すべての分岐と接合点を発見することができます](http://en.wikipedia.org/wiki/Depth-first_search) – Alexey

+0

また、[接続されたコンポーネントのラベル](http://en.wikipedia.org/wiki/Connected-component_labeling) – Alexey

+0

@prayここで検索する必要がありますか?支店から出発して支店に沿って移動することは制約ですか?イメージ全体を「見る」ことができれば、ブランチをグループ化しラベルを付ける方が簡単です。あなたができない場合は、深さの最初の検索が必要で、別のものを検索するためにジャンクションに戻ってください。アレクセイが今すぐ提案したように、毎回データを保管してください。 – baci

答えて

1

あなたのケースでそれを適用できるかどうかわかりませんが、cv :: findContourを見てください。 注文したポイントのベクトルが表示されます。

http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

+0

ああ、それを試みた。 findContoursは、単一ピクセルの線とうまく一致しません。後でデータを使ってやりたいことにはあまり適していません。 – prayforbacon

+0

あなたはROIで遊ぶことができるかもしれませんが、あなたのポイントを注文するためには、私はより良くすることはできません... – Poko

+0

私はばかです。このメソッドは、あらかじめ適用された間引きを使用して機能します。 – prayforbacon

関連する問題