diff --git a/src/geomtree/affine_transform.py b/src/geomtree/affine_transform.py index fc4f30e0543ab4f9b78972201069995247256754..eb6b87b532d761eaa1798598ce216568165a78ef 100644 --- a/src/geomtree/affine_transform.py +++ b/src/geomtree/affine_transform.py @@ -8,7 +8,7 @@ from visu_core.vtk.actor import vtk_actor from visu_core.vtk.polydata import face_scalar_property_polydata from scipy.spatial.transform import Rotation as R -from scipy.linalg import svd, inv +from scipy.linalg import svd, inv, det from scipy.stats import chi2 class AffineTransform(object): @@ -194,4 +194,12 @@ def random_transform(translation=True,scale=True,rotation=True): tf.set_parameters(t,rot.as_matrix() @ np.diag(s)) return tf -#-----------------------------------------------------# \ No newline at end of file +#-----------------------------------------------------# + +def hellinger_distance(tf1,tf2): + t1 = tf1.translation + t2 = tf2.translation + sig1 = tf1.get_covariance_matrix() + sig2 = tf2.get_covariance_matrix() + sigm = (sig1+sig2)/2 + return 1 - (det(sig1)*det(sig2))**(1/4) / det(sigm)**(1/2)*np.exp((-1/8) * np.transpose(t1 - t2) @ inv(sigm) @ (t1 - t2)) \ No newline at end of file