【MATLAB】机器学习:图像数据的提取与随机划分

1、实验内容

1.根据ABERDEEN人脸数据库,FERET人脸数据库中的部分人脸图像,完成图像数据的提取,并将其随机划分为训练样本Xtrain与测试样本Xtest,同时给出训练样本的标签Xlabel。若图像大小不一致,使用imresize函数调整为统一大小。
2.图像中存在椒盐噪声时,获得训练样本Xtrnoise和测试样本Xtenoise。

2、实验代码

%% *****************问题11*****************
% ABERDEEN人脸数据库
clear;clc;
%% 提取文件夹ABERDEEN人脸数据库
img_path0="C:\machine learning\2.实验二\ABERDEEN人脸数据库";
tab={'adrian','alison'};
x1=[];  % 存放adrian数据库的图片
x2=[];  % 存放alison数据库的图片
for i=1:size(tab,2)
    img_path1=fullfile(img_path0,tab{i});
    img_path2=strcat(img_path1,'*.jpg');
    img_dir=dir(img_path2);
    for j=1:size(img_dir)
        img_path=strcat(img_path1,num2str(i),'.jpg');
        image=imread(img_path);
        if size(image,3)==3    % 若为彩图,则转化为灰度图
           image=rgb2gray(image);
        end
        image=imresize(image,[300,200]);    % 更改图片大小为300*200
        if i==1     % 若为男士,则放入x1矩阵
           x1=[x1,image(:)]; 
        else        % 若为女士,则放入x2矩阵
           x2=[x2,image(:)];
        end
    end
end
%% 随机划分为训练样本和测试样本
% adrian图片集
n1=randperm(5);
X1_1=x1(:,n1(:,1:3));   % X1_1存放x1中任意3列的数据
X1_2=x1(:,n1(:,4:5));   % X1_2存放x1中剩下2列的数据
% alison图片集
n2=randperm(4);
X2_1=x2(:,n2(:,1:2));   % X2_1存放x2中任意2列的数据
X2_2=x2(:,n2(:,3:4));   % X2_2存放x2中剩下2列的数据
% 组合成训练集和测试集,并给训练集贴上标签
Xtrain=[X1_1,X2_1];     % 训练集
Xtest=[X1_2,X2_2];      % 测试集
Xlabel=[1,1,1,-1,-1];   % 训练集标签


%% ****************问题12******************
% FERET人脸数据库
clear;clc;
%% 提取FERET人脸库的图像
img_path0="C:\machine learning\2.实验二\FERET人脸库";
tab={'FERET-001','FERET-002','FERET-003'};
x1=[];x2=[];x3=[];  % x1 x2 x3分别存放FERET-001 FERET-002 FERET-003数据库的图片
for i=1:size(tab,2)
   img_path1=fullfile(img_path0,tab{i});
   img_path2=strcat(img_path1,'\','*.tif');
   img_dir=dir(img_path2);
   for j=1:size(img_dir)
       img_path=strcat(img_path1,'\','0',num2str(j),'.tif');
       image=imread(img_path);
       if size(image,3)==3 
           image=rgb2gray(image);         % 若为彩图,则转化为灰度图
       end
       image=imresize(image,[300,200]);   % 更改图片大小为300*200
       if i==1
           x1=[x1,image(:)];    % 若为FERET-001,则放入x1矩阵
       elseif i==2
           x2=[x2,image(:)];    % 若为FERET-002,则放入x2矩阵
       else
           x3=[x3,image(:)];    % 若为FERET-003, 则放入x3矩阵
       end
   end
end
%% 随机划分为训练样本和测试样本
% FERET-001文件夹
n1=randperm(7);
X1_1=x1(:,n1(:,1:5));   % X1_1存放x1中任意5列的数据
X1_2=x1(:,n1(:,6:7));   % X1_2存放x1中剩下2列的数据
% FERET-002文件夹
n2=randperm(7);
X2_1=x2(:,n2(:,1:5));
X2_2=x2(:,n2(:,6:7));
% FERET-003文件夹
n3=randperm(7);
X3_1=x3(:,n3(:,1:5));
X3_2=x3(:,n3(:,6:7));
% 组合成训练集和测试集,并给训练集贴上标签
Xtrain=[X1_1,X2_1,X3_1];    % 训练集
Xtest=[X1_2,X2_2,X3_2];     % 测试集
Xlabel=[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]; % 训练集标签


%% ****************问题2******************
% 加入椒盐噪声
image=imnoise(image,'salt & pepper',0.1);    % 加入噪声密度:0.1的椒盐噪声

3、实验心得

通过本次实验,我学会了图像数据的提取与随机划分。
1、图像数据的提取时,可以采用dir()函数得到文件名,通过strcat()函数拼接得到路径名,最后使用imread()函数读取图像。
2、随机划分时,可以使用randperm函数得到

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Orange_Jet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值