opencv相机标定

 参考:张正友相机标定程序实现

相机标定目的:建立相机成像几何模型(获取相机内外参)并矫正透镜畸变。

世界坐标系、相机坐标系、图像坐标系、像素坐标系

其中,相机坐标系的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对应的极线。即基础矩阵表示的是像点和另一幅图像上的对极线的映射关系,使用基础矩阵无法得到像点对应点在另一幅图像上的确切位置。

原文地址:https://www.cnblogs.com/larry-xia/p/10916774.html