I\'d like to manually draw multiple regions on an image to create a binary mask of the drawn regions (ground truth).
I attached the code to do it using imfreehand th
You can loop until you get an empty mask - this will indicate that the user finished drawing all masks.
Let sz
be the desired size of the output mask, then
totMask = false( sz ); % accumulate all single object masks to this one
h = imfreehand( gca ); setColor(h,'red');
position = wait( h );
BW = createMask( h );
while sum(BW(:)) > 10 % less than 10 pixels is considered empty mask
totMask = totMask | BW; % add mask to global mask
% you might want to consider removing the old imfreehand object:
delete( h ); % try the effect of this line if it helps you or not.
% ask user for another mask
h = imfreehand( gca ); setColor(h,'red');
position = wait( h );
BW = createMask( h );
end
% show the resulting mask
figure; imshow( totMask ); title('multi-object mask');
As a complement to the answer given by @Shai, you can also use the input()
function in Matlab to prompt the user for the total number of masks needed or simply as a yes/no question in a while loop.
That is, either:
imshow(img,[]) %display image to determine number of masks needed
n = input('How many masks are needed? ') %Ask user for number of masks needed
for i=1:n
create multiple masks...
end
or
n=1;
while(n==1)
create mask ...
n = input('Need more masks? [0=No, 1=Yes] ')
end