-
Notifications
You must be signed in to change notification settings - Fork 0
/
Batch_RGB_Merge.ijm
105 lines (99 loc) · 3.41 KB
/
Batch_RGB_Merge.ijm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// "Batch RGB Merge"
// Opens multiple sets of three separate color channels as
// an RGB stack or converts them to RGB images. File names
// ending in "d1", "d2" and "d0" are assumed to be red, green
// and blue channels respectively, but this can be changed in
// the dialog box.
// A sample image set, courtesy of Mikael Bjorklund, is available at:
// http://rsb.info.nih.gov/ij/macros/images/DrosophilaCells.zip
// It consists of three images of Drosophila S2 cells,
// each with three channels (d0=blue, d1=red and d2=green
// as indicated by the end of the filename. The staining is
// standard Hoechst, phalloidin, tubulin.
Dialog.create("RGB Batch Convert");
Dialog.addString("Red Suffix:", "d1");
Dialog.addString("Green Suffix:", "d2");
//Dialog.addString("Blue Suffix:", "d0");
Dialog.addCheckbox("Open as Stack", true);
Dialog.show();
redSuffix = Dialog.getString() + ".";
greenSuffix = Dialog.getString() + ".";
//blueSuffix = Dialog.getString() + ".";
openAsStack = Dialog.getCheckbox();
if (openAsStack)
openImagesAsStack();
else
batchConvert();
exit;
function openImagesAsStack() {
dir = getDirectory("Choose Source Directory ");
list = getFileList(dir);
setBatchMode(true);
n = list.length;
if ((n%2)!=0)
exit("The number of files must be a multiple of 3");
stack = 0;
first = 0;
for (i=0; i<n/2; i++) {
showProgress(i+1, n/3);
red="?"; green="?";
//red="?"; green="?"; blue="?";
for (j=first; j<first+3; j++) {
if (indexOf(list[j], redSuffix)!=-1)
red = list[j];
if (indexOf(list[j], greenSuffix)!=-1)
green = list[j];
}
open(dir+red);
open(dir+green);
// open(dir+blue);
//run("RGB Merge...", "red=["+red+"] green=["+green+"] blue=["+blue+"]");
run("RGB Merge...", "magenta=["+red+"] green=["+green+"] ");
width=getWidth; height=getHeight;
run("Copy");
close();
if (stack==0) {
newImage("RGB Stack", "RGB Black", width, height, n/3);
stack = getImageID;
}
selectImage(stack);
setSlice(i+1);
run("Paste");
index = indexOf(red, redSuffix);
name = substring(red, 0, index);
setMetadata(name);
first += 3;
}
setSlice(1);
run("Select None");
setBatchMode(false);
}
function batchConvert() {
dir1 = getDirectory("Choose Source Directory ");
dir2 = getDirectory("Choose Destination Directory ");
list = getFileList(dir1);
setBatchMode(true);
n = list.length;
if ((n%2)!=0)
exit("The number of files must be a multiple of 2");
stack = 0;
first = 0;
for (i=0; i<n/2; i++) {
showProgress(i+1, n/2);
red="?"; green="?";
for (j=first; j<first+2; j++) {
if (indexOf(list[j], redSuffix)!=-1)
red = list[j];
if (indexOf(list[j], greenSuffix)!=-1)
green = list[j];
}
open(dir1 +red);
open(dir1 +green);
//open(dir1 +blue);
run("RGB Merge...", "red=["+red+"] green=["+green+"]");
index = indexOf(red, redSuffix);
name = substring(red, 0, index);
saveAs("tiff", dir2+name);
first += 2;
}
}