HALCON示例程序classify_citrus_fruits.hdev应用常规gmm分类器进行水果分类

HALCON示例程序classify_citrus_fruits.hdev应用常规gmm分类器进行水果分类

示例程序源码(加注释)

  • 读入图片、显示与显示相关设置
    read_image (Image, ‘color/citrus_fruits_01’)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, ‘white’, WindowHandle)
    set_display_font (WindowHandle, 12, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    dev_set_line_width (2)
    dev_display (Image)
    dev_update_window (‘off’)
    dev_update_pc (‘off’)
    dev_update_var (‘off’)

  • 定义变量数组
    FeaturesArea := []
    FeaturesCircularity := []
    ClassName := [‘orange’,‘lemon’]

  • 创建一个GMM分类器,这个函数之前的帖子介绍过
    create_class_gmm (2, 2, 1, ‘spherical’, ‘normalization’, 10, 42, GMMHandle)

  • 为分类器增加例子
    for i := 1 to 4 by 1
    read_image (Image, ‘color/citrus_fruits_’ + i$’.2d’)
    dev_display (Image)

    • 自定义函数
      get_regions (Image, SelectedRegions)
      将彩色图像分割成RGB三个通道,并使用简单bolo方法进行分析
      decompose3 (Image, ImageRed, ImageGreen, ImageBlue)
      dev_set_color (‘white’)
      threshold (ImageRed, Region, 50, 255)
      fill_up (Region, RegionFillUp)
      connection (RegionFillUp, ConnectedRegions)
      select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 50, 999999)
      return ()
    • 显示SelectedRegions区域
      dev_display (SelectedRegions)
    • 对区域SelectedRegions进行计数
      count_obj (SelectedRegions, NumberObjects)
      for j := 1 to NumberObjects by 1
      • 选取数组当中的指定元素
        select_obj (SelectedRegions, ObjectSelected, j)
      • 自定义函数
        get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
        得到ObjectSelected区域的圆度值
        circularity (ObjectSelected, Circularity)
        求取ObjectSelected的面积与中心坐标
        area_center (ObjectSelected, Area, Row, Column)
        dev_set_color (‘white’)
        return ()

        FeaturesArea := [FeaturesArea,Area]
        FeaturesCircularity := [FeaturesCircularity,Circularity]
      • real将输入数组元素转换为浮点数形式
        FeatureVector := real([Circularity,Area])
        if (i <= 2)
        • add_sample_class_gmm - 将训练样本添加到高斯混合模型的训练数据中
        • add_sample_class_gmm(:: GMM句柄,样本要素向量,类别ID,随机噪声:)
          add_sample_class_gmm (GMMHandle, FeatureVector, 0, 0)
        • 显示信息
          disp_message (WindowHandle, ‘Add to Class:’ + ClassName[0], ‘window’, RowRegionCenter, ColumnRegionCenter - 100, ‘black’, ‘true’)
          else
          add_sample_class_gmm (GMMHandle, FeatureVector, 1, 0)
          disp_message (WindowHandle, ‘Add to Class:’ + ClassName[1], ‘window’, RowRegionCenter, ColumnRegionCenter - 100, ‘black’, ‘true’)
          endif
          endfor
    • 显示按F5继续
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endfor
      dev_clear_window ()
  • 构建可视化空间,即二维坐标系
    visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[0:5], FeaturesCircularity[0:5], ‘dim gray’, 18)
    dev_set_color (‘black’)
    OriginOfGraph := [Height - 0.1 * Height,0.1 * Width]
    画箭头
    disp_arrow (WindowID, OriginOfGraph[0], OriginOfGraph[1], OriginOfGraph[0], Width - 0.2 * Width, 2)
    disp_arrow (WindowID, OriginOfGraph[0], OriginOfGraph[1], 0.1 * Height, OriginOfGraph[1], 2)
    显示横纵坐标的名称
    set_tposition (WindowID, OriginOfGraph[0], Width - 0.2 * Width)
    write_string (WindowID, ‘Area’)
    set_tposition (WindowID, 0.07 * Height, OriginOfGraph[1])
    write_string (WindowID, ‘Circularity’)
    dev_set_color (ColorFeatureVector)
    ExtentOfGraph := Height - 0.3 * Height
    RangeC := 0.5
    RangeA := 24000
    ScaleC := ExtentOfGraph / RangeC
    ScaleA := ExtentOfGraph / RangeA
    MinC := 0.5
    MinA := 20000
    NumberFeatureVectors := |FeaturesA|
    for i := 0 to NumberFeatureVectors - 1 by 1
    DiffC := ScaleC * (FeaturesC[i] - MinC)
    DiffA := ScaleA * (FeaturesA[i] - MinA)
    RowFeature := OriginOfGraph[0] - DiffC
    ColumnFeature := OriginOfGraph[1] + DiffA
    画X号
    gen_cross_contour_xld (Cross, RowFeature, ColumnFeature, CrossSize, 0.785398)
    dev_display (Cross)
    endfor
    return ()

  • 柠檬的自定义函数
    visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[6:11], FeaturesCircularity[6:11], ‘light gray’, 18)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()

  • 训练分类器train_class_gmm(:: 分类器句柄,最大迭代次数,阈值,计算方法,规范单一协方差矩阵:类中心数量,每个类的迭代次数)
    train_class_gmm (GMMHandle, 100, 0.001, ‘training’, 0.0001, Centers, Iter)

  • 分类
    for i := 1 to 15 by 1
    read_image (Image, ‘color/citrus_fruits_’ + i$’.2d’)
    dev_display (Image)

    • 和上文get_regions含义一致
      get_regions (Image, SelectedRegions)
      dev_display (SelectedRegions)
      count_obj (SelectedRegions, NumberObjects)
      for j := 1 to NumberObjects by 1
      select_obj (SelectedRegions, ObjectSelected, j)
      get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
      FeaturesArea := [FeaturesArea,Area]
      FeaturesCircularity := [FeaturesCircularity,Circularity]
      FeatureVector := real([Circularity,Area])
      • classify_class_gmm - 通过高斯混合模型计算特征向量的类。
      • 函数原型classify_class_gmm(:: 分类器句柄,特征向量,确定的最佳类数:分类结果,类的后验概率,概率密度,归一化概率)
        classify_class_gmm (GMMHandle, FeatureVector, 1, ClassID, ClassProb, Density, KSigmaProb)
      • 显示
        disp_message (WindowHandle, 'Class: ’ + ClassName[ClassID], ‘window’, RowRegionCenter, ColumnRegionCenter - 100, ‘black’, ‘true’)
        disp_message (WindowHandle, 'KSigmaProb: ’ + KSigmaProb, ‘window’, RowRegionCenter + 30, ColumnRegionCenter - 100, ‘black’, ‘true’)
        endfor
        if (i != 15)
        disp_continue_message (WindowHandle, ‘black’, ‘true’)
        endif
        stop ()
        endfor
  • 清除训练句柄
    clear_class_gmm (GMMHandle)

处理思路

这个例子介绍了GMM分类器的使用方法,步骤是create_class_gmm 、add_sample_class_gmm、train_class_gmm、classify_class_gmm 先创建分类器,为分类器添加样本,训练分类器,使用分类器对进行分类。一个全面介绍GMM分类器使用的一个例子。通过GMM分类器实现了橙子和柠檬 的分类。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python进阶10 MySQL补充 编码、别名、视图、数据库修改

python进阶10 MySQL补充 编码、别名、视图、数据库修改 一、编码问题 #MySQL级别编码 #修改位置&#xff1a; /etc/mysql/mysql.conf.d/mysqld.cnf default-character-set utf8character-set-server utf8 collation-server utf8_general_ci#最佳实践 #1、无论mysql是否设…

教你如何剖析源码

一、源码阅读需求 在学习中&#xff0c;我们会需要了解&#xff0c;学习&#xff0c;使用一个框架&#xff0c;一个新的函数库。在工作中&#xff0c;因为业务需求&#xff0c;因为性能问题&#xff0c;可能通过一个更高性能的工具&#xff0c;架构去优化我们的程序。 那么&…

SPEL + 中的错误处理

SPEL 中的错误处理 如果在SPEL程序中发生错误&#xff0c;可以将执行转到错误处理例程中进行错误处理。该例程必须在函数定义内。下一页的表格显示了用于错误处理的程序指令。 项目 目的 OnErr 使用OnErr语句定义错误处理…

HALCON示例程序classify_halogen_bulbs.hdev使用SVM分类器检测卤素灯泡的好坏

HALCON示例程序classify_halogen_bulbs.hdev使用SVM分类器检测卤素灯泡的好坏 示例程序源码&#xff08;加注释&#xff09; 得到halcon默认图片存储路径 get_system (‘image_dir’, HalconImages) 获得操作系统类型 get_system (‘operating_system’, OS) OS{0:2}的意思是…

php调用API支付接口(转自刘68)

首先访问 https://charging.teegon.com/ 注册账号&#xff0c; 找到开发配置 记下client_id和client_secret。 点击 天工开放平台 点击天工收银 点击 SDK下载与使用 选择php版下载 解压后获得 打开form.php这个是样板文件可以用它来测试是否成功&#xff0c;测试前需要先修…

S3C2440 SPI驱动框架

S3C2440 SPI驱动代码详细解读&#xff1a; https://www.linuxidc.com/Linux/2012-08/68402p4.htm 一、platform device and board_info /* /arch/arm/plat-s3c24xx*/static struct resource s3c_spi0_resource[] { [0] {.start S3C24XX_PA_SPI,.end S3C24XX_PA_SPI 0…

单目相机标定原理

一&#xff0e;相机标定主要涉及三个坐标系&#xff1a;图像坐标系、摄像机坐标系和世界坐标系 【图像坐标系】 摄像机采集的图像变换为数字图像后&#xff0c;每副数字图像在计算机内为M x N数组&#xff0c;M行N列的图像中每一个元素&#xff08;pixel&#xff09;数值就是图…

HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片

HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片 示例程序源码&#xff08;加注释&#xff09; dev_update_off () dev_close_window () dev_open_window (0, 0, 735, 485, ‘black’, WindowHandle) set_display_font (WindowHandle, 14, ‘mono’, …

Android开始之 activity_lifecycle和现场保护

生命周期&#xff1a; oncreate—onstart—onresume&#xff0c;--onpause--onstop&#xff0c;——onrestart——onstart——onresume&#xff0c;。。onpause。。。onstop。。。ondestroy 现在保护---保存系统状态 通过这个方法保存到数据库中或者xml中&#xff0c;&#xff…

Apache启动错误:could not bind to address[::]:443

Q&#xff1a;Windows环境下启动apache报错如下&#xff1a; 可是在httpd.conf文件中apache listen的明明是http 80端口&#xff0c;为什么会报443的错误&#xff1f; A&#xff1a;因为你的计算机安装了VM&#xff0c;所有有个vm的进程一直占用着443端口&#xff0c;在命令行下…

针孔相机拍摄的图像坐标和空间点的对应关系

一&#xff1a;摄像机成像原理 摄像机成像模型一般有三种&#xff1a;透镜投影模型&#xff08;小孔摄像机模型&#xff09;、正交投影模型和透视投影模型 光学中最基本的高斯成像公式&#xff1a;1/u 1/v 1/f (式一) 原理图如下&#xff1a; 二&#xff1a;认识三个…

window.onload中动态获得img的高度

$(function(){}); window.οnlοadfunction(){} $(function(){}) 是在DOM结构渲染完成以后调用的&#xff0c;这时候网页中一些资源还没有加载&#xff0c;比如图片等资源&#xff0c;但是DOM结构已经渲染成功了 window.onload是在网页DOM结构渲染完成&#xff0c;而且资源已经…

HALCON关于显示的函数与介绍(持续更新)

点击下方直达算子蓝色字体 目录1、dev_update_off ()&#xff1b;dev_update_on2、dev_close_window ()3、dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle)4、set_display_font( : : WindowHandle, Size, Font, Bold, Slant : )5、dev_set_draw(…

python -- 三元运算符

格式 : a if 条件 else b 示例 : 在 return 中使用 def com(a,b): # 返回最大值return a if a > b else b赋值时使用: l 1 if 2 > 1 else 2转载于:https://www.cnblogs.com/yanjingnan/p/6494786.html

矩阵乘法

矩阵乘法的通俗的我自己用的理解方式 CAB. 则Cij∑aikbkj (k属于那个范围)&#xff0c;所以首先矩阵相乘的必须是A矩阵的列数等于b矩阵的行数。 第二就是C的意义了&#xff0c;cij表示A的第i行与B的第j列每个数对应相乘&#xff0c;因为上面的条件&#xff0c;所以A的第i行的数…

HALCON示例程序classify_image_class_knn.hdev使用KNN分类器对多通道图像进行分割

HALCON示例程序classify_image_class_knn.hdev使用KNN分类器对多通道图像进行分割 示例程序源码&#xff08;加注释&#xff09; 显示相关设置 dev_update_off () dev_close_window () dev_open_window (0, 0, 735, 485, ‘black’, WindowHandle) set_display_font (WindowH…

DELL XPS 9350 无线网卡DW1820A WIN7驱动异常解决

电脑型号:戴尔XPS 13 9350 故障现象: 安装完其他驱动都正常,打上官网的无线蓝牙一体驱动,只能驱动蓝牙,无线网卡无法驱动 故障解决: 开机F2,到Wireless选项现将蓝牙功能关闭,保存重启到windows下,将官网的无线驱动解压到文件夹,在设备管理器中选中未知的网络设备点更新驱动,手动…

粥做得好不好,全凭一个良心!

粥做得好不好&#xff0c;全凭一个良心&#xff01; 工作不也是凭良心么&#xff01; 文章中的红色字体表达了一切&#xff01; 霜降节气的到来&#xff0c;意味着冬季的临近&#xff0c;而霜降后气温的降低&#xff0c;利于蔬菜的淀粉沉淀&#xff0c;收浆后的莲藕也变得更为…

内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc

很多地方都会使用内存&#xff0c;内存使用过程中操作不当就容易崩溃&#xff0c;无法运行程序&#xff0c;上网Google学习一下&#xff0c;了解整理下他们之间的区别以及使用 &#xff0c;获益匪浅 0x01 各自的定义和理解 (1)先看GlobalAlloc() GlobalAlloc()主要用于Win32应用…

黑盒测试

引言&#xff1a; 什么是黑盒测试呢&#xff01;&#xff1f; 像我一样的测试小白就会望文生义了&#xff1a;对黑盒子测试 那么黑盒子是什么&#xff01;? 思考5秒后&#xff0c;得出了这样的答案&#xff1a;黑盒子就是黑色的盒子&#xff0c;嘿嘿&#xff01; 正文&#xf…