それは確かに簡単ではありません...グラフ構造で完全に作業してみることができます。最初に、接続されているすべてのピクセルを画像から抽出し、隣接するノードがエッジで接続されているグラフに挿入します。M個のノードよりも小さいグラフは破棄できます(画像に関係のない小さなスポットを除外するため)。
このプロセスの最後に、切断された一連のグラフが作成されます。(あなたの画像から判断すると、それらはそこにサイクルがあるので、正確にはツリーではありません)
ランダムノードから開始してDFSを実行すると、各グラフの極値点(各グラフの周辺の極値ピクセル)を見つけることができます。
このプロセスの最後に、接続が形成される可能性が高い極値点に対応する各グラフのピクセル座標のセットがあります。
これで、最も近い極値点(距離<= 5)を単純に直線で接続することができます。
ただし、その極値ピクセルにつながるラインセグメントの傾斜を考慮したい場合は、その極値ピクセルに到達する前にNピクセルに「線を合わせる」ことができます。したがって、N = 5の場合、ラインの推定にブランチの最後の5ピクセルが使用されます。
したがって、最近接ペアごとに、2つのセグメントを接続する必要があるかどうかを判断するための基準として使用する別のものもあります(つまり、極値点距離<= 5ピクセルANDほぼ等しいラインスロープ)。
枝の先端近くで線がギザギザに見える(したがって、勾配推定を歪める)ノイズの影響を最小限に抑えるには、グラフに単純化手順を適用してみてください(これは、上記のDFS以外の別のポイントです)グラフ構造を操作します)。たとえば、グラフの後続のノードを削除して、カットオフよりも大きな角度で線を「曲げる」ことができます(より複雑なものについては、こちらを参照してください)。このようにして、イメージピクセルによって形成されるセグメントの大部分の方向にほぼ「単純な」線をフィットさせます。
それはおそらく、あなたが投稿した画像から判断して、大部分のケースで適切なつながりをもたらすでしょうが、それでもあなたにはいくつかの挑戦的なものが残っています。たとえば、接続ポイントの近くで分岐の1つが中断される「Y」字型の中断されたパターンは、どのように接続されますか?(つまり、「連続」ベンドがあり、それを「ブレンド」する線分に接続する必要があります)。おそらく、このようなケースがどれほど一般的であるかを確認し、後で接続基準を修正することができます。
また、画像取得を改善する方法を検討する価値があるかもしれません(たとえば、解像度を上げる)。