diff --git a/scripts/Depth2Disparity/depth2disparity.py b/scripts/Depth2Disparity/depth2disparity.py index 948b3472b1c7819169aed7da020aaf7d0afa79ad..08c6bb232fc2aa7c70b4564cb33b96cd495e9606 100644 --- a/scripts/Depth2Disparity/depth2disparity.py +++ b/scripts/Depth2Disparity/depth2disparity.py @@ -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.")