前言
想着组合两种针对灰度图像提取特征再使用SVM进行分类,这里选用了LBP结合GLCM组合成特征向量,对特征向量进行SVM分类,输出混淆矩阵。
处理的数据集是kth_tips_col_200x200这个数据集
数据集介绍
kth_tips_col_200x200数据集总共类别是10类,内容为常见物体的表面图。
类别名 | 通道数 |
aluminium_foil | 3 |
brown_bread | 3 |
corduroy | 3 |
cotton | 3 |
cracker | 3 |
类别名 | 通道数 |
linen | 3 |
orange_peel | 3 |
sandpaper | 3 |
sponge | 3 |
styrofoam | 3 |
样例图:
LBP和GLCM
在MATLAB中依靠extractLBPFeatures函数可以提取图像LBP特征,不过需要注意的事,这个函数是需要对灰度图进行提取特征,如果读取的图是三通道图像的话,需要转为单通道图像;同理在MATLAB中可以依靠graycomatrix对图像可以提取GLCM特征。
在处理kth_tips_col_200x200数据集的时候需要注意的是该数据集的图像像素大小已被固定为200x200但是该数据集为三通道的图像,所以在进行特征提取的时候需要将图像转化为单通道图像。
SVM
在对提取到特征矩阵(LBP+glcm)进行svm分类标签为提取到图像特征的类别名称。在MATLAB里 使用fitcecoc可以进行多分类的SVM分类;这里需要注意的是fitcecoc的使用方法,大家注意特征向量和标签相对应即可。
程序流程
- 清空工作区变量
- 采用目录式读取数据集图像
- 对读取数据打乱进行训练:测试 = 8:2
- 获取训练集的数量
- 构建for循环依次提取图像的LBP和GLCM特征向量
- 组合LBP和GLCM特征向量
- 提取被提取图像的标签名称并组合成向量
- 对特征向量和标签向量进行SVM分类
- 输出混淆矩阵
结果展示:
这里的单类的数量是65,通过混淆矩阵可以看出结果相对可以。
注意事项
大家在提取特征的时候由于LBP和GLCM的矩阵维度不一致,大家需要转换一下矩阵维度,在组合总的特征向量的时候需要把两种特征横向地拼接起来,两个向量行数一致,列数可以不一样。