张正友标定法世界坐标系与相机坐标系之间的转换
时间: 2025-06-12 09:58:42 浏览: 6
### 张正友标定法中世界坐标系与相机坐标系的转换原理
张正友标定法的核心在于建立世界坐标系和像素坐标系之间的映射关系。这一过程涉及到多个中间步骤,其中包括世界坐标系到相机坐标系的转换。
#### 1. 坐标系间的数学关系
世界坐标系 \(P_w = (X_w, Y_w, Z_w)\) 和相机坐标系 \(P_c = (X_c, Y_c, Z_c)\) 的转换可以通过刚体运动模型完成。该模型包括旋转和平移两种基本操作:
\[
P_c = R \cdot P_w + T
\]
其中:
- \(R\) 是一个 \(3 \times 3\) 的旋转矩阵,用于描述两个坐标系的方向差异;
- \(T\) 是一个 \(3 \times 1\) 的平移向量,表示两个坐标系的相对位移[^4]。
#### 2. 单应矩阵的作用
为了进一步简化计算,张正友标定法利用单应矩阵(Homography Matrix)来表达世界坐标系中的点与图像平面中的点之间的投影关系。当目标平面位于 \(Z=0\) 处时,可以忽略深度信息,从而将三维问题降维至二维。此时,单应矩阵 \(H\) 可以写为:
\[
H = K[R|T]
\]
这里:
- \(K\) 表示相机内参数矩阵,包含焦距、主点偏移等信息;
- \([R|T]\) 组成了外部参数矩阵,代表相机的姿态和位置[^2]。
通过已知的世界坐标系上的角点及其对应的像素坐标系上的角点,可解算出单应矩阵 \(H\)。随后通过对 \(H\) 进行分解即可获得内外参数。
#### 3. MATLAB 实现代码示例
以下是基于 OpenCV 或其他工具包实现张正友标定法的一个简单框架:
```matlab
% 加载标定图片并检测棋盘格角点
clear; clc;
chessboardSize = [7, 6]; % 棋盘格尺寸
squareSize = 25; % 方格边长(mm)
objPoints = [];
imgPoints = [];
for i = 1:imagesCount
img = imread(['image_', num2str(i), '.jpg']);
grayImg = rgb2gray(img);
% 查找亚像素级角点
[found, corners] = findChessboardCorners(grayImg, chessboardSize);
if found
refineCorner = cornerSubPix(grayImg, corners, ...
[11, 11], [-1, -1], Criteria);
objPts = generateObjPoints(chessboardSize, squareSize); % 构造真实世界坐标
objPoints{end+1} = objPts;
imgPoints{end+1} = refineCorner;
end
end
% 执行标定
[matrix, distortionCoeffs, rvecs, tvecs] = calibrateCamera(objPoints, imgPoints, size(grayImg));
disp('内参矩阵:');
disp(matrix);
disp('畸变系数:');
disp(distortionCoeffs);
```
上述代码片段展示了如何读取多幅含有棋盘格图案的照片,并提取其特征点作为输入数据参与最终的标定运算。`calibrateCamera()` 函数内部实现了复杂的优化算法,自动估计相机的各项参数[^3]。
---
### 相关问题
阅读全文
相关推荐

















