霍夫变换

1.直线检测

对于直线y=mx+b中的一个点可以表示为r = x cos\theta + y sin\theta可以避免m为无限或者不存在的情况

其中r是原点到直线上最近点的距离(其他人可能把这记录为ρ,下面也可以把r看成参数ρ,θ是x轴与连接原点和最近点直线之间的夹角。如图

笛卡尔坐标中围绕一个点的r与θ值是一个正弦函数

å¾2

如何判断两个点在一条直线上,假设笛卡尔坐标中有两个点ij,如果两点在一条直线则必然存在r_i{} = \theta _{i}, r_j{} = \theta _{j},

如果是三个点也是一样的情况,所以在霍夫空间中三条正弦曲线在同一个点相交,所有当有N个点时,如果相同的r,θ超过一定数目(阈值)的则可以判断这N个点在一条直线上

 

假设都在k点相交,那么这条直线的极坐标表达式为\rho _{k} = xcos\theta _{k}+ysin\theta _{k}

å¨è¿éæå¥å¾çæè¿°

例如取五个点计算不同角度下(θ为0°、45°、90°、135°、180°)的ρ值,45°时值一样

所以该直线的极坐标为\frac{9\sqrt{2}}{2}=xcos45^{o}+ysin45_{o}

霍夫直线检测

1.opencv的HoughLines函数是标准霍夫线变换函数,该函数的功能是通过一组参数对 (\theta, r_{\theta}) 的集合来表示检测到的直线,其函数原型为:HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用1像素。

theta参数表示参数极角 \theta 以弧度为单位的分辨率,这里使用1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对 (r,\theta) 的容器 。

srn参数、stn参数默认都为0。如果srn = 0且stn = 0,则使用经典的Hough变换。

min_theta参数表示对于标准和多尺度Hough变换,检查线条的最小角度。

max_theta参数表示对于标准和多尺度Hough变换,检查线条的最大角度。

2.opencv的HoughLinesP函数是统计概率霍夫线变换函数,该函数能输出检测到的直线的端点 (x_{0}, y_{0}, x_{1}, y_{1}),其函数原型为:HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用 1 像素。

theta参数表示参数极角 \theta 以弧度为单位的分辨率,这里使用 1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器,也就是线段两个端点的坐标。

minLineLength参数表示能组成一条直线的最少点的数量,点数量不足的直线将被抛弃。

maxLineGap参数表示能被认为在一条直线上的亮点的最大距离。

2. 圆检测

笛卡尔坐标系中圆表达式为

(x-x_{0})^{2}+(y-y_{0})^{2}=r^{2} (x-x_{0})^{2}+(y-y_{0})^{2}=r^{2}

转换到霍夫坐标中已x_{1},y_{1}为例,可以做出(a-x_{1})^{2}+(b-y_{1})^{2}=r^{2},同理x_{2},y_{2},和x_{3},y_{3},可以做出两个圆,由于a, b ,r不确定所以是已x_{1},y_{1}x_{2},y_{2},和x_{3},y_{3}为顶点的圆锥,假如这三个点在一个圆上,那个这三个圆锥必然相交与一个点这个点就是圆心,

 

OpenCV中提供的cvHoughCircle()函数里面可以设定半径r的取值范围,相当于有一个先验设定,在每一个r来说,在二维空间内寻找a和b就可以了,能够减少计算量。

x-y坐标系中一个圆形边界上有很多个点,对应到a-b坐标系中就会有很多个圆。由于原图像中这些点都在同一个圆形上,那么转换后a,b必定也满足a-b坐标系下的所有圆形的方程式。直观表现为这许多点对应的圆都会相交于一个点,那么这个交点就可能是圆心(a, b)

å¨è¿éæå¥å¾çæè¿°

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值