【问题标题】:How make endpoints of bwboundaries consistent in Matlab?如何在 Matlab 中使 bwboundaries 的端点保持一致?
【发布时间】: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 3 ones 内核(中间为 0)的卷积并找到仅输出 1 值的点来执行。

标签: matlab image-processing edge-detection


【解决方案1】:

不是您问题的完整答案,而是我想出的一个想法。您可以检查边界的所有点是否与图像边界“接近”,然后找到最小/最大 (x, y) 值,这将描述您感兴趣的那些“端点”。

B = bwboundaries(img);

% Threshold for "closeness" to an image border.
thrNear = 5;

for k = 1:numel(B)

  b = B{k};

  nearTop = b(:, 1) < thrNear;
  nearBottom = b(:, 1) > (size(img, 1) - thrNear);
  nearLeft = b(:, 2) < thrNear;
  nearRight = b(:, 2) > (size(img, 2) - thrNear);

  closeToTop = b(nearTop, :)
  closeToBottom = b(nearBottom, :)
  closeToLeft = b(nearLeft, :)
  closeToRight = b(nearRight, :)

end

例如,对于原始图像中的正确形状,您会得到:

closeToTop = [](0x2)
closeToBottom = [](0x2)
closeToLeft = [](0x2)
closeToRight =

    79   283
    79   284
    79   285
    79   286
    79   287
    80   287
    81   287
    81   286
    81   285
    81   284
    81   283
   215   283
   215   284
   215   285
   215   286
   215   287
   216   287
   217   287
   217   286
   217   285
   217   284
   217   283

现在,寻找最大的 x 值 (287),并找到合适的(非相邻)y 值(79-81 与 215-217)。对每个图像边框重复此操作。

希望你明白我的意思。老实说,我不想完全实现它,但如果我的描述不够精确,请不要犹豫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多