diff --git a/scripts/Depth2Disparity/depth2disparity.py b/scripts/Depth2Disparity/depth2disparity.py
new file mode 100644
index 0000000000000000000000000000000000000000..08c6bb232fc2aa7c70b4564cb33b96cd495e9606
--- /dev/null
+++ b/scripts/Depth2Disparity/depth2disparity.py
@@ -0,0 +1,105 @@
+# takes 2 pixel coordinates and corresponding distance values - and a relative depth map
+# caculates relative to absolute function - if linear
+# applies function to relative depth map to get absolute depth map
+# then convert to disparity map using depth disparity formula
+
+
+import argparse
+import numpy as np
+import cv2
+
+def relative2abs(rel_depth_map, coord1, dist1, coord2, dist2):
+    # Get the relative depth values at the two points
+    rel_value1 = rel_depth_map[coord1[1], coord1[0]]  # (y, x)
+    rel_value2 = rel_depth_map[coord2[1], coord2[0]]
+
+    # Calculate the linear transformation: depth = a * rel_depth + b
+    a = (dist2 - dist1) / (rel_value2 - rel_value1)
+    b = dist1 - a * rel_value1
+
+    # Apply the transformation to the entire relative depth map
+    abs_depth_map = a * rel_depth_map + b
+    
+    # this should not be normalised, the values in the array should equate to literal distances
+    return abs_depth_map
+
+def depth2disparity(abs_depth_map, baseline=0.176, disp_scale=2.0, disp_offset=-120):
+    
+    # Get image dimensions
+    height, width = abs_depth_map.shape
+
+    # Calculate angular coordinates for each pixel
+    unit_w = 2.0 / width  # Longitude step size
+    unit_h = 1.0 / height  # Latitude step size
+    
+    # Initialize disparity map
+    disparity_map = np.zeros_like(abs_depth_map, dtype=np.float32)
+
+    for i in range(height):
+        theta_t = i * unit_h * np.pi  # Latitude angle for the row
+
+        for j in range(width):
+            # Longitude angle (not strictly needed for disparity calculation)
+            phi = j * unit_w * np.pi
+
+            # Retrieve the absolute depth (r_t) for this pixel
+            r_t = abs_depth_map[i, j]
+
+            # Avoid invalid or infinite depth values
+            if r_t <= 0:
+                disparity_map[i, j] = 0
+                continue
+
+            try:
+                # Compute denominator with stability checks
+                epsilon = 1e-8  # Small value to prevent division instability
+                tan_theta_t = np.tan(theta_t) if np.abs(np.cos(theta_t)) > epsilon else np.sign(np.sin(theta_t)) * np.inf
+
+                denominator = r_t * np.sin(theta_t) + r_t * np.cos(theta_t) * tan_theta_t
+                if denominator <= 0:
+                    disparity_map[i, j] = 0
+                    continue
+
+                # Calculate angular disparity (d)
+                angle_disp = np.arctan(baseline / denominator) - theta_t
+
+                # Convert angular disparity to pixel disparity
+                disparity_map[i, j] = (angle_disp / (unit_h * np.pi) - disp_offset) * disp_scale
+
+            except ZeroDivisionError:
+                disparity_map[i, j] = 0
+
+    return disparity_map
+
+if __name__ == "__main__":
+    # Set up argument parser
+    parser = argparse.ArgumentParser(description="Convert relative depth map to absolute depth map.")
+    parser.add_argument("rel_depth_map", type=str, help="Path to the relative depth map (image file).")
+    parser.add_argument("coord1", type=int, nargs=2, help="Pixel coordinates of the first point (x y).")
+    parser.add_argument("dist1", type=float, help="Absolute depth value at the first point.")
+    parser.add_argument("coord2", type=int, nargs=2, help="Pixel coordinates of the second point (x y).")
+    parser.add_argument("dist2", type=float, help="Absolute depth value at the second point.")
+
+    # Parse arguments
+    args = parser.parse_args()
+
+    # Load the relative depth map (dummy placeholder for now)
+    print(f"Loading relative depth map from: {args.rel_depth_map}")
+    rel_depth_map = cv2.imread(args.rel_depth_map, cv2.IMREAD_GRAYSCALE)  # Load as grayscale
+    if rel_depth_map is None:
+        raise FileNotFoundError(f"Unable to load file: {args.rel_depth_map}")
+    
+    # Normalise depth map
+    rel_depth_map = rel_depth_map / 255.0
+
+    # Convert relative to absolute depth
+    abs_depth_map = relative2abs(
+        rel_depth_map, tuple(args.coord1), args.dist1, tuple(args.coord2), args.dist2
+    )
+    
+    # Convert depth map to disparity map
+    disparity_map = depth2disparity(abs_depth_map)
+    
+    # save disparity map
+    #cv2.imwrite(f"{args.rel_depth_map}-disparity.png", disparity_map)
+    
\ No newline at end of file