首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ceres-solver中约束多摄像机捆绑平差的内参数

在ceres-solver中约束多摄像机捆绑平差的内参数
EN

Stack Overflow用户
提问于 2019-07-08 04:12:18
回答 1查看 318关注 0票数 1

我有一组6个视频剪辑由6个摄像头拍摄的车辆顶部。我正在尝试使用CERES来捆绑调整这6个摄像头的O(1.4K)帧。假设6个摄像机中的每一个的内部参数都是恒定的,以非常好的近似值。因此,我正在尝试找出一种合理的方法,将这种物理约束合并到CERES的框架中。

作为一名CERES新手,我已经尝试过搜索以前的捆绑调整示例和问题。但令人惊讶的是,我还没有找到CERES-solver代码示例,其中相机内部函数由于对应于少量物理相机而受到约束。

从simple_bundle_adjuster.cc示例代码开始,我首先尝试在BALProblem类的double* parameters_成员中分离外部变量、内部变量和3D点变量。我希望有可能为视频帧构造单独的ResidualBlocks,它将具有不同的外部和3D点参数,但根据摄像机的物理ID共享内部参数。

下面是我对simple_bundle_adjuster.cc示例中的Create()方法稍作修改的版本:

代码语言:javascript
复制
  static ceres::CostFunction* Create(
    int i, const double observed_u, const double observed_v)
  {
     if (use_common_intrinsics_flag)
     { 
        return (new ceres::AutoDiffCostFunction<
                PinholeReprojectionError, 2,
                n_extrinsic_params, 
                n_physical_cameras * n_intrinsic_params, 3>(
                new PinholeReprojectionError(i, observed_u, observed_v)));
     }...

不幸的是,我还没有找到任何方法来共享6个物理摄像机的公共内部参数,这与CERES是一致的。

Q1:对于每个物理摄像机,CERES是否需要将所有外部参数和内部参数+ 3D点合并为一个大的残差块?考虑到在编译时通常不知道摄像机收集的帧数,这是可能的吗?

Q2:是否可以通过参数上限/下限近似强制每个物理摄像机的内部参数恒定?也许一些参数限制收紧的迭代方法可能会起作用。

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 21:43:32

如果所有六个摄像机都有已知的常量内禀函数。那么就没有理由为它们设置参数块,只需创建一个CostFunction对象来存储和应用内部函数即可。

如果您希望它们是可变的,但具有较强的先验性,请添加一个参数块-六个摄像机中的每一个,然后将其用作计算残差的成本函数中的一个参数块。

如果所有六个摄像机都有相同的内部函数,那么同样的想法也适用,在这种情况下,只有一个参数块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56925759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档