本文主要是介绍Hough变换与FCM算法相结合检测车道线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://blog.csdn.net/u010712012/article/details/87477554
之前一小段时间分析的三大块,车辆检测,车道线检测,车辆压线判别。
主要分析了一下车道线检测的优化问题,经过图像处理,canny边缘检测,Hough变换检测出的图如第二幅
因为车道是具有双边缘的,所以根据之前的车道线检测算法检测出来的直线会有不止一条,如果能够用一种算法把多条直线能够合并成一条车道线,能够对后面的违章压线变道判决减少很多干扰。
根据Hough变换的原理 https://blog.csdn.net/u010712012/article/details/86104053 ,原图坐标的直线在k,b空间就是点,把这些点反映到下面这个坐标
可以看出,一条车道线的多条检测出来的直线的斜率和截距差距一般不是很大,所以是否能够把这些代表直线的点聚类为一点,那么聚类结果的各点,就代表具体的那根车道线。
https://blog.csdn.net/u010712012/article/details/87952752
这篇文章描述了模糊C均值聚类算法,这个聚类算法通过计算隶属度矩阵U和类别中心C,得到最终的聚类中心,从而可以在这个场景下使用。
只需要把我们想要最终聚类出的车道线的条数明确,确定迭代次数,就能得到结果。
但是这里有一个明显的问题就是,FCM算法需要手动设置需要聚类出来的类数,假设一条道路有6条车道线,那么K=6,不同的场景车道线数量不同。这让人想到了无监督学习中的Kmeans算法,他的缺点也是需要人工先确定K值,且该值和真实的数据分布未必吻合,也易受到噪声点的影响,容易陷入局部最值,并不能有力地求到全局最优。所以个人感觉只适合于道路清晰的高速公路上,一旦有多辆车在内做干扰,或者路面老旧导致车道线不清晰,FCM并不能算是一个非常鲁棒的算法。
但是不可否认的是,FCM聚类算法使用的边缘去重和结构化过滤方法还是很有借鉴意义,可以起到稳固车道线的作用,从而对后续的车辆压线判别模型奠定了基础。
而且我们得到的(k,b)坐标轴,可以看出,在原图像坐标中的斜率为正的直线,都集中在右下角的点,很密集。而斜率负的很大的直线则分散在左上角而且距离比较大,按照聚类(物以类聚)的思想,应该是离得越远的点越没可能是一类。
可以考虑把斜率的 k = t a n θ k=tan\theta k=tanθ,这里的角度在斜率比较小的时候差距不大,但是有可能在斜率很大的时候,多条线之间的角度差距也不大
因为每条线的theta都有具体的值,每一条线的 θ \theta θ相减,如果角度差距超过设定的一个阈值的话,就代表不是一类,如果角度小于一类的,就看成是一类。就要看怎么和聚类的算法进行融合了
然后思考一下能不能把k,b坐标轴转变成 ρ , θ \rho,\theta ρ,θ极坐标空间,然后看FCM聚类算法是否能够解决上述的角度截距的问题。
得到聚类结果的斜率和截距(这里还是k,b),可以根据两点坐标把各车道线绘制出来如下:
这里绘图车道线的结果是贯穿整个图片的,最后融合起来。
这里效果还行吧。。。
3.
4.
后面如果转成极坐标空间更佳,会换过来。
这篇关于Hough变换与FCM算法相结合检测车道线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!