【C# + HALCON 机器视觉】HALCON经典算子:形状匹配(create_shape_model 与 find_shape_model)

摘要:本文聚焦 C# 与 HALCON 结合的机器视觉应用,围绕形状匹配核心功能展开。详细阐述create_shape_model与find_shape_model算子原理,以汽车内饰板装配定位安装孔位为例,展示从图像读取、模板创建、实时匹配到控制机械臂抓取的完整流程,同时介绍 WinForm 界面参数动态调整与结果显示的实现。提出 ROI 局部处理优化性能、try-catch捕获异常、导出 C# 代码实现跨平台集成等开发建议,助力提升工业自动化生产中零件装配定位的效率与精度。


在这里插入图片描述


【C# + HALCON 机器视觉】HALCON经典算子:形状匹配(create_shape_model 与 find_shape_model)

关键词:C#;HALCON;机器视觉;形状匹配;create_shape_model;find_shape_model;工业自动化

一、引言

在工业自动化生产领域,机器视觉技术扮演着至关重要的角色。其中,形状匹配作为机器视觉中的一项关键技术,能够准确地识别和定位物体,广泛应用于工业零件装配定位等场景。HALCON作为一款强大的机器视觉软件库,提供了丰富的算子来实现形状匹配功能,其中create_shape_modelfind_shape_model是最为经典的两个算子。本文将结合C#语言,详细介绍如何使用这两个算子实现工业零件装配定位,以汽车内饰板装配中定位安装孔位为例进行实操演示,并给出完整的开发流程和代码实现。同时,还会针对性能优化、异常处理和跨平台集成等方面给出相应的建议和实现方法。

二、HALCON形状匹配基础

2.1 形状匹配的概念

形状匹配是指在图像中寻找与给定模板形状相似的目标物体的过程。在工业应用中,形状匹配可以用于物体的定位、识别、检测等任务。通过创建一个形状模板,然后在实时图像中搜索与之匹配的区域,从而确定目标物体的位置和姿态。

2.2 create_shape_model算子

create_shape_model算子用于创建形状模板。它通过对输入图像进行处理,提取图像中的边缘特征,并将这些特征存储为一个模板。在创建模板时,可以设置多个参数,如金字塔层级(NumLevels)、角度范围(AngleExtent)等,以控制模板的精度和匹配速度。

2.2.1 算子语法
create_shape_model(Image : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
2.2.2 参数说明
  • Image:输入的图像。
  • NumLevels:金字塔层级,值越大,匹配速度越快,但精度可能会降低。
  • AngleStart:起始角度。
  • AngleExtent:角度范围。
  • AngleStep:角度步长。
  • Optimization:优化选项,用于控制模板的内存使用和匹配速度。
  • Metric:匹配度量方式,如'use_polarity''ignore_global_polarity'等。
  • Contrast:对比度阈值,用于提取边缘特征。
  • MinContrast:最小对比度阈值。
  • ModelID:输出的模板ID。

2.3 find_shape_model算子

find_shape_model算子用于在实时图像中搜索与之前创建的模板匹配的区域。它会返回匹配区域的位置、角度和匹配得分等信息。

2.3.1 算子语法
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
2.3.2 参数说明
  • Image:输入的实时图像。
  • ModelID:之前创建的模板ID。
  • AngleStart:起始角度。
  • AngleExtent:角度范围。
  • MinScore:最小匹配得分,只有匹配得分大于该值的区域才会被返回。
  • NumMatches:要返回的最大匹配数量。
  • MaxOverlap:最大重叠率,用于过滤重叠的匹配区域。
  • SubPixel:亚像素精度选项,用于提高匹配的精度。
  • NumLevels:金字塔层级。
  • Greediness:贪婪度,控制匹配的速度和精度。
  • RowColumn:匹配区域的中心行和列坐标。
  • Angle:匹配区域的旋转角度。
  • Score:匹配得分。

三、应用场景:工业零件装配定位

3.1 工业零件装配定位的需求

在工业生产中,许多零件的装配需要精确的定位。例如,在汽车内饰板装配过程中,需要准确地找到安装孔位,以便将各种零部件正确地安装到内饰板上。传统的人工装配方式不仅效率低下,而且容易出现定位误差,影响产品质量。因此,利用机器视觉技术进行工业零件装配定位具有重要的实际意义。

3.2 汽车内饰板装配中定位安装孔位的具体需求

在汽车内饰板装配中,安装孔位的定位精度要求较高,通常需要达到±0.1mm。通过形状匹配技术,可以在图像中准确地识别出安装孔的位置和角度,然后结合机械臂进行抓取和安装操作,提高装配的效率和精度。

四、案例实现:汽车内饰板装配中定位安装孔位

4.1 开发环境准备

4.1.1 安装HALCON

首先,需要从HALCON官方网站下载并安装HALCON软件。安装完成后,配置好开发环境,确保可以在C#项目中引用HALCON的相关库。

4.1.2 创建C#项目

打开Visual Studio,创建一个新的Windows Forms应用程序项目。在项目中引用HALCON的C#库文件,这些文件通常位于HALCON安装目录的dotnet35dotnet40文件夹下,具体取决于你的.NET框架版本。

4.2 技术实现步骤

4.2.1 使用create_shape_model创建零件边缘模板

以下是使用C#和HALCON创建形状模板的示例代码:

using HalconDotNet;
using System;

namespace ShapeMatchingExample
{
   
    class Program
    {
   
        static void Main()
        {
   
            // 创建HALCON窗口
            HWindowControl hWindowControl = new HWindowControl();
            HWindow hWindow = hWindowControl.HalconWindow;

            // 读取图像
            HObject image;
            HOperatorSet.ReadImage(out image, "car_interior_panel.jpg");

            // 显示图像
            HOperatorSet.DispObj(image, hWindow);

            // 设置金字塔层级和角度范围
            HTuple numLevels = 4;
            HTuple angleStart = 0;
            HTuple angleExtent = 360;
            HTuple angleStep = 1;
            HTuple optimization = "auto";
            HTuple metric = "use_polarity";
            HTuple contrast = 30;
            HTuple minContrast = 10;

            // 创建形状模板
            HTuple modelID;
            HOperatorSet.CreateShapeModel(image, numLevels, angleStart, angleExtent, angleStep, optimization, metric, contrast, minContrast, out modelID);

            Console.WriteLine("形状模板创建成功,模板ID: " + modelID.I);
        }
    }
}
代码解释:
  1. 创建HALCON窗口:使用HWindowControlHWindow创建一个HALCON窗口,用于显示图像。
  2. 读取图像:使用ReadImage算子读取汽车内饰板的图像。
  3. 显示图像:使用DispObj算子将图像显示在窗口中。
  4. 设置参数:设置金字塔层级、角度范围、优化选项、匹配度量方式、对比度阈值等参数。
  5. 创建形状模板:使用CreateShapeModel算子创建形状模板,并返回模板ID。
4.2.2 使用find_shape_model实时匹配图像

以下是在实时图像中进行形状匹配的示例代码:

using HalconDotNet;
using System;

namespace ShapeMatchingExample
{
   
    class Program
    {
   
        static void Main()
        {
   
            // 创建HALCON窗口
            HWindowControl hWindowControl = new HWindowControl();
            HWindow hWindow = hWindowControl.HalconWindow;

            // 读取图像
            HObject image;
            HOperatorSet.ReadImage(out image, "car_interior_panel.jpg");

            // 显示图像
            HOperatorSet.DispObj(image, hWindow);

            // 设置金字塔层级和角度范围
            HTuple numLevels = 4;
            HTuple angleStart = 0;
            HTuple angleExtent = 360;
            HTuple angleStep = 1;
            HTuple optimization = "auto";
            HTuple metric = "use_polarity";
            HTuple contrast = 30;
            HTuple minContrast = 10;

            // 创建形状模板
            HTuple modelID;
            HOperatorSet.CreateShapeModel(image, numLevels, angleStart, angleExtent, angleStep, optimization, metric, contrast, minContrast, out modelID);

            // 设置匹配参数
            HTuple minScore = 0.5;
            HTuple numMatches = 1;
            
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI_DL_CODE

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值