SFM过程(一)

以图像为基础的三维重建过程SFM基本如下图所示:

以SfM-Toy-Library代码为例,如下:

ErrorCode SfM::runSfM() 
{
    if (mImages.size() <= 0) {
        cerr << "No images to work on." << endl;
        return ErrorCode::ERROR;
    }

    //initialize intrinsics
    mIntrinsics.K = (Mat_<float>(3,3) << 2500,   0, mImages[0].cols / 2,
                                           0, 2500, mImages[0].rows / 2,
                                           0,    0, 1);
    mIntrinsics.Kinv = mIntrinsics.K.inv();
    mIntrinsics.distortion = Mat_<float>::zeros(1, 4);

    mCameraPoses.resize(mImages.size());

    //First - extract features from all images
    extractFeatures();

    //Create a matching matrix between all images' features
    createFeatureMatchMatrix();

    //Find the best two views for an initial triangulation on the 3D map
    findBaselineTriangulation();

    //Lastly - add more camera views to the map
    addMoreViewsToReconstruction();

    if (mConsoleDebugLevel <= LOG_INFO) {
        cout << "----------------------- Done -----------------------" << endl;
    }

    return OKAY;
}

  Intrinsics     mIntrinsics; //有3个矩阵,分别是内参 内参的转置 畸变

Intrinsics的定义为

struct Intrinsics {
    cv::Mat K;    //内参
    cv::Mat Kinv;  //内参的转置
    cv::Mat distortion; //畸变
};

流程解析:

1、初始化相机参数矩阵,包括内参矩阵和相机变形参数;

2、提取所有图像的特征点;

3、为所有的图像特征点创建匹配矩阵;

4、在三维地图上寻找初始三角化的最佳两个视图;

5、加入更多图像到地图中来重建三维。

后续将会逐个解析每个过程。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SFM(Structure from Motion)是一种计算机视觉中的技术,用于从多个照片中重构3D场景的几何结构。而Colmap是一种被广泛应用的SFM算法,被用于三维重建、摄影测量、虚拟现实等领域。 Colmap采用了基于特征的方法,将不同视角下的图像匹配为特征点,并通过这些特征点来恢复相机位姿和场景的3D结构。Colmap的特点是具有高效、准确和鲁棒性(对噪声和遮挡具有较好的鲁棒性)。它可以处理大规模数据,并且对于不同类型的场景都有很好的适用性。 在SFM重建过程中,Colmap主要包括以下几个步骤:特征提取与匹配、相机姿态估计、三角化、重建优化、稀疏点云生成和稠密重建。特征提取与匹配是Colmap的第一步,通过提取图像中的特征点,并通过特征描述子进行匹配,得到不同视角下的匹配点对。然后,通过对匹配点对进行相机姿态估计,可以恢复相机的位姿。接下来,通过三角化可以计算出空间中点的位置。 然后,Colmap会进行重建优化,以消除误差和噪声,得到更准确的重建结果。在重建优化过程中,会考虑到相机的内参数、相机之间的约束以及稀疏点云的约束等。最后,通过稀疏点云生成和稠密重建,可以得到一个完整的三维重建结果。 总的来说,SFM Colmap是一种基于特征的SFM算法,能够从多个图像中恢复场景的三维结构。它具有高效、准确和鲁棒性的特点,并可广泛应用于虚拟现实、摄影测量等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值