halcon第十九讲:基于高斯混合模型的水果分类

高斯混合模型是将多个服从高斯分布的模型进行线性组合,几乎能拟合成任何一条曲线。比如在生活中男生身高普遍在175左右,女生身高普遍在165左右,并且都服从高斯分布,就可通过中间交叉点进行分类。

 上面只用到一种特征,下面的例子为halcon例程—》方法—》特征提取—》classify cirtrus_fruits.hdev ,这里的水果分类用到的是圆度和面积两种特征,其模型将是二维高斯分布曲面。

*基于高斯混合模型的水果分类

*采集图像
read_image (Image, 'citrus_fruits_01.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)

Circulity:=[]
Area:=[]
class:=['orange','lemon']
*创建高斯混合模型
create_class_gmm (2, 2, 1, 'spherical', 'normalization', 10, 42, GMMHandle)
dev_set_draw ('margin')
dev_set_line_width (2)

*提取特征并添加样本
for i:=1 to 4 by 1
    read_image (Image1, 'citrus_fruits_'+i$'.2d')  
    decompose3 (Image1, Red, Green, Blue)  
    dev_display (Image1)
    threshold (Red, Regions, 42, 255)
    fill_up (Regions, RegionFillUp)
    connection (RegionFillUp, ConnectedRegions)    
    select_shape (ConnectedRegions, SelectedRegions1, 'area', 'and', 4365.81, 50000)
    count_obj (SelectedRegions1, Number)
    for j:=1 to Number by 1
        select_obj (SelectedRegions1, ObjectSelected, j)
        calculate_features (ObjectSelected, Image1, ['area','circularity'], Features)       
        Circulity:=[Circulity,Features[1]]
        Area:=[Area,Features[0]]
        FeatureVector:=real(Features)
        if (i<=2)
            add_sample_class_gmm (GMMHandle, FeatureVector, 0, 0)
        else
            add_sample_class_gmm (GMMHandle, FeatureVector, 1, 0)
        endif
    endfor
endfor
stop()

*训练模型
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)

*识别分类
for k:=1 to 15 by 1
    read_image (Image2, 'color/citrus_fruits_' + k$'.2d')
    decompose3 (Image2, Red, Green, Blue)  
    threshold (Red, Regions, 42, 255)
    fill_up (Regions, RegionFillUp)
    connection (RegionFillUp, ConnectedRegions)     
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4365.81, 50000)
    count_obj (SelectedRegions, Number)
    dev_display (Image2)
    for j:=1 to Number by 1
        select_obj (SelectedRegions, ObjectSelected, j)
        area_center (ObjectSelected, Area1, Row, Column)
        calculate_features (ObjectSelected, Image1, ['area','circularity'], Features)
        FeatureVector:=real(Features)
        classify_class_gmm (GMMHandle, FeatureVector, 1, ClassID, ClassProb, Density, KSigmaProb)
        set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
        if (ClassID==0)
            disp_message (WindowHandle, class[ClassID], 'image', Row, Column, 'blue', 'false')
            disp_message (WindowHandle, '置信度:'+ClassProb, 'image', Row+20, Column, 'blue', 'false')
        else
            disp_message (WindowHandle, class[ClassID], 'image', Row, Column, 'blue', 'false')
            disp_message (WindowHandle, '置信度:'+ClassProb, 'image', Row+20, Column, 'blue', 'false')
        endif       
    endfor  
    stop()
endfor

运行结果如下:

 

猜你喜欢

转载自blog.csdn.net/qq_24946843/article/details/82284315
今日推荐