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

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

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

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

Image CData

    メモ:   imageimagesc コマンドは、Image オブジェクトを作成します。Image オブジェクトは、Line、Surface、Patch、テキスト オブジェクトと同様、Axes オブジェクトの子オブジェクトです。すべての Handle Graphics® オブジェクトと同様に、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 の値は線形にスケーリングされ、カラーマップ インデックスを形成します。Axes の CLim プロパティは倍率を制御します。関数 imagesc は、CDataMapping プロパティが 'scaled' に設定された Image オブジェクトを生成し、親オブジェクト Axes の 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

たとえば、ステートメント

X = [1 2 3 4; 5 6 7 8; 9 10 11 12];
h = image(X); colormap(colorcube(12))
xlabel x; ylabel y

は、以下の図を生成します。

結果として得られる Image オブジェクトの XData および YData プロパティは、次の既定値をもっています。

get(h,'XData')
ans =

     1     4

get(h,'YData')
ans =

     1     3

しかし、既定の設定をオーバーライドして、ユーザー独自の座標系を指定することができます。たとえば、ステートメント

X = [1 2 3 4; 5 6 7 8; 9 10 11 12];
image(X,'XData',[-1 2],'YData',[2 4]); colormap(colorcube(12))
xlabel x; ylabel y

は、以下の図を生成します。

イメージにテキストを追加する

基本的な配列インデックスを使って、この節で説明するように、既存のイメージにテキスト文字列をラスタライズします。

text を使ってテキスト文字列を描画してから、getframe を使ってそのビットマップ版をキャプチャします。その後で、黒いピクセルを見つけて sub2ind を使ってそれらの添字をインデックスに変換します。これらの添字を使って、テキスト文字列を追加するイメージにテキストを "ペイント" してからそのイメージを保存します。MAT ファイル mandrill.mat のイメージを使った例を示します:

% Create the text in an axis:
t = text(.05,.1,'Mandrill Face', ...
         'FontSize',12, 'FontWeight','demi');

% Capture the text from the screen:
F = getframe(gca,[10 10 200 200]);

% Close the figure:
close

% Select any plane of the resulting RGB image:
c = F.cdata(:,:,1);

% Note: If you have Image Processing Toolbox installed,
% you can convert the RGB data from the frame to black or white:
% c = rgb2ind(F.cdata,2);

% Determine where the text was (black is 0):
[i,j] = find(c == 0);

% Read in or load the image that is to contain the text:
load mandrill

% Use the size of that image, plus the row/column locations
% of the text, to determine locations in the new image:
ind = sub2ind(size(X),i,j);

% Index into new image, replacing pixels with white:
X(ind) = uint8(255);

% Display and color the new image:
imagesc(X)
axis image
colormap(bone)

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

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

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

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

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

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

  • Axes を CData 行列と正確に同じサイズ (ピクセル単位) にします。

    データとスクリーン上のピクセルとの 1 対 1 の対応を維持することにより、内挿の必要性がなくなります。以下に例を示します。

    set(gca,'Units','pixels')
    pos = get(gca,'Position')
    width = pos(3);
    height = pos(4);
    

    CData のサイズが [width height] と正確に同一のとき、配列の各要素は、直接ピクセルと対応します。そうでない場合は、CData 配列の値を内挿しなければならないので、それらの現在のサイズで Axes を近似します。

  • Axes の limit mode プロパティ (XLimModeYLimMode) を manual に設定します。

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

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

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

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

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

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