ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで変更されています。最新情報を確認するには、ページ左下にある国リストで [United States] を選択し、英語ドキュメンテーションに切り替えてください。

image

イメージ オブジェクトを表示

構文

image(C)
image(x,y,C)
image(x,y,C,'PropertyName',PropertyValue,...)
image('PropertyName',PropertyValue,...)
handle = image(...)

プロパティ

プロパティの一覧については、Image のプロパティ を参照してください。

説明

関数 image は、指定されたデータに応じて、行列の各要素を Figure のカラーマップとして解釈するか、またはそのまま RGB 値として解釈することにより、イメージ グラフィックス オブジェクトを作成します。

関数 image には、2 つの型があります。

  • グラフィックス オブジェクトを描画する位置を決めるために、関数 newplot を呼び出し、以下に示す Axes のプロパティを設定する高水準関数。

    • イメージを囲むための XLim および YLim

    • 目盛りとグリッド ラインの前にイメージを表示するため Layertop に設定

    • YDirreverse

    • View[0 90]

  • 関数 newplot を呼び出さずに現在の Axes にイメージを追加する低水準関数。低水準関数の引数リストは、プロパティの名前と値のペアのみからなります。

プロパティの名前と値のペア、構造体配列、およびセル配列としてプロパティを指定することができます (これらのデータ型の指定方法の例については、set および get を参照してください)。

image(C) は行列 C をイメージとして表示します。C の各要素は、イメージの四角形セグメントの色を指定します。

image(x,y,C) では xy は 2 要素のベクトルで、x 軸および y 軸のラベルの範囲を指定しますが、image(C) と同じイメージを作成します。これは、たとえば、イメージにより表される実際の物理的な大きさに対応する軸の目盛りを付けたいときに役立ちます。x(1) > x(2) または y(1) > y(2) の場合、イメージはそれぞれ左右、上下に反転します。これは、既に作成した XY 軸内にイメージを配置するときにも役立ちます。この場合は、現在の Figure で hold on を使用して、目的のイメージ位置の隅に相当する x 値と y 値を入力します。イメージが伸張し、適切に方向付けされます。

image(x,y,C,'PropertyName',PropertyValue,...) は高水準関数で、プロパティの名前と値のペアを指定します。プロパティの詳細は、Image のプロパティ を参照してください。この構文では、イメージを描画する前に関数 newplot を呼び出します。

image('PropertyName',PropertyValue,...) は関数 image の低水準の構文です。この構文では、プロパティの名前と値のペアだけを入力引数として指定します。

handle = image(...) は作成する Image オブジェクトのハンドル番号を返します。関数 image のすべての形式からもハンドル番号を得ることができます。

すべて折りたたむ

MAT ファイルの読み込みとイメージの表示

インデックス付きイメージ X とその関連カラーマップ map を含む mandrill ファイルを読み込みます。カラーマップを使用してイメージを表示します。

load mandrill
image(X)
colormap(map)

座標軸の目盛りと目盛りラベルを削除します。正方形のピクセルになるように縦横比を設定します。

axis off
axis image

JPEG イメージ ファイルの読み込みと表示

Hubble Space Telescope (イメージ提供 NASA) からキャッツアイ星雲の JPEG イメージ ファイルを読み込みます。元のイメージをその RGB カラー値 (左) をサブプロットとして使用して表示します。

リンク付きサブプロット (同じサイズおよびスケール) を作成し、変換される強度イメージをヒート マップ (右) として表示します。

figure
ax(1) = subplot(1,2,1);
rgb = imread('ngc6543a.jpg');
image(rgb)
title('RGB image')

ax(2) = subplot(1,2,2);
im = mean(rgb,3);
image(im)
title('Intensity Heat Map')
colormap(hot(256))
linkaxes(ax,'xy')
axis(ax,'image')

チュートリアル

詳細は、「MATLAB グラフィックスでのイメージの処理」を参照してください。

詳細

すべて折りたたむ

ヒント

イメージ データは、インデックス付きカラーまたはトゥルーカラーです。インデックス付きイメージは、Figure のカラーマップのインデックスからなる配列として色を格納します。トゥルーカラーのイメージは、カラーマップを使いません。その代わりに、各ピクセルの色値が、直接 RGB の 3 要素として格納されます。MATLAB® グラフィックスではトゥルーカラー Image オブジェクトの CData プロパティは 3 次元配列 (m x n x 3) です。この配列は、(赤、緑、青のカラー平面を表す) 3 つの mn 列の行列を、3 次元的に結合したものです。

関数 imread は、TIFF などのさまざまな標準形式のグラフィックス ファイルから、MATLAB の配列にイメージ データを読み込みます。関数 imwrite を使用すると、MATLAB のイメージ データをグラフィックス ファイルに書き込むことができます。関数 imread および関数 imwrite は、多様なグラフィックス ファイル形式および圧縮方式をサポートしています。

関数 imread を使用して、MATLAB のワークスペースにイメージ データを読み込むと、データは通常 8 ビットの整数の配列として保存されます。しかし、関数 imread は、TIFF や PNG ファイルから 16 ビット/ピクセル データの読み込みもサポートしています。これらは、MATLAB が通常使用している倍精度 (64 ビット) 浮動小数点数値よりも、効率的な保存方法です。ただし、8 ビットと 16 ビットのイメージ データは 64 ビットのデータと解釈方法が異なります。次の表は、これらの違いについてまとめたものです。

Axes 制限がイメージの範囲外で設定されていない限り、イメージの x 制限または y 制限外では対話形式で移動またはズームすることはできません。Axes 制限がイメージの範囲外で設定されている場合、このような制限はありません。他のオブジェクト (一連のライン オブジェクト) が Axes を占有し、イメージの境界を超える場合、他のオブジェクトを超えず、その範囲で移動またはズームを実行できます。

イメージ タイプ

倍精度データ (double 配列)

8 ビット データ (uint8 配列) 16 ビット データ (uint16 配列)

インデックス付き (カラーマップ)

イメージは、[1, length(colormap)] 範囲の整数からなる 2 次元 (mn 列) 配列として格納されます。colormap は、[0,1] 範囲の浮動小数点数値からなる m 行 3 列の配列です。

イメージは、[0, 255] (uint8) または [0, 65535] (uint16) 範囲の整数からなる 2 次元 (mn 列) 配列として格納されます。colormap は、[0,1] 範囲の浮動小数点数値からなる m 行 3 列の配列です。

トゥルーカラー (RGB)

イメージは、[0,1] 範囲の浮動小数点数値からなる 3 次元 (m x n x 3) 配列として格納されます。

イメージは、uint8 の場合 [0, 255] の範囲、uint16 の場合 [0, 65535] の範囲の整数を要素とする 3 次元 (m x n x 3) 配列で表されます。

既定の設定では、image は最小値から最大値、上から下へと y 軸を描きます。これを逆にするには、set(gca,'YDir','normal') と入力します。これで y 軸とイメージの両方が反転します。

インデックス付きイメージ

クラスが関数 double のインデックス付きイメージで、値 1 はカラーマップの 1 行目を、値 2 は 2 行目などを指します。関数 uint8 または関数 uint16 のインデックス付きイメージでは、オフセットがあります。すなわち、値 0 はカラーマップの 1 行目で、値 1 は 2 行目などです。

関数 uint8 または関数 uint16 のインデックス付きイメージを double に変換する場合、結果に 1 を加える必要があります。たとえば以下のようになります。

X64 = double(X8) + 1;

または

X64 = double(X16) + 1;

double から関数 uint8 または関数 uint16 に変換する場合は、最初に 1 を引き、それからすべての値が整数になるように round を使います。

X8 = uint8(round(X64 - 1));

または

X16 = uint16(round(X64 - 1));

関数 imwrite を使用してインデックス付きイメージを書き込むと、必要に応じて値が自動変換されます。

カラーマップ

MATLAB のカラーマップは、常に [0,1] 範囲の倍精度浮動小数点数値の m 行 3 列の配列です。ほとんどのグラフィックス ファイル形式では、カラーマップは整数として保存されますが、MATLAB のカラーマップは整数値をサポートしていません。関数 imread および関数 imwrite は、ファイルの読み書き時にカラーマップの値を自動変換します。

トゥルーカラー イメージ

クラスが double のトゥルーカラー イメージでは、データ値は、[0,1] 範囲の浮動小数点数値です。クラスが uint8 のトゥルーカラー イメージでは、データ値は、[0, 255] 範囲の整数です。そして、クラスが uint16 のトゥルーカラー イメージでは、データ値は、[0, 65535] の範囲の整数です。

あるデータ型から他のデータ型へトゥルーカラー イメージを変換する場合は、データの再スケールを行わなくてはなりません。たとえば、以下のステートメントでは、uint8 のトゥルーカラー イメージを double に変換します。

RGB64 = double(RGB8)/255;

または、uint16 イメージについては、以下のようにします。

RGB64 = double(RGB16)/65535;

以下のステートメントでは、double のトゥルーカラー イメージを uint8 に変換します。

RGB8 = uint8(round(RGB64*255));

または、uint16 イメージを取得するには、以下のようにします。

RGB16 = uint16(round(RGB64*65535));

imwrite を使用してトゥルーカラー イメージを書き込むと、必要に応じて値が自動変換されます。

参考

MATLAB 関数

プロパティ

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