matlab数据分类与识别,Matlab图像识别/检索系列(3)—10行代码完成caltech图象集分类和识别...

Caltech是常用的图像识别数据库之一,加州理工有一个在Caltech上的图像检索工具包image-search ,提供了很多图像检索需要的功能,其中包括基于BOW的图像检索。该工具包的使用有一定难度,并且涉及函数很多。在Matlab2016中也有Caltech101的图像分类和识别程序,代码数量很少。

% 数据库下载地址,第一次执行需要联网下载

url ='http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz';

outputFolder = fullfile(tempdir, 'caltech101');

if ~exist(outputFolder, 'dir') % download only once

disp('Downloading 126MB Caltech101 data set...');

untar(url, outputFolder);

end

rootFolder = fullfile(outputFolder, '101_ObjectCategories');

%为加快速度只取三类图像

imgSets = [ imageSet(fullfile(rootFolder, 'airplanes')), ...

imageSet(fullfile(rootFolder, 'ferry')), ...

imageSet(fullfile(rootFolder, 'laptop')) ];

%取各类图像数目最小值

minSetCount = min([imgSets.Count]);

%图像集分割

[trainingSets, validationSets] = partition(imgSets, 0.3, 'randomize');

bag = bagOfFeatures(trainingSets);

img = read(imgSets(1), 1);

%使用图像词包(bag)对每幅图像进行编码,得出一个定长的向量

featureVector = encode(bag, img);

figure;

%图像向量分布图

bar(featureVector);

title('Visual word occurrences');

xlabel('Visual word index');

ylabel('Frequency of occurrence');

%训练图像类别分类器

categoryClassifier = trainImageCategoryClassifier(trainingSets, bag);

%计算训练集上的混淆矩阵

confMatrix = evaluate(categoryClassifier, trainingSets);

confMatrix = evaluate(categoryClassifier, validationSets);

% 计算平均准确度

mean(diag(confMatrix));

img = imread(fullfile(rootFolder, 'airplanes', 'image_0690.jpg'));

%对指定图像进行识别

[labelIdx, scores] = predict(categoryClassifier, img);

该示例关键代码也只有几行,除了计算图象集词包,还利用encode函数对图像编码,生成了特征向量,也有人叫做视觉向量。该示例中,仅画出了视觉向量的分布图,没有它用。事实上,该向量可作为图像特征进一步完成图像检索、分类、识别等任务,相比直接使用提取词袋的局部特征,可大大减少计算复杂度和内存消耗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SVM对Caltech101数据集进图像分类的步骤如下: 1. 数据预处理:将每个图像转换为固定大小(如224x224),并进标准化处理,使其在各个维度上具有相同的尺度。 2. 特征提取:可以使用SIFT、HOG等手工设计的特征,也可以使用预训练的深度学习模型进特征提取。 3. 数据划分:将数据集划分为训练集和测试集,一般采用80%的数据用于训练,20%用于测试。 4. 模型训练:使用SVM对训练集进训练,可以使用交叉验证等方法进参数调优。 5. 模型测试:使用测试集对模型进测试,计算分类准确率等指标。 下面是一个使用SVM对Caltech101数据集进图像分类的示例代码: ```python from sklearn import svm from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split # 加载数据集 from sklearn.datasets import fetch_caltech101 caltech101 = fetch_caltech101() # 数据预处理 X = caltech101.data / 255. y = caltech101.target # 特征提取 # 这里使用PCA进降维,将原始的3072维特征降到100维 from sklearn.decomposition import PCA pca = PCA(n_components=100) X = pca.fit_transform(X) # 数据划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 模型训练 clf = svm.SVC(kernel='linear') clf.fit(X_train, y_train) # 模型测试 y_pred = clf.predict(X_test) acc = accuracy_score(y_test, y_pred) print('Accuracy: {:.2f}%'.format(acc*100)) ``` 需要注意的是,这只是一个示例代码,实际使用时需要根据具体情况调整参数和特征提取方法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值