您的位置:首页 > Web前端

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

2018-03-06 18:22 441 查看
本人菜鸟一枚,参照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
方法,确定它的类别。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐