十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Halcon之第7讲--模板匹配详解与实战应用

Halcon之第7讲--模板匹配详解与实战应用 文章目录1. 引言2. 什么是模板匹配3. Halcon 模板匹配的分类4. 基于形状的模板匹配5. 核心算子详解5.1 create_shape_model 算子5.2 find_shape_model 算子5.3 dev_display_shape_matching_results 算子5.4. 模板匹配角度的物理含义非常关键6. 实战案例物品位置的定位6.1 代码实现6.2 运行结果6.3 Row, Column, Angle含义7. 匹配不到目标的原因8. 总结1. 引言模板匹配Template Matching是机器视觉中最经典、最基础的目标定位方法之一。它的核心思想非常简单在一幅待检测图像中寻找与预先给定的模板图像最相似的位置。Halcon 作为工业级机器视觉库提供了多种模板匹配算子能够应对不同场景下的定位需求。本讲将系统讲解 Halcon 模板匹配的原理、分类、关键算子以及实战应用帮助读者从零掌握模板匹配技术。2. 什么是模板匹配提前在模板图像中提取目标工件特征在待测图像中搜索找到目标输出目标的位置、旋转角度通用模板还输出缩放。核心用途工件摆放位置不固定 → 模板匹配获取位姿 →align_metrology_model整体移动计量模型完成卡尺测量。3. Halcon 模板匹配的分类Halcon 根据应用场景的不同提供了多种模板匹配方法主要分为以下四类模板类型核心能力优点缺点适用场景灰度模板 create_template平移简单光照稍微变化直接失效不能旋转几乎淘汰仅用来入门理解形状模板 create_shape_model平移 旋转不支持缩放速度快抗光照强精度高不能处理图像缩放90%2D 工业定位首选支架、菱形零件通用形状模板 create_generic_shape_model平移 旋转 缩放支持尺寸变化速度慢一点工件成像大小存在波动可直接对接 Metrology局部形变模板 create_local_deformable_model平移 旋转 轻微形变容忍工件轮廓微小变形参数难调速度慢塑胶件、冲压以上四种模板匹配方法形状模板在工业领域应用最多速度快、抗光照能力强精度高接下来重点介绍形状模板匹配。4. 基于形状的模板匹配底层原理形状模板提取边缘轮廓做匹配不依赖灰度所以光照变化鲁棒。基于形状模板匹配实现流程read_image读取模板图片可选reduce_domain裁剪 ROI只保留工件区域去掉背景干扰create_shape_model创建形状模板生成 ModelID 模板句柄read_image读取待检测图像可选reduce_domain设置搜索 ROI缩小搜索范围提速find_shape_model在图里查找模板输出 Row,Column,Phi,Score判断 Score过滤匹配失败的情况dev_display_shape_matching_results可视化匹配结果【你的项目】align_metrology_model用模板位姿对齐计量模型apply_metrology_model执行计量测量clear_shape_model释放模板内存工程必写防止内存泄漏5. 核心算子详解5.1 create_shape_model 算子create_shape_model(Template::NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast:ModelID)作用从模板图像提取边缘轮廓创建形状模板用于find_shape_model匹配仅支持平移 旋转原生不支持缩放。输入参数Template输入图像模板图像用来生成模板的原图。✅建议提前用reduce_domain裁剪 ROI只保留工件剔除多余背景减少干扰。NumLevels金字塔层数可选auto/ 整数。金字塔多分辨率图像高层图像分辨率低、匹配速度快层数太高小特征丢失容易匹配失败。autoHalcon 自动选择项目最常用。面试一句话金字塔用来加速匹配由粗到细搜索。AngleStart起始旋转角度单位弧度允许匹配的最小旋转角度。例工件最多逆时针转 10°顺时针转 10° →AngleStart -rad(10)AngleExtent角度范围弧度允许旋转的总角度跨度。示例AngleStart-rad(10), AngleExtentrad(20)总范围 -10° ~ 10°⚠注意不是终止角度终止角度 AngleStart AngleExtentAngleStep角度步长弧度模板在创建时每隔多少角度预存轮廓。auto自动计算推荐角度范围越大步长建议略大步长越小模板内存越大匹配越慢。Optimization模板优化选项auto自动推荐none不优化保留全部轮廓点精度高模板占用内存大point_reduction_high大量减少轮廓点速度更快适合大工件Metric匹配度量规则面试高频use_polarity【默认】边缘明暗极性必须一致。亮→暗的边缘待测图也必须是亮→暗明暗翻转直接匹配失败。ignore_polarity忽略极性。亮边变暗边依旧可以匹配适合背光翻转、正反面工件。Contrast对比度阈值提取模板轮廓时边缘必须达到这个对比度才会被当成特征。可以传两个值[MinC,MaxC]抑制弱边缘保留强边缘。数值太小噪声会变成轮廓数值太大丢失细小特征。常用 20~40。MinContrast待测图像最小对比度阈值在待检测图像中低于这个对比度的边缘直接忽略。用来过滤待测图噪声一般取值 5~15。输出参数ModelID模板句柄整数。后续find_shape_model、clear_shape_model都靠这个句柄操作模板。5.2 find_shape_model 算子find_shape_model(Image::ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness:Row, Column, Angle, Score)作用在待测图像中搜索已经创建好的形状模板输出目标工件的位置、旋转角度、匹配得分。搭配create_shape_model成对使用。输入参数Image待检测的输入图像。ModelID模板句柄create_shape_model输出得到。用来指定要搜索哪个模板。AngleStart搜索的起始旋转角度弧度。和创建模板时的角度范围保持一致代表搜索区间最小角度。AngleExtent搜索角度总跨度弧度。注意不是结束角度。结束角度 AngleStart AngleExtent。例AngleStart-rad(10), AngleExtentrad(20)搜索范围 -10° ~ 10°MinScore最低匹配得分取值 0~1。只有匹配得分≥MinScore才会被判定为找到目标。工业常用0.7 ~ 0.85设置太高容易漏检太低容易检出伪目标、噪声。NumMatches最多查找多少个匹配目标。单工件场景填1多工件根据实际数量填写。MaxOverlap多个目标之间允许的最大重叠度0~1。当多个匹配框重叠面积超过该比例会舍弃得分低的目标。0完全不允许重叠1允许完全重叠单目标场景一般写0.5即可。SubPixel亚像素定位选项精密测量重点面试高频none不开启亚像素像素级定位精度低interpolation插值亚像素精度一般least_squares最小二乘拟合精度最高你的 Metrology 尺寸测量必须选这个NumLevels搜索使用的金字塔层数。不要随便改一般固定写 0。填0使用创建模板时全部金字塔层绝大多数工程默认写法填数字 n只使用前 n 层金字塔做搜索Greediness贪婪系数取值 0~1。控制搜索策略速度和漏检的权衡数值越大搜索越快更容易漏掉目标数值越小搜索越慢漏检概率低鲁棒性更强工程常用0.7 ~ 0.9输出参数Row, Column模板参考点在图像上的亚像素坐标行、列注意不是工件中心点是创建模板时模板的参考原点。Angle目标工件相对于模板的旋转角度单位弧度。Score本次匹配的得分 (0~1)。越接近 1轮廓匹配程度越高。✅业务代码必须判断 Score低于 MinScore 代表匹配失败不能拿去给align_metrology_model。5.3 dev_display_shape_matching_results 算子dev_display_shape_matching_results(::ModelID, Color, Row, Column, Angle, ScaleR, ScaleC, Model:)作用可视化形状模板匹配结果在图像窗口画出模板轮廓框直观看到模板匹配到工件的位置与旋转角度仅用于调试显示不参与计算。✅注意shape_modelcreate_shape_model不支持缩放所以 ScaleR、ScaleC 固定填 1✅generic_shape_model才会有缩放ScaleR/ScaleC 为匹配得到的缩放系数。输入参数ModelID模板句柄create_shape_model/create_generic_shape_model生成Color绘制轮廓的颜色字符串red红色、green绿色、blue蓝色也可以用white/yellowRow模板参考点 Y 坐标find_shape_model 输出Column模板参考点 X 坐标find_shape_model 输出Angle工件旋转角度单位弧度find_shape_model 输出ScaleR行方向缩放系数shape_model无缩放能力固定写 1generic_shape_model填入 find_generic_shape_model 输出的 ScaleScaleC列方向缩放系数shape_model固定写 1generic_shape_model填入 find_generic_shape_model 输出的 ScaleModelModelID 元组的索引Default Value: 05.4. 模板匹配角度的物理含义非常关键模板默认姿态模板图片里工件的方向 0 弧度 (0°)工件逆时针旋转 → 角度正数工件顺时针旋转 → 角度负数例匹配结果 Phirad (10)代表待测图工件相对于模板逆时针转了 10 度。6. 实战案例物品位置的定位下面通过一个完整的实战案例演示如何使用模板匹配实现定位。6.1 代码实现* Shape Model 形状模板匹配 Demo * 使用图片metal-parts/metal-parts-01.png 金属零件特征清晰匹配稳定 dev_close_window()dev_update_off()*1. 读取模板原图截取单个零件ROI制作模板 read_image(TemplateImg,metal-parts/metal-parts-01.png)get_image_size(TemplateImg, W, H)dev_open_window_fit_image(TemplateImg,0,0, -1, -1, WinHandle)* ROI框选第一个金属零件剔除背景干扰 gen_rectangle1(ROI,150,250,320,480)reduce_domain(TemplateImg, ROI, TemplateROI)dev_display(TemplateROI)* 创建形状模板允许±130°旋转 create_shape_model(TemplateROI,auto, -rad(130), rad(260),auto,auto,use_polarity,auto,auto, ModelID)*2. 读取待测图片同数据集零件平移轻微旋转 read_image(Image,metal-parts/metal-parts-02.png)dev_display(Image)*3. 模板搜索 find_shape_model(Image, ModelID, -rad(130), rad(260),0.7,2,0.5,least_squares,0,0.8, Row, Column, Phi, Score)*4. 判断可视化结果if(Score0.7)disp_message(WinHandle,匹配成功,window,10,10,green,true)dev_display_shape_matching_results(ModelID,red, Row, Column, Phi,1,1,0)disp_message(WinHandle,Row:Row$6.2f Col:Column$6.2f Angle:deg(Phi)$5.2f° Score:Score$0.3f,window,40,10,blue,true)elsedisp_message(WinHandle,匹配失败,window,10,10,red,true)endif *释放资源 clear_shape_model(ModelID)6.2 运行结果从以上结果可以看到成功匹配到两个目标。6.3 Row, Column, Angle含义值得注意的知识点以上返回的Row, Column是模板原点模板的参考中心点在输入图像 Image 里的亚像素坐标。模板原点是哪里创建模板create_shape_model时模板 ROI 的几何中心就是模板原点。你用reduce_domain截取一块 ROI 做模板这块 ROI 的中心就是模板参考点。不是零件的几何中心是模板 ROI 区域的中心举例子gen_rectangle1 (ROI, 60,70,230,240) reduce_domain (TemplateImg, ROI, TemplateROI)这个矩形 ROI左上角 (60,70)右下角 (230,240)模板原点Row₀ (60230)/2Col₀ (70240)/2匹配成功后输出的Row,Column就是这个中心点在待测图上对应的位置。配套 Angle 含义Angle待测图像上模板实例相对原始模板旋转的弧度。逆时针为正顺时针为负7. 匹配不到目标的原因find_shape_model算子中NumMatches参数设置的是1解决把 NumMatches 改成大于 1匹配得分 Score 不足第二个零件的匹配得分 MinScore (0.7) → 直接被过滤判定不是目标解决适当调低 MinScore比如 0.6零件重叠MaxOverlap 阈值过滤掉第二个MaxOverlap0.5如果两个零件匹配框重叠超过 50%只保留高分的那个。两个零件挨很近可以调高 MaxOverlap例如 0.8第二个零件旋转角度超出模板搜索角度范围模板只允许 ±10°第二个零件旋转了 15°超出 AngleExtent 范围搜不到。解决扩大AngleStart、AngleExtent第二个零件成像对比度差 / 部分遮挡轮廓特征弱匹配得分低。8. 总结本讲详细介绍了 Halcon 模板匹配的原理、分类和实战应用模板匹配原理通过相似度搜索定位目标四大分类灰度、形状、相关、描述符匹配核心算子create_shape_model和find_shape_model优化策略金字塔搜索、参数调优、多模板匹配实战案例器件定位完整流程。模板匹配是机器视觉定位的基础掌握好这一技术将为后续学习目标检测、缺陷检测等高级技术打下坚实基础。建议读者多动手实践通过调整不同参数来深入理解各参数对匹配结果的影响。
返回列表