我有一组 6 个视频剪辑,由车顶的 6 个摄像头拍摄。我正在尝试使用 CERES 来捆绑调整这 6 台摄像机的 O(1.4K) 帧。据推测,这 6 个摄像机中的每一个的内在参数都是恒定的,非常接近。因此,我试图找出一种合理的方式将这种物理约束纳入 CERES 的框架中。
作为 CERES 新手,我尝试搜索以前的捆绑调整示例和问题。但令人惊讶的是,我还没有找到 CERES 求解器代码示例,其中相机内在函数由于对应于少量物理相机而受到限制。
从 simple_bundle_adjuster.cc 示例代码开始,我首先尝试在 BALProblem 类的 double* parameters_ 成员中分离外部、内部和 3D 点变量。我希望可以为具有不同外部和 3D 点参数但根据摄像机的物理 ID 共享内部参数的视频帧构建单独的 ResidualBlocks。
这是我对 simple_bundle_adjuster.cc 示例中的 Create() 方法稍作修改的版本:
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)));
}...
不幸的是,我无法找到任何方法来分享与 CERES 一致的 6 个物理摄像机的共同内在参数。
Q1:CERES 是否需要将所有外在参数和内在参数 + 3D 点组合到每个物理摄像机的一个大残差块中?鉴于在编译时通常不知道摄像机收集的帧数,这是否可能?
Q2:每个物理摄像机的内在参数的恒定性是否可以通过上/下参数界限来近似强制执行?也许一些收紧参数限制的迭代方法可能会奏效。