LBP+GLCM+SVM对开源数据集kth_tips_col_200x200进行简单分类

539 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情

前言

  想着组合两种针对灰度图像提取特征再使用SVM进行分类,这里选用了LBP结合GLCM组合成特征向量,对特征向量进行SVM分类,输出混淆矩阵。

  处理的数据集是kth_tips_col_200x200这个数据集

数据集介绍

   kth_tips_col_200x200数据集总共类别是10类,内容为常见物体的表面图。

类别名通道数
aluminium_foil3
brown_bread3
corduroy3
cotton3
cracker3
类别名通道数
linen3
orange_peel3
sandpaper3
sponge3
styrofoam3

样例图: image.png

LBP和GLCM

  在MATLAB中依靠extractLBPFeatures函数可以提取图像LBP特征,不过需要注意的事,这个函数是需要对灰度图进行提取特征,如果读取的图是三通道图像的话,需要转为单通道图像;同理在MATLAB中可以依靠graycomatrix对图像可以提取GLCM特征。

  在处理kth_tips_col_200x200数据集的时候需要注意的是该数据集的图像像素大小已被固定为200x200但是该数据集为三通道的图像,所以在进行特征提取的时候需要将图像转化为单通道图像。

SVM

   在对提取到特征矩阵(LBP+glcm)进行svm分类标签为提取到图像特征的类别名称。在MATLAB里 使用fitcecoc可以进行多分类的SVM分类;这里需要注意的是fitcecoc的使用方法,大家注意特征向量和标签相对应即可。

程序流程

  1. 清空工作区变量
  2. 采用目录式读取数据集图像
  3. 对读取数据打乱进行训练:测试 = 8:2
  4. 获取训练集的数量
  5. 构建for循环依次提取图像的LBP和GLCM特征向量
  6. 组合LBP和GLCM特征向量
  7. 提取被提取图像的标签名称并组合成向量
  8. 对特征向量和标签向量进行SVM分类
  9. 输出混淆矩阵

结果展示:

   这里的单类的数量是65,通过混淆矩阵可以看出结果相对可以。

image.png

注意事项

   大家在提取特征的时候由于LBP和GLCM的矩阵维度不一致,大家需要转换一下矩阵维度,在组合总的特征向量的时候需要把两种特征横向地拼接起来,两个向量行数一致,列数可以不一样。