本書系統地介紹了VTK基礎知識與開發技術,幫助VTK用戶從入門到進階,快速進入項目實戰。內容包括:VTK概覽;VTK的基本概念;VTK基本數據結構;VTK數據的讀寫;VTK圖像處理;VTK圖形處理等。
★國內著名VTK開發人員的原創作品。
★作者有自己的技術博客,可以與讀者互動。
★免費提供書中的主要代碼和實例運行截圖。
視覺是人類獲取外部信息的最重要方式,研究表明,人類通過視覺通道獲取的信息占總獲取信息的80%以上。正所謂“百聞不如一見”,視覺信息比文字、數字等信息更加直觀,信息量更為豐富。因此,通過圖形圖像等方式將數據進行可視化,有助于人們理解數據。
早在20世紀初,人們已經將圖表和統計等低級的可視化技術應用于數據分析中。在現代社會中,隨著科學技術的迅猛發展,借助超級計算機、航空航天、CT(計算機斷層掃描)、核磁共振以及地質勘探等手段,人們可以獲得海量的科學數據。而人們進行科學研究的目的不僅僅是為了獲取數據,更重要的是分析數據以探索自然規律,這成為人們面臨的巨大挑戰。而傳統的可視化技術已不能滿足需要,科學計算可視化得到了廣泛的關注與發展。
科學計算可視化科學計算可視化的概念早在20世紀80年代就已經提出。1987年2月,美國國家科學基金會召開的一個專題研討會上正式提出了“可視化”一詞,并在會后發表的正式報告中給出了科學計算可視化的定義、覆蓋領域以及近期與長期研究方向。這標志著科學計算可視化作為一個學科在國際范圍內已經成熟。
科學計算可視化的含義是運用計算機圖形學的原理和方法,將科學與工程中產生的大規模數據轉換為圖形、圖像,以直觀的方式顯示出來。它涉及計算機圖形學、圖像處理、計算機視覺、人機交互等多個研究領域,是當前計算機圖形學的重要研究方向。隨著計算機硬件配置不斷提高,計算能力極大增強,許多重要的圖形圖像處理算法可以快速地通過硬件實現。因此,基于科學計算可視化技術來直觀地展示數據計算過程與結果,并進行交互處理,已經成為可能。
可視化函數庫隨著科學數據可視化技術的發展,出現了大量的新的軟硬件可視化技術和手段。廣大從事可視化工作的科研與工程人員迫切需要一種功能強大的可視化開發工具。相信許多人已經接觸或者聽說過OpenGL。OpenGL是行業領域中最為廣泛接納的2D/3D圖形API。它采用C語言風格,提供大量的函數來實現從簡單到復雜圖形的渲染。另外一個與OpenGL類似的函數庫是微軟的Direct3D。然而,無論是OpenGL還是Direct3D,都僅提供底層的API接口供用戶使用,因此學習和使用這兩個工具都有一定的難度,通常需要用戶深入理解計算機圖形學的基礎知識。另外,它們并未封裝當前流行的可視化算法,例如體繪制算法。對于工程人員來說,使用底層API開發這些算法,既制約了工程開發效率,也不利于代碼復用。因此,工程開發與科研人員更需要一種功能強大、方便易用的可視化開發庫,而VTK(Visualization Toolkit,可視化工具包)即是這樣一種工具。
VTK是一個用于可視化應用程序構造與運行的支撐環境,它是在OpenGL的基礎上采用面向對象的設計方法發展起來的。VTK將可視化開發過程中經常遇到的細節屏蔽起來,并將常用的可視化算法(例如Marching Cubes方法)以類的方式進行封裝,為從事可視化應用程序開發工作的研究人員提供了一個強大的開發工具,因此VTK發布后得到了廣泛的關注與應用。
寫作初衷VTK是一種開源的、跨平臺的、可自由獲取的可視化函數庫,來自世界各地的開發人員可以修改以及貢獻個人的代碼。同時,VTK很早就組建有用戶及開發者社區,方便世界各地的VTK使用人員及開發人員的技術交流。截至當前,系統介紹VTK的書籍主要有Kitware(http://www.kitware.com)公司出版的VTK教科書及配套的《VTK User’s Guide》兩本書(詳見本書參考文獻)。
國內的VTK用戶和開發人員在學習與使用VTK時,通常參考VTK的官方文檔以及上述兩本英文書籍。此外,網絡上介紹VTK的文章雖多如牛毛,但大都比較零碎,缺乏系統性。截至本書出版,國內還未出現系統介紹VTK的中文書籍。
本書的兩位作者相識于2010年,在此之前,雙方都學習與使用過VTK,2010年起共同就職于深圳先進技術研究院,在共事期間,曾使用VTK、ITK(Insight Segmentation and Registration Toolkit)、IGSTK(Image-Guided Surgery Toolkit)、CMake等工具開發過多個科研項目,一路走來,深知各種開源框架、算法的學習門檻是多么讓人望而生畏,深刻體會過VTK學習和使用過程中的艱辛。從2010年起,本書的兩位作者共同制作了《一起學習VTK》和《一起學習ITK》等系列視頻教程,承蒙各位初學者的厚愛,從視頻發布起,得到了不少初學者的支持。這也給了作者編著一本系統介紹VTK中文書籍的信心。
2011年起,本書作者陸續在網絡上發表多篇與VTK、ITK等相關的文章,并于2013年初開通了CSDN專欄。本書即是在該專欄的基礎上,對內容重新整理與補充,在工作之余前后歷時兩年編寫了本書,旨在為VTK用戶提供VTK入門與提高的參考資料,為VTK用戶提供一定的指導。
在寫作本書時,作者得到了來自不少同行的幫助,其中特別要感謝的是來自深圳市旭東數字醫學影像技術有限公司的張磊,他在繁忙的工作之余給本書部分章節作了校對并提出了很多寶貴意見,使本書的內容更加完善。
本書面向的讀者本書從VTK最基礎的部分開始講起,并一步步深入地探討VTK底層的架構,比如智能指針、可視化管線等內容,最后介紹如何基于VTK的框架實現自己的算法。因此,本書既適用于VTK零基礎的用戶,也適用于對VTK有一定的了解,想進一步提高的開發人員。
本書通過大量的實例來闡釋VTK的學習和使用方法,在選擇實例時,結合作者開發經歷,以實用性實例為主。書中實例全部采用C++實現,在Window 7、Visual Studio 2008環境下均測試通過,示例程序和運行結果截圖可在機械工業出版社網站免費下載。
前言
第1章 VTK概覽
1.1 VTK概述
1.2 VTK的編譯安裝
1.3 創建一個簡單的VTK程序
1.4 本章小結
第2章 VTK的基本概念
2.1 一個稍微復雜的VTK程序
2.2 三維場景的基本要素
2.3 坐標系統及空間變換
2.4 VTK管線
2.5 VTK智能指針
2.6 本章小結
第3章 VTK基本數據結構
3.1 可視化數據的基本特點
3.2 數據對象和數據集
3.3 單元類型
3.4 屬性數據
3.5 不同類型的數據集
3.6 數據的存儲與表達
3.7 本章小結
第4章 VTK數據的讀寫
4.1 Reader與Writer類
4.2 場景的導入與導出
4.3 本章小結
第5章 VTK圖像處理
5.1 VTK圖像創建
5.2 VTK圖像顯示
5.3 VTK圖像基本操作
5.4 邊緣檢測
5.5 圖像平滑
5.6 頻域處理
5.7 本章小結
第6章 VTK圖形處理
6.1 vtkPolyData數據生成與顯示
6.2 基本的圖形操作
6.3 網格平滑
6.4 封閉性檢測
6.5 連通區域分析
6.6 多分辨率處理
6.7 表面重建
6.8 點云配準
6.9 紋理映射
6.10 本章小結
第7章 體繪制
7.1 體繪制管線
7.2 vtkVolumeMapper
7.3 vtkVolume
7.4 不規則網格數據體繪制技術
7.5 本章小結
第8章 VTK交互與Widget
8.1 觀察者/命令模式
8.2 交互器樣式
8.3 VTK Widget
8.4 拾取
8.5 本章小結
第9章 基于VTK的GUI應用程序
9.1 基于Qt的VTK應用程序
9.2 基于MFC的VTK應用程序
9.3 本章小結
第10章 自定義VTK類
10.1 VTK開發基礎
10.2 VTK管線機制
10.3 自定義Filter
10.4 本章小結
附錄
附錄A 從VTK 5.0到VTK 6.0
附錄B 體繪制傳輸函數控件
附錄C VTK中文的實現
附錄D VTK在商業軟件中的應用
參考文獻