Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

image オブジェクトとそのプロパティ

Image CData

メモ

imageimagesc コマンドは、image オブジェクトを作成します。image オブジェクトは、line、surface、patch、text オブジェクトと同様、axes オブジェクトの子オブジェクトです。すべてのグラフィックス オブジェクトと同様に、image オブジェクトには、スクリーン上での外観を微調整するためのさまざまなプロパティがあります。image オブジェクトの外観に関する最も重要なプロパティは、CDataCDataMappingXDataYData です。これらのプロパティは、この節と次の節で説明されています。image オブジェクトのすべてのプロパティの詳細については、image コマンドを参照してください。

image オブジェクトの CData プロパティは、データ配列を含んでいます。次のコマンドにおいて、himage で作成した image オブジェクトのハンドルであり、行列 XY は同じです。

h = image(X); colormap(map)
Y = get(h,'CData');

CData 配列の次元によって、カラーマップのカラーによってイメージを表示するか、RGB イメージとして表示するかを制御します。CData 配列が 2 次元の場合、イメージはインデックス付きのイメージか強度イメージのいずれかであり、いずれの場合もイメージはカラーマップのカラーを使って表示されます。一方、CData 配列が m x n x 3 の場合、カラーマップのカラーは無視され、トゥルーカラー イメージとして表示されます。

Image CDataMapping

CDataMapping プロパティは、イメージが indexed であるか、intensity であるかを制御します。インデックス付きイメージを表示するには、CDataMapping プロパティを 'direct' に設定して、CData 配列の値が直接 Figure のカラーマップのインデックスとして使用されるようにします。image コマンドを単一の入力引数で使用すると、CDataMapping の値は 'direct' に設定されます。

h = image(X); colormap(map)
get(h,'CDataMapping')
ans =

direct

強度イメージは、CDataMapping プロパティを 'scaled' に設定することによって表示されます。この場合、CData の値は線形にスケーリングされ、カラーマップ インデックスを形成します。座標軸の CLim プロパティは倍率をコントロールします。関数 imagesc は、image オブジェクトの CDataMapping プロパティを 'scaled' に設定して作成し、親の座標軸の CLim プロパティを調整します。以下に例を示します。

h = imagesc(I,[0 1]); colormap(map)
get(h,'CDataMapping')
ans =

scaled

get(gca,'CLim')
ans =

[0 1]

XData と YData

XData および YData プロパティは、イメージの座標系をコントロールします。mn 列のイメージの場合、既定の XData[1 n] で、既定の YData[1 m] です。これらの設定は、次の意味を含みます。

  • イメージの左側列の x 座標が 1

  • イメージの右側列の x 座標が n

  • イメージの最上行の y 座標が 1

  • イメージの最下行の y 座標が m

イメージの座標系

既定の座標系の使用

既定の座標系を使用して、イメージを表示します。colorcube マップにある色を使用します。

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
im = image(C);
colormap(colorcube)

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

座標系の指定

イメージを表示し、座標系を指定します。colorcube マップにある色を使用します。

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
x = [-1 2];
y = [2 4];
figure
image(x,y,C) 
colormap(colorcube)

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

イメージ データへのテキストの追加

この例では、配列インデックス付けを使用して、テキストを既存のイメージにラスタライズする方法を説明します。

関数 text を使用して、テキストを座標軸に描画します。次に、getframe を使用して画面からテキストをキャプチャし、Figure を閉じます。

fig = figure;
t = text(.05,.1,'Mandrill Face','FontSize',20,'FontWeight','bold');
F = getframe(gca,[10 10 200 200]);
close(fig)

getframe から返された RGB イメージの結果から任意の平面を選択します。黒いピクセル (黒は 0) を検出し、sub2ind を使ってそれらの添字をインデックスに変換します。これらの添字を使用して、mandrill という MAT ファイルに含まれるイメージにテキストを "ペイント" します。そのイメージのサイズおよびテキストの行と列の位置を使用して、新しいイメージ内での位置を決定します。ピクセルを置き換えて、新しいイメージにインデックスを付けます。

c = F.cdata(:,:,1);
[i,j] = find(c==0);
load mandrill
ind = sub2ind(size(X),i,j);
X(ind) = uint8(255);

bone カラーマップを使用して新しいイメージを表示します。

imagesc(X)
colormap bone

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

高速なイメージ更新のための手法

image オブジェクトの CData プロパティを更新する速度を上げるために、CData を最適化し、関連する Figure および座標軸のプロパティを設定します。

  • 可能な限り小さいデータ型を使用します。イメージに対して uint8 データ型を使うと、double データ型よりも高速です。

    イメージの CData プロパティの設定プロセスの部分は、イメージの利用のための行列のコピーを含みます。行列の全体のサイズは、個々の要素のサイズにより異なります。小さい要素 (すなわち小さいデータ型) を使うと、行列サイズが小さくなり、行列のコピーに必要な時間が削減されます。

  • 最小の許容可能な行列を使います。

    イメージの表示速度を最優先する場合、イメージのサイズと質については妥協しなければならないことがあります。サイズを小さくすると、行列のコピーに必要な時間が削減されます。

  • 座標軸の軸範囲モード プロパティ (XLimModeYLimMode) を manual に設定します。

    これらが auto に設定されている場合、 オブジェクト (image、line、patch 等) がデータの何らかの外観を変更するたびに、座標軸は関連するプロパティを再計算する必要があります。たとえば、以下のように指定したとします。

    image(firstimage);
    set(gca, 'xlimmode','manual',...
    'ylimmode','manual',...
    'zlimmode','manual',...
    'climmode','manual',...
    'alimmode','manual');
    

    座標軸はイメージを再描画する前に制限値を再計算しません。

  • 作業の要点がスクリーン上の一連のイメージの表示を簡略化することである場合は、movie オブジェクトの利用を検討してください。

    MATLAB®movie オブジェクトは、MATLAB オブジェクト コードを実行する代わりに基礎となるシステムのグラフィックス リソースを直接利用します。これは上記で説明したとおり、イメージの CData プロパティを繰り返し設定するよりも高速です。