当前位置: 首页 > news >正文

基于霍夫变换的圆形物体检测和计数

一、前言

在计算机视觉的实际应用中,圆形物体检测与计数是非常经典的场景:工业零件质检、药丸计数、圆形工件分拣、硬币统计等场景都离不开这项技术。而霍夫变换(Hough Transform)就是实现圆形检测最核心、最经典的算法之一,它对噪声不敏感、对物体部分遮挡鲁棒性强,非常适合工业视觉场景。

霍夫变换是一种特征检测算法,核心思想是坐标空间映射与投票统计。它将图像空间中的几何边缘点,映射到对应参数空间,通过统计参数空间累加峰值,自动拟合出直线、圆形等规则几何图形,抗遮挡、抗噪声能力强。

在 MATLAB 中,imfindcircles函数正是基于霍夫梯度法实现的官方圆形检测函数,使用简单高效。只需输入灰度图像和半径范围,即可自动检测圆形目标,输出圆心坐标、半径等结果。函数支持调节灵敏度、区分亮暗目标,能有效过滤噪声和干扰,无需手动实现复杂算法,直接用于圆形物体的检测、定位与计数,适合工业质检、零件统计等场景。

下面给出一个利用imfindcircle函数检测圆形物体的实例。

二、程序设计思想和程序代码

读取图像:加载想要处理的图像。

图像预处理:将图像转换为灰度图像,并可能应用滤波器来平滑图像,以便更好地处理。

边缘检测:使用例如 Canny 边缘检测器来找到硬币的边界。

圆形检测:使用霍夫圆变换来识别图像中的圆形(即硬币)。

计数硬币:计算检测到的圆形数量。并将其显示在图片的左上角。

标注几何中心:用*标注了硬币的几何中心

代码:

originalImage = imread('D:\图像处理\image\硬币.jpg');

imshow(originalImage);

holdon;% 保持当前图像,以便在其上绘制。

title('Original Image');

% 转换为灰度图像

grayImage = rgb2gray(originalImage);

% 直方图均衡化

equalizedImage = histeq(grayImage);

% 边缘检测

edges = edge(equalizedImage,'canny', [], 2);% 可以调整阈值和Sigma值

% 霍夫圆变换来识别圆形

[centers, radii] = imfindcircles(edges, [20 100],'ObjectPolarity','bright','Sensitivity', 0.92);% 调整半径和敏感度

% 绘制检测到的硬币

viscircles(centers, radii);

% 绘制每个硬币的几何中心

plot(centers(:,1), centers(:,2),'r*');

% 计数硬币

numberOfCoins = numel(radii);

disp(['硬币个数 : ', num2str(numberOfCoins)]);

% 在图像上显示计数结果

text(10, 10, ['硬币个数: ', num2str(numberOfCoins)],'Color','black','FontSize', 10);

holdoff;% 结束在同一图像上的绘制。

三、程序运行结果图

撰写博客不易,如果你觉得本文对你有所帮助,请关注、点赞,欢迎转发。谢谢大家!

http://www.jsqmd.com/news/772339/

相关文章:

  • BEV 空间内的特征级融合
  • 听说宇宙条要进军电商和金融了?
  • FreeRTOS浮点运算结果总出错?可能是configUSE_TASK_FPU_SUPPORT没配对(附AWR2944实测)
  • 2026年4月密集架定制厂家推荐,重型货架/精益物料架/货架防撞护脚/周转车/封条/物流防撞脚防护栏,密集架定制厂家推荐 - 品牌推荐师
  • 终极指南:3步让PS3蓝牙控制器在Windows上完美工作
  • AI应用开发利器:基于Docker Compose的一体化本地部署方案
  • Agentic Engineering Patterns——从单 Agent 到多 Agent 的可复用设计模式
  • 7+ Taskbar Tweaker终极指南:解决Windows任务栏定制5大常见问题
  • 在ubuntu上体验taotoken快速接入多种大模型的便利性
  • 2026年培育钻婚戒到底哪家值得买?5大品牌深度横评,真实体验全解析 - GrowthUME
  • 世界6大信用卡组织,你知道哪几个?
  • 内容创作平台集成Taotoken实现按需切换不同风格的文本生成
  • 自动驾驶 Camera 与 Radar 融合算法与论文总结
  • 实测3090Ti跑SVD视频生成要多久?附ComfyUI完整工作流与显存占用优化心得
  • OpenRelay:本地AI代理聚合工具,统一调度Claude、Cursor等多平台订阅与API
  • 在Node.js后端服务中集成多模型API实现智能对话功能
  • 面试常被问的25个Spring知识点
  • Redis使用RedisTemplate模板类的常用操作
  • 使用Taotoken后API调用延迟与稳定性有了明显改善
  • Go语言本地AI推理:基于llama.cpp的无CGo绑定实践指南
  • 20253407 2025-2026-2 《Python程序设计》实验三报告
  • AISMM不是新概念,而是新分水岭:2026奇点大会揭示的8类企业定位失效预警信号
  • SITS2026圆桌核心结论首发:3类组织正在因AISMM“伪合规”被监管否决——你中招了吗?
  • Coral社区管理:构建健康讨论环境的黄金法则
  • 虚拟Klipper打印机:Docker容器化部署与API测试指南
  • 洛谷bfs P1030
  • R语言数据表格美化技巧
  • 如何在CI/CD中集成Flow:提升JavaScript代码质量的完整指南
  • 150道Java面试基础题(含答案)
  • 为AI工具协议MCP构建零信任安全代理:从OAuth到RBAC的实战指南