Halcon 图像分类:SVM进行“写轮眼”分类

往期文章:

Halcon 缺陷检测:掩膜的妙用 

Halcon 缺陷检测:基恩士的浓淡补正近似实现 

Halcon 图像修复:多种方式去除水印 

Halcon 数据拟合:分别用最小二乘法和神经网络拟合直线曲线


目录

 🚀🚀1.分类器

1.1 SVM介绍及使用


前言:各位朋友们好,我是大脸猫。分类器属于机器学习的一种,在图像算法中的发展历史中,相对于深度学习来说较为老旧。近几年由于深度学习的大火,很多无法做到精准筛选缺陷的情况也迎刃而解。但这项技术也是对硬件要求颇高,即使各家对神经网络做出轻量化,硬件门槛也还是存在的,但分类器比深度学习却是不太吃硬件配置,相对来说也算是轻量化应用


 🚀🚀1.分类器

1.1 SVM介绍及使用

Halcon中有常见的四类分类器:MLP(多层感知机)、SVM(支持向量机)、K-NN(K-最邻近)、GMM(高斯混合类型),其中分类器的区别如下:

MLPSVMK-NNGMM
训练速度中等
分类速度中等中等
达到更高的分类速度要求

1、少量的分类种类

2、少量的神经元

1、少量的支持向量1、少量的训练样本1、少量的分类种类
内存需求中等
继承训练(是否需要重新训练整个分类器)不支持不推荐支持不推荐
是否适合高维特征空间支持支持支持不支持
是否适合奇异值检测不支持支持支持支持

在本文中,我们以动漫《火影忍者》的十种写轮眼种类为例,使用SVM(支持向量机)做分类:

训练样本

 

☘️☘️算法如下:

**----------------------- 训练SVM -----------------------**
*获取所有特征属性名字
FeatureGroups := ['region','color']
get_feature_names (FeatureGroups, FeatureNames)
get_feature_lengths (FeatureNames, FeatureLengths)
*创建SVM
create_class_train_data (sum(FeatureLengths), ClassTrainDataHandle)
set_feature_lengths_class_train_data (ClassTrainDataHandle, FeatureLengths, FeatureNames)
*读图
list_files ('D:/trains', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    *图像文件名称格式:'种类'+'序号'
    parse_filename (ImageFiles[Index], BaseName, Extension, Directory)
    tuple_str_bit_select (BaseName, 1, Select)
    ClassID := number(Select)
    
    get_domain (Image, Domain)
    *计算特征数据
    calculate_features (Domain, Image, FeatureNames, Features)
    *添加特征数据
    add_sample_class_train_data (ClassTrainDataHandle, 'feature_column', Features, ClassID)
endfor
select_feature_set_svm (ClassTrainDataHandle, 'greedy', [], [], SVMHandle, SelectedFeatures, Score)
clear_class_train_data (ClassTrainDataHandle)

**----------------------- 测试 -----------------------**
*存放种类
TestClass := []
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/test', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])

    get_domain (Image, Domain)
    calculate_features (Domain, Image, SelectedFeatures, Features)
    classify_class_svm (SVMHandle, real(Features), 1, Class)
    TestClass := [TestClass,Class]
endfor

 

测试样本

 

⭐⭐分析:

① get_feature_names (FeatureGroups, FeatureNames),获取特征的名称。

② get_feature_lengths (FeatureNames, FeatureLengths),根据特征名称,计算每个特征的维度

create_class_train_data (sum(FeatureLengths), ClassTrainDataHandle),根据总的特征维度,创建对应的SVM模型。

set_feature_lengths_class_train_data (ClassTrainDataHandle, FeatureLengths, FeatureNames),将每个特征的名称以及对应的维度添加到SVM模型。

⑤ calculate_features (Domain, Image, FeatureNames, Features),在特定的区域和图像,按照每个特征的名称中,计算每个的特征数据Features

⑥ add_sample_class_train_data (ClassTrainDataHandle, 'feature_column', Features, ClassID),将计算得出的特征数据Features以及对应的分类种类添加到SVM模型。

⑦ select_feature_set_svm (ClassTrainDataHandle, 'greedy', [], [], SVMHandle, SelectedFeatures, Score),在特征数据群里面筛选出训练数据中最有效果的子特征,即自动抓取有效子特征,并返回SVM模型以及SelectedFeatures(有效子特征)

按照本次的分类测试结果来看,分类准确率百分之百,四种分类器均有优缺点,在实际应用场景中,还是需要贴合自身需求选择合适的分类器。

分类器普遍活跃在缺陷识别、光学字符识别、图像分割等领域,特别是面对多种缺陷容易混淆的情况时,选择合适的分类器往往能事半功倍。

由于SVM是自动抓取特征,因此在海量数据集中,存在很多很多的特征数据,直接训练测试SVM模型时,速度可能会很慢,数据的某些噪音,也可能存在过拟合现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心满意足的大脸猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值