基於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

        那麼我會選擇哪一種,並如何實現呢?先賣一下關子,請看下一篇文章。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章