scikit-mpe is a package for extracting a minimal path in N-dimensional Euclidean space (on regular Cartesian grids) using the fast marching method.
pip install -U scikit-mpe
Here is a simple example that demonstrates how to extract the path passing through the retina vessels.
from matplotlib import pyplot as plt
from skimage.data import retina
from skimage.color import rgb2gray
from skimage.transform import rescale
from skimage.filters import sato
from skmpe import mpe
image = rescale(rgb2gray(retina()), 0.5)
speed_image = sato(image)
start_point = (76, 388)
end_point = (611, 442)
way_points = [(330, 98), (554, 203)]
path_info = mpe(speed_image, start_point, end_point, way_points)
px, py = path_info.path[:, 1], path_info.path[:, 0]
plt.imshow(image, cmap='gray')
plt.plot(px, py, '-r')
plt.plot(*start_point[::-1], 'oy')
plt.plot(*end_point[::-1], 'og')
for p in way_points:
plt.plot(*p[::-1], 'ob')
plt.show()
The full documentation can be found at scikit-mpe.readthedocs.io
- Fast Marching Methods: A boundary value formulation
- Level Set Methods and Fast Marching Methods
- scikit-fmm - Python implementation of the fast marching method
- ITKMinimalPathExtraction - ITK based C++ implementation of MPE