【问题标题】:Matlab problem with DWTDWT的Matlab问题
【发布时间】:2011-06-12 14:36:25
【问题描述】:

我正在尝试使用 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

上面的代码一直给我错误:

???使用 ==> 加号时出错 矩阵尺寸必须一致。

==> idwt2 在 93 处出错 x = upsconv2(a,{Lo_R,Lo_R},sx,dwtEXTM,shift)+ ... % 近似值。

==> 18 时的假人错误 全侦察 = idwt2(fullRecon,cH{iLevel},cV{iLevel},cD{iLevel},'db10');

我相信这是由于反向 dwt 做了一些时髦的事情。我也尝试更改 dwtmode 但没有帮助。我真的很乐意提供任何帮助。

PS:lena512.bmp 只是 lena 的灰度图。它的尺寸是 512x512。

我乐于接受新鲜的想法 =)

【问题讨论】:

    标签: matlab transform dwt


    【解决方案1】:

    将代码重写为

    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,cwH{iLevel},cwV{iLevel},cwD{iLevel},'db10',s(iLevel,:));
    end
    

    解决了我的问题。希望对其他人有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多