我有一个3x点的3x3协方差矩阵,并且我想知道给定的图像姿势[Xc,Yc,Zc,q0,q1,q2,q3]
的等效2d协方差(对于像平面中的u,v)
有一种很长的(几何)方式,即3d协方差可以是3d椭圆,然后将其投影到平面中可以得到2d椭圆,最后将椭圆转换为2d矩阵,但这很长,
任何直接方式,以代数方式解决都将有所帮助
P. S:任何线索或对解决方案的引用(无需代码),也有帮助,我将用代码重写答案(在c++中)
我也标记了卡尔曼过滤器,因为我认为它与此有关
最佳答案
如何解析地表示转换变量的协方差?
您可以使用uncertainty propagation equations从分析上获得一阶近似值。特别是,关于非线性组合的段落基本上解释了以下内容:
如果我完全理解您的问题,那么您在世界坐标系中表示的3D点具有协方差,表示为C_Xw
。您需要该点在图像平面中的投影的协方差,表示为C_xi
。让我们用f
表示将3D世界坐标映射到图像坐标的函数。然后我们有:C_xi = J_f . C_Xw . J_f^T
。
如何计算jacobian矩阵J_f
?
实际上,f
是针孔投影函数,可以如下分解:f = f_intr o f_persp o f_pose
,其中:
f_intr
应用内在相机系数(即水平和垂直焦距fx
和fy
,偏斜s
,主点坐标cx
和cy
):f_intr( [xn; yn] ) = [fx, s, cx; 0, fy, cy] . [xn; yn; 1] = [fx . xn + s . yn + cx; fy . yn + cy]
f_persp
将针孔透视模型应用于相机坐标系中的3D点:f_persp( [Xc; Yc; Zc] ) = [Xc/Zc; Yc/Zc]
f_pose
应用3D刚性变换(即,旋转R_cw
,平移t_cw
),将世界坐标系中的3D点映射到摄像机坐标系中的3D点:f_pose( [Xw; Yw; Zw] ) = R_cw . [Xw; Yw; Zw] + t_cw
chain rule of derivatives帮助表达组合函数的派生:
通过解析可以很容易地表达
f_intr
,f_persp
和f_pose
的雅各布矩阵:f_intr
在xn
中是线性的,因此J_f_intr = [fx, s; 0, fy]
是常数J_f_persp( Xc ) = [1/Zc, 0, -Xc/Zc²; 0, 1/Zc, -Yc/Zc²]
f_pose
在Xw
中是线性的,因此J_f_pose = R_cw
是常数最终表达
最后,我们得到以下解析表达式:
C_xi = J_f . C_Xw . J_f^T
其中
J_f = [fx, s; 0, fy] . [1/Zc, 0, -Xc/Zc²; 0, 1/Zc, -Yc/Zc²] . R_cw
同样,这是一阶近似,但是针孔投影函数“不是很非线性”,这意味着对于大多数应用来说,这种近似通常足够接近。