在应用canny边缘检测后的openCV中,我想进一步处理结果(仅显示水平线,删除短线等)。但是canny的结果只是另一个形象。我想获得一系列描述检测到的边缘的线
我知道着名的Hough Line Transform,但结果并不总是好的,这就是我想手动处理精简结果的原因。 输入:
仅输出canny:
输出canny然后Hough线变换
这是用于检测楼梯边缘的霍夫线变换结果(红线)。尽管canny边缘检测到边缘,但未正确检测到下面的第4行。
知道如何从精确图像中提取边缘吗?
答案 0 :(得分:14)
您可以尝试改善结果的一些事项:
您的图片看起来有一些边界窗口效果。我用一个感兴趣的区域删除它们,得到一个看起来像这样的图像(我调整它直到看起来正确,但如果你使用某种内核操作符,它的窗口大小可能更好地定义了这个ROI):
你似乎也在使用概率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)
您可以通过拍摄最常出现的线角度并丢弃异常值来过滤掉不良线条。这应该缩小到最明显的步骤。
希望有所帮助!
答案 1 :(得分:7)
我建议使用LSWMS(使用加权平均移位的线段检测)方法。 它的结果优于HT和PPHT。
请参阅 http://marcosnietoblog.wordpress.com/2012/04/28/line-segment-detection-opencv-c-source-code 和 http://www.youtube.com/watch?v=YYeX8IGOAxw