www.pudn.com > m_program.zip > nstdhaardec2.m


function [a,lt] = nstdhaardec2(x,level,rorc,h) 
%nstdhaardec2 二维haar小波非标准规格化分解程序(多级分解) 
%作用:使用haar小波对每一行和每一列像素值进行小波变换 
%[a,lt]=nstdhaardec2(x,level,rorc) 
%输入:x      载入的二维图像像数值;  
%     level  小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分解) 
%     rorc   作行变换(1)或列变换(2),缺省为0,行列变换都做 
%     h      分解的矩阵块大小,缺省为整个x矩阵的变换 
%输出:a      分解后数值矩阵,大小与x相同, 
%     lt     记录实际分解次数 
 
a=double(x); 
t=1; 
sX=size(x); 
if nargin==1 
    level=1; 
    h=sX(2); 
    rorc=0; 
else 
    if nargin==2 
        h=sX(2); 
        rorc=0; 
    else 
        if nargin==3 
            h=sX(2); 
        end 
    end             
end 
 
lt=level; 
while and(h>1,t<=level) 
    if rorc==1 
        for row=1:h 
            a(row,:)=haardec(a(row,:),h); 
        end 
    else 
        if rorc==2 
            for col=1:h 
                temp=haardec(a(:,col)',h); 
                a(:,col)=temp'; 
            end 
        else 
            for row=1:h 
                a(row,:)=haardec(a(row,:),h); 
            end 
            for col=1:h 
                temp=haardec(a(:,col)',h); 
                a(:,col)=temp';      
            end 
        end 
    end 
    h=h/2; 
    t=t+1; 
end 
if and(h<=1,lt~=t-1) 
    lt=t-1; 
end 
%-------------------------------------------------- 
%        内部程序 
%-------------------------------------------------- 
function y=haardec(c,h) 
%haardec 1-D haar decompose program 
%y=haardec(c,h) 
%输入:c     载入的二维图像像数值;  
%     h     载入的要分解的矩阵大小 
%输出:y     分解后数值矩阵,大小与x相同, 
 
y=c; 
sqrt2=sqrt(2); 
h=h/2; 
for i=1:h 
    y(i)=(c(2*i-1)+c(2*i))/sqrt2; 
    y(h+i)=(c(2*i-1)-c(2*i))/sqrt2;         
end