基于fastcv的三维重建技术介绍

   Fastcv是高通专门为移动平台定制开发的一款高性能的图形处理库,通过该库可以快速的实现各种图形处理,包括人脸识别、目标跟踪和三维重建等,本节将对三维重建技术的原理和步骤进行介绍,在此基础上对fastcv的三维重建核心接口函数进行简要说明,为后续进一步利用fastcv来实现三维重建提供基础。

  一、三维重建原理

   三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理、操作和分析其性质的基础,也是在计算机中建立表达客观世界的虚拟现实的关键技术。其核心就是通过从不同角度观测物体,然后计算获取的不同角度图像的像素差值,然后根据差值计算出图像的像素深度信息,最终根据深度信息、摄像机的参数信息和环境信息等来完成图像的三维信息恢复和优化,如下图1所示,是深度计算原理流程如下图1所示:



图1 三维深度计算原理

    

    给予深度信息就可以来完成三维信息的计算,实现三维重建,三维重建的基本步骤如下:

    1)获取图像数据

    在进行图像处理之前,首选需要通过一定的方法获取图像数据,在三维重建中需要先通过摄像机获取三维图像的二位数据,并且为了更好的复原三维数据,还需要获取当前的关照条件、相机的几何特征等,为后续进行三维重建数据处理提供基础。

     2)特征提取

     在三维重建中需要的特征数据主要是特征点、特征线和区域。大多数情况下都是以特征点为匹配基元,特征点以何种形式提取与用何种匹配策略紧密联系。而在进行特征提取的过程中,其关键就是如何选择精准的匹配算法实现对图像中的点的匹配,如shft算法等。

     3)立体匹配

      在完成特征提取和匹配后就需要对三维立体进行匹配,根据所提取的特征来简历相关的图像之间的对应关系,将两幅或者多幅图像的同一个物理空间点进行一一对应起来,同时还需要采用相关的算法去消除场景中的一些干扰和噪声等,如景物的集合畸变等。

     5)三维重建

     有了特征匹配等数据后,就可以通过这些数据,根据摄像机的标定得到的内外参数,就可以从摄像头采集到的多帧图像数据中完成三维重建,恢复出图像的三维场景信息,最后采用一些三维显示技术就可以将重建后的场景显示出来。
二、fastcv提供的三维重建主要函数接口介绍

     由于fastcv在设计中,为了便于大家应用,其在三维重建函数的接口定义和参数定义上与opencv基本上保持了一致,因此,具体的函数接口就不进行详细介绍, 本节将主要对fastcv中常用的三个常用的接口函数进行介绍:

      1)FASTCV_API fcvStatus fcvConvertDepthImageToPointCloudf32 ( const float32_t *__restrict src,
                                                                                                                                                          uint32_t srcWidth,
                                                                                                                                                          uint32_t srcHeight,
                                                                                                                                                          uint32_t srcStride,
                                                                                                                                                          const float32_t *__restrict Kdinv,
                                                                                                                                                          float32_t *__restrict dst,
                                                                                                                                                          uint32_t dstStride 
                                                                                                                                 )

     这个函数是三维重建中的核心函数,通过这个函数可以实现将深度图像转换为三维点云,核心参数是src,该参数是输入的深度图像指针,还有dst,该参数是输出的目标的三维点云图像指针。

     2)FASTCV_API void fcvGeomAffineFitf32 ( const fcvCorrespondences *__restrict corrs,
                                                                                                                                         float *__restrict affine 
                                                                                        )

       该函数用于计算Cholesky分解,主要是用在三维重建的摄像机定标进行处理;

     3) FASTCV_API float fcvGeomPoseEvaluateErrorf32 ( const fcvCorrespondences *__restrict corrs,
                                                                                                         const float *__restrict pose,
                                                                                                          float *__restrict projected,
                                                                                                          float *__restrict reprojErr,
                                                                                                          float *__restrict invz,
                                                                                                          float *__restrict reprojVariance 
                                                                                                       )  

     计算基于输入带来的重投影误差,该功能并fcvGeomPoseOptimizef32可以迭代用于执行poseRefine(GN或LM).,通过该函数可以快速的计算和分析投影误差,然后根据投影误差来进行进一步的重建优化。

     上面的这三个函数是fastcv中用于重建的常用函数,在具体的设计中我们通常会通过这三个函数来完成相机的标定、投影误差计算和重建,在重建中高通提供的fastcv相对于opencv提供的功能,后续的设计中本文将会利用fastcv提供的函数在410c开发板上来实现简单的三维重建处理,如下图所示。

    


图2 下期三维重建代码


        以上就是三维重建的基本原理以及fastcv中的核心接口函数的说明,在下期博客中,将进一步利用fastcv来进行实际的三维重建图像处理。

   

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值