Interrupting/Disabling ROI drawing functions in a GUI
    3 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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 commentaires
Réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
