Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

AssistedFreehand

補助付きフリーハンド関心領域

説明

AssistedFreehand は手描きの関心領域 (ROI) オブジェクトであり、描画されたラインはベースのイメージ内のエッジに自動的に従います。

ROI を描画するには、ポインターをイメージに配置し、クリック アンド リリースして最初の頂点 (中間点) を配置します。次に、ポインターを移動してラインを描画します。描画中に、ラインはイメージ内のオブジェクトのエッジに自動的に従います。ROI の描画を完了するには、ダブルクリックします。キーボード ショートカットを含むこの ROI の使用方法の詳細については、ヒントを参照してください。

作成

説明

AssistedFreehand オブジェクトを作成するには、作成関数 images.roi.AssistedFreehand を使用します。オブジェクトを作成した後、オブジェクト関数 draw を呼び出して描画を開始します。便宜上、関数 drawassisted を使用して AssistedFreehand ROI を作成することもできます。関数 drawassisted は ROI オブジェクトを作成し、オブジェクト関数 draw を呼び出します。

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

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

roi = images.roi.AssistedFreehand(___,Name,Value) は、名前と値のペアを使用してプロパティを設定します。たとえば、images.roi.AssistedFreehand('Color','y')AssistedFreehand オブジェクトの色を黄色に設定します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。

入力引数

すべて展開する

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

プロパティ

すべて展開する

フリーハンド ROI を閉じる。論理値 true または false を指定します。true (既定の設定) の場合、Freehand は、描画された最後の点を描画された最初の点と結ぶことによって ROI を閉じます。

ROI の色。MATLAB® ColorSpec (Color Specification) として指定します。

例: 'green'

例: 'g'

例: [0 1 0]

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

コンテキスト メニューを使用して対話的に ROI を削除可能。true または false を指定します。値が true (既定の設定) の場合、コンテキスト メニューを使用して ROI を削除できます。このコンテキスト メニュー項目を無効にするには、このプロパティを false に設定します。値を false に設定した場合でも、ROI のハンドルを入力として指定して関数 delete を呼び出すことによって、ROI を削除できます。

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

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

ROI 面の透明度。[0 1] の範囲の数値のスカラー値として指定します。値が 1 の場合、ROI 面は完全に不透明になります。値が 0 の場合、ROI 面は完全に透明になります。

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

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

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

ROI を描画するイメージ。Image オブジェクトのハンドルとして指定します。

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

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

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

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

ラベル テキストの色。MATLAB ColorSpec (Color Specification) として指定します。強度は [0,1] の範囲でなければなりません。

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

説明
'on'ROI が表示されていて Label プロパティが空でない場合、ラベルは表示されます (既定の設定)。
'hover'マウスのカーソルを ROI 上に置いている場合のみ、ラベルは表示されます。
'off'ラベルは表示されません。

ROI のエッジの幅。ポイント単位の正の数値スカラーを指定します。既定値はスクリーン ピクセルに対する点の数の 3 倍です。

マーカー サイズ。ポイント単位の正の数値スカラー値として指定します。

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

ROI の位置。[x1 y1;...;xn yn] 形式の n 行 2 列の数値配列として指定します。n は点の数です。各行は ROI を定義する点の位置を指定します。ROI の形状の描画中に、AssistedFreehand がこれらの点を生成します。より少ない点を扱うには、オブジェクト関数 reduce を使用します。

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

選択したときの ROI の色。MATLAB ColorSpec (Color Specification) として指定します。強度は [0,1] の範囲でなければなりません。'SelectedColor''none' に設定された場合、Color の値はすべての状態 (選択または未選択) の ROI の色を定義します。

例: 'green'

例: 'g'

例: [0 1 0]

対話型配置中の ROI エッジの平滑化。非負のスカラーとして指定します。AssistedFreehand オブジェクトは、ガウス平滑化カーネルの標準偏差を使用して、ROI の x 座標と y 座標をフィルター処理します。このパラメーターは、方程式 2*ceil(2*Smoothing) + 1 を使用してフィルター サイズを定義します。対話的に ROI を描画する前に、このパラメーターを設定しなければなりません。描画を完了した後にのみ平滑化効果を確認できます。

ROI ストライプの色。MATLAB ColorSpec (Color Specification) 値を指定します。既定の設定では、ROI のエッジは単色で塗りつぶされます。StripeColor を指定した場合、ROI エッジはストライプ状になります。縞模様は、'Color' で指定した値とこの値の組み合わせで構成されます。

例: 'green'

例: 'g'

例: [0 1 0]

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

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

ROI の可視性。'on' または 'off'、もしくは数値か logical の 1 (true) または 0 (false) として指定します。値 'on' は true と等価であり、'off' は false と等価です。そのため、このプロパティの値は logical 値として使用できます。この値は、matlab.lang.OnOffSwitchState 型の on/off の logical 値として格納されます。

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

ROI の形状を変更するために使用されるコントロール ポイント。Position プロパティと同じ長さの n 行 1 列の logical 配列として指定します。true の値を持つ Waypoints の要素は、中間点である Position 配列の点を識別します。既定では、AssistedFreehand は、ROI を定義するすべての点を生成し、曲率が増加する位置にある点のみを中間点にします。roi.Waypoints(1:4:end) = true; のようなコードを使用すると、すべての点または点のサブセットを中間点にすることができます。

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

オブジェクト関数

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

すべて折りたたむ

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

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

images.roi.AssistedFreehand クラスのインスタンスを作成します。既定では、このクラスは現在の座標軸に ROI を作成します。座標軸にはイメージが含まれていなければならないことに注意してください。

roi = images.roi.AssistedFreehand;

AssistedFreehand オブジェクトを引数として指定して、draw メソッドを呼び出します。イメージの上にカーソルを移動するとポインターが十字に変わります。ROI の描画を続けることができます。ポインターを移動したときに、描画するラインがベースのイメージ内のエッジに従うことに注意してください。描画中にクリックして、エッジに沿って頂点を追加します。

draw(roi);

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

I = imread('cameraman.tif');

イメージを表示します。表示されたイメージ オブジェクトを返す imshow 構文を使用します。

img = imshow(I);

イメージ上に AssistedFreehand ROI を作成します。オブジェクト関数 draw を呼び出して、対話形式による ROI 形状の描画を有効にします。ROI ラインがベースのイメージ内のエッジに自動的に従うことを確認してください。

roi = images.roi.AssistedFreehand(img);
draw(roi)

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

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

コールバック関数 allevents は 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

詳細

すべて展開する

ヒント

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

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

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

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

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

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

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

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

    中間点を追加する。

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

    中間点を削除する。

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

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

互換性の考慮事項

すべて展開する

R2020a 以降は非推奨

R2018b で導入