Posted by
Rainer M. Engel on
Jan 23, 2020; 9:37am
URL: http://imagej.273.s1.nabble.com/Apply-WEKA-segmentation-script-tp5022890.html
Hey..
I tried WEKA automation via macro and despite of all the available
commands this seems to be not that ideal, although this is a clear
drawback considering the GUI for a nice way to create robust models,
which shall/could also be applied via macro (batch).
To wait for the UI to pop up could be enhanced via..
>> macro language..........................................START
wekaNotReady = true;
c = 0;
while (wekaNotReady && c < 60) {
if (isOpen("Trainable Weka Segmentation v3.2.33") == true) {
wekaNotReady = false; }
wait(50);
c++;
}
<< macro language............................................END
But I could not work with batch mode and WEKA (macro).
So this BeanShell-Script offers the same functionality like the known
"Apply SIOX segmentator" for SIOX but in this case for WEKA (only a
modification of a script, which was part of the WEKA documentation.
>> BeanShell language (Apply-saved-WEKA-segmentator.bsh).........START
// @File(label="Weka model", description="Select the Weka model to
apply") modelPath
// @String(label="Result mode",choices={"Labels","Probabilities"})
resultMode
import trainableSegmentation.WekaSegmentation;
import trainableSegmentation.utils.Utils;
import ij.io.FileSaver;
import ij.IJ;
import ij.ImagePlus;
// based on the beanshell script found on:
//
https://imagej.net/Scripting_the_Trainable_Weka_Segmentation modified
by rengel, 2020-01
// starting time
startTime = System.currentTimeMillis();
// caculate probabilities?
getProbs = resultMode.equals( "Probabilities" );
// create segmentator
segmentator = new WekaSegmentation();
// load classifier
segmentator.loadClassifier( modelPath.getCanonicalPath() );
// get details from already opened image
image = IJ.getImage();
//IJ.log(""+image);
// apply classifier and get results (0 indicates number of threads is
auto-detected)
result = segmentator.applyClassifier( image, 0, getProbs );
if( !getProbs )
// assign same LUT as in GUI
result.setLut( Utils.getGoldenAngleLUT() );
// show result
result.show();
// force garbage collection (important for large images)
result = null;
image = null;
System.gc();
// print elapsed time
estimatedTime = System.currentTimeMillis() - startTime;
IJ.log( "** Finished processing image in " + estimatedTime + " ms **" );
<< BeanShell language............................................END
I put the "Apply-saved-WEKA-segmentator.bsh" into a sub-folder of
'scripts' to see this script in the menu of ImageJ, but it is not shown,
although my Python scripts are. Any help on this is much appreciated.
Kind regards,
Rainer
--
Rainer M. Engel
Berlin
--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html