DWT的Matlab问题

问题描述

| 我正在尝试使用10点daubechies滤镜获取图像的第4级DWT。 (自然将其反转!)
host = double(imread(\'lena512.bmp\'));       % Load image data
nLevel = 4;                                 % Number of decompositions
cwA = cell(1,nLevel);                       % Approximation coefficients
cwH = cell(1,nLevel);                       % Horizontal detail coefficients
cwV = cell(1,nLevel);                       % Vertical detail coefficients
cwD = cell(1,nLevel);                       % Diagonal detail coefficients

% Do the DWT
myImage = host;
for iLevel = 1:nLevel,[cwA{iLevel},cwH{iLevel},cwV{iLevel},cwD{iLevel}] = dwt2(myImage,\'db10\');
  myImage = cwA{iLevel};
end

% Do the inverse DWT
fullRecon = cA{nLevel};
for iLevel = nLevel:-1:1
  fullRecon = idwt2(fullRecon,cH{iLevel},cV{iLevel},cD{iLevel},\'db10\');
end
上面的代码不断给我错误:   ???使用==>加号时出错   矩阵尺寸必须一致。      93 = => idwt2中的错误   x = upsconv2(a,{Lo_R,Lo_R},sx,dwtEXTM,shift)+ ...%近似值。      ==>假人错误18     fullRecon =     idwt2(fullRecon,cH {iLevel},cV {iLevel},cD {iLevel},\'db10 \'); 我相信这是由于逆dwt做一些时髦的东西。我也尝试过更改dwtmode,但没有帮助。我真的会寻求任何帮助。 PS:lena512.bmp只是lena的灰度图片。它的尺寸为512x512。 我乐于接受新想法=)     

解决方法

        将代码重写为
clear all;
host = double(imread(\'lena512.bmp\'));       % Load image data
nLevel = 4;                                 % Number of decompositions
cwA = cell(1,nLevel);                       % Approximation coefficients
cwH = cell(1,nLevel);                       % Horizontal detail coefficients
cwV = cell(1,nLevel);                       % Vertical detail coefficients
cwD = cell(1,nLevel);                       % Diagonal detail coefficients

% Size matrix
s = [size(host,1) size(host,2)];

% Do the DWT
myImage = host ;
for iLevel = 1:nLevel
  [cwA{iLevel},cwH{iLevel},cwV{iLevel},cwD{iLevel}] = dwt2(myImage,\'db10\');
  s = [s; size(cwH{iLevel},1) size(cwH{iLevel},2)];
  myImage = cwA{iLevel};
end

% Do the inverse DWT
fullRecon = cwA{nLevel};
for iLevel = nLevel:-1:1
  fullRecon = idwt2(fullRecon,cwD{iLevel},\'db10\',s(iLevel,:));
end
解决了我的问题。希望它可以帮助别人...