从Canny边缘检测提取线(extract lines from canny edge detect

2019-07-29 17:51发布

在OpenCV中施加Canny边缘检测后,我想进一步处理的结果(只显示水平线,除去短行,等等。)。 但精明的结果只不过是另一种形象。 我想获得描述所述检测到的边缘线的阵列

我知道著名的霍夫变换线 ,但结果并不总是好的,这就是为什么我想手动处理精明的结果。 输入:

输出精明只:

然后输出精明霍夫变换线

这是霍夫线变换结果(红色线),用于检测楼梯的边缘。 不能正确检测从下面第4行,虽然Canny边缘检测的边缘。

任何想法如何提取精明的图像的边缘?

Answer 1:

有几件事情可以尝试改善您的结果:

应用感兴趣区域

你的图像看起来有一些接壤的窗口作用。 我删除了他们的造成,看起来像这样的图像中的感兴趣区域(我调整它,直到它看上去正确的,但如果你正在使用某种形式的核运营商的它的窗口大小可能会更好定义这个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)

基于角滤波器线

你也许可以过滤掉,通过采取最频繁出现的线的角度,并扔掉离群差线。 这应该缩小它最明显的步骤。

希望帮助!



Answer 2:

我建议使用LSWMS(线段检测使用加权平均移动)方法。 它的结果是比HT和PPHT更好。

见http://marcosnietoblog.wordpress.com/2012/04/28/line-segment-detection-opencv-c-source-code和http://www.youtube.com/watch?v=YYeX8IGOAxw



文章来源: extract lines from canny edge detection