Step1:模型 16个相机参数(内参、外参、畸变参数)

16个相机参数

摘要:本文首先介绍了针孔相机模型,然后推导四个坐标轴变换的关系,引出R、T、K、D中包含相机的5个内参,6个外参,5个畸变参数。相机的标定是从空间点及其对应的像素点,获得相机的位置信息和内部参数信息的过程,16个相机参数的总结为此提供了模型基础。

一、针孔相机模型

相机中有四个坐标系,分别为{world},{camera},{image},{pixel}

  • {world}为世界坐标系,可以任意指定 x w x_w xw轴和 y w y_w yw
  • {camera}为相机坐标系,原点位于小孔,z轴与光轴重合, x c x_c xc轴和 y c y_c yc轴平行投影面
  • {image}为图像坐标系,原点位于光轴和投影面的交点, x p x_p xp轴和 y p y_p yp轴平行投影面
  • {pixel}为像素坐标系,从小孔向投影面方向看,投影面的左上角为原点 O p O_p Op i _i i x _x x,uv轴和投影面两边重合

针孔相机的基本模型
图片说明:{camera}:O c _c c-x c _c cy c _c cz c _c c,相机中心点Oc,焦距f。{picture}:O-xy,像平面π。主轴:从 O c O_c Oc出发,垂直于像平面的射线 。主点:主轴与像平面的交点p。

二、四个坐标轴的变换关系

介绍如何从世界坐标轴,通过相机坐标轴和像面坐标轴,得到像素坐标轴的变换的过程,即 w o r l d : P w = ( x w , y w , z w ) T world:P_w=(x_w,y_w,z_w)^T world:Pw=(xw,yw,zw)T-----> c a m e r a : P c = ( x c , y c , z c ) T camera:P_c=(x_c,y_c,z_c)^T camera:Pc=(xc,yc,zc)T------> i m a g e : m = ( x p , y p , 1 ) T image:m=(x_p,y_p,1)^T image:m=(xp,yp,1)T-----> p i x e l : P i x = ( u , v , 1 ) T pixel:Pix=(u,v,1)^T pixel:Pix=(u,v,1)T

2.1 从{world}到{camera}

设某点在{world}中的坐标为 P w = ( x w , y w , z w ) T Pw=(x_w,y_w,z_w)^T Pw=(xw,yw,zw)T,在{camera}中的坐标为 P c = ( x c , y c , z c ) T Pc=(x_c,y_c,z_c)^T Pc=(xc,yc,zc)T。则
P c = [ R T 0 1 ] P w P_c=\begin{bmatrix}R&T\\ 0&1\end{bmatrix}P_w Pc=[R0T1]Pw
其中,R为正交旋转矩阵,
R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31

### 相机内参的定义及其作用 在计算机视觉中,相机内参是指描述相机内部几何属性的一组参数。这些参数用于建立世界坐标系中的三维点与其对应的二维图像像素位置之间的映射关系。 #### 定义 相机内参主要包括以下几个方面: - **焦距 (f)**:表示光学中心到成像平面的距离。通常分为水平方向和垂直方向两个分量 \( f_x \) 和 \( f_y \),单位为像素数[^1]。 - **主点偏移 (\(c_x, c_y\))**:指实际成像平面上原点相对于理想情况下位于图像中心的位置偏差。这反映了镜头光心投影至感光元件上的具体坐标的位移情况[^4]。 - **径向畸变系数**:由于透镜制造工艺等原因造成的非线性失真效应,主要表现为桶形或枕形变形。常用多项式模型来近似表达这种变化规律,如 k₁、k₂等项代表不同阶次的影响程度。 - **切向畸变系数**:由装配误差引起的一种特殊类型的扭曲现象,可通过 p₁、p₂ 参数加以修正。 #### 作用 准确获取并应用相机内参对于许多高级视觉任务至关重要: - 实现精确的目标定位与跟踪; - 支持多视角重建算法构建真实的三维结构; - 提高特征匹配精度以及增强现实效果的真实性; - 辅助完成基于单反或其他高质量摄影设备拍摄的照片后期处理工作; 为了得到可靠的相机内参估计值,一般会采用专门设计好的棋盘格图案作为标定板,并通过一系列操作流程自动计算所需数值。OpenCV库提供了方便易用的功能接口来进行此类作业。 ```python import cv2 as cv import numpy as np # 准备对象点,像是3D空间中的网格角点 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 = cv.imread(fname) gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 查找棋盘格角落 ret, corners = cv.findChessboardCorners(gray, (7, 6), None) # 如果找到,则添加对象点、图像点(经过细化) if ret == True: objpoints.append(objp) corners2 = cv.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria=(cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001)) imgpoints.append(corners2) ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera( objpoints, imgpoints, gray.shape[::-1], None, None) ```
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值