classify_halogen_bulbs.hdev
本例程展示了通过提取区域形态特征(面积(Area)、密实度(Compactness)、四个不变矩特征(PSI1,PSI2,PSI3,PSI4)和凸度(Convexity)) 交给SVM训练 实现分类
原代码
get_system ('image_dir', HalconImages)
get_system ('operating_system', OS)
if (OS{0:2} == 'Win')
tuple_split (HalconImages, ';', HalconImages)
else
tuple_split (HalconImages, ':', HalconImages)
endif
ReadOK := false
dev_get_preferences ('suppress_handled_exceptions_dlg', SaveMode)
dev_set_preferences ('suppress_handled_exceptions_dlg', 'true')
for k := 0 to |HalconImages| - 1 by 1
try
read_image (Image, HalconImages[k] + '/halogen_bulb/halogen_bulb_01.png')
ReadPath := HalconImages[k] + '/halogen_bulb/'
ReadOK := true
break
catch (Exception)
endtry
endfor
if (not ReadOK)
disp_message (WindowHandle, 'Could not find the images in $HALCONIMAGES', 'window', -1, -1, 'black', 'true')
stop ()
endif
dev_set_preferences ('suppress_handled_exceptions_dlg', SaveMode)
read_image (Image, 'halogen_bulb/halogen_bulb_01.png')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*
ClassNames := ['good','bad','none']
Colors := ['forest green','red','red']
Nu := 0.05
KernelParam := 0.02
*
* Create an SVM classifier
create_class_svm (7, 'rbf', KernelParam, Nu, |ClassNames|, 'one-versus-one', 'principal_components', 5, SVMHandle)
*
* Add samples
add_samples_to_svm (ClassNames, SVMHandle, WindowHandle, ReadPath)
dev_clear_window ()
*
* Train the classifier
disp_message (WindowHandle, 'Training...', 'window', -1, -1, 'black', 'true')
train_class_svm (SVMHandle, 0.001, 'default')
disp_message (WindowHandle, 'Training completed', 'window', -1, -1, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Classify halogen bulbs
classify_regions_with_svm (SVMHandle, Colors, ClassNames, ReadPath)
*
* Clear the classifier from memory
clear_class_svm (SVMHandle)
一、步骤
1. 准备好两组卤素灯图像样本,好坏的各若干张图像;
训练数据分为三类 good bad none 另有8张测试图片 训练最好不要用用于测试的图片 会影响训练效果。测试同理 最好不要用训练图片 以免得到错误的结果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306190551685.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppRHhpYW9odW8=,size_16,color_FFFFFF,t_70)
2. 对样本图像进行分割,获取卤素灯关键部位区域;
二值化提取区域 计算区域特征(面积(Area)、密实度(Compactness)、四个不变矩特征(PSI1,PSI2,PSI3,PSI4)和凸度(Convexity))
# 内核类型 最好选择 rbf 文档上写大部分分类都可以正确, 非线性也可以
create_class_svm (7, 'rbf', KernelParam, Nu, |ClassNames|, 'one-versus-one', 'principal_components', 5, SVMHandle)
threshold (Image, Region, 0, 40)
area_center (Region, Area, Row, Column)
compactness (Region, Compactness)
#获得四个不变矩
moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)
convexity (Region, Convexity)
Features := real([Area,Compactness,PSI1,PSI2,PSI3,PSI4,Convexity])
calculate_features (Region, Features)
add_sample_class_svm (SVMHandle, Features, ClassNumber)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306190903566.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppRHhpYW9odW8=,size_16,color_FFFFFF,t_70)
3. 选择合适的对图像的描述,作为识别的特征;
train_class_svm (SVMHandle, 0.001, 'default')
4. 提取测试图片特征 交给SVM分类
read_image (Image, Selection[Index])
threshold (Image, Region, 0, 40)
area_center (Region, Area, Row, Column)
compactness (Region, Compactness)
moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)
convexity (Region, Convexity)
Features := real([Area,Compactness,PSI1,PSI2,PSI3,PSI4,Convexity])
classify_class_svm (SVMHandle, Features, 1, Class)
classify_pills_auto_select_features.hdev compare_ocr_svm_mlp.hdev ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306192952844.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppRHhpYW9odW8=,size_16,color_FFFFFF,t_70)
|