【发布时间】:2015-08-30 11:03:48
【问题描述】:
我正在尝试创建一个蒙版(或类似结果),以擦除未附加到边界包围的对象的二进制图像片段。我看到这个线程 (http://www.mathworks.com/matlabcentral/answers/120579-converting-boundary-to-mask) 从 bwboundaries 执行此操作,但我无法对其进行适当的更改。我的目标是使用此代码来隔离此地形图的连接部分,并去除多余的部分。我需要保留有界区域内的结构,因为然后我将使用 bwboundaries 创建主要对象的“内部”结构的附加边界线。
以下是我的代码,它首先通过搜索黑色区域的左下角像素来开始跟踪来创建单个边界线。它只是寻找不是完全白色的图像的第一列并选择最后一个黑色像素。第二部分是创建内部边界线。请注意,我正在尝试这两个步骤的过程,但是如果有一种方法可以只用一个方法来完成,我也想听听这个解决方案。最终,我只想要主要的大黑色区域及其内部的孔的边界,同时摆脱多余的部分。
figName='Images/BookTrace_1';
BW = imread([figName,'.png']);
BW=im2bw(BW);
imshow(BW,[]);
for j=1:size(BW,2)
if sum(BW(:,j))~=sum(BW(:,1))
corner=BW(:,j);
c=j-1;
break
end
end
r=find(corner==0);
r=r(end);
outline = bwtraceboundary(BW,[r c],'W',8,Inf,'counterclockwise');
hold on;
plot(outline(:,2),outline(:,1),'g','LineWidth',2);
[B,L] = bwboundaries(BW);
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2)
end
非常感谢任何建议或提示。如果有问题,请告诉我,我会更新帖子。谢谢!
编辑:为澄清起见,我的最终目标如下图所示。我需要追踪连接到主要对象的所有外部和内部边界,同时消除任何未连接到它的备用小块。
【问题讨论】:
标签: image matlab image-processing mask boundary