Halcon颜色抽取-多产品颜色(MLP)

前言

//颜色抽取,单产品多区域
https://blog.csdn.net/m0_51559565/article/details/135216905

由于在颜色抽取上面,我已经发了一篇博客了,是单产品多区域的情况。所以对于细分原理上就不过多的描述了。
本文主要是针对多产品多颜色的情况进行说明。实际生产线中,往往会出现n种产品同时存在的情况,他们可能颜色不同,或者颜色及其相近。其中本文章就针对5种相近颜色的不同产品进行说明。

1.halcon程序

*创建MLP分类器,区分6种颜色区域。5种所需要的颜色,1种背景create_class_mlp (3, 7, 6, 'softmax', 'normalization', 3, 42, MLPHandle)
dev_get_window (WindowHandle)list_files ('D:/2024Work/work/4.11颜色分选/砖石', ['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 1read_image (Image, ImageFiles[Index])*创建6个分类的空区域gen_empty_region (EmptyObject1)gen_empty_region (EmptyObject2)gen_empty_region (EmptyObject3)gen_empty_region (EmptyObject4)gen_empty_region (EmptyObject5)gen_empty_region (back)*创建存放区域的集合数组gen_empty_obj (Union)*绘制我们需要的颜色区域dev_display (Image)draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)gen_contour_region_xld (Rectangle, Contours, 'border')dev_display (Image)dev_display (Contours)reduce_domain (Image, Rectangle, ROI)*绘制背景dev_display (Image)draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)gen_rectangle1 (Rectangle1, Row11, Column11, Row21, Column21)gen_contour_region_xld (Rectangle1, Contours1, 'border')dev_display (Image)dev_display (Contours1)reduce_domain (Image, Rectangle1, back)*第一种颜色if (Index=0)concat_obj (Union, ROI, Union)concat_obj (Union, EmptyObject2, Union)concat_obj (Union, EmptyObject3, Union)concat_obj (Union, EmptyObject4, Union)concat_obj (Union, EmptyObject5, Union)concat_obj (Union, back, Union)endif*第二种颜色if (Index=1)concat_obj (Union, EmptyObject1, Union)concat_obj (Union, ROI, Union)concat_obj (Union, EmptyObject3, Union)concat_obj (Union, EmptyObject4, Union)concat_obj (Union, EmptyObject5, Union)concat_obj (Union, back, Union)endif*第三种颜色if (Index=2)concat_obj (Union, EmptyObject1, Union)concat_obj (Union, EmptyObject2, Union)concat_obj (Union, ROI, Union)concat_obj (Union, EmptyObject4, Union)concat_obj (Union, EmptyObject5, Union)concat_obj (Union, back, Union)endif*第四种颜色if (Index=3)concat_obj (Union, EmptyObject1, Union)concat_obj (Union, EmptyObject2, Union)concat_obj (Union, EmptyObject3, Union)concat_obj (Union, ROI, Union)concat_obj (Union, EmptyObject5, Union)concat_obj (Union, back, Union)endif*第五种颜色if (Index=4)concat_obj (Union, EmptyObject1, Union)concat_obj (Union, EmptyObject2, Union)concat_obj (Union, EmptyObject3, Union)concat_obj (Union, EmptyObject4, Union)concat_obj (Union, ROI, Union)concat_obj (Union, back, Union)endif*将全部颜色添加到mlp中add_samples_image_class_mlp (Image, Union, MLPHandle)
endfor
*训练mlp
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
stop ()
******************************************验证**********************
*将句柄写入文件中
write_class_mlp (MLPHandle, 'D:/2024Work/work/4.11颜色分选/砖石/mlp.mlp')
*从文件中读取句柄
read_class_mlp ('D:/2024Work/work/4.11颜色分选/砖石/mlp.mlp', MLPHandle1)
*初始化结果参数
ResultColor:=0
list_files ('D:/2024Work/work/4.11颜色分选/砖石', ['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 1read_image (Image, ImageFiles[Index])*对图像应该分类器classify_image_class_mlp (Image, ClassRegions, MLPHandle1, 0.5)*通过循环和面积筛选,判断当前的颜色for i := 1 to 5 by 1select_obj (ClassRegions, Result, i)union1 (Result, RegionUnion)area_center (RegionUnion, Area1, Row3, Column3)if (Area1>100000)ResultColor:=iendifendforstop ()
endfor

2.halcon程序解析

2.1创建多颜色mlp模型

*创建MLP分类器,区分6种颜色区域。5种所需要的颜色,1种背景
create_class_mlp (3, 7, 6, 'softmax', 'normalization', 3, 42, MLPHandle)

在本文中,需要区分的产品是5个蓝色的石头,颜色相近,所以在创建mlp模型时,需要使用5个区分项和背景。总共6个区分项

2.2创建存放数组和绘制ROI

 	gen_empty_region (EmptyObject1)gen_empty_region (EmptyObject2)gen_empty_region (EmptyObject3)gen_empty_region (EmptyObject4)gen_empty_region (EmptyObject5)gen_empty_region (back)*创建存放区域的集合数组gen_empty_obj (Union)*绘制我们需要的颜色区域dev_display (Image)draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)reduce_domain (Image, Rectangle, ROI)*绘制背景dev_display (Image)draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)gen_rectangle1 (Rectangle1, Row11, Column11, Row21, Column21)reduce_domain (Image, Rectangle1, back)

在绘制我们需要的颜色的时候,只需要绘制的区域包含所需颜色即可,但是同时应该尽量避免出现其他颜色。
在这里插入图片描述
在绘制背景时,应该将大部分背景的颜色的区域尽量的包括其中,这样子可以有效的区分背景。
在这里插入图片描述

2.3训练模型

add_samples_image_class_mlp (Image, Union, MLPHandle)
*训练mlp
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)

每次绘制完图像后,需要对区域进行添加,将所需要训练的内容添加到模型中,然后开启模型训练

2.4写入和读取文件

*将句柄写入文件
write_class_mlp (MLPHandle, 'D:/2024Work/work/4.11颜色分选/砖石/mlp.mlp')
*从文件中读取句柄
read_class_mlp ('D:/2024Work/work/4.11颜色分选/砖石/mlp.mlp', MLPHandle1)

2.5验证

*初始化结果参数
ResultColor:=0
list_files ('D:/2024Work/work/4.11颜色分选/砖石', ['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 1read_image (Image, ImageFiles[Index])*对图像应该分类器classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)*通过循环和面积筛选,判断当前的颜色for i := 1 to 5 by 1select_obj (ClassRegions, Result, i)union1 (Result, RegionUnion)area_center (RegionUnion, Area1, Row3, Column3)if (Area1>100000)ResultColor:=iendifendforstop ()
endfor

将图像输入到图像分类器中,即可得到所需要的颜色的面积,根据颜色面积进行筛选即可
在这里插入图片描述

总结

有不清楚的地方,可以移步前言的链接查看。mlp常用的场景一般都是单颜色区分,相当多时候是在预处理中进行。但是作为项目上,常见于各种颜色有色差的分类。比如产品有色差的情况,也是可以用颜色抽取实现。

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

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

相关文章

模型训练-保存训练数据

1.目的 找到一个可运行的代码,可以每个epoch打印训练数据,但是不会保存。因为在改进模型需要这些训练数据进行对比,所以需要将每个epoch的训练数据保存下来,写到一个文件中。 2.解决方案 直接问ChatGPT,提示词如下&…

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互,从而实现了Web请求的接收,处理和响应。 它的组件有如下几个: DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

练习题(2024/4/11)

1每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入…

Leetcode刷题之消失的数字(C语言版)

Leetcode刷题之消失的数字(C语言版) 一、题目描述二、题目解析 一、题目描述 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 注意:本题相对书上原题稍作…

Java中实现监听UDP协议的指定端口并收到数据按照十六进制输出

场景 对接协议中需要监听UDP协议的指定端口并监听数据,且数据格式为十六进制。 如果是在linux服务上,可以快速通过C或者python脚本等方式实现。 这里使用Java代码实现,可便于后续做其他存储数据等的扩展,且只需要在服务器上安装…

华为OD七日集训第6期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 6 期五、精心挑选21道高频经典题目,作为入门。第1天、逻辑分析第2天、双指针第3天、滑动窗口第4天、二叉树第5天、矩阵第6天、分治递归第7天、深度优先搜索 大家好,我是哪吒。 最近一直在…

《安静的力量》探寻自我的心灵之旅,找到内心的宁静和真正的幸福 - 三余书屋 3ysw.net

安静的力量:通往止境的冒险 大家好,今天我们要解读的书籍是《安静的力量》。让我们先设想一个画面:在纽约曼哈顿,紧邻繁华的时代广场,一位29岁的青年在他的公寓里工作。这里毗邻纽约最富有人群的聚居区,而…

Windows Edge 兼容性问题修复:提升用户体验的关键步骤

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Django框架的基础知识

Django(英文发音:dʒŋgəʊ)是一个开放源代码的Web应用框架,使用高性能的Python语言编写而成。Django框架的诞生,最初是用来开发和管理Lawrence Publishing Group(劳伦斯出版集团)旗下的新闻网…

【vscode】在本地加载远端环境并开发

【vscode】在本地利用远程服务器显卡跑代码 写在最前面vscode:远程到本地1、安装ssh插件2、添加服务器连接配置3、连接服务器4. SSH配置5. 在ssh中安装python解释器 vscode基本操作 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址:😈 目录 一、环境配置以及数据集准备 数据集准备 数据集格式展示 环境配置,按照官网所述即可 二、一些调整 vit_base的预训练模型 远程debug的设置 Tokenizer初始化失败 读入网络图片的调整 三、训练过程 Image Encoder …

FebHost:英国.UK域名注册使用中存在哪些侵权行为?

截至2023年6月,英国.uk域名作为全球第五大热门顶级域名,注册数量超过1100万,成为全球最知名和广泛使用的域名之一。英国域名家族包括四个独特的域名后缀——.uk、.co.uk、.org.uk 和 .me.uk——每个都有其独特的特点,并根据数字领…

Mac下用adb命令安装apk到android设备笔记

查询了些资料记录备用。以下是在Mac上使用命令行安装APK文件的步骤: 1. 下载并安装ADB: 如果您的Mac上没有安装ADB,请从官方的Android开发者网站下载Android SDK Platform Tools:Android SDK Platform Tools。将下载的ZIP文件解…

三次 Bspline(B样条曲线) NURBS曲线的绘制 matlab

先来了解几个概念: 1.1 节点向量: B-Spline需要定义曲线的节点向量U,它可以对应到Bezier曲线的参数u。 其元素个数 (m1) 和曲线阶数 k 、控制点个数n满足:m1k1n1 如果U的每段的距离是相等,那么这个B-Spline就被称为均…

关于UCG游戏平台的一些思考

UCG游戏平台,全称User Generated Content,即用户生成内容。它涵盖了所有玩家可以自主编辑的部分,包含并不限于换装、捏脸、关卡摆放等内容。 UCG概念在最近又火了起来,但这个模式出现的并不早。早在10多年前,war3编辑器…

为linux和windows系统备份还原点,防止系统出问题无法恢复

一、linux系统操作办法: sudo apt update sudo apt install timeshift timeshift --create 输出结果如下: 等待约5分钟就会创建成功: 这个备份功能只备份系统,不备份文件,但也不会删除文件。 工作站系统的保存位置&a…

Win10安装sqlplus遇到报错的解决办法

1.下载安装sqlplus.exe的错误解决过程 最近有用到sqlplus连接Oracle数据库执行自动化脚本,Orcle服务器版本是11.2.0.1。在Navicat工具上通过如下语句查询到的版本信息截图如图1所示: SELECT * FROM v$version; 图1 Oracle服务器版本信息 其中“Oracle Da…

Docker部署SpringBoot+Vue前后端分离项目

文章目录 1. 安装Docker1. 1 卸载旧版Docker1.2 配置yum仓库1.3 安装Docker1.4 添加自启动配置1.5 配置阿里云镜像加速1.6 测试 2. 安装Nginx2.1 拉取镜像2.2 安装Nginx2.3 测试 3. 安装MySQL3.1 拉取镜像3.2 安装MySQL3.3 连接MySQL 4. 部署SpringBoot项目4.1 Maven打包4.2 编…

深度学习Vue框架生命周期(三)

一.什么是生命周期? 在vue中,生命周期就是vue实例程序从创建到销毁的这个过程,在生命周期中,不同阶段我们可以做不同的事情。vue的生命周期是创建阶段、挂载阶段、更新阶段、销毁阶段 二.什么是钩子函数? 钩子函数就是…

数据库数据恢复—Sql Server数据库文件丢失如何恢复数据?

服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因&#xf…