Main Content

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

フリーハンド

フリーハンドの関心領域

説明

Freehand オブジェクトは、手描きの関心領域 (ROI) の形状と位置を指定します。この ROI に対し、外観や対話型動作をカスタマイズできます。

キーボード ショートカットを含むフリーハンド ROI の使用方法の詳細については、ヒントを参照してください。

Freehand ROI tracing the edge of an object in an image.

作成

Freehand オブジェクトは次の 2 つの方法で作成できます。詳細については、ROI の形状の作成を参照してください。

  • 関数 drawfreehand を使用。ROI の作成と外観の設定を 1 つのコマンドで行う場合、この関数を使用します。ROI の形状と位置は、マウスを使ってイメージの上に ROI を描画することで対話形式で指定できます。

  • ここで説明する関数 images.roi.Freehand を使用。ROI の形状や位置を指定する前に ROI の外観や動作を指定する場合、この関数を使用します。形状と位置は、オブジェクトを作成した後に、関数 draw を使用して対話形式で指定できます。

説明

roi = images.roi.Freehand は、既定のプロパティを使用して Freehand オブジェクトを作成します。

roi = images.roi.Freehand(ax) は、ax で指定される座標軸に ROI を作成します。

roi = images.roi.Freehand(___,Name,Value) は、名前と値の引数を使用して ROI のプロパティを設定します。複数の名前と値の引数を指定できます。

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

入力引数

すべて展開する

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

プロパティ

すべて展開する

ROI を閉じる。数値または logical の 1 (true) か 0 (false) として指定します。true の場合、フリーハンド オブジェクトは、描画された最後の点を描画された最初の点と結ぶことによって ROI を閉じます。

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

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

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

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

A rectangle colored pure red

"green""g"[0 1 0]

A rectangle colored pure green

"blue""b"[0 0 1]

A rectangle colored pure blue

"cyan" "c"[0 1 1]

A rectangle colored pure cyan

"magenta""m"[1 0 1]

A rectangle colored pure magenta

"yellow""y"[1 1 0]

A rectangle colored pure yellow

"black""k"[0 0 0]

A rectangle colored black

"white""w"[1 1 1]

A rectangle colored white

以下に、MATLAB® がさまざまなタイプのプロットで使用する既定の色の RGB 3 成分を示します。

RGB 3 成分外観
[0 0.4470 0.7410]

A rectangle colored medium blue

[0.8500 0.3250 0.0980]

A rectangle colored reddish-orange

[0.9290 0.6940 0.1250]

A rectangle colored dark yellow

[0.4940 0.1840 0.5560]

A rectangle colored dark purple

[0.4660 0.6740 0.1880]

A rectangle colored light green

[0.3010 0.7450 0.9330]

A rectangle colored light blue

[0.6350 0.0780 0.1840]

A rectangle colored dark red

例: "Color","r"

例: "Color","green"

例: "Color",[0 0.4470 0.7410]

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 面の透明度。[0, 1] の範囲の数値として指定します。値が 1 の場合、ROI 面は完全に不透明になります。値が 0 の場合、ROI 面は完全に透明になります。

ROI 面でクリックをキャプチャ可能。数値または logical の 1 (true) か 0 (false) として指定します。true の場合、ROI 面でマウス クリックをキャプチャします。false (既定の設定) の場合、ROI 面でマウス クリックをキャプチャしません。

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

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

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

説明
"all"ROI は完全に対話形式で操作できます (既定の設定)。
"none"ROI は対話形式で操作できず、ドラッグ ポイントが表示されません。
"translate"ROI は描画領域内で平行移動できますが、形状の変更はできません。
"reshape"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]

A rectangle colored pure red

"green""g"[0 1 0]

A rectangle colored pure green

"blue""b"[0 0 1]

A rectangle colored pure blue

"cyan" "c"[0 1 1]

A rectangle colored pure cyan

"magenta""m"[1 0 1]

A rectangle colored pure magenta

"yellow""y"[1 1 0]

A rectangle colored pure yellow

"black""k"[0 0 0]

A rectangle colored black

"white""w"[1 1 1]

A rectangle colored white

以下に、MATLAB がさまざまなタイプのプロットで使用する既定の色の RGB 3 成分を示します。

RGB 3 成分外観
[0 0.4470 0.7410]

A rectangle colored medium blue

[0.8500 0.3250 0.0980]

A rectangle colored reddish-orange

[0.9290 0.6940 0.1250]

A rectangle colored dark yellow

[0.4940 0.1840 0.5560]

A rectangle colored dark purple

[0.4660 0.6740 0.1880]

A rectangle colored light green

[0.3010 0.7450 0.9330]

A rectangle colored light blue

[0.6350 0.0780 0.1840]

A rectangle colored dark red

例: "LabelTextColor","r"

例: "LabelTextColor","green"

例: "LabelTextColor",[0 0.4470 0.7410]

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

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

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

マーカー サイズ。ポイント単位の正の数値として指定します。既定値はスクリーン ピクセルに対する点の数の 8 倍です。つまり、既定ではマーカー サイズは 8 ピクセルになります。

対話型の配置中のフリーハンド描画スタイルの制御。数値または logical の 0 (false) か 1 (true) として指定します。値が false の場合、クリック アンド ドラッグのジェスチャ 1 回でフリーハンド ROI が完成します。値が true の場合、複数回のクリック アンド ドラッグのジェスチャと直線のエッジと組み合わせて、より複雑なフリーハンド ROI の形状を作成することができます。

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

ROI の位置。n 行 2 列の数値行列として指定します。ここで、n は ROI を定義する頂点または点の数です。各行は、頂点または点の [x y] 座標を表します。ROI の形状の対話形式による描画中に、フリーハンド オブジェクトがこれらの点を生成します。より少ない点を扱うには、関数 reduce を使用します。

ROI の選択状態。数値または logical の 0 (false) か 1 (true) として指定します。このプロパティは対話形式で設定することもできます。たとえば、ROI をクリックすると、その ROI が選択され、このプロパティが true に設定されます。同様に、Ctrl キーを押したまま ROI をクリックすると、ROI は選択解除され、このプロパティの値が false に設定されます。

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

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

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

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

A rectangle colored pure red

"green""g"[0 1 0]

A rectangle colored pure green

"blue""b"[0 0 1]

A rectangle colored pure blue

"cyan" "c"[0 1 1]

A rectangle colored pure cyan

"magenta""m"[1 0 1]

A rectangle colored pure magenta

"yellow""y"[1 1 0]

A rectangle colored pure yellow

"black""k"[0 0 0]

A rectangle colored black

"white""w"[1 1 1]

A rectangle colored white

以下に、MATLAB がさまざまなタイプのプロットで使用する既定の色の RGB 3 成分を示します。

RGB 3 成分外観
[0 0.4470 0.7410]

A rectangle colored medium blue

[0.8500 0.3250 0.0980]

A rectangle colored reddish-orange

[0.9290 0.6940 0.1250]

A rectangle colored dark yellow

[0.4940 0.1840 0.5560]

A rectangle colored dark purple

[0.4660 0.6740 0.1880]

A rectangle colored light green

[0.3010 0.7450 0.9330]

A rectangle colored light blue

[0.6350 0.0780 0.1840]

A rectangle colored dark red

例: "SelectedColor","r"

例: "SelectedColor","green"

例: "SelectedColor",[0 0.4470 0.7410]

対話形式で配置した後の ROI のエッジに適用される平滑化。非負のスカラーとして指定します。フリーハンド オブジェクトは、既定の標準偏差 1 のガウス平滑化カーネルを使用して、ROI の x 座標と y 座標をフィルター処理します。ガウス フィルターのサイズは 2*ceil(2*Smoothing)+1 です。

描画を完了した後にのみ平滑化効果を確認できます。描画の完了後に Smoothing の値を変更しても ROI に影響を与えません。

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]

A rectangle colored pure red

"green""g"[0 1 0]

A rectangle colored pure green

"blue""b"[0 0 1]

A rectangle colored pure blue

"cyan" "c"[0 1 1]

A rectangle colored pure cyan

"magenta""m"[1 0 1]

A rectangle colored pure magenta

"yellow""y"[1 1 0]

A rectangle colored pure yellow

"black""k"[0 0 0]

A rectangle colored black

"white""w"[1 1 1]

A rectangle colored white

以下に、MATLAB がさまざまなタイプのプロットで使用する既定の色の RGB 3 成分を示します。

RGB 3 成分外観
[0 0.4470 0.7410]

A rectangle colored medium blue

[0.8500 0.3250 0.0980]

A rectangle colored reddish-orange

[0.9290 0.6940 0.1250]

A rectangle colored dark yellow

[0.4940 0.1840 0.5560]

A rectangle colored dark purple

[0.4660 0.6740 0.1880]

A rectangle colored light green

[0.3010 0.7450 0.9330]

A rectangle colored light blue

[0.6350 0.0780 0.1840]

A rectangle colored dark red

例: "StripeColor","r"

例: "StripeColor","green"

例: "StripeColor",[0 0.4470 0.7410]

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

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

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

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

位置の点をウェイポイントとするかどうか。Position プロパティと同じ長さの logical ベクトルとして指定します。値が true である Waypoints の要素は、Position 行列の対応する点がウェイポイントであることを表しています。既定では、フリーハンド オブジェクトは、ROI を定義するすべての点を生成し、曲率が増加する位置にある点のみをウェイポイントにします。roi.Waypoints(1:4:end) = true; のようなコードを使用すると、すべての点または点のサブセットをウェイポイントにすることができます。

ウェイポイントは ROI エッジ上に円として表示されます。マウスでウェイポイントをクリック アンド ドラッグすることにより、ウェイポイントを使用して ROI の形状を変更できます。ウェイポイントを移動すると、クリックしたウェイポイントと隣接するウェイポイントの間のフリーハンドで描画した領域が変更されます。

オブジェクト関数

addlistenerイベント ソースにバインドされたイベント リスナーの作成
beginDrawingFromPoint指定された点からの ROI の描画の開始
bringToFrontAxes のスタックの順番の最前面への ROI の移動
createMaskROI からのバイナリ マスク イメージの作成
draw対話形式による ROI の描画の開始
inROI点が ROI 内にあるかどうかのクエリ
reduceROI の点の密度の削減
waitROI の操作が完了するまで MATLAB コマンド ラインをブロック

すべて折りたたむ

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

I = imread('baby.jpg');
figure
imshow(I)

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

Position プロパティを使用して ROI の頂点を指定し、イメージ上にフリーハンド ROI を作成します。プログラムによって ROI を作成する場合、特定の座標軸に ROI を描画するには、座標軸を入力引数として指定しなければなりません。そうでない場合、images.roi.Freehand クラスのインスタンスは作成されますが表示されません。この例では、現在の座標軸 (gca) を指定して、その座標軸にあるイメージに ROI を描画します。

h = images.roi.Freehand(gca,'Position',[100 150;200 250;300 350;150 450]);

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

イメージをワークスペースに読み取ります。

I = imread('cameraman.tif');

イメージを表示します。

imshow(I);

イメージ上にフリーハンド ROI を描画します。この例では、ROI のサイズと位置を指定するので、draw メソッドを呼び出して対話形式による描画を有効にする必要はありません。

roi = images.roi.Freehand(gca,'Position',[10 15;100 50;100 150;15 145]);

ROI 移動イベントのリスナーを設定します。移動すると、ROI は、それらのイベントの通知を送信し、指定されたコールバック関数を実行します。

addlistener(roi,'MovingROI',@allevents);
addlistener(roi,'ROIMoved',@allevents);

コールバック関数 alleventsFreehand ROI の以前の位置と現在の位置をコマンド ラインに表示します。

function allevents(src,evt)
evname = evt.EventName;
    switch(evname)
        case{'MovingROI'}
            disp(['ROI moving Previous Position: ' mat2str(evt.PreviousPosition)]);
            disp(['ROI moving Current Position: ' mat2str(evt.CurrentPosition)]);
        case{'ROIMoved'}
            disp(['ROI moved Previous Position: ' mat2str(evt.PreviousPosition)]);
            disp(['ROI moved Current Position: ' mat2str(evt.CurrentPosition)]);
    end

end

詳細

すべて展開する

ヒント

  • 関数 draw または drawfreehand を使用して対話形式で ROI を描画するには、カーソルをイメージ上に配置し、クリック アンド ドラッグして ROI の形状を描画します。ROI の描画を終了するには、マウス ボタンを離します。

  • ROI は、キーボード ショートカットを含む以下の対話性をサポートします。

    動作キーボード ショートカット
    ROI の描画をキャンセルする。Esc キーを押します。関数は Position プロパティが空の有効な ROI オブジェクトを返します。
    ROI の描画を終了する (閉じる)。

    ダブルクリックします。これにより、ポインターの位置に点が追加され、描画した最初の点にこの点をつなぐラインが描画され、ROI が閉じます。

    右クリックします。これにより、描画した最初の点に最後の点をつなぐラインが描画されます。

    最初の点にポインターを配置して、クリックします。

    Enter キーを押します。これにより、描画した最初の点に最後の点をつなぐラインが描画されます。

    ROI をサイズ変更 (形状変更) する。

    ウェイポイントにポインターを配置し、クリック アンド ドラッグします。このモードでは補助機能 (エッジへのスナッピング) を使用できません。

    ウェイポイントを追加する。

    ROI のエッジにポインターを配置し、右クリックして [ウェイポイントの追加] を選択します。ROI のエッジにポインターを配置し、ダブルクリックすることもできます。

    ウェイポイントを削除する。

    ウェイポイントにポインターを配置し、右クリックして [ウェイポイントの削除] を選択します。

    ROI を移動する。ROI 上にポインターを配置します。ポインターが花形に変わります。クリック アンド ドラッグして ROI を移動します。
    ROI を削除する。ポインターを (頂点上ではなく) ROI 上に配置し、右クリックして表示されたコンテキスト メニューから [フリーハンドの削除] を選択します。関数 delete を使用して、プログラムによって ROI を削除することもできます。
  • App Designer を使って作成したアプリで ROI を使用する方法の詳細については、App Designer を使って作成したアプリでの ROI の使用を参照してください。

バージョン履歴

R2018b で導入

すべて展開する