Spaces:
Sleeping
Sleeping
Smoothing Endograft
Browse files- endograft_generation.py +13 -1
endograft_generation.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import vtk
|
| 2 |
import numpy as np
|
| 3 |
import tempfile
|
|
|
|
| 4 |
|
| 5 |
def arc_length(centerline):
|
| 6 |
arc_lengths = np.zeros(len(centerline))
|
|
@@ -66,6 +67,15 @@ def project_point_to_surface(point, locator, polydata):
|
|
| 66 |
|
| 67 |
return np.array(closest), normal
|
| 68 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
def sample_centerline_by_distance(centerline, arc_lengths, frames, query_distance):
|
| 70 |
|
| 71 |
idx = np.searchsorted(arc_lengths, query_distance)
|
|
@@ -294,6 +304,8 @@ def merge_components(proximal, extension, distal):
|
|
| 294 |
return clean
|
| 295 |
|
| 296 |
def create_endograft(centerline, proximal_diameter, distal_diameter, proximal_length, extension_length, distal_length, proximal_gap, extension_gap, distal_gap, proximal_extension_overlap, distal_extension_overlap, proximal_distal_overlap, include_combined=False, phase_angle=0.0):
|
|
|
|
|
|
|
| 297 |
frames = compute_parallel_frames(centerline)
|
| 298 |
|
| 299 |
# PROXIMAL COMPONENT
|
|
@@ -303,7 +315,7 @@ def create_endograft(centerline, proximal_diameter, distal_diameter, proximal_le
|
|
| 303 |
|
| 304 |
proximal_stents = create_stent_component(centerline, frames, proximal_start, proximal_length, proximal_diameter, proximal_fabric, peak_spacing=proximal_gap, component_type="proximal", phase_angle=phase_angle)
|
| 305 |
|
| 306 |
-
#
|
| 307 |
# if extension_length > 97:
|
| 308 |
# prox_extension_overlap = 3*peak_to_peak + 2*extension_gap
|
| 309 |
# else:
|
|
|
|
| 1 |
import vtk
|
| 2 |
import numpy as np
|
| 3 |
import tempfile
|
| 4 |
+
from scipy.interpolate import splprep, splev
|
| 5 |
|
| 6 |
def arc_length(centerline):
|
| 7 |
arc_lengths = np.zeros(len(centerline))
|
|
|
|
| 67 |
|
| 68 |
return np.array(closest), normal
|
| 69 |
|
| 70 |
+
def smooth_centerline(centerline, smoothing=0.5, samples=500):
|
| 71 |
+
|
| 72 |
+
centerline = np.asarray(centerline)
|
| 73 |
+
spline, _ = splprep(centerline.T, s=smoothing, k=3)
|
| 74 |
+
sample_positions = np.linspace(0, 1, samples)
|
| 75 |
+
smoothed_centerline = splev(sample_positions, spline)
|
| 76 |
+
|
| 77 |
+
return np.vstack(smoothed_centerline).T
|
| 78 |
+
|
| 79 |
def sample_centerline_by_distance(centerline, arc_lengths, frames, query_distance):
|
| 80 |
|
| 81 |
idx = np.searchsorted(arc_lengths, query_distance)
|
|
|
|
| 304 |
return clean
|
| 305 |
|
| 306 |
def create_endograft(centerline, proximal_diameter, distal_diameter, proximal_length, extension_length, distal_length, proximal_gap, extension_gap, distal_gap, proximal_extension_overlap, distal_extension_overlap, proximal_distal_overlap, include_combined=False, phase_angle=0.0):
|
| 307 |
+
|
| 308 |
+
centerline = smooth_centerline(centerline, smoothing=5, samples=500)
|
| 309 |
frames = compute_parallel_frames(centerline)
|
| 310 |
|
| 311 |
# PROXIMAL COMPONENT
|
|
|
|
| 315 |
|
| 316 |
proximal_stents = create_stent_component(centerline, frames, proximal_start, proximal_length, proximal_diameter, proximal_fabric, peak_spacing=proximal_gap, component_type="proximal", phase_angle=phase_angle)
|
| 317 |
|
| 318 |
+
# EXTENSION COMPONENT
|
| 319 |
# if extension_length > 97:
|
| 320 |
# prox_extension_overlap = 3*peak_to_peak + 2*extension_gap
|
| 321 |
# else:
|