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

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

一. 概要

在进行颜色识别时,一般有如下方法:

  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)
目录
相关文章
|
20天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
45 3
|
2月前
|
机器学习/深度学习 数据可视化
KAN干翻MLP,开创神经网络新范式!一个数十年前数学定理,竟被MIT华人学者复活了
【10月更文挑战第12天】MIT华人学者提出了一种基于Kolmogorov-Arnold表示定理的新型神经网络——KAN。与传统MLP不同,KAN将可学习的激活函数放在权重上,使其在表达能力、准确性、可解释性和收敛速度方面表现出显著优势,尤其在处理高维数据时效果更佳。然而,KAN的复杂性也可能带来部署和维护的挑战。论文地址:https://arxiv.org/pdf/2404.19756
46 1
|
21天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习的奇迹:如何用神经网络识别图像
【10月更文挑战第33天】在这篇文章中,我们将探索深度学习的奇妙世界,特别是卷积神经网络(CNN)在图像识别中的应用。我们将通过一个简单的代码示例,展示如何使用Python和Keras库构建一个能够识别手写数字的神经网络。这不仅是对深度学习概念的直观介绍,也是对技术实践的一次尝试。让我们一起踏上这段探索之旅,看看数据、模型和代码是如何交织在一起,创造出令人惊叹的结果。
26 0
|
2月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
3月前
|
机器学习/深度学习 自然语言处理 计算机视觉
用于图像和用于自然语言的神经网络区别
主要区别总结 数据结构:图像数据是二维像素矩阵,具有空间结构;文本数据是一维序列,具有时间结构。 网络架构:图像处理常用CNN,注重局部特征提取;自然语言处理常用RNN/LSTM/Transformer,注重序列和全局依赖。 操作单元:图像处理中的卷积核在空间上操作;自然语言处理中的注意力机制在序列上操作。
24 2
|
4月前
|
机器学习/深度学习 人工智能 编解码
【神经网络】基于对抗神经网络的图像生成是如何实现的?
对抗神经网络,尤其是生成对抗网络(GAN),在图像生成领域扮演着重要角色。它们通过一个有趣的概念——对抗训练——来实现图像的生成。以下将深入探讨GAN是如何实现基于对抗神经网络的图像生成的
41 3
|
3月前
网络分类器 cgroup 【ChatGPT】
网络分类器 cgroup 【ChatGPT】
|
4月前
|
安全 Apache 数据安全/隐私保护
你的Wicket应用安全吗?揭秘在Apache Wicket中实现坚不可摧的安全认证策略
【8月更文挑战第31天】在当前的网络环境中,安全性是任何应用程序的关键考量。Apache Wicket 是一个强大的 Java Web 框架,提供了丰富的工具和组件,帮助开发者构建安全的 Web 应用程序。本文介绍了如何在 Wicket 中实现安全认证,
47 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
RNN、LSTM、GRU神经网络构建人名分类器(三)
这个文本描述了一个使用RNN(循环神经网络)、LSTM(长短期记忆网络)和GRU(门控循环单元)构建的人名分类器的案例。案例的主要目的是通过输入一个人名来预测它最可能属于哪个国家。这个任务在国际化的公司中很重要,因为可以自动为用户注册时提供相应的国家或地区选项。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】