⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readdb.m

📁 本程序采用线性判别分析方法实现的字符识别
💻 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 + -