8

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

我知道著名的Hough Line Transform,但结果并不总是好的,这就是为什么我想手动处理精明的结果。输入:

在此处输入图像描述

仅输出精明:

在此处输入图像描述

输出精明然后霍夫线变换

在此处输入图像描述

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

知道如何从精明的图像中提取边缘吗?

4

2 回答 2

15

您可以尝试一些事情来改善您的结果:

应用感兴趣区域

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

在此处输入图像描述

使用标准霍夫变换

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

在此处输入图像描述

这是我用来生成这些行的代码片段(来自 Python 接口):

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

根据角度过滤线

您可以通过获取最常出现的线角度并丢弃异常值来过滤掉不良线。这应该将其缩小到最明显的步骤。

希望有帮助!

于 2012-06-05T18:00:55.597 回答
8

我建议使用 LSWMS(使用加权均值位移进行线段检测)方法。其结果优于HT和PPHT。

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

于 2012-06-25T05:38:21.553 回答