diff --git a/src/geomtree/affine_transform.py b/src/geomtree/affine_transform.py index f03a80bc26008c9264fb0ccf907ff27adf759ed0..2a2b197dfb7698253ef0a5fe34c6b0c450848cf4 100644 --- a/src/geomtree/affine_transform.py +++ b/src/geomtree/affine_transform.py @@ -208,7 +208,7 @@ def random_transform(translation=True,scale=True,rotation=True): #-----------------------------------------------------# -def hellinger_distance(tf1,tf2): ### tester VS monte-carlo ? +def hellinger_distance(tf1,tf2,epsilon=1e-6): ### tester VS monte-carlo ? """ See https://en.wikipedia.org/wiki/Hellinger_distance :param tf1: AffineTransform @@ -220,7 +220,11 @@ def hellinger_distance(tf1,tf2): ### tester VS monte-carlo ? sig1 = tf1.get_covariance_matrix() sig2 = tf2.get_covariance_matrix() sigm = (sig1+sig2)/2 - return np.sqrt(1 - (det(sig1)*det(sig2))**(1/4) / det(sigm)**(1/2)*np.exp((-1/8) * np.transpose(t1 - t2) @ inv(sigm) @ (t1 - t2))) + + val = 1 - (det(sig1)*det(sig2))**(1/4) / det(sigm)**(1/2)*np.exp((-1/8) * np.transpose(t1 - t2) @ inv(sigm) @ (t1 - t2)) + if np.abs(val)<epsilon: + val=0 + return np.sqrt(val) #-----------------------------------------------------#