目标
通过本篇文章的学习,你将学习到以下内容:
- 霍夫变换(
Hough Transform
)的概念 - 霍夫变换直线检测原理详解
- 学习使用OpenCV的Python接口调用函数:
cv.HoughLines()
,cv.HoughLinesP()
前言
霍夫变换是一种特征检测(feature extraction
),被广泛应用在图像分析(image analysis
)、计算机视觉(computer vision
)以及数位影像处理(digital image processing
)。
霍夫变换(Hough Transform
)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间(parameter space
)中,通过计算累计空间(accumulator space
)中局部最大值(local maximum
)得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough
首次提出,后于1972年由Richard Duda
和Peter Hart
推广使用,经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。
1. 什么是霍夫变换直线检测
Hough
直线检测的基本原理在于利用点与线的对偶性,在我们的直线检测任务中,即图像空间中的直线与参数空间中的点是一一对应的,参数空间中的直线与图像空间中的点也是一一对应的。这意味着我们可以得出两个非常有用的结论:
- 图像空间中的每条直线在参数空间中都对应着单独一个点来表示。
- 图像空间中的直线上任何一部分线段在参数空间对应的是同一个点。
因此Hough直线检测算法就是把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里寻找峰值来完成直线检测任务。
2. 霍夫变换直线检测原理详解
对于直角坐标系中的任意一点 A ( x 0 , y 0 ) A(x_0,y_0) A(x0,y0),经过点 A A A的直线满足 y = m x + c y=mx+c y=mx+c( m m m是斜率, c c c是截距),那么在 x − y x-y x−y平面过点 A ( x 0 , y 0 ) A(x0,y0) A(x0,y0)的直线族可以用 y 0 = m x 0 + c {y_0}=m{x_0}+c y0=mx<