如何使用imfreehand绘制几个ROI?

时间:2016-06-07 14:10:20

标签: matlab matlab-figure matlab-guide

我需要使用MATLAB R2015a中的 imfreehand 函数绘制几个ROI。我需要的是绘制图像,用户必须选择他/她想要的ROI,并且完成后,他们必须单击(鼠标右键)才能完成选择。此外,用户必须能够选择所需的ROI并将其删除。

请有人在这里,给我一些例子或任何关于如何实现这个的想法吗?

提前致谢,

1 个答案:

答案 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));