博客
关于我
OpenCV20---霍夫圆检测
阅读量:721 次
发布时间:2019-03-21

本文共 2130 字,大约阅读时间需要 7 分钟。

#霍夫圆检测技术原理及应用

##霍夫圆检测的基本原理

霍夫圆检测是一种基于数学原理的图像处理技术,专门用于检测图像中的圆形。其工作原理源自平面解析几何中的极坐标变换。假设平面坐标系中的任意一点$(x_0, y_0)$处于圆心位置,圆上任意一点$(x, y)$到该圆心的距离均为半径$r$,在极坐标系中则可以表示为$(r, \theta)$。霍夫圆检测的核心在于,如果图像中的圆形在笛卡尔坐标系中是连续的,则在其投影到(a, b, r)空间时,这些点会集中在一个立体点上。通过这一性质,霍夫变换能够有效地提取图像中的圆心和半径信息。

##霍夫圆检测的工作流程

霍夫圆检测通常包括以下几个关键步骤:

  • 边缘检测:首先对图像进行边缘检测,去除图像中不属于圆形边界的点,将这些区域的值设置为零。

  • 圆心候选寻找:遍历图像中所有非零值所在的位置,将这些点投影到(a, b, r)空间,直接将其作为圆心候选点。

  • 圆心验证:对于每个圆心候选点$(a, b)$,计算其在笛卡尔坐标系中到图像中所有可能点$(x, y)$的距离平方值之和(r²)。满足特定阈值条件的圆心会被确认为真实的圆心。

  • 半径计算:对于确认的圆心位置,通过计算图像中点到圆心的距离 distribute,确定最优的半径值。

  • ##HoughCircles函数的使用说明

    在OpenCV中,霍夫圆检测主要通过cv::HoughCircles函数来实现。本函数接受以下参数:

    • image:输入图像,必须是8位的单通道灰度图像。
    • circles:输出数组,存储检测到的圆的信息,每个圆由一个三元组$(a, b, r)$表示。
    • method:检测方法,当前只支持HOUGH_GRADIENT
    • dp:检测尺度参数,建议设置为1,表示在原图尺度下进行检测。
    • mindist:最小距离阈值,用来判断两个圆是否为同心圆。
    • param1:Canny边缘检测的低阈值。
    • param2:中心点累加器阈值,用于筛选候选圆心。
    • minradius:最小允许半径。
    • maxradius:最大允许半径。

    ##代码示例

    以下是一个使用cv::HoughCircles函数进行霍夫圆检测的示例代码:

    #include 
    #include
    #include
    using namespace cv;using namespace std;int main(int argc, char* argv) { Mat src; // 读取输入图像 if (!src.data) { cout << "could not load image..." << endl; return -1; } namedWindow("input image", WINDOW_AUTOSIZE); namedWindow("Hough Demo", WINDOW_AUTOSIZE); imshow("input image", src); // 中值滤波消除噪声 Mat moutput; medianBlur(src, moutput, 3); cvtColor(moutput, moutput, COLOR_BGR2GRAY); vector
    circles; // 调用霍夫圆检测函数 HoughCircles(moutput, circles, HOUGH_GRADIENT, 1, 30, 100, 25, 2, 50); // 将结果显示在图像上 Mat dst; // 复制原图 src.copyTo(dst); for (size_t i = 0; i < circles.size(); i++) { Vec3f circle = circles[i]; // 画圆心 circle(dst, Point(circle[0], circle[1]), circle[2], Scalar(0, 0, 255), 2, LINE_AA); circle(dst, Point(circle[0], circle[1]), 2, Scalar(0, 255, 0), 2, LINE_AA); } imshow("Hough Demo", dst); waitKey(0); return 0;}

    ##输出结果

    运行上述代码,你将会在图像中看到所有检测到的圆心及其边界。圆心位置以红色色圈表示,圆周以绿色色带表示。

    ##注意事项

    • 噪声对检测的影响:霍夫圆检测对图像中的噪声较为敏感,推荐在图像处理之前对图像进行中值滤波以减少噪声干扰。

    • 半径计算依据:霍夫圆检测的半径计算基于图像中点与圆心的距离分布,能够有效地辨识不同半径的圆。

    • 选择合适的参数dpmindist等参数需要根据具体图像特性进行适当调整,以获得最佳检测效果。

    转载地址:http://udwgz.baihongyu.com/

    你可能感兴趣的文章
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>
    mysql 存在update不存在insert
    查看>>
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>