内参标定
时间: 2025-05-25 14:18:41 浏览: 15
### 相机内参标定方法概述
相机内参标定是计算机视觉领域的重要基础工作之一,其目的是获取描述相机成像特性的参数集合。这些参数通常包括焦距、光心位置以及镜头畸变系数等。其中一种广泛应用的技术称为张正友标定法[^1]。
#### 张正友相机标定法简介
张正友标定法基于平面棋盘格图案作为标定板,通过捕捉多个不同角度下的棋盘格图像并提取角点坐标来完成标定过程。这种方法不仅操作简便而且精度较高,在实际工程中有很高的实用价值。具体来说,该算法可以分为以下几个方面:
- **数据采集**:需要准备一张带有已知尺寸的标准棋盘格模板,并让摄像头从不同的视角对其进行多次拍摄。
- **角点检测**:对于每幅图片,程序会自动寻找棋盘格的交界处即所谓的“角点”,并将它们映射到像素空间内的二维坐标系下。
- **求解内外参数及畸变校正矩阵**:利用几何约束条件建立方程组进而估算出所需的各项参数值。
此外还有专门针对双目系统的解决方案比如 ZED 双目相机也有相应的内参标定指南可供查阅学习[^2]。
以下是采用 Python 实现的一个基本示例代码片段用于执行普通的单反或者网络摄像机之类设备的内部参数估计任务:
```python
import numpy as np
import cv2
import glob
# 设置查找亚像素角点的参数
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# 准备对象点,形如(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 = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.
images = glob.glob('*.jpg')
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 寻找棋盘格角点
ret,corners=cv2.findChessboardCorners(gray,(7,6),None)
if ret==True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
imgpoints.append(corners2)
# 绘制并显示角点
img = cv2.drawChessboardCorners(img, (7,6), corners2,ret)
cv2.imshow('img',img)
cv2.waitKey(500)
cv2.destroyAllWindows()
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None,None)
print(mtx,dist)
```
此脚本读取一系列 JPEG 文件格式的照片文件夹路径里的样本照片来进行处理分析得到最终的结果输出内在参数矩阵 `mtx` 和失真矢量 `dist`.
值得注意的是如果目标硬件属于广角类型的鱼眼镜头那么就需要调整部分函数调用来适配特殊模型结构特性[^3].
阅读全文
相关推荐















