Halcon svm图片分类

数据地址

链接:https://pan.baidu.com/s/1yb8a6z1ogVplYLUMTfMcCw
提取码:5iwm

主程序

* 支持向量机的分类

**1、确认训练图片 是否存在**********************

Image_exist := false 
Image_bulb_path := './img/halogen_bulb/halogen_bulb_01.png'

dev_get_preferences ('suppress_handled_exceptions_dlg', SaveMode)
dev_set_preferences ('suppress_handled_exceptions_dlg', 'true')

try
    read_image (Image, Image_bulb_path)
    dev_close_window ()
    read_path := './img/halogen_bulb/'
    * 文件存在
    Image_exist := true   
    break
catch (Exception)
endtry

if (not Image_exist)
    * 图片文件夹不存在
    dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
    disp_message (WindowHandle, '没有找到图片', 'window', -1, -1, 'black', 'true')
    stop()
endif

dev_get_preferences ('suppress_handled_exceptions_dlg', SaveMode)

**2、读取第一张图片*********************
read_image (Image_bulb, Image_bulb_path)
get_image_pointer1 (Image_bulb, Pointer, Type, Width, Height)

dev_clear_window ()
dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle1)
set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')
dev_display (Image_bulb)

**3、创建SVM *****************************
* 类型名称列表  合格,不合格,不存在
ClassNames := ['good', 'bad', 'none'] 
* 类型对应颜色
ClassColors := ['forest green', 'red', 'red']

* svm参数
Nu := 0.05
KernelParam := 0.02
NumFeatures := 7
* 创建SVM
create_class_svm (NumFeatures, 'rbf', KernelParam, Nu, |ClassNames|, \
                  'one-versus-one', 'normalization', 6, SVMHandle)

**4、添加样本到分类器************************
add_samples_to_svm (SVMHandle, read_path, ClassNames, WindowHandle1)


**5、训练分类器******************************
dev_clear_window ()
disp_message (WindowHandle1, 'Training...', 'window', -1, -1, 'black', 'true')
train_class_svm (SVMHandle, 0.001, 'default')
disp_message (WindowHandle1, 'Training completed', 'window', -1, -1, 'black', 'true')
disp_continue_message (WindowHandle1, 'black', 'true')
stop ()

**6、使用分类器******************************
dev_set_draw ('margin')

*列出文件夹目录下的所有文件
list_files (read_path, ['files','recursive'], Files)
*获取后缀PNG结尾的所有图像
Selection := regexp_select(Files,'.*[.]png')

*读取一张图像
read_image (Image, Selection[0])
*关闭窗口
dev_close_window ()
*获取图像的大小
get_image_size (Image, Width, Height)
*打开窗口
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
*设置字体信息
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

for Index := 0 to |Selection| - 1 by 1
    
    classify_class_img_path (Image, Region, SVMHandle, Selection[Index], Class)
    *显示图像
    dev_display (Image)
    *设置输出对象颜色
    dev_set_color (ClassColors[Class])
    *显示阈值区域
    dev_display (Region)
    disp_message (WindowHandle, 'Classified as:' + ClassNames[Class], 'window', -1, -1, 'black', 'true')
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
endfor


* 清除内存里的分类器
clear_class_svm (SVMHandle)

子程序 --添加图片到分类器

add_samples_to_svm (SVMHandle, read_path, ClassNames, WindowHandle1)
参数说明
SVMHandle, SVM分类器句柄
read_path, 读取图片总文件夹地址
ClassNames, 分类名称(文件夹名称)
WindowHandle1 显示句柄
在这里插入图片描述

for ClassNumber := 0 to |ClassNames| - 1 by 1
    *列出目录下的所有文件
    list_files (ReadPath + ClassNames[ClassNumber], 'files', Files)
    *获取后缀为PNG的所有文件
    Selection := regexp_select(Files,'.*[.]png')
    for Index := 0 to |Selection| - 1 by 1
        *读取图像
        read_image (Image, Selection[Index])
        dev_display (Image)

        *图像阈值
        threshold (Image, Region, 0, 40)
        dev_display (Region)
        
        * 提取region的特征
        calculate_features(Region, Features)

        * 添加样品 放入SVM
        add_sample_class_svm (SVMHandle, Features, ClassNumber)
    endfor
endfor
return ()

子程序 – 提取区域特征

calculate_features (Region, Features) 调用
参数
Region, 区域(连通域)输入(图片类型)
Features 输出特征(7个特征数组)在这里插入图片描述

* 面积
area_center (Region, Area, Row, Column)

* 紧密度
compactness (Region, Compactness)

* 二阶矩
moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)
* 凸度
convexity (Region, Convexity)

* 7个特征
Features:=real([Area, Compactness, PSI1, PSI2, PSI3, PSI4, Convexity])

return ()

子程序 – 图片的分类

classify_class_img_path (Image, Region, SVMHandle, Selection[Index], Class)

Image, 输出图片
Region, 输出图片区域
SVMHandle, 输入SVM分类句柄
img_path, 输入图片路径
Class 输出 图片类型在这里插入图片描述

read_image (Image, img_path)
*对图像阈值
threshold (Image, Region, 0, 40)
*计算区域的特征值
calculate_features (Region, Features)
*用SVM分类器进行分类
classify_class_svm (SVMHandle, Features, 1, Class)

return ()
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廷益--飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值