MATLAB Answers

Interrupting/Disabling ROI drawing functions in a GUI

9 views (last 30 days)
Fábio Nery
Fábio Nery on 17 Mar 2013
Dear all,
I am programming a GUI for the selection of regions of interest (ROIs) in an image. Several kinds of regions may be chosen using built-in MATLAB functions such as `impoly`/`imellipse`.
Below, I provide a minimal working example of a GUI where my problem may be addressed.
The question is: supposing one user misclicks one of the ROI selection buttons (i.e. chooses to select an Ellipse when the goal was to select a Polygon) how can I cancel the interactive tool for the ROI selection AVOIDING errors in the workspace?
I know that pressing the "Esc" key cancels the interactive tool but I would like to avoid errors.
One idea is to have another push button (Abort) to perform the interruption but I've been unable to come up with code to perform this operation.
function roiData = testGUI(sourceImage)
% Initialize main figure
hdl.mainfig = figure();
% Initialize roiData and roiCounter
roiData = [];
roiCounter = 0;
% Select Elliptical ROI button
hdl.selectEllipseButton = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.05 0.7 0.2 0.1], 'String', 'Select Ellipse', 'Callback', @selectEllipse);
% Select Polygonal ROI button
hdl.selectPolygonButton = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.05 0.6 0.2 0.1], 'String', 'Select Polygon', 'Callback', @selectPolygon);
% Abort Button
hdl.abort = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.05 0.2 0.2 0.2], 'String', 'Abort', 'Callback', @abort);
% Axes
hdl.axes = axes('Parent',hdl.mainfig, 'Units', 'Normalized', 'Position', [0.35 0.2 0.6 0.6]);
function selectEllipse(~, ~, ~)
imshow(sourceImage, [], 'Parent', hdl.axes);
roiCounter = roiCounter + 1;
h = imellipse(hdl.axes);
mask = uint16(createMask(h));
wait(h);
roiData(roiCounter).mask = mask;
end
function selectPolygon(~, ~, ~)
imshow(sourceImage, [], 'Parent', hdl.axes);
roiCounter = roiCounter + 1;
h = impoly(hdl.axes);
mask = uint16(createMask(h));
wait(h);
roiData(roiCounter).mask = mask;
end
function abort(~, ~, ~)
cla(hdl.axes)
% I need something else here... (see above)
end
% Pause until figure is closed
waitfor(hdl.mainfig);
end
Thank you.
Best regards,
fnery.

  0 Comments

Sign in to comment.

Answers (0)

Sign in to answer this question.