RANSAC 算法可能是一个很好的方法。这种方法类似于 regression 要么 interpolation 方法。你应该在使用后提取积分 edge detection (最好的方法是 canny 为了这个目标,我认为)。那你应该找到最好的路线。为了找到通过几个点的线,有不同的方法,如线性回归或RANSAC。您可以找到有关的实施和说明 RANSAC 算法 这个链接 。
RANSAC
regression
interpolation
edge detection
canny
请注意,RANSAC和此目标的另一个有用的算法是 already implemented 在 OpenCV (正如我在3.2版中所知)和 Accord NET (图像处理的免费库)。
already implemented
OpenCV
Accord NET
一种可能的解决方案是获取从canny边缘检测获得的所有边缘点,并在这些点上使用线性最小平方(可能是迭代)拟合线。这样,您总能得到一条“最适合”边缘点的线。这种方法几乎没有涉及参数化。
我会尝试使用 骨架表示 图像。你的canny的问题在于,由于线条的宽度,它基本上会产生两条线。
然后我会对它应用Hough变换。
在您的上一个结果(在骨架过滤器之后)之后,您将获得许多小段。我认为你在这一点上处于非常好的位置,以实现本文所做的工作:
http://www.cs.ubc.ca/~lowe/papers/aij87.pdf
基本上,它们提供的工具可以根据图像属于同一对象的可能性重新组合图像中的不同要素。因此,您所要做的就是将结果提供给他们的算法,结果您可能会得到一行。
我使用Canny用于室内图像,但对于室外我发现更适合拉普拉斯滤波器和Sobel滤波器,而不是应用概率Hough线变换(PHT)。
如果你想要粗线,你应该试试 索贝尔运营商 拉普拉斯之后,最后是PHT。如果你的形象过于多管闲事,可能会变得更糟。