Halcon颜色提取,基于MLP自动颜色提取功能

1.前言

在实际的图像处理中,经常会遇到彩色图像,使用彩色图像往往跟颜色识别有关系。但是使用RGB进行调参时又很难达到所需要的效果(异常区域过多不好处理)。
在Halcon中,halcon对颜色提取采用MLP(多层感知模型)的形式实现对图像颜色的识别和分类。

2.结论代码

read_image (Image, 'E:/UpperComputer/颜色提取/1.bmp')
*绘制所需要提取的区域颜色
gen_rectangle1 (ROI_0, 135.254, 399.168, 184.195, 417.796)
gen_rectangle1 (ROI_1, 186.525, 189.596, 244.789, 200.075)
gen_rectangle2 (ROI_2, 377.629, 292.054, rad(-21.818), 25.0824, 7.35622)
*将所绘制的区域联合成同一区域
union2 (ROI_0, ROI_2, RegionUnion)
union2 (RegionUnion, ROI_1, RegionUnion1)
*绘制背景区域
gen_rectangle1 (back1, 3.38358, -0.0446034, 403.07, 174.598)
*将所有区域存放在数组中
concat_obj (back1, RegionUnion1, Classes)
*创建MLP句柄。
create_class_mlp (3, 7, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
*将区域数组添加到句柄中
add_samples_image_class_mlp (Image, Classes, MLPHandle)
*训练图像,根据训练区域的复杂度,需要一段时间
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
*将句柄写入文件中
write_class_mlp (MLPHandle, 'E:/UpperComputer/颜色提取/mlp.mlp')
*从文件中读出句柄
read_class_mlp (MLPHandle,  'E:/UpperComputer/颜色提取/mlp.mlp')
*对图像进行分类
classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
*复制对应数组图像
copy_obj (ClassRegions, ObjectsSelected, 2, 1)
*对结果进行显示
connection (ObjectsSelected, ConnectedRegions)
gen_contour_region_xld (ConnectedRegions, Contours, 'border')
area_center (ConnectedRegions, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 100, 0)
dev_display (Image)
dev_display (Contours)
dev_display (Cross)

 
 

    3.halcon案例

    (1)案例问题

    halcon对MLP的颜色提取提供了一个极佳的案例:color_pieces.hdv但是在实际的案例分析时发现,案例中对特殊情况的同颜色物体的识别效果不佳。
    在这里插入图片描述

    (2)案例优化

    我们需要对相同颜色的区域进行融合。
    在这里插入图片描述
    这样子我们就可以避免出现对同颜色的部分,因为打光不均匀造成颜色识别异常的情况。

    *读取图像
    read_image (Image, 'E:/UpperComputer/颜色提取/1.bmp')
    *绘制所需要提取的区域颜色
    gen_rectangle1 (ROI_0, 135.254, 399.168, 184.195, 417.796)
    gen_rectangle1 (ROI_1, 186.525, 189.596, 244.789, 200.075)
    gen_rectangle2 (ROI_2, 377.629, 292.054, rad(-21.818), 25.0824, 7.35622)
    *将所绘制的区域联合成同一区域
    union2 (ROI_0, ROI_2, RegionUnion)
    union2 (RegionUnion, ROI_1, RegionUnion1)
    *绘制背景区域
    gen_rectangle1 (back1, 3.38358, -0.0446034, 403.07, 174.598)
    *将所有区域存放在数组中
    concat_obj (back1, RegionUnion1, Classes)
    *创建MLP句柄。
    create_class_mlp (3, 7, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
    *将区域数组添加到句柄中
    add_samples_image_class_mlp (Image, Classes, MLPHandle)
    *训练图像,根据训练区域的复杂度,需要一段时间
    train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
    *将句柄写入文件中
    write_samples_class_mlp (MLPHandle, 'E:/UpperComputer/颜色提取/mlp.mlp')
    *从文件中读出句柄
    read_samples_class_mlp (MLPHandle,  'E:/UpperComputer/颜色提取/mlp.mlp')
    *对图像进行分类
    classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
    *复制对应数组图像
    copy_obj (ClassRegions, ObjectsSelected, 2, 1)
    *对结果进行显示
    connection (ObjectsSelected, ConnectedRegions)
    gen_contour_region_xld (ConnectedRegions, Contours, 'border')
    area_center (ConnectedRegions, Area, Row, Column)
    gen_cross_contour_xld (Cross, Row, Column, 100, 0)
    dev_display (Image)
    dev_display (Contours)
    dev_display (Cross)
    
     
     

      最终训练结果
      在这里插入图片描述

      4.实例分析-金属表面涂胶检测

      (1)参考图像

      在项目上由于多种原因。例如金属板来料不稳定,材质表面处理差,打光型号不好等很多情况造成图片效果不过。例如下图中需要把绿色胶完全提取出,并计算面积与是否断胶情况。对于使用RGB调参对来料的稳定性要求过高。这个时候我们可以使用MLP进行对胶颜色的提取
      在这里插入图片描述

      (2)编写的程序

      read_image (Image, 'E:/UpperComputer/颜色提取/16_06_59_48.jpg')
      gen_rectangle1 (ROI_0, 1189.38, 885.171, 1526.06, 923.636)
      gen_rectangle1 (ROI_1, 1747.25, 2.78031, 1762.57, 523.197)
      gen_rectangle1 (ROI_2, 569.788, 885.932, 733.413, 905.169)
      

      union2 (ROI_0, ROI_1, RegionUnion)
      union2 (RegionUnion, ROI_2, RegionUnion2)
      gen_rectangle1 (ROI_back, 84.3468, 975.379, 710.018, 1927.27)

      concat_obj (ROI_back, RegionUnion2, Classes)
      create_class_mlp (3, 7,2, ‘softmax’, ‘normalization’, 3, 42, MLPHandle)
      add_samples_image_class_mlp (Image, Classes, MLPHandle)
      train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
      classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
      copy_obj (ClassRegions, ObjectsSelected, 2, 1)
      connection (ObjectsSelected, ConnectedRegions)
      select_shape (ConnectedRegions, SelectedRegions, ‘area’,and, 906015, 1.71805e+06)
      dilation_circle (SelectedRegions, RegionDilation, 3.5)
      gen_contour_region_xld (RegionDilation, Contours, ‘border’)
      dev_display (Image)
      dev_display (Contours)

        (3)解析

        第一:先对图像明显的区域进行需要区分的颜色进行选取,还有对背景选取。对于背景的选取,应尽可能的包含常见的元素,有助于大量提升背景的识别效率

        read_image (Image, 'E:/UpperComputer/颜色提取/16_06_59_48.jpg')
        gen_rectangle1 (ROI_0, 1189.38, 885.171, 1526.06, 923.636)
        gen_rectangle1 (ROI_1, 1747.25, 2.78031, 1762.57, 523.197)
        gen_rectangle1 (ROI_2, 569.788, 885.932, 733.413, 905.169)
        

        union2 (ROI_0, ROI_1, RegionUnion)
        union2 (RegionUnion, ROI_2, RegionUnion2)
        gen_rectangle1 (ROI_back, 84.3468, 975.379, 710.018, 1927.27)

        concat_obj (ROI_back, RegionUnion2, Classes)

          第二:创建和训练MLP模型
          创建模型时,对create_class_mlp应确定有多少参数。算子中的2代表具有2种需要被区分的颜色。如果我们训练里面需要被区分的颜色有多种,那么我们需要修改指定的参数。

          create_class_mlp (3, 7,2, 'softmax', 'normalization', 3, 42, MLPHandle)
          add_samples_image_class_mlp (Image, Classes, MLPHandle)
          train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
          
           
           

            其次对于不同的图像中出现找不到的区域,只需要调用一下算子,重复前面流程将颜色添加到MLP的句柄中即可

            add_samples_image_class_mlp (Image, Classes, MLPHandle)
            
             
             

              第三:结果显示。

              classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
              copy_obj (ClassRegions, ObjectsSelected, 2, 1)
              connection (ObjectsSelected, ConnectedRegions)
              select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 906015, 1.71805e+06)
              dilation_circle (SelectedRegions, RegionDilation, 3.5)
              gen_contour_region_xld (RegionDilation, Contours, 'border')
              dev_display (Image)
              dev_display (Contours)
              
               
               

                将所需要输出的区域进行复制一份即可。需要注意的时查看对应的区域数组。并选取合适的区域进行复制

                copy_obj (ClassRegions, ObjectsSelected, 2, 1)
                
                 
                 

                  第三:最终结果。
                  绿色的胶条可以轻松被提取出。后续进行对胶条进行Blob分析即可得出结果。
                  在这里插入图片描述

                  结论

                  MLP模型的训练和使用过程非常简单。并且效果显著,主要针对具有物体颜色需要被区分,或者由于打光效果或者来料不稳定造成的图像异常的情况,并且可以通过颜色快速提取特征的方式。

                  转载自:https://blog.csdn.net/m0_51559565/article/details/135216905
                  评论
                  添加红包

                  请填写红包祝福语或标题

                  红包个数最小为10个

                  红包金额最低5元

                  当前余额3.43前往充值 >
                  需支付:10.00
                  成就一亿技术人!
                  领取后你会自动成为博主和红包主的粉丝 规则
                  hope_wisdom
                  发出的红包
                  实付
                  使用余额支付
                  点击重新获取
                  扫码支付
                  钱包余额 0

                  抵扣说明:

                  1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                  2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                  余额充值