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

📄 imagedesc.m

📁 cuboid democuboid democuboid democuboid demo
💻 M
字号:
% Runs descriptor on a set of images, optionally jitters, and optionally applies PCA.%% Parameters are passed in w struct imdesc.  Use imagedesc_generate to quickly generate% this struct. %% If clusters (and optionally csigma) are provided, imagedesc2clusters is applied to each% resulting desc (giving a new descriptor).  See imagedesc2clusters for more information.%% INPUTS%   I               - 2D or 3D array of images, or 3D or 4D array of cuboids%   imdesc          - struct containing the following fields:%       iscuboid        - specifies whether desc is designed for image or cuboid%       fun_desc        - (fhandle) descriptor to apply to each image or cuboid%       par_desc        - parameters for above descriptor%       par_jitter      - [optional] parameters for jittering images or cuboids%       par_pca         - [optional] parameters for PCA to reduce dim of descriptor%       clusters        - [optional] see imagedesc2clusters %       csigma          - [optional] see imagedesc2clusters %   show            - [optional] figure to use for display (no display if == 0)%   % OUTPUTS%   desc        - nxpxr array of n p-dimensional descriptors, r jittered versions of each%               - nxp array if par_jitter is not given or clusters is given%% See also IMAGEDESC_GENERATE, IMAGEDESC_DEMO, IMAGEDESC2CLUSTERSfunction desc = imagedesc( I, imdesc, show )    if( isempty(I) ) desc=[]; return; end;    if( nargin<3 || isempty(show))  show=[]; end;        if(~isfield(imdesc,'iscuboid') || ~isfield(imdesc,'fun_desc') || ...                        ~isfield(imdesc,'par_desc') )        error('imdesc lacking crucial field.'); end;    if(~isfield(imdesc,'par_jitter')) imdesc.par_jitter={}; end;    if(~isfield(imdesc,'par_pca')) imdesc.par_pca={}; end;    if(~isfield(imdesc,'clusters')) imdesc.clusters={}; end;    if(~isfield(imdesc,'csigma')) imdesc.csigma={}; end;        %%% some checking of dimension    nd=ndims(I);  iscuboid = imdesc.iscuboid;    if( (iscuboid && nd~=3 && nd~=4) || (~iscuboid && nd~=2 && nd~=3))        error('Unsupported dimension for I'); end;        %%% convert to double between [-1,1] unless uint8 in which case do nothing    %if(~isa(I,'uint8') && ~isa(I,'double'))     %    I=double(I); end;    %if( isa(I,'double') && abs(max(I(:)))>1 )     %    I=I-min(I(:));  I=I/(max(I(:))/2)-1; end;        %%% apply discriptor, should give nxp or nxpxr vector, where n=size(I,3);    if( (nd==2 && ~iscuboid) || (nd==3 && iscuboid))        desc = imagedesc1( I, imdesc );    else        desc = feval_arrays( I, @imagedesc1, imdesc );        dnd=ndims(desc); desc=permute(desc,[dnd 2:(dnd-1) 1]);    end    % optionally show    if( show )        Deuc = jitter_dist(desc,desc);        figure(show); show=show+1; im( Deuc );         title( func2str(imdesc.fun_desc) );    end            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Apply descriptor to a single image.% Returns desc which is either 1xp or 1xpxrfunction desc = imagedesc1( I, imdesc )    I = imnormalize(I,1)/4; % similar to blow normalization, most vals fall between [-1,1]    %if( isa(I,'uint8') ) I = double(I)/255 * 2 -1; end;        par_jitter = imdesc.par_jitter;    clusters = imdesc.clusters; csigma = imdesc.csigma;        if( isempty(par_jitter) ) % no jitter        desc = imdesc.fun_desc( I, imdesc.par_desc{:} ); % apply basic descriptor        if( size(desc,1)~=1 || ndims(desc)~=2 )             error(['desc returned by ' func2str(imdesc.fun_desc) ' is not 1xp']); end        if( ~isempty(imdesc.par_pca) ) % apply PCA            desc=pca_apply( desc', imdesc.par_pca{:} )'; end;        if( ~isempty(clusters) ) % apply clustering            desc=imagedesc2clusters(desc,clusters,csigma); end;            else % jitter, apply descriptor recursively to each         imdesc.par_jitter={}; clusters=imdesc.clusters;  imdesc.clusters=[];        if( ndims(I)==2 )            %warning off; IJT = jitter_image( I, par_jitter{:}, size(I) ); warning on;            IJT = jitter_image( I, par_jitter{:} );        else            IJT = jitter_video( I, par_jitter{:} );                    end                % run imagedesc1 recursively on each image, for efficiency no use feval_arrays         nd=ndims(IJT);  siz = size(IJT);  r=siz(end);        inds={':'};  inds=inds(:,ones(1,nd-1));           desc = repmat( imagedesc1(IJT(inds{:},1),imdesc), [1 1 r] );        for i=2:r desc(1,:,i)=imagedesc1(IJT(inds{:},i),imdesc); end;        if( ~isempty(clusters) ) % apply clustering             desc=imagedesc2clusters(desc,clusters,csigma); end;    end;                    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -