DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版

本页目录

  • 对齐 RGB 和深度图像
  • 使用 DepthAI 进行对齐
  • StereoDepth - 适用于立体相机
  • ImageAlign - 通用对齐
  • 宽视场 (WFOV) 相机上的 RGB-D

RGB-D

RGBD 指的是包含彩色 (RGB)深度 (D) 信息类型的图像数据。

对齐 RGB 和深度图像

RGB-D 流水线中的核心要素是对齐。其思想是将深度图像中的每个像素与彩色图像中的相应像素对齐。这是必需的,因为由于相机位置不同,深度图像的视角与彩色图像的视角不同。对齐可以使用重投影完成。默认情况下,在立体匹配过程中,深度会与 rectified_left 图像对齐。我们可以使用获取的深度信息将此图像投影到 3D 空间,然后使用彩色相机内参将其重新投影回彩色图像平面。

使用 DepthAI 进行对齐

DepthAI 提供了几种实现 RGB 和深度图像对齐的方法,它们都提供相同的功能,但各有优缺点。

StereoDepth - 适用于立体相机

StereoDepth 节点开箱即用地提供了对齐功能。该节点接收一对立体图像(leftright)并输出深度图。默认情况下,深度图像与 rectified_left 图像对齐,但可以使用 setDepthAlign() 方法进行更改。
Python
1stereo.setDepthAlign(dai.CameraBoardSocket.RGB) # 假设 RGB 相机已连接到 RGB/CAM_A 端口

ImageAlign - 通用对齐

ImageAlign 节点是一个更通用的节点,可用于对齐任意两张图像。该节点接收两张图像(inputinputAlignTo)并输出对齐后的图像。对于 RGB-D,此节点允许我们将飞行时间 (ToF) 深度 对齐到 RGB。

宽视场 (WFOV) 相机上的 RGB-D

使用 WFOV 相机时,由于镜头引起的大畸变,对齐可能会很棘手。默认情况下,深度图像在校正-去畸变过程中会被去畸变,但彩色图像不会。这可能导致两张图像之间的对齐不正确。要解决此问题,需要对彩色图像也进行去畸变。
使用Camera 节点。该节点可用于使用相机的内参去畸变彩色图像。

Python

Python
1cam = pipeline.create(dai.node.Camera)
2cam.setBoardSocket(dai.CameraBoardSocket.RGB)
3cam.setMeshSource(dai.CameraProperties.WarpMeshSource.CALIBRATION)

C++

C++
1auto cam = pipeline.create<dai::node::Camera>();
2cam->setBoardSocket(dai::CameraBoardSocket::RGB);
3cam->setMeshSource(dai::CameraProperties::WarpMeshSource::CALIBRATION);
可以使用相机的内参和 OpenCV 手动进行去畸变。
Python
1alpha = 0
2stereo.setAlphaScaling(alpha)
3
4rgb_w = camRgb.getResolutionWidth()
5rgb_h = camRgb.getResolutionHeight()
6rgbIntrinsics = np.array(calibData.getCameraIntrinsics(rgbCamSocket, rgb_w, rgb_h))
7rgb_d = np.array(calibData.getDistortionCoefficients(rgbCamSocket))
8rgb_new_cam_matrix, _ = cv2.getOptimalNewCameraMatrix(rgbIntrinsics, rgb_d, (rgb_w, rgb_h), alpha)
9map_x, map_y = cv2.initUndistortRectifyMap(rgbIntrinsics, rgb_d, None, rgb_new_cam_matrix, (rgb_w, rgb_h), cv2.CV_32FC1)
10
11frameRgb = cv2.remap(frameRgb, map_x, map_y, cv2.INTER_LINEAR)

Full code

Example using OpenCV undistortion

在去畸变宽视场相机捕获的图像时,变形会导致图像的某些部分被裁剪掉。这会导致视场角 (FOV) 损失,而这是 WFOV 相机的主要卖点。为了最大化视场角,可以使用 alpha 参数 [0-1] 来缩放去畸变后的图像 [指南]。

设置 alpha 参数

  • alpha = 0 - 无缩放,去畸变后的图像大小与原始图像相同。
  • alpha = 1 - 最大化缩放,去畸变后的图像将是适合原始图像的最大可能图像。

StereoDepth 去畸变

Python
1stereo.setAlphaScaling(alpha)

Camera 去畸变

Python
1camRgb.setCalibrationAlpha(alpha)

OpenCV 去畸变

Python
1rgb_new_cam_matrix, _ = cv2.getOptimalNewCameraMatrix(rgbIntrinsics, rgb_d, (rgb_w, rgb_h), alpha)

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。