SLAM初探(二)
SLAM初探(二)
海森堡测不准兔子 发表于4个月前
SLAM初探(二)
  • 发表于 4个月前
  • 阅读 226
  • 收藏 5
  • 点赞 0
  • 评论 0

相机标定

相机的内参矩阵

在OpenCV的3D重建中(opencv中文网站中:照相机定标与三维场景重建),对摄像机的内参外参有讲解: 外参:摄像机的旋转平移属于外参,用于描述相机在静态场景下相机的运动,或者在相机固定时,运动物体的刚性运动。因此,在图像拼接或者三维重建中,就需要使用外参来求几幅图像之间的相对运动,从而将其注册到同一个坐标系下面来 内参:下面给出了内参矩阵,需要注意的是,真实的镜头还会有径向和切向畸变,而这些畸变是属于相机的内参的。 摄像机内参矩阵:

输入图片说明

其中,fx,fy为焦距,一般情况下,二者相等,x0、y0为主点坐标(相对于成像平面),s为坐标轴倾斜参数,理想情况下为0

为更好的理解,举个实例:

现以NiKon D700相机为例进行求解其内参数矩阵: 就算大家身边没有这款相机也无所谓,可以在网上百度一下,很方便的就知道其一些参数——
焦距 f = 35mm
最高分辨率:4256×2832
传感器尺寸:36.0×23.9 mm
根据以上定义可以有:
u0= 4256/2 = 2128
v0= 2832/2 = 1416
dx = 36.0/4256
dy = 23.9/2832 fx = f/dx = 4137.8
fy = f/dy = 4147.3

mathmetica示例代码:

u0 = 4256/2 = 2128   
v0 = 2832/2 = 1416 
dx = 36.0/4256 
dy = 23.9/2832
fx = f/dx = 4137.8 
fy = f/dy = 4147.3
K = ({
   {fx, 0, u0},
   {0, fy, v0},
   {0, 0, 1}
  })


分辨率可以从显示分辨率与图像分辨率两个方向来分类。

[1]显示分辨率(屏幕分辨率)

是屏幕图像的精密度,是指显示器所能显示的像素有多少。由于屏幕上的点、线和面都是由像素组成的, 显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。 可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。
显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。

[2]图像分辨率

图像分辨率则是单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义。

摄像机外参

旋转向量(大小为1×3的矢量或旋转矩阵3×3)和平移向量(tx,ty,tz)。 旋转向量:旋转向量是旋转矩阵紧凑的变现形式,旋转向量为1×3的行矢量。

输入图片说明

r就是旋转向量,旋转向量的方向是旋转轴 ,旋转向量的模为围绕旋转轴旋转的角度。

通过上面的公式,我们就可以求解出旋转矩阵R。同样的已知旋转矩阵,我们也可以通过下面的公式求解得到旋转向量:

输入图片说明

旋转矩阵和平移矩阵共同描述了如何把点从世界坐标系转换到摄像机坐标系

旋转矩阵:描述了世界坐标系的坐标轴相对于摄像机坐标轴的方向 平移矩阵:描述了在摄像机坐标系下,空间原点的位置

标定中的世界坐标系

由于摄像机可安放在环境中的任意位置,在环境中选择一个基准坐标系来描述摄像机的位置,并用它描述环境中任何物体的位置,该坐标系称为世界坐标系。摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵与平移向量来描述。
与此相关的是图像坐标系和摄像机坐标系

坐标系

图像坐标系(Pixel coordinate system)

摄像机采集的数字图像在计算机内可以存储为数组,数组中的每一个元素(象素,pixel)的值即是图像点的亮度(灰度)。如图4.1所示,在图像上定义直角坐标系u-v,每一象素的坐标(u,v)分别是该象素在数组中的列数和行数。故(u,v)是以 象素为单位的图像坐标系坐标。

输入图片说明

理想的图像坐标系原点O1和真实的O0有一定的偏差,由此我们建立了等式(1)和(2),可以用矩阵形式(3)表示。

成像平面坐标系(Retinal coordinate system)

由于图像坐标系只表示象素位于数字图像的列数和行数,并没有用物理单位表示出该象素在图像中的物理位置,因而需要再建立以物理单位(例如厘米)表示的成像平面坐标系x-y,如图4.1所示。我们用(x,y)表示以物理单位度量的成像平面坐标系的坐标。在x-y坐标系中,原点定义在摄像机光轴和图像平面的交点处,称为图像的主点(principal point),该点一般位于图像中心处,但由于摄像机制作的原因,可能会有些偏离,在坐标系下的坐标为(u0,v0),每个象素在x轴和y轴方向上的物理尺寸为dx、dy,两个坐标系的关系如下:

输入图片说明

其中s'表示因摄像机成像平面坐标轴相互不正交引出的倾斜因子(skew factor)。

摄像机坐标系(Camera coordinate system)

摄像机成像几何关系可由图4.2表示,其中O点称为摄像机光心,轴和轴 与成像平面坐标系的x轴和y轴平行,轴为摄像机的光轴,和图像平面垂直。光轴与图像平面的交点为图像主点O',由点O与轴组成的直角坐标系称为摄像机坐标系。OO'为摄像机焦距。

输入图片说明

世界坐标系(World coordinate system)

在环境中还选择一个参考坐标系来描述摄像机和物体的位置,该坐标系称为世界坐标系。摄像机坐标系和世界坐标系之间的关系可用旋转矩阵R与平移向量t来描述。由此,空间中一点P在世界坐标系和摄像机坐标系下的齐次坐标分别为和且存在如下关系: 其中R是3×3正交单位矩阵,t是3维平移向量,,M1是两个坐标系之间的联系矩阵。 摄像机坐标系:

输入图片说明

摄影机坐标系的原点为摄像机光心,x轴与y轴与图像的X,Y轴平行,z轴为摄像机光轴,它与图像平面垂直。光轴与图像平面的交点,即为图像坐标系的原点,构成的直角坐标系称为摄像机坐标系。

相机镜头存在一些畸变,主要是径向畸变(下图dr),也包括切向畸变(下图dt)等。 输入图片说明 上图右侧等式中,k1,k2,k3,k4,k5,k6为径向畸变,p1,p2为切向畸变。在OpenCV中我们使用张正友相机标定法通过10幅不同角度的棋盘图像来标定相机获得相机内参和畸变系数。函数为

calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs,flag)
objectPoints: 一组世界坐标系中的3D  
imagePoints: 超过10张图片的角点集合
imageSize: 每张图片的大小  
cameraMatrix: 内参矩阵  
distCoeffs: 畸变矩阵(默认获得5个即便参数k1,k2,p1,p2,k3,可修改)  
rvecs: 外参:旋转向量  
tvecs: 外参:平移向量  

flag: 标定时的一些选项:

CV_CALIB_USE_INTRINSIC_GUESS:使用该参数时,在cameraMatrix矩阵中应该有fx,fy,u0,v0的估计值。否则的话,将初始化(u0,v0)图像的中心点,使用最小二乘估算出fx,fy。

CV_CALIB_FIX_PRINCIPAL_POINT:在进行优化时会固定光轴点。当CV_CALIB_USE_INTRINSIC_GUESS参数被设置,光轴点将保持在中心或者某个输入的值。

CV_CALIB_FIX_ASPECT_RATIO:固定fx/fy的比值,只将fy作为可变量,进行优化计算。当CV_CALIB_USE_INTRINSIC_GUESS没有被设置,fx和fy将会被忽略。只有fx/fy的比值在计算中会被用到。

CV_CALIB_ZERO_TANGENT_DIST:设定切向畸变参数(p1,p2)为零。

CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6:对应的径向畸变在优化中保持不变。

CV_CALIB_RATIONAL_MODEL:计算k4,k5,k6三个畸变参数。如果没有设置,则只计算其它5个畸变参数。

参考内容

标签: SLAM Math opencv
共有 人打赏支持
粉丝 36
博文 56
码字总数 51909
作品 1
×
海森堡测不准兔子
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: