Halcon颜色提取,基于MLP自动颜色提取功能

1.前言

在实际的图像处理中,经常会遇到彩色图像,使用彩色图像往往跟颜色识别有关系。但是使用RGB进行调参时又很难达到所需要的效果(异常区域过多不好处理)。
在Halcon中,halcon对颜色提取采用MLP(多层感知模型)的形式实现对图像颜色的识别和分类。

2.结论代码

read_image (Image, 'E:/UpperComputer/颜色提取/1.bmp')
*绘制所需要提取的区域颜色
gen_rectangle1 (ROI_0, 135.254, 399.168, 184.195, 417.796)
gen_rectangle1 (ROI_1, 186.525, 189.596, 244.789, 200.075)
gen_rectangle2 (ROI_2, 377.629, 292.054, rad(-21.818), 25.0824, 7.35622)
*将所绘制的区域联合成同一区域
union2 (ROI_0, ROI_2, RegionUnion)
union2 (RegionUnion, ROI_1, RegionUnion1)
*绘制背景区域
gen_rectangle1 (back1, 3.38358, -0.0446034, 403.07, 174.598)
*将所有区域存放在数组中
concat_obj (back1, RegionUnion1, Classes)
*创建MLP句柄。
create_class_mlp (3, 7, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
*将区域数组添加到句柄中
add_samples_image_class_mlp (Image, Classes, MLPHandle)
*训练图像,根据训练区域的复杂度,需要一段时间
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
*将句柄写入文件中
write_samples_class_mlp (MLPHandle, 'E:/UpperComputer/颜色提取/mlp.mlp')
*从文件中读出句柄
read_samples_class_mlp (MLPHandle,  'E:/UpperComputer/颜色提取/mlp.mlp')
*对图像进行分类
classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
*复制对应数组图像
copy_obj (ClassRegions, ObjectsSelected, 2, 1)
*对结果进行显示
connection (ObjectsSelected, ConnectedRegions)
gen_contour_region_xld (ConnectedRegions, Contours, 'border')
area_center (ConnectedRegions, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 100, 0)
dev_display (Image)
dev_display (Contours)
dev_display (Cross)

3.halcon案例

(1)案例问题

halcon对MLP的颜色提取提供了一个极佳的案例:color_pieces.hdv但是在实际的案例分析时发现,案例中对特殊情况的同颜色物体的识别效果不佳。
在这里插入图片描述

(2)案例优化

我们需要对相同颜色的区域进行融合。
在这里插入图片描述
这样子我们就可以避免出现对同颜色的部分,因为打光不均匀造成颜色识别异常的情况。

*读取图像
read_image (Image, 'E:/UpperComputer/颜色提取/1.bmp')
*绘制所需要提取的区域颜色
gen_rectangle1 (ROI_0, 135.254, 399.168, 184.195, 417.796)
gen_rectangle1 (ROI_1, 186.525, 189.596, 244.789, 200.075)
gen_rectangle2 (ROI_2, 377.629, 292.054, rad(-21.818), 25.0824, 7.35622)
*将所绘制的区域联合成同一区域
union2 (ROI_0, ROI_2, RegionUnion)
union2 (RegionUnion, ROI_1, RegionUnion1)
*绘制背景区域
gen_rectangle1 (back1, 3.38358, -0.0446034, 403.07, 174.598)
*将所有区域存放在数组中
concat_obj (back1, RegionUnion1, Classes)
*创建MLP句柄。
create_class_mlp (3, 7, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
*将区域数组添加到句柄中
add_samples_image_class_mlp (Image, Classes, MLPHandle)
*训练图像,根据训练区域的复杂度,需要一段时间
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
*将句柄写入文件中
write_samples_class_mlp (MLPHandle, 'E:/UpperComputer/颜色提取/mlp.mlp')
*从文件中读出句柄
read_samples_class_mlp (MLPHandle,  'E:/UpperComputer/颜色提取/mlp.mlp')
*对图像进行分类
classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
*复制对应数组图像
copy_obj (ClassRegions, ObjectsSelected, 2, 1)
*对结果进行显示
connection (ObjectsSelected, ConnectedRegions)
gen_contour_region_xld (ConnectedRegions, Contours, 'border')
area_center (ConnectedRegions, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 100, 0)
dev_display (Image)
dev_display (Contours)
dev_display (Cross)

最终训练结果
在这里插入图片描述

4.实例分析-金属表面涂胶检测

(1)参考图像

在项目上由于多种原因。例如金属板来料不稳定,材质表面处理差,打光型号不好等很多情况造成图片效果不过。例如下图中需要把绿色胶完全提取出,并计算面积与是否断胶情况。对于使用RGB调参对来料的稳定性要求过高。这个时候我们可以使用MLP进行对胶颜色的提取
在这里插入图片描述

(2)编写的程序

read_image (Image, 'E:/UpperComputer/颜色提取/16_06_59_48.jpg')
gen_rectangle1 (ROI_0, 1189.38, 885.171, 1526.06, 923.636)
gen_rectangle1 (ROI_1, 1747.25, 2.78031, 1762.57, 523.197)
gen_rectangle1 (ROI_2, 569.788, 885.932, 733.413, 905.169)union2 (ROI_0, ROI_1, RegionUnion)
union2 (RegionUnion, ROI_2, RegionUnion2)
gen_rectangle1 (ROI_back, 84.3468, 975.379, 710.018, 1927.27)concat_obj (ROI_back, RegionUnion2, Classes)
create_class_mlp (3, 7,2, 'softmax', 'normalization', 3, 42, MLPHandle)
add_samples_image_class_mlp (Image, Classes, MLPHandle)
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
copy_obj (ClassRegions, ObjectsSelected, 2, 1)
connection (ObjectsSelected, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 906015, 1.71805e+06)
dilation_circle (SelectedRegions, RegionDilation, 3.5)
gen_contour_region_xld (RegionDilation, Contours, 'border')
dev_display (Image)
dev_display (Contours)

(3)解析

第一:先对图像明显的区域进行需要区分的颜色进行选取,还有对背景选取。对于背景的选取,应尽可能的包含常见的元素,有助于大量提升背景的识别效率

read_image (Image, 'E:/UpperComputer/颜色提取/16_06_59_48.jpg')
gen_rectangle1 (ROI_0, 1189.38, 885.171, 1526.06, 923.636)
gen_rectangle1 (ROI_1, 1747.25, 2.78031, 1762.57, 523.197)
gen_rectangle1 (ROI_2, 569.788, 885.932, 733.413, 905.169)union2 (ROI_0, ROI_1, RegionUnion)
union2 (RegionUnion, ROI_2, RegionUnion2)
gen_rectangle1 (ROI_back, 84.3468, 975.379, 710.018, 1927.27)concat_obj (ROI_back, RegionUnion2, Classes)

第二:创建和训练MLP模型
创建模型时,对create_class_mlp应确定有多少参数。算子中的2代表具有2种需要被区分的颜色。如果我们训练里面需要被区分的颜色有多种,那么我们需要修改指定的参数。

create_class_mlp (3, 7,2, 'softmax', 'normalization', 3, 42, MLPHandle)
add_samples_image_class_mlp (Image, Classes, MLPHandle)
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)

其次对于不同的图像中出现找不到的区域,只需要调用一下算子,重复前面流程将颜色添加到MLP的句柄中即可

add_samples_image_class_mlp (Image, Classes, MLPHandle)

第三:结果显示。

classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
copy_obj (ClassRegions, ObjectsSelected, 2, 1)
connection (ObjectsSelected, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 906015, 1.71805e+06)
dilation_circle (SelectedRegions, RegionDilation, 3.5)
gen_contour_region_xld (RegionDilation, Contours, 'border')
dev_display (Image)
dev_display (Contours)

将所需要输出的区域进行复制一份即可。需要注意的时查看对应的区域数组。并选取合适的区域进行复制

copy_obj (ClassRegions, ObjectsSelected, 2, 1)

第三:最终结果。
绿色的胶条可以轻松被提取出。后续进行对胶条进行Blob分析即可得出结果。
在这里插入图片描述

结论

MLP模型的训练和使用过程非常简单。并且效果显著,主要针对具有物体颜色需要被区分,或者由于打光效果或者来料不稳定造成的图像异常的情况,并且可以通过颜色快速提取特征的方式。

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

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

相关文章

Hive 部署

一、介绍 Apache Hive是一个分布式、容错的数据仓库系统,支持大规模的分析。Hive Metastore(HMS)提供了一个中央元数据存储库,可以轻松地进行分析,以做出明智的数据驱动决策,因此它是许多数据湖架构的关键组…

C/C++ 递增/递减运算符和指针

可以将递增运算符用于指针和基本变量。本书前面介绍过。将递增运算符用于指针时。将把指针的值增加其指向的数据类型占用的字节数,这种规则适用于对指针递增和递减。 double arr[5] {1.1, 2.1, 3.1, 4.1, 5.1}; double *ptr arr; ptr; 也可以结合使用这些运算符和…

PostgreSQL | 概念 | 什么是OLTPOLAP?

什么是OLTP&OLAP? 大白话理解:业务系统都可以称作OLTP,基于业务系统产生的数据进行数据分析和决策的都可以称为OLAP。 OLTP OLTP( Online Transaction Processing)在线事务处理系统 用途: 用于支持日…

14.Unity中序列化

非字符串类型转字节数组 //关键类:BitConverter//所在命名空间:System//主要作用:除字符串的其他常用类型和字节数组相互转换byte[] byte1 BitConverter.GetBytes(100); 字符串类型转字节数组 //关键类:Encoding//所在命名空间&…

第十部分 欧拉图与哈密顿图

欧拉图: 历史背景: 哥尼斯堡七桥问题与欧拉图 问题提出后,很多人对此很感兴趣,纷纷进行试验,但在相当长的时间里,始终未能解决。而利用普通数学知识,每座桥均走一次,那这七座桥所有的…

软件架构的演进过程

软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构。 一, 单体架构 一个归档包(例如war格式或者Jar格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单…

共模电容:又一款EMC滤波神器?|深圳比创达电子(下)

一、共模电容 1、结构特性 图7 共模电容结构示意 如图7,共模电容是在普通叠层电容基础上,结合3端电容中为降低电容ESL的优化设计,添加了一组GND;同时这组GND还有一定的屏蔽作用,可降低电极的边缘辐射。 2、电气特性…

力扣18 四数之和 Java版本

文章目录 题目解题方法代码 题目 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复&am…

记一次redis内存没满发生key逐出的情况。

现象: 从监控上看,redis的内存使用率最大是80%,但是发生了key evicted 分析: 原因1、可能是阿里云监控没抓取到内存100%监控数据。 阿里控制台监控监控粒度是5秒。 内存使用率的计算方法。 used_memory_human/maxmemory 原因2、…

drf之路由

一 路由Routers 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。 REST framework提供了两个router SimpleRouterDefaultRouter 1.1 使用方法 1) 创建r…

自编码器的基本概念

这里写目录标题 全连接自编码器卷积自编码器正则自编码器:变分自编码器2. **VAE的改进:**3. **关键概念:**4. **目标函数:**5. **生成新样本:**6. **应用领域:** 全连接自编码器 自编码器是一种无监督学习模型&#x…

【c++】入门2

函数重载 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。 c区分重载函数是根据参数…

搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法

搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信,可支持RS485(MODBUS RTU)协议、RS485-HS协议,广泛应用于物流仓储,立库 AGV|无人叉车|搬送机器人等领域,常用定位、驻车等,本篇重点介绍CNS-RF…

oracle数据库什么是表的死锁,死锁的产生原因,怎么查询死锁的表信息,解决死锁的方法;给出具体业务场景与代码示例

oracle数据库中表的死锁 一、什么是表的死锁以及死锁的产生原因二、产生死锁的案例三、查询死锁信息解决死锁问题1 . 查询死锁信息2. 解决死锁问题 四、查看具体被死锁的SQL语句 一、什么是表的死锁以及死锁的产生原因 表的死锁是指在Oracle数据库中,两个或多个事务…

Ubuntu20.04-查看GPU的使用情况及输出详解

1. 查看GPU的使用情况 1.1 nvidia-smi # 直接在终端得到显卡的使用情况 # 不会自动刷新 nvidia-smi# 重定向到文件中 nvidia-smi > nvidia_smi_output.txt# 如果输出的内容部分是以省略号表示的,可以-q nvidia-smi -q 1.2 nvidia-smi -l # 会自动刷新&#x…

我想开发一款即时通讯APP请问还有市场吗?

随着科技的飞速发展,人们对于沟通工具的需求也在不断升级。在这个信息爆炸的时代,一款优质的即时通讯APP不仅能满足用户日常沟通需求,还能在市场中占据一席之地。本文将探讨开发一款即时通讯APP的市场前景,以及如何抓住市场机遇。…

CleanMyMac X2024免费许可证及功能详细讲解

一些用户反映自己的CleanMyMac卸载不干净?你的卸载方式正确码?当你在Mac上安装使用CleanMyMac后,需要将软件卸载,你会使用怎样方法完成操作呢?小编今天主要讲解如何卸载CleanMyMac以及卸载这款软件时应该注意的事项。一…

YACS(上海计算机学会竞赛平台)一星级题集——空心正方形

题目描述 给定一个正整数 n,请打印一个空心的正方形,它的边界由 * 构成,每条边都恰好有 n 个字符。 输入格式 单个正整数表示 n。 输出格式 输出一个边界为星号、内部空心的正方形。 数据范围 3≤n≤50。 样例数据 输入:…

华纳云:怎么设置Fiddler来拦截Java代码发送的HTTP请求

Fiddler是一款用于调试网络流量的工具,可以拦截HTTP请求和响应,适用于多种编程语言,包括Java。以下是使用Fiddler拦截Java代码发送的HTTP请求的步骤: 步骤一:安装Fiddler 下载Fiddler: 访问Fiddler官网下载…

android实战之TextView多行靠左实现

<TextViewandroid:layout_marginTop"dimen/dp_20"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"保证金说明"android:singleLine"false"android:maxLines"10"android:s…