forked from Owais-Khan/ImageAnalysisTools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ImageAnalysisCoronaryCenterlines.py
69 lines (59 loc) · 2.74 KB
/
ImageAnalysisCoronaryCenterlines.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
import vtk
import numpy as np
from vmtk import vmtkscripts
import os
import sys
from glob import glob
import argparse
class CoronaryCenterlines():
def __init__(self,Args):
self.Args=Args
#Create a centerlines folder inside the user-defined Output Folder
print ("Creating the output directory: %s/Centerlines/"%self.Args.OutputFolderName)
os.system("mkdir %s/Centerlines/"%self.Args.OutputFolderName)
#Find all of the centerlines inside the mesh-surface folder.
filenamesLCA=sorted(glob("%s/mesh-surfaces/wall_LCA*.vtp"%self.Args.InputFolderName))
filenamesRCA=sorted(glob("%s/mesh-surfaces/wall_RCA*.vtp"%self.Args.InputFolderName))
self.filenames=filenamesLCA+filenamesRCA
print ("Found %d LCA files inside the mesh-surface folder"%len(filenamesLCA))
print ("Found %d RCA files inside the mesh-surface folder"%len(filenamesRCA))
def main(self):
for filename in self.filenames:
print ("----Computing Centerlines for: %s"%filename)
#Read the surface
surface=self.VTP_Reader(filename)
#Compute Centerlines
centerline=vmtkscripts.vmtkCenterlines()
centerline.Surface=surface
centerline.SeedSelectorName="openprofiles"
centerline.Interactive=1
centerline.Resampling=1
centerline.ResamplingStepLength=0.06
centerline.Execute()
#Write the centerline file
surfaceWriter=vmtkscripts.vmtkSurfaceWriter()
surfaceWriter.Surface=centerline.Centerlines
surfaceWriter.OutputFileName="%s/Centerlines/%s"%(self.Args.OutputFolderName,filename.split("/")[-1].replace(".vtp","_cl.vtp"))
surfaceWriter.Execute()
def VTP_writer(self,centerline,filename):
filename_new="%s/Centerlines/%s"%(self.Args.OutputFolderName,filename.split("/")[-1].replace(".vtp","_cl.vtp"))
print ("----Writing: %s",filename_new)
surfaceWriter=vtk.vtkXMLPolyDataWriter()
surfaceWriter.SetFileName(filename_new)
surfaceWriter.SetInputData(centerline)
surfaceWriter.Update()
def VTP_Reader(self,filename):
surfaceReader=vtk.vtkXMLPolyDataReader()
surfaceReader.SetFileName(filename)
surfaceReader.Update()
surface=surfaceReader.GetOutput()
return surface
if __name__=='__main__':
#Description
parser = argparse.ArgumentParser(description="This script will compute the centerlines of coronary arteries using the 'mesh-complete' that simvascular outputs")
#Input filename of the perfusion map
parser.add_argument('-ifolder', '--InputFolderName', type=str, required=True, dest="InputFolderName",help="The path to the mesh-complete folder")
#Resolution of the Averaging Procedure
parser.add_argument('-ofolder', '--OutputFolderName', type=str, required=True, dest="OutputFolderName",help="The folder path for the output folder that will contain centerline files")
args=parser.parse_args()
CoronaryCenterlines(args).main()