博客
关于我
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 常见ALTER TABLE操作
    查看>>
    MySQL 常见的 9 种优化方法
    查看>>
    MySQL 常见的开放性问题
    查看>>
    Mysql 常见错误
    查看>>
    mysql 常见问题
    查看>>
    MYSQL 幻读(Phantom Problem)不可重复读
    查看>>
    mysql 往字段后面加字符串
    查看>>
    mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    查看>>
    MySQL 快速创建千万级测试数据
    查看>>
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    MySql 手动执行主从备份
    查看>>
    Mysql 批量修改四种方式效率对比(一)
    查看>>
    mysql 批量插入
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>
    MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>