//Needs 3D ImageJ suite, ImageScience and IJPB added to Fiji Dialog.create("Set cutoff"); Dialog.addNumber("Threshold: ", 330.0); Dialog.addNumber("Padding (pixels): ", 0); Dialog.addNumber("Minimum object size (pixels): ", 1000); Dialog.addCheckbox("Use uncalibrated pixel value?",false); Dialog.addCheckbox("Crop? ", true); Dialog.addDirectory("Batch folder (blank for open images): ", ""); Dialog.show(); threshold = Dialog.getNumber(); buffer = Dialog.getNumber(); minSize = Dialog.getNumber(); calibrated = !Dialog.getCheckbox(); crop = Dialog.getCheckbox(); dir = Dialog.getString(); if(dir == ""){ list = getList("image.titles"); setBatchMode(true); for (i = 0; i < list.length; i++) { selectImage(list[i]); processImage(getTitle()); } setBatchMode(false); } else{ filelist = getFileList(dir); outputFolder = dir + File.separator + "Output"; File.makeDirectory(outputFolder); for (i = 0; i < lengthOf(filelist); i++) { if (endsWith(filelist[i], ".tif")) { open(dir + File.separator + filelist[i]); imgTitle = getTitle(); processImage(imgTitle); selectImage(imgTitle); close(); list = getList("image.titles"); for(j=0; j < lengthOf(list); j++){ selectImage(list[j]); saveAs("tiff", outputFolder + File.separator + getTitle()); } close("*"); } } setBatchMode(false); } function processImage(title){ dims = newArray(6); Stack.getStatistics(voxelCount, mean, min, tMax, stdDev); if(calibrated){ setThreshold(threshold, tMax); run("Convert to Mask", "method=Default background=Dark black create"); } else{ setThreshold(threshold, Math.ceil(((tMax-calibrate(0))/(calibrate(1)-calibrate(0)))), "raw"); run("Convert to Mask", "method=Default background=Dark black create"); } for(k=0; k