%% 本程序实现任意偶数大小图像第二代双正交97提升小波变换 %% 注1: 采用标准正交方法,对行列采用不同矩阵(和matlab里不同)
%% 注2: 为了保证正交,所有边界处理,全部采用循环处理
%% 注3: 正交性验证,将单位阵带入函数,输出仍是单位阵(matlab不具有此性质)
%% 注4: 此程序是矩阵实现,所以图像水平分量和垂直分量估计被交换位置
%% 注5: 此程序实现的是类小波(wavelet-like)变换,是介于小波包变换与小波变换之间的变换
%% 注6: 此程序每层变换相对原图像矩阵,产生的矩阵都是正交阵,这和小波包一致
%% 注7: 但小波变换每层产生的矩阵,是相对每个待分解子块的正交矩阵,而不是原图像的正交矩阵
%% 注8: 且小波变换产生的正交矩阵维数,随分解层数2分减少
%% 注9: 提升系数可以在MATLAB7.0以上版本,用liftwave('9.7')获取,这里直接给出,考虑兼容性
%% 注10:由于MATLAB数组下标从1开始,所以注意奇偶序列的变化
%% 注11:d为对偶上升,即预测;p为原上升,即更新 %% 编程人 沙威 安徽大学
%% 编程时间 2004年12月18日 %% x输入图像,y输出图像
%% flag_trans为正变换或反变换标志,0执行正变换,1执行反变换
%% flag_max,是否最大层数变换标志,0执行用户设定层数,1执行最大层数变换
%% layer,用户层数设置(小于最大层) function y=db97(x,flag_trans,flag_max,layer); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.输入参数检查 % 矩阵维数判断
[sa,sb]=size(x); if (sa~=sb) % 防止非图像数据
errordlg('非图像数据!');
error('非图像数据!');
end; % 变换标志判断
[sa,sb]=size(flag_trans);
if ((sa~=1) | (sb~=1)) % 变换标志错误
errordlg('变换标志错误!');
error('变换标志错误!');
end; if ((flag_trans~=1) & (flag_trans~=0)) % 变换标志错误
errordlg('变换标志错误!');
error('变换标志错误!');
end; % 最大层数标志判断
[sa,sb]=size(flag_max);
if ((sa~=1) | (sb~=1)) % 最大层数标志错误
errordlg('最大层数标志错误ÿ