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?
Prashant Kumar answered .
2025-11-20
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