[Halcon图像] 基于多层神经网络MLP分类器的思想提取颜色区域

news2024/11/13 3:35:40
  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨

文章预览:

      • 一. 概要
      • 二. 重要算子
      • 三. 具体步骤
      • 四. 实战演示


一. 概要

在进行颜色识别时,一般有如下方法:

  1. 可根据图像处理的颜色值选择合适的色彩空间,相应进行色彩空间转化,选择R、G、B、 H、 S、 I六个分量图像的对比度比较好的图像进行处理;
    可参考:[Halcon&图像] 彩色图转灰度图处理
  2. 使用过Blob分析:二值化,形态学,形状选择,但是对光照敏感,不稳定;
  3. 基于多层神经网络MLP分类器的方式来识别颜色,主要应用在图像分割、对象识别、质量控制、缺陷检测、光学字符识别(OCR)等领域;

本文重点介绍第三种多层神经网络MLP分类器的方式进行颜色识别,分类器相对于深度学习来讲不吃硬件,所以相对来讲算是轻量级的应用。


二. 重要算子

函数create_class_mlp( NumInput, NumHidden, NumOutput, OutputFunction, Preprocessing, NumComponents, RandSeed : MLPHandle )

参数
NumInput(in)MLP的输入变量(特征)的数量。
NumHidden(in)MLP的隐藏单元数。
NumOutput(in)MLP的输出变量(类)的数量。
OutputFunction(in)输出中激活函数的类型MLP层。
Preprocessing(in)用于转换特征向量。
NumComponents(in)预处理参数:转换次数功能。
RandSeed (in)随机数生成器的种子值 用于使用随机值初始化 MLP。
MLPHandle(out)MLP句柄。

函数train_class_mlp( : : MLPHandle, MaxIterations, WeightTolerance, ErrorTolerance : Error, ErrorLog )

参数
MLPHandle(in)MLP句柄。
MaxIterations(in)最大迭代次数 优化算法。
WeightTolerance(in)权重差异的阈值 两次迭代之间的 MLP 优化算法。
ErrorTolerance(in)平均误差差值的阈值 MLP 对两个之间的训练数据 优化算法的迭代。
Error(out)MLP 对训练数据的平均误差。
ErrorLog(out)MLP 在训练数据上的平均误差为 迭代次数的函数 优化算法。


三. 具体步骤

1、ROI颜色区域特征提取

*生成训练样本
for I := 1 to |Color| by 1
    dev_display (Image)
    *绘制ROI选择要训练的颜色
    draw_region (RoiRegion, WindowHandle)
    concat_obj (Class, RoiRegion, Class)
endfor

2、创建分类器

create_class_mlp (3, 6, 3, 'softmax', 'normalization', 10, 42, MLPHandle)

注意,后续添加样本的算子类型不同,那么1、3参数的含义也不同:

  • add_samples_image_class_mlp:则create_class_mlp第一个参数代表的是图像通道数量,因为是彩色,所以设置3,第三个参数3代表的是区域的个数,要区分几个颜色,就设置为几。
    参考例程:segment citrus fruits.hdev
  • add_sample_class_mlp:则create_class_mlp第一个参数代表的是特征的数量(自己计算的特征数),第三个参数代表要分多少种类别。
    参考例程:classify metal_parts

3、添加样本,以add_samples_image_class_mlp为例

add_samples_image_class_mlp (Image, Class, MLPHandle)

4、训练样本

train_class_mlp (MLPHandle, 200, 0.01, 0.01, Error, ErrorLog)

5、分类识别

classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)

四. 实战演示

需求:要求提取两侧蓝色胶水区域和白色的胶水反光区域。

在这里插入图片描述

代码

dev_update_window ('off')
dev_close_window()
read_image (Image, '14-34-36-546.bmp')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width/3, Height/3, 'black', WindowHandle)
dev_display (Image)
Color := ['blue','white','black']
HightColor :=['blue','white','black']
dev_set_colored (12)
*创建存储样本对象变量
dev_set_draw ('margin')
gen_empty_obj(Class)
*生成训练样本
for I := 1 to |Color| by 1
    dev_display (Image)
    *绘制ROI选择要训练的颜色
    draw_region (RoiRegion, WindowHandle)
    concat_obj (Class, RoiRegion, Class)
endfor
*设置网络感知参数
create_class_mlp (3, 6, 3, 'softmax', 'normalization', 10, 42, MLPHandle)
add_samples_image_class_mlp (Image, Class, MLPHandle)
dev_set_color ('red')
dev_set_line_width (2)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
set_tposition (WindowHandle, 10, 10)
write_string (WindowHandle, 'Training………………')
train_class_mlp (MLPHandle, 100, 0.01, 0.01, Error, ErrorLog)

* Image Acquisition 01: Code generated by Image Acquisition 01
* list_files ('C:/Users/CHEN/Desktop/Images', ['files','follow_links'], ImageFiles)
* tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
* for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, '14-35-18-619.bmp')
    * Image Acquisition 01: Do something
    *分类识别物体
    classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
    count_obj (ClassRegions, Number)
    if(Number = 3)
        dev_set_draw ('fill')
        dev_set_color (HightColor[0])
        copy_obj (ClassRegions, ObjectsSelected_1, 1, 1)
        dev_set_colored (12)
        connection (ObjectsSelected_1, ConnectedRegions)
        select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1500, 999999)
        inner_rectangle1 (SelectedRegions, Row1, Column1, Row2, Column2)
        gen_rectangle1 (Rectangle1, Row1, Column1-100, Row2, Column2+100)
        union1 (Rectangle1, RegionUnion1)
        dev_set_color (HightColor[1])
        copy_obj (ClassRegions, ObjectsSelected_2, 2, 1)
        intersection (RegionUnion1, ObjectsSelected_2, RegionIntersection)
        *联合分析
        union2 (ObjectsSelected_1, RegionIntersection, RegionUnion)
        dev_display (Image)
        dev_set_draw ('fill')
        dev_display (RegionUnion)
        stop ()
    endif
    dev_display (Image)
*     stop ()
* endfor

效果展示

在这里插入图片描述
Halcon相关例程

在这里插入图片描述

态度"ABC"理论的三个维度,即情感(Affective)、行为(Behavioral)和认知(Cognitive)

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

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

相关文章

【代码随想录算法训练营-第六天】【哈希表】242,349,202,1

242.有效的字母异位词 第一遍 思考 比较简单&#xff0c;用数组就能实现了 class Solution {public boolean isAnagram(String s, String t) {int[] checkListi new int[256];int[] checkListj new int[256];for (int i 0; i < s.length(); i) {char checkChar s.ch…

【C语言程序设计】数组程序设计

目录 前言 一、数组的定义和初始化 二、数组的基本操作 三、数组的高级应用 四、程序设计 4.1 程序设计第一题 4.2 程序设计第二题 4.3 程序设计第三题 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助…

Redis哨兵模式:什么是哨兵模式、哨兵模式的优缺点、哨兵模式的主观下线和客观下线、投票选举、Redis 哨兵模式搭建

文章目录 什么是哨兵模式哨兵模式的优缺点主观下线和客观下线投票选举哨兵模式场景应用Redis version 6.0.5 集群搭建下载文件环境安装解压编译配置文件启动关闭密码设置 什么是哨兵模式 哨兵模式是Redis的高可用解决方案之一&#xff0c;它旨在提供自动故障转移和故障检测的功…

洛谷P1722 矩阵Ⅱ——卡特兰数

传送门&#xff1a; P1722 矩阵 II - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1722 用不需要除任何数的公式来求。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cmath> #includ…

群晖(Synology)更换硬盘时间和精神双重折磨的教训

话说玩磁盘阵列的最后结果就是时间上负担不起&#xff0c;并且还被嫌弃。 在磁盘都到位后下一步就是要选择冗余类型了&#xff0c;对大部分人来说使用群晖自己提供的就好了&#xff0c;通常是 SHR。 什么是 SHR Synology Hybrid RAID&#xff08;SHR&#xff09;是 Synology…

解决:ImportError: cannot import name ‘PyKeyboard’ from ‘pykeyboard’

解决&#xff1a;ImportError: cannot import name ‘PyKeyboard’ from ‘pykeyboard’ 文章目录 解决&#xff1a;ImportError: cannot import name ‘PyKeyboard’ from ‘pykeyboard’背景报错问题报错翻译报错位置代码报错原因解决方法1&#xff0c;安装Pyhook3. 安装PyUs…

【淘宝网消费类电子产品销售数据可视化】

淘宝网消费类电子产品销售数据可视化 引言数据爬取与处理数据可视化系统功能1. 总数据量分析2. 店铺总数据3. 店铺销售额排名4. 不同电子商品销售价格5. 单个商品价格排名6. 不同省份平均销量7. 不同地区的平均销售额8. 省份数量9. 每个省份有用的平均个数 创新点结语 引言 随…

【PostgreSQL】从零开始:(二)PostgreSQL下载与安装

【PostgreSQL】从零开始:&#xff08;二&#xff09;PostgreSQL下载与安装 Winodws环境下载与安装PostgreSQL下载PostgreSQL安装PostgreSQL1.登录数据库2.查看下我们已有的数据库 Liunx环境下载与安装PostgreSQL使用YUM下载安装PostgreSQL1.下载PostgreSQL安装包2.安装PostgreS…

Selenium库自动化测试入门

前言 为什么要学selenium&#xff1f;&#xff1f;前面已经学了requests库我们会发现 对于绝大多数动态渲染的网页来说&#xff0c;用requests进行爬虫比较繁琐。 所以我们还是要学习一下selenium库&#xff0c;以帮助我们更高效的爬取网页。 环境&#xff1a; pychar 202…

golang反射(reflect)虽爽,但很贵

标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码&#xff0c;提高开发效率。 但是使用反射势必会多出大量的操作指令&#xff0c;导致性能下降 案例 字段赋值方式对比 type Student struct {Name string…

centos7中的管道和重定向

重定向 0 标准输入 1 标准输出 2 标准错误 3 进程在执行的过程中打开的其他文件 & 标准正确和标准错误的混合输出 输出重定向 &g…

[C/C++]——内存管理

学习C/C的内存管理 前言&#xff1a;一、C/C的内存分布二、C语言中动态内存管理方式三、C中动态内存管理方式3.1、new/delete操作符3.1.2、new/delete操作内置类型3.1.3、new/delete操作自定义类型 3.2、认识operator new和operator delete函数3.3、了解new和delete的实现原理3…

修改Element UI可清空Input的样式

如图所示&#xff0c;修改Input右侧的清空按钮位置&#xff1a; <el-input class"create-catalog-ipt"placeholder"请输入相关章节标题"v-model"currentCatalogTitle"clearable /> // SCSS环境 ::v-deep {.create-catalog-ipt {input {he…

web前端项目-影视网站开发

影视网站 本项目主要使用到了 HTML&#xff1b;CSS&#xff1b;JavaScript脚本技术&#xff1b;AJAX无刷新技术&#xff1b;jQuery等技术实现了动态影视网页 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE> <html lang"en"> <head>…

【01分数规划】ABC324F

[ABC324F] Beautiful Path - 洛谷 思路 首先看到这个形式很容易想到 01 分数规划&#xff0c;即去二分答案&#xff0c;然后就是转化成 是否存在一个路径使得 sigma b - mid * sigma c > 0 显然只需要改变一下边权&#xff0c;跑一遍最长路即可 #include <bits/stdc.h…

招聘网站爬虫及可视化的实现-计算机毕业设计推荐 django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

docker-compose Install gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…

C语言小游戏之三子棋(可以做期末设计作业)

哈喽大家好&#xff0c;今天为大家带来一个用C语言写的小游戏--三子棋&#xff0c;就是大家小时候用树枝和石子玩的那种游戏&#xff0c;这个小项目可以用于大家的C语言期末设计作业&#xff0c;不会很难&#xff0c;都是C语言基本的操作 下面是游戏截图&#xff1a; 完全可以…

C语言写的 mini版的 http 服务器 , 很详细

文章目录 效果展示整体架构流程技术细节完整代码 效果展示 例如&#xff1a;htpp://192.168.23.140/home.html -> 正确的请求格式 home.html 这个资源是放在我们服务器里面的 , 并不是随便访问的资源,当然我们可以放很多的资源进去. 整体架构流程 整个实现的流…

2 接口测试实战演示

上一篇&#xff1a;1 接口测试介绍-CSDN博客 拿到开发提供的接口文档后&#xff0c;结合需求文档开始做接口测试用例设计&#xff0c;下面用最常见也最简单的注册功能介绍整个流程。 说明&#xff1a;以演示接口测试流程为主&#xff0c;不对演示功能做详细的测试&#xff0c;…