双目相机标定步骤
时间: 2025-05-12 15:23:54 浏览: 36
### 双目相机标定的具体步骤
双目相机的标定过程涉及多个阶段,主要包括单目相机标定、立体校准和重映射。以下是详细的描述:
#### 单目相机标定
在双目系统的标定过程中,首先需要分别对标定左相机和右相机进行单独标定。这一步的主要目的是获取每台相机的内参矩阵(intrinsic matrix)和畸变系数。
- 使用棋盘格图案作为标定板,拍摄一系列不同角度的照片。
- 利用 OpenCV 的 `findChessboardCorners` 函数检测棋盘格角点。
- 调用 `calibrateCamera` 函数来估计相机的内参数和畸变系数[^1]。
```python
import cv2
import numpy as np
# 假设已经准备好了对象点 objpoints 和图像点 imgpoints
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
```
#### 立体校准
完成单目相机标定之后,进入立体校准阶段。这一部分的目标是找到两台相机之间的外参关系(extrinsic parameters),即旋转和平移向量 R 和 T。
- 将之前用于单目标定的数据组合起来形成新的输入数据集。
- 应用函数 `stereoCalibrate` 来计算两个摄像机间的相对位置与方向,并返回优化后的内参矩阵 newCamMatL/newCamMatR 以及投影矩阵 P1/P2[^2]。
```python
retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = \
cv2.stereoCalibrate(objpoints, imgpointsL, imgpointsR,
cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2,
imageSize, flags=cv2.CALIB_FIX_INTRINSIC)
```
#### 计算矫正变换
为了简化后续处理流程并提高精度,通常还需要执行极线对齐操作。此环节利用前面得到的结果调用 `stereoRectify` 方法生成一对正交化变换矩阵 R1/R2 和新投影矩阵 P1/P2[^3]。
```python
R1, R2, P1, P2, Q, roi_left, roi_right = \
cv2.stereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2,
imageSize, R, T, alpha=0)
```
#### 图像重映射
最后一步是对原始采集到的画面实施几何纠正,使得它们能够符合上述设定好的标准模型结构。借助先前求得的各项参数实现像素坐标的转换,从而达到消除视差的目的[^4]。
```python
mapx1, mapy1 = cv2.initUndistortRectifyMap(cameraMatrix1, distCoeffs1, R1, P1, (w,h), cv2.CV_32FC1)
mapx2, mapy2 = cv2.initUndistortRectifyMap(cameraMatrix2, distCoeffs2, R2, P2, (w,h), cv2.CV_32FC1)
img_rectified_L = cv2.remap(imgL, mapx1, mapy1, interpolation=cv2.INTER_LINEAR)
img_rectified_R = cv2.remap(imgR, mapx2, mapy2, interpolation=cv2.INTER_LINEAR)
```
以上就是基于OpenCV库完成的一套完整的双目相机标定方案概述及其关键技术要点解析。
阅读全文
相关推荐


















