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

drawassisted

イメージ エッジの補助機能を使用したイメージ上のフリーハンド ROI の作成

説明

roi = drawassistedAssistedFreehand オブジェクトを作成し、現在の座標軸での対話形式による手描きの関心領域 (ROI) の描画を有効にします。AssistedFreehand ROI はベースのイメージ内のエッジを使用して、形状の描画を "補助" します。

ROI を描画するには、ポインターをイメージに配置し、クリック アンド リリースして最初の頂点 (中間点) を配置します。次に、ポインターを移動してラインを描画します。形状を描くためにポインターを移動すると、ラインは自動的にベースのイメージ内のエッジの輪郭に従います。描画中にクリックして、ラインに沿って頂点を配置します。ROI の作成を終了して形状を閉じるには、ダブルクリックします。キーボード ショートカットやコンテキスト メニュー オプションを含む ROI の使用方法の詳細については、ヒントを参照してください。

メモ

drawassistedAssistedFreehand ROI オブジェクトを作成するための簡易関数です。AssistedFreehand を呼び出して ROI オブジェクトを直接作成する場合、オブジェクト関数 draw を呼び出して ROI の対話形式による描画を有効にしなければなりません。一方、関数 drawassisted は ROI オブジェクトを作成し、オブジェクト関数 draw を呼び出します。どちらの方法で ROI を作成する場合でも、オブジェクト プロパティ、オブジェクト関数、およびイベント通知を使用して、その外観や動作をカスタマイズします。これらの機能の使用方法の詳細については、ヒントを参照してください。

roi = drawassisted(hImage) は、hImage で指定されるイメージに ROI を作成します。

roi = drawassisted(___,Name,Value) は、1 つ以上の名前と値のペアを使用して ROI の外観や動作を変更します。指定されていない名前と値のペアは既定値に設定されます。

すべて折りたたむ

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

im = imread('peppers.png');
imshow(im)

補助付きフリーハンド ROI を描画します。

h = drawassisted;

ROI のマスクを作成します。

bw = createMask(h);

各ピクセルでソース イメージの透明度を指定するアルファ行列を作成します。

alphamat = imguidedfilter(single(bw),im,'DegreeOfSmoothing',2);

ターゲット イメージを表示します。

target = imread('fabric.png');
imshow(target)

ソース イメージとアルファ行列のサイズをターゲット イメージと同じサイズに変更します。

alphamat = imresize(alphamat,[size(target,1),size(target,2)]);
im = imresize(im,[size(target,1),size(target,2)]);

ソース ROI をターゲット イメージにアルファ ブレンドします。

fused = single(im).*alphamat + (1-alphamat).*single(target);
fused = uint8(fused);
imshow(fused)

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

I = imread('cameraman.tif');

イメージを表示します。imshow の戻り値を使用して、表示されるイメージのハンドルを取得します。AssistedFreehand ROI を作成するにはベースのイメージが必要です。

img = imshow(I);

ベースのイメージを利用して、イメージ上に補助付きフリーハンド ROI を描画します。

roi = drawassisted(img,'Color','r');

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 を描画する image オブジェクト。image オブジェクトとして指定します。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: roi = drawassisted('LineWidth',5);

フリーハンド ROI を閉じる。'Closed' と論理値 true または false で構成されるコンマ区切りのペアとして指定します。true (既定の設定) の場合、drawassisted は、描画された最後の中間点を描画された最初の中間点と結ぶことによって ROI を閉じます。

ROI の色。'Color' と MATLAB® ColorSpec (Color Specification) 値で構成されるコンマ区切りのペアとして指定します。

例: 'green'

例: 'g'

例: [0 1 0]

コンテキスト メニュー。'ContextMenu'ContextMenu オブジェクトから構成されるコンマ区切りのペアとして指定します。この名前と値のペアを指定すると、ROI を右クリックしたときにカスタム コンテキスト メニューが表示されます。カスタム コンテキスト メニューを作成するには、関数 uicontextmenu を使用して ContextMenu オブジェクトを作成してから、コンテキスト メニュー プロパティを設定します。

コンテキスト メニューを使用して対話的に ROI を削除可能。'Deletable' と logical 値 true または false で構成されるコンマ区切りのペアとして指定します。値が true (既定の設定) の場合、コンテキスト メニューを使用して ROI を削除できます。このコンテキスト メニュー項目を無効にするには、'Deletable'false に設定します。値を false に設定した場合でも、ROI のハンドルを入力として指定して関数 delete を呼び出すことによって、ROI を削除できます。

ROI 面の透明度。'FaceAlpha'[0,1] の範囲のスカラー値で構成されるコンマ区切りのペアとして指定します。値が 1 の場合、ROI 面は完全に不透明になります。値が 0 の場合、ROI 面は完全に透明になります。

ROI 面でクリックをキャプチャ可能。'FaceSelectable' と値 true または false で構成されるコンマ区切りのペアとして指定します。true (既定の設定) の場合、ROI 面でクリックをキャプチャできます。false の場合、ROI 面でクリックをキャプチャできません。

親の Children プロパティでの ROI ハンドルの可視性。'HandleVisibility' と次の表のいずれかの値で構成されるコンマ区切りのペアとして指定します。

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

ROI を描画するイメージ。'Image'Image オブジェクトのハンドルから構成されるコンマ区切りのペアとして指定します。

ROI の対話性。'InteractionsAllowed' と次の表のいずれかの値で構成されるコンマ区切りのペアとして指定します。

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

ROI ラベル。'Label' と、文字ベクトルまたは string で構成されるコンマ区切りのペアとして指定します。既定の設定では、このプロパティは空の配列 ('') に設定され、ROI にはラベルがありません。

ROI ラベルの可視性。'LabelVisible' と次のいずれかの値で構成されるコンマ区切りのペアとして指定します。

説明
'on'ROI が表示されていて Label プロパティが空でない場合、ラベルは表示されます (既定の設定)。
'hover'

マウスのカーソルを ROI 上に置いている場合のみ、ラベルは表示されます。

'off'ラベルは表示されません。

ROI のエッジの幅。'LineWidth' とポイント単位の正の数値スカラーで構成されるコンマ区切りのペアとして指定します。既定値はスクリーン ピクセルに対する点の数の 3 倍です。

ROI の親。'Parent'Axes または UIAxes オブジェクトから構成されるコンマ区切りのペアとして指定します。重要な制限など UIAxes で ROI を使用する方法の詳細は、App Designer を使って作成したアプリでの ROI の使用を参照してください。

ROI の位置。'Position' と、[x1 y1; …; xn yn] 形式の n 行 2 列の配列から構成されるコンマ区切りのペアとして指定します。ここで、n は点の数です。各行は ROI を定義する点の位置を指定します。ROI を移動したり、その形状を変更したりすると、AssistedFreehand オブジェクトは、このプロパティの値を更新します。より少ない点を扱うには、オブジェクト関数 reduce を使用します。

ROI の選択状態。'Selected'true または false から構成されるコンマ区切りのペアとして指定します。この値は対話形式で設定することもできます。たとえば、ROI をクリックすると、それが選択され、この値が true に設定されます。同様に、Ctrl キーを押しながら ROI をクリックすると、それが選択解除され、この値は false に設定されます。

選択したときの ROI の色。'SelectedColor' と MATLAB ColorSpec (Color Specification) から構成されるコンマ区切りのペアとして指定します。'SelectedColor''none' に設定された場合、Color の値はすべての状態 (選択または未選択) の ROI の色を定義します。

例: 'green'

例: 'g'

例: [0 1 0]

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

ROI ストライプの色。'StripeColor と MATLAB ColorSpec (Color Specification) 値で構成されるコンマ区切りのペアとして指定します。'StripeColor' を指定した場合、ROI エッジはストライプ状になります。縞模様は、'Color' で指定した値とこの値の組み合わせで構成されます。

例: 'green'

例: 'g'

例: [0 1 0]

ROI に関連付けるタグ。'Tag' と文字ベクトルまたは string スカラーで構成されるコンマ区切りのペアとして指定します。関数 findobj を使用してオブジェクトの階層内の ROI オブジェクトを見つけるには、このタグ値を使用します。

ROI に関連付けるデータ。'UserData' と任意の MATLAB データから構成されるコンマ区切りのペアとして指定します。たとえば、スカラー、ベクトル、行列、cell 配列、string、文字配列、テーブル、または構造体を指定できます。MATLAB はこのデータを使用しません。

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

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

ROI の形状を変更するコントロール ポイント。'Waypoints' と、Position と同じ長さの n 行 1 列の logical ベクトルで構成されるコンマ区切りのペアとして指定します。true の値を持つ Waypoints の要素は、Position 内の対応する点が中間点であることを示します。中間点は ROI エッジ上に円として表示されます。ROI の形状を変更するには、中間点をクリックしてドラッグします。中間点をドラッグすると、その中間点とそれに隣接する中間点の間のフリーハンドで描画した領域の輪郭が変更されます。

対話的に ROI を描画する場合、AssistedFreehandPosition 内にすべての点を生成しますが、曲率が増加する位置にある点のみを中間点にします。roi.Waypoints(1:4:end) = true; のようなコードを使用すると、すべての点または点のサブセットを中間点にすることができます。

出力引数

すべて折りたたむ

補助付きフリーハンド ROI。AssistedFreehand オブジェクトとして返されます。

ヒント

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

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

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

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

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

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

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

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

    中間点を追加する。

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

    中間点を削除する。

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

    ROI を移動する。ROI 上にポインターを配置します。ポインターが花形に変わります。クリック アンド ドラッグして ROI を移動します。
    ROI を削除する。ポインターを (頂点上ではなく) ROI 上に配置し、右クリックして表示されたコンテキスト メニューから [フリーハンドの削除] を選択します。delete オブジェクト メソッドを使用して、プログラムによって ROI を削除することもできます。
  • 関数 drawassistedAssistedFreehand ROI オブジェクトを返します。作成後、オブジェクトの次の機能を使用して、ROI の外観や動作をカスタマイズします。

    • オブジェクト プロパティ — ROI オブジェクトは、その外観や動作を変更するプロパティをサポートしています。たとえば、roi の色を黄色に変更するには、その Color プロパティを roi.Color = 'yellow' と設定します。

    • オブジェクト関数 — ROI オブジェクトは ROI を操作する一連のオブジェクト関数をサポートしています。たとえば、ROI の作成後、MATLAB コマンド ラインを一時停止する場合は、オブジェクト関数 wait を呼び出します。

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

    イベント リスナーを AssistedFreehand オブジェクトと共に使用する例については、AssistedFreehand イベントのリスナーの設定を参照してください。これらの機能の詳細については、AssistedFreehand オブジェクトのドキュメンテーションを参照してください。

互換性の考慮事項

すべて展開する

R2020a 以降は非推奨

R2018b で導入