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; 也可以结合使用这些运算符和…

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

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

软件架构的演进过程

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

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

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

记一次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…

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…

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

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

SpringBoot 3.2.0 基于Logback定制日志框架

依赖版本 JDK 17 Spring Boot 3.2.0 工程源码:Gitee 日志门面和日志实现 日志门面(如Slf4j)就是一个标准,同JDBC一样来制定“规则”,把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接…

re模块(正则)

【 一 】 re模块概述 在线测试工具 正则表达式在线测试 - 站长工具 随着正则表达式越来越普遍,Python 内置库 re 模块也支持对正则表达式使用 Python 提供了re模块可以支持正则表示表达式使用,re模块提供了9个常量、12个函数 使用方法: re…

FRP 内网穿透指南:简单上手,快速入门

最近受朋友启发,突然萌生了一个想法,那就是如何将家里闲置五六年的台式机给利用起来, 本来打算组装一个NAS存储服务器,但是硬盘实在是有点小贵,所以决定先买了一块799元的4T机械硬盘, 然后做的frp内网穿透&…

同步与互斥(三)

一、递归锁 /* 创建一个递归锁,返回它的句柄。 * 此函数内部会分配互斥量结构体 * 返回值: 返回句柄,非NULL表示成功 */ SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void );/* 释放 */ BaseType_t xSemaphoreGiveRecursive( SemaphoreHandle_t…

全自动智能四向车系统|海格里斯HEGERLS四向穿梭车机器换人 科技赋能

近年来面对用户小批量、多品种、定制化产品服务需求日渐增多,制造行业仓储库容利用率低、分拣效率低、无法快速响应等问题更加凸显!核心设备也由传统货架转变为智能仓储设备立体货架的存储方式,形成更加自动化、智能化的系统集成物流体系。其…

camunda-modeler画图入门

软件下载 camunda-modeler是camunda的工作流绘制桌面工具 5.9.0和5.18.0版本下载地址 https://storage.googleapis.com/downloads-camunda-cloud-release/camunda-modeler/5.9.0/camunda-modeler-5.9.0-win-x64.ziphttps://storage.googleapis.com/downloads-camunda-cloud-…

WAVE SUMMIT+ 2023倒计时2天,传文心一言将曝最新进展!

传文心一言将曝最新进展! 亮点一:趋势引领,“扛把子”文心一言将曝新进展亮点二:干货十足,硬核低门槛开发秘籍大放送亮点三:蓄势待发,大模型赋能产业正当时亮点四:群星闪耀&#xff…

什么是波分复用 (WDM) 或密集波分复用 (DWDM)?

波分复用 (WDM) 是一种光纤传输技术,可以使用多个光波长(或颜色)通过同一介质发送数据。两种或多种颜色的光可以在一根光纤上传播,并且可以在光波导中以光谱上的不同波长或频率传输多种信号。 早期的光纤传输系统通过简单的光脉冲…