|
import numpy as np |
|
import pyvista as pv |
|
import argparse |
|
import os |
|
import glob |
|
import trimesh |
|
|
|
|
|
def parse_command_line(): |
|
print('---'*10) |
|
print('Parsing Command Line Arguments') |
|
parser = argparse.ArgumentParser(description='Defacing protocol') |
|
parser.add_argument('-bp', metavar='base path', type=str, |
|
help="Absolute path of the base directory") |
|
parser.add_argument('-gp', metavar='ground truth path', type=str, |
|
help="Relative path of the ground truth model") |
|
parser.add_argument('-pp', metavar='prediction path', type=str, |
|
help="Relative path of the prediction model") |
|
argv = parser.parse_args() |
|
return argv |
|
|
|
|
|
def distanceVertex2Mesh(mesh, vertex): |
|
faces_as_array = mesh.faces.reshape((mesh.n_faces, 4))[:, 1:] |
|
mesh_box = trimesh.Trimesh(vertices=mesh.points, |
|
faces=faces_as_array) |
|
cp, cd, ci = trimesh.proximity.closest_point(mesh_box, vertex) |
|
return cd |
|
|
|
|
|
def main(): |
|
args = parse_command_line() |
|
base = args.bp |
|
gt_path = args.gp |
|
pred_path = args.pp |
|
output_dir = os.path.join(base, 'output') |
|
try: |
|
os.mkdir(output_dir) |
|
except: |
|
print(f'{output_dir} already exists') |
|
|
|
for i in glob.glob(os.path.join(base, gt_path) + '/*.vtk'): |
|
filename = os.path.basename(i).split('.')[0] |
|
|
|
|
|
|
|
output_sub_dir = os.path.join( |
|
base, 'output', filename) |
|
try: |
|
os.mkdir(output_sub_dir) |
|
except: |
|
print(f'{output_sub_dir} already exists') |
|
|
|
gt_mesh = pv.read(i) |
|
pred_mesh = pv.read(os.path.join( |
|
base, pred_path, filename + '.vtk')) |
|
pred_vertices = np.array(pred_mesh.points) |
|
cd = distanceVertex2Mesh(gt_mesh, pred_vertices) |
|
pred_mesh['dist'] = cd |
|
pred_mesh.save(os.path.join(output_sub_dir, filename + '.vtk')) |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|