DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.

本页目录

  • 对齐 RGB 和深度图像
  • 使用 DepthAI 进行对齐
  • StereoDepth - 用于立体相机
  • ImageAlign - 通用对齐
  • 广角相机上的 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。

广角相机上的 RGB-D

使用广角相机时,由于镜头引起的大畸变,对齐可能会很棘手。默认情况下,深度图像在校正-去畸变过程中会被去畸变,但彩色图像不会。这可能导致两幅图像之间的错位。为了解决这个问题,彩色图像也需要进行去畸变。
使用 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)

完整代码

使用 OpenCV 去畸变的示例

对广角相机拍摄的图像进行去畸变时,畸变校正会导致图像的部分区域被裁剪。这会导致视野 (FOV) 的损失,而 FOV 正是使用广角相机的主要优势。为了最大化 FOV,可以使用 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)

需要帮助?

请前往 OAKChina 官网 获取技术支持或解答您的任何疑问。