图像处理工具翻译详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
旋转矩阵(Rc_ext)以及平移矢量(Tc_ext)。旋转矩阵(Rc_ext)与旋转矢量(omc_ext)的关系是Rodrigues公式,即:Rc_ext=rodrigues(omc_ext)。
一个点在栅格坐标系(grid reference frame:XX)和摄像机坐标系(camera reference frame:XXc)中坐标关系是:
XXc=Rc_ext * XX + Tc_ext
基于matlab的摄像机标定中,给出的结果有一个主点坐标cc。cc通常是指CCD与光轴的交点,也就是摄像机焦点在视平面上的投影点,但该点与图像坐标的中心并不一定一致。在图像坐标系中,我们通常选其左上角为原点,cc在该坐标下的坐标就是matlab给出的仿真值。
1.Reproject:再投影,指利用标定的摄像机参数,将网格点(物点)重新投影在各个像面
上,得到的新图像。
2.Reprojection Error:再投影误差,即上述投影结果与原像面上各栅格点的误差。Matlab
中利用不同的颜色来区分不同的图像帧。
3.Recomp.corners:重新计算特定图像的角点(用不同的窗口尺寸)。
摄像机标定问题的探讨
(2012-02-29 07:42:01)
转载▼
/demo_c441_i92176.html
1.用matlab标定出来的结果为什么焦距有两个值
采用matlab摄像机标定工具箱标出来的焦距值有两个,它对应于像素在x、y两个方向的尺寸大小不一致的情况。本来,从绝对尺寸来说,摄像机的焦距只应该有一个。但若用像素个数来表示时,问题会有所不同。假定焦距为fmm,若像素水平尺寸为dx mm,垂直尺寸为dy mm ,则焦距f在水平方向的像素个数就是f/dx,垂直方向像素个数就是f/dy,显然二者是不同的。
2.若知道像点位移,如何推知物点位移?
假设原图像大小为a(mm)*b(mm),像素数为a1*b1,则每个像素大小为:
(a/a1)*(b/b1)。 (1)
那么实际焦距值:
fcr1=fc1*(a/a1),fcr2=fc2*(b/b1)。 (2)
有了此焦距值,就可以根据对像点位移的要求来推知物点的位移。具体推法为:
像点位移Ix / fcr1 = 物点位移Ox / 物距, (3)
像点位移Iy / fcr2 = 物点位移Oy / 物距。 (4)
由于物距可以控制,故得:
物点位移Ox=物距*(像点位移Ix / fcr1), (5)
物点位移Oy=物距*(像点位移Iy / fcr2)。 (6)
注:(1)Ix,Iy为绝对像点位移尺寸,若表示成像素个数(Nx,Ny)则为:
Ix=Nx*(a/a1), Iy=Ny*(b/b1); (7)
将式(7)和(2)代入到式(5)、(6)中可得:
物点位移Ox=物距*(像点像素数Nx / X方向焦距像素数即MATLAB标定输出值fc1), (8)
物点位移Oy=物距*(像点像素数Ny / Y方向焦距像素数即MATLAB标定输出值fc2)。 (9)
(2)原图像绝对尺寸大小可通过photoshop来看。
3.若知道像点旋转量,如何推知物点旋转量
像面上弧长LI=rθ, (10)
物面上弧长LO=Rθ, (11)
又:r/R=f/OD (12)
故:LO=(R/r)LI=(OD/f)LI (13)
注:LO为物面上的弧长,LI为像面上的弧长,OD为物距,f为焦距
4.摄像机内参数(intrinsic parameters)及其定义
(1)内参数
焦距(Focal length):以像素表示,存储在2*1矢量fc中;
主点(Pricipal point):主点坐标存储在2*1矢量cc中;
倾斜系数(Skew coefficient):x与y像素轴的夹角,存储在标量alpha_c中;
畸变(Distortion):图像畸变系数(径向和切向畸变),存储在5*1矢量kc中。
(2)定义(根据camera calibration toolbox for matlab帮助翻译)
假设P是摄像机参照系坐标矢量XXc=[Xc;Yc;Zc]空间中的一个点,现在根据内参数(fc,cc,alpha_c,kc) 把该点投影在像面上。设xn为XXc归一化的针孔图像投影:xn=[Xc/Zc,Yc/Zc](colum)=[x,y](colum)。此处让r2=x2+y2。
考虑到透镜畸变以后,新的归一化点坐标xd被定义如下:
xd=[xd(1),xd(2)](column)=(1+kc(1)r^2+kc(2)r^4+kc(5)r^6)xn+dx
dx是切向畸变矢量,
dx=[2kc(3)xy+kc(4)(r^2+2x^2),kc(3)(r^2+2y^2)+2kc(4)xy](column).
此处5元素矢量kc同时包含了径向和切向畸变系数。注意到第六阶径向畸变项的系数是矢量kc的第5个分量。
值得注意的是上述畸变模型首次由Brown于1966年引入,称作“Blum Bob”模型(径向多项式+“薄棱镜”)。切向畸变来源于复合透镜的“decentering”或不完美的透镜元件中心以及其他制造缺陷。
一旦考虑了畸变,P在像面上的投影坐标x_pixel=[xp;yp]即为:
xp=fc(1)(xd(1)+alpha_c*xd(2))+cc(1)
yp=fc(2)xd(2)+cc(2)
一般的标定过程:选择图像读取方式(标准,还是一副一副的读),如果选择一次性将文件读入内存,则在后面输入文件基本名称和文件格式后,不需要再点ReadImage.一般直接选择标准方式即可。
1,进入standard vision,选择Image names,在Matlab命令窗口中,输入图像的基本名,如calL,程序自动提取文件名为calL1,calL2..的图像。再输入图像格式,按照给出的提示,输入相应的字母即可。
2,在得到所有的标定图像后,可以点击在Extract grid corners,下面需要手动标记出角点的范围,程序会在范围内精确确定角点的位置。这里需要注意的是,由于标定图像较多,往往会有手误,将范围标错,这时程序会提示,重新输入标定块个数,并可以通过对焦距或Kc(畸变参数)进行预估,来调整范围。这边对焦距和畸变参数的估计,只是用来调整角点范围,不会对标定结果存在影响。这边Kc={-1,1},可以重复几次来获得正确的范围,最终得到正确的角点坐标。
3,当所有的角点被正确提取后,点击Calibration,就可以的到相机的各个参数。
4,反投影误差:
通过上述三个步骤,就获得了标定信息。对结果的一些可视化的工作,该软件也做得很好。首先,可以通过reproject on images,得到根据当前标定结果得到的反投影误差,从点云的聚集情况和分散的最大范围可以看出反投影误差的大小。还可以对每幅图像的角点进行反向投影,可以看到反向投影点与原角点位置的偏差,根据这些可以对标定结果的误差和可信