Halcon颜色识别案例color_pieces

样本训练程序

*训练样本
    
    *创建一个进行分类或回归多层感知器
    create_class_mlp (3, 7, 4, 'softmax', 'normalization', 3, 42, MLPHandle)
    *将图像中的训练样本添加到多层感知器的训练数据中。
    add_samples_image_class_mlp (Image, Classes, MLPHandle)
    
    disp_message (WindowHandle, 'Training...', 'window', 100, 12, 'black', 'false')
    train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)

程序

dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 557, 416, 'black', WindowHandle)
*设置字体
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*定义区域填充模式
dev_set_draw ('margin')


*初始化
ImageRootName:='color/color_pieces_0'
Regions:=['yellow','pink','blue','background']
Highlight:=['goldenrod','magenta','cyan']

gen_empty_obj(Classes)

for Mode:= 0 to 1 by 1
    *设置输出颜色
    dev_set_color('black')
    read_image(Image,ImageRootName+'0')
    
    
    if(Mode==1)
        rgb1_to_gray (Image, GrayImage)
        *3个图像转换为一个3通道图像
        compose3 (GrayImage, GrayImage, GrayImage, Image)
        dev_display (Image)
        disp_message (WindowHandle, 'Train and apply the classes again on gray images', 'window', 12, 12, 'black', 'true')
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
    
    
    
    
    
    *列举颜色类别
    if(Mode==0)    
        *通过循环人工选择颜色类别,便于之后的样本训练
        for I:= 1 to 4 by 1
            dev_display (Image)
            dev_display (Classes)
            disp_message (WindowHandle, ['Drag rectangle inside ' + Regions[I - 1] + ' color','Click right mouse button to confirm'], 'window', 24, 12, 'black', 'false')
            *画矩形是使用鼠标画,下一句代码是在生成一个和鼠标画出来的一样的矩形,然后将矩形与空Classes连接起来,将矩形放在Classes里面
            draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
            gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
            *连接2个对象元组
            concat_obj (Classes, Rectangle, Classes)
        endfor
          
    endif
    
    
*训练样本
    
    *创建一个进行分类或回归多层感知器
    create_class_mlp (3, 7, 4, 'softmax', 'normalization', 3, 42, MLPHandle)
    *将图像中的训练样本添加到多层感知器的训练数据中。
    add_samples_image_class_mlp (Image, Classes, MLPHandle)
    
    disp_message (WindowHandle, 'Training...', 'window', 100, 12, 'black', 'false')
    train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
    
    
    for J := 0 to 3 by 1
        read_image (Image, ImageRootName+J)
        if(Mode==1)
            rgb1_to_gray (Image, GrayImage)
            compose3 (GrayImage, GrayImage, GrayImage, Image)
                        
         endif
         
         
        *用多层感知器对图像进行分类。
         classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
         dev_display (Image)
         disp_message (WindowHandle, 'Looking for 4 game pieces of each color ...', 'window', 24, 12, 'black', 'false')
         dev_set_line_width (2)
         
         
        for Figure := 1 to 3 by 1
            *复制HALCON数据库中的一个标志性对象。
            copy_obj (ClassRegions, ObjectsSelected, Figure, 1)
            *计算一个区域的连接组件。
            connection (ObjectsSelected, ConnectedRegions)
            *借助形状特征选择区域。
            select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 400, 99999)
            *元组中对象的个数
            count_obj (SelectedRegions, Number)
            dev_set_color (Highlight[Figure - 1])
            dev_display (SelectedRegions)
            OutString := Regions[Figure - 1] + ': ' + Number + '   '
            dev_set_color ('green')
            disp_message (WindowHandle, OutString, 'window', 24 + 30 * Figure, 12, 'black', 'false')
            if (Number != 4)
                disp_message (WindowHandle, 'Not OK', 'window', 24 + 30 * Figure, 120, 'red', 'false')
            else
                disp_message (WindowHandle, 'OK', 'window', 24 + 30 * Figure, 120, 'green', 'false')
            endif
        endfor
        
        
        
         if (J < 3 or Mode == 0)
            disp_continue_message (WindowHandle, 'black', 'true')
            stop ()
        endif
         
         
    endfor
    *清除一个多层感知器
     clear_class_mlp (MLPHandle)
    
    
    
endfor


dev_clear_window ()
dev_display (Image)
Message := 'The game pieces cannot be classified reliable on'
Message[1] := 'gray images because the gray values of the'
Message[2] := 'game pieces cannot always be distinguished from'
Message[3] := 'the gray values of the background.'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值