【问题标题】:detecting lines in matlab在matlab中检测线条
【发布时间】:2016-11-19 23:58:35
【问题描述】:

我正在尝试检测这张图片中白线的数量:

我已尝试使用以下链接中的代码:How to calculate the number of lines of text in an image in MATLAB

RGB = imread('test image.jpg');
GSC = rgb2gray(RGB);
BW = imbinarize(GSC);
figure
imshowpair(GSC,BW,'montage')
se = strel('line',size(BW,2),0);
out = imdilate(BW,se);
[~,num] = bwlabel(out);

但是,我检测到的白线数量不正确。我得到的总行数是 1。

【问题讨论】:

  • 正确答案是 5 还是 9?
  • @MarkSetchell 我会说 9.... 我当然希望它得到我的回答,哈哈。如果是 5,那就是做更多的后期处理。
  • @MarkSetchell 嗯,我决定解决这两种情况。谢谢你的鼓励!
  • @rayryeng 非常感谢您的帮助!!!!
  • @MauriceMoh 不客气。祝你好运!

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


【解决方案1】:

我是您引用的帖子的原作者。请注意,问题和后续答案旨在检测图像中的文本行。您的图像不包含文本,因此它显然不会开箱即用。以后在使用代码时,请阅读并确保您按照预期的方式使用它。

具体来说,当您对图像使用我的方法时,整个背景都是白色的,因此您需要消除背景。如果您不这样做,那么线条和背景将计为一个对象,这就是为什么您只计算 1 个对象。例如,当您对图像进行二值化而不进行任何处理时,您会得到以下结果:

这不是图像的良好表示。请注意,在您提供的链接中,背景和文字非常简单。文本完全是白色的,文本完全是黑色的。你的背景稍微复杂一些。背景是灰色的,而一些物体是黑色的,整个物体上有一些白线。我发现对解决您的问题有用的一件事是使用图像的阈值。我选择了 0.9 来移除背景以及对象的背景以保持线条完整。我使用了 MATLAB R2016a 之前版本的 im2bwimbinarize 是 R2016a 及更高版本的一部分,但您应该能够在这两种方法之间进行交换。我将直接从 Stack Overflow 引用您的图像以使其可重现:

im = imread('https://i.stack.imgur.com/yKd4V.jpg');
BW = im2bw(rgb2gray(im), 0.9); % or BW = imbinarize(rgb2gray(im), 0.9);
figure; imshow(BW);

我们现在得到这张图片:

这样好多了。因为图像中已经有线条,所以这使问题变得非常简单。您链接的帖子会找到文本中的总行数,这就是为什么需要使用跨越图像宽度的线元素进行膨胀的原因。您已经有线条,因此不需要这种膨胀。因此,只需计算此图像中有多少个非零区域即可完成:

[~,num] = bwlabel(BW);

我们看到有:

>> num

num =

     9

虽然您没有指定,但如果需要连接左侧和右侧的行(即在您的情况下,有 5 行而不是 9 行),您当然可以使用您提供的链接中的扩张逻辑将线条合并在一起。在这种情况下,您需要使结构元素的垂直范围更厚。原因是因为左右两侧的线有轻微的垂直偏移,因此指定更大的垂直范围将确保在您扩张时这些线连接起来。因此,不要用线制作一个跨越图像宽度的矩形框。我这里随意选择了5个像素的高度:

se = strel('rectangle', [5, size(BW, 2)]);
out = imdilate(BW, se);

我们现在得到这张图片:

这看起来很不错....现在如果你数一下有多少行:

>> [~,num] = bwlabel(out)

num = 

     5

【讨论】:

  • 优秀 - 另一个顶级的分析和解决方案!
  • @rayryeng 既然您谈到了矩形结构元素,请您提供一些关于应该考虑什么样的元素和什么类型的形态操作来使黑色粗线(水平和垂直)消失或提取的见解在这张图片中line_grid 而其他信息保持不变?我尝试了基本侵蚀,但它增加了噪音。我尝试了您使用图像宽度大小的线元素的方法,但是存在许多不同大小的线段连接符号。我需要根据线条的粗细过滤线条。
  • @SKR 请提出一个新问题。这不适合作为评论。
  • @rayryeng 当然,感谢您的指导。我放在那里。
  • @rayryeng 这个问题已经在post 重新表述和重新组织。
猜你喜欢
  • 2014-12-29
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多