我编写了一些代码,使用OpenCV库来检测草地上的白线。我需要某人对我使用的方法的看法(因为我确信有比我更好的方法)。此外,我得到的结果不如我预期的好,因为图像中的微小变化需要调整参数(我需要对固定参数进行操作)。
到目前为止我的方法:
我应该更改过滤器的顺序吗?
P.S。我不太关心处理能力;我正在GPU B上运行HoughLinesP - )
此外,这是一个示例图像:
我得到的结果: 与canny 没有canny(略微调整参数)
任何帮助或指导将不胜感激!我只是不知道如何改进它!
更新 在根据所选答案使用非常快速的骨架实现(使用TONS of blur)之后,我得到了这个:
答案 0 :(得分:14)
我会尝试使用图片的skeleton representation。你的canny的问题在于,由于线条的宽度,它基本上会产生两条线。
然后我会对它应用Hough变换。
答案 1 :(得分:5)
一种可能的解决方案是采用从canny边缘检测中获得的所有边缘点,并在这些点上使用线性最小平方(可能是迭代)拟合线。通过这种方式,您总能得到一条最适合的线路。边缘点。这种方法几乎没有涉及参数化。
答案 2 :(得分:4)
我使用Canny用于室内图像,但对于室外我发现拉普拉斯滤波器和Sobel滤波器比使用概率Hough线变换(PHT)更合适。
如果你想要粗线,你应该在拉普拉斯之后尝试Sobel operator,最后是PHT。如果你的形象过于多管闲事,可能会变得更糟。
答案 3 :(得分:0)
RANSAC
算法可能是一个很好的方法。此方法类似于regression
或interpolation
方法。您应该在使用edge detection
之后提取积分(我认为这个目标的最佳方法是canny
)。那你应该找到最好的路线。为了找到通过几个点的线,有不同的方法,如线性回归或RANSAC。您可以在this link中找到有关RANSAC
算法的实施和说明。
请注意,RANSAC和此目标的另一个有用算法是already implemented
OpenCV
(正如我在3.2版中所知)和Accord NET
(用于图像处理的免费库) )。
答案 4 :(得分:0)
根据您的上一个结果(在骨架过滤器之后),您会获得许多小段。我认为你在这一点上处于非常好的位置,以实现本文所做的工作:
http://www.cs.ubc.ca/~lowe/papers/aij87.pdf
基本上,它们提供的工具可以根据图像属于同一对象的可能性重新组合图像中的不同要素。因此,您所要做的就是将结果提供给他们的算法,结果您可能会得到一行。