视觉检测项目中绕不开的基础操作就是圆心和直线测量。今天咱们就聊聊怎么用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, RowCheck50, ColumnCheck100) 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-catchtry 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.coloradmin.cn/o/2413886.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!