一种检测图像中线条的好方法?
edge-detection
feature-detection
image-processing
opencv
16
0

我编写了一些代码,这些代码使用OpenCV库检测草绘的白线。我需要别人对我使用的方法的意见(因为我敢肯定有比我更好的方法)。另外,我得到的结果也不如我预期的好,因为图像中的细微变化需要调整参数(并且我需要对固定参数进行操作)。

到目前为止,我的方法:

  1. 从网络摄像头抓取图像(并明显变成灰度)
  2. 通过阈值过滤器运行它(使用THRESH_TO_ZERO模式,其中将阈值以下的所有像素清零)。
  3. 图像模糊
  4. 通过侵蚀过滤器运行
  5. 通过Canny边缘检测器运行
  6. 最后,使用此处理后的图像并使用概率霍夫变换HoughLinesP查找行

我应该改变过滤器的顺序吗?

PS:我不太在乎处理能力。我在GPU B上运行HoughLinesP

另外,这是一个示例图像: 原始图像

我得到的结果:与canny 与康妮不使用Canny(参数略有调整) 这次没有精明

任何帮助或指导将不胜感激!我只是不知道该怎么做才能改善它!

更新根据选择的答案使用非常快速的骨架实现(带有模糊的TONS)后,我得到了: 有用!

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我使用Canny拍摄室内图像,但是对于室外使用,我发现比应用概率霍夫线变换(PHT)更适合使用Laplace滤镜和Sobel滤镜。

如果您想加粗您的线,您应该在Laplace之后尝试Sobel运算符 ,最后再尝试PHT。如果您的图像太管闲,可能会变得更糟。

收藏
评论

一种可能的解决方案是获取从精明边缘检测中获得的所有边缘点,并在这些点上使用线性最小二乘法(可能迭代)来拟合一条线。这样,您总是得到一条“最适合”边缘点的线。这种方法实际上没有参数化。

收藏
评论

我会尝试使用图像的骨架表示 。您的精明问题在于,由于线条的宽度,它基本上会产生两条线条。

然后,我将对其进行霍夫变换。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题