陳國(guó)棟,曾惠燕
(福州大學(xué)物理與信息工程學(xué)院,福州350108)
近年來(lái),隨著矢量場(chǎng)應(yīng)用的逐漸廣泛,矢量場(chǎng)在工程分析和科學(xué)計(jì)算中扮演著越來(lái)越重要的角色,如何構(gòu)建可用性強(qiáng)的矢量場(chǎng)開(kāi)始成為當(dāng)前計(jì)算機(jī)視覺(jué)、計(jì)算機(jī)圖形學(xué)和圖像處理領(lǐng)域的研究熱點(diǎn)。一般來(lái)說(shuō),在三維空間中指定三維取向比在二維空間中指定二維取向困難,因此,在三維空間中構(gòu)建矢量場(chǎng)比在二維平面或三維表面困難,這就使得設(shè)計(jì)一個(gè)合適的用戶界面對(duì)三維矢量場(chǎng)的建模至關(guān)重要。本文以自然界中許多物體紋理都是基于三維矢量的紋理拼接為理論依據(jù),構(gòu)建一系列三維矢量,其中,每個(gè)三維矢量都是由3個(gè)兩兩正交的矢量組成。
早期研究者們?cè)谑噶繄?chǎng)建模過(guò)程中所采用的技術(shù)都較為簡(jiǎn)單,如使用高斯徑向基函數(shù)進(jìn)行插值、對(duì)網(wǎng)格頂點(diǎn)顏色使用低通濾波以及人工繪制矢量場(chǎng),對(duì)矢量場(chǎng)的研究仍存在很多不足。為改善早期的方法,研究者陸續(xù)提出了許多種構(gòu)建矢量場(chǎng)的方法,如Zhang等人[1]提出生成對(duì)稱張量場(chǎng)的方法,Liu等人[2]提出一種生成共軛矢量場(chǎng)的方法。這些方法的典型優(yōu)點(diǎn)包括增加場(chǎng)拓?fù)浣Y(jié)構(gòu)的控制能力,以及運(yùn)用簡(jiǎn)單的公式進(jìn)行插值操作,被廣泛用于程序城市設(shè)計(jì)、建筑玻璃結(jié)構(gòu)的四邊形網(wǎng)格設(shè)計(jì)等。然而,上述技術(shù)針對(duì)的都是在二維平面或三維流行曲面的矢量場(chǎng),而不是三維空間中的矢量場(chǎng)。
自從Owada[3]設(shè)計(jì)了一個(gè)用于瀏覽物體內(nèi)部紋理的交互系統(tǒng)之后,對(duì)三維矢量場(chǎng)的建模才逐漸受到研究者們的關(guān)注,用戶僅需在三維模型的橫截面放置若干個(gè)箭頭,同時(shí),采用徑向基函數(shù)進(jìn)行插值便可以生成三維矢量場(chǎng),然后利用三維模型橫截面上的矢量場(chǎng)引導(dǎo)二維紋理走向。文獻(xiàn)[4]提出一種基于草繪的發(fā)型建模系統(tǒng),利用拉普拉斯算法插值生成具有曲線特征的三維矢量場(chǎng)引導(dǎo)頭發(fā)生長(zhǎng),用戶可根據(jù)自己的喜好設(shè)計(jì)不同的發(fā)型。文獻(xiàn)[5]提出根據(jù)用戶在三維空間上定義的3個(gè)相互正交的矢量場(chǎng)合成各向異性體紋理的方法,通過(guò)在三維表面或在任意的三維平面繪制曲線,將曲線點(diǎn)上的切線作為約束條件生成矢量場(chǎng)。然而,目前三維空間矢量場(chǎng)建模的重點(diǎn)僅在于矢量場(chǎng)的表示和插值的研究,設(shè)計(jì)的界面缺乏友好性,且不適合引導(dǎo)具有層次結(jié)構(gòu)的物體。
科學(xué)計(jì)算可視化是指運(yùn)用計(jì)算機(jī)圖形學(xué)、圖像處理技術(shù)和輔助設(shè)計(jì)的方法,將抽象、復(fù)雜的數(shù)據(jù)轉(zhuǎn)換成人們?nèi)菀桌斫獾摹⒕哂刑囟êx的圖形與圖像在屏幕上顯示出來(lái)并進(jìn)行交叉處理的理論、方法和技術(shù)[6-7]。矢量場(chǎng)可視化是科學(xué)計(jì)算可視化中最具挑戰(zhàn)性的課題之一,它以直觀的圖形圖像顯示場(chǎng)的運(yùn)動(dòng)[8-9]。傳統(tǒng)的矢量場(chǎng)可視化方法包括圖標(biāo)法、線圖標(biāo)法、箭圖標(biāo)和面圖標(biāo)法等,主要是通過(guò)繪制幾何圖標(biāo)來(lái)顯示矢量場(chǎng),其重點(diǎn)在于描述部分特征點(diǎn)的矢量信息,缺乏對(duì)矢量場(chǎng)的整體把控能力,因此,已經(jīng)無(wú)法滿足用戶的需要?;诩y理的矢量場(chǎng)可視化方法利用紋理表達(dá)了矢量場(chǎng)的方向變化等細(xì)節(jié)信息,由于粒子的集合構(gòu)成了紋理,帶有色彩信息的粒子的運(yùn)動(dòng)軌跡即可表示矢量場(chǎng)。該方法有點(diǎn)噪聲和線積分卷積(Line Integral Convolution,LIC)方法[10]。
以上述研究為基礎(chǔ),本文設(shè)計(jì)并實(shí)現(xiàn)一種基于層次結(jié)構(gòu)的三維矢量場(chǎng)建模方法,以血管作為三維模型,沿用戶定義的三維矢量場(chǎng)粘貼紋理樣本塊,合成血管體紋理。
利用開(kāi)源的三維網(wǎng)格生成庫(kù)TetGen,將血管表面網(wǎng)格模型轉(zhuǎn)化為以四面體為單元的網(wǎng)格模型,生成ele文件和node文件。ele文件保存了模型的四面體總數(shù)和各四面體頂點(diǎn)的索引值,node文件則保存了各四面體頂點(diǎn)的位置信息。本文構(gòu)建的血管體模型共有2 117個(gè)四面體,556個(gè)頂點(diǎn)。ele文件如圖1所示。以血管的四面體網(wǎng)格作為輸入,輸出由用戶自定義的矢量場(chǎng)所引導(dǎo)的血管紋理。
圖1 血管的ele文件
血管作為多層次結(jié)構(gòu),由里向外包含血液、血管內(nèi)膜、血管中膜和血管外膜。因此,可借鑒基于紋理的矢量場(chǎng)可視化方法,用戶首先在血管模型中輔以顏色屬性生成深度場(chǎng),依次選擇藍(lán)色、藍(lán)綠色、綠色、黃色和紅色作為模型從里到外的顏色,并為各顏色分配深度值,分別為0,0.25,0.5,0.75和1;其次,利用粉刷工具將模型的外表面涂抹為紅色;再次,對(duì)模型進(jìn)行適當(dāng)切割,用藍(lán)色畫筆模擬血管的軸線。最后,為準(zhǔn)確計(jì)算深度場(chǎng)的梯度方向(y方向上的分量),考慮將深度值作為約束條件,利用薄板樣條函數(shù)插值三維歐幾里得空間獲得光滑變化的深度場(chǎng)。同時(shí),運(yùn)用移動(dòng)立方體算法[11]提取等值面。深度場(chǎng)生成示意圖如圖2所示。
圖2 深度場(chǎng)生成示意圖
用戶在各等值面上,利用箭圖標(biāo)定義紋理的走向,即x方向上的分量,第3個(gè)方向場(chǎng)則是前2個(gè)矢量的矢量積。因箭圖標(biāo)均位于各等值面上,這就保證了第2個(gè)方向場(chǎng)始終與深度場(chǎng)的梯度方向保持垂直。
由于用戶自定義的矢量場(chǎng),只有部分采樣點(diǎn)具有方向定義,模型上大多數(shù)采樣點(diǎn)仍缺乏方向信息,因此需要利用插值技術(shù)構(gòu)建整個(gè)模型的矢量場(chǎng)。因?yàn)槔绽蛊交惴ㄏ啾绕渌臻g插值技術(shù)的基本優(yōu)勢(shì)是將域拓?fù)淇紤]到插值過(guò)程中,且在盡可能滿足用戶定義的約束條件下最小化分配給網(wǎng)格頂點(diǎn)的值之間的差異,所以本文利用拉普拉斯平滑算法分別插值3個(gè)不同方向的矢量場(chǎng)。
雙溪村:土壤中全鉀為豐富水平,銅、鈣、錳、硒為中等水平,鎂、鉬、全氮、全磷、硫?yàn)槿狈λ?,顯示了營(yíng)養(yǎng)元素嚴(yán)重失衡,且養(yǎng)分元素含量均較低。
假設(shè)xi為分配給頂點(diǎn)vi(i=1,2,…,n)的x分量,拉普拉斯算子定義為:
其中,Ni是頂點(diǎn)vi的相鄰點(diǎn)集;wij代表相應(yīng)的權(quán)重。
為使相同層次的插值結(jié)果比不同層次的插值結(jié)果平滑,設(shè)置權(quán)重為:
其中,rij表示頂點(diǎn)vi和vj間的歐幾里得距離;dij是vi和vj的深度值之差;λr和λd都為常量,控制在深度方向上的平滑度(分別將它們?cè)O(shè)置為1和5)。目標(biāo)是在用戶定義的約束條件下最小化拉普拉斯算子。
將用戶繪制的箭頭線作為給定的方向約束,每條方向線都由一系列的小片段構(gòu)成,把每一小片段作為定義三維空間中離散點(diǎn)的歸一化約束矢量。假設(shè)約束矢量c位于三維空間中的位置點(diǎn)p,查找出最靠近于點(diǎn)p的四面體T,以加權(quán)和的形式作為約束條件:
其中,i1,i2,…,i4代表四面體T4個(gè)頂點(diǎn)的索引;cx是矢量c的x方向上的分量。權(quán)重因子w1,w2,…,w4表示如下:
其中,rj為點(diǎn)p到頂點(diǎn)vij的歐幾里得距離;dj為點(diǎn)p和頂點(diǎn)vij的深度差。
給定約束條件的能量函數(shù)表示為:
其中,W 為權(quán)重矩陣;c=(cx1,cx2,…,cxm)T;對(duì)角矩陣Λ=diag(λ1,λ2,…,λm)調(diào)節(jié)各頂點(diǎn)上的權(quán)重。為達(dá)到在滿足約束條件下,生成滿足用戶的光滑矢量場(chǎng),需求出能量和最小時(shí)x的取值,即:
利用最小二乘法可求出x解:
在通常情況下,矩陣L和矩陣c都為稀疏矩陣,方便利用現(xiàn)存的稀疏矩陣求解器進(jìn)行求解。
拉普拉斯平滑算法并不能保證所得到的第2個(gè)方向上的矢量場(chǎng)總是垂直于深度場(chǎng)的梯度方向,因此,該系統(tǒng)自動(dòng)刪除平行于深度場(chǎng)梯度方向的矢量。第2個(gè)方向上的插值結(jié)果可采用基于四面體網(wǎng)格數(shù)據(jù)的流線追蹤算法[12]以彩色箭標(biāo)及流線的形式對(duì)其進(jìn)行可視化操作,如圖3所示。
圖3 可視化結(jié)果
本文采用光纖投射算法[13]計(jì)算邊界體素,分別沿平行于空間坐標(biāo)軸的3組平行線發(fā)射光線,由負(fù)方向向正方向進(jìn)行掃描,計(jì)算與模型表面交叉時(shí)的位置信息,然后將最靠近此位置的網(wǎng)格點(diǎn)作為邊界體素。邊界體素基本幾何信息主要由實(shí)體表面的三角面片表示:
其中,i代表三角面片Pi的索引值;m,n為參數(shù);v0,v1,v2為三角面上的3個(gè)頂點(diǎn)。利用邊界體素所蘊(yùn)含的模型上點(diǎn)的位置信息,計(jì)算切割橫截面的邊界。
為計(jì)算模型表面與切割曲線相交的邊界體素,將模型表面的面片全部投影到與切割曲線所在的平面上,判斷投影的三角面片與切割曲線是否存在交線。設(shè)lili+1為切割曲線上的一條線段,Patch為模型表面的面片數(shù)組,數(shù)組中的面片全部標(biāo)記為“unvisited”,步驟如下:
(1)從Patch中逐一取出三角面片ΔABCi,投影后得到Δabci。
(2)對(duì)Δabci與切割曲線段lili+1進(jìn)行求交運(yùn)算,同時(shí),將 ΔABCi標(biāo)記改為“visited”,若相交,則將ΔABCi相鄰的3個(gè)三角面片放入隊(duì)列,否則取下一個(gè)面片。
(3)從隊(duì)列中取出標(biāo)記為“unvisited”的三角面片,判斷此面片與線段lili+1是否相交,同時(shí),將此面片標(biāo)記為“visited”,若相交則將其相鄰的三角面片放入隊(duì)列,重復(fù)此步驟,直到隊(duì)列為空。
由于上述獲得的矢量場(chǎng)只被定義在四面體的網(wǎng)格頂點(diǎn),將四面體轉(zhuǎn)換為體素計(jì)算三維矢量場(chǎng)。同樣采用光線投射算法[13],對(duì)網(wǎng)格中的每個(gè)四面體,分別沿x,y,z方向進(jìn)行掃描,以獲得一組屬于該四面體的體素。然后線性插值四面體4個(gè)頂點(diǎn)的深度值,將插值結(jié)果分配給對(duì)應(yīng)四面體的體素。最后,將四面體4個(gè)頂點(diǎn)矢量的權(quán)重和作為對(duì)應(yīng)四面體體素的矢量。
本文利用Visual C++和OpenGL在PC機(jī)上實(shí)現(xiàn)了上述算法,PC機(jī)的配置為Intel(R)Core(TM)i5-3317U1.7GHz的 CPU,8GB的 RAM,Intel GMA HD 4000核心顯卡。將血管三維紋理樣本塊沿上述算法生成的三維矢量矢量場(chǎng)進(jìn)行粘貼,所合成的血管紋理效果圖4所示。
圖4 紋理合成圖
本文以具有層次結(jié)構(gòu)特征的肝動(dòng)脈為研究對(duì)象,利用顏色屬性和箭圖標(biāo)定義物體上的點(diǎn)在三維空間中的矢量約束,運(yùn)用拉普拉斯算法插值出整個(gè)模型的矢量場(chǎng)。實(shí)驗(yàn)結(jié)果表明,本文設(shè)計(jì)的三維矢量場(chǎng)能成功地引導(dǎo)物體紋理進(jìn)行合成。另外,該方法所設(shè)計(jì)的界面不僅直觀友好,且實(shí)用性強(qiáng),能用于引導(dǎo)纖維生長(zhǎng)等多種場(chǎng)合。同時(shí),深度場(chǎng)的設(shè)計(jì)不僅非常適合處理具有層次結(jié)構(gòu)的三維模型,而且方便用戶通過(guò)變換深度層次直觀地了解內(nèi)部矢量場(chǎng)的變化情況。目前,該方法存在的主要缺點(diǎn)在于用鼠標(biāo)模擬物體紋理走向時(shí)缺乏精確性,可以在后期的研究中進(jìn)行拓展,即將紋理圖像映射到模型的各層次面上,跟蹤實(shí)際的紋理走向。
[1]Zhang E,Hays J,Turk G.Interactive Tensor Field Design and Visualization on Surfaces[J].IEEE Transactions on Visualization and Computer Graphics,2007,13(1):94-107.
[2]Liu Yang,Xu Weiwei,Wang Jun,et al.General Planar Quadrilateral Mesh Design Using Conjugate Direction Field[J].ACM Transactions on Graphics,2011,30(6):61-64.
[3]Owada S,Nielsen F,Okabe M,et al.Volumetric Illustration:Designing 3DModels with Internal Textures[J].ACM Transactions on Graphics,2004,23(3):322-328.
[4]Fu Hongbo,Wei Yichen,Tai C L,et al.Sketching Hairstyles[C]//Proceedings of the 4th Eurographics Workshop on Sketch-based Interfaces and Modeling.New York,USA:ACM Press,2007:31-36.
[5]Zhang Guoxin,Du Songpei,Lai Yukun,et al.Sketch Guided Solid Texturing[J].Graphical Models,2011,73(4):59-73.
[6]李海杰.基于OpenGL的矢量場(chǎng)可視化方法研究與應(yīng)用[D].沈陽(yáng):東北大學(xué),2013.
[7]Ryabinin K,Chuprina S.Adaptive Scientific Visualization System for Desktop Computers and Mobile Devices[J].Procedia Computer Science,2013,18(1):722-731.
[8]顧耀林,吉曉娟.基于時(shí)間延遲的矢量場(chǎng)可視化方法的應(yīng)用研究[J].計(jì)算機(jī)工程,2007,33(2):186-188.
[9]蘇 芳.基于GPU的二維矢量場(chǎng)可視化點(diǎn)噪聲方法的研究與實(shí)現(xiàn)[D].青島:中國(guó)海洋大學(xué),2011.
[10]Karch G K,Sadlo F,Weiskopf D,et al.Visualization of 2DUnsteady Flow Using Streamline-based Concepts in Space-time[J].Journal of Visualization,2015,18(4):1-14.
[11]王媛媛.基于自適應(yīng)細(xì)分方法的醫(yī)學(xué)圖像三維重建及可視化技術(shù)研究[D].杭州:浙江大學(xué),2010.
[12]王成恩,姜傳彥,武新宇.基于幾何圖形的矢量場(chǎng)可視化技術(shù)[J].東北大學(xué)學(xué)報(bào):自然科學(xué)版,2011,32(3):327-330.
[13]江兆堯,路 游,賈廣忠,等.基于OpenGL的光線投射算法的研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(3):218-220.