Skip to content

Commit a6ead9b

Browse files
author
““SupermeLiu
committed
v0.2
1 parent c35b42a commit a6ead9b

File tree

812 files changed

+11626
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

812 files changed

+11626
-1
lines changed

1_simulator.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import numpy as np
2+
from klib.baseio import *
3+
from scipy.ndimage import filters as ndfilter
4+
from klib.glib.DrawSimulationSWCModel import simulate3DTreeModel, save_swc
5+
import copy
6+
import cv2 as cv
7+
import multiprocessing as mp
8+
from skimage import morphology
9+
import time
10+
11+
# init parameter
12+
data_type = np.uint8
13+
internal_feature = True
14+
external_feature = True
15+
image_number = 4
16+
17+
# size of training data
18+
size_x = 64
19+
size_y = 64
20+
channel = 16
21+
steps = 8
22+
23+
# data dir
24+
data_image_dir = 'data/sim_img/'
25+
data_label_dir = 'data/sim_label/'
26+
data_swc_dir = 'data/sim_swc/'
27+
28+
train_data_dir = 'data/data_divide/'
29+
train_label_dir = 'data/label_divide/'
30+
31+
def main(img_num):
32+
np.random.seed()
33+
34+
k = 1
35+
# size of fake neuron images
36+
MAX_BOX_Z = 256
37+
MAX_BOX_X = 256 * 2
38+
MAX_BOX_Y = 256
39+
40+
MAX_BOX_WIDTH = [MAX_BOX_Z,MAX_BOX_X,MAX_BOX_Y]
41+
42+
43+
img_sim, label_sim, swc_data = simulate3DTreeModel(MAX_BOX_WIDTH, internal_feature, external_feature, data_type=data_type)
44+
SHAPE = img_sim.shape
45+
46+
img_new = np.zeros([int(SHAPE[0] // 2), int(SHAPE[1]), int(SHAPE[2])], dtype=data_type)
47+
label_new = np.zeros([int(SHAPE[0] // 2), int(SHAPE[1]), int(SHAPE[2])], dtype=np.uint8)
48+
49+
50+
# adjust anisotropic resolutions Z: 1->0.5
51+
for y in range(SHAPE[2]):
52+
img_temp = copy.deepcopy(img_sim[:, :, y:y + 1].reshape((SHAPE[0], SHAPE[1])))
53+
img_temp_1 = cv.resize(img_temp, (int(SHAPE[1]), int(SHAPE[0])//2))
54+
img_temp_2 = copy.deepcopy(img_temp_1.reshape((int(SHAPE[0] // 2), int(SHAPE[1]), 1)))
55+
img_new[:, :, y:y + 1] = copy.deepcopy(img_temp_2)
56+
57+
label_temp = copy.deepcopy(label_sim[:, :, y:y + 1].reshape((SHAPE[0], SHAPE[1])))
58+
label_temp_1 = cv.resize(label_temp, (int(SHAPE[1]), int(SHAPE[0]//2)))
59+
label_temp_2 = copy.deepcopy(label_temp_1.reshape((int(SHAPE[0] // 2), int(SHAPE[1]), 1)))
60+
label_new[:, :, y:y + 1] = copy.deepcopy(label_temp_2)
61+
62+
for i in range(swc_data.shape[0]):
63+
swc_data[i][4] = swc_data[i][4] / 2
64+
65+
data_image_dir_tmp = data_image_dir + str(img_num + 1) + '.tif'
66+
data_label_dir_tmp = data_label_dir + str(img_num + 1) + '.gt.tif'
67+
data_swc_dir_tmp = data_swc_dir + str(img_num + 1) + '.swc'
68+
69+
save_tif(img_new, data_image_dir_tmp, data_type)
70+
save_tif(label_new, data_label_dir_tmp, np.uint8)
71+
save_swc(data_swc_dir_tmp, swc_data)
72+
73+
74+
# make sure the branch is centered in the image
75+
c, a, b = img_new.shape
76+
skel = morphology.skeletonize_3d(label_new)
77+
skl_random_mask = np.random.randint(0,20,size=(c,a,b))
78+
skl_random = skl_random_mask * skel
79+
skl_random[skl_random!=1]=0
80+
skl_seed_pos = np.where(skl_random==1)
81+
82+
for slice_num in range(skl_seed_pos[0].shape[0]):
83+
z = skl_seed_pos[0][slice_num]
84+
x = skl_seed_pos[1][slice_num]
85+
y = skl_seed_pos[2][slice_num]
86+
87+
if z < channel//2 or z > c - channel//2 or x < size_x//2 or x > a - size_x//2 or y < size_y//2 or y > b - size_y//2:
88+
continue
89+
else:
90+
temp_image = img_new[z-channel//2:z + channel//2, x - size_x//2:x + size_x//2, y - size_y//2:y + size_y//2]
91+
temp_label = label_new[z-channel//2:z + channel//2, x - size_x//2:x + size_x//2, y - size_y//2:y + size_y//2]
92+
93+
newname_fake = train_data_dir + str(img_num + 1) + '_' + str(k) + '.tif'
94+
newname_label = train_label_dir + str(img_num + 1) + '_' + str(k) + '.tif'
95+
96+
save_tif(temp_image, newname_fake, data_type)
97+
save_tif(temp_label, newname_label, np.uint8)
98+
k = k + 1
99+
100+
print('image ID: %d, number of training images: %d' % (img_num, k))
101+
time.sleep(1)
102+
103+
104+
if __name__ == '__main__':
105+
# multiprocessing
106+
cpu_core_num = 4
107+
pool = mp.Pool(processes=cpu_core_num) # we set cpu core is 4
108+
pool.map(main, range(0, image_number))
109+

0 commit comments

Comments
 (0)