メインコンテンツ

drawcrosshair

カスタマイズ可能な十字 ROI の作成

説明

関数 drawcrosshair は、十字の関心領域 (ROI) の位置を指定する Crosshair オブジェクトを作成します。ROI は、マウスを使ってイメージの上に ROI を描画することで対話形式で作成することも、名前と値の引数を使用してプログラムで作成することもできます。ROI の初期状態の外観と動作を指定することもできます。

A horizontal line and a vertical line intersect to form a crosshair.

ROI を作成した後に、オブジェクト プロパティ、オブジェクト関数、およびイベント通知を使用して、その ROI の形状、位置、外観、および動作をカスタマイズできます。これらの機能の使用方法の詳細については、ヒントを参照してください。

roi = drawcrosshairCrosshair オブジェクトを作成し、現在の座標軸で対話形式による ROI の描画を有効にします。十字 ROI は、座標軸の幅全体と高さ全体に対応する、垂直な 2 つのラインで構成されます。

この ROI を描画するには、カーソルを座標軸上に移動してクリックします。キーボード ショートカットやコンテキスト メニュー オプションを含む ROI の使用方法の詳細については、ヒントを参照してください。

roi = drawcrosshair(ax) は、ax で指定される座標軸で対話形式による ROI の配置を開始します。

roi = drawcrosshair(___,Name=Value) は、1 つ以上の名前と値の引数を使用して ROI の外観や動作をカスタマイズします。

すべて折りたたむ

この例では、対話形式およびプログラミングにより十字 ROI を作成する方法を示します。

対話形式による十字 ROI の作成

イメージをワークスペースに読み取って表示します。

figure
imshow("pears.png")

関数 drawcrosshair を対話的に使用してイメージ上に十字 ROI を作成します。イメージの任意の位置にカーソルを移動してクリックし、ROI を描画します。ROI の中心 (水平線が垂直線と交差する点) をクリックして、イメージ上に ROI を描画します。

h1 = drawcrosshair;

Figure contains an axes object. The axes object contains 2 objects of type image, images.roi.crosshair.

プログラムによる十字 ROI の作成

イメージをワークスペースに読み取って表示します。

figure
imshow("strawberries.jpg")

関数 drawcrosshair を使用してイメージ上に十字 ROI を作成します。名前と値の引数 Position を使用して、ROI の初期位置を指定します。

h2 = drawcrosshair(Position=[100 100]);

Figure contains an axes object. The axes object contains 2 objects of type image, images.roi.crosshair.

プロパティを使用した十字 ROI の外観の変更

関数 drawcrosshair を使用して Crosshair オブジェクトを作成した後、オブジェクトのプロパティを設定して ROI の外観を変更できます。

StripeColor プロパティを設定すると、ストライプの色が緑で表示されます。

h2.StripeColor = "green";

Figure contains an axes object. The axes object contains 2 objects of type image, images.roi.crosshair.

イメージをワークスペースに読み取って表示します。

img = imread('coins.png');
hAx = gca;
imObj = imshow(img,'Parent',hAx);
imObj.Parent.Visible = 'on';

十字 ROI を作成します。

h = drawcrosshair('Parent',hAx,'Position',[50 50],'LineWidth',1,'Color','y');

オブジェクト関数 addlistener を使用して、ROI が移動したときに通知を受け取ります。イベントの発生時に実行するコールバック関数を指定します。十字 ROI を移動すると、次のコードはタイトルに十字の位置を表示し、その位置のピクセル値を ROI ラベルに表示します。

addlistener(h,'MovingROI',@(src,data)displayInfo(src,data,hAx,img));

これは、十字 ROI で指定されたピクセルの値を表示するコールバック関数です。

function displayInfo(src,data,hAx,img)
pos = ceil(data.CurrentPosition);
pixval = img(pos(2),pos(1));
src.Label = mat2str(pixval);
title(mat2str(pos));
end

入力引数

すべて折りたたむ

ROI の親。Axes オブジェクトまたは UIAxes オブジェクトとして指定します。重要な制限など UI 座標軸で ROI を使用する方法の詳細については、App Designer を使って作成したアプリでの ROI の使用を参照してください。

名前と値の引数

すべて展開する

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: roi = drawcrosshair(Color="y") は、黄色の Crosshair オブジェクトを作成します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: roi = drawcrosshair("Color","y") は、黄色の Crosshair オブジェクトを作成します。

形状と位置

すべて展開する

ROI の位置。[x y] の形式の 1 行 2 列の数値ベクトルとして指定します。値 xy は、十字 ROI の水平線が垂直線と交差する位置の座標を指定します。

色とスタイル

すべて展開する

ROI の色。RGB 3 成分、色の名前、または色の省略名として指定します。

RGB 3 成分を使用すると、任意の色を指定できます。RGB 3 成分は、色の赤、緑、青の成分の強度を指定する 3 つの要素から成る行ベクトルです。強度は [0, 1] の範囲でなければなりません。

いくつかの一般的な色については、色の名前を string スカラーまたは文字ベクトルとして指定できます。次の表に、名前付きの色のオプション、およびそれと等価な RGB 3 成分を示します。

色名省略名RGB 3 成分外観
"red""r"[1 0 0]

Sample of the color red

"green""g"[0 1 0]

Sample of the color green

"blue""b"[0 0 1]

Sample of the color blue

"cyan" "c"[0 1 1]

Sample of the color cyan

"magenta""m"[1 0 1]

Sample of the color magenta

"yellow""y"[1 1 0]

Sample of the color yellow

"black""k"[0 0 0]

Sample of the color black

"white""w"[1 1 1]

Sample of the color white

次の表に、ライト テーマとダーク テーマにおけるプロットの既定のカラー パレットを示します。

パレットパレット カラー

"gem" — ライト テーマの既定

R2025a より前: ほとんどのプロットでは既定でこれらの色が使用されます。

Sample of the "gem" color palette

"glow" — ダーク テーマの既定

Sample of the "glow" color palette

orderedcolors 関数を使用して、これらのパレットの RGB 3 成分を取得できます (R2023b 以降)。たとえば、"gem" パレットの RGB 3 成分を取得します。

RGB = orderedcolors("gem");

例: Color="r"

例: Color="green"

例: Color=[0 0.4470 0.7410]

ROI の境界線の幅。ポイント単位の正の数値として指定します。既定値はスクリーン ピクセルに対する点の数の 3 倍です。つまり、既定では境界線の幅は 3 ピクセルになります。

選択したときの ROI の色。RGB 3 成分、色の名前、色の省略名、または "none" として指定します。"none" を指定した場合、Color の値はすべての状態 (選択または未選択) の ROI の色を定義します。

RGB 3 成分を使用すると、任意の色を指定できます。RGB 3 成分は、色の赤、緑、青の成分の強度を指定する 3 つの要素から成る行ベクトルです。強度は [0, 1] の範囲でなければなりません。

いくつかの一般的な色については、色の名前を string スカラーまたは文字ベクトルとして指定できます。次の表に、名前付きの色のオプション、およびそれと等価な RGB 3 成分を示します。

色名省略名RGB 3 成分外観
"red""r"[1 0 0]

Sample of the color red

"green""g"[0 1 0]

Sample of the color green

"blue""b"[0 0 1]

Sample of the color blue

"cyan" "c"[0 1 1]

Sample of the color cyan

"magenta""m"[1 0 1]

Sample of the color magenta

"yellow""y"[1 1 0]

Sample of the color yellow

"black""k"[0 0 0]

Sample of the color black

"white""w"[1 1 1]

Sample of the color white

次の表に、ライト テーマとダーク テーマにおけるプロットの既定のカラー パレットを示します。

パレットパレット カラー

"gem" — ライト テーマの既定

R2025a より前: ほとんどのプロットでは既定でこれらの色が使用されます。

Sample of the "gem" color palette

"glow" — ダーク テーマの既定

Sample of the "glow" color palette

orderedcolors 関数を使用して、これらのパレットの RGB 3 成分を取得できます (R2023b 以降)。たとえば、"gem" パレットの RGB 3 成分を取得します。

RGB = orderedcolors("gem");

例: SelectedColor="r"

例: SelectedColor="green"

例: SelectedColor=[0 0.4470 0.7410]

ROI ストライプの色。RGB 3 成分、色の名前、色の省略名、または "none" として指定します。"none" を指定した場合、ROI のエッジは Color で指定された単色になります。そうでない場合、ROI のエッジはストライプ状になります。このとき、Color および StripeColor で指定された色が交互に現れます。

RGB 3 成分を使用すると、任意の色を指定できます。RGB 3 成分は、色の赤、緑、青の成分の強度を指定する 3 つの要素から成る行ベクトルです。強度は [0, 1] の範囲でなければなりません。

いくつかの一般的な色については、色の名前を string スカラーまたは文字ベクトルとして指定できます。次の表に、名前付きの色のオプション、およびそれと等価な RGB 3 成分を示します。

色名省略名RGB 3 成分外観
"red""r"[1 0 0]

Sample of the color red

"green""g"[0 1 0]

Sample of the color green

"blue""b"[0 0 1]

Sample of the color blue

"cyan" "c"[0 1 1]

Sample of the color cyan

"magenta""m"[1 0 1]

Sample of the color magenta

"yellow""y"[1 1 0]

Sample of the color yellow

"black""k"[0 0 0]

Sample of the color black

"white""w"[1 1 1]

Sample of the color white

次の表に、ライト テーマとダーク テーマにおけるプロットの既定のカラー パレットを示します。

パレットパレット カラー

"gem" — ライト テーマの既定

R2025a より前: ほとんどのプロットでは既定でこれらの色が使用されます。

Sample of the "gem" color palette

"glow" — ダーク テーマの既定

Sample of the "glow" color palette

orderedcolors 関数を使用して、これらのパレットの RGB 3 成分を取得できます (R2023b 以降)。たとえば、"gem" パレットの RGB 3 成分を取得します。

RGB = orderedcolors("gem");

例: StripeColor="r"

例: StripeColor="green"

例: StripeColor=[0 0.4470 0.7410]

ROI の可視性。"on""off"、または数値か logical の 0 (false) か 1 (true) として指定します"on" の値は true と等価であり、"off"false と等価です。この値は、OnOffSwitchState 型の on/off の logical 値として格納されます。

説明
"on"ROI を表示します。
"off"ROI を削除せずに非表示にします。ただし、非表示の ROI のプロパティにアクセスすることはできます。

ラベル

すべて展開する

ROI ラベル。文字ベクトルまたは string スカラーとして指定します。既定では、ROI にラベルはありません ('')。

テキストの背景の透明度。[0, 1] の範囲の数値として指定します。1 に設定すると、テキストの背景は完全に不透明になります。0 に設定すると、テキストの背景は完全に透明になります。

ラベル テキストの色。RGB 3 成分、色の名前、または色の省略名として指定します。

RGB 3 成分を使用すると、任意の色を指定できます。RGB 3 成分は、色の赤、緑、青の成分の強度を指定する 3 つの要素から成る行ベクトルです。強度は [0, 1] の範囲でなければなりません。

いくつかの一般的な色については、色の名前を string スカラーまたは文字ベクトルとして指定できます。次の表に、名前付きの色のオプション、およびそれと等価な RGB 3 成分を示します。

色名省略名RGB 3 成分外観
"red""r"[1 0 0]

Sample of the color red

"green""g"[0 1 0]

Sample of the color green

"blue""b"[0 0 1]

Sample of the color blue

"cyan" "c"[0 1 1]

Sample of the color cyan

"magenta""m"[1 0 1]

Sample of the color magenta

"yellow""y"[1 1 0]

Sample of the color yellow

"black""k"[0 0 0]

Sample of the color black

"white""w"[1 1 1]

Sample of the color white

次の表に、ライト テーマとダーク テーマにおけるプロットの既定のカラー パレットを示します。

パレットパレット カラー

"gem" — ライト テーマの既定

R2025a より前: ほとんどのプロットでは既定でこれらの色が使用されます。

Sample of the "gem" color palette

"glow" — ダーク テーマの既定

Sample of the "glow" color palette

orderedcolors 関数を使用して、これらのパレットの RGB 3 成分を取得できます (R2023b 以降)。たとえば、"gem" パレットの RGB 3 成分を取得します。

RGB = orderedcolors("gem");

例: LabelTextColor="r"

例: LabelTextColor="green"

例: LabelTextColor=[0 0.4470 0.7410]

ラベルの可視性。次のいずれかの値として指定します。

説明
"on"ROI が表示されている場合、ラベルは表示されます。
"hover"マウスのカーソルを ROI 上に置いている場合のみ、ラベルは表示されます。
"off"ラベルは表示されません。

対話性

すべて展開する

ROI を右クリックしたときに表示されるコンテキスト メニュー。ContextMenu オブジェクトとして指定します。関数 uicontextmenu を使用してコンテキスト メニュー プロパティを設定することによって、カスタム コンテキスト メニューを作成できます。

ROI を削除するオプションをコンテキスト メニューに表示するかどうか。数値または logical の 1 (true) か 0 (false) として指定します。値が true の場合、コンテキスト メニューを使用して ROI を対話形式で削除できます。値が false の場合、ROI を削除するコンテキスト メニュー オプションは無効になります。

どちらの場合も、コンテキスト メニューではなく関数 delete を使用して ROI を削除できます。

ROI を対話形式で配置できる座標軸の領域。次の表のいずれかの値で指定します。

説明
"auto"描画領域は現在の座標軸の範囲です (既定の設定)。
"unlimited"描画領域には境界がなく、座標軸の範囲を超えて ROI を描画したりドラッグしたりできます。
[x,y,w,h]描画領域は、(x,y) を基準として幅 w と高さ h まで広がる四角形の領域に制限されます。

ROI の対話性。次の表のいずれかの値で指定します。

説明
"all"ROI は完全に対話形式で操作できます。
"none"ROI は対話形式で操作できず、ドラッグ ポイントが表示されません。

ROI の選択状態。"off""on"、または数値か logical の 0 (false) か 1 (true) として指定します"off" の値は false と等価であり、"on"true と等価です。

親/子

すべて展開する

親の Children プロパティでの ROI ハンドルの可視性。次の表のいずれかの値として指定します。

説明
"on"オブジェクト ハンドルは常に参照できます (既定の設定)。
"off"オブジェクト ハンドルは常に参照できません。
"callback" オブジェクト ハンドルはコールバックまたはコールバックによって呼び出された関数内から参照できますが、コマンド ラインから呼び出された関数内からは参照できません。

ROI の親。Axes または UIAxes オブジェクトとして指定します。重要な制限など UI 座標軸で ROI を使用する方法の詳細については、App Designer を使って作成したアプリでの ROI の使用を参照してください。

識別子

すべて展開する

ROI に関連付けるタグ。文字ベクトルまたは string スカラーとして指定します。関数 findobj を使用してオブジェクトの階層内の ROI オブジェクトを見つけるには、このタグ値を使用します。

ROI に関連付けるデータ。任意の MATLAB データとして指定します。たとえば、スカラー、ベクトル、行列、cell 配列、string、文字配列、table、または構造体を指定できます。drawcrosshair オブジェクトはこのデータを使用しません。

出力引数

すべて折りたたむ

十字 ROI。Crosshair オブジェクトとして返されます。

ヒント

  • 次の表に、十字 ROI を使用した一般的なタスクの実行方法を示します。

    タスク説明
    描画操作をキャンセルする。ROI の描画を開始し、マウスを離す前に Esc キーを押します。関数は Position プロパティが空の有効な ROI オブジェクトを返します。
    ROI を移動する。ROI 上にポインターを配置します。ポインターが花形に変わります。クリック アンド ドラッグして ROI を移動します。
    ROI を削除する。ROI 上にポインターを配置し、右クリックしてそのコンテキスト メニューを表示します。メニューから [十字形の削除] を選択します。関数 delete を使用して ROI を削除することもできます。
  • 関数 drawcrosshair は、Crosshair オブジェクトを作成します。オブジェクトを作成した後に、これらのオブジェクト機能を使用して ROI の位置、外観、および動作を変更できます。

    Capabilityサポート
    オブジェクト プロパティ

    ROI オブジェクトには、ROI の形状、位置、外観、および動作を指定するプロパティが用意されています。ROI オブジェクトを作成した後に、ドット表記を使用してプロパティを変更します。

    たとえば、roi の色を黄色に変更するには、その Color プロパティを設定します。

    roi.Color = 'yellow'

    オブジェクト関数ROI オブジェクトには、ROI を操作するオブジェクト関数が用意されています。たとえば、ROI の作成後、MATLAB コマンド ラインを一時停止する場合は、関数 wait を使用します。
    イベント通知

    ROI オブジェクトは、ROI に対してクリックや移動などの特定のイベントが発生したときに、そのイベントをコードに通知することができます。イベント通知を受け取るには、"リスナー" を設定します。ROI がリスナーを通じてアプリケーションに通知するとき、イベントに固有のデータを返します。たとえば、ROIMoved イベントの場合、ROI オブジェクトはその以前の位置と現在の位置を返します。イベントが発生したときに実行されるコールバック関数を指定できます。

    イベント リスナーを Crosshair オブジェクトと共に使用する例については、十字 ROI で指定されたピクセルの値の表示を参照してください。

バージョン履歴

R2019b で導入

すべて展開する