7

私はこの驚くべき反応に出くわしましたMATLAB をidwt2数回適用して、それを自分で理解するために実行しました。ただし、RGB 画像を使用して同じものを使用する方法がわかりません。それで、私は3つの質問があります。

  1. 行と列に沿った高周波成分と低周波成分とともに出力に表示される変換された画像のみを使用して、コードを RGB 画像に適用するにはどうすればよいでしょうか。すべての成分の融合を単一の画像として表示することは可能ですか? cat オペレーターを配置する必要があることは承知していますが、その方法がわかりません。

  2. 第二に、迷路のようなイメージも得ています! 理由が分からず困っています。この画像がどのように生成されたかを示すステートメントと同じコードも添付しました。

    db13.の関数シグネチャの用語は何をdwt意味しますか?

コード:

    load woman;             % Load image data
%startImage=imread('pic_rgb.jpg');  % IF I WANT TO WORK WITH RGB IMAGE
    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
    startImage = X;
    for iLevel = 1:nLevel,
      [cA{iLevel},cH{iLevel},cV{iLevel},cD{iLevel}] = dwt2(startImage,'db1');



     startImage = cA{iLevel};
    end

    figure;colormap(map);
    imagesc(dwt2(startImage,'db1')); %THIS GIVES THE MAZED IMAGE INSTEAD OF THE TRANSFORMED IMAGE
    figure;
    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);

    %reconstruct
    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);
4

1 に答える 1

9

他の質問への私の回答で使用されたサンプル画像はインデックス付き画像だったので、そのコードをRGB画像で機能させるために行う必要のあるいくつかの変更があります。

まず、 DWT2'db1'に渡された引数についての質問に答えます。これは、分解に使用するウェーブレットのタイプ(この場合はDaubechiesウェーブレット)を指定します。使用可能なウェーブレットの詳細については、関数WFILTERSおよびWAVEINFOの文書を参照してください。

最初の2つの質問に対処するために、他の回答のコードをRGB画像で機能するように変更する方法を説明します。サンプル'peppers.png'画像を使用します。まず、画像をロードして、各カラーコンポーネントが持つ値の数を定義する必要があります。サンプル画像は符号なし8ビット整数型(最も一般的な状況)であるため、 nColors256になります。

X = imread('peppers.png');  %# Load sample image
nColors = 256;              %# Number of values per color component

画像がより大きな符号なし整数型(例'uint16')の場合、色の値の数を見つける一般的な方法は、次のように関数INTMAXを使用することです。

nColors = double(intmax(class(X)))+1;

次のコードでは、の画像タイプ'uint8'が想定されています。

分解の適用は、インデックス付き画像の場合と同じです。係数行列は、M行N列の行列ではなくM行N行3列の行列になります。

nLevel = 3;             %# Number of decompositions
cA = cell(1,nLevel);    %# Approximation coefficient storage
cH = cell(1,nLevel);    %# Horizontal detail coefficient storage
cV = cell(1,nLevel);    %# Vertical detail coefficient storage
cD = cell(1,nLevel);    %# Diagonal detail coefficient storage
startImage = X;
for iLevel = 1:nLevel,  %# Apply nLevel decompositions
  [cA{iLevel},cH{iLevel},cV{iLevel},cD{iLevel}] = dwt2(startImage,'db1');
  startImage = cA{iLevel};
end

各分解の水平、垂直、および対角成分を表示するタイル画像を作成するコードは、現在3D行列を使用しており、連結演算子の代わりにCAT[]関数を使用する必要があるため変更されます。

tiledImage = wcodemat(cA{nLevel},nColors);
for iLevel = nLevel:-1:1
  tiledImage = cat(1,cat(2,tiledImage,...
                           wcodemat(cH{iLevel},nColors)),...
                     cat(2,wcodemat(cV{iLevel},nColors),...
                           wcodemat(cD{iLevel},nColors)));
end
figure;
imshow(uint8(tiledImage-1));  %# Convert to unsigned 8-bit integer to display

これにより、各分解ステップの水平(右上)、垂直(左下)、および対角(右下)のコンポーネントと、縮小された画像(左上)を示す次の画像が表示されます。

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

再構築の手順は、他の回答から変更されていません。最終的な画像を表示するためのコードのみを変更する必要があります。

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;
tiledImage = cat(1,cat(2,X,uint8(fullRecon)),...
                   cat(2,uint8(partialRecon),zeros(size(X),'uint8')));
imshow(tiledImage,'InitialMagnification',50);

また、元のRGB画像(左上)、保存されているすべての詳細係数行列を使用した完全に再構成された画像(右上)、および保存されている詳細係数行列を使用していない部分的に再構成された画像(下)を示す画像が表示されます。左):

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

于 2011-07-21T16:59:05.070 に答える