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

    你可能感兴趣的文章
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>