Вы можете сделать это, установив ButtonDownFcn
обратного вызова для осей. Всякий раз, когда пользователь нажимает левую кнопку мыши, вы позволяете им начинать рисовать новый ROI. Когда они нажимают правую кнопку мыши, она останавливается и возвращает список объектов imfreehand
. Когда вы щелкните правой кнопкой мыши по ROI, появится контекстное меню, которое позволит им удалить данный ROI.
function handles = multiROI()
hax = axes('ButtonDownFcn', @(src,evnt)buttondown(evnt))
handles = [];
% Keep this function open until we right click
waitfor(gca, 'UserData')
function buttondown(evnt)
switch evnt.Button
case 1
% On a left click draw a new ROI
handles = cat(1, handles, imfreehand());
case 3
% On a right click, remove empty ROIs and return
handles = handles(isvalid(handles));
set(gca, 'UserData', 'done')
end
end
end
Update
Вот версия, которая не требует столько кликов, но использует ключ выхода, чтобы закончить рисунок.
handles = imfreehand();
lastroi = handles;
while ~isempty(lastroi)
lastroi = imfreehand();
handles = cat(1, handles, lastroi);
end
handles = handles(isvalid(handles));
Можете ли вы ударить бегством, а не щелкнуть правой кнопкой мыши, чтобы закончить его? – Suever