基于Hough变换的MATLAB二值图像标注

时间:2015-11-09 02:10:16

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

我有这个二进制图像:

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

我尝试了Hough变换。但是,正如您所看到的那样找不到所有行。 有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

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

一些想法:

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