-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRegistration_ML_Tiankuo_tibia.py
More file actions
98 lines (75 loc) · 4.15 KB
/
Registration_ML_Tiankuo_tibia.py
File metadata and controls
98 lines (75 loc) · 4.15 KB
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
#! /home/blue/ml/sitk/bin/python
# -*- coding: utf-8 -*-
import SimpleITK as sitk
from Across_limb_registration import reg_transform, cent_transform #,init_transform_best_angle
import os
import re
import logging
from shubow_tools import imreadseq_multithread,imsaveseq, auto_crop, down_scale, init_transform_best_angle
import shutil
import numpy as np
config = {
"workspace":r"D:\1b. Aged Rad+Yoda1+WBV+ No- Tumor 062722\seg_pad\week 0",
"outputdir":r"D:\1b. Aged Rad+Yoda1+WBV+ No- Tumor 062722\regis\week 0 registration", #"D:\Tiankuo\101223 Tumor+Rad+Yoda1+WBV\registration\week 0 registration",
"refdir":r"D:\1b. Aged Rad+Yoda1+WBV+ No- Tumor 062722\regis\reference", #r"C:\Users\SplLabMEEG\Desktop\BalbC1.10.2022\3. Registration\reference", # #r"C:\Users\SplLabMEEG\Desktop\BalbC1.10.2022\3. Registration\reference",
"img_z_range":[None,None], #[75, 625], [800,1350] 800,1600
"ref_z_range":[500,None],
"initial_transform_angles":[np.pi*i/16 for i in range(-16,10)],# -1,2 -16,10
"BASELINE_REG":True, #False, # True,
"RETRY": False
}
wkdir = config["workspace"]
os.chdir(wkdir)
masterdir = config["workspace"]
masteroutput = config["outputdir"]
refdir = config["refdir"]
BASELINE_REGISTRATION = config["BASELINE_REG"]
if not os.path.exists(masteroutput):
os.mkdir(masteroutput)
format = "%(asctime)s: %(message)s"
logging.basicConfig(format = format, level = logging.INFO,
datefmt="%H:%M:%S")
if BASELINE_REGISTRATION:
logging.info('Loading reference image...')
ref_img = imreadseq_multithread(refdir,thread = 2, sitkimg=True, z_range=config["ref_z_range"])
#ref_img = down_scale(ref_img, down_scale_factor=1.0)
failed_list = []
# with open("failed.txt", "r") as f :
# retry_file = f.readlines()
# retry_list = [i.strip("\n") for i in retry_file]
for file in sorted(os.listdir(masterdir))[0:]:
if re.search(r"\d{3}.(week.\d{1}) (left|right) tibia", file) : # and file in [""]:
imgtitle = file #
if not BASELINE_REGISTRATION: #"
logging.info('Loading reference image : {}'.format(re.sub(r"week (?:[0-9]|[1-9][0-9])", "week 0",file)+' registered'))
ref_img = imreadseq_multithread(os.path.join(refdir, re.sub(r"week (?:[0-9]|[1-9][0-9])", "week 0",file)+' registered')
,thread = 2, sitkimg=True, rmbckgrd=75, z_range=config["ref_z_range"])
logging.info('Loading image {} ...'.format(imgtitle))
tar_img = imreadseq_multithread(os.path.join(masterdir,file), thread=2,
sitkimg = True, rmbckgrd=75, z_range=config["img_z_range"])
logging.info('Initial Transforming ...')
ini_transform = init_transform_best_angle(sitk.Cast(tar_img, sitk.sitkFloat32),sitk.Cast(ref_img, sitk.sitkFloat32),
angles=config["initial_transform_angles"], centerfilter="MOMENTS") #"MOMENTS": image with consistant intensity pattern
#ini_transform = sitk.ReadTransform("/media/spl/D/MicroCT_data/Machine learning/Heart inj Aug-2019 tibia registration/381 week 0 left tibia registered/381 week 0 left tibiareg_transform.tfm")
metric_values = []
multires_iterations = []
suboutput = os.path.join(masteroutput,imgtitle+" registered")
logging.info('Registration of {} is in process...'.format(imgtitle))
if os.path.exists(suboutput):
shutil.rmtree(suboutput)
os.mkdir(suboutput)
try:
tar_reg,tar_reg_transform = reg_transform(ref_img,tar_img,ini_transform,imgtitle,suboutput) #tar_img[100:,:,:]
logging.info("Saving images...")
imsaveseq(tar_reg, suboutput, imgtitle+'_Reg')
sitk.WriteTransform(tar_reg_transform,os.path.join(suboutput,imgtitle+'reg_transform.tfm'))
logging.info('Registration of {} is in completed...'.format(imgtitle))
except RuntimeError as ex:
logging.info('Registration of {} failed...'.format(imgtitle))
failed_list.append(file)
print(ex)
pass
print(failed_list)
with open("failed_retry.txt", "w") as f:
for i in failed_list:
f.write(i+"\n")