-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRegistration_ML_Tiankuo_femur.py
More file actions
102 lines (77 loc) · 4.06 KB
/
Registration_ML_Tiankuo_femur.py
File metadata and controls
102 lines (77 loc) · 4.06 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
99
100
101
102
#! /home/blue/ml/sitk/bin/python
# -*- coding: utf-8 -*-
import SimpleITK as sitk
from Across_limb_registration import reg_transform, cent_transform
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:\Tiankuo\101223 Tumor+Rad+Yoda1+WBV\segmentation\week 5\mechtest",
"outputdir":r"D:\Tiankuo\101223 Tumor+Rad+Yoda1+WBV\registration\femur\week 5 registration",
"refdir":r"D:\Tiankuo\101223 Tumor+Rad+Yoda1+WBV\registration\femur\reference_femur", #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":[None,None],
"initial_transform_angles":[np.pi*i/16 for i in range(-16,10)],# -1,2
"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) (left|right) femur", file): #and file[:-6] in retry_list:
imgtitle = file
if not BASELINE_REGISTRATION:
logging.info('Loading reference image : {}'.format(re.sub(r"week [0-5]", "week 0",file)+' registered'))
ref_img = imreadseq_multithread(os.path.join(refdir, re.sub(r"week [0-5]", "week 0",file)+' registered')
,thread = 2, sitkimg=True, rmbckgrd=75, z_range=config["ref_z_range"])
logging.info('Loading image {} ...'.format(imgtitle))
lower = config["img_z_range"][0]
upper = config["img_z_range"][1]
tar_img = imreadseq_multithread(os.path.join(masterdir,file), thread=2,
sitkimg = True, z_range=(lower, upper))
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")
#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)
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")