import matplotlib.pyplot as plt
#normal_map 为h*w*3
def visualize_vertex_or_normal_map(self,normal_map):
# 将法线值从 [-1, 1] 归一化到 [0, 1]
normal_map_vis = (normal_map + 1) / 2.0
# 将张量从 [H, W, 3] 转换为 [H, W, 3] 的 numpy 数组
normal_map_vis = normal_map_vis.cpu().numpy()
# 显示法线图
plt.imshow(normal_map_vis)
plt.axis('off') # 关闭坐标轴显示
plt.show()
# depth_map = gt_depth.squeeze(0) # 变为 h*w
#
# # 将张量转换为numpy数组
# depth_map_np = depth_map.cpu().numpy() # 如果是在GPU上, 需要先转移到CPU
#
# # 将深度图归一化为0-255范围
# depth_map_normalized = (depth_map_np - depth_map_np.min()) / (depth_map_np.max() - depth_map_np.min()) * 255
# depth_map_normalized = depth_map_normalized.astype(np.uint8)
#
# # 将归一化后的数组转换为图片
# depth_image = Image.fromarray(depth_map_normalized)
#
# # 保存为PNG图片
# depth_image.save('/media/kj/2B9747BF3C0EC4D0/Project/RTG-SLAM-Test/data/depth_map.png')
depth_map = gt_depth.squeeze(0) # 变为 h*w
# 将张量转换为numpy数组
depth_map_np = depth_map.cpu().numpy() # 如果是在GPU上, 需要先转移到CPU
# 可视化
plt.imshow(depth_map_np, cmap='gray')
plt.colorbar(label='Depth Value')
plt.title('Depth Map Visualization')
plt.show()
# 创建 Open3D 深度图对象
depth_o3d = o3d.geometry.Image(gt_depth.squeeze(0).cpu().numpy())
# 创建内参矩阵(示例中假设fx, fy, cx, cy)
w=1280
h=720
fx = 605.3711
fy =605.2457
cx =635.3086
cy =366.51
intrinsic = o3d.camera.PinholeCameraIntrinsic(w, h, fx, fy, cx, cy)
# 将深度图转换为点云
depth_scale =800 # 根据深度图单位调整
point_cloud = o3d.geometry.PointCloud.create_from_depth_image(
depth_o3d, intrinsic, depth_scale=depth_scale
)
# 可视化点云
o3d.visualization.draw_geometries([point_cloud])