Source code for AFQ.recognition.curvature
import numpy as np
import dipy.tracking.streamlinespeed as dps
[docs]def sl_curve(sl, n_points):
"""
Calculate the direction of the displacement between
each point along a streamline
Parameters
----------
sl : 2d array-like
Streamline to calcualte displacements for.
n_points : int
Number of points to resample the streamline to
Returns
-------
2d array of shape (len(sl)-1, 3) with displacements
between each point in sl normalized to 1.
"""
# Resample to a standardized number of points
resampled_sl = dps.set_number_of_points(
sl,
n_points)
# displacement at each point
resampled_sl_diff = np.diff(resampled_sl, axis=0)
# normalize this displacement
resampled_sl_diff = resampled_sl_diff / np.linalg.norm(
resampled_sl_diff, axis=1)[:, None]
return resampled_sl_diff
[docs]def sl_curve_dist(curve1, curve2):
"""
Calculate the mean angle using the directions of displacement
between two streamlines
Parameters
----------
curve1, curve2 : 2d array-like
Two curves calculated from sl_curve.
Returns
-------
The mean angle between each curve across all steps, in radians
"""
return np.mean(np.arccos(np.sum(curve1 * curve2, axis=1)))