opencv之霍夫圆变换

霍夫圆变换的基本原理和霍夫线变换大体上相似,只是点对应的二维极径极角空间被三维的圆心点x,y和半径r空间取代,如果用完全一样的方法运算量比较大,运行速速比较慢,所以采用“”霍夫梯度法“”来做圆变换
4.1霍夫梯度法的原理
1.首先对图像应用边缘检测,比如用canny边缘检测
2.然后,对边缘图像中的每一个非零点,考虑其局部梯度,就是用Sobel()函数计算x,y方向的Sobel一阶导数得到梯度
3.利用得到的梯度,由斜率指定的直线上的每一点都在累加器中被累加,这里的斜率是从一个指定的最小值到指定最大值的距离
4.同时,标记边缘图像中每一个非零像素的位置
5.然后从二维累加器中这些点中选择候选的中心,这些中心都大于给定阈值并且大于其所有近邻,这些候选的中心按照累加值降序排列,以便于最支持像素的中心首先出现
6.接下来对每一个中心,考虑所有的非零像素
7.这些像素按照与其中心的距离排序,从到最大半径的最小距离算起,选择非0像素最支持的一条半径,
8如果一个中心收到边缘像素非零像素最充分的支持,并且到前期被选择的中心有足够的距离,然后他就会被保留下来
这个实现可以使算法执行起来更高效,或许更加重要的是,能够帮助解决三维累加器中会产生许多噪声并且使得结果不稳定稀疏分布的问题
霍夫梯度法的缺点:
(1)可能在输出结果中产生噪声
(2)如果累加器阈值设置较低,算法需要很长时间,每一个中心只选择一个圆,对同心圆只选择一个
(3)如果新的中心很接近已接受的中心,则不会被保留下来


void HoughCircles(InputArray image,OutputArray ciecles,int method,double dp,double minDist,double param1=100,double param2=100,int minRadius=0,int maxRadius=0);
&& src:输入原图像(一般为8位单通道图像)
&& circles:经过霍夫变换后检测圆的输出矢量,每个矢量包含三个元素的浮点矢量(x,y,radius)
&&method:使用的检测方法,默认只有一种CV_HOUGH_GRADIENT
&& dp:用来检测圆心的累加器图像的分辨率和输入图像只比的倒数,且次参数允许创建一个比输入图像分辨率低的累加器,如dp=1,累加器和输入如下具有相同的分辨率,dp=2,累加器只有输入图像一半大的宽度和高度
&&minDist:霍夫变换检测到圆的圆心之间的最小距离,分辨两个不同的圆
&&param1:默认值100,他是第三个参数method设置的对应参数,表示传递给Canny边缘算子的高阈值,低阈值是高阈值的一半
&&param2:默认值100,他是第三个参数method设置的对应参数,表示洁厕阶段圆心累加器阈值,越小,则会检测到越多不存在食物圆,越大,更多真正的圆被检测到
&&minRadius/maxRadius:表示圆半径的最小值/最大值
这里写图片描述
opencv自带检测四边形程序:D:\opencv\sources\samples\cpp\squares.cpp

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值