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

2024-04-12 07:28
文章标签 产品 颜色 halcon 抽取 mlp

本文主要是介绍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常用的场景一般都是单颜色区分,相当多时候是在预处理中进行。但是作为项目上,常见于各种颜色有色差的分类。比如产品有色差的情况,也是可以用颜色抽取实现。

这篇关于Halcon颜色抽取-多产品颜色(MLP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896483

相关文章

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

雷动WEBRTC产品

http://www.rtcpower.com/html/leidongwebrtc.html ; 1.前言      WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得一项技术。WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以

全球AI产品Top100排行榜

Web Top50的榜单里,AIGC类型的应用占比52%,遥遥领先。AIGC类型包括图像、视频、音乐、语音等的内容生成和编辑。音乐生成应用Suno在过去六个月中的排名跃升最为显著,从第36位上升至第5位。排名第二大类是通用对话/AI聊天/角色扮演类型的应用,占比20%,包括常见的ChatGPT、Claude、Character.ai等。其他是AI写作(8%)、AI搜索/问答(6%)、Agent/