Hello,
Using the doWand to remove binary regions is quite slow compared to the floodfill method (floodfill is approx 74 times faster in normal macro mode and approx 260 faster (!) in batch mode in the example below).

But more importantly, I just noted that the doWand method fails to remove all regions from the image. Running the macro below you find many remaining regions close the the top and right borders on the result image 1. I suspect that the wand is missing some 8-connected pixels that form part of the boundary of regions touching at the image borders.


- - - - -
newImage("Untitled", "8-bit black", 2048, 2048, 1);
run("Add Noise");
setThreshold(0, 5);
setOption("BlackBackground", true);
run("Convert to Mask");
run("Duplicate...", "title=1");
run("Analyze Particles...", "minimum=1 maximum=999999 bins=20 show=Nothing clear record");
selectImage("1");
t0=getTime();
for (i=0; i<nResults; i++) {
   x = getResult('XStart', i);
   y = getResult('YStart', i);
       doWand(x,y);
       run("Clear");
}
print ("Wand: "+getTime()-t0+" ms.");


selectImage("Untitled");
run("Duplicate...", "title=2");
setColor(0);
selectImage("2");

t0=getTime();
for (i=0; i<nResults; i++) {
   x = getResult('XStart', i);
   y = getResult('YStart', i);
   floodFill(x, y, "8-connected");
}
print ("Floodfill: "+getTime()-t0+" ms.");

- - - - -

Regards

Gabriel




On 22/03/2024 00:43, Wayne Rasband wrote:
The “Record starts” checkbox has been replaced by “Overlay” but macros that use 
the ‘record’ keyword continue to work.

Here is an updated version of the CircularParticles macro linked to in the 
ImageJ User Guide that uses ‘overlay’ instead of ‘record’:

// This macro demonstrates how to erase non-circular objects
run("Blobs (25K)");
setThreshold(125, 248);
run("Set Measurements...", "area perimeter circularity decimal=3");
run("Analyze Particles...", "clear overlay");
for (i=0; i<nResults; i++) {
    circularity = getResult('Circ.', i);
    if (circularity<0.85) {
        Overlay.activateSelection(i);
        run("Clear");
    }
}
run("Select None");
exit;

// Original version that uses "Record starts"
run("Select None");
requires("1.29n");
run("Blobs (25K)");
setThreshold(125, 248);
run("Set Measurements...", "area perimeter circularity decimal=3");
run("Analyze Particles...", "minimum=1 maximum=999999 bins=20 show=Nothing clear 
record");
for (i=0; i<nResults; i++) {
    x = getResult('XStart', i);
    y = getResult('YStart', i);
    circularity = getResult('Circ.', i);
    if (circularity<0.85) {
        doWand(x,y);
        run("Clear");
    }
}
run("Select None");

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

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

Reply via email to