Code covered by the BSD License  

Highlights from
Statistical Learning Toolbox

from Statistical Learning Toolbox by Dahua Lin
Functions for statistical learning, pattern recognition and computer vision, covering many topics.

slimgsetprep(srcfolder, dstpath, matsize, maxsec)
function slimgsetprep(srcfolder, dstpath, matsize, maxsec)
%SLIMGSETPREP organizes the images in a MATLAB friendly way
%
% $ Syntax $
%   - slimgsetprep(srcfolder, dstpath, matsize, maxsec) 
%
% $ Argument $
%   - srcfolder:        the source file folder
%   - dstpath:          the destination file (without extension name)
%   - matsize:          the matrix size (row vector): [nrows, ncols]
%   - maxsec:           the maximum section size
%
% $ Description $
%   - slimgsetprep(srcfolder, dstpath, imgsiz, maxsec) prepares the matlab 
%     files in destination for a set of images. The requirement is
%       1) In source folder: there are all the images and a DSDML 
%          description file named dataset.xml
%       2) For destination, say abc, then there would be a core file named
%          abc.xml. And if the actual data is separately stored, there are
%          a series of files named abc.arr.<begin index>-<last index>. For
%          example, abc.arr.0001-2000, means that the 1st t0 2000th samples
%          are stored in the array file. 
%       3) maxsec is the number of samples in each section. If maxsec is
%          specified, the images are stored in separate array files. If 
%          maxsec is not specified or empty, the images are stored in core
%          file.
%       4) The core file is a MAT file with following variables:
%           'desc':         the DSDML data object descriptor
%           'sections':     the starting and ending indices of all sections
%           'matsize':      the row vector describing the size of images
%           'data':         the image array
%                           if imgs is numeric, it is the actual image
%                           array.
%                           if imgs is a cell array, it is the set of
%                           array filenames.
%   
% $ History $
%   - Created by Dahua Lin, on Jul 26th, 2006
%

%% Parse and verify input arguments

if nargin < 3
    raise_lackinput('slimgsetprep', 3);
end

isseparate = false;
if nargin >= 4
    isseparate = ~isempty(maxsec);
end

matsize = matsize(:)';
if length(matsize) ~= 2
    error('sltoolbox:invalidarg', ...
        'imgsize should be a 2-element vector');
end


%% Read the dataset

descrfile = [srcfolder, '\dataset.xml'];
desc = dataset(descrfile);

N = desc.numsamples;
fns = desc.filenames;

%% Process data

if ~isseparate
    
    datasiz = [matsize, N];
    data = zeros(datasiz);
    
    for i = 1 : N
        img = imread([srcfolder, '\', fns{i}]);
        img = slimg2mat(img);
        data(:,:,i) = img;
    end
        
else
    
    sections = slpartition(N, 'maxblksize', maxsec);    
    nsecs = length(sections.sinds);
    
    data = cell(nsecs, 1);    
    
    % process filenames
    dstdir = fileparts(dstpath);
    numlen = length(num2str(N));    
    if isempty(dstdir)  % local dst
        dstfnpat = [dstpath, sprintf('.arr.%%0%dd-%%0%dd', numlen, numlen)];
        dstfppre = [];
    else
        dstfnpat = [dstpath(length(dstdir)+2:end), sprintf('.arr.%%0%dd-%%0%dd', numlen, numlen)];
        dstfppre = [dstdir, '\'];
    end
    
    for i = 1 : nsecs        
        si = sections.sinds(i);
        ei = sections.einds(i);
        
        curfn = sprintf(dstfnpat, si, ei);
        curfp = [dstfppre, curfn];
        data{i} = curfn;
        
        curN = ei - si + 1;
        arr = zeros([matsize, curN]);
        
        for j = 1 : curN
            curidx = si + j - 1;
            img = imread([srcfolder, '\', fns{curidx}]);
            img = slimg2mat(img);        
            arr(:,:,j) = img;                                                
        end        
        
        slwritearray(arr, curfp);        
    end
        
end


%% Output core

corefile = [dstpath, '.mat'];
save(corefile, 'desc', 'sections', 'matsize', 'data', '-v6'); 




Contact us at files@mathworks.com