我需要使用MATLAB R2015a中的 imfreehand 函数绘制几个ROI。我需要的是绘制图像,用户必须选择他/她想要的ROI,并且完成后,他们必须单击(鼠标右键)才能完成选择。此外,用户必须能够选择所需的ROI并将其删除。
请有人在这里,给我一些例子或任何关于如何实现这个的想法吗?
提前致谢,
答案 0 :(得分:1)
您可以通过设置轴的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
<强>更新强>
这是一个不需要点击次数但使用转义键完成绘图的版本。
handles = imfreehand();
lastroi = handles;
while ~isempty(lastroi)
lastroi = imfreehand();
handles = cat(1, handles, lastroi);
end
handles = handles(isvalid(handles));