/** * Batch splt channels * * Allows to split the channels of images with an arbitrary number of dimensions. The tool works * in batch mode on all images (of two possible types) in a given folder. The results of images type 1 * will be written into folders sim/c1, sim/c2, etc. those of type 2 into folders widefield/c1, widefield/c2, etc. * * If you have only one image type use the first image type to set it. * * written 2014 by Volker Baecker (INSERM) at Montpellier RIO Imaging (www.mri.cnrs.fr) */ var _IMAGE_TYPE1 = "SIR_ALX.dv"; var _IMAGE_TYPE2 = "PRJ_ALX.dv"; var _RESULT_FOLDER1 = "sim"; var _RESULT_FOLDER2 = "widefield"; var _DO_PROJECTION = false; var _PROJECTION_METHOD = "Max Intensity"; var _ALL_IMAGES_IN_ONE_FILE = false; var _DIR; var _MAX_PROGRESS; var _CURRENT_PROGRESS; var helpURL = "http://dev.mri.cnrs.fr/projects/imagej-macros/wiki/Batch_Split_Channels"; macro "batch split channels [f8]" { batchSplitChannels(); } macro "batch split channels (f8) Action Tool - C000D10D11D12D13D14D15D16D17D18D19D1aD1bD20D21D22D23D24D25D26D27D28D29D2aD30D31D32D33D34D35D36D37D38D39D3fD40D41D42D43D44D45D46D47D48D4eD4fD50D51D52D53D54D55D56D57D5dD5eD5fD60D61D62D63D64D65D66D6cD6dD6eD6fD70D71D72D73D74D75D7bD7cD7dD7eD7fD80D81D82D83D84D8aD8bD8cD8dD8eD8fD90D91D92D93D99D9aD9bD9cD9dD9eD9fDa0Da1Da2Da8Da9DaaDabDacDadDaeDafDb0Db1Db8Db9DbaDbbDbcDbdDbeDbfDc0Dc7Dc8Dc9DcaDcbDccDcdDceDcfDd6Dd7Dd8Dd9DdaDdbDdcDddDdeDdfDe5De6De7De8De9DeaDebDecDedDeeDefDf4Df5Df6Df7Df8Df9DfaDfbDfcDfdDfeDffC000D1fC788D95C334D1cDc6Dd0Dd5De4CbbcDc5Dd4C333D2bD3aD49D58D67D76Da3Db2Dc1CaabDb3Dc2Dd1C888D00D01D02D03D04D05D06D07D08D09D0aD0bD0cD0fCddeDc4Dd3C333D3eD4dD5cD6bD7aD89D98Da7CaabD3dD5bD6aD79D88D97De0C455Df0Df2CcddD2dD3cD4bD5aD69D78D87Da5Db4Dc3Dd2De2CabbD2cD3bD4aD59D68D77D86Da6CddeDb5C222Df3C99aD2eCccdD96CabbDa4De3C555Df1C011D2fDb7C888D0eC233D85D94CaaaD4cCcddDe1C677D1eC9aaD1dDb6C899D0d" { batchSplitChannels(); } macro "batch split channels (f8) Action Tool Options" { Dialog.create("Batch Split Channels Options"); Dialog.addString("image type 1", _IMAGE_TYPE1); Dialog.addString("image type 2", _IMAGE_TYPE2); Dialog.addString("result folder 1", _RESULT_FOLDER1); Dialog.addString("result folder 2", _RESULT_FOLDER2); Dialog.addCheckbox("do projection", _DO_PROJECTION); Dialog.addChoice("projection method", newArray("Average Intensity", "Max Intensity", "Min Intensity", "Sum Slices", "Standard Deviation", "Median"), _PROJECTION_METHOD); Dialog.addCheckbox("all images in one file", _ALL_IMAGES_IN_ONE_FILE); Dialog.addMessage("Press the help button below to open the online help!"); Dialog.addHelp(helpURL); Dialog.show(); _IMAGE_TYPE1 = Dialog.getString(); _IMAGE_TYPE2 = Dialog.getString(); _RESULT_FOLDER1 = Dialog.getString(); _RESULT_FOLDER2 = Dialog.getString(); _DO_PROJECTION = Dialog.getCheckbox(); _PROJECTION_METHOD = Dialog.getChoice(); _ALL_IMAGES_IN_ONE_FILE = Dialog.getCheckbox(); } function batchSplitChannels() { setBatchMode(true); print("\\Clear"); getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, second, msec); ts = toString(dayOfMonth) + "-" + (month+1) + "-" + year + " " + hour + ":" + minute + ":" + second + "." + msec; IJ.log("STARTED batch split channels: " + ts); _DIR = getDirectory("select the input folder"); files = getFileList(_DIR); splitChannelsOfFiles(files); getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, second, msec); ts = toString(dayOfMonth) + "-" + (month+1) + "-" + year + " " + hour + ":" + minute + ":" + second + "." + msec; IJ.log("FINISHED batch split channels: " + ts); setBatchMode("exit & display"); } function splitChannelsOfFiles(files) { filesType1 = filterInterestingFiles(files, _IMAGE_TYPE1); filesType2 = filterInterestingFiles(files, _IMAGE_TYPE2); _MAX_PROGRESS = filesType1.length + filesType2.length; if (_MAX_PROGRESS ==0) { IJ.log("No files selected! Macro stopped."); return; } _CURRENT_PROGRESS = 0; if (filesType1.length>0) File.makeDirectory(_DIR + "/" + _RESULT_FOLDER1); if (filesType2.length>0 || _ALL_IMAGES_IN_ONE_FILE) File.makeDirectory(_DIR + "/" + _RESULT_FOLDER2); splitAll(filesType1, toString(_DIR) + "/" + _RESULT_FOLDER1) ; splitAll(filesType2, toString(_DIR) + "/" + _RESULT_FOLDER2) ; } function splitAll(files, targetFolder) { for (i=0; i0; d--) { if (!_ALL_IMAGES_IN_ONE_FILE) saveChannels(d, targetFolder); else { c = round(d / 2); image = d % 2; targetFolder = toString(_DIR) + "/" + _RESULT_FOLDER2; if (image==1) targetFolder = toString(_DIR) + "/" + _RESULT_FOLDER1; saveChannels(c, targetFolder); } } _CURRENT_PROGRESS = _CURRENT_PROGRESS + 1; } } function saveChannels(d, targetFolder) { folder = targetFolder+"/C" + toString(d); print(folder); if (!File.exists(folder)) File.makeDirectory(folder); title = getTitle(); parts = split(title, "."); save(folder + "/" + parts[0] + ".tif"); if (slices>1 && _DO_PROJECTION) { run("Z Project...", "start=1 stop="+slices+" projection=" + "[" + _PROJECTION_METHOD + "]"); title = getTitle(); parts = split(title, "."); save(folder + "/" + parts[0] + ".tif"); close(); } close(); } function filterInterestingFiles(files, suffix) { counter = 0; for (i=0; i