我是靠谱客的博主 香蕉豌豆,最近开发中收集的这篇文章主要介绍基于matlab的图像识别分类实验(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

实验数据说明
coil-100数据集是灰色图片集合,包含对100个物体从不同角度的拍摄,每隔 5 度拍摄一副图像,每个物体 72 张图像。每个子文件夹代表一个物体的全部图像。共100个子文件夹,每个文件夹有72张图像。

链接:https://pan.baidu.com/s/1MoI66gjWL8vjbNaD30oGNg 提取码:1xta

实验内容

for time=1:5 //对数据集进行五次划分,相当于进行五次实验,即五次循环
for i=1:100  //以一次循环访问物体图片为例,循环前指定为空,防止发生覆盖,i为子文件夹的个数,即第i个物体

1、以一个文件夹为例,随机打乱序号,生成索引向量,取前 2/3 作为训练样本,后 1/3 作为测试样本。在训练样本中,读取长度为训练样本大小的索引向量,读出图片,先调整为灰度图,后调整图像大小,将处理完的图像的属性按列存放在训练样本集中,测试样本以此类推,将测试图像的属性按列存放在测试样本中。
2、取完100个文件夹所有样本后,将得到的样本数据集利用save 函数存储在data.mat。

实验结果预览效果

预览效果
在这里插入图片描述

实验代码

clc,clear all
datapath='F:/coil/object_1/';
im=dir([datapath,'/*.png']);%读出图像
ind=randperm(72);%随机打乱顺序
ims=imread([datapath,im(ind(1,1)).name]);%读出图像
figure(1);imshow(ims);
ims=rgb2gray(ims); %将图片转成灰度图
figure(2);imshow(ims);
ims=imresize(ims,[32,32]);%将图像调整为统一大小
figure(3);imshow(ims);

该代码用于展示效果图1,即展示原图,灰度图,变小后的图

clc;clear;
%读取图像:完成训练集与测试集的划分(比例为2:1)
datapath='F:/coil/object_%s/';%指定路径
traindata=[];%指定训练集为空
testdata=[];%指定测试集为空
trainlabel=[];testlabel=[];%标签矩阵
for time=1:5
    traindata_now=[];trainlabel_now=[]; %当前第time次的训练集及标签
    testdata_now=[];testlabel_now=[]; %当前第time次的测试集及标签
    for i=1:100
        ind=[];trainind=[];testind=[];xtrain=[];xtest=[];%循环前指定为空,防止发生覆盖
        path=sprintf(datapath,num2str(i));%%拼接字符串
        im=dir([path,'/*.png']);%读出图像
        mysize=size(im);
        if numel(mysize)>2 %判断图像是否为灰度图
            im=rgb2gray(im);%将图片转换成灰度图
        else
        end
        t=length(im);%统计个数
        ind=randperm(t);%随机打乱顺序
        trainind=ind(1:2*floor(t/3));%取前2/3作为训练样本的索引
        testind=ind(1+2*floor(t/3):end);%剩下的1/3作为测试样本的索引
        
        %取出训练样本
        for j=1:size(trainind,2)
            index=trainind(j);%取出训练样本索引中的一个
            imr=imread([path,im(index).name]);%读出图像
            imr=imresize(imr,[32 32]);%规定为统一大小
            imf=imr(:);%拉成列向量
            xtrain(:,j)=imf;%训练样本的第j个放在矩阵第j列
        end
        traindata_now=[traindata_now xtrain];%训练样本取完
        trainlabel_now=[trainlabel_now i*ones(1,size(trainind,2))];%给训练样本赋标签
        traindata{1,time}=traindata_now;%traindata的第一个元素是第一次划分的训练集矩阵,以此类推
        trainlabel{1,time}=trainlabel_now;%trainlabel的第一个元素是第一次划分的训练集标签,以此类推
        
        %取出测试样本
        for jj=1:size(testind,2)
            index=testind(jj);%取出测试样本索引中的一个
            imr=imread([path,im(index).name]);%读出图像
            imr=imresize(imr,[32 32]);%规定为统一大小
            imf=imr(:);%图像拉成向量
            xtest(:,jj)=imf;%测试样本的第jj个放在矩阵第jj列
        end
        testdata_now=[testdata_now xtest]; %测试样本取完
        testlabel_now=[testlabel_now i*ones(1,size(testind,2))];%给测试样本赋标签
        testdata{1,time}=testdata_now; %testdata的第一个元素是第一次划分的测试集矩阵,以此类推
        testlabel{1,time}=testlabel_now; %testlabel的第一个元素是第一次划分的测试集标签,以此类推
    end
end
save('data.mat','traindata','testdata','trainlabel','testlabel');

该代码是将样本进行划分并将五次划分数据后图片的属性按列存储。

最后

以上就是香蕉豌豆为你收集整理的基于matlab的图像识别分类实验(一)的全部内容,希望文章能够帮你解决基于matlab的图像识别分类实验(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部