エッジ検出器によって検出されたエッジの接続


14

キャニーエッジ検出器から取得したバイナリイメージがあります。エッジは中央でうまく検出されないので、それらを結合する必要があります。エッジの接続は方向と近傍に依存します。しきい値(5ピクセル未満の距離など)を下回る場合は、頂点を接続する必要があります。私のほぼ線形の特徴がうまく方向付けられている場合、このしきい値を緩和する必要があります。(これが最良のケースです。) 画像

ハフ変換を試してみましたが、直線がないのでうまくいきませんでした。膨張と収縮も良くありません。彼らは画像をより面倒にします。

私が試みているアプローチは、最初に頂点とノードを検出し(MATLABでbwmorph)、その後、別の機能として葉を作成します。これは次のように行われます。

  1. 3x3ウィンドウでスキャンし、隣人を探します。
  2. 接続されたオブジェクト全体をトラバースします。
  3. 線(または2次多項式)を近似しようとします。
  4. 接続する価値があるかどうかは、機能ごとに確認してください。

頂点を接続する必要がある意思決定の部分は難しいため、実装は簡単ではありません。


ブランチを見つけるための興味深い解決策を見つけました。MATLABは、ノードの位置を容易に提供できます。MATLABは、接続されたフィーチャにラベルを付けることもできます。そのため、接続された機能を1つ選択できます。ノードを検索します。これらのノードを0に設定します。基本的に機能を切断し、再度ラベルを付けます。木に枝があります。これにより、手動でのプログラミングが少なくなり、結果は良好と思われます。入力がありますか?
ナレシュ

接続部分については、大きな機能を見つけて、より信頼性の高いものにすることを考えています。次に、それらが直線の場合(フィットネスの品質を確認)、極座標に変換し、ハフ変換のように近傍を検索します。大きなフィーチャの場合、検索半径は大きくなります(サイズに比例)。このコードを実装しています。途中結果。コメントpls。
ナレシュ

回答:


4

これは完全な解決策ではないかもしれませんが、良い方向を示します。

基本的に、エッジが一致するという重要な基準は何ですか?エッジの勾配が「局所的に」一致し、距離がエッジが連続している長さに対してある程度合理的であること。

長い直線のような幾何学的なエッジがある場合、ハフはすぐに非常にシームレスな仕事をします。しかし、エッジが任意の曲線である場合、これは機能しません。この場合、曲線はおおよそピース単位の定数セグメントと考えることができます(この場合は十分です)。したがって、ローカルでハフを取る必要があります。つまり、画像の小さな部分(ブロックなど)を取得してハフを計算し、いくつかのピークを特定できます。これに基づいて、デハフが有意なギャップを作り出していることを特定できます。

小さい隙間が埋められると、同じ隙間を広げてより大きなサイズを占めることができます。ピークはより多くなりますが、より少ないピークを選択できます。


Dipanに感謝、私もそう思いました。コストのかかる操作になりますが、いくつかの情報を抽出できます。しかし、時々Hoguhの変換によって接続線が提供されないこともあります。ハフは完全な直線のみを処理します。そして、ピクセルの接続性は気にしません。直線上の3つ以上のランダムピクセルに直線を合わせるだけです。私は自分の仮説をコーディングしています。さらなる議論のために、ここに結果を投稿します。ナレシュ
ナレシュ

θ

4

それは確かに簡単ではありません...グラフ構造で完全に作業してみることができます。最初に、接続されているすべてのピクセルを画像から抽出し、隣接するノードがエッジで接続されているグラフに挿入します。M個のノードよりも小さいグラフは破棄できます(画像に関係のない小さなスポットを除外するため)。

このプロセスの最後に、切断された一連のグラフが作成されます。(あなたの画像から判断すると、それらはそこにサイクルがあるので、正確にはツリーではありません)

ランダムノードから開始してDFSを実行すると、各グラフの極値点(各グラフの周辺の極値ピクセル)を見つけることができます。

このプロセスの最後に、接続が形成される可能性が高い極値点に対応する各グラフのピクセル座標のセットがあります。

これで、最も近い極値点(距離<= 5)を単純に直線で接続することができます。

ただし、その極値ピクセルにつながるラインセグメントの傾斜を考慮したい場合は、その極値ピクセルに到達する前にNピクセルに「線を合わせる」ことができます。したがって、N = 5の場合、ラインの推定にブランチの最後の5ピクセルが使用されます。

したがって、最近接ペアごとに、2つのセグメントを接続する必要があるかどうかを判断するための基準として使用する別のものもあります(つまり、極値点距離<= 5ピクセルANDほぼ等しいラインスロープ)。

枝の先端近くで線がギザギザに見える(したがって、勾配推定を歪める)ノイズの影響を最小限に抑えるには、グラフに単純化手順を適用してみてください(これは、上記のDFS以外の別のポイントです)グラフ構造を操作します)。たとえば、グラフの後続のノードを削除して、カットオフよりも大きな角度で線を「曲げる」ことができます(より複雑なものについては、こちらを参照してください)。このようにして、イメージピクセルによって形成されるセグメントの大部分の方向にほぼ「単純な」線をフィットさせます。

それはおそらく、あなたが投稿した画像から判断して、大部分のケースで適切なつながりをもたらすでしょうが、それでもあなたにはいくつかの挑戦的なものが残っています。たとえば、接続ポイントの近くで分岐の1つが中断される「Y」字型の中断されたパターンは、どのように接続されますか?(つまり、「連続」ベンドがあり、それを「ブレンド」する線分に接続する必要があります)。おそらく、このようなケースがどれほど一般的であるかを確認し、後で接続基準を修正することができます。

また、画像取得を改善する方法を検討する価値があるかもしれません(たとえば、解像度を上げる)。


良い反応をありがとう。はい、あなたの観察は正しいです。ツリーではないので、グラフを作成する方が良いでしょう。これは、サイクルを見つけるのにも役立ちます。つまり、MATLABはbioinfoツールボックスにグラフを実装しましたが、これはほとんどの人が持っているとは考えられません。私ができることのほとんどは、画像処理ツールボックスです。ダグラス・プッカーも私が検討したものです。しかし、GISの専門家に相談した後、物事がより複雑になり、線が交差する可能性があることに気付きました。また、グラフを作成するのに10ピクセルが必要なので、グラフ内のさまざまな線分も調べる必要があります。すでに分岐している可能性があります。
ナレシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.