メインコンテンツ

MATLAB でのイメージ タイプの処理

MATLAB® では、イメージが配列 (多くの場合、2 次元行列) として表現され、この配列の各要素は表示されるイメージの 1 ピクセルに対応します。MATLAB でのイメージの処理は、他の型の行列データと同様に行われ、2 次元データをイメージとして表示できます。イメージを表示するには 2 つの一般的な方法があります。

イメージ タイプ

一般的なイメージ タイプには、インデックス付き、グレースケール (強度)、RGB (トゥルーカラー) の 3 つがあり、配列の次元はさまざまです。次の表にイメージ タイプの概要を示します。

イメージ タイプデータ行列カラーマップ行列
インデックス付きイメージ"m""n""p" 行 3 列

インデックス付きイメージの読み取りと表示

Three cobs of corn displayed with color.

グレースケール (強度) イメージ"m""n"既定ではなしですが、カラーマップを適用できます。

グレースケール イメージの読み取りと表示

Three cobs of corn displayed in gray.

RGB (トゥルーカラー) イメージ"m"×"n"×3なし

RGB イメージの読み取りと表示

Image of the earth.

イメージ ファイルを処理する場合は、関数 imfinfo を使用してイメージ タイプをチェックできます。たとえば、peppers.png のイメージ タイプを判別します。

info = imfinfo("peppers.png");
info.ColorType
ans = 'truecolor'

イメージ ファイルの読み取りと表示

イメージの処理では、多くの場合、イメージ データを MATLAB ワークスペースに読み込んでイメージを表示し、イメージ データを操作します。ただし、イメージの処理プロセスはイメージ タイプによって異なります。

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

インデックス付きイメージは、イメージ データ行列 X とカラーマップ行列 map として保存されます。map の各行は、単一色を構成する赤、緑、青の成分を指定するものです。インデックス付きイメージは、ピクセル値をカラーマップ値に "直接マッピング" したものを使います。各イメージ ピクセルの色は、対応する X の値をカラーマップに格納されているカラー値へのインデックス (ポインター) として用いることで決定されます。X"m""n" 列の行列で、値 1 は map の 1 番目の行、値 2 は 2 番目の行というように、値を示す整数で構成されます。

たとえば、次のトウモロコシのインデックス付きイメージでは、データ行列の値 2 はカラーマップの 2 行目のインデックスであり、データ行列の値 15 はカラーマップの 15 行目のインデックスです。

Image of three ears of corn and its data matrix and colormap. The data matrix contains integer values that map into the colormap, which contains red, green, and blue values for pixel colors.

インデックス付きイメージの読み取りと表示

インデックス付きイメージは imread を使用して読み込み、出力引数としてデータ行列 X とカラーマップ map の両方を指定します。その後、カラーマップを使用してデータ行列を表示します。

[X,map] = imread("corn.png");
imshow(X,map)

Figure contains an axes object. The hidden axes object contains an object of type image.

map はイメージ ファイルに関連付けられたカラーマップを格納します。ただし、関数 imshow を使用して任意のカラーマップを指定できます。たとえば、map をグレースケール カラーマップに変換してイメージ データを新しいカラーマップで表示します。

newmap = cmap2gray(map);
imshow(X,newmap)

Figure contains an axes object. The hidden axes object contains an object of type image.

行列の添字付けを使って、イメージ データ行列から単一ピクセルを選択できます。イメージ データ行列のサイズはイメージのピクセル数に対応します。たとえば、X は 415 行 312 列のピクセルからなるイメージを表現します。

sz = size(X)
sz = 1×2

   415   312

X の 2 行 15 列目のピクセルのカラーマップ インデックスを取得します。

val = X(2,15)
val = uint8

39

map にインデックスを付けて、このピクセルの赤、緑、青の強度に対応する 3 つの値を表示します。

color = map(val,:)
color = 1×3

    0.4588    0.2902    0.2627

グレースケール (強度) イメージ

グレースケール イメージは "強度" イメージと呼ばれることもあり、"m""n" 列のデータ行列 X として保存され、その値は何らかの範囲内の強度を表します。グレースケール イメージは単一の行列として表され、その行列の各要素が 1 つのイメージ ピクセルに対応します。グレースケール イメージがカラーマップと共に保存されることはまれですが、グレースケール イメージの表示にグレースケール カラーマップが使われることはあります。基本的に、グレースケール イメージはインデックス付きイメージとして取り扱われます。

たとえば、次のトウモロコシのグレースケール イメージでは、データ行列に各ピクセルの強度を表す範囲 [0, 255] の整数が含まれています。

Grayscale image of three ears of corn and its data matrix. The data matrix contains integer values that represent the color intensities for the corresponding image pixels.

グレースケール イメージの読み取りと表示

グレースケール イメージをワークスペースに読み込んで表示します。

X = imread("corn_gray.png");
imshow(X)

Figure contains an axes object. The hidden axes object contains an object of type image.

別のカラーマップを使用してグレースケール イメージを表示できます。たとえば、winter カラーマップを使用して、グレースケール イメージを青と緑の色調で表示します。

imshow(X,winter)

Figure contains an axes object. The hidden axes object contains an object of type image.

行列の添字付けを使って、イメージのピクセル強度にアクセスできます。たとえば、X の 2 行 15 列目のピクセルのグレースケール強度値を取得します。

val = X(2,15)
val = uint8

156

RGB (トゥルーカラー) イメージ

RGB イメージは、しばしばトゥルーカラー イメージと言われ、各ピクセルの赤、緑、青成分を定義する m×n×3 のデータ配列として保存されます。グラフィックス ファイル形式では、RGB イメージが 24 ビット イメージ (赤、緑、青の成分がそれぞれ 8 ビット) として保存されます。この配置により、1600 万色を表す可能性を示しています。実物のイメージを表現できる精度であるということから、“トゥルーカラー イメージ” という用語が使用されています。

RGB イメージは、カラーマップを使いません。各ピクセルのカラーは、ピクセルの位置での各色平面に格納されている赤、緑、青の強度の組み合わせで決定されます。たとえば、RGB イメージ X におけるピクセル (10, 5) の赤、緑、青の色成分は、それぞれ、X(10,5,1)X(10,5,2)X(10,5,3) に保存されます。

Image of Earth and its 3-D data array. The data array contains red, green, and blue intensity values for the corresponding image pixels.

RGB イメージの読み取りと表示

RGB イメージを読み込みます。RGB イメージ データは、各ピクセルが赤、緑、および青の強度値で表される "m"×"n"×3 の配列として保存されるため、イメージ データ X にはカラー データが含まれています。次に、イメージを表示します。

X = imread("earth.jpg");
imshow(X)

Figure contains an axes object. The hidden axes object contains an object of type image.

RGB イメージのデータ配列を使用すると、イメージのサイズと色に簡単にアクセスできます。イメージ データ配列のサイズはイメージのピクセル数に対応します。たとえば、X は 257 行 250 列のピクセルからなるイメージを表現します。

size(X)
ans = 1×3

   257   250     3

ピクセルの色を決定するには、データ配列の 3 番目の次元に格納されている RGB 3 成分を調べてください。たとえば、X の 50 行 150 列目のピクセルの色を取得します。要素は、それぞれ赤、緑、青の順でピクセルの色の強度を 0 ~ 255 の範囲で表します。

color = X(50,150,1:3)
color = 1×1×3 uint8 array
color(:,:,1) =

   119


color(:,:,2) =

   102


color(:,:,3) =

   110

イメージとしての配列データの表示

配列データの処理では、データ値の相対的な強度などの複雑なパターンを理解し解析するために、そのデータをイメージとして表示できます。関数 image および imagesc を使用して、ワークスペースにある 2 次元行列のデータをイメージとして表示し、それにカラーマップを適用できます。

たとえば、2 次元行列を作成します。次に、それをイメージとして表示します。

X = 4*peaks(100);
image(X)

Figure contains an axes object. The axes object contains an object of type image.

データ値の差をさらにわかりやすく可視化するには、関数 imagesc を使用してカラーマップを指定することによって、イメージ データの表示方法をカスタマイズします。イメージをカラー バーと共に表示すると、さまざまな強度に応じて適用されたカラーマップに対して、イメージ データがどのようにマッピングされているかを確認できます。

imagesc(X);
colormap(turbo)
colorbar

座標軸の範囲のスタイルを "equal" に設定して、MATLAB でイメージの縦横比が保持され、ピクセルが正方形で表示されるようにします。さらに、座標軸の範囲を設定します。

axis equal
xlim([0 100])
ylim([0 100])

Figure contains an axes object. The axes object contains an object of type image.

参考

関数

プロパティ

トピック