*关闭当前窗口
dev_close_window()
*创建新窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*设置显示颜色
dev_set_colored(6)
*设置绘制形状的方式
dev_set_draw ('margin')
dev_set_line_width (3)
*创建MLP分类器,输出方法选择softmax,用于分类
create_class_mlp (1, 1, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
*创建训练样本图像与其分类的对应关系
*图像和分类名称意义对应
FileNames:=['m1','m2']
Classes :=[0,1]
for J := 0 to |FileNames| - 1 by 1
*读取训练图像
read_image (Image, 'C:/Users/33751/Desktop/JIQI/train_data/'+FileNames[J])
dev_display (Image)
*对图像进行分割
rgb1_to_gray (Image, GrayImage)
*全局阈值
threshold (GrayImage, darkRegion, 0, 105)
*给予直方图的自动阈值分割方法
*auto_threshold (GrayImage, darkRegion, 8.0)
*自动全局阈值分割方法
*binary_threshold (GrayImage, darkRegion, 'max_separability', 'dark', UsedThreshold)
connection (darkRegion, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 2000, 99999)
fill_up (SelectedRegions, Objects)
dev_display (Objects)
disp_message (WindowHandle, 'Add Sample'+J+', Class Index '+ Classes[J], 'window', 10, 10, 'black', 'true')
*将分割后的对象Objects添加进分类器对应Classes[J]中
count_obj (Objects, Number)
*提取特征(圆度)
for N := 1 to Number by 1
select_obj (Objects, Region, N)
circularity (Region, Circularity)
add_sample_class_mlp (MLPHandle, Circularity, Classes[J])
endfor
stop()
disp_continue_message (WindowHandle, 'black', 'true')
endfor
dev_clear_window()
disp_message (WindowHandle, 'Training...', 'window', 10, 10, 'black', 'true')
*训练MLP分类器
train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
clear_samples_class_mlp (MLPHandle)
*读取输入的待检测图像
read_image (testImage, 'F:/Halcon_workstation/data/m5.jpg')
rgb1_to_gray (testImage, GrayTestImage)
*将图像进行分割
threshold (GrayTestImage, darkTestRegion, 0, 105)
connection (darkTestRegion, ConnectedTestRegions)
select_shape (ConnectedTestRegions, SelectedTestRegions, 'area', 'and', 1500, 99999)
fill_up (SelectedTestRegions, testObjects)
*将分割后的图像Objects进行分类
count_obj (testObjects, Number)
Classes := []
Colors := ['yellow','magenta']
dev_set_colored (6)
dev_display (testImage)
*提取特征(圆度)
for J := 1 to Number by 1
select_obj (testObjects, singleRegion, J)
circularity (singleRegion, Circularity)
classify_class_mlp (MLPHandle, Circularity, 1, Class, Confidence)
Classes := [Classes,Class]
dev_set_color (Colors[Classes[J-1]])
dev_display (singleRegion)
*area_center (singleRegion, Area, Row, Column)
*disp_message (WindowHandle, '面积' + Area + '坐标:'+ Column + ' ' + Row, 'window', 0,0, 'white', 'false')
dfor
*清空MLP分类器,释放内存
clear_class_mlp (MLPHandle)