3

私はMATLABを使用して、画像に離散ウェーブレット変換を適用しています。3レベルの変換を取得するために、これを数回適用しています(3)。dwt2圧縮と解凍を行うために、MATLABが提供する関数を使用していますidwt2idwt2問題は、マトリックスを返すため、前に受信した出力に数回適用する場合のように、数回解凍する方法がわからないことです。たとえば、次のようにします。

x = idwt2(scaled3, vertical3, horizontal3, diagonal3, Lo_R, Ho_R);

xにどのidwt2ように適用する必要がありますか?

4

1 に答える 1

11

およびのドキュメントを見るdwt2idwt2、多重分解された画像を再構成するための2つの一般的なオプションがあるようです。

  • 各分解ステップからのすべての水平、垂直、および対角の詳細係数行列を保存し、それらを再構成に使用します。
  • []前の分解ステップで保存しなかった詳細係数行列には、空行列()を入力します。

遅い日だったので、これを行う方法と、それぞれの場合の結果がどのようになるかを示すコードを次に示します...

まず、サンプル画像をロードし、いくつかの変数を初期化します。

load woman;              % Load image data
nLevel = 3;              % Number of decompositions
nColors = size(map, 1);  % Number of colors in colormap
cA = cell(1, nLevel);    % Approximation coefficients
cH = cell(1, nLevel);    % Horizontal detail coefficients
cV = cell(1, nLevel);    % Vertical detail coefficients
cD = cell(1, nLevel);    % Diagonal detail coefficients

ここで、分解(この場合は3)を適用し、各ステップの詳細係数行列をセル配列に格納します。

startImage = X;
for iLevel = 1:nLevel,
  [cA{iLevel}, cH{iLevel}, cV{iLevel}, cD{iLevel}] = dwt2(startImage, 'db1');
  startImage = cA{iLevel};
end

最終的に分解された画像がどのように見えるか、および途中のすべての詳細係数行列を確認するには、次のコードを実行します(これを使用しますwcodemat)。

tiledImage = wcodemat(cA{nLevel}, nColors);
for iLevel = nLevel:-1:1,
  tiledImage = [tiledImage                    wcodemat(cH{iLevel}, nColors); ...
                wcodemat(cV{iLevel}, nColors) wcodemat(cD{iLevel}, nColors)];
end
figure;
imshow(tiledImage, map);

次のように表示されます。

ここに画像の説明を入力してください

今度は再構築する時が来ました!次のコードは、「完全な」再構成(保存された詳細係数行列のすべてを使用)と「部分的な」再構成(それらのいずれも使用しない)を実行し、画像をプロットします。

fullRecon = cA{nLevel};
for iLevel = nLevel:-1:1,
  fullRecon = idwt2(fullRecon, cH{iLevel}, cV{iLevel}, cD{iLevel}, 'db1');
end
partialRecon = cA{nLevel};
for iLevel = nLevel:-1:1,
  partialRecon = idwt2(partialRecon, [], [], [], 'db1');
end
figure;
imshow([X fullRecon; partialRecon zeros(size(X))], map, ...
       'InitialMagnification', 50);

ここに画像の説明を入力してください

元の(左上)と「完全な」再構成(右上)は区別がつかないように見えますが、「部分的な」再構成(左下)は非常にピクセル化されていることに注意してください。1または2のように、より少ない分解ステップを適用した場合、違いはそれほど深刻ではありません。

于 2009-07-13T20:35:22.713 に答える