Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

無相関ストレッチを使用した色分離の改善

無相関ストレッチは、帯域間の有意な相関を使用して、イメージの色分離を強調します。色の誇張は、視覚的な解釈を向上し、その特徴を見分けやすくします。無相関ストレッチの適用には、関数 decorrstretch を使用します。必要に応じて、無相関ストレッチにオプションの線形コントラスト ストレッチを加える方法については、線形コントラスト ストレッチを参照してください。

イメージ内のカラー帯域の数 NBANDS は通常、3です。しかし、カラー帯域の数にかかわらず、無相関ストレッチを適用できます。

イメージの元の色値は、より広い範囲の新しい色値の集合にマッピングされます。個々のピクセルの色の強度は、NBANDS 行 NBANDS 列の共分散、または相関行列の色の固有空間に変換され、帯域分散と等しくなるように引き伸ばされた後、変換されて元のカラー帯域に戻ります。

帯域統計を定義するには、元のイメージ全体を使うか、または、subset オプションでそのサブセットを選択して使用できます。

単純な無相関ストレッチ

この例では、イメージの 3 つのカラー帯域に対して無相関ストレッチを実行する方法を説明します。イメージのカラー帯域散布図により帯域がどのように無相関化され均等化されたかを示します。

無相関ストレッチの実行

imdata フォルダーにあるイメージ ライブラリからイメージを読み取ります。この例ではリトル コロラド川の LANDSAT イメージを使用します。イメージは 7 つの帯域をもっていますが、ここでは、3 つの可視色だけを読み取ります。

A = multibandread('littlecoriver.lan', [512, 512, 7], ...
  'uint8=>uint8', 128, 'bil', 'ieee-le', ...
  {'Band','Direct',[3 2 1]});

無相関ストレッチを実行します。

B = decorrstretch(A);

元のイメージと処理後のイメージを表示します。2 つのイメージを比較すると、元のイメージは強い紫 (青っぽい赤) の色調を帯びていますが、変換したイメージでは色の幅が少し広がっています。

imshow(A)
title('Little Colorado River Image')

Figure contains an axes. The axes with title Little Colorado River Image contains an object of type image.

imshow(B)
title('Little Colorado River Image After Decorrelation Stretch')

Figure contains an axes. The axes with title Little Colorado River Image After Decorrelation Stretch contains an object of type image.

カラー帯域散布図の作成

まず、元のイメージの 3 つのカラー チャネルを分離します。

[rA,gA,bA] = imsplit(A);

無相関ストレッチ後のイメージの 3 つのカラー チャネルを分離します。

[rB,gB,bB] = imsplit(B);

元のイメージの色散布図を表示します。次に、無相関ストレッチ後のイメージの色散布図を表示します。

figure
plot3(rA(:),gA(:),bA(:),'.')
grid on
xlabel('Red (Band 3)')
ylabel('Green (Band 2)')
zlabel('Blue (Band 1)')
title('Color Scatterplot Before Decorrelation Stretch')

Figure contains an axes. The axes with title Color Scatterplot Before Decorrelation Stretch contains an object of type line.

figure
plot3(rB(:),gB(:),bB(:),'.')
grid on
xlabel('Red (Band 3)')
ylabel('Green (Band 2)')
zlabel('Blue (Band 1)')
title('Color Scatterplot After Decorrelation Stretch')

Figure contains an axes. The axes with title Color Scatterplot After Decorrelation Stretch contains an object of type line.

線形コントラスト ストレッチ

線形コントラスト ストレッチを加えると、色の範囲がさらに拡張され、イメージが改善されます。次の例では、Tol オプションを使用して、低い強度と高い強度においてイメージを同じ割合で飽和させます。Tol オプションなしでは、decorrstretch は、線形コントラストのストレッチを適用しません。

飽和限界の計算の詳細については、関数 stretchlim のリファレンス ページを参照してください。

メモ:

線形コントラスト ストレッチは、無相関ストレッチを行った後、関数 stretchlim と関数 imadjust を使用して別の操作として適用することもできます。しかし、この代替方法では、ピクセル値を [0 255] (または [0 65535]) に固定しなければならないため、uint8uint16 のイメージではしばしば劣った結果となります。decorrstretchTol オプションはこの制約を迂回します。

線形コントラスト ストレッチを含む無相関ストレッチ

リトル コロラド川の LANDSAT イメージの 3 つの可視カラー チャネルを読み取ります。

A = multibandread('littlecoriver.lan', [512, 512, 7], ...
  'uint8=>uint8', 128, 'bil', 'ieee-le', ...
  {'Band','Direct',[3 2 1]});

線形コントラスト ストレッチを指定して、無相関ストレッチを適用します。'Tol' 値を 0.01 に設定すると、変換後の各帯域内の色範囲は、0.01 と 0.99 の間で正規化された間隔でマッピングされ、2% 飽和しています。

C = decorrstretch(A,'Tol',0.01);
imshow(C)
title(['Little Colorado River After Decorrelation Stretch and ',...
  'Linear Contrast Stretch'])

Figure contains an axes. The axes with title Little Colorado River After Decorrelation Stretch and Linear Contrast Stretch contains an object of type image.