Tin*_*Tin 6 matlab image-processing
我有一个前景为白色的二进制图像.在其内侧轴骨架的分支点和端点之外,我想构建一个图形.理想情况下,具有以下结构:
通过使用[nodes]和[edges],我将拥有骨架到无向图表示的映射.
使用下面的代码,我可以计算分支和端点,但现在我需要正确连接它们:
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),'*');
Run Code Online (Sandbox Code Playgroud)
输入图像(左侧),骨架(中间)以及相应的分支点和终点(右侧)的示例如下:
或者在以下网址中的完整分辨率:http://imgur.com/a/a3s4F/
作为第一步,我建议使用BFS变体。节点是白色像素,如果两个像素是邻居,则存在边缘。这将为您提供一个完整的图表,其中包含不需要的节点,即不是分支点/端点的点。
现在,这是一个重要的观察,每个不需要的节点恰好包含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.
Run Code Online (Sandbox Code Playgroud)