张正友标定法和手眼标定
时间: 2025-01-03 17:39:21 浏览: 13
### 张正友标定法原理及应用
张正友标定法是一种广泛应用于单目相机的标定技术,其核心在于通过一系列棋盘格图案来获取相机内部参数和畸变系数。具体来说,在该方法中,用户需拍摄多幅包含标准尺寸棋盘格的图像作为输入数据[^2]。
对于每一张含有棋盘角点的图像,算法能够自动检测这些特征点的位置并记录下来。基于此,可以建立世界坐标系下已知位置的三维点与其对应的二维像平面投影之间的一系列方程组。最终借助最小二乘估计或其他优化手段求得摄像机矩阵以及径向切向失真因子等重要参数[^3]。
#### Python实现示例
```python
import cv2
import numpy as np
# 准备对象点, 如(0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
objp = np.zeros((6*7, 3), np.float32)
objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2)
# 存储所有图像的对象点和图像点
objpoints = []
imgpoints = []
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,corners=cv2.findChessboardCorners(gray,(7,6))
if ret==True:
objpoints.append(objp)
corners2=cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))
imgpoints.append(corners2)
ret,matrix,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)
```
### 手眼标定原理及应用
手眼标定主要解决的是如何确定安装于机械臂末端执行器上的视觉传感器相对于基座坐标系的姿态问题。通常分为两种模式:“Eye-in-Hand” 和 “Eye-to-Hand”。前者指的是摄像头固定在机器人的工具中心点处;后者则是指摄像头位于远离机器人手臂的地方观察工作空间内的物体运动状况[^1]。
无论是哪种配置方式,基本思路都是相同的——即寻找一组共同参照物(例如特定标记),并通过多次移动机器人使这些目标出现在不同视角下的视场范围内。随后依据采集到的数据集构建数学模型,进而推导出手部与眼睛间相对位姿关系表达式 Ax=b 或者 Axb=c 的形式来进行求解。
### 比较与区别
两者虽然都涉及到坐标变换的概念,但在应用场景上存在明显差异:
- **目的不同**:张正友标定侧重于校准单一成像设备本身特性,而手眼标定则关注于连接两个独立的空间参考框架;
- **操作流程各异**:前者依赖静态场景中的几何结构完成整个过程,后者往往涉及动态变化的过程以捕捉足够的样本信息用于后续分析处理;
- **适用范围有所差别**:张正友方案适用于任何类型的光学仪器,只要能提供清晰可见且易于辨认的目标即可;相比之下,手眼协调任务更多见诸工业自动化领域当中。
阅读全文