// ---------------------------Dialog box 0-------------------------------- waitForUser("Intensity Modulated Display...", "Open the numerator and denominator image stacks.\nThen press OK..."); openimages = newArray(nImages); for (i=0; i < openimages.length; i++) { selectImage(i+1); // selects (i+1)st image openimages[i] = getTitle(); } // openimages = getList("image.titles"); //THIS FUNCTION DOES NOT WORK!! // ---------------------------Dialog box 1-------------------------------- Dialog.create("Create Intensity Modulated Display..."); Dialog.addChoice("Select Numerator Image Stack: ", openimages); Dialog.addChoice("Select Denominator Image Stack: ", openimages); Dialog.addCheckbox("Smooth prior to division? ", true); Dialog.show(); numimg = Dialog.getChoice(); denimg = Dialog.getChoice(); smooth = Dialog.getCheckbox(); //Creates ratio image... if (smooth == true) { selectWindow(numimg); run("8-bit"); run("Gaussian Blur...", "sigma=1 stack"); selectWindow(denimg); run("8-bit"); run("Gaussian Blur...", "sigma=1 stack"); setBatchMode(true); imageCalculator("Divide create 32-bit stack", numimg, denimg); ratioimg = getTitle(); selectWindow(numimg); //Keep denom image to use for brightness close(); } if (smooth == false) { selectWindow(numimg); run("8-bit"); selectWindow(denimg); run("8-bit"); setBatchMode(true); imageCalculator("Divide create 32-bit stack", numimg, denimg); ratioimg = getTitle(); selectWindow(numimg); //Keep denom image to use for brightness close(); } // ---------------------------Dialog box 2-------------------------------- //Finds the max value in the ratio image in the middle of the stack... selectWindow(ratioimg); getDimensions(ratioimgwidth, ratioimgheight, channels, ratioimgslices, frames); setSlice(floor(ratioimgslices/2)); //picks the middle slice run("Enhance Contrast", "saturated=0.1"); getMinAndMax(min, absmax); //Suggest a max value to display in the ratio image based on its histogram.... run("Enhance Contrast", "saturated=1.00"); getMinAndMax(min, sugmax); Dialog.create("Set Scale..."); Dialog.addSlider("Set maximum displayed value in ratio image: ", 0, absmax, sugmax); Dialog.addSlider("Set % saturation in denominator image: ", 0.5, 5, 1); Dialog.show(); usermax = Dialog.getNumber(); usersat = Dialog.getNumber(); selectWindow(ratioimg); setMinAndMax(0, usermax); // max as selected by user run("8-bit"); run("Invert", "stack"); //Makes high ratios hot and low ratios cool (inherently, red hue = 0 -> blue hue = 170) run("Multiply...", "value=0.666 stack"); // Contstrains hues from 0-170 to match calibration bar (so only red->blue colors are shown) selectWindow(denimg); run("Enhance Contrast", "saturated="+usersat+" process_all"); // as selected by user run("8-bit"); //----------------------Creates HSB Image ------------------------------------- setBatchMode(true); //Creates a Saturation (constant) stack image newImage("Sat", "8-bit white", ratioimgwidth, ratioimgheight, ratioimgslices); //Initializes the final IMD stack image newImage("IMD Stack", "RGB black", ratioimgwidth, ratioimgheight, ratioimgslices); for (i=0; i