一、项目背景
锂电池卷绕后的红标需检测是否合格,红标的位置不固定,通过mlp分类器将背景色与红色进行训练,用分类器进行识别红标是否OK
二、halcon实现过程
1.图像增强
scale_image (Image, ImageScaled, 4, 0)
2.提取红色,背景色
gen_rectangle1 (ROI_red, 1159.09, 2716.76, 1169.44, 2742.93)
gen_rectangle1 (ROI_back, 1425.73, 2642.53, 1446.39, 2709.4)
concat_obj (ROI_red, ROI_back, ObjectsConcat)
3.训练
create_class_mlp (3, 12, 2, 'softmax', 'normalization', 2, 40, MLPHandle)
add_samples_image_class_mlp (ImageScaled, ObjectsConcat, MLPHandle)
train_class_mlp (MLPHandle, 500, 0.5, 0.01, Error, ErrorLog)
write_class_mlp (MLPHandle, 'mlp.gmc')
4.分类识别
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image1, ImageFiles[Index])
dev_display (Image1)
scale_image (Image1, ImageScaled1, 3, 0)
classify_image_class_mlp (ImageScaled1, ClassRegions, MLPHandle, 0.5)
for Color := 1 to 1 by 1
copy_obj (ClassRegions, ObjectsSelected, Color, 1)
connection (ObjectsSelected, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 15000, 99999)
count_obj (SelectedRegions, Number)
area_center (SelectedRegions, Area, Row, Column)
if (Number==1)
get_image_size (Image1, Width, Height)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Image1)
dev_display (ObjectsSelected)
dev_disp_text ('红标OK', 'image', Row-200, Column, 'green', [], [])
else
dev_display (Image1)
dev_disp_text ('红标NG', 'image', 500, 1500, 'red', [], [])
endif
endfor
stop ()
endfor
三、完整代码及图像
list_image_files ('image', 'default', [], ImageFiles)
read_image (Image, ImageFiles[0])
scale_image (Image, ImageScaled, 4, 0)
gen_rectangle1 (ROI_red, 1159.09, 2716.76, 1169.44, 2742.93)
gen_rectangle1 (ROI_back, 1425.73, 2642.53, 1446.39, 2709.4)
concat_obj (ROI_red, ROI_back, ObjectsConcat)
create_class_mlp (3, 12, 2, 'softmax', 'normalization', 2, 40, MLPHandle)
add_samples_image_class_mlp (ImageScaled, ObjectsConcat, MLPHandle)
train_class_mlp (MLPHandle, 500, 0.5, 0.01, Error, ErrorLog)
write_class_mlp (MLPHandle, 'mlp.gmc')
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image1, ImageFiles[Index])
dev_display (Image1)
scale_image (Image1, ImageScaled1, 3, 0)
classify_image_class_mlp (ImageScaled1, ClassRegions, MLPHandle, 0.5)
for Color := 1 to 1 by 1
copy_obj (ClassRegions, ObjectsSelected, Color, 1)
connection (ObjectsSelected, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 15000, 99999)
count_obj (SelectedRegions, Number)
area_center (SelectedRegions, Area, Row, Column)
if (Number==1)
get_image_size (Image1, Width, Height)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Image1)
dev_display (ObjectsSelected)
dev_disp_text ('红标OK', 'image', Row-200, Column, 'green', [], [])
else
dev_display (Image1)
dev_disp_text ('红标NG', 'image', 500, 1500, 'red', [], [])
endif
endfor
stop ()
endfor