wavefast.m

博客标题为wavefast.m,但缺少具体内容,无法获取关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

%wavefast源函数
function [c,s]=wavefast(x,n,varargin)
%wavefast执行一个二维快速小波变换
%[c,l]=wavefast(x,n,lp,hp)用带有最大值和最小值的重构滤波器执行一个FWT图像
%[c,l]=wavefast(x,n,wname)执行同样的程序,但是使用wavefilter为小波wname取得一个带有最大值和最小值的滤波器
%其中尺度参数n必须小于或等于图像维数最大值的log2。滤波器的最大值和最小值必须是偶数。
%为了减少边界失真,x必须是对称扩展的。例如x=[c1 c2 c3 ... cn](一维的),而它的对称扩展是[... c3 c2 c1 c1 c2 c3 ... cn cn cn-1 cn-2 ...]

%输出:
%矩阵c是系数分解向量:
%c=[a(n) h(n) v(n) d(n) h(n-1) ... v(1) d(1)]
%其中a,h,v和d分别是包含近似值,水平的,垂直的,和二维系数矩阵的列向量。c有3n+1个部分,其中n是小波重构数。

%矩阵s是一个(n+2)*2的簿记矩阵
%s=[sa(n,:);sd(n,:);sd(n-1,:);... sd(1,:);sx],其中sa和sd是近似值和细节大小条目

%检查输入参数
error(nargchk(3,4,nargin));
%nargin用来判断输入变量个数的函数,
%当nargin的值大于4时,nargchk返回字符串'Too many input arguments';当nargin的值小于3时,nargchk返回字符串'Not enough input arguments';
%当nargin的值在3到4之间,nargchk返回空字符串。error以错误的方式显示警告字符串(以红色字体显示)。
if nargin==3
    if ischar(varargin{1})
        [lp,hp]=wavefilter(varargin{1},'d');
    else
        error('Missing wavelet name.');
    end
else
    lp=varargin{1};hp=varargin{2};
end

f1=length(lp);sx=size(x);
if (ndims(lp)~=2) | (min(sx)<2) | ~isreal(x) | ~isnumeric(x)
    error('X must be a real,numeric matrix.')
end

if(ndims(lp)~=2) | ~isreal(lp) | ~isnumeric(lp)...
        | (ndims(hp)~=2) | ~isreal(hp) | ~isnumeric(hp)...
        | (f1~=length(hp)) | rom(f1,2)~=0
    error(['LP and HP must be even and equal length real,''numeric filter vectors.']);
end

if ~isreal(n) | ~isnumeric(n) | (n<1) | (n>log2(max(sx)))
    error(['N must be a real scalar between 1 and' 'log2(max(size(X))).']);
end

%设置最初的输出数据结构和最初近似值
c=[];s=sx;app=double(x);

%对于每个重构
for i=1:n
    %对称地扩展近似值
    [app,keep]=symextend(app,f1);
    
    %用hp和采样率计算卷积行。然后用hp和lp得到的卷积列去获取对角线和垂直的系数。
   rows=symconv(app,hp,'row',f1,keep);
   coefs=symconv(rows,hp,'col',f1,keep);
   c=[coefs(:)' c];s=[size(coefs);s];
   coefs=symconv(rows,lp,'col',f1,keep);
   c=[coefs(:)' c];
   
   % 用hp和采样率计算卷积行。然后用hp和lp得到的卷积列去获取垂直的和下一个近似的系数。
   rows=symconv(app,lp,'row',f1,keep);
   coefs=symconv(rows,hp,'col',f1,keep);
   c=[coefs(:)'c];
   app=symconv(rows,lp,'col',f1,keep);
end

%附加最后的近似值结构
c=[app(:)'c];s=[size(app);s];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值