博客
关于我
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/

    你可能感兴趣的文章
    Linux下的系统监控与性能调优:从入门到精通
    查看>>
    LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
    查看>>
    localhost:5000在MacOS V12(蒙特利)中不可用
    查看>>
    logstash mysql 准实时同步到 elasticsearch
    查看>>
    Luogu2973:[USACO10HOL]赶小猪
    查看>>
    mabatis 中出现&lt; 以及&gt; 代表什么意思?
    查看>>
    Mac book pro打开docker出现The data couldn’t be read because it is missing
    查看>>
    MAC M1大数据0-1成神篇-25 hadoop高可用搭建
    查看>>
    mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
    查看>>
    Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
    查看>>
    MangoDB4.0版本的安装与配置
    查看>>
    Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
    查看>>
    mapping文件目录生成修改
    查看>>
    MapReduce程序依赖的jar包
    查看>>
    mariadb multi-source replication(mariadb多主复制)
    查看>>
    MariaDB的简单使用
    查看>>
    MaterialForm对tab页进行隐藏
    查看>>
    Member var and Static var.
    查看>>
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>