成像基本原理
相机标定指建立相机图像像素位置与场景点位置之间的关系,即求解相机模型的参数。
(u,v)为图像点
K为相机内参数(相机硬件)
R为相机旋转,t为相机平移(相机位姿)
(X,Y,Z)为空间点
f为焦距,dx,dy为每个像素的距离,u0,v0为主点坐标
世界坐标系->相机坐标系(刚体变换)
相机坐标系->图像坐标系(透视投影)
图像坐标系->像素坐标系(仿射变换)
- 三角化:已知图像点,内参和外参,求空间点
- 姿态估计:已知图像点,内参和空间点,求外参
- 相机标定:已知图像点和空间点,求内参和外参
- 稀疏重建:已知图像点,求其他
相机畸变
- 像素坐标轴倾斜
- 透镜形状缺陷
径向畸变:枕形畸变和桶形畸变(k1,k2,k3矫正系数)
切向畸变(p1,p2矫正系数)
- 组装工艺偏差
手眼关系
手在眼上:顾名思义,也就是相机与机械臂是一体,那么此时相机与机械臂末端的位置是相对不变的,手眼矩阵就是相机与机械臂之间的转换
手在眼外:相机与机械臂是固定在不同地方的,那么此时相机与机械臂底座的位置是相对不变的,手眼矩阵是相机与机械臂底座的转换
相机看到一个物体的 3D 坐标 → 用手眼矩阵转一下 → 变成机械臂能直接用的坐标 → 去抓。
手眼就是相机和机械手之间的固定变换,用来把相机看到的东西转给机械臂用。
2D->3D
核心逻辑链(能口述)
- 相机拍出来的是2D 像素点
- 像素点 → 反推回相机坐标系下的 3D 射线
- 再结合深度 / 外参 / 手眼 → 得到世界坐标系 3D 点
- 图上取一点:(u,v)
- 得到深度:Zc(来自双目 / 深度相机 / 激光)
- 像素 → 相机 3D
- 相机 → 世界 3D
双目相机计算深度原理,也就是视差图转为深度图:
f为焦距,b为基线长度,d为视差
流程:
- 获取左右图像
- 提取特征点(SIFT/ORB...)
- 粗匹配(得到一堆初始匹配对KNN/BF)
- 计算基础矩阵 F / 本质矩阵 E → 得到极线约束
- 根据极线约束,剔除错误匹配
- 双目矫正(rectification) → 让极线变成水平共线
- 在水平极线上做密集匹配 → 这就是你说的:必须在极线上匹配!
- 得到视差图 → 深度图