/** * XYZ Projection Tool * * Create the projections along the x, y and z axis. The macro will create a z-projection and reslice the stack along the x and y axis * and create a projection of the results in one step. * * written 2016 by Volker Baecker (INSERM) at Montpellier RIO Imaging (www.mri.cnrs.fr) */ var helpURL = "http://dev.mri.cnrs.fr/projects/imagej-macros/wiki/XYZ_Projection_Tool"; var _PROJECTION_TYPES = newArray("Average Intensity", "Max Intensity", "Min Intensity", "Sum Slices", "Standard Deviation", "Median"); var _PROJECTION_TYPE = "Max Intensity"; var _CLOSE_OLD_IMAGES = true; var _X_OFFSET = 1; var _Y_OFFSET = 1; var _COMBINE = false; var _LAST_TOP_ID; var _LAST_LEFT_ID; var _LAST_Z_ID; var _LAST_COMBINED_ID; function showHelp() { run('URL...', 'url='+helpURL); } macro "project [f2]" { project(); } macro "XYZ Projection (f2) Action Tool - C000D13D14D15D16D17D18D23D24D25D26D27D28D41D42D43D44D45D46D47D48D49D4aD4bD5bD6bD73D74D75D76D77D78D7bD7dD7eD83D84D85D86D87D88D8bD8dD8eD93D94D95D96D97D98D9bD9dD9eDa3Da4Da5Da6Da7Da8DabDadDaeDb3Db4Db5Db6Db7Db8DbbDbdDbeDcbDdbDebC000C111C222C333C444C555C666C777C888C999CaaaCbbbCcccCdddCeeeCfff" { project(); } macro "XYZ Projection (f2) Action Tool Options" { Dialog.create("XYZ-Projection Options"); Dialog.addChoice("projection type:", _PROJECTION_TYPES, _PROJECTION_TYPE); Dialog.addCheckbox("combine projections", _COMBINE); Dialog.addCheckbox("close old projections", _CLOSE_OLD_IMAGES); Dialog.addNumber("window offset x:", _X_OFFSET); Dialog.addNumber("window offset y:", _Y_OFFSET); Dialog.addHelp(helpURL); Dialog.show(); _PROJECTION_TYPE = Dialog.getChoice(); _COMBINE = Dialog.getCheckbox(); _CLOSE_OLD_IMAGES = Dialog.getCheckbox(); _X_OFFSET = Dialog.getNumber(); _Y_OFFSET = Dialog.getNumber(); } function project() { if (_CLOSE_OLD_IMAGES) { if (isOpen(_LAST_TOP_ID)) closeImage(_LAST_TOP_ID); if (isOpen(_LAST_LEFT_ID)) closeImage(_LAST_LEFT_ID); if (isOpen(_LAST_Z_ID)) closeImage(_LAST_Z_ID); if (isOpen(_LAST_COMBINED_ID)) closeImage(_LAST_COMBINED_ID); } setBatchMode(true); idInput = getImageID(); getLocationAndSize(xIn, yIn, widthIn, heightIn); Stack.getDimensions(width, height, channels, slices, frames) run("Z Project...", "projection=["+_PROJECTION_TYPE+"]"); idZ = getImageID(); selectImage(idInput); run("Reslice [/]...", "start=Top avoid"); idTemp = getImageID(); run("Z Project...", "projection=["+_PROJECTION_TYPE+"]"); idTop = getImageID(); selectImage(idTemp); close(); selectImage(idInput); run("Reslice [/]...", "start=Left rotate avoid"); idTemp = getImageID(); run("Z Project...", "projection=["+_PROJECTION_TYPE+"]"); idLeft = getImageID(); selectImage(idTemp); close(); setBatchMode("exit and display"); selectImage(idZ); titleZ = getTitle(); if (!_COMBINE) { setLocation(xIn+widthIn+_X_OFFSET, yIn); selectImage(idZ); getLocationAndSize(xZ, yZ, widthZ, heightZ); } selectImage(idTop); titleTop = getTitle(); if (!_COMBINE) setLocation(xZ, yZ+heightZ+_Y_OFFSET); selectImage(idLeft); titleLeft = getTitle(); if (!_COMBINE) setLocation(xZ+widthZ+_X_OFFSET, yZ); _LAST_Z_ID = idZ; _LAST_TOP_ID = idTop; _LAST_LEFT_ID = idLeft; if (_COMBINE) { run("Combine...", "stack1=["+titleZ+"] stack2=["+titleTop+"] combine"); titleCombined = getTitle(); run("Combine...", "stack1=["+titleCombined+"] stack2=["+titleLeft+"]"); setLocation(xIn+widthIn+_X_OFFSET, yIn); _LAST_COMBINED_ID = getImageID(); } } function closeImage(id) { selectImage(id); close(); }