如何将图像的锯齿状边框平滑成直线?

时间:2014-10-28 17:48:31

标签: image matlab image-processing

我有这样的图像(阈值处理,噪声消除等完成):

Original Image

我的最终输出应该是没有任何锯齿状边缘的图像,并且小于给定图像。通过这个,我的意思是说,两个图像之间的唯一区别必须是在新图像中,锯齿状边缘必须删除,而不是填充在 >。像这样(最终图像必须是红色边框内的区域,红色边框仅用于说明):

Image showing how final border should be

我正在考虑使用Hough变换,或者使用扩张然后使用糜烂的方法,但似乎没有任何工作(可能是我的错,因为我之前没有对它们进行太多细节)。 / p>

请注意,我喜欢的语言是MATLAB。

这有两个主要目标:

  1. 使用Hough变换获取边缘本身
  2. 使用regionprops时,'Extrema'属性会返回所需的品脱,如下所示:
  3. enter image description here

    问题,以更简洁的形式:

    1. 我如何在MATLAB中提取这个T,这样它没有粗糙的边缘,但整体图形不大于原始图形,如上图第二图所示?换句话说,我将使用什么样的变换集(在MATLAB中)来平滑图像的边界,尽可能少地丢失区域(但没有添加区域)坚固性消失了吗?
    2. 是否有更有效的方法来提取角点(极值)点,如上图2所示,而无需通过步骤1?
    3. 编辑: 还有一些样本图片:

      注意:考虑的所有图像将由彼此大约90°的矩形组成,而不是其他图形。因此,例如,对具有弯曲边缘的图像进行平滑处理将超出对该问题的答案的范围(或者甚至,就此而言,梯形,尽管我认为平滑2个直边应该是相同的,不管是否边缘有另一条与之平行的边缘。)

      以下是一些图片供参考:

      reference image 2 reference image 3, proof of my not-so-great GIMP skills

1 个答案:

答案 0 :(得分:2)

我不确定我的答案是否符合您的要求。我把它放在这里因为我觉得评论太长了。

  • 因为您希望最终输出小于输入图像,否则会侵蚀输入图像。您可以选择合适的内核大小。
  • 对此侵蚀图像执行角点检测。这将为您提供所有强大的角落,但没有任何订单
  • 追踪侵蚀图像的边界。这应该给你一个有序的边界像素列表
  • 现在,在这些有序边界点的帮助下,您可以订购先前找到的角落
  • 过滤角点,形成大约90度的角度。考虑到每个3个有序角点(两个绿点和下图中的红点),你可以这样做。这只是为了说明,而不是我计算的角点。在这个操作结束时,你有所有红点除了其他黄色和绿色角点之外,下面的图像位于强角处)
  • 现在你可以找到连接2个连续红点的线的等式

  • 将最小二乘线拟合到每两个连续红点之间的点(包括)

  • 由于您对侵蚀图像进行了所有这些处理,该图像基本上小于原始图像,因此您应该获得更小的形状

enter image description here