6

前景が白のバイナリ イメージがあります。その中心軸骨格の分岐点と終点から、グラフを作成したいと思います。理想的には、次の構造を使用します。

  1. [nodes] は [ID XY] の形式で、X、Y は分岐点または終点のピクセル位置、ID はノードの ID (整数) です。
  2. [edges] の形式は [ID N1 N2] で、N1 と N1 はノードの ID を表します。

[ノード] と [エッジ] の両方を使用して、スケルトンを無向グラフ表現にマッピングします。

以下のコードを使用すると、ブランチとエンドポイントを計算できますが、これらを適切に接続する必要があります。

skelImg   = bwmorph(im, 'thin', 'inf');
branchImg = bwmorph(skelImg, 'branchpoints');
endImg    = bwmorph(skelImg, 'endpoints');

[row, column] = find(endImg);
endPts        = [row column];
[row, column] = find(branchImg);
branchPts     = [row column];

figure; imshow(skelImg); hold on; plot(branchPts(:,2),branchPts(:,1),'r*'); hold on; plot(endPts(:,2),endPts(:,1),'*');

入力画像 (左側)、そのスケルトン (中央)、および対応する分岐点と終点 (右側) の例を以下に示します。

または、次の URL の完全な解像度でも: http://imgur.com/a/a3s4F/

4

2 に答える 2

1

最初のステップとして、 BFSバリアントを使用することをお勧めします。ノードは白いピクセルであり、2つのピクセルが隣接している場合はエッジがあります。これにより、不要なノード、つまり分岐点/終点ではない点を含む完全グラフが提供されます。

ここで重要な観察結果があります。不要なノードにはそれぞれ正確に2つのエッジが含まれています。そうでない場合は、分岐点または終点になります。

したがって、不要なノードをすべて再帰的に削除し始めます。

While there are nodes that are not branchpoints/endpoints
    Select one of these nodes.
    Merge its two edges into one by removing the node.
于 2012-10-19T11:27:08.503 に答える
1

考えられる解決策は次のとおりです。

getting branched points (bp) from skeleton
getting edges : edges=skeleton-bp
getting end points from edges
adding branched points in a graph
getting endpoints neighbouring branched points and linking
adding remaining endpoints in the graph
linking endpoints

networkxを使用したPython 実装では、次の結果が得られます。 B のスケルトンからグラフへ

于 2013-06-05T11:12:19.567 に答える