このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ウェーブレット: イメージの処理
この節では、Wavelet Toolbox™ ソフトウェアにおけるイメージの取り扱いに関する追加の情報を提供します。サポートされているイメージのタイプ、MATLAB® 環境における各イメージの表現方法、カラー イメージの解析手法について説明します。
MATLAB 環境におけるイメージについて
基本的な MATLAB のデータ構造は方形 "行列" であり、実数要素または複素数要素の集合が並べられています。このオブジェクトは本来、カラー データや強度データが実数値で順番に並ベられた集合である "イメージ" の表現に適しています(このツールボックスは、複素数値のイメージをサポートしていません)。
("ピクセル (Pixel)" は "画像要素 (picture element)" から派生した言葉で、通常はコンピューター ディスプレイ上の 1 つのドット、またはイメージ行列内の 1 つの要素を表します)。イメージ行列から 1 つのピクセルを選択するには、行列の通常の添字を使用できます。次に例を示します。
I(2,15)
このコードは、イメージ I
の 2 行 15 列目のピクセルの値を返します。既定の設定では、MATLAB はイメージを表示軸全体に広がるようスケーリングします。そのため、1 つのイメージ ピクセルが画面上では複数のピクセルを使用することがあります。
インデックス付きイメージ
標準的なカラー イメージには、カラーマップとイメージ行列という 2 つの行列が必要です。"カラーマップ" とは、イメージに含まれる色を表す値が順番に並べられた集合です。各イメージ ピクセルについて、イメージ行列は対応するカラーマップを指定するインデックスを含んでいます(イメージ行列の要素は浮動小数点整数、すなわち flint です。これらは、MATLAB では倍精度値として保存されます)。
イメージに含まれる色の数が n
の場合、カラーマップ行列のサイズは n
行 3 列となります。カラーマップ行列の各行は、1 行 3 列の赤、緑、青 (RGB) の色ベクトルです。
color = [R G B]
これは、その色を構成する赤、緑、青の強度を指定するものです。R
、G
、B
は、0.0 (黒) から 1.0 (強度最大) までの実数スカラーです。イメージとそのカラーマップを表示するとき、MATLAB はこれらの値を表示強度に変換します。
MATLAB がインデックス付きイメージを表示するとき、イメージ行列に含まれる値を使用して、カラーマップから希望の色を照合します。たとえば、イメージ行列の行列位置 (86,198) に値 18 が格納されている場合、ピクセル (86,198) の色は、カラーマップの行 18 にある色になります。
MATLAB 外では、n
色のインデックス付きイメージは、一般に、0 ~ n–1 の値を含んでいます。これらの値は、0 を先頭のインデックスとする、カラーマップへのインデックスです。MATLAB の行列ではインデックスが 1 から始まるため、ツールボックス関数で操作できるイメージを作成するためには、イメージ内の各値をインクリメントするか、イメージを "上にシフト" させる必要があります。
インデックス付きイメージのウェーブレット分解
"インデックス付きイメージ" は、行列要素が 1 ~ n
の整数のみを含む、スケーリングされた強度イメージと考えることができます。ここで、n
はそのイメージに含まれる別々の階調の数です。
イメージのカラーマップは表示専用のため、ウェーブレット分解で正しい結果を得るためには、一部のインデックス付きイメージに前処理が必要になることがあります。
一般に、カラー インデックス付きイメージは線形の単調カラーマップをもたないため、ウェーブレット分解を実行する前に、適切なグレースケールのインデックス付きイメージに変換する必要があります。
RGB (トゥルーカラー) イメージ
RGB イメージ (トゥルーカラー イメージと呼ばれることもある) は、個々のピクセルについて赤、緑、青の色成分を定義する m x n x 3 のデータ配列として MATLAB に保存されます。RGB イメージは、パレットを使いません。各ピクセルのカラーは、ピクセルの位置での各色平面に格納されている赤、緑、青の強度の組み合わせで決定されます。グラフィックス ファイル形式では、RGB イメージが 24 ビット イメージ (赤、緑、青の成分がそれぞれ 8 ビット) として格納されます。これにより、1600 万色を表す可能性を示しています。
実物のイメージを再現できる精度であるということから、"トゥルーカラー イメージ" とも呼ばれます。RGB の MATLAB 配列のクラスは、double
、single
、uint8
、または uint16
のいずれかになります。クラス double
の RGB 配列では、各色成分は 0 ~ 1 の値です。
8 ビット RGB イメージの色成分は、[0, 1] の範囲の浮動小数点値ではなく、[0, 255] の範囲の整数です。
トゥルーカラー イメージのウェーブレット分解
解析されたトゥルーカラー イメージは、uint8
の m x n x 3 の配列です。3 つの色成分のそれぞれが、2 次元ウェーブレット分解方式を使用して分解される行列です。
イメージの変換
Image Processing Toolbox™ ソフトウェアは、イメージのタイプを簡単に変換する関数の包括的なセットを提供しています。Image Processing Toolbox™ がない場合、この例では、基本的な MATLAB® コマンドを使用して変換を実行する方法を示します。
例 1: カラー インデックス付きイメージの変換
カラー インデックス付きイメージを読み込んで表示します。イメージの右側のカラー バーは平滑ではなく、暗から明へと単調に移行していません。このタイプのインデックス付きイメージは、ツールボックスを使用した直接のウェーブレット分解には適しておらず、前処理が必要です。
load xpmndrll
whos
Name Size Bytes Class Attributes X2 192x200 307200 double map 64x3 1536 double
image(X2)
title("Original Color Indexed Image")
colormap(map)
colorbar
まず、カラー インデックス付きイメージを RGB の各成分に分離します。
R = map(X2,1); R = reshape(R,size(X2)); G = map(X2,2); G = reshape(G,size(X2)); B = map(X2,3); B = reshape(B,size(X2));
3 つの色成分に対する標準的な知覚的重み付けを使用して、RGB の各行列をグレースケール強度イメージに変換します。
Xrgb = 0.2990*R + 0.5870*G + 0.1140*B;
そのグレースケール強度イメージを、64 の異なるレベルをもつグレースケールのインデックス付きイメージに再変換し、64 階調のグレー レベルをもつ新しいカラーマップを作成します。変換後のイメージのカラー バーは線形になり、暗から明へと滑らかに移行するようになりました。
n = 64;
X = round(Xrgb*(n-1))+1;
map2 = gray(n);
figure
image(X)
title("Processed Gray Scale Indexed Image")
colormap(map2)
colorbar
例 2: RGB TIF イメージの変換
RGB TIF イメージを読み込んで表示します。
A = imread("example.tif"); whos A
Name Size Bytes Class Attributes A 650x600x3 1170000 uint8
figure
image(A)
title("Original Image")
colorbar
イメージをデータ型 double
に変換します。次に、3 つの色成分に対する標準的な知覚的重み付けを使用して、RGB の各成分をグレースケール強度イメージに結合します。
Ad = double(A); Argb = 0.2990*Ad(:,:,1) + 0.5870*Ad(:,:,2) + 0.1140*Ad(:,:,3);
関数 wcodemat
を使用して、グレースケール強度イメージを 255 の異なるレベルをもつグレースケール インデックス付きイメージに変換し、255 階調のグレーをもつ新しいカラーマップを作成します。
NbColors = 255;
Aind = wcodemat(Argb,NbColors);
Amap = pink(NbColors);
figure
image(Aind)
colormap(Amap)
title("Processed Image")
colorbar
同じプロセスを使用して、BMP ファイルや JPEG ファイルを変換できます。