Проблема Matlab с DWT - PullRequest
       5

Проблема Matlab с DWT

0 голосов
/ 12 июня 2011

Я пытаюсь получить DWT-изображение 4-го уровня с помощью фильтра из 10 точек. (и, естественно, инвертируя это!)

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 at 93 x = upsconv2 (a, {Lo_R, Lo_R}, sx, dwtEXTM, shift) + ...% приближения.

Ошибка в ==> пустышке в 18 fullRecon = idwt2 (fullRecon, сН {iLevel}, {Cv iLevel}, {ЧЖД iLevel}, 'DB10');

Я полагаю, это из-за того, что ДВТ делает что-то напуганное. Я также попытался изменить режим dwtmode, но это не помогло. Я действительно оценил бы любую помощь.

PS: lena512.bmp - это просто серое изображение Лены. Его размеры 512х512.

Я открыт для свежих идей =)

1 Ответ

1 голос
/ 13 июня 2011

Переписав код как

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

исправил мою проблему. Надеюсь, это поможет другим ...

...