?? 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 + -