校准:
我在Matlab中使用这个视觉工具箱校准了相机。我使用棋盘图像来做到这一点。校准后,我得到以下内容:
>> cameraParams
cameraParams =
cameraParameters with properties:
Camera Intrinsics
IntrinsicMatrix: [3x3 double]
FocalLength: [1.0446e+03 1.0428e+03]
PrincipalPoint: [604.1474 359.7477]
Skew: 3.5436
Lens Distortion
RadialDistortion: [0.0397 0.0798 -0.2034]
TangentialDistortion: [-0.0063 -0.0165]
Camera Extrinsics
RotationMatrices: [3x3x18 double]
TranslationVectors: [18x3 double]
Accuracy of Estimation
MeanReprojectionError: 0.1269
ReprojectionErrors: [48x2x18 double]
ReprojectedPoints: [48x2x18 double]
Calibration Settings
NumPatterns: 18
WorldPoints: [48x2 double]
WorldUnits: 'mm'
EstimateSkew: 1
NumRadialDistortionCoefficients: 3
EstimateTangentialDistortion: 1
我知道从相机坐标到棋盘坐标的转换:R1,t1。如何计算棋盘和垂直平面之间的转换:R2,t2。鉴于这个平面与地面平行,距离它的高度为193.040厘米。
注意: 这个问题是Calibration of images to obtain a top-view for points that lie on a same plane的一部分。我发布了它,问一个普遍的问题。
答案 0 :(得分:2)
因此,IIRC工具箱中的视图坐标系定义为棋盘左上角的原点,x轴向右,y轴向下(当然z轴是x和x的叉积) y)。这很容易验证,只是后项目点[0; 0; 0],[10; 0; 0]和[0; 10; 0]在其中一个校准图像的顶部,看看它们落在哪里。
我们称之为“校准视图”框架。我们也称“地板”是你感兴趣的第二架飞机。
现在让我们假设(很大的假设)你小心地将棋盘放在那个视图中,使它与地板正交,并且其水平边缘平行于地板。这意味着校准视图框架的x轴平行于地板,y轴与地板垂直。
因此,地板平行于校准视图框的(x,z)平面。因此,如果
Rc = [x y z]
是相机校准视图的旋转,然后是地板旋转
Rf = [x z y]
(假设地板的法线向量进入它。如果你喜欢它从它上升,那么它将是Rf = [z x -y])。
此外,让我们从地板调用H校准视图帧原点的距离(高度)。记住那个框架的y轴指向地板,我们看到点F = [0; H; 0](在视图框架坐标中) on 在地板上,我们可以将它用作地板框架的原点。
在相机坐标中,矢量F由下式表示:
Fc = Rc * F = Rc * [0; H; 0]
如果Tc是(校准的)翻译w.r.t.校准视图帧的相机,然后是地板上的同一点,在相机坐标中:
F = Tc + Fc
所以从地板到相机的3x4坐标变换矩阵是
Q = [Rf, F]
如果您的假设成立,这应该给您一个合理的估计。
当然,更好的方法是在地板上拍摄棋盘的图像...