【问题标题】:Binary image labeling in MATLAB with Hough transformMATLAB中的二进制图像标记与霍夫变换
【发布时间】:2015-11-09 02:10:15
【问题描述】:

我有这个二进制图像:

我想标记位于同一行的像素 像这样:

我尝试了霍夫变换。但是,如您所见,它未能找到所有行。 有人知道吗?

【问题讨论】:

  • 可能与您使用的阈值有关,对吧?那些未识别的线具有较少的像素投票,因此您希望霍夫变换中这些线的“投票”强度更小。您是否尝试过更改阈值?
  • ...或降低霍夫空间分辨率,因为您的线条并不完全笔直。
  • 感谢您的 cmets
  • 我不确定霍夫变换是否是一个不错的选择。让我换个问题。我需要在 [这张图片][1] 中标记血管。我可以[分割血管][2],但唯一的问题是斑点连接在视盘上。我如何标记每艘船? [1]:i.stack.imgur.com/50MCC.jpg [2]:i.stack.imgur.com/dpCch.jpg
  • 您对自己的细分满意吗?我想使用 Frangi 过滤器可以改进它。对于标签,您可以使用分水岭来分离连接的段。

标签: matlab image-processing computer-vision image-segmentation


【解决方案1】:

霍夫对于这个应用程序应该很好。正如 Falimond 和 gfkri 建议的那样,对标准 Hough 技术进行一些参数调整会有所帮助。

一些想法:

  1. 不计算霍夫投票,而是确定行密度。一旦你找到了许多候选线,确定每条线在图像中占据的最大像素数。 (通过中心的线比通过拐角附近点的线长。)将 bin 计数 [votes] 除以最大可能的线长度以产生线密度。然后按线密度过滤。当您遵循此技术时,您通常需要为密度和最小长度设置阈值——您不希望找到恰好是直线但与它们所属的线稍微倾斜的 8 像素片段。
  2. 先放大图像;从外观上看,你可以扩张很多。当白色像素块膨胀时,沿着霍夫拟合线会有更高密度的点。膨胀后,您还可以对图像进行下采样(例如从 640x480 到 160x120)以减少必须处理的点数。 [您还可以应用高斯模糊来生成灰度图像。这将原始边缘点保持为最强峰。然后,您将在 Hough 累加器中使用加权强度值。]
  3. 作为 (2) 膨胀的替代方法,对于图像中的每个 (x,y) 白色像素,也为所有相邻像素的累加器箱添加投票:(x-1,y-1), (x , y-1), . . . (x+1,y+1)。这可能是对您的代码的更快更改。
  4. 降低角度分辨率。也就是说,如果您的 Hough 累加器使用 1 度角增量,请尝试 2​​ 度角增量。
  5. 获取 (R,theta) 累加器图 - 您可以将其视为一种 2D 强度图像 - 并在识别峰值之前对其进行平滑处理。如果您倾向于得到两条几乎重叠的线,您可能只需要平滑,因为您认为应该是一条线的点分散在双峰丛中。

长话短说:正如 gfkri 建议的那样,通过降低有效分辨率来简化任务。考虑拟合 N 像素粗的霍夫线段而不是 1 像素的霍夫线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多