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

  • 📢博客主页: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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

排序的简单理解(上)

1. 排序的概念及引用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作(按照我们的需求能够有序的将数据信息排列起来)。 稳定性:假…

shiro入门demo(一)身份验证

shiro&#xff08;身份&#xff09;认证&#xff0c;简单来说就是登录/退出。搭建springboot项目&#xff0c;引入shiro和单元测试依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…

Nacos-NacosRule 负载均衡—设置集群使本地服务优先访问

userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 NacosRule 权重计算方法 目录 一、介绍 二、示例&#xff08;案例截图&#xff09; 三、总结 一、介绍 NacosRule是AlibabaNacos自己实现的一个负载均衡策略&…

【Spark精讲】Spark Shuffle详解

目录 Shuffle概述 Shuffle执行流程 总体流程 中间文件 ShuffledRDD生成 Stage划分 Task划分 Map端写入(Shuffle Write) Reduce端读取(Shuffle Read) Spark Shuffle演变 SortShuffleManager运行机制 普通运行机制 bypass 运行机制 Tungsten Sort Shuffle 运行机制…

mysql EXPLAIN命令的输出列简介

MySQL :: MySQL 8.2 Reference Manual :: 8.8.2 EXPLAIN Output Format explain命令提供了mysql数据库如何执行SQL语句的信息&#xff0c;可以跟 SELECT, DELETE, INSERT, REPLACE, UPDATE, 和 TABLE一起使用。 explain命令可能输出多行&#xff0c;每行涉及一个表 。 先来看…

数据之美:零售业的变革之道

数据可视化能够为零售业带来令人瞩目的变化。随着零售业务的发展&#xff0c;数据可视化成为了洞察市场、优化运营并提升客户体验的强大工具。下面我就以可视化从业者的视角出发&#xff0c;简单分析一下数据可视化为零售业可能带来的改变。 数据可视化让零售商深入了解消费者行…

LeetCode(59)反转链表 II【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 反转链表 II 1.题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&am…

【为什么POI的SXSSFWorkbook占用内存更小?】

&#x1f513;为什么POI的SXSSFWorkbook占用内存更小&#xff1f; &#x1f3c6;POI的SXSSFWorkbook&#x1f3c6;POI的SXSSFWorkbook占用内存&#x1f3c6;扩展配置行缓存限制 &#x1f3c6;POI的SXSSFWorkbook SXSSFWorkbook类是Apache POI库的一部分&#xff0c;它是一个流…

第五节JavaScript typeof、类型转换与正则表达式

一、typeof、null和undefined 1、typeof操作符 使用typeof操作符来检测变量的数据类型。 实例&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>JavaScript基础知识学习</title></head><bod…

单元测试二(实验)-云计算2023.12-云南农业大学

1、实践系列课《深入浅出Docker应用》 https://developeraliyun.com/adc/scenarioSeries/713c370e605e4f1fa7be903b80a53556?spma2c6h.27088027.devcloud-scenarioSeriesList.13.5bb75b8aZHOM2w 容器镜像的制作实验要求 创建Dockerfile文件: FROM ubuntu:latest WORKDIR data…

C++初阶(十六)优先级队列

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用 二、priori…

高性能国产TYPE-C/DP/EDP转MIPIDSI/CSI/LVDS,龙迅LT7911D,支持高达4K60HZ的分辨率

LT7911D概述&#xff1a; T7911D是一款高性能TYPE-C/DP/EDP转2 PORT MIPI或者LVDS的芯片&#xff0c;目前主要在AR/VR或者显示器上应用的很多&#xff0c;对于DP1.2输入&#xff0c;LT7911D可配置为1/2/4车道。自适应均衡化使其适用于长电缆应用&#xff0c;最大带宽可达21.6G…

【AntDB数据库】亚信安慧通过CMMI5级认证

近日&#xff0c;湖南亚信安慧科技有限公司&#xff08;以下简称“亚信安慧”&#xff09;通过CMMI5级认证。这标志着亚信安慧在软件研发能力、过程组织能力、项目管理能力、解决方案交付能力等方面达到了国际先进水平&#xff0c;具备为通信、金融、交通、能源、物联网等行业客…

图片如何无损放大?亲测三款好用图片无损放大工具

图片如何无损放大&#xff1f;当遇到图片不清晰或模糊受损的情况时&#xff0c;我们往往希望能够使用这张图片。然而&#xff0c;图片的模糊问题往往令人困扰。幸运的是&#xff0c;我们可以使用一些方法将图片无损放大&#xff0c;从而解决照片模糊的问题。今天&#xff0c;我…

开源云原生网关Linux Traefik本地部署结合内网穿透远程访问

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…

实验01:静态路由配置实验

1.实验目的&#xff1a; 本次实验的主要目的是了解静态路由的配置和实现原理&#xff0c;熟悉路由器的基本操作&#xff0c;掌握在网络中进行静态路由配置的方法和技巧。 2.实验内容&#xff1a; 搭建网络拓扑&#xff0c;包括三台路由器和两台PC。配置路由器的IP地址和路由…

深入理解C语言的函数参数

1、一个简单的函数 int Add(int x, int y) {return x y; }int main() {printf("%d", Add(2, 3, 4, 5, 6));return 0; } 这一段足够简单的代码&#xff0c;闭眼都能知道运行结果会在屏幕上打印 5 。那编译器是怎么处理后面的 4、5、6 &#xff1f; 我们再看看这个函…

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》&#xff…

Vue3-17-ref 模板引用的基本使用

什么是模板引用 简单来说&#xff0c;就是在 js 代码中 获取到 html 中的dom元素的完整信息&#xff0c; 从而实现直接操作dom元素的效果。模板引用的语法 1、给 dom 元素添加 ref名称 属性&#xff0c;指定一个独有的名称&#xff1b; 2、js 中 声明一个 与 dom 元素的 ref 同…

华为海思、燧原、海光等齐力打破封锁,谁主AI芯片江山| 百能云芯

近期&#xff0c;美国对英伟达出口进行了限制&#xff0c;导致英伟达无法向中国大陆销售AI芯片&#xff0c;这一局势催生了中国本土IC设计企业的崛起&#xff0c;包括华为旗下的海思科技、腾讯旗下的燧原科技&#xff0c;以及海光信息和新创公司天数智芯等纷纷抢占市场。 据百能…