Login  Register

Re: Analyze particles Exclude edge particles not working when automated

Posted by Michael Schmid on Feb 19, 2015; 2:55pm
URL: http://imagej.273.s1.nabble.com/Analyze-particles-Exclude-edge-particles-not-working-when-automated-tp5011662p5011692.html

Hi Miriam,

in a macro, there is no option to set the default colors of the PartzicleAnalyzer's 'Outlines' image.

You can manipulate the color lookup table (LUT) afterwards, however. index [0] corresponds to the outlines, index [1] to the labels, and index [255] to the white background.

Select the 'Outlines' image so that it is in the foreground, then:
  getLut(reds, greens, blues);
  reds[0] = 255;  //red outlines
  setLut(reds, greens, blues);

Michael
________________________________________________________________
On Feb 19, 2015, at 12:08, Mariam Shirdel wrote:

> It worked! Thank you :)
>
> Is it possible to change the colour of Outlines in Analyze particles to red?
>
> Best regards,
> Mariam
>
> ----------------------------------------------------------------
> Mariam Shirdel
> PhD student
> Phone nr: +4690 785 2755
>                  +4676 820 5076
> Address:  Occupational and Environmental Medicine
>                  Umeå University
>                  901 87 Umeå
>
> -----Original Message-----
> From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of Michael Schmid
> Sent: den 18 februari 2015 16:13
> To: [hidden email]
> Subject: Re: Analyze particles Exclude edge particles not working when automated
>
> Hi Miriam,
>
> in Process>Binary>Options, there is an option "Pad edges when eroding"; your macro requires this.
> (use Plugins>Macros>Record to see the macro code).
> Without that option, the 'Close-' operation, which dilates and erodes the image, leaves a 1-pixel line at the border free, and your particles don't touch the edge any more.
>
> Michael
> ________________________________________________________________
> On Feb 18, 2015, at 13:57, Mariam Shirdel wrote:
>
>> Hi!
>> I'm trying to analyse images of particles similar to the image I have attached. When I do this manually in ImageJ exclude edge particles in Analyze Particles works fine. When I try to use a macro I've modified everything works except for exclude edge particles. I can use the command and Analyze Particles works and I get all of the results, it's just that exclude edge particles is ignored. I've tried to figure out what I'm doing wrong, but I really can't find it. Does anyone know what could be wrong?
>>
>> The whole macro is:
>>
>> requires("1.33s"); //display a message and aborts the macro if the ImageJ version is less than the one specified.
>>
>> print("\\Clear");
>> run("Clear Results");
>>
>> //Set the correct measurements
>> run("Set Measurements...", "area perimeter fit shape area_fraction
>> redirect=None decimal=3"); setBatchMode(false); rolling = 50; // the
>> rolling ball background subtraction diameter sigma = 1.0; // the sigma
>> diameter for Gaussian blur thresholdMethod = newArray("Default",
>> "Huang", "Intermodes", "IsoData", "Li", "MaxEntropy", "Mean",
>> "MinError(I)", "Minimum", "Moments", "Otsu", "Percentile",
>> "RenyiEntropy", "Shanbhag", "Triangle", "Yen"); // the threshold
>> method applied by Multithresholder minCirc = 0.00; // the minimum
>> circularity for a particle maxCirc = 1.00; // the maximum circularity
>> for a particle excludeEdge = true; APExclude = ""; watershed = false;
>>
>> //Prompt for a folder that contains the images and text files from the
>> ESEM dir = getDirectory("Choose a Directory ");
>>
>> //Get the correct values to set the scale distance_pixels =
>> getNumber("Distance in pixels?", 313); known_um = getNumber("Known
>> distance?", 200); minArea = (known_um/distance_pixels)^2; // the
>> minimum area to be considered as a particle in um, one pixel in um
>> maxArea = 10000; // the maximum area to be considered as a particle in
>> um, equations only relevant for diameter of particle below 100 um
>>
>> Dialog.create("Segmentation parameters"); Dialog.addNumber("Rolling
>> ball diameter (0=don't subtract):", rolling); //1
>> Dialog.addNumber("Gaussian blur diameter (0=don't blur):", sigma); //2
>> Dialog.addChoice("Threshold method:", thresholdMethod); //3
>> //Dialog.addNumber("Minimum particle area (um):", minArea); //4
>> //Dialog.addString("Maximum particle area (um):", maxArea); //5
>> Dialog.addNumber("Minimum particle circularity:", minCirc); //6
>> Dialog.addNumber("Maximum particle circularity:", maxCirc); //7
>> Dialog.addCheckbox("Run watershed", watershed); //8
>> Dialog.addCheckbox("Exclude edge particles", excludeEdge); //9
>> Dialog.show(); rolling = Dialog.getNumber(); //1 sigma =
>> Dialog.getNumber(); //2 thresholdMethod = Dialog.getChoice(); //3
>> //minArea = Dialog.getNumber(); //4 //maxArea = Dialog.getString();
>> //5 minCirc = Dialog.getNumber(); //6 maxCirc = Dialog.getNumber();
>> //7 watershed = Dialog.getCheckbox(); //8 excludeEdge =
>> Dialog.getCheckbox(); //9
>>
>> if (excludeEdge) //will be used later when Analyze Particle is run
>>                            APExclude = "exclude";
>>
>> filenames = getFileList(dir);
>> for (i=0; i<filenames.length; i++){
>>                            imagefile = filenames[i];
>>
>>                            //Open the image and set the scale for the image
>>                            open(dir + imagefile);
>>                            run("Set Scale...",
>> "distance=distance_pixels known=known_um pixel=1 unit=um global");
>>
>>                            //Subtract the background to minimize noise. 50 seems to work well.
>>                            if (rolling > 0)
>>                                                         run("Subtract Background...", "rolling=" + rolling); // + " light"
>>
>>                            //Blur the image a bit.
>>                            if (sigma > 0)
>>                                                         run("Gaussian
>> Blur...", "sigma=" + sigma);
>>
>>                            //Use thresholding, IsoData (1) or Otsu (2) for CT, MaxEntropy (2) or RényiEntropy (1) for PC.
>>                            setAutoThreshold(thresholdMethod + " dark");
>>                            run("Threshold...");
>>                            setOption("BlackBackground", false);
>>                            run("Convert to Mask");
>>
>>                            //Close the particles and fill the holes that might arise from closing.
>>                            run("Close-");
>>                            run("Fill Holes");
>>
>>                            //Watershed gets a few more particles and segments particles that are supposed to be divided.
>>                            if (watershed)
>>
>> run("Watershed");
>>
>>                            //Analyze the particles in the image.
>>                            run("Analyze Particles...", "size=" +
>> minArea + "-" + maxArea + " circularity=" + minCirc + "-" + maxCirc +
>> " show=Outlines display " + APExclude + " clear summarize");
>>
>>                            //Select the Results window
>>                            selectWindow("Results");
>>                            //Save the Results to a file both as .txt and .xls
>>                            //.txt
>>                            saveAs("text", dir + "Results_" + imagefile);
>>                            //.xls
>>                            index = lastIndexOf(imagefile, ".");
>>                            if (index!=-1)
>>                                                         imagefilenew = substring(imagefile, 0, index);
>>                            imagefilenew = imagefilenew + ".xls";
>>                            saveAs("Results", dir + "Results_" +
>> imagefilenew);
>>
>>                            //Select the particle outlines window
>>                            outlines = "Drawing of " + imagefile;
>>                            selectWindow(outlines);
>>                            //Save the outline drawing produced by the particle analysis
>>                            saveAs("tiff", dir + outlines);
>>
>>                            //Copy the particle outlines window and add it to the original image file
>>                            close(imagefile);
>>                            open(dir + imagefile);
>>                            selectWindow(imagefile);
>>                            run("RGB Color"); //original image file is changed from 8-bit to RGB color
>>                            imageCalculator('AND', imagefile, outlines);
>>                            saveAs("tiff", dir + "Overlay_" +
>> imagefile);
>>
>>                            print("\\Clear");
>>                            run("Clear Results"); }
>>
>> //Select the Summary window
>> selectWindow("Summary");
>> //Save the Summary to a txt file
>> saveAs("text", dir + "Summary");
>>
>> //Create a file with all the information about how the image has been
>> manipulated criteriaPath = dir + "PSA_criteria.csv"; criteriaFile =
>> File.open(criteriaPath); print(criteriaFile, "rolling, sigma,
>> thresholdMethod, minArea, maxArea, minCirc, maxCirc, excludeEdge,
>> watershed, distance, known"); //writes to the open file criteriaFile
>> print(criteriaFile, rolling + ", " + sigma + ", " + thresholdMethod +
>> ", " + minArea + ", " + maxArea + ", " + minCirc + ", " + maxCirc + ",
>> " + excludeEdge + ", " + watershed + ", " + distance_pixels + ", " +
>> known_um); //writes to the open file criteriaFile
>> File.close(criteriaFile);
>>
>> //Close all open windows
>> close("\\Others");
>> close();
>> list = getList("window.titles");
>> for (j=0; j<list.length; j++){
>>    windowname = list[j];
>>    selectWindow(windowname);
>>    run("Close");
>> }
>>
>> Best regards,
>> Mariam
>>
>> --
>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>> <PC3940_Compo_02.tif>
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html