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

视觉检测项目中绕不开的基础操作就是圆心和直线测量。今天咱们就聊聊怎么用Halcon快速实现这两个核心功能,顺便分享些实际项目里踩坑攒出来的经验

视觉平台圆心和直线测量模块,依赖halcon

先看圆心检测。工业场景里经常要定位金属零件上的定位孔,这种场景最怕的就是边缘不连续或者有毛刺。直接上代码:

* 预处理不能少 median_image (Image, ImageMedian, 'circle', 3, 'mirrored') threshold (ImageMedian, Region, 128, 255) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 99999) * 精准边缘提取是关键 edges_sub_pix (ImageMedian, Edges, 'canny', 1.5, 20, 40) segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2) * 找圆三板斧 fit_circle_contour_xld (ContoursSplit, 'geotukey', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder) select_shape_xld (ContoursSplit, SelectedContours, 'radius', 'and', 20, 100)

这里有几个重点:medianimage预处理能有效抑制噪点,edgessubpix的参数组合(1.5,20,40)是经过大量测试验证的黄金组合。特别要注意segmentcontoursxld这个函数,'linescircles'模式会自动分割出可能构成圆或直线的边缘段,能显著提升后续处理效率。

直线测量更讲究抗干扰能力。比如检测液晶屏边缘直线时,经常遇到反光干扰:

* 模板匹配定位ROI create_shape_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 5, ModelID) find_shape_model (ImageReduced, ModelID, rad(0), rad(360), 0.7, 0, 0.5, 'least_squares', 0, 0.9, RowCheck, ColumnCheck, AngleCheck, Score) * 亚像素级直线提取 gen_rectangle1 (ROI, RowCheck-50, ColumnCheck-100, RowCheck+50, ColumnCheck+100) reduce_domain (ImageMedian, ROI, ImageReduced) edges_sub_pix (ImageReduced, EdgesLine, 'canny', 1.0, 20, 40) line_gauss (EdgesLine, Lines, 0.8, 1.5, 5, 'light', 'true', 'bar-shaped', 'true') * 结果筛选与验证 select_lines_longest (Lines, SelectedLines, 1) get_line_param (SelectedLines, LineParam, 'angle') if(abs(LineParam[0]) > rad(5)) * 角度超差报警 dev_set_color('red') dev_display_line(SelectedLines) endif

这里有个骚操作:line_gauss的'bar-shaped'参数特别适合检测明暗交界线,比直接用Hough变换稳定得多。实战中发现,设置1.5的Sigma值在精度和抗噪之间能达到最佳平衡。

视觉平台圆心和直线测量模块,依赖halcon

参数调试是个技术活。比如edgessubpix的三个参数,我们内部有个经验公式:低对比度场景下,Alpha取1.0~1.5,低阈值=高阈值*0.5。再比如fitcirclecontour_xld的Tukey参数,超过3个像素的偏差点会被自动剔除,这个值设太小容易过拟合,设太大又可能漏检。

异常处理也不能马虎。我们在核心算法外层一定会包上try-catch:

try fit_circle_contour_xld(...) catch (HException &except) dev_get_exception_data(&except, 'error_msg', &message) if(message == 'H_ERR_GCV_NO_CIRCLE') * 启动备用方案 fit_circle_contour_xld(..., 'algebraic', ...) endif endtry

这种设计能让检测模块在极端情况下(比如圆形被遮挡70%)仍然输出合理结果,产线上的良品率直接提升了3个点。

最后说个新发现:Halcon 21.05之后新增的surfacescratchmeasure模块,虽然文档说是检测划痕的,但我们改吧改吧用来测高反光金属件的直线度,效果意外的好。果然官方模块都是宝藏,就看你会不会魔改了。

http://www.cnnetsun.cn/news/1298981.html

相关文章:

  • 栈的输出序列与卡特兰数
  • python基于微信小程序的高校图书馆座位管理系统的设计与实现
  • 毕设程序java车辆保养管理平台 基于SpringBoot的汽车养护服务系统 智慧车辆维保一体化平台
  • 从“稳”到“快”:滴滴2025财报背后的全球化布局与AI转型
  • 计算机毕业设计springboot城市的地铁综合服务管理系统 基于SpringBoot的城市地铁一体化服务管理平台 城市轨道交通数字化运营与乘客服务系统
  • 微信小程序的社区团购系统
  • 光伏电池 - 超级电容混合储能系统能量管理的 Simulink 建模探索
  • 书匠策AI:期刊论文的“智能导航仪”,让学术之路畅通无阻!
  • 面试官与水货程序员的Battle:西安电子科技大学cjc同学的大厂面试奇遇记
  • weixin229学生资助在线管理软件开发微信小程序ssm(文档+源码)_kaic
  • 利用LLM优化亚马逊产品列表的技术实践
  • 专科生也能用!千笔,倍受青睐的AI论文写作软件
  • AI写论文大比拼!4款AI论文生成软件,哪款适合写期刊论文?
  • 低查重AI教材生成攻略,从选题到完稿,AI工具全程助力!
  • 第0011课 - 把画坦克也装进魔法盒子
  • 基于N32G430的USB功率监测与RGB状态指示嵌入式系统
  • Flutter鸿蒙开发:跨平台技术栈融合下的机遇与挑战
  • 拼多多的便宜2元/斤的五常大米能买吗?——关于拼多多平台销售的大米是否建议“尽量少吃”,需要结合实际情况理性分析。以下是一些可能的原因和相关建议:
  • Whisper语音识别镜像部署指南:GPU加速,响应快,小白友好
  • PCB三维叠层文化硬件设计:醒狮瑞象嵌入式装置
  • CLIP-GmP-ViT-L-14算力适配指南:不同显存配置下的参数调优
  • 专用语音IC驱动的电子圣诞树硬件设计
  • DeepSeek-R1-Distill-Qwen-1.5B上线只需5步:生产环境部署详细步骤
  • mPLUG-Owl3-2B多模态工具:Anaconda环境配置指南
  • Cosmos-Reason1-7B效果展示:手术视频中识别器械操作规范性与组织损伤风险
  • SmolVLA跨语言代码翻译效果:Java与Python互转示例
  • AudioSeal Pixel Studio效果展示:高清保真水印嵌入前后频谱对比图集
  • M2LOrder模型Keil5开发STM32入门:工程创建与调试全流程
  • 造相-Z-Image问题解决:RTX 4090运行全黑图、显存不足的排查方法
  • RGB智能风压式笔电散热器设计与实现