Halcon 学习笔记--颜色识别(7)

摘要:
通过改变红色(R)、绿色(G)和蓝色(B)颜色通道及其叠加,可以获得各种颜色。S(饱和度)表示颜色接近光谱颜色的程度。使用阈值方法进行颜色识别时,可以查看与相应颜色的色度或亮度相对应的范围。斑点分析是H或S通道中颜色选择最常用的方法:“电缆”+i)*步骤1:分割颜色分解3(图像,

一、颜色

        RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。

       HSV 是根据颜色的直观特性创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 H(Hue)色度,用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;S(Saturation)表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。S(Intenstity)饱和度,表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

     通过阈值方法作颜色识别时,可以查看相应颜色的色度或亮度所对应区间范围,

     Halcon 学习笔记--颜色识别(7)第1张

二、颜色识别方法

       (1)利用HSV不同分量具有不同特点,在H或者S通道进行颜色选择

          Halcon 学习笔记--颜色识别(7)第2张

         这种方法中最常用就是Blob分析:二值化,形态学,形状选择

         

dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
for i := 1 to 2 by 1
    read_image (Image, 'cable' + i)
    * 第一步拆分颜色
    decompose3 (Image, Red, Green, Blue)
    * 第二步颜色转换
    trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
    *第三步 分析H/S分量,Blob分析
    threshold (Saturation, HighSaturation, 100, 255)
    reduce_domain (Hue, HighSaturation, HueHighSaturation)
    threshold (HueHighSaturation, Yellow, 20, 50)
    connection (Yellow, ConnectedRegions)
    *第四步特征提取
    *选择面积最大那个区域
    select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 0)
    *闭运算:先膨胀后腐蚀
    closing_circle (SelectedRegions, Yellow, 3.5)
    reduce_domain (Image, Yellow, ImageReduced)
    dev_display (HueHighSaturation)
    dev_display (ImageReduced)
    stop ()
endfor

这种方法很大缺点,相对而言比较简单,容易实现;但是对光照敏感,不稳定

 (2)分类器

   步骤:

          1. 创建空对象,用以保存训练样本 gen_empty_obj(Class)

          2.生成训练样本(绘制ROI区域方式,)     

    *绘制ROI选择要训练的颜色
    draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
    gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
    concat_obj (Class, Rectangle, Class)

          ROI 形状可以任意,但不能包含背景色,小矩形包围的形状例如可以如下:

          Halcon 学习笔记--颜色识别(7)第3张

          3. 设置分类器参数

create_class_mlp (3, 10, 5, 'softmax', 'normalization', 10, 42, MLPHandle)

     如果是三通道彩色图像,那第一个参数可以设置3,第三个参数为输出参数个数即Class包含的颜色个数,除去背景色。第二个参数是第三个参数的2倍左右。

         4.将训练样本Class 添加到网络中

add_samples_image_class_mlp (Image, Class, MLPHandle)

        5.训练样本

train_class_mlp (MLPHandle, 200, 0.01, 0.01, Error, ErrorLog)

       6. 识别

 classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)

    完整代码如下:

dev_update_window ('off')
dev_close_window()
read_image (Image, 'E:/欣奕华/项目/Halcon/STUDY/网络课程笔记/4.颜色识别/clamp_pile_01.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
Color := ['Green','Blue','Yellow','LightBlue','BackColor']

HightColor :=['green','blue','yellow','slate blue']
dev_set_color ('white')
*创建存储样本对象变量
dev_set_draw ('margin')
gen_empty_obj(Class)

*生成训练样本

for I := 1 to |Color| by 1
    dev_display (Image)
    *绘制ROI选择要训练的颜色
    draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
    gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
    concat_obj (Class, Rectangle, Class)
endfor

*设置网络感知参数

create_class_mlp (3, 10, 5, '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, 200, 0.01, 0.01, Error, ErrorLog)

* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('E:/项目/Halcon/STUDY/网络课程笔记/4.颜色识别', ['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, ImageFiles[Index])
    * Image Acquisition 01: Do something
    *分类识别物体
    classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
    dev_display (Image)
        for I := 1 to 4 by 1
        copy_obj (ClassRegions, ObjectsSelected, I, 1)
        *connection (ObjectsSelected, ConnectedRegions)
        opening_rectangle1 (ObjectsSelected, RegionOpening, 5, 5)
        dev_set_color (HightColor[I-1])
        dev_set_draw ('fill')
        fill_up (RegionOpening, RegionFillUp)
       stop ()
    endfor
endfor

在这个案例中识别物体颜色,相互有交叉,缺点是在后期做处理显示通讯不好,如果图像颜色。

Halcon 学习笔记--颜色识别(7)第4张

 

免责声明:文章转载自《Halcon 学习笔记--颜色识别(7)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu添加用户adduser和useraddvue3 封装仿antd-vue的Table组件基本实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端插件的使用

最近在做后台系统的图表报表显示 用到了很多的前端js插件 jquery插件,下面罗列一下 1.多选插件  bootstrap-multiselect  select2 bootstrap-select 我自己代码里用的是bootstrap-multiselect 和 bootstrap--select bootstrap-multiselect 插件 几个...

oracle读写文件--利用utl_file包对磁盘文件的读写操作

摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做,后来想起ORACLE有很多包,功能很好很强大,于是网上参考了些文章完成了. 主要是用了ORACLE的两个包:UTL_FILE和DBMS_LOB. 实现过程: 第一步:以管理员用户登陆设置可操作目录 --CREATE...

My97日期控件My97DatePicker使用(备忘)

前言: 最近老是找不到资料,痛之又痛的情况下,决定好好将所有涉及到的东西通通做个备忘记录。 参考网址: 1、http://www.my97.net/dp/demo/index.htm 2、http://www.mysuc.com/test/My97DatePicker/#m246 使用备忘—— 日期:2010-10-30 版本:4.7 功能:两个日期文本框...

discuz(dz) SSO(单点,同歩,异步)登录 --转

原文地址:http://fc-lamp.blog.163.com/blog/static/1745666872012762520123/ discuz(dz) SSO(单点,同歩,异步)登录  一般流程:   1 发起请求:   1 )登录请求到 localhost/member.php  初始化一些设置,然后调用source/module/member/...

【BIEE】04_当维度表中的维不存在事实表中,需要展示所有维度并且数据类展示为0

有时候,我们往往会存在这样的需求 例如:事实表的数据如下 EMP_FACT表示事实表,DIM_LEVEL是维度表 预期效果:(根据员工信息,分析各等级员工工资与员工个数) 我们在BIEE报表中新建报表,然后展示报表,展示结果如下: 图1 那么这个效果跟我们的预期效果可是差别比较大的!我们如何来改变这种差别呢? 首先我们分析上面2个表,我们需要解决2个...

AI学习---数据IO操作&神经网络基础

数据IO操作 TF支持3种文件读取:    1.直接把数据保存到变量中    2.占位符配合feed_dict使用    3. QueueRunner(TF中特有的) 文件读取流程 文件读取流程(多线程 + 队列)1)构造文件名队列(先读取文件名到队列,方便快速读取文件)    file_queue = tf.train.string_input_p...