Diff of /ants/utils/consistency.py [000000] .. [5d12a0]

Switch to side-by-side view

--- a
+++ b/ants/utils/consistency.py
@@ -0,0 +1,73 @@
+import numpy as np
+import ants
+from ants.decorators import image_method
+
+__all__ = ['image_physical_space_consistency',
+           'allclose']
+
+@image_method
+def image_physical_space_consistency(image1, image2, tolerance=1e-2, datatype=False):
+    """
+    Check if two or more ANTsImage objects occupy the same physical space
+
+    ANTsR function: `antsImagePhysicalSpaceConsistency`
+
+    Arguments
+    ---------
+    *images : ANTsImages
+        images to compare
+
+    tolerance : float
+        tolerance when checking origin and spacing
+
+    data_type : boolean
+        If true, also check that the image data types are the same
+
+    Returns
+    -------
+    boolean
+        true if images share same physical space, false otherwise
+    """
+    images = [image1, image2]
+
+    img1 = images[0]
+    for img2 in images[1:]:
+        if (not ants.is_image(img1)) or (not ants.is_image(img2)):
+            raise ValueError('Both images must be of class `AntsImage`')
+
+        # image dimension check
+        if img1.dimension != img2.dimension:
+            return False
+
+        # image spacing check
+        space_diffs = sum([abs(s1-s2)>tolerance for s1, s2 in zip(img1.spacing, img2.spacing)])
+        if space_diffs > 0:
+            return False
+
+        # image origin check
+        origin_diffs = sum([abs(s1-s2)>tolerance for s1, s2 in zip(img1.origin, img2.origin)])
+        if origin_diffs > 0:
+            return False
+
+        # image direction check
+        origin_diff = np.allclose(img1.direction, img2.direction, atol=tolerance)
+        if not origin_diff:
+            return False
+
+        # data type
+        if datatype == True:
+            if img1.pixeltype != img2.pixeltype:
+                return False
+
+            if img1.components != img2.components:
+                return False
+
+    return True
+
+
+@image_method
+def allclose(image1, image2):
+    """
+    Check if two images have the same array values
+    """
+    return np.allclose(image1.numpy(), image2.numpy())
\ No newline at end of file