摄像机内外参计算过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摄像机内外参计算过程
罗海风2011-2-28
1.对内参的初始化:
涉及函数:init_intrinsic_param_fisheye.m
输入:x_1,x_2,x_3,…--角点的图像坐标,X_1,X_2,X_3,…--角点的世界坐标;
输出:所有内参,包括摄像机焦距fc,摄像机坐标系原点在图像上的坐标cc,几何畸变系数kc,斜交系数alpha_c,摄像机矩阵KK(包含以上系数)。
焦距的初始值:fc=
max(,)
_
max(,)
nx ny
f init
nx ny
π
π
⎡⎤
⎢⎥
=⎢⎥
⎢⎥
⎢⎥
⎣⎦
原点坐标的初始值设为图像中心处,即cc=
0.50.5 _
0.50.5
nx
c init
ny
-
⎡⎤
=⎢⎥
-
⎣⎦
计算内参时不考虑畸变,畸变系数初始值为零,即kc=
0 _
0 k init
⎡⎤
⎢⎥
⎢⎥
=
⎢⎥
⎢⎥
⎣⎦
不考虑摄像机坐标轴夹角非正交情况,即alpha_c=_0
alpha init=
内参数矩阵初始值
max(,)
00.50.5
max(,)
00.50.5
001
nx ny
nx
nx ny
KK ny
π
π
⎡⎤
-
⎢⎥
⎢⎥
⎢⎥
=-
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎣⎦
-------------------(1)
2.对外参的初始化:
涉及函数:comp_ext_calib_fisheye.m
功能:主要是调用compute_extrinsic_init_fisheye.m 和compute_extrinsic_refine_fisheye.m
compute_extrinsic_init_fisheye.m
输入:像点的世界坐标和图像坐标x_kk 和X_kk,以及所有内参fc,cc,kc,alpha_c; 输出:所有外参初始值,包括平移矩阵Tckk ,旋转矩阵Rckk 和旋转向量omckk
compute_extrinsic_refine_fisheye.m
输入:像点的世界坐标和图像坐标x_kk 和X_kk,最大迭代次数MaxIter 以及所有内参fc,cc,kc,alpha_c; 输出:所有外参初始值,包括平移矩阵Tckk ,旋转矩阵Rckk 和旋转向量omckk
对像点世界坐标和图像坐标进行整理(整理过程考虑到坐标变换和畸变模型,涉及normalize_pixel_fisheye .m 输入:像点图像坐标x_kk,所有内参fc,cc,kc,alpha_c;输出:标准化无畸变图像坐标xn )。 坐标变换首先按照原点坐标进行线性映射,转换成以焦距为单位:
111
222___x kk cc fc x distort x kk cc fc -⎡⎤⎢⎥⎢
⎥=-⎢⎥⎢⎥⎣⎦
然后校正相机平面和图像平面不平行带来的误差:
122_____x distrot alpha c x distrot x distort x distrot -⨯⎡⎤
=⎢⎥⎣⎦
最后进行畸变补偿:(调用函数comp_fisheye_distortion.m 输入:畸变的像点图像坐标xd ,畸变系数k ;
输出:
无畸变的像点图像坐标x )
xd 是畸变后的像素坐标,令__theta d theta theta d ==
进入循环20次的补偿迭代,每次循环中有
12
24682468
1121314112223242__11theta d theta d theta k theta k theta k theta k theta k theta k theta k theta k theta ⎡⎤=⎢⎥++++++++⎣⎦
,其中k 为畸变系数。本程序中,只考虑径向畸变不考虑切向畸变,k 虽然是5x1矢量,但是
最后一位即切向畸变系数没有使用。 然后有1212tan()tan()__theta theta scaling theta d theta d ⎡⎤
=⎢
⎥⎣⎦
111
1221211
2222Np Np Np Np xd scaling xd scaling xd scaling xn xd scaling xd scaling xd scaling ⎡⎤
=⎢
⎥⎣⎦
畸变补偿结束。 得到标准化无畸变的世界坐标X_new 和图像坐标xn 。
由这两组坐标计算得到透视投影矩阵H(计算过程见摄像机定标程序中透视投影矩阵H 的计算过程.doc ),并对H 进行整理得到
((:,1))()((:,2))H H
H norm H sc
mean norm H =
=⎡⎤⎢⎥
⎣⎦
由H 计算中间变量,有
[](:,1)1((:,1))
(:,2)(1,(:,2))1
2((:,2)(1,(:,2))1)3(1,2)123()
H u norm H H dot u H u u norm H dot u H u u cross u u RRR u u u omckk rodrigues RRR =
-=
-=== 然后得到外参矩阵中旋转矩阵()Rckk rodrigues omckk =和平移矩阵(:,3)Tckk H =。其中函数rodrigues 作用是旋转矩阵和旋转向量的相互转换。
由于计算中所用的坐标是进行过映射调整的,所以最终得到的外参矩阵也需要调整,得: 平移矩阵_Tckk Tckk Rckk T transform =+⨯ --------------------------------(2)
_Rckk Rckk R transform =⨯
旋转向量()omckk rodrigues Rckk =
旋转矩阵()Rckk rodrigues omckk = --------------------------------(3)
其中,_(_)[,,]()
__(_)_T T
T
T
Y X kk mean X kk YY Y Y U S V svd YY R transform V T transform R transform X mean
=-=⨯===-⨯
以上得到了内参和外参的初始值。接下来由这些参数用牛顿法进行迭代计算得到更佳的外参。 令omckk param Tckk ⎡⎤
=⎢
⎥⎣⎦
由像点世界坐标、内外参初值和投影模型计算得到:投影坐标x ,投影坐标对旋转向量的导
数dxdom ,投影坐标对平移矩阵的导数dxdT (计算过程详见project_points_fisheye.m 输入:多个点的世界坐标X,内外参数om,T,f,c,k,alpha;输出:像点图像坐标计算值xp,对各参数的导数dxpdom,dxpdT,dxpdf,dxpdc,dxpdk ) 像点坐标和计算坐标差值ex=x_kk-x
[]JJ dxdom dxdT =
2T JJ JJ JJ =
参数变动1
_2T
param innov JJ JJ ex -=