Skip to content
Snippets Groups Projects
Commit b3b028a8 authored by tee1g21's avatar tee1g21
Browse files

Refactor depth2disparity function for improved stability and clarity

parent 613e29d7
Branches GDP_4.2.1
No related tags found
1 merge request!15GDP_4.4.6-Depth2Disparity
......@@ -24,7 +24,7 @@ def relative2abs(rel_depth_map, coord1, dist1, coord2, dist2):
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
......@@ -45,25 +45,32 @@ def depth2disparity(abs_depth_map, baseline=0.176, disp_scale=2.0, disp_offset=-
# Retrieve the absolute depth (r_t) for this pixel
r_t = abs_depth_map[i, j]
# Avoid division by zero for invalid or infinite depth values
# Avoid invalid or infinite depth values
if r_t <= 0:
disparity_map[i, j] = 0
continue
# Calculate angular disparity (d) using the spherical depth-to-disparity formula
try:
angle_disp = np.arctan(
baseline / (r_t * np.sin(theta_t) + r_t * np.cos(theta_t) * np.tan(theta_t))
) - theta_t
# 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.")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment