ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

decorrstretch

無相関ストレッチをマルチチャンネル イメージに適用

構文

  • S = decorrstretch(A)
  • S = decorrstretch(A,name,value...)

説明

S = decorrstretch(A)m x n x nBands のイメージ A に無相関ストレッチを適用し、S に結果を返します。SA と同じサイズおよびクラスをもち、各帯域における平均と分散は A と同じです。A は RGB イメージ (nBands = 3)、または任意の数のスペクトル バンドにすることができます。

無相関ストレッチの主な目的は視覚効果を高めることです。無相関ストレッチは、イメージにおける色の差異を強調するための手法です。

S = decorrstretch(A,name,value...) は、オプションの制御パラメーターに従って無相関ストレッチをイメージ A に適用します。

すべて展開する

森のシーンにおける色差の強調

無相関ストレッチを使用して、色差を拡大させることにより、森のイメージ中の要素を強調表示します。

[X, map] = imread('forest.tif');
S = decorrstretch(ind2rgb(X,map),'tol',0.01);
figure
subplot(1,2,1), imshow(X,map), title('Original Image')
subplot(1,2,2), imshow(S), title('Enhanced Image')

入力引数

すべて展開する

A — 強調されるイメージ非スパース実数 N 次元配列

ストレッチされるイメージ。非スパースで実数の N 次元配列として指定します。イメージ A は、RGB イメージ (nBands = 3) または任意の数のスペクトル バンドをもつマルチチャンネル イメージです。

例:

データ型: single | double | int16 | uint8 | uint16

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: ‘Mode’,’covariance’

'Mode' — 無相関メソッド‘correlation’ (既定値) | 'correlation' または 'covariance'

テキスト文字列 ‘correlation’ または ‘covariance’ で指定する無相関メソッド。‘correlation’ は、帯域間の相関行列の固有値分解を使用します。‘covariance’ は、帯域間の共分散行列の固有値分解を使用します。

データ型: char

'TargetMean' — 出力イメージの帯域平均を一致させる値各帯域の標本平均を含む 1 行 nBands 列のベクトル (帯域の平均は維持) (既定値) | クラス double および長さ nBands の実数スカラーまたはベクトル

出力イメージの帯域平均を一致させる値であり、クラス double および長さ nBands の実数スカラーまたはベクトルとして指定されます。入出力イメージ クラスの標準範囲に値を固定する必要がある場合は、結果に影響する可能性があります。

targetmeandouble クラスでなければなりませんが、入力イメージのピクセルと同じ値を使用します。たとえば、Auint8 クラスである場合には、127.5 が相応の値になります。

データ型: double

'TargetSigma' — 出力イメージの個々の帯域の標準偏差を一致させる値各帯域の標準偏差を含む 1 行 nBands 列のベクトル (帯域の分散は維持) (既定値) | クラス double および長さ nBands の正の実数スカラーまたはベクトル

出力イメージの個々の帯域の標準偏差を一致させる値であり、クラス double および長さ nBands の正の実数スカラーまたはベクトルとして指定されます。入出力イメージ クラスの標準範囲に値を固定する必要がある場合は、結果に影響する可能性があります。一様な (ゼロ分散) 帯域の場合は無視されます。

targetsigmadouble クラスでなければなりませんが、入力イメージと同じ値とピクセルを使用します。たとえば、Auint8 クラスである場合には、50.0 が相応の値になります。

データ型: double

'Tol' — 無相関ストレッチの後に適用される線形コントラスト ストレッチdouble クラスの 1 要素または 2 要素の実数ベクトル

無相関ストレッチの後に適用される線形コントラスト ストレッチ。double クラスの 1 要素または 2 要素の実数ベクトルとして指定します。TargetMean または TargetSigma の使用をオーバーライドします。TOLstretchlim での場合と同じ意味をもちます。ここで、TOL = [LOW_FRACT HIGH_FRACT] は、低い強度と高い強度で飽和するイメージの割合を指定します。TOL をスカラー値として指定した場合、LOW_FRACT = TOL および HIGH_FRACT = 1 - TOL となり、低い強度と高い強度においてイメージを同じ割合で飽和します。TOL の値を指定しない場合、decorrstretch は線形コントラスト ストレッチを省略します。

TOL を少し調整しただけでも、出力の外観が大きく変わります。

データ型: double

'SampleSubs' — 帯域平均、共分散および相関の計算に使用される A のサブセットピクセルの添字の 2 つの配列 {rowsubs, colsubs} を含むセル配列

帯域平均、共分散および相関の計算に使用される A のサブセット。ピクセルの添字の 2 つの配列 {rowsubs, colsubs} を含むセル配列として指定します。rowsubs および colsubs は同じサイズのベクトルまたは行列で、それぞれ行と列の添字を含んでいます。

このオプションを使用して計算量を減らし、無効なピクセルや表現に関わらないピクセル (または、その両方) が変換に影響を及ぼさないようにします。たとえば、rowsubscolsubs を使用して雲のかかった領域を除外することができます。指定しない場合、decorrstretch は、A 内のすべてのピクセルを使用します。

データ型: double

出力引数

すべて展開する

S — 出力イメージ非スパース実数 N 次元配列

S のサイズとクラスは A と同じになります。S の各帯域の平均と分散は A の場合と同じになります。

詳細

すべて展開する

ヒント

  • (コントラスト ストレッチオプションを使用しない) 直線無相関の結果には、uint8 クラスまたは uint16 クラスでサポートされている数値範囲外の値 (負の値、あるいは 2^8 - 1 または 2^16 - 1 をそれぞれ超える値) が含まれることがあります。そのような場合、decorrstretch はサポートされている範囲に出力を固定します。

  • double クラスについては、線形コントラスト ストレッチを指定してから区間 [0 1] に固定するTOL の値を与え場合にのみ、decorrstretch は出力を固定します。

  • オプションのパラメーターは相互に影響しません。ただし、線形ストレッチでは通常、帯域の平均と帯域の標準偏差の両方が変更されます。したがって、targetmean および targetsigmaTOL と共に指定はできますが、それらの効果は修正されます。

アルゴリズム

無相関ストレッチは、特定のパラメーターが実際のイメージの統計と望ましい (ターゲット) イメージ統計の値によって決まる、ピクセル単位の線形処理です。入力イメージ A の各帯域において、与えられたピクセルの値を含むベクトル a は、次のように、出力イメージ B の対応するピクセル b に変換されます。

b = T * (a - m) + m_target.

a および bnBands 行 1 列のベクトル、TnBandsnBands 列の行列、m および m_targetnBands 行 1 列のベクトルであり、以下のようになります。

  • m には、イメージ内、または指定したイメージ ピクセルのサブセット内の各帯域の平均が含まれます。

  • m_target には、各帯域で望まれる出力の平均が含まれます。既定の選択は m_target = m です。

線形変換行列 T は、以下によって決まります。

  • 行列 Cov で表される、イメージの帯域間のサンプル共分散、または指定したイメージのサブセット (m に使用されるのと同じサブセット) の帯域間のサンプル共分散。

  • 各帯域で望まれる出力標準偏差。これは便宜上、対角行列 SIGMA_target で表されます。既定の選択は SIGMA_target = SIGMA です。ここで、SIGMA は各帯域の標本標準偏差を含む対角行列です。SIGMA は、m および Cov に使用されたものと同じサンプル ピクセルから、次のように計算されます。

    SIGMA(k,k) = sqrt(Cov(k,k), k = 1,..., nBands.

CovSIGMA および SIGMA_target は、以下で定義される行列 CorrLAMBDA および V と同様、nBandsnBands 列です。

T を計算するには、まず共分散行列 Cov または次の相関行列のいずれかの固有値分解を実行します。

Corr = inv(SIGMA) * Cov * inv(SIGMA).

  • 相関に基づくメソッドの場合、Corr は次のように分解されます。 Corr = V LAMBDA V'.

  • 共分散に基づくメソッドの場合、Cov は次のように分解されます。 Cov = V LAMBDA V'.

LAMBDA は固有値の対角行列であり、VCorrCov のいずれかを LAMBDA に変換する直交行列です。

次の手順は、各帯域のストレッチ係数の計算です。これは、対応する固有値の逆平方根です。次のように、ストレッチ係数を含む対角行列 S を定義すると便利です。

S(k,k) = 1 / sqrt(LAMBDA(k,k)).

最後に、行列 T が以下のいずれかによって計算されます。

T = SIGMA_target V S V' inv(SIGMA) (相関に基づくメソッド)

または

T = SIGMA_target V S V' (共分散に基づくメソッド)

帯域分散が一様である場合、2 つのメソッドで同じ結果が導き出されます。

T を、以下のように、b の式に代入します。

b = m_target + SIGMA_target V S V' inv(SIGMA) * (a - m)

または

b = m_target + SIGMA_target V S V' * (a - m)

右から順に式を見ていくと、無相関ストレッチによって以下の処理が行われることがわかります。

  1. 各帯域から平均を削除する

  2. 各帯域をその標準偏差によって正規化する (相関に基づくメソッドの場合のみ)

  3. 帯域を Corr または Cov の固有空間へと回転させる

  4. イメージを固有空間で無相関化および正規化されたままにして、ストレッチ S を固有空間で適用する

  5. 回転して元の帯域空間に戻す。ただし、帯域は無相関化および正規化されたままになっている

  6. SIGMA_target に従って各帯域を再スケールする

  7. 平均を各帯域に戻す

この情報は役に立ちましたか?