【发布时间】:2019-07-29 23:27:12
【问题描述】:
我有一张有 2 条边的图片
如果我然后用下面的代码绘制边缘的边界:
imshow(I); hold on; [B,L,N] = bwboundaries(I);
for k=1:length(B),
boundary = B{k};
BL=size(boundary);
plot(boundary(1,2), boundary(1,1), '*g','MarkerSize',15);
for j=1:10:BL(1)
plot(boundary(j,2), boundary(j,1), '.r','MarkerSize',5);
end
end
如上图所示,左边缘的起点(绿色星号)位于图像的左侧,这是我的预期。但是,右边缘的起点是朝向中间的
显然这是因为bwboundaries 处理顺时针方向跟踪对象,而第二条边缘需要逆时针跟踪才能在图像的右边界开始和结束
Matlab 如何能够从bwboundaries 中获取位置并正确确定右侧边的端点?
【问题讨论】:
-
起始点只是以列优先顺序遍历图像时遇到的第一个像素。
-
我认为您将边界(对象的边缘)与线(一维结构)混淆了。 stackoverflow.com/questions/50359485/… 。另外,请编辑您的问题,而不是在 cmets 中添加信息。这些 cmets 并不意味着持久。在这里进行长时间的讨论是没有意义的。编辑您的问题以澄清和改进它。
-
我认为你需要一个全新的算法。你不应该在这里使用
bwboundaries,Cris 已经提到它是如何工作的。我建议也许对每个形状进行骨架化,然后寻找端点 - 基本上,任何在本地 3 x 3 邻域中只有一个连接邻域的点。这可以通过使用带有 3 x 3ones内核(中间为 0)的卷积并找到仅输出 1 值的点来执行。
标签: matlab image-processing edge-detection