title = getTitle(); name = newArray("Pores", "LSM", "YSZ"); color = newArray(0,50,100); periodHeading = newArray("x","y","z"); periodString = ""; period = newArray(false,false,false); direction = newArray(true,true,true,true,true,true); directionHeading = newArray("x+","y+","z+","x-","y-","z-"); directionString = newArray("","",""); connectHeading = newArray("6","18","26"); unknown = newArray(3); Dialog.create("Parameters"); for (i = 0; i < 3; i++) { Dialog.addString("Name material "+i+": ", name[i]); Dialog.addNumber("Color material "+i+": ", color[i]); } Dialog.addCheckbox("Check connectivity", true); Dialog.addMessage("Periodicity"); Dialog.addCheckboxGroup(1,3,periodHeading,period); Dialog.addChoice("3D",connectHeading,"6"); Dialog.show(); for (i = 0; i < 3; i++) { name[i] = Dialog.getString(); color[i] = Dialog.getNumber(); } isConnect = Dialog.getCheckbox(); for (i = 0; i < 3; i++) period[i] = Dialog.getCheckbox(); if (period[0]) periodString += "x "; if (period[1]) periodString += "y "; if (period[2]) periodString += "z "; connect = Dialog.getChoice(); item = newArray("Active", "Inactive"); if (isConnect) { Dialog.create("Connectivity"); for (i = 0; i < 3; i++) { Dialog.addMessage("Connectivity "+name[i]); Dialog.addCheckboxGroup(2,3,directionHeading,direction); Dialog.addCheckbox("Unknown "+name[i]+" considered active", true); } Dialog.show(); for (i = 0; i < 3; i++) { for (j = 0; j < 6; j++) direction[j] = Dialog.getCheckbox(); unknown[i] = Dialog.getCheckbox(); if (direction[0]) directionString[i] = directionString[i] + "x+ "; if (direction[1]) directionString[i] = directionString[i] + "y+ "; if (direction[2]) directionString[i] = directionString[i] + "z+ "; if (direction[3]) directionString[i] = directionString[i] + "x- "; if (direction[4]) directionString[i] = directionString[i] + "y- "; if (direction[5]) directionString[i] = directionString[i] + "z- "; } } start = getTime(); for (i = 0; i < 3; i++) { selectWindow(title); IJ.log(name[i]); run("Duplicate...", "title="+name[i]+" duplicate range=1-"+nSlices()); run("Extract Color", "color="+color[i]+" statistic"); if (isConnect) { if (unknown[i]) color_unknown = 255; else color_unknown = 0; run("Extract Connect", directionString[i] + periodString + "3D="+connect+" statistic active=255 inactive=0 unknown="+color_unknown); } run("Divide...", "value=255 stack"); run("Multiply...", "value="+(i+1)+" stack"); IJ.log(""); } imageCalculator("Add create stack", name[0], name[1]); imageCalculator("Add create stack", "Result of "+name[0], name[2]); for (i=0; i < 3; i++) { selectWindow(name[i]); close; } selectWindow("Result of "+name[0]); close(); selectWindow("Result of Result of "+name[0]); rename("TPB"); //run("Duplicate...", "title=TPB duplicate range=1-"+nSlices()); //selectWindow("Result of Result of "+name[0]); selectWindow(title); run("Extract Interface", "color_1="+color[1]+" color_2="+color[2]+" 3d="+connect); imageCalculator("Add create stack", "TPB", "interface"); selectWindow("TPB"); close(); selectWindow("interface"); close(); selectWindow("Result of TPB"); rename("TPB"); run("Extract Connect Interface", "color_0=1 color_1=2 color_2=3 color_unconnect=0 color_interface=255 3d="+connect+" statistic"); rename("Sorting TPBs"); end = getTime(); IJ.log(""); IJ.log("Finished ("+((end-start)/1000)+" s)");