基于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%的图像分成训练集,而剩余的分成测试集。
二、建立特征包(bag of feature)从每个图像类的典型图像中提取特征描述子,用以创建视觉词汇或特征包,bagOfFeature()通过在从训练集中提取的特征描述子上使用使用k-means聚类算法,定义特征和视觉词汇。该算法迭代地将描述子分组到k互斥簇中。由此产生的聚类是紧凑的,并以相似的特性分离。每个集群中心代表一个特性,或一个可视的单词。
你可以基于特征描述子提取特征,或者可以定义一个grid提取特征描述子,grid方法可能会丢失图像的细致纹理信息。因此,对不包含明显特征的图像使用grid,比如包含像海滩一类的风景图像。SURF检测子的使用提供了更大的尺度不变性。默认情况下,该算法运行“grid”方法。
这个算法流程对图像进行了整体分析,图像必须有合适的标签来描述它们所代表的类。例如,一组汽车图像可以标记为汽车。流程不依赖于空间信息,也不依赖于在图像中标记特定对象。视觉词汇技术依赖于非局部检测。三、用视觉词汇训练图像分类器
1.使用bagOfFeatures()编码方法对训练集中的每幅图像进行编码,该函数从图像中检测并提取特征,然后近似的最邻近算法对每幅图像构建一个特征直方图,接下来,该函数根据描述子靠近特定的聚类中心的距离增加直方图。直方图长度对应的是bagOfFeatures()所构造的视觉词的数量。这样,直方图成为了图像的特征向量。
2. 对训练集中的每幅图像重复步骤1,进行创建训练数据。
3.分类器评价,使用
四、图像或图像集分类 在一副新图像上使用
一、建立图像分类集 收集图像并把他们分成训练子集和测试子集,在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方法,确定它的类别。
相关文章推荐
- 基于经典分割算法的图像内细胞识别与计数(matlab实现)(不定期更新完善)
- 灰度图像形状的识别分类算法实现matlab
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 基于分块统计和机器学习的主题类网页内容识别算法实现和应用范例
- 基于ORB特征提取算法图像匹配 python实现
- 基于OpenCV的 SVM算法实现数字识别(三)---SMO求解
- GrabCut in One Cut(基于图割算法grabcut的一次快速图像分割的OpenCV实现)----目前效果最好的图割
- 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 基于GraphCuts图割算法的图像分割----OpenCV代码与实现
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果
- 基于opencv的神经网络算法实现两类分类问题的可视化演示
- SVM实现多分类的程序基础工作(三)——基于纠错编码的SVM多类分类算法和基于二叉树的多类SVM算法的基本思想
- 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库
- 基于SVM的极化 SAR 图像分类算法思路
- 基于深度学习的图像识别算法研究
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
- 基于直方图的图像全局二值化算法原理、实现--灰度平局值值法
- 高速高精度片式IC的图像识别算法及实现
- 《基于几何成像模型的鱼眼镜头图像校正算法和技术研究》实现