一. 概要
在进行颜色识别时,一般有如下方法:
- 可根据图像处理的颜色值选择合适的色彩空间,相应进行色彩空间转化,选择
R、G、B、 H、 S、 I
六个分量图像的对比度比较好的图像进行处理;
可参考:[Halcon&图像] 彩色图转灰度图处理 - 使用过
Blob
分析:二值化,形态学,形状选择,但是对光照敏感,不稳定; - 基于多层神经网络
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) |