-
Notifications
You must be signed in to change notification settings - Fork 1
/
register_comirs.py
111 lines (85 loc) · 4.41 KB
/
register_comirs.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
import os
import sys
import csv
import subprocess
import numpy as np
import cv2
import matplotlib.pyplot as plt
import pandas as pd
import SimpleITK as sitk
import time
from skimage.metrics import structural_similarity as ssim
def register_folder(dirA, dirB, config_path, out_path):
filenames = os.listdir(dirA)
filenames.sort()
filenames = [x for x in filenames if x.endswith(".tif") or
x.endswith(".png") or
x.endswith(".jpg")]
image_extension = filenames[0][-4:]
filenames = [x.replace(".png", "").replace(".tif", "") for x in filenames]
N = len(filenames)
if not os.path.exists(out_path):
os.makedirs(out_path)
for i, filename in enumerate(filenames):
print("Registering image {} {}/{}".format(filename, i+1,N))
tforward_name = "tforward_" + filename + ".txt"
treverse_name = "treverse_" + filename + ".txt"
tforward_path = os.path.join(out_path, tforward_name)
treverse_path = os.path.join(out_path, treverse_name)
pathA = os.path.join(dirA, filename + image_extension)
pathB = os.path.join(dirB, filename + image_extension)
process = subprocess.Popen(['../inspire-build/InspireRegister', '2', '-ref',
pathB, '-flo', pathA, '-deform_cfg',
config_path, '-out_path_deform_forward', tforward_path,
'-out_path_deform_reverse', treverse_path],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
def apply_registration(dirA, dirB, transform_dir, out_path, landmarks=False):
filenames = os.listdir(dirA)
filenames.sort()
filenames = [x for x in filenames if x.endswith(".tif") or
x.endswith(".png") or
x.endswith(".jpg")]
image_extension = filenames[0][-4:]
filenames = [x.replace(".png", "").replace(".tif", "") for x in filenames]
N = len(filenames)
if not os.path.exists(out_path):
os.makedirs(out_path)
for i, filename in enumerate(filenames):
#print("Registering image {} {}/{}".format(filename, i+1,N))
tforward_name = "tforward_" + filename + ".txt"
treverse_name = "treverse_" + filename + ".txt"
tforward_path = os.path.join(transform_dir, tforward_name)
treverse_path = os.path.join(transform_dir, treverse_name)
pathA = os.path.join(dirA, filename + image_extension)
pathB = os.path.join(dirB, filename + image_extension)
registered_path = os.path.join(out_path, filename + image_extension)
comir_registered_path = os.path.join(out_path, "comir_" + filename + image_extension)
process = subprocess.Popen(['../inspire-build/InspireTransform', '-dim', '2', '-16bit', '1', 'interpolation', 'linear', '-transform', tforward_path, '-ref', pathB, '-in', pathA, '-out', registered_path, '-bg', "min"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if landmarks:
landmark_filename = filename + ".csv"
landmarkA_path = os.path.join(dirA, landmark_filename)
landmarkB_path = os.path.join(dirB, landmark_filename)
landmark_registered_path = os.path.join(out_path, landmark_filename)
process = subprocess.Popen(['../itkAlphaAMD-build/ACTransformLandmarks', '-dim',
'2', '-transform', tforward_path, '-in', landmarkB_path,
'-out', landmark_registered_path],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if __name__ == "__main__":
modA = sys.argv[1]
modB = sys.argv[2]
modA_comir = sys.argv[3]
modB_comir = sys.argv[4]
transforms_dir = sys.argv[5]
out_path = sys.argv[6]
out_path_comir = sys.argv[7]
config_path = sys.argv[8]
landmarks = sys.argv[9]
register_folder(modA_comir, modB_comir, config_path, transforms_dir)
apply_registration(modA, modB, transforms_dir, out_path, landmarks=landmarks)
apply_registration(modA_comir, modB_comir, transforms_dir, out_path_comir, landmarks=False)