Hough线变换

算法核心思想

任何一条直线斜截式表达式y=a*x+b,可以转换成参数空间的表达式b=y-a*x。所以,图像空间的任何一条直线有固定的a和b来确定,转换成参数空间都是一个点(a, b);同时,图像空间中经过任何一点(x0,y0)的所有直线在参数空间就是一条直线。Hough变换就是将图像中每一个点转换成参数空间的一条直线,这样,参数空间中如果两条直线相交于一点(a0,b0),就说明这两条直线对应的图像空间中的点在同一条直线上,并且这条直线的方程为y=a0*x+b。

实际应用中,因为斜截式不好表示竖线,常使用极坐标表示,这样每点对应的参数线就是曲线。常用到累加器单元来统计参数空间中相交于一点的曲线个数。简言之,就是把参数空间的两个坐标轴划分为小的片段,这样整个参数空间就被划分为了小的方格,统计经过每个方格的参数曲线个数,并输入一个阈值,如果经过方格的曲线个数大于阈值就认为这些曲线对应的图像空间点在一条直线上。

具体到图像的直线检测中,常用步骤为:

1、对输入图像使用Canny等边界算法求边界,得到一副边界的二值图像。图像背景用黑色表示,边界用白色表示。

2、对所有的边界点做Hough变换,背景点忽略不处理。

3、统计参数空间中所有格子的经过曲线个数并排序。

4,、根据输入的阈值来选出参数空间格子。

5、画出参数空间对应的直线。

posted @ 2018-07-23 17:26  JorSean  阅读(293)  评论(0编辑  收藏  举报