【问题标题】:Matlab - Frame lines in Hough TransformMatlab - 霍夫变换中的框架线
【发布时间】:2018-03-11 14:01:42
【问题描述】:

我在 Matlab 中实现 Hough-Radon 变换来检测一些模式(主要是直线)。我已经实现了它,但问题是它还将“框架”检测为一条线(见图)。

实现这个的代码基本上是:

[H,T,R] = hough(BW,'RhoResolution',0.6,'Theta',-90:0.5:89.5);
P  = houghpeaks(H,20,'threshold', ceil(0.1*max(H(:))));
lines = houghlines(BW,T,R,P,'FillGap', 15,'MinLength',50);

其中lines是由字段组成的结构体:

  • 起点。
  • 结束点。
  • 角特萨
  • 距离罗

有什么办法可以去掉这四个框架线?

编辑:

进行霍夫变换前的原图为:

【问题讨论】:

  • 以前从未见过。你确定那些不在BW 中吗?无论如何,你可以从P 中删除它们,因为你知道这4行的参数。
  • 我已经用 Hough Transofrm 之前的原始图片更新了问题。由于所需的线具有相同的角度,因此无法按角度移除它们。并且每次的点都是不同的,所以不能通过这种方式删除。还有其他想法吗?
  • 那不是 BW 图像,因为它不是二进制的。你如何对其进行二值化?
  • P 包含每条线的角度和距离。您可以找出这些线对应的角度和距离并将其删除。为什么每次都说分数不一样?有哪些要点?在霍夫空间?是随机的???
  • 关于我所说的点(这是每条线的起点和终点),我有几张类似的图像(但不相等),所以每次我执行霍夫变换和我得到了线条,“框架”线条略有不同。例如,第一次从位置 (1,1) 开始,下一次从 (2,4) 开始。所以我不能通过删除特定位置来过滤它们,因为每次都是不同的(并且可能我想要检测的真实线非常靠近框架)。

标签: matlab transform hough-transform


【解决方案1】:

问题在于您的预处理。查看您放入hough 的二进制图像BW:其中包含这些行。

我建议您将二值化替换为以下内容:

BW = imbinarize(I, 128);
BW = bwmorph(BW,'skel');

【讨论】:

  • 有了这个,我几乎明白了。垂直线消失了,但水平(框架线)仍然存在。我也用 n=inf 检查过。
  • @Pep:是的,图像外面有一些线条,我认为它们太微妙了,Otsu 无法识别它们。但也许您需要手动找到更好的阈值。我已经用手动阈值(128)更新了答案。调整此值,直到您只在 BW 图像中看到感兴趣的线。
  • 根据 Matlab 的帮助,阈值应该在 0 和 1 之间,不是吗?
  • 不,我认为这只是您想要设定阈值的值。我假设您的输入在 0-255 范围内。你也可以只做BW=I>128
  • 我终于有了!我用过 imbinarize(I, 'adaptive', 'Sensitivity', 0.01);我只得到中心线,没有“框架”。非常感谢!
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多