This is a class with a convenient user interface to define multiple region of interest (ROI) masks on a given image.
All the imroi tools (freehand, circle, rectangle, polygon) can be used to define these region(s).
Loading and storing of previously defined ROI masks to and from files is easily done via the UI toolbar.
Multiple regions are labeled using the connected component labeling method (using the MATLAB built-in bwlabel function).
- Binary Mask (obj.roi)
- Label Mask (obj.labels)
- number of independent regions (obj.number)
You can listen to the object's "MaskDefined" event to retrieve the ROI information generated (obj.getROIData) or get them directly from the objects public properties.
Run the example to see how it works.
glad you people still like this submission. I often get similar questions on how to use the tool in a classical non-object oriented kind of matlab script. The answer is rather simple: use waitfor() and wait for the roi to be defined (apply button pressed).
This code should illustrate how to work with the tool without the callback (I will add this to the submission later)
myimage = imread('eight.tif');
roiwindow = CROIEditor(myimage);
% wait for roi to be assigned
disp('you closed the window without applying a ROI, exiting...');
% get ROI information, like binary mask, labelled ROI, and number of
% ROIs defined
[mask, labels, n] = roiwindow.getROIData;
% do something with the ROIs, e.g. display some statistics
roi_data = double(myimage(labels==i));
std_of_roi_i = std(roi_data);
var_of_roi_i = var(roi_data);
mean_of_roi_i = mean(roi_data);
fprintf('ROI %d has a stddev of %4.2f, a variance of %4.2f and a mean of %4.2f\n',...
i, std_of_roi_i, var_of_roi_i, mean_of_roi_i);
I hope that helps.
Hello. This code is exactly what I need but I do not understand how it works.
Running the example function no output exists. Ans is an empty object. Moreover, I need to stop program execution to get ROIs since they are necessary for subsequent step. However, program continuous to run during ROI selection.
I have bug for Apply button.
Warning: Error occurred while executing the listener callback for event MaskDefined defined for class CROIEditor:
Undefined variable "roiwindow" or class "roiwindow.getROIData".
Error in example>your_roi_defined_callback (line 9)
[mask, labels, n] = roiwindow.getROIData;
Error in CROIEditor/applyclick (line 255)
Error in CROIEditor>@(h,e)this.applyclick(h,e) (line 333)
Could anyone kindly suggest how to fix it?
This has been very useful for me. But I have difficulty to save it.
I would like to use it as binary ground truth images. Could anyone suggest me how to save the roi binary mask as .jpg or .mat file.
want to use this mask as jpg image, please guide on how to save
This has been very helpful for me - thanks very much! It would be even more useful if one could load previously defined masks and edit rois individually with the gui (i.e. delete or move some of the individual rois).
Hi, Thank you for your great job. This is really nice.
I want to make multiple polygon ROIs in an image about 56 region but they join each ROIs.
For example. I drew 28 ROIs but only 11 ROI labels exist. When I check them in image, they joined in one ROI.
nice job, I have the same question as Fred, how can I add my ROI into the workspace, I need to calculate the area for different mask?
How can I add my ROI on the workspace?
There is a bug for delete button at line 183:
"this.current = str2double(regexp(Tag,'\d','match'));"
If there are more than 10 ROIs, the delete button doesn't work for ROIs #10, 11, 12, etc.
so I correct it to
"this.current = str2double(regexp(Tag,'\d+','match'));"
And it works fine, now.
If I understood you, after running the example, look at the ans.roi, and save it as a variable.
How can you extract the mask and obtain it as a variable in the workspace?
thank you for your effort. i downloaded the file but after extracting i cant open it in matlab editor. it gives me the error of
"CROIEditor\example.m is not
a valid function name. This will generate an error in a future release.
> In open at 36
In uiopen at 196 "
is there any suggestion
Excellent, you have save me so much time!!
Really really good!
Very nice tool and extremely helpfull.
The tool itself is very convenient.
Many comments make the code easy to read.
Can also be used as a good tutorial for : GUI, Classes, imroi
I myself was in need of a more versatile tool. For exemple being able to save not only the binary mask but also the imroi shapes themself.
With such a funcionality you can reuse the shapes on another image and modify it if needed.
I implemented this funcionality in an enhanced version of your tool. I may submit it soon
Very good and easy to use.