1. 霍夫变换简介
- 目的 :从图像中分离出具有某种相同特征的几何形状
霍夫变换是图像处理中 从图像中识别几何形状 的基本方法之一
最基本的霍夫变换是从黑白图像中检测直线
在图像处理中可以通过霍夫变换可以快速的检测出直线或圆
2. 霍夫线变换
霍夫线变换是用来寻找图片中直线的方法
2.1. 检测图片的条件
首先要对图像进行 边缘检测 的处理
也即霍夫线变换的直接输入只能是 边缘二值图像,如下图:
2.2. 直线的表示
一条直线在图像二维空间可由两个变量表示,如:
- 在笛卡尔坐标系:可由参数 斜率 k 和 截距 b 表示:y = kx + b
不过,由于直线的斜率可能为无穷大,或者无穷小
那么在k-b参数空间就不便于对直线进行描述和刻画 - 在极坐标系:可由参数(r, θ)极径和极角表示
对于霍夫变换,将用极坐标系来表示直线
参考 y=kx + b,直线的表达式可为:
化简结果: = xcosθ + ysinθ
一般来说对于点(x0, y0)
可以将通过这个点的一簇直线同一定义为:
= x0cosθ + y0sinθ
这就意味着对于每一对(r, θ)代表一条通过点(x0, y0)的直线
2.3. 所有通过点的直线
如果对于一个给定点(x0, y0)
在极坐标对极径极角平面绘出所有通过它的直线,将得到一条正弦曲线
如对于给定点 x0 = 8 和 y0 = 6,可以绘出下图:
2.4. θ - r 相交
对图像中所有点进行上述操作:历遍 ,得到 ,得到所有通过点的直线的表达
如果两个不同点经过上述操作后得到的曲线在平面
相交
就意味着 它们可以在同一条直线上
继续对存在的点 x1=9,y1=4 和 点 x2=12, y2=3 历遍操作,得到下图:
这三条曲线在
平面相交于点(0.925, 9.6)
那么参数对(θ, r)为点(x0, y0),(x1, y1)和(x2, y2)组成的平面内的直线
2.5. 阈值定义直线
一般来讲,一条能够通过在平面
寻找交于一点的曲线数量检测
越多曲线交于一点也就意味着这个交点表示的直线由更多的点组成
一般来说可以通过设置直线上点的阈值
来定义多少条曲线交于一点认为检测到了一条直线
图像中的每个点对应曲线间的交点,如果交于一点的曲线数量超过了阈值
那么可以认为这个交点所代表的参数对(θ, rθ)在原图像中为一条直线
3. 霍夫圆变换
霍夫圆变换的基本原理和霍夫线变换类似
只是点对应的二维极径极角空间被三维的圆心点x、 y及半径r空间取代
对圆来说,需要三个参数来表示一个圆 C:(X0, Y0,
)
(X0, Y0) 表示圆心的位置,
表示半径
现在原边缘图像的任意点(x,y)对应的经过这个点的所有可能圆
圆的数学的数学表达式为:(x - x0)2 +(y - y0)2 = r2
是在三维空间由上面这三个参数来表示了,对应一条三维空间的曲线
与二维的霍夫线变换同样的道理
对于多个边缘点越多,这些点对应的三维空间曲线相交于一点
那么经过共同圆的点就越多
类似的可以用同样的阈值的方法来判断一个圆是否被检测到
这就是标准霍夫圆变换的原理
但也正是在三维空间计算量大,标准霍夫圆变化很难被应用到实际中
谢谢!
转载:https://blog.csdn.net/qq_32618327/article/details/104464099