1. ホーム
  2. matlab

[解決済み] Matlab の imrect を用いて,新しい矩形の座標を取得します.

2022-02-15 22:27:46

質問

私のプロジェクトでは、ROIを抽出する必要がある写真がたくさんあります。プロジェクトが始まると、画像が表示され、ユーザが必要なROIを選択できるようにしたいのですが、どうすればよいでしょうか?関数 imrect はそうなっているようです。私は、矩形がドラッグされたり、サイズが変更されたりしたときの座標を取得しようとしています。問題は、返される値が正しくないようだということです。

問題が見つからないようで、関連する質問も役に立ちませんでした。私は imcrop しかし、これ以上うまくはいかない...。

function [ new_image ] = getRoi(image)

rect = size(image);
rect = round(rect ./2);

figure, imshow(image);

h = imrect(gca, [5 5 rect(2) rect(1)]);

addNewPositionCallback(h,@(p) title(mat2str(p,3)));
fcn = makeConstrainToRectFcn('imrect',get(gca,'XLim'),get(gca,'YLim'));
accepted_pos = wait(h);
setPositionConstraintFcn(h,fcn);
%getPositionConstraintFcn(h);

pos = getPosition(h);

if round(pos(1)) < round(pos(2))
    X1 = round(pos(1))
    X2 = round(pos(2))
else
    X1 = round(pos(2))
    X2 = round(pos(1))
end

if round(pos(3)) < round(pos(4))
    Y1 = round(pos(3))
    Y2 = round(pos(4))
else
    Y1 = round(pos(4))
    Y2 = round(pos(3))
end

new_image = image(Y1:Y2, X1:X2);

%name = strcat('Roi_', datestr(clock, 'yyyymmddTHHMMSS'),'.png');
%prtIm(new_image, name, '-s');
new_image = image;

end

解決方法は?

getPosition リターン [xmin, ymin, width, height] . 希望の座標を得るには、次のようにします。

X1 = round(pos(1));
Y1 = round(pos(2));
X2 = round(X1 + pos(3));
Y2 = round(Y1 + pos(4));