computescale.m

来自「NONSUBSAMPLED CONTOURLET TRANSFORM FILTE」· M 代码 · 共 161 行

M
161
字号
function vScales = computescale ( cellDFB, dRatio, nStart, nEnd, coefMode )% COMPUTESCALE   Comupute display scale for PDFB coefficients计算pdfb系数%%       computescale(cellDFB, [dRatio, nStart, nEnd, coefMode])%% Input:%	cellDFB:	a cell vector, one for each layer of %		subband images from DFB.%   dRatio:%       display ratio. It ranges from 1.2 to 10.%%   nStart:%       starting index of the cell vector cellDFB for the computation. %       Its default value is 1.%   nEnd:%       ending index of the cell vector cellDFB for the computation. %       Its default value is the length of cellDFB.%   coefMode: %       coefficients mode (a string): %           'real' ----  Highpass filters use the real coefficients. %           'abs' ------ Highpass filters use the absolute coefficients. %                        It's the default value% Output:%	vScales ---- 1 X 2 vectors for two scales.%% History: %   10/03/2003  Creation.%% See also:     SHOWPDFBif ~iscell(cellDFB)    display ('Error! The first input must be a cell vector! Exit!');    exit;end% Display ratioif ~exist('dRatio', 'var')    dRatio = 2 ;elseif dRatio < 1    display ('Warning! the display ratio must be larger than 1!Its defualt value is 2!');end% Starting index for the cell vector cellDFBif ~exist('nStart', 'var')    nStart = 1 ;elseif nStart < 1 | nStart > length(cellDFB)    display ('Warning! The starting index from 1 to length(cellDFB)! Its defualt value is 1!');    nStart = 1 ;end% Starting index for the cell vector cellDFBif ~exist('nEnd', 'var')    nEnd = length(cellDFB) ;elseif nEnd < 1 | nEnd > length(cellDFB)    display ('Warning! The ending index from 1 to length(cellDFB)! Its defualt value is length(cellDFB)!');    nEnd = length( cellDFB ) ;end% Coefficient modeif ~exist('coefMode', 'var')    coefMode = 'abs' ;elseif ~strcmp(coefMode,'real') & ~strcmp(coefMode, 'abs')    display ('Warning! There are only two coefficients mode: real, abs! Its defualt value is "abs"!');    coefMode = 'abs' ;end% InitializationdSum = 0 ;dMean = 0 ;dAbsSum = 0 ;nCount = 0 ;vScales = zeros (1, 2);if strcmp( coefMode, 'real') %Use the real coefficients    % Compute the mean of all coefficients    for i= nStart : nEnd        if iscell( cellDFB{i} ) % Check whether it is a cell vector            m = length(cellDFB{i});            for j=1 : m                dSum = dSum + sum( sum( cellDFB{i}{j} ));                nCount = nCount + prod( size( cellDFB{i}{j} ) );            end        else            dSum = dSum + sum( sum( cellDFB{i} ));            nCount = nCount + prod( size( cellDFB{i} ) );         end    end	if nCount < 2 | dAbsSum < 1e-10        display('Error! No data in this unit! Exit!');        exit;	else        dMean = dSum / nCount ;    end        % Compute the STD.    dSum = 0 ;    for i= nStart : nEnd        if iscell( cellDFB{i} ) %Check whether it is a cell vector            m = length(cellDFB{i});            for j=1 : m                dSum = dSum + sum( sum( (cellDFB{i}{j}-dMean).^2 ));                nCount = nCount + prod( size( cellDFB{i}{j} ) );            end        else            dSum = dSum + sum( sum( (cellDFB{i}-dMean).^2 ));            nCount = nCount + prod( size( cellDFB{i} ) );         end    end	if nCount < 2 | dSum < 1e-10        display('Error! No data in this unit! Exit!');        exit;	else        dStd = sqrt( dSum / (nCount-1) );	end	vScales( 1, 1 ) = dMean - dRatio * dStd ;    vScales( 2, 2 ) = dMean + dRatio * dStd ;    else %Use the absolute coefficients    % Compute the mean of absolute values    for i= nStart : nEnd        if iscell( cellDFB{i} ) % Check whether it is a cell vector            m = length(cellDFB{i});            for j=1 : m                dAbsSum = dAbsSum + sum( sum( abs(cellDFB{i}{j}) ));                nCount = nCount + prod( size( cellDFB{i}{j} ) );            end        else            dAbsSum = dAbsSum + sum( sum( abs(cellDFB{i}) ));            nCount = nCount + prod( size( cellDFB{i} ) );         end    end	if nCount < 2 | dAbsSum < 1e-10        display('Error! No data in this unit! Exit!');        exit;	else        dAbsMean = dAbsSum / nCount ;    end        % Compute the std of absolute values    dSum = 0 ;    for i= nStart : nEnd        if iscell( cellDFB{i} ) %Check whether it is a cell vector            m = length( cellDFB{i} );            for j = 1 : m                dSum = dSum + sum( sum( (abs(cellDFB{i}{j})-dAbsMean).^2 ));            end        else            dSum = dSum + sum( sum( (abs(cellDFB{i})-dAbsMean).^2 ));          end    end    dStd = sqrt( dSum / (nCount-1) );         % Compute the scale values    if dAbsMean - dRatio * dStd > 0        vScales( 1 ) = dAbsMean - dRatio * dStd ;    else % The absolute value will be nonnegative.        vScales( 1 ) = 0 ;    end    vScales( 2 ) = dAbsMean + dRatio * dStd ;	end

⌨️ 快捷键说明

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