wave2gray.m

%wave2gray源程序

function w=wave2gray(c,s,scale,border)
%wave2gray展示小波重构系数
%展示和返回小波系数图像

%例如:
%wave2gray(c,s);展示w或默认值
%foo=wave2gray(c,s);展示和返回
%foo=wave2gray(c,s,4);放大细节
%foo=wave2gray(c,s,-1);放大绝对值
%foo=wave2gray(c,s,1,'append');保持边界值

%输入/输出:
%[c,s]是一个小波重构向量和簿记矩阵

%尺度                细节系数尺度
%0或1                最大值范围(默认)
%2,3,...               通过尺度因素放大默认值
%-1,-2,...            通过尺度的绝对值放大绝对值

%边界                小波重构结构
%'absorb'          边界取代图像(默认)
%'append'         边界增加图像宽度

%检查输入参数
error(nargchk(2,4,nargin));

if (ndims(c)~=2) | (size(c,1)~=1)
    error('C must be a row vector.');end

if(ndims(s)~=2) | ~isreal(s) | ~isnumeric(s) | (size(s,2)~=2)
    error('S must be a real,numeric two-column array.');end

elements=prod(s,2);
if (length(c)<elements(end)) | (elements(1)+3*sum(elements(2:end-1))>=elements(end))
error('[c s]must be a standard wavelet' 'decomposition structure.');
end

if (nargin>2) & (~isreal(scale) | ~isnumeric(scale))
    error('SCALE must be character string.');
end

 if (nargin>3) & (~ischar(border))
 error('BORDER muat be character string.');
 end
    
if nargin==2
    scale=1;%默认尺度
end

if nargin<4
    border='absorb';%默认边界
end

%尺度系数和确定满填充
absflag=scale<0;
scale=abs(scale);
if scale==0;
    scale=1;
end

[cd,w]=wavecut('a',c,s);w=mat2gray(w);
cdx=max(abs(cd(:)))/scale;
if absflag
    cd=mat2gray(abs(cd),[0,cdx]);fill=0;
else
    cd=mat2gray(cd,[-cdx,cdx]);fill=0.5;
end

%按重构依次建立灰色图像
for i=size(s,1)-2:-1:1
    ws=size(w);
    
    h=wavecopy('h',cd,s,i);
    pad=ws-size(h);frontporch=round(pad/2);
    h=padarray(h,frontporch,fill,'pre');
    h=padarray(h,pad-frontporch,fill,'post');
    v=wavecopy('v',cd,s,i);
    pad=ws-size(v);frontporch=round(pad/2);
    v=padarray(v,frontporch,fill,'pre');
    v=padarray(v,pad-frontporch,fill,'post');
    d=wavecopy('d',cd,s,i);
    pad=ws-size(d);frontporch=round(pad/2);
    d=padarray(d,frontporch,fill,'pre');
    d=padarray(d,pad-frontporch,fill,'post');
    
    %加1像素给白色边界
    switch lower(border)
    case 'append'
        w=padarray(w,[1 1],1,'post');
        h=padarray(h,[1 0],1,'post');
        v=padarray(v,[0 1],1,'post');
    case 'absorb'
        w(:,end)=1;w(end,:)=1;
         h(end,:)=1;v(:,end)=1;
        otherwise
          error('Unrecognized BORDER parameter.');
    end
    w=[w h;v d];%级联辅材料
end
    if nargout==0
        imshow(w);%展示结果
    end
    
   

猜你喜欢

转载自blog.csdn.net/YangYaYan/article/details/89958322
M2M