Re: excluding ROI Manager selections from Analyze Particles

Posted by Michael Schmid on
URL: http://imagej.273.s1.nabble.com/excluding-ROI-Manager-selections-from-Analyze-Particles-tp3686462p3686463.html

Hi Elizabeth,

what about combining the ROIs in the ROI Manager and then  
Edit>Selection>Make Inverse?

Michael
________________________________________________________________

On 10 Nov 2010, at 17:39, Crowell Elizabeth wrote:

> Hello list members,
>
> I have a very precise question: how can I run analyze particles  
> from a macro on a thresholded image and exclude the ROI selections  
> in the ROI Manager from the particle analysis?
>
> Basically, I want to generate some ROIs and store them in the  
> manager, then loop through each ROI selection and duplicate it to a  
> new individual image.  Then I threshold the new image.  I would  
> like to analyze just the thresholded objects in the new image, but  
> analyze particles also gives me measurements for the ROIs in the  
> manager.
> I cannot reset the manager, because I will need the ROIs during the  
> whole loop!  The macro where this problem arises is attached.  I  
> realize I could reset the ROI Manager and reopen it after each  
> loop, but this appears terribly awkward and will slow down the macro.
>
> Is there any clever way to fix this problem?
> In fact, I now have several colleagues interested by this same  
> question, because we have all encountered instances where we would  
> like to keep separate ROI Manager lists active simultaneously.
> Maybe an option could be added to Analyze Particles so that it can  
> process either thresholded regions or ROIs in the Manager or both...
>
> Thank you for any comments,
>
> Elizabeth CROWELL
>
> ----------------------------------------------------------------------
> Membrane Traffic and Cell Division Research Group
> Institut Pasteur
> 28 rue du Dr Roux
> 75015 PARIS, France
>
> Tel :  01.44.38.94.07
> Fax : 01.45.68.89.54
> ----------------------------------------------------------------------
> // "BatchMeasureCilia"
> //
> // This macro batch processes all the files in a folder and any
> // subfolders in that folder. It opens all the FITC images and  
> segments them
> // after removing noise using a Gaussian blur subtraction.  Then it
> // opens the corresponding Cy3 image (with the same number),  
> thresholds, and
> // measures the intensity in each ROI.
> // The DAPIROIs are saved in the same folder as the images.  The  
> results
> // of the measurements are saved in a new folder called
> // condition_ROImeasurements, one level up from the images.  Each  
> results
> // file is named after the image used for measurement (FITC000X).
> // If no ROIs were selected in an image (due to automatic thresholding
> // problems, for example) the macro prints out the name of the image
> // in the log and moves on to the next image.
>
> // The current settings are for selecting Ninein staining imaged at  
> 60X.
> // The macro does not work if there are images in the source  
> directory.
> // The images must be organized into subfolders (for ex. series1,
> // series2, etc) and cannot be present at the same level as the  
> subfolders.
>
> // Modified from "BatchMeasureROIs" macro by E. Crowell 9/11/2010.
>
>    requires("1.33s");
>    dir = getDirectory("Please choose a source directory.");
>    setBatchMode(false);
>
>    GetFiles(dir);
>
>    function GetFiles(dir) {
>       list = getFileList(dir);
>       for (i=0; i<list.length; i++) {
>           if (endsWith(list[i], "/")) {
>               GetFiles(""+dir+list[i]);
>           } else {
>              if (endsWith(list[i], ".tif")) {
>                 if (endsWith(list[i], "FITCmax.tif")) {
>                    path = dir+list[i];
>                    GetROIs(path);
>      MeasureROIs(path);
>                 }
>              }
>           }
>       }
>    }
>
>    function GetROIs(path) {
> open(path);
> rename("filter1");
> run("Duplicate...", "title=filter2");
>
> // the sigma parameters might need to be adjusted here.
> selectImage("filter1");
> run("Gaussian Blur...", "sigma=5");
> run("Variance...", "radius=3");
> selectImage("filter2");
> run("Gaussian Blur...", "sigma=25");
> imageCalculator("Subtract create", "filter1","filter2");
> rename("Difference");
> selectImage("filter1");
> close();
> selectImage("filter2");
> close();
> selectImage("Difference");
> run("OtsuThresholding 16Bit");
> run("Convert to Mask", "calculate");
> run("Fill Holes", "slice");
> run("Watershed", "slice");
>
> // the filter size will need to be adjusted here.
> run("Analyze Particles...", "size=50-1000 circularity=0.50-1.00  
> show=Nothing add");
>
> length1 = roiManager("count");
> if (length1>0) {
> roiManager("Save", substring(path,0,lastIndexOf(path, "."))
> +"_ROI.zip");
> }
> selectImage("Difference");
> close();
>     }
>
>
>
>    function MeasureROIs(path) {
> corresp = replace(path,"FITC","Cy3");
> open(corresp);
> MeasImage=getImageID();
>
> parentdir = File.getParent(corresp);
> dest = parentdir+"_ROImeasurements";
> File.makeDirectory(dest);
> number = substring(corresp,lastIndexOf(corresp,"/"),lastIndexOf
> (corresp,"Cy3max"));
> length = roiManager("count");
>
> if (length>0) {
> for(j=0;j<length;j++){
> roiManager("Select", j);
> run("Enlarge...", "enlarge=50");
> run("Duplicate...", "title=dup");
> run("Select None");
> run("OtsuThresholding 16Bit");
> selectImage("dup");
> run("Analyze Particles...", "size=10-1000 circularity=0.00-0.80  
> show=[Overlay Outlines]");
> wait(5000);
> selectImage("dup");
> close();
> saveAs("Measurements", dest+number+"_"+j);
> run("Clear Results");
> }
>
> /* if (isOpen("Results")) {
> selectWindow("Results");
> run("Close");
> }
> */
> if (isOpen(MeasImage)) {
> selectImage(MeasImage);
> close();
> }
> roiManager("reset");
> } else {
> print("No ROIs were selected in image "+corresp);
> if (isOpen(MeasImage)) {
> selectImage(MeasImage);
> close();
> }
> }
>    }