#@ File(label="Input directory", description="Select the directory with input images", style="directory") inputDir #@ File(label="Output directory", description="Select the output directory", style="directory") outputDir #@ 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; // starting time startTime = System.currentTimeMillis(); // caculate probabilities? getProbs = resultMode.equals( "Probabilities" ); // create segmentator segmentator = new WekaSegmentation(); // load classifier segmentator.loadClassifier( modelPath.getCanonicalPath() ); // get list of input images listOfFiles = inputDir.listFiles(); for ( i = 0; i < listOfFiles.length; i++ ) { // process only files (do not go into sub-folders) if( listOfFiles[ i ].isFile() ) { // try to read file as image image = IJ.openImage( listOfFiles[i].getCanonicalPath() ); if( image != null ) { // 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() ); // save result as TIFF in output folder outputFileName = listOfFiles[ i ].getName().replaceFirst("[.][^.]+$", "") + " out.tif"; new FileSaver( result ).saveAsTiff( outputDir.getPath() + File.separator + outputFileName ); // force garbage collection (important for large images) result = null; image = null; System.gc(); } } } // print elapsed time estimatedTime = System.currentTimeMillis() - startTime; IJ.log( "** Finished processing folder in " + estimatedTime + " ms **" );