idwt2.m

来自「用来实现隐马尔科夫树的分类」· M 代码 · 共 120 行

M
120
字号
function w = Idwt(x,h,L);% % Input:%   x : data (square matrix)%   h : lowpass filter%   L : number of levels (2^L must divide the size of x)%       if omitted, max possible level is used.% Output:%   w : 2-D wavelet transform of x% Example:%   h = daubcqf(6);%   w = Idwt2(x,h,4); or w = Idwt2(x,h);%% See also:%  % File Name: Idwt2.m% Last Modification Date: March 9, 1999% Current Version: 1.0% File Creation Date: Tue Mar  9 09:17:18 1999% Author: Hyeokho Choi  <choi@ece.rice.edu>% % Copyright: All software, documentation, and related files in this distribution%           are Copyright (c) 1999 Rice University% % Permission is granted for use and non-profit distribution providing that this% notice be clearly maintained. The right to distribute any portion for profit% or as part of any commercial product is specifically reserved for the author.% % Change History:% if (nargin < 2)  error('You should provide at least two arguments w and h');end;h0 = h;h1 = makeh1(h0);n = length(h0);[nx,ny]=size(x);if (nargin < 3)  L = log2(nx);end;if (nx-ny) == 0  if rem(nx,2^L) == 0         H0 = zeros(nx,ny/2); L0 = H0;     LL = zeros(nx/2,ny/2); HL = LL; LH = LL; HH = LL;          %row transformation     for i = 1:nx       xx = x(i,:);              % create cyclic extension       xx = [xx, zeros(1,n-1)];       for k = 1:n-1          xx(nx+k) = xx(k);       end         % linear convolution       lo = conv(xx,h0(n:-1:1));       hi = conv(xx,h1(n:-1:1));        % extract periodic part and downsample       L0(i,:) = lo(n:2:nx+n-1);       H0(i,:) = hi(n:2:ny+n-1);     end; % of i          % column transformation     for i = 1:ny/2       xx = L0(:,i)';              % create cyclic extension       xx = [xx, zeros(1,n-1)];       for k = 1:n-1          xx(nx+k) = xx(k);       end         % linear convolution       lo = conv(xx,h0(n:-1:1));       hi = conv(xx,h1(n:-1:1));        % extract periodic part and downsample       LL(:,i) = lo(n:2:nx+n-1)';       LH(:,i) = hi(n:2:ny+n-1)';     end;          for i = 1:ny/2       xx = H0(:,i)';              % create cyclic extension       xx = [xx, zeros(1,n-1)];       for k = 1:n-1          xx(nx+k) = xx(k);       end         % linear convolution       lo = conv(xx,h0(n:-1:1))';       hi = conv(xx,h1(n:-1:1))';        % extract periodic part and downsample       HL(:,i) = lo(n:2:nx+n-1);       HH(:,i) = hi(n:2:ny+n-1);     end;               if L == 1        w = [LL HL; LH HH];     else         w = [Idwt2(LL,h,L-1) HL; LH HH];     end    else    disp('The size of x must be divisible by 2^L * 2^L');  end;else  disp('The original image should be square');end  

⌨️ 快捷键说明

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