/** * MRI Microtubules Tool * Collaborators: * Aurélie BAK * * Measure the length of the microtubules network in 3D * * (c) 2012, INSERM * written by Volker Baecker at Montpellier RIO Imaging (www.mri.cnrs.fr) * */ var helpURL = "http://dev.mri.cnrs.fr/wiki/imagej-macros/Microtubules_Tool_(3D)"; var BRANCH_INFORMATION_WIN_TITLE = "Branch information"; var CHANNEL = 1; var SMOOTHING_METHOD = "Gaussian"; var SMOOTHING_METHODS = newArray("Gaussian", "Uniform", "Median"); var SMOOTHING_SIGMA = 0.1; var USE_SMOOTHING = true; var USE_AUTO_THRESHOLD = false; var AUTO_THRESHOLD_METHODS = getList("threshold.methods"); var AUTO_THRESHOLD_METHOD = "Default"; var THRESHOLD_VALUE = 21; var OPEN_IN_3D_VIEWER = false; var VOLUME_CHANNEL = 3; var VOLUME_SMOOTHING_METHOD = "Gaussian"; var VOLUME_SMOOTHING_METHODS = newArray("Gaussian", "Uniform", "Median"); var VOLUME_SMOOTHING_SIGMA = 0.1; var VOLUME_USE_SMOOTHING = true; var VOLUME_USE_AUTO_THRESHOLD = true; var VOLUME_AUTO_THRESHOLD_METHODS = getList("threshold.methods"); var VOLUME_AUTO_THRESHOLD_METHOD = VOLUME_AUTO_THRESHOLD_METHODS[1]; var VOLUME_THRESHOLD_VALUE = 21; var VOLUME_MIN_SIZE = 5000; var VOLUME_MAX_SIZE = 8912896; macro "Unused Tool - C037" { } macro "MRI Microtubules Tool Help Action Tool - Cf00D39D3aD3bD3cD3dD48D57D58D63D64D65D66D67D6eD72D73D7dD7eD82D83D8cD8dD93D94D98D99D9bD9cDa5Da6Da7Da8Da9DaaDabDb5Db6DbaDbbDc6Dc7DcbDccDd7DdcDe7De8DedDeeDf8Df9CfffD00D01D02D03D04D05D06D07D08D09D0aD0bD0cD0dD0eD0fD10D11D12D13D14D15D16D17D18D19D1aD1bD1cD1dD1eD1fD20D21D22D23D24D25D26D27D28D29D2aD2bD2cD2dD2eD2fD30D31D32D33D34D35D36D37D38D3eD3fD40D41D42D43D44D45D46D47D49D4aD4bD4cD4dD4eD4fD50D51D52D53D54D55D56D59D5aD5bD5cD5dD5eD5fD60D61D62D68D69D6aD6bD6cD6dD6fD70D71D74D75D76D77D78D79D7aD7bD7cD7fD80D81D84D85D86D87D88D89D8aD8bD8eD8fD90D91D92D95D96D97D9aD9dD9eD9fDa0Da1Da2Da3Da4DacDadDaeDafDb0Db1Db2Db3Db4Db7Db8Db9DbcDbdDbeDbfDc0Dc1Dc2Dc3Dc4Dc5Dc8Dc9DcaDcdDceDcfDd0Dd1Dd2Dd3Dd4Dd5Dd6Dd8Dd9DdaDdbDddDdeDdfDe0De1De2De3De4De5De6De9DeaDebDecDefDf0Df1Df2Df3Df4Df5Df6Df7DfaDfbDfcDfdDfeDff"{ run('URL...', 'url='+helpURL); } macro "Measure length of microtubules Action Tool - C037T4d14m"{ dir = getDirectory("image"); image = getInfo("image.filename"); title = getTitle(); outFolder = dir + "/skeletons"; controlFolder = dir + "/skeletons-control"; getDimensions(width, height, channels, slices, frames); Stack.setChannel(CHANNEL); run("Reduce Dimensionality...", " slices"); if (USE_SMOOTHING) { if (SMOOTHING_METHOD=="Median") run("Median (3D)"); else run("Smooth (3D)", "method="+SMOOTHING_METHOD+" sigma=" + SMOOTHING_SIGMA + " use"); } else { run("Duplicate...", "title=[" + title +"] duplicate channels="+CHANNEL+"-"+CHANNEL+" slices=1-"+slices); } if (USE_AUTO_THRESHOLD) setAutoThreshold(AUTO_THRESHOLD_METHOD + " dark stack"); else setThreshold(THRESHOLD_VALUE, 255); run("Convert to Mask", " black"); run("Skeletonize (2D/3D)"); run("Analyze Skeleton (2D/3D)", "prune=[shortest branch] show"); close(); if (!File.exists(outFolder)) File.makeDirectory(outFolder); saveAs("tiff", outFolder + "/" + image+"-skeleton"); skeletonImage = getTitle(); run("Duplicate...", "title=[" + skeletonImage +"-w] duplicate channels="+1+"-"+1+" slices=1-"+slices); if (!File.exists(controlFolder)) File.makeDirectory(controlFolder); run("Merge Channels...", "red=["+skeletonImage+"] green=["+title+"] blue=*None* gray=*None*"); rgb = getTitle(); if (OPEN_IN_3D_VIEWER) { run("3D Viewer"); call("ij3d.ImageJ3DViewer.setCoordinateSystem", "false"); call("ij3d.ImageJ3DViewer.add", rgb, "None", "RGB", "0", "true", "true", "true", "1", "0"); } run("Z Project...", "start=1 stop="+slices+" projection=[Max Intensity]"); saveAs("tiff", controlFolder + "/" + image+"-control"); selectWindow(rgb); close(); selectWindow(BRANCH_INFORMATION_WIN_TITLE); branchMeasurements = getInfo("window.contents"); lines = split(branchMeasurements, "\n"); totalBranchLength = 0; for (i=1; i