相机外参与相机位姿深度明白

打印 上一主题 下一主题

主题 826|帖子 826|积分 2478

外参描述了相机活着界坐标系中的位置和朝向,即它将世界坐标转换为相机坐标的几何变动。详细来说,外参包罗一个 旋转矩阵                               R                          R               R 和一个 平移向量                               t                          t               t,它们共同构成了将世界坐标变动到相机坐标系的刚体变动。
1. 外参矩阵的界说

外参矩阵通常体现为一个                                    3                         ×                         4                              3 \times 4                  3×4 的矩阵,情势如下:
                                         [                                                                              R                                                                                      t                                                                          ]                                  \begin{bmatrix} R & t \end{bmatrix}                     [R​t​]
其中:


  •                                         R                                  R                     R 是一个                                         3                            ×                            3                                  3 \times 3                     3×3 的旋转矩阵,它描述了相机的朝向(姿态)。
  •                                         t                                  t                     t 是一个                                         3                            ×                            1                                  3 \times 1                     3×1 的平移向量,它描述了相机相对于世界坐标系的平移。
该矩阵的作用是将世界坐标系下的点                                              P                            w                                  =                         (                                   X                            w                                  ,                                   Y                            w                                  ,                                   Z                            w                                            )                            ⊤                                       \mathbf{P}_w = (X_w, Y_w, Z_w)^\top                  Pw​=(Xw​,Yw​,Zw​)⊤ 转换为相机坐标系下的点                                              P                            c                                  =                         (                                   X                            c                                  ,                                   Y                            c                                  ,                                   Z                            c                                            )                            ⊤                                       \mathbf{P}_c = (X_c, Y_c, Z_c)^\top                  Pc​=(Xc​,Yc​,Zc​)⊤:
                                                    P                               c                                      =                            R                                       P                               w                                      +                            t                                  \mathbf{P}_c = R \mathbf{P}_w + t                     Pc​=RPw​+t
可以将这个过程写成齐次坐标情势,方便描述:
                                                                                                                    [                                                                                                                                     X                                                          c                                                                                                                                                                                              Y                                                          c                                                                                                                                                                                              Z                                                          c                                                                                                                                                                          1                                                                                                             ]                                                      =                                                       [                                                                                                                 R                                                                                                                         t                                                                                                                                                       0                                                                                                                         1                                                                                                             ]                                                                     [                                                                                                                                     X                                                          w                                                                                                                                                                                              Y                                                          w                                                                                                                                                                                              Z                                                          w                                                                                                                                                                          1                                                                                                             ]                                                                                                                  \begin{equation} \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \end{equation}                                           ​Xc​Yc​Zc​1​                      ​=[R0​t1​]                      ​Xw​Yw​Zw​1​                      ​​​
这其中的                                    [                                                                       R                                                                               t                                                                                                 0                                                                               1                                                                   ]                              \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix}                  [R0​t1​] 矩阵就是外参矩阵的扩展情势(齐次变动矩阵)。
2. 相机姿态推导

我们关心的是怎样从外参矩阵                                    [                                                                       R                                                                               t                                                                   ]                              \begin{bmatrix} R & t \end{bmatrix}                  [R​t​] 中推导出相机活着界坐标系中的姿态,即旋转和位置。
2.1 相机的位置

相机的世界坐标位置                                    C                              \mathbf{C}                  C 是通过将相机坐标原点逆变动到世界坐标系中得到的。相机坐标系中的原点在相机坐标下是                                              P                            c                                  =                         (                         0                         ,                         0                         ,                         0                                   )                            ⊤                                       \mathbf{P}_c = (0, 0, 0)^\top                  Pc​=(0,0,0)⊤,因此有:
                                         R                            C                            +                            t                            =                            0                                  R \mathbf{C} + t = 0                     RC+t=0
解得相机活着界坐标系中的位置为:
                                         C                            =                            −                                       R                                           −                                  1                                                 t                                  \mathbf{C} = -R^{-1} t                     C=−R−1t
由于旋转矩阵                                    R                              R                  R 是正交矩阵,以是                                              R                                       −                               1                                            =                                   R                            ⊤                                       R^{-1} = R^\top                  R−1=R⊤,因此相机位置可以体现为:
                                         C                            =                            −                                       R                               ⊤                                      t                                  \mathbf{C} = -R^\top t                     C=−R⊤t
2.2 相机的朝向(姿态)

相机的姿态由旋转矩阵                                    R                              R                  R 体现,它将世界坐标系中的方向向量旋转到相机坐标系中。详细来说,旋转矩阵的列向量体现世界坐标系中基向量在相机坐标系中的方向。
因此,                                   R                              R                  R 描述了相机相对于世界坐标系的旋转。假如想得到相机活着界坐标系中的姿态,可以求                                    R                              R                  R 的转置矩阵                                              R                            ⊤                                       R^\top                  R⊤,由于                                    R                              R                  R 将世界坐标系变动到相机坐标系,而                                              R                            ⊤                                       R^\top                  R⊤ 则是反向变动,即从相机坐标系变回世界坐标系的旋转。
3. 详细步骤总结

要从外参推导相机活着界坐标系中的姿态,步骤如下:

  • 提取旋转矩阵                                                   R                                          R                           R:从外参矩阵                                              P                               =                                           [                                                                                            R                                                                                                    t                                                                                        ]                                                 P = \begin{bmatrix} R & t \end{bmatrix}                        P=[R​t​] 中提取前                                              3                               ×                               3                                      3 \times 3                        3×3 的部门                                              R                                      R                        R,这就是旋转矩阵,体现相机的朝向。
  • 提取平移向量                                                   t                                          t                           t:从外参矩阵提取最后的                                              3                               ×                               1                                      3 \times 1                        3×1 部门                                              t                                      t                        t,体现相机的平移。
  • 盘算相机位置                                                   C                                          \mathbf{C}                           C:通过公式                                              C                               =                               −                                           R                                  ⊤                                          t                                      \mathbf{C} = -R^\top t                        C=−R⊤t 得到相机的世界坐标系中的位置。
  • 相机的朝向:旋转矩阵                                              R                                      R                        R 直接描述了世界坐标系怎样转换到相机坐标系。假如需要相机活着界坐标系中的姿态(即从相机坐标系转换到世界坐标系),利用                                                          R                                  ⊤                                                 R^\top                        R⊤ 作为反向旋转矩阵。
4. 示例

把前后左右四个相机用opencv viz模块绘制出来。
  1. TEST(Demo, DemoOfCamera)
  2. {
  3.     Sentinel_Config sentinel_config = GetDefaultConfig();
  4.     Camera2World front_camera2world(sentinel_config.front_yaml_path);
  5.     Camera2World rear_camera2world(sentinel_config.rear_yaml_path);
  6.     Camera2World left_camera2world(sentinel_config.left_yaml_path);
  7.     Camera2World right_camera2world(sentinel_config.right_yaml_path);
  8.     // visualize camera
  9.     cv::viz::Viz3d window("Coordinate Frame");
  10.     auto visualize_function = [&](Camera2World &camera2world, std::string widget_name)
  11.     {
  12.         
  13.         cv::Matx33d K = camera2world.camera_param.para_K;
  14.         cv::Matx33d R = camera2world.camera_param.Rcw;
  15.         cv::Vec3d T = camera2world.camera_param.Tcw;
  16.         cv::Vec3d camera_position = -R.t() * T;
  17.         cv::viz::WCameraPosition cam(0.5); // Coordinate axes
  18.         cv::viz::WCameraPosition cam_frustum(K, 0.5, cv::viz::Color::green()); // Camera frustum
  19.         window.showWidget(widget_name, cam);
  20.         window.showWidget(widget_name+" frustum", cam_frustum);
  21.         // set the viewer pose
  22.         cv::Affine3d cam_pose(R.t(), camera_position);
  23.         window.setWidgetPose(widget_name, cam_pose);
  24.         window.setWidgetPose(widget_name+" frustum", cam_pose);
  25.     };
  26.     visualize_function(front_camera2world, "Front Camera");
  27.     visualize_function(rear_camera2world, "Rear Camera");
  28.     visualize_function(left_camera2world, "Left Camera");
  29.     visualize_function(right_camera2world, "Right Camera");
  30.     // visualize world
  31.     cv::viz::WCoordinateSystem world_coor(1.0);
  32.     window.showWidget("World", world_coor);
  33.     window.spin();
  34. }
复制代码


     camera_position
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表