VTK 基本介紹

      VTK(Visualization Toolkit)是 Kitware 公司發佈的開源免費軟件系統,受到國內外高等院校與科研機構的歡迎,廣泛地應用於計算機圖形學、圖像處理與三維可視化等領域。VTK 獨立於系統的圖形界面接口(GUI),可方便的嵌入到其他的相關軟件中。同時開發人員可以基於 VTK 獨立的基礎類庫開發自己的庫函數,拓展 VTK 的應用範圍。 

       VTK 採用面向對象思想,基於 OpenGL 開發出目標函數庫。它將將一些常用的算法封裝爲類的形式,用戶在開發過程中可以直接調用其函數庫進行開發,而不必糾結函數內部具體的實現過程。其優點主要有: 

(1) 拓展 OpenGL:VTK 不僅封裝了 OpenGL 複雜的底層環境代碼,而且提供了常用功能和算法處理,如常見的圖形建模算法和圖像處理算法。繼承OpenGL 狀態機的優勢,保留了其可視化工具的特色,使得開發人員秩序關注高級功能的實現,而不必糾結其細枝末節。 

(2)管線設計思想:VTK 相對於其他的可視化工具包,如 Direct3D、OpenGL 等的主要區別就在於採用管線(Pipeline)設計來實現可視化流程,這種設計可以節省設計與開發時間,加快測量系統的研發速度。

(3)開發方便:VTK 採用面向對象的設計思想來實現其管線流程的,在其可視化的流程中,各階段的數據在管線中都是以類和對象的形式進行調用,增強程序可讀性,便於開發與拓展。

 VTK 的基本組成 
       VTK 包含圖形圖像處理與可視化領域內的上百種算法,支持跨平臺,可在 Java、C/C++、Tcl/Tk 與 Python 等高級編程語言環境下使用。

VTK 由兩大部分構成,其核心層(Compiled Core,C++類庫)是基於 C/C++語言編寫的,上層部分是依據特定規則編寫的支持腳本語言(如 Java、Tcl/Tk 與 Python)的解釋層(Interpreted Interface),如圖 1-1 所示。 
 

                                                                                圖1-1 VTK層次結構

       在 VTK 編譯層中,VTK 其它的類或相關程序可調用集成了圖像處理相關數據結構與算法的 C++對象。解釋層部分是腳本語言與編譯後的 VTK 動態鏈接庫進行綁定而生成的相應解釋型語言的接口。這種結構既保持解釋性語言代碼的特性,又可用C/C++語言編寫相關的算法來進行拓展應用,很大程度上提高了開發效率。

VTK 的擁有特別龐大的類庫,可根據各個類在類庫中的具體作用將各類分成如下模塊:圖像處理模塊(Imaging)、文件讀寫模塊(IO Interface)、圖形處理模塊(Graphics)、繪製模塊(Rendering)、公共模塊(Common)、數據轉換模(Filtering),每個模塊被編譯成相應的動態連接庫[48]。各模塊層次如圖 1-2 所示:

                                                                                         圖1-2 VTK類庫層次

VTK 的框架結構 
        VTK 的框架結構如圖1-3 所示,類似於 MFC 中的 CObject 基類,vtkObject 是VTK 的基類,爲可視化流程提供了基本的方法。vtkSource 是分別是 vtkObject、vtkFilter的派生類與父類,爲整個可視化流程(如數據讀取等)定義具體的行爲與接口,經過vtkFilter 處理後的數據,可轉化爲直接用特定算法模塊進行處理的形式。vtkObject的另一派生類是 vtkMapper,它將 vtkFilter 處理後的數據映射爲幾何數據形式,爲原始數據與圖像數據之間提供接口。任何可視化的數據都需要綁定 vtkActor 演示對象,在 vtkRender 類的渲染下,最終顯示在屏幕的窗口中。 
 

                                                                                  圖1-3 VTK架構結構

 VTK 的數據結構

           VTK 作爲一個封裝良好的可視化工具包,有其獨特的數據結構和數據類型。對於初始的測量數據,VTK 使用數據流(DataFlow)的方式將其變換成圖形數據,這種方法的對象包括流程對象與數據對象,具體將在下節介紹。而對於已具有幾何結構、拓撲結構及相關屬性(如誤差、測量值等)的數據被稱作數據集(DataSet)。在 VTK 的數據集中,與拓撲結構、幾何結構及相關屬性相對應的是點(Point)、單元格(Cell)、屬性(Property)對象。 數據集由多邊形數據結構(Polygonal Data)、不規則網格(Unstructured Grid)及規則網格(Structured Grid)組成。在進行三維圖形的重構中,對於有規律的點可以用相應的規則網格或多邊形數據結構來表示,而用不規則網格表示其他沒有規律的散亂點數據。此外,VTK 還爲常見圖形提供快速繪製的接口,叫做圖形源對象 Source。對於立方體、球面、圓柱(錐)等圖形都有 Source 對象,Source 對象封裝了數據結構中的幾何結構和拓撲結構,將圖形對象的特點作爲屬性接口面向開發人員。

 

                                                                                    圖1-4 數據集的分類及構成

VTK 的可視化流程

       VTK 的可視化流程將需要處理的數據視作流動介質在管道中流動,因此可視化的不同階段的數據將會有不同的處理方式,圖形模型與可視化模型的結合構成了 VTK的可視化管線。 可視化模型主要用來對擬合後的數據進行處理,生成可被VTK繪製的幾何形體,它包括處理對象(vtkProcessObject)與數據對象(vtkDataObject)。數據對象用於表達各種類型的數據,處理對象作用於過濾器(Filter),被用來對數據對象進行相關操作併產生新的數據對象;圖形模型主要對生成的幾何體進行繪製,包括相機(vtkCamera)、映射器(vtkMapper)、對象屬性(vtkProperty)、燈光(vtkLight)、渲染器(vtkRenderer)、演示對象(vtkActor)及渲染窗口(vtkRenderWindows)。 在 VTK 管線中的數據流兩個基本的對象[44]:流程對象(Process Object)與數據對象(Data Object)。數據對象的數據類型有許多,其父類爲 vtkDataSet 類,數據結構有標準的格式。VTK 支持的數據類型有:結構網格(vtkStructureGrid)、結構點(vtkStructurePoint)、多邊形數據(vtkPolyData)、非結構網格(vtkUnStructureGrid)及非結構點(vtkUnStructurePoint)等。流程對象運用數據的系統級運算法則對數據對象進行操作用來生成新的數據對象。流程對象根據其作用可分爲映射對象(Mapper)、過濾器對象(Filter)以及源對象(Source)。 
VTK 的可視化流程是流程對象與數據對象的結合,如圖 1-5所示。 

 

                                                                            圖1-5 VTK 可視化流程

Source 對象的數據既可以是已知讀入的,也可是程序運算得到。過濾器(Filter)將經過 Source 對象處理後數據對象(Data Object)進行處理來生成新的數據對象。新生成的數據對象進入映射器(Mapper),將三維數據映射成幾何圖像,然後綁定到演示對象(Actor),此時用戶可以設置演示對象的屬性(如文本、顏色等)。渲染器(Renderer)在設置燈光(Light)與相機(Camera)等屬性後,將演示對象添加到繪製器窗口(RenderWindow)對三維體進行繪製與顯示。交互器(RenderWindowInteractor)可爲演示對象提供人機交互(如縮放、旋轉、文本顯示等)。 

VTK 實現數據的三維顯示 

        VTK 的可視化管道流程常用來進行圖形的三維顯示,其流程如圖1-6所示。激光跟蹤儀的測量數據經過幾何運算後,測量實體的幾何數據將按空間座標位置放置於對應的空間場景中,最終以三維圖形的方式顯示在計算機的顯示屏上。用戶可通過測量軟件的人機交互模塊來控制三維場景的顯示效果,這樣就可以全方位地觀察測量實體的空間座標位置,掌握誤差的分佈情況,以便於測量工作的順利展開。 
 

                                                                     圖1-7 數據的三維顯示流程

測量系統讀入數據後,數據將存儲於數據庫中,然後對其擬合,得到幾何圖形三維重構的必要參數。經過處理後的數據,可成爲 VTK 可視化流程的擬合圖形源處理對象(Source)。首先創 建 vtkRegularPolygonSource 類對象並 且作爲數 據映射
vtkPolyDataMapper 類對象的輸入,設置幾何圖形的參數,以圓爲例:如圓心、半徑及法向等。然後創建一個對應的演示對象 vtkActor 類並與 vtkPolyDataMapper 對象相關聯,爲達到最佳顯示效果,可通過綁定 vtkProperty 類對象來設置演示對象 vtkActor 的屬性(如透明度、顏色、文本字體大小等)。之後,設置渲染器 vtkRenderer 和渲染窗口 vtkRenderWindow 的對象,將 vtkActor 演示對象添加到 vtkRenderWindow 中。爲了便於交互,可將 vtkRenderWindowInteractor 類對象加入 vtkRenderWindow 中,至此測量數據的三維顯示基本完成。 在測量數據的三維顯示過程中,通過擬合得到的數據模型與原始數據會有一定的偏差。原始點數據與擬合模型對應的點數據之間的數學關係,可成爲誤差分析時的源數據(Source)對象。根據該對象,利用 VTK 可視化流程,在創建 vtkConeSource 類對象後,按照擬合圖形的三維顯示流程可將誤差對象顯示出來,以便直觀的分析與處理。 

 

參考文獻:

1、姚爲星. 激光跟蹤儀測量數據處理及可視化技術研究[D].吉林大學,2016.

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章