主要内容

图像分类与视觉词袋

使用计算机视觉工具箱™功能,通过创建一袋视觉词来进行图像类别分类。该过程生成代表图像的可视单词出现的直方图。这些直方图被用来训练一个图像分类器。下面的步骤描述了如何设置图像、创建视觉单词包,然后训练和应用图像类别分类器。

步骤1:设置图像类别集

将图像组织并划分为训练子集和测试子集。使用imageDatastore函数存储用于训练图像分类器的图像。将图像组织到类别中可以更容易地处理大型图像集。您可以使用splitEachLabel函数将图像分割为训练数据和测试数据。

读取分类图像并创建图像集。

setDir = fullfile(toolboxdir('vision'),'visiondata','imageSets');imds = imageDatastore(setDir,' inclesubfolders ',true,'LabelSource',…“foldernames”);

将集合分为训练图像子集和测试图像子集。在这个例子中,30%的图像被划分用于训练,其余的用于测试。

[trainingSet,testSet] = splitEachLabel(imds,0.3,'randomize');

步骤2:创建功能包

通过从每个类别的代表性图像中提取特征描述符,创建一个可视化词汇表或特征包。

bagOfFeatures对象定义特征或可视化词k - means聚类(统计和机器学习工具箱)算法对特征描述符进行了提取trainingSets.算法迭代地将描述符分组为k互斥集群。由此产生的集群是紧凑的,并由相似的特征分开。每个聚类中心代表一个特征或视觉词。

您可以基于特征检测器提取特征,也可以定义一个网格来提取特征描述符。网格方法可能会丢失细粒度的信息。因此,将网格用于不包含明显特征的图像,例如包含风景的图像,如海滩。使用加速健壮的特征(或SURF)检测器提供更大的规模不变性。缺省情况下,算法运行“网格”方法。

该算法工作流程分析图像的整体。图像必须有适当的标签来描述它们所代表的类。例如,一组汽车图像可以被标记为汽车。该工作流程不依赖于空间信息,也不依赖于在图像中标记特定对象。视觉词袋技术依靠的是检测而不是定位。

步骤3:用视觉词袋训练图像分类器

trainImageCategoryClassifier函数返回一个图像分类器。该函数使用纠错输出代码(ECOC)框架和二进制支持向量机(SVM)分类器训练一个多类分类器。金宝app的trainImageCategoryClassfier函数返回的可视单词包bagOfFeatures对象将图像集中的图像编码为可视化文字的直方图。然后以视觉词的直方图作为正样本和负样本来训练分类器。

  1. 使用bagOfFeatures编码方法对训练集中的每张图像进行编码。该函数从图像中检测和提取特征,然后使用近似最近邻算法为每张图像构造特征直方图。然后,该函数根据描述符与特定聚类中心的接近程度递增直方图箱。直方图的长度对应的可视单词的数量bagOfFeatures对象构造。直方图成为图像的特征向量。

  2. 对训练集中的每张图像重复步骤1,以创建训练数据。

  3. 评估分类器的质量。使用imageCategoryClassifier评估方法对验证图像集测试分类器。输出混淆矩阵表示对预测的分析。一个完美的分类结果是在对角线上包含1s的归一化矩阵。不正确的分类会导致分数值。

步骤4:分类图像或图像集

使用imageCategoryClassifier预测方法在新图像上确定其类别。

参考文献

[1] G.库尔卡,C. R.丹斯,L.范,J.威拉莫斯基和C.布雷。视觉分类袋的要点.计算机视觉中的统计学习研讨会。Eccv 1(1 - 22), 1 - 2。

相关的话题