基于Qt的轨迹还原之一:introduction

        从老师那里接手“摄像机轨迹还原”的项目,现在终于完成了,接下来推出一系列总结文章。

        这个项目的简要情况是这样的:电影后期制作,尤其是特效制作,都需要借助拍摄时摄像机的精确轨迹(以及姿态),因此摄像机轨迹还原是电影行业的一个重要课题。这个课题的难点在于还原算法,因为摄像机的摇臂多种多样,运动的自由度也很大。我们在课题中将两个传感器分别放在顶端摄像机和摇臂转轴处,每个传感器都能采集高精度的九轴数据。我们摒弃朴素的加速度二次积分算法,采用了另一种误差更小的算法,使得轨迹还原的效果十分接近行业要求水平。由于轨迹处理算法一定程度上属于商业秘密,故这里不加详述。

        整个项目做成基于Qt的应用程序,流程是这样的:

       1、打开两个传感器,与程序连接;

       2、开始录制,传感器实时传回九轴数据;

       3、录制完成,构建轨迹图,在程序中预览效果;

       4、确认效果后,导出最终计算结果,做后期处理。

       这里第3步是关键,也是除算法之外,我花费时间最多的地方。总体的要求是,在Qt中利用计算得到的轨迹离散座标,绘制出可以交互(基本的旋转、平移、缩放等)的3D轨迹图,同时各个分量关于时间变化的曲线(即X-t,Y-t,Z-t)也要显示出来,后者实际上要求用Qt绘制函数曲线。值得注意的是,轨迹录制的时长是不确定的。

        显然,2D绘图最先想到的是QPainter,然而要绘制出专业的函数曲线,还是力不从心,需要自己完成大量代码。这里推荐开源的QCustomPlot,它专注于实现Qt中的二维数据可视化,而且不需要任何配置,只需在官网(www.qcustomplot.com)下载源文件直接编译运行即可。事实上,我在项目中也是直接使用它的,关于它的教程官网上也有很多,可以实现多样、美丽的可视化效果!

        下面是我实现的基本2D函数曲线效果:


        在接下来的文章中,我将重点讲述我用Qt实现3D轨迹构建的过程。

        刚开始的时候,我列出了以下选择:

        openGL(glut)

    QGLWidget

    QOpenGLwidget(Qt 5.4及以后版本)

    Qwt3dplot(开源库,很长时间没有更新了)

    OpenCascade

    VTK

        那么我会选择哪一种,并如何实现呢?先卖一下关子,请看下一篇文章。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章