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