【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)
    • 一、引言
    • 二、HALCON形状匹配基础
      • 2.1 形状匹配的概念
      • 2.2 `create_shape_model`算子
        • 2.2.1 算子语法
        • 2.2.2 参数说明
      • 2.3 `find_shape_model`算子
        • 2.3.1 算子语法
        • 2.3.2 参数说明
    • 三、应用场景:工业零件装配定位
      • 3.1 工业零件装配定位的需求
      • 3.2 汽车内饰板装配中定位安装孔位的具体需求
    • 四、案例实现:汽车内饰板装配中定位安装孔位
      • 4.1 开发环境准备
        • 4.1.1 安装HALCON
        • 4.1.2 创建C#项目
      • 4.2 技术实现步骤
        • 4.2.1 使用`create_shape_model`创建零件边缘模板
        • 代码解释:
        • 4.2.2 使用`find_shape_model`实时匹配图像
        • 代码解释:
        • 4.2.3 结合C#通过串口控制机械臂抓取
        • 代码解释:
      • 4.3 C#集成:WinForm界面动态调整匹配参数,表格实时显示匹配坐标和角度
        • 4.3.1 创建WinForm界面
        • 4.3.2 实现界面交互逻辑
        • 代码解释:
    • 五、开发建议
      • 5.1 性能优化
        • 代码解释:
      • 5.2 异常处理
        • 代码解释:
      • 5.3 跨平台集成
        • 代码解释:
    • 六、总结


【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;
            

你可能感兴趣的:(c#,halcon,机器视觉,形状匹配,halcon算子,机器学习,工业自动化)