www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/compression/wloadimages.m

    function [X,map,imgFormat] = wloadimages(inputFile,optCONVERT)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Feb-2008.
%   Last Revision: 21-Jul-2012.
%   Copyright 1995-2012 The MathWorks, Inc.

if nargin<2 , optCONVERT = ''; end

[~,ext] = strtok(inputFile,'.');
if ~isempty(ext) , ext = ext(2:end); end
try
    varInFile = whos('-file',inputFile);
    sizes = cat(1,varInFile(:).size);
    minSiz = min(sizes,[],2);
    idxMin = find(minSiz==1);
    nbMin  = length(idxMin);
    if nbMin>0
        sizes(idxMin,:) = zeros(nbMin,2);
    end
    minSiz = prod(sizes,2);
    [tmp,idx] = max(minSiz);
    if tmp>0
        varName = varInFile(idx).name;
        S = load(inputFile);
        fn = fieldnames(S);
        X = S.(varName);
    else
        error(message('Wavelet:FunctionInput:FileVal'));
    end
    idx = find(strcmp(fn,'map'));
    if ~isempty(idx)
        map = S.(fn{idx});
    else
        map = pink(max(X(:)));
    end
    colorType = 'mat';
    imgFormat = 'mat';
    
catch %#ok<*CTCH>
    try
        switch ext
            case {'bmp','hdf','jpg','jpeg','pcx','tif','tiff','gif'}
                info = imfinfo(inputFile,ext);
            otherwise
                info = imfinfo(inputFile);
        end
        imgFormat = info.Format;
        colorType = lower(info.ColorType);
        [X,map]   = imread(inputFile,ext);
        
    catch
        X = wtcmngr('read',inputFile);
        imgFormat = 'wtc';
        colorType = 'mat';
        maxi = double(max(X(:)));
        map = pink(maxi);
    end
end

if isempty(optCONVERT) , return; end
[X,map,err] = convertImage(optCONVERT,X,colorType,map); %#ok<NASGU>


%--------------------------------------------------------------------------
function [X,map,err] = convertImage(optCONVERT,X,colorType,map)


err = 0;
conv2BW = isequal(optCONVERT,'BW');
switch optCONVERT
    case 'BW'
        if (length(size(X))<3)
            X = double(X);
            map = jet(max(X(:)));
            return;
        end

    case 'COL'
end

if conv2BW
    try
        X = double(round(0.299*X(:,:,1) + 0.587*X(:,:,2) + 0.114*X(:,:,3)));
    catch
        switch colorType
            case {'indexed','grayscale','mat'}
            otherwise , err = 1;
        end        
    end
    if isempty(map) , map = pink(max(X(:))); end
else
    % The grayscale images are converted in true color images.
    if length(size(X))<3
        if min(X(:))<1
            % The following line was suppressed the 21 Jul 2012
            % X = X + 1;
            maxX = max(X(:));
            nbCOL = size(map,1);
            if nbCOL<maxX
                map = [map ; map(nbCOL*ones(1,maxX-nbCOL),:)];
            end
        end
        IMAP = 256*map;
        Z = cell(1,3);
        for k = 1:3
            tmp = zeros(size(X));
            tmp(:) = IMAP(X(:),k);
            Z{k} = tmp;
        end
        X = uint8(cat(3,Z{:}));
    else
        X = uint8(X);
    end
end
%--------------------------------------------------------------------------