从canny边缘检测中提取线条

Moa*_*sry 7 opencv edge-detection

在应用canny边缘检测后的openCV中,我想进一步处理结果(仅显示水平线,删除短线等).但是canny的结果只是另一个形象.我想获得一系列描述检测到边缘的线条

我知道着名的Hough Line变换,但结果并不总是好的,这就是为什么我想手动处理canny结果.输入:

在此输入图像描述

仅输出canny:

在此输入图像描述

输出canny然后Hough线变换

在此输入图像描述

这是用于检测楼梯边缘的霍夫线变换结果(红线).尽管canny边缘检测到边缘,但未正确检测到下方的第4行.

知道如何从canny图像中提取边缘吗?

mev*_*ron 15

您可以尝试一些改进结果的方法:

申请感兴趣的地区

您的图像看起来有一些边界窗口效果.我用一个感兴趣的区域删除它们,得到一个看起来像这样的图像(我调整它直到看起来正确,但如果你使用某种内核操作符,它的窗口大小可能更好地定义了这个ROI):

在此输入图像描述

使用标准Hough变换

你似乎也在使用概率Hough变换.因此,您只获得线段而不是插值线.考虑使用标准变换来获得完整的理论线(rho,theta).这样做我得到了如下图所示的图像:

在此输入图像描述

这是我用来生成行的代码片段(来自Python界面):

(mu, sigma) = cv2.meanStdDev(stairs8u)
edges = cv2.Canny(stairs8u, mu - sigma, mu + sigma)
lines = cv2.HoughLines(edges, 1, pi / 180, 70)
Run Code Online (Sandbox Code Playgroud)

根据角度过滤线条

您可以通过采用最常出现的线角度并丢弃异常值来过滤掉不良线条.这应该缩小到最明显的步骤.

希望有所帮助!


ham*_*med 8

我建议使用LSWMS(使用加权平均移位的线段检测)方法.它的结果优于HT和PPHT.

请参阅 http://marcosnietoblog.wordpress.com/2012/04/28/line-segment-detection-opencv-c-source-codehttp://www.youtube.com/watch?v=YYeX8IGOAxw