📄 readdb.m
字号:
function [X,XClass,ImgSize,ReadTime] = ReadDB(sDatabase,sOrder);
%
% 根据数据库路径sDatabase和序列sOrder读取图像文件。
% 返回图片按列堆积后形成的训练样本矩阵X以及每一列的类别数组XClass,
% 即矩阵X的每一列是一幅图片,X的第i列的类别是XClass(i),ImgSize(1)是图片的行数,ImgSize(2)是列数。
% 所有图片的大小必须一致。
%
% 读取文件后的数据保存在一个.mat文件中,下次读取的时候如果sDatabase和sOrder一样时,则直接从.mat文件读出数据。
%
% 数据库中的图片文件名字必须符合:
% 00101.bmp
% 00102.bmp
% 00201.bmp
% 00202.bmp
% ...
% 即前三位是每个人类别标记,可以不连续但必须是数字。后两位是同一个人中的不同样本标志。
%
% Author : kk.h
% Date : 2004.5.15
% Email : kkcocoon@163.com
% SUN YAT-SEN UNIVERSITY
%
BTime = clock;
% clear;
% clc;
% sDatabase = 'D:\kk.h\study\人脸库\ORL\92x112\';
% sOrder = '1';
% -----------------------------------------------------------------------------------------------------------
% 得到相应的.mat文件
ssDatabase = sDatabase;
ssDatabase = strrep(ssDatabase,':','_');
ssDatabase = strrep(ssDatabase,'\','_');
sMatFile = fullfile('mat',[ssDatabase '_' sOrder '.mat']);
% 如果相应的.mat文件存在,直接load该文件,得到变量返回。不必重新读取
dirMatFile = dir(sMatFile);
if size(dirMatFile,1)~=0
load(sMatFile);
ReadTime = etime(clock,BTime);
return;
end;
% -----------------------------------------------------------------------------------------------------------
% 根据数据库路径sDatabase和序列sOrder读取图像文件。
FileList = dir(sDatabase);
% 文件个数。包含 当前目录"." 和 上一级目录".."
FileCount = size(FileList,1);
% sOrder = '1,2,3,4,5,6,7,8,9,10,11'
% ssOrder = '01,02,03,04,05,06,07,08,09,010,011,'
ssOrder = strrep(sOrder,',',',0');
ssOrder = ['0' ssOrder ','];
NN = 0;
ImgCount = 0; % 图片数
for (i=1:FileCount)
if length(FileList(i).name)<5
continue;
end;
if (findstr([FileList(i).name(4:5) ','],ssOrder))
img = im2double(imread([sDatabase FileList(i).name]));
% 以第一张图片的大小作为标准大小
if (NN==0)
ImgSize = size(img);
NN = prod(ImgSize);
end
ImgCount = ImgCount + 1;
% reshape是按列堆成一列的向量,不是按行,但这个没关系
img_col = reshape(img,NN,1);
X(:,ImgCount) = img_col;
% 前三位是类别标志
XClass(ImgCount) = str2num(FileList(i).name(1:3));
end
end
% 所用总时间
ReadTime = etime(clock,BTime);
% -----------------------------------------------------------------------------------------------------------
% 保存结果。
% 如果mat的文件夹不存在
if size(dir('mat'),1)==0
mkdir('mat');
end;
save(sMatFile,'X','XClass','ImgSize');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -