halcon学习-分类器算子与例程学习

query_feature_group_names 列出所有可用的特性组名称。
query_feature_names_by_group 返回按组排序的特性名称表。

get_feature_names 返回属于GroupNames中给定的特性组的特性名称列表。
get_feature_lengths 返回每个特征名的特征向量的长度。

create_class_train_data
set_feature_lengths_class_train_data

calculate_features (Pills, Image, FeatureNames, Features)
add_sample_class_train_data(ClassTrainDataHandle, ‘feature_column’, Features, I - 1)

tuple_str_first_n 将第一个字符从字符串元组中切到“n”的位置。

select_feature_set_svm

calculate_features(PillSelected, Image, SelectedFeatures, Features)
classify_class_svm(SVMHandle, real(Features), 1, Class)

clear_class_svm

depth_from_focus 使用多个焦点级别提取深度。
dev_set_paint 定义灰度值输出模式。

dev_close_window ()
dev_update_off ()
read_image (Image, 'color/pills_class_01')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (2)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_colored (12)
* 
PillNames:=['big_round_red','round_green','small_round_red','yellow_trans','brown','brown_green']
PillNames := [PillNames,'brown_grain','purple','turquese','pink']
PillColors:=['#D08080','#ADC691','#FFB0A1','#D5C398','#B59C87','#BCB3B8','#B7ACA1','#908E99','#97B9BC','#C0ABA9']

query_feature_group_names(AvailableGroupNames)
query_feature_names_by_group(AvailableGroupNames,AvailableFeatureNames,AvailableCorrespondingGroups)

FeatureGroups := ['region','color']
get_feature_names(FeatureGroups, FeatureNames)
get_feature_lengths(FeatureNames, FeatureLengths)

create_class_train_data(sum(FeatureLengths), ClassTrainDataHandle)
set_feature_lengths_class_train_data(ClassTrainDataHandle, FeatureLengths, FeatureNames)

for I := 1 to 10 by 1
    read_image(Image, 'color/pills_class_' + I$'.2d')
    segment_pills(Image, Pills)
    dev_display(Image)
    dev_set_color('white')
    dev_display(Pills)
    disp_message(WindowHandle, 'Collecting ' + PillNames[I - 1] + ' samples', 'window', 12, 12, 'black', 'true')
    count_obj(Pills, Number)
    calculate_features (Pills, Image, FeatureNames, Features)
    add_sample_class_train_data(ClassTrainDataHandle, 'feature_column', Features, I - 1)
    dev_set_color (PillColors[I - 1])
    dev_display (Pills)
    GroupList := sum('\'' + FeatureGroups + '\', ')
    tuple_str_first_n(GroupList, strlen(GroupList) - 3, GroupList)
     Message := 'Calculate ' + |FeatureNames| + ' features from following feature groups:'
    disp_message (WindowHandle, [Message,GroupList], 'window', 40, 12, 'black', 'true')
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
endfor
disp_message (WindowHandle, 'Selecting optimal features...', 'window', 90, 12, 'black', 'true')
select_feature_set_svm (ClassTrainDataHandle, 'greedy', [], [], SVMHandle, SelectedFeatures, Score)
disp_message (WindowHandle, ['Selected:',SelectedFeatures], 'window', 120, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* Free memory, because the training data is no longer used
clear_class_train_data (ClassTrainDataHandle)

dev_set_line_width (4)
dev_set_colored (12)
for I := 1 to 3 by 1
    * Segment pills in test image
    read_image (Image, 'color/pills_test_' + I$'.2d')
    dev_display (Image)
    segment_pills(Image, Pills)
    PillsIDs := []
    count_obj(Pills, NPills)
    for P := 1 to NPills by 1
        select_obj(Pills, PillSelected, P)
        calculate_features(PillSelected, Image, SelectedFeatures, Features)
        classify_class_svm(SVMHandle, real(Features), 1, Class)
        PillsIDs := [PillsIDs,Class]
        dev_set_color (PillColors[Class])
        dev_display (PillSelected)
        area_center(PillSelected, Area, Row, Column)
        disp_message(WindowHandle, Class + 1, 'image', Row, Column-10, 'black', 'true')
         endfor
    disp_message (WindowHandle, 'Classify image ' + I + ' of 3 using following features:', 'window', 12, 12, 'black', 'true')
    disp_message (WindowHandle, SelectedFeatures, 'window', 40, 12, 'black', 'true')
    if (I < 3)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor

先通过形态学和特征选择操作,提取橘子或柠檬的区域,获得区域的特征值(本例程特征值为圆度和面积),将两个特征值的实值组合成一个特征元组,加入到分类器的sample中,
训练分类器。
提取橘子或柠檬的区域,获取区域的特征,然后通过GMM分类器进行分类。

read_image (Image, 'color/citrus_fruits_01')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (Image)
dev_update_window ('off')
dev_update_pc ('off')
dev_update_var ('off')
* 
FeaturesArea := []
FeaturesCircularity := []
ClassName := ['orange','lemon']

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')
    dev_display (Image)
    
    get_regions(Image, SelectedRegions)
    dev_display(SelectedRegions)
    count_obj(SelectedRegions, NumberObjects)
    for J := 1 to NumberObjects by 1
        select_obj(SelectedRegions, ObjectSelected, J)
        get_features(ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
        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', RowRegionCenter, ColumnRegionCenter - 100, 'black', 'true')
        else
            add_sample_class_gmm(GMMHandle, FeatureVector, 1, 0)
            disp_message(WindowHandle, 'Add to Class:' + ClassName[1], 'window', RowRegionCenter, ColumnRegionCenter - 100, 'black', 'true')
        endif
        
    endfor
    stop()
endfor
dev_clear_window ()
visualize_2D_feature_space(Cross, Height, Width, WindowHandle, FeaturesArea[0:5],  FeaturesCircularity[0:5], 'dim gray', 18)
visualize_2D_feature_space(Cross, Height, Width, WindowHandle, FeaturesArea[6:11],  FeaturesCircularity[6:11], 'light gray', 18)


disp_continue_message (WindowHandle, 'black', 'true')
stop ()
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')
    dev_display (Image)
    * 'Classify Image', 10, 10
    get_regions (Image, SelectedRegions)
    dev_display (SelectedRegions)
    count_obj (SelectedRegions, NumberObjects)
    for J := 1 to NumberObjects by 1
        select_obj (SelectedRegions, ObjectSelected, J)
        get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
        FeaturesArea := [FeaturesArea,Area]
        FeaturesCircularity := [FeaturesCircularity,Circularity]
        FeatureVector := real([Circularity,Area])
        classify_class_gmm (GMMHandle, FeatureVector, 1, ClassID, ClassProb, Density, KSigmaProb)
        disp_message (WindowHandle, 'Class: ' + ClassName[ClassID], 'window', RowRegionCenter, ColumnRegionCenter - 100, 'black', 'true')
        disp_message (WindowHandle, 'KSigmaProb: ' + KSigmaProb, 'window', RowRegionCenter + 30, ColumnRegionCenter - 100, 'black', 'true')
    endfor
    if (I != 15)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()
endfor

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值