-
Notifications
You must be signed in to change notification settings - Fork 0
/
Binarize_and_save_rois.py
131 lines (86 loc) · 3.06 KB
/
Binarize_and_save_rois.py
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from ij import IJ, Prefs
from ij.plugin.frame import RoiManager
from ij.io import DirectoryChooser
from ij.plugin.filter import BackgroundSubtracter
import os
import glob
import re
from org.python.core import codecs
codecs.setDefaultEncoding('utf_8')
def get_file_info(f):
img_dir = IJ.openImage(f).getOriginalFileInfo().directory
img_file = IJ.openImage(f).getOriginalFileInfo().fileName
name, ext = os.path.splitext(img_file)
return img_dir, name
def make_roi_dir(img_dir):
roi_dir = os.path.join(img_dir, "RoiSets")
if not os.path.exists(roi_dir):
os.makedirs(roi_dir)
return roi_dir
else:
return roi_dir
pass
def getNextIndex(l, pattern = '._RoiSet_(\d).zip'):
result_list = [re.findall(pattern, string) for string in l]
def flatten(nested):
"""2重リストを解消"""
return [item for inner in nested for item in inner]
result_l = flatten(result_list)
return int(max(result_l)) + 1
def make_roi_path(roi_dir, name):
roi_sets = glob.glob(roi_dir + os.sep + name + "*" + ".zip")
if not roi_sets:
roi_path = os.path.join(roi_dir, "{0}_RoiSet_1.zip".format(name))
else:
num = getNextIndex(roi_sets)
roi_path = os.path.join(roi_dir, "{0}_RoiSet_{1}.zip".format(name, num))
return roi_path
def binarize(f):
Prefs.blackBackground = True
imp = IJ.openImage(f)
if imp:
binimp = imp.duplicate()
bs = BackgroundSubtracter()
ip = binimp.getProcessor()
bs.rollingBallBackground(ip, 15, False, False, False, True, True)
IJ.run(binimp, "Unsharp Mask...", "radius=2 mask=0.9")
def smooth(n=1):
for i in range(n):
IJ.run(binimp, "Smooth", "")
smooth(10)
IJ.setAutoThreshold(binimp, "Moments dark")
IJ.run(binimp, "Make Binary", "thresholded remaining")
smooth(12)
IJ.setAutoThreshold(binimp, "Moments white")
IJ.run(binimp, "Make Binary", "thresholded remaining")
IJ.run(binimp, "Erode", "")
IJ.run(binimp, "Dilate", "")
IJ.run(binimp, "Analyze Particles...", "size=250-Infinity circularity=0.2-1.00 exclude clear add")
binimp.close()
else:
pass
def save_roi_set(f):
img_dir, name = get_file_info(f)
roi_dir = make_roi_dir(img_dir)
roi_path = make_roi_path(roi_dir, name)
rm = RoiManager().getInstance()
rm.deselect()
rm.runCommand("Save",roi_path)
rm.runCommand("delete")
def bin_save_rois(f):
binarize(f)
save_roi_set(f)
def get_tif_list(parent_dir = DirectoryChooser("Choose").getDirectory()):
if parent_dir is not None:
tif_list = glob.glob(parent_dir + "*" + ".tif")
return tif_list
else:
pass
def apply_list(func, file_list):
if file_list is not None:
for file in file_list:
func(file)
else:
pass
tiffs = get_tif_list()
apply_list(func = bin_save_rois, file_list=tiffs)