4

私はMATLABに取り組んでおり、関数roipolyを使用するときと同じようにインタラクティブな選択を行いたいのですが、円または正方形を選択したいと思います。roipolyを使用するときに選択するように、関心領域(ROI)を選択するために、すでに関数を検索していますが、円または正方形を使用していますが、何も見つかりません。

任意のヒント?

私はすでにginputを使ってみました。

[X, Y]= ginput(2)

xmin=min(X)
xmax=max(X)
ymin=min(Y)
ymax=max(Y)

このコードでは、正方形の角を定義します(ユーザーはginputを使用して2つのポイントを定義します)。しかし、画像のポイントを確認すると、間違っています。プロット上で同じではない図のサイズのためだと思います。

必要なROIを選択する最良の方法は、roipolyと同様の関数を使用することですが、ポリゴンではなく、円と正方形に使用します。そして、このタイプの関数では、「ginput」を使用して画像内のポイントのみを選択できます。ユーザーが図外のポイントを選択した場合、エラーメッセージを入力する必要があります(問題は、それらが一致しないことです。選択できるポイントは画像のサイズよりも大きいです)。

4

2 に答える 2

2

ここには実際には 2 つの質問があります。

1) GINPUT コードの何が問題なのか、2) roiCircle または roiSquare の書き方

(1) の答えとしては、何も問題はありません。そのコードは、次のように動作します。

imgData = randn(100);
imagesc(imgData );
[X, Y]= ginput(2)

xmin=min(X);
xmax=max(X);
ymin=min(Y);
ymax=max(Y);

squareX = [xmin xmin xmax xmax xmin];
squareY = [ymin ymax ymax ymin ymin];
hold on; 
plot(squareX,squareY); %plot the correct square
hold off;

IMCROP を使用してデータを取得できます。

width = xmax - xmin;
height = ymax - ymin;
imgSelect = imcrop(imgData,[xmin,ymin,width,height]);
figure; imagesc(imgSelect);

(2) (roiCircle または roiSquare を作成する) 限り、roiPoly のように適切に更新するには、かなりの量の (克服できないわけではありませんが) MATLAB GUI プログラミングが必要になります。扱いやすいですが、簡単ではありません。

于 2012-12-12T14:29:39.803 に答える
1

次の手法を使用して、インタラクティブな領域選択 (私の場合は円) を実装することができました。

  1. 組み込みの ginput(1) を使用して最初の点を取得します。

    [X1, Y1] = ginput(1);
    xp = [X1 Y1];
    
  2. 円のハンドルを生成します。

    h = plot(X1, Y1, 'r');
    
  3. カスタム MouseMove イベント ハンドラーを設定して、2 番目のポイントを選択します。

    set(gcf, 'WindowButtonMotionFcn', {@mousemove, h, xp});
    
  4. ハンドラーが魔法のように機能している間、ユーザーがクリックするのを待ちます。

    k = waitforbuttonpress;
    
  5. 最後にハンドラーを無効にします。

    set(gcf, 'WindowButtonMotionFcn', '');
    

イベント ハンドラは次のようになります。

function mousemove(object, eventdata, h, xp)
cp = get(gca, 'CurrentPoint');
r = norm([cp(1,1) - bp(1) cp(1,2) - bp(2)]);
theta = 0:.1:2*pi;
xc = r*cos(theta)+bp(1);
yc = r*sin(theta)+bp(2);
set(h, 'XData', xc);
set(h, 'YData', yc);
end

出来上がり。これはうまくr機能し、呼び出し元の関数から見えるので利用できます。

于 2014-05-14T05:18:13.867 に答える