如何使用matlab找到二进制图像的最长行

时间:2014-01-21 14:05:20

标签: matlab image-processing

enter image description here

正如您在图像中看到的,我的图像包含许多行。如何使用matlab获取最长的行,然后删除其他行?

2 个答案:

答案 0 :(得分:2)

首先,正如Lokesh A. R.所提到的,你想要的图像线并不是最长的,因为它不是连续的。

如果你真的想要找到那条线,那么看一下dilation,这将扩展线条,导致线条中的小间断连接,然后将线条缩回到相同的厚度。但是,这可能会使您不想连接的线路连接起来,并且除非图像中的线条足够远,否则可能不可靠。

如果你真的只想要最长的一行,那么我建议一个算法(你必须编码)

  1. 迭代图像像素
    1. 将您迭代的每个像素标记为“已访问”
    2. 当你找到一个像素时,查看它的所有直接的9个邻居来检查该线是否继续,并且如果它继续(做同样的事情),跟踪它,跟踪它的长度,它在哪里开始(所以当你完成线后你知道回到哪里),以及哪些像素坐标是线的一部分(为了方便删除图像的其余部分)。
      1. 在跟随该行之后,返回到该行的起点并再次开始迭代。
  2. 分析您收集的行集合,并保留最长行(或像素数最多)的行。
  3. 将图像中的每个像素设置为黑色,除非它是您保留的一行的一部分。
  4. 这是用于检测图像中的对象的基本算法,并且matlab可能可以执行此步骤。看一下object detection上的mathworks页面,看看它是否可以“检测”图像中的线条并给出关于它们的统计数据(比如每个像素的数量)

答案 1 :(得分:0)

在这里,请阅读:http://www.mathworks.com/help/images/ref/houghlines.html

基本上应该回答你的问题。 HoughLines是检测线条的常用方法之一。