C++——从Matlab版移植的高精度霍夫圆变换

原matlab版来自于此链接

一、OpenCV 3.0只有基于边缘点梯度的霍夫圆变换函数:HoughCircles(),该函数精度不是很高,同实验室项目下与matlab的版本相差了十几个像素点,无法满足项目要求,故而用C++重写之,但项目紧迫,未进行优化,且只能返回霍夫空间中第一个最大累计值(accNum)的圆。

二、算法流程为:

1.使用大津阈值法计算阈值,供给OpenCV的canny函数使用,且低阈值系数设为与matlab相同的0.4;

2.仿造matlab版的参数列表,stepR、stepAngle、minR、maxR,但去除了p,因为只返回一个圆,所以相当于p设置为1;

3.申请成立霍夫空间,三维体积为:[图像高][图像宽][(maxR-minR)/stepR];(注意整数)

4.使用find函数查找边缘点坐标,并保存至点集容器,备用;

5.从点集容器中取点,以该点圆心,根据stepR和stepAngle的步长,在圆周内进行投票,即该位置(row,col,r)的霍夫空间+1;

6.找到霍夫空间内票数最多的位置,即为所求圆。

三、以下为原始代码,main函数位于最底部,可以根据自己的需求更改。

#include<opencv2\opencv.hpp>
#include<iostream>
#include &
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值