分类器值高斯混合模型-------halcon

本程序源码来自 halcon学习教程,只为记录下来,后续翻阅,
柠檬和橘子两种类型,以面积和圆度作为主要特征来区分,个人猜想,若是找个相似的物体代替应该也有混淆

read_image (Image, 'color/citrus_fruits_01')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_line_width (2)
dev_display (Image)

******初始化特征面积 圆度变量/类名称
*定义特征面积
FeaturesArea:=[]
*定义特征圆度
FeaturesCircularity:=[]
*定义分类名称
ClassName:=['橘子','柠檬']
*创建高斯混合模型   两个类,两个特征
create_class_gmm (2, 2 ,1, 'spherical', 'normalization', 10, 42, GMMHandle)
for i:=1 to 4 by 1
    read_image (Image, 'color/citrus_fruits_'+ i$'.2d')
    *分割三个通道
    decompose3 (Image, ImageRed, ImageGreen, ImageBlue)   
    dev_display (ImageRed)
    dev_set_color ('black')
    *获得红色通道的图像的亮部分
    threshold (ImageRed, Region, 50, 255)
    *填充整个区域
    fill_up (Region, RegionFillUp)
    *计算连通区域
    connection (RegionFillUp, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 999999)
    *显示水果区域
    dev_display (SelectedRegions)
    *计算区域个数
    count_obj (SelectedRegions, NumberObjects)
    
    *针对每个区域计算区域的特征 圆度
    for j:=1 to NumberObjects by 1
        dev_set_color ('red')
        select_obj (SelectedRegions, ObjectSelected, j)
        
        *计算区域圆度
        circularity (ObjectSelected, Circularity)
        *计算区域中心,面积
        area_center (ObjectSelected, Area, Row, Column)
        *特征面积组合在一个数组中
        FeaturesArea := [FeaturesArea,Area]
        *特征圆度组合在一个数组中
        FeaturesCircularity:=[FeaturesCircularity,Circularity]
        *特征圆度面积转化成 实数特征
        FeatureVector := real([Circularity,Area])
        
        ****特征向量分别增加到不同类训练样本,提前已知前两张图片是橘子的后面的是柠檬的
        if(i<=2)
            *橘子的面积和圆度特征增加到橘子的类别中
            add_sample_class_gmm (GMMHandle, FeatureVector, 0, 0)
            *显示已增加特征
            disp_message (WindowHandle, 'Add to Class:'+ClassName[0], 'window', Row, Column-100, 'black', 'true')
        else
            *柠檬的面积和圆度特征增加到柠檬的类别中
            add_sample_class_gmm(GMMHandle,FeatureVector,1,0)
            *显示已增加特征
            disp_message (WindowHandle, 'Add to Class:'+ClassName[1], 'window', Row, Column-100, 'black', 'true')
        endif
    endfor
    disp_continue_message (WindowHandle, 'black', 'true')
    stop()
endfor
dev_clear_window ()
*训练分类器
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)
****以下读取新图像;提取新图像特征使用已经训练过的分类器进行分类
for i:=1 to 15 by 1
    *读取图像
    read_image (Image, 'color/citrus_fruits_'+ i$'.2d')
    *分割图像为三个通道
    decompose3 (Image, ImageRed, ImageGreen, ImageBlue)
    *显示图像
    dev_display (Image)
    dev_set_color ('black')
    *获得红色通道图像亮的区域
    threshold (ImageRed, Region, 50, 255)
    *填充区域
    fill_up (Region, RegionFillUp)
    *计算连通区域
    connection (RegionFillUp, ConnectedRegions)
    
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 999999)
    *显示选择得到的区域
    dev_display (SelectedRegions)
    *计算区域个数
    count_obj (SelectedRegions, NumberObjects)
    *循环对各区域特征进行识别分类
    for j:=1 to NumberObjects by 1
        *选择第J个区域
        select_obj (SelectedRegions, ObjectSelected, j)
        *计算区域圆度
        circularity (ObjectSelected, Circularity)
        *计算区域中心,面积
        area_center (ObjectSelected, Area, Row, Column)
        *面积特征合并在一个数组中
        FeaturesArea:=[FeaturesArea,Area]
        *圆度特征合并在一个数组中
        FeaturesCircularity:=[FeaturesCircularity,Circularity]
        *特征转换成实数
        FeatureVector := real([Circularity,Area])
        *使用分类器进行分类
        classify_class_gmm (GMMHandle, FeatureVector, 1, ClassID, ClassProb, Density, KSigmaProb)
        *分类后显示类目名称,以所属类概念456
        disp_message (WindowHandle, 'Class:'+ClassName[ClassID], 'window', Row, Column-100, 'black', 'true')
        disp_message (WindowHandle, 'KSigmaProb:'+KSigmaProb, 'window', Row+30, Column-100, 'black', 'true')
    endfor
    stop()
endfor
**清除分类器,释放内容
clear_class_gmm (GMMHandle)   

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值