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)