参考:张正友相机标定程序实现
相机标定目的:建立相机成像几何模型(获取相机内外参)并矫正透镜畸变。
世界坐标系、相机坐标系、图像坐标系、像素坐标系
其中,相机坐标系的Z轴与光轴重合,且垂直于图像坐标系平面并通过图像坐标系的原点,相机坐标系与图像坐标系之间的距离为焦距f(也即图像坐标系原点与焦点重合)。像素坐标系平面u-v和图像坐标系平面x-y重合,但像素坐标系原点位于图中左上角。
棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。
fx,fy是以像素为单位的焦距,
findChessboardCorners() 检测棋盘格内部角点的位置,为了得到更为精确的角点位置,可以用cornerSubPix()
cornerSubPix() The function iterates to find the sub-pixel accurate location of corners or radial saddle points,findChessboardCorners内部调用了cornerSubPix
find4QuadCornerSubpix() //finds subpixel-accurate positions of the chessboard corners
findCirclesGrid() 检测圆形珊格的中心点
drawChessboardCorners() 在图像上画角点
calibrateCamera() 相机标定,通过不同视角下的标定板图片计算相机内外参数。
calibrationMatrixValues() //Computes useful camera characteristics from the camera matrix.
drawFrameAxes() 根据估计得位姿画坐标系
projectPoints() 根据指定的相机内外参数,计算3D点在图像平面的的投影点坐标,可用来评价标定结果。
initUndistortRectifyMap() 计算畸变映射
remap() 图片重映射
undistort() 图像去畸变
Rodrigues() 旋转矩阵和旋转向量相互转换
solvePnP(),solvePnPGeneric(),solvePnPRansac(),solvePnPRefineLM(),solvePnPRefineVVS() 根据指定的3D和2D点对,计算物体位姿。
findHomography() Finds a perspective transformation between two planes.计算单应性矩阵
warpPerspective() Apply a perspective transformation to an image.
findFundamentalMat() 计算基本矩阵
findEssentialMat() 计算本质矩阵
单应性矩阵:描述的是共面点在两个相机视图下的像素点的约束关系,描述的是点与点之间的约束关系,使用单应矩阵可以找到像点在另一幅图像上对应点的确切位置。具有8个自由度
基本矩阵:描述的是3维场景的对极约束关系,和三维场景的结构无关,只依赖于相机的内参数以及外参数,需要两个相机的位置有旋转和平移。其描述的是点和线的约束关系,当已知图像上的点x1和基础矩阵F时是无法获得对应的像素点下x2的,只能获得x1对应的极线。即基础矩阵表示的是像点和另一幅图像上的对极线的映射关系,使用基础矩阵无法得到像点对应点在另一幅图像上的确切位置。