ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

イメージと行列

この例では、行列として格納されたイメージを表示する方法と、行列をイメージとして表現することの概念を示します。

行列 X に対して、IMAGE(X) は、カラーマップ内のインデックスとして使われる X の要素から選択された色や輝度を使ってグラフィカルなイメージを表示します。

シンプルな螺旋状の行列

SPIRAL は、行列にシンプルな螺旋状のパターンを格納します。Figure に行列の要素のらせん状のパターンを表すことができます。行列の要素はらせん状に中心から遠ざかり、大きさが線形に増加します。小さい数 (中心の値) は、黒とダーク グレーに写像され、反対に大きな値 (行列のエッジの周り) は、ライト グレーと白に写像されます。行列の小さい値の黒へ、行列の大きい値の白へ、中間の値をグレーの陰影に割り当てることで、カラー マップを決定します。

colormap(gray);
X = spiral(8);
image(X);

カラーマップ

関数 colormap は、カラー マッピングを変更するために使用されます。マップは前のスクリーンで colormap(gray) に設定されています。ここでカラーマップを色相-彩度-明度 (hsv) のカラー マップに変更します。色は赤から始まり、黄、緑、シアン、青、赤紫、そして赤に戻ります。

colormap(hsv);

別のカラー マップ [hot] です。[hot] のカラーマップは、黒から赤と黄色の陰影を介して白になる範囲です。

colormap(hot);

関数 colormap で使用される [hsv] と [hot] は、もちろん行列です (正確には、行列を返す関数の名前です)。 カラー マップ行列は、赤、青、緑のビデオ成分の強度を指定する 3 つの列をもちます。行数は、特定のイメージに依存します。この例では、X = spiral(8) の要素は 1 から 64 の範囲をもつので、64 の行が使われます。

M = hot;
size(M)
ans =

    64     3

X の要素は、カラー マップのインデックスとして使われるため、X は正で、1 と map の長さの間の整数の要素でなければなりません。個々の色がどのように決定するかを確認するためには、X(7,1) のように、X の 1 つの要素を取り出してください。対応するカラー マップ エントリは、M(37,:) です。これは完全な赤の強度と、中間を少し超える緑の強度をもち、青はありません。左下の隅の近い (7,1) の位置のセルでオレンジの陰影を作り出します。

ColorMapIndex = X(7,1)
M(ColorMapIndex,:)
ColorMapIndex =

    37


ans =

    1.0000    0.5417         0

一般的に、以下のステートメント

image(X), colormap(M);

は、(i,j) 番目のセルの RGB 強度が 3 要素のベクトル M(X(i,j),:) となるように色付けされたセルの表示を作成します。行列 X は任意のサイズになりますが、その要素は 1 と m の間の正の整数でなければなりません。行列 M はそのとき m 行 3列で、0.0 と 1.0 の間の要素である必要があります。COLORMAP(M) は、PCOLOR(X)、SURF(Z)、MESH(Z) で使用される色も設定しますが、これらのケースのデータ行列 X または Z は、カラー マップのインデックスを与えるためにスケーリングされます。螺旋状の例のまったく異なる特性を [flag] カラー マップで示します。[flag] カラーマップは、行列 flag(4) の単に m/4 のコピーで、以下に示すように、相互に積み重ねられます。赤、白、青、黒の色は、X の要素が変化するときに循環的に使用され、イメージ データの細かい部分が視覚的にわかるようになります。この例では、行列内の対角的なパターンを確認することができます。

colormap(flag);
flag(4)
ans =

     1     0     0
     1     1     1
     0     0     1
     0     0     0

カラー マップは行列であるため、MATLAB の配列操作を使って、修正するか、新たに作成することが可能です。たとえば、hot のカラー マップは、グレーを加えることで和らぐ色にすることができます。

S = (hot + gray)/2;
colormap(S)

[gray] で和らぐ色になった [hot] のカラーマップは、1 未満のパワーまでカラー マップの要素を高くすることで明るくすることができます。

X = spiral(8);
image(X);
gamma = .6;
S = (hot + gray)/2;
S = S.^gamma;
colormap(S)

コマンド RGBPLOT は、カラー マップのプロットを作成します。x 軸は、IMAGE(X) 内の X の要素に対応するマップのインデックスで、y 軸は、赤、緑、青の成分の強度です。

rgbplot(S)

SPY の利用

スパース行列表示関数 spy は、特定のカラー マップ エントリを示す画素の位置を表示するのに役立ちます。次のコード セグメントは、米国東部の New England の標高データを含むファイルを読み込み、カラー マップの 2 番目か 3 番目の要素を使用する要素すべてを表示します。X==1 となる位置は海面に対応するため、海岸線をそのまま表したものを見ていることになります。

load cape
spy((X==2) | (X==3))

大きなイメージの例

8 行 8 列の螺旋状の行列は、例のための小さなものです。大規模な計算からなるより大きな行列や、写真や衛星、スキャナから得られるイメージの方が、より一般的です。demos ディレクトリには、カラー マップをもつさまざまなサンプル イメージがあり、color ディレクトリには、他の実用的なカラー マップを生成する関数があります。以下に、これらのイメージとそれらに対応するカラーマップをもつ MAT ファイルのリストを示します。(構造体 imglist から) これらのイメージのいずれかを選択して使用することができ、colorlabels 下にリストされるカラー マップ (イメージと共に読み込まれる既定のカラーマップ [map] を含む) のいずれかを選択できます。これを行うために、次のコードを選択し、実行しなければなりません。さまざまなパラメーターを変更し、変更を確認します。

clear X map;
imglist = {'flujet', ... Fluid Jet
           'spine', ... Bone
           'gatlin', ... Gatlinburg
           'durer', ... Durer
           'detail', ... Durer Detail
           'cape', ... Cape Cod
           'clown', ... Clown
           'earth', ... Earth
           'mandrill', ... Mandrill
           'spiral'};

colorlabels = {'default', 'hsv','hot','pink',...
               'cool','bone','prism','flag',...
               'gray','rand'};

load(imglist{4},'X','map');
imagesc(X);
colormap(map);
%colormap(colorlabels{1});
axis off;

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