我所遭遇過的中介軟體--VTK

weixin_34126215發表於2013-12-13

      我所遭遇過的中介軟體--VTK

      Vtk是我接觸的第一款軟體開發包,它引導我對圖形學的入門.我是先學的VTK,後學的OpenGL和D3D.VTK是專為圖形學開發,特點是介面清晰,好上手,又含有大量的影象處理演算法.從VTK入手3D圖形學,要比從OpenGL和D3D容易的多.

      最初接觸VTK是研一那年暑假,研一時我做醫學影象處理.VTK很適合由影象處理轉到3D圖形學,對做醫學影象也很方便.它整合著DICOM影象檔案格式的解析器.我看過解析DICOM檔案的程式碼,大約5000多行.這程式碼量對當時的我來說如同天文數字,而使用VTK,幾行程式碼就可以搞定.這就是中介軟體的方便之處,為開發者提供成熟的功能.我用VTK做三維醫學影象繪製,原始資料是一系列的CT斷層切片影象,對其做三維重建,以3D的形式顯示.有兩種繪製方式,體繪製和麵繪製,這方面的資料有很多,我就不細講了.

      我在VTK上投入了極大的激情,VTK的大部分Demo是用一種名為Tcl的指令碼語言寫的,我便將它們翻譯成C++程式碼.記得有一年的聖誕還是元旦的,我在實驗室花了一晚上的時間,將一個Tcl的DEMO改成C++,總共有2000多行程式碼.程式功能是各種三維圖形的堆集.而後我還翻譯<Vtk User Guide>,激情燃燒的歲月竟然搞了VTK.我還是國內兩個VTK論壇的版主,發過很多關於VTK的帖子,受到很多網友的吹捧,當時我還真有種欣欣然的感覺.但現實總讓人很無奈,VTK只是一種現成的圖形技術,研究生的工作重點不在於做出了多麼牛的軟體,不在於你掌握了多強的技術,而是你提出了什麼理論,發表了什麼論文.不管理論是否可行,能夠實現,甚至不管論文的資料是否真實.只要你的理論讓人看上去深奧一些,能自圓其說,該有的資料看上去正常一些,畢業就是如此容易.可惜我是在研二結束的開題評審後,才意識到這件事.當時我的開題是要做一套醫學三維影象顯示系統,並準備了很多自己生成的三維效果截圖.但評審老師很明確的指出我的問題,沒有自己的理論.幸好我的導師在院裡地位高,我的評審算過了.而我的研究課題就改成了三維醫學影象體資料分割與顯示.三維體資料分割,這個方向算不錯,在當時搞的人少又比較新.但我已然沒有搞這演算法的激情了,既然造資料就能發論文,何必再寫程式碼生成資料呢?我提出的理論為基於8叉樹的三維體資料分割,然後實驗的截圖是用VTK本來提供的區域增長法得到的,具體的演算法效能資料是自己編造的.於是順利完成畢業論文,順利答辯通過,順利畢業.畢業時,將自己寫的VTK的程式都發布到網上,我就再也沒有碰過VTK.畢業兩年後,接了個私活是代人寫碩士畢業論文,題目還是三維體資料分割,這次又提出一個演算法為基於自適應包圍盒的體資料分割.當時參考了若干篇畢業論文,發現有個人的實驗資料和我的一模一樣,有點搞笑,我的資料也是假的.不過這次代人寫論文時,我用程式碼實現了基於8叉樹的三維體資料分割和基於自適應包圍盒的體資料分割這兩種演算法.在我的部落格中已經將演算法的詳細介紹以及程式碼釋出出去了.只是,程式碼我也沒有執行除錯過,當年的執行環境,實驗的原始影象資料已經不存在了.

     再回到VTK的話題上,由於已經五,六年沒有碰過VTK了,這門手藝算是廢了.記得VTK對資料的處理是一種管道流的架構,這很符合影象的濾波處理,輸入影象經過處理後再輸出影象.多個濾波器可以序列處理,實現複雜的影象處理.不過話又說回來,所有的影象處理都不是完美的,任何一個濾波操作會有一定的資訊丟失.也就是說,影象還是原始的好.VTK提供的官方的DEMO大多采用程式導向的流程,一套資料,從載入到渲染一路串下來很清晰.VTK的低層渲染用的是OpenGL但是在VTK對外提供的介面中,看不到任何OPENGL的影子,VTK將OPENGL完全封裝了.記得當年論壇上有人問能否在VTK中整合OPENGL,答案是當然可以,只是怎麼整合我沒研究過.當年VTK的體繪製非常卡,不知道現在優化的怎麼樣.畢竟過去這麼多年了,演算法和硬體都提升了很多.體繪製也是種很神奇的演算法,但在遊戲中沒人會用.

     如果說我在VTK上有什麼遺憾的話,那就是:我從沒有看過VTK的原始碼.當年我僅僅滿足於論壇上一群粉絲的熱捧,自我感覺良好,卻沒有意識到自己是井底之蛙.我不過是VTK的一個User,連Reader都算不上,更別提Developer了.在這裡,我不得不佩服國外這些寫開源軟體的人.VTK是一款很棒的圖形引擎,又是開源,沒有好好讀下它的原始碼實在遺憾.它有幾個MESH三角形細分的演算法,有一些曲線生成,曲面生成的演算法,值得一看.

相關文章