ROI selection without overlap

Illustration
carlos Uribe - 2022-02-25T11:55:51+00:00
Question: ROI selection without overlap

I'm trying to select several ROI's from an image using the following code:   for i=1:nbrois roi3d{i}=roipoly(A); end Which works OK...I however, need to be sure that those ROIs don't overlap with each other. Is there a way of selecting the first ROI, have the program show the polygon on top of the image to select the second ROI and so on? In other words, I want to select the ROIs with all the previous ROIs displayed on the image, is that possible?

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

There is no built-in function of ROIPOLY, that I know of, that will do this. So, you'll need to alter your raw image to outline/overlay the regions you have selected. I've pasted below a simple loop using my outlining function MASKOUT. You might have better success using a more robust function from the File Exchange like IMOVERLAY.
 
You won't be able to run this "as is". You'll need to point it to your raw image.
 
reply = input('Circle regions to [a]dd, [n]ext image? a/n [n]: ', 's');
    if isempty(reply)
        reply = 'n';
    end

      %loop for each ROI created
      while reply == 'a' 

              im2 = imread(char(filenames(1, x)));  %raw image
              brtemp = false(size(im2, 1), size(im2, 2));   %binary mask of ROIs         
              timg = maskout(im2, brtemp, 2); 

          if reply == 'a'

              brtemp = roipoly(timg) | brtemp;  %manual interaction to create ROI, add to BRTEMP
              timg = maskout(im2, brtemp, 2);  %display outline of all masks created

              reply = input('Circle regions to [a]dd, [r]emove, [n]ext? a/r/n [n]: ', 's');
              if isempty(reply)  %default reply is N
                  reply = 'n';
              end

          end
      end

function [imgout] = maskout(imgin, maskin, thickness)
% MASKOUT  displays the outline of a binary mask on an image.
% 

imgout = imgin;

if exist('thickness', 'var')
    bwout = bwmorph(bwperim(maskin), 'dilate', thickness);
    imgout(bwout) = 255;
else
    bwout = bwperim(maskin);
    imgout(bwout) = 255;
end

imshow(imgout);
end

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!