基于BOVW的图像分类识别算法实现步骤

本人菜鸟一枚,参照matlab帮助文件,写了第一篇博客,欢迎拍砖!

一、建立图像分类集

    收集图像并把他们分成训练子集和测试子集,在matlab中,用imageDatastor()函数存储图像用于图像分类,以类别的形式组织图像使完成大量图像分类更容易些,你可以用splitEachLabel()函数把收集的图像分类成训练数据和测试数据。例如: 

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');

imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource',...    'foldernames');

把这些图像分成训练集和测试集,比如把30%的图像分成训练集,而剩余的分成测试集。

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

 

 

 

 

 

二、建立特征包(bag of feature)

从每个图像类的典型图像中提取特征描述子,用以创建视觉词汇或特征包,bagOfFeature()通过在从训练集中提取的特征描述子上使用使用k-means聚类算法,定义特征和视觉词汇。该算法迭代地将描述子分组到k互斥簇中。由此产生的聚类是紧凑的,并以相似的特性分离。每个集群中心代表一个特性,或一个可视的单词。

 

你可以基于特征描述子提取特征,或者可以定义一个grid提取特征描述子,grid方法可能会丢失图像的细致纹理信息。因此,对不包含明显特征的图像使用grid,比如包含像海滩一类风景图像。SURF检测子的使用提供了更大的尺度不变性。默认情况下,该算法运行“grid”方法。

这个算法流程对图像进行了整体分析,图像必须有合适的标签来描述它们所代表的类。例如,一组汽车图像可以标记为汽车。流程不依赖于空间信息,也不依赖于在图像中标记特定对象。视觉词汇技术依赖于非局部检测。

三、用视觉词汇训练图像分类器

trainImageCategoryClassifier()函数返回一个图像分类器,这个函数使用带有SVM分类器的ECOC框架训练一个多类分类器。该函数使用bagOfFeatures()返回的视觉词汇包,将图像集中的图像编码成视觉词的直方图。然后用视觉词汇的直方图作为正负样本来训练分类器。

 

    1.使用bagOfFeatures()编码方法对训练集中的每幅图像进行编码,该函数从图像中检测并提取特征,然后近似的最邻近算法对每幅图像构建一个特征直方图,接下来,该函数根据描述子靠近特定的聚类中心的距离增加直方图。直方图长度对应的是bagOfFeatures()所构造的视觉词的数量。这样,直方图成为了图像的特征向量。        2. 对训练集中的每幅图像重复步骤1,进行创建训练数据。

        3.分类器评价,使用imageCategoryClassifier() evaluate方法在测试集上检测分类器,一个完美的分类结果是在对角线上包含1的规则化矩阵。不正确的分类结果是分数值。

四、图像或图像集分类

       在一副新图像上使用imageCategoryClassifier()predict方法,确定它的类别。

References

[1] Csurka, G., C. R. Dance, L. Fan, J. Willamowski, and C. Bray. Visual Categorization with Bags of Keypoints. Workshop on Statistical Learning in Computer Vision. ECCV 1 (1–22), 1–2.

Related Topics

 

 

 

 

 

 

 

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值