陳國棟,潘 翔,何漢鑫
CHEN Guodong,PAN Xiang,HE Hanxin
福州大學 物理與信息工程學院,福州350002
College of Physics and Information Engineering,Fuzhou University,Fuzhou 350002,China
隨著科學技術的發(fā)展,虛擬手術已經(jīng)成為計算機技術和醫(yī)學領域結合的重點研究內(nèi)容[1-4]。虛擬肝臟手術是虛擬手術的應用之一,繪制肝臟體紋理是虛擬肝臟手術的重要內(nèi)容,具有真實感的紋理能夠方便醫(yī)生觀察確定病灶位置,以及進刀的部位和角度。生成三維紋理有多種方式,傳統(tǒng)的紋理映射應用的最為廣泛[5],能夠快速簡單地生成表面紋理,但是會存在變形及接縫處不連續(xù)的現(xiàn)象,并且如果獲取的紋理圖像分辨率較低,這樣的問題將會更加突出,無法滿足真實感繪制的要求?;诙S樣本圖片合成三維紋理正逐漸成為研究熱點,可以利用輸入的小尺寸紋理圖片合成任意大小的表面紋理。Wei 最早進行了這方面的探索[6],該算法提出了兩種應用,即多輸入源的紋理合成以及基于二維圖像的體紋理合成。合成時在各個輸入源搜索最佳匹配鄰域,取差值最小的鄰域逐塊合成表面紋理,其缺點在于合成的紋理比較模糊。Kopf 提出了一種優(yōu)化算法[7],擴展了二維的紋理優(yōu)化方法,結合直方圖匹配合成了多種體紋理,合成效果令人滿意。江巨浪[8]通過設置二維紋理在三維空間中的運動路徑,使樣圖紋理值沿著路徑著色,能夠合成木材與大理石兩種典型紋理?;跇訄D的體紋理合成存在的主要問題是合成時間較長,在處理較大尺寸的體紋理時,這一問題將更加突出。本文提出一種改進二維復用計算合成紋理的方法,適合應用于合成虛擬肝臟體紋理這樣沒有明顯周期性的紋理,利用OpenCV 結合OpenGL 編程實現(xiàn)。先通過VHP 肝臟數(shù)據(jù)集圖片合成體紋理空間,接著在三維空間進行體紋理的排布,參考了陳昕在二維提出的復用計算方法[9],進行修改后將其擴展至三維空間。建立圖片空間,體紋理空間和三維模型空間的映射關系,把樣圖紋理映射到模型中的點進行著色;并且在切割時也能表現(xiàn)出紋理結構。
人體可視化研究旨在將成千上萬個人體斷面數(shù)據(jù)信息在計算機里整合,構成人體形態(tài)學信息研究的實驗平臺,為開展各種人體相關研究提供形象而真實的數(shù)據(jù)。美國于1989 年確立了“可視人計劃”(VHP)。獲取了人體連續(xù)橫斷面圖像,其數(shù)據(jù)來源于一中年男性,層間間距為1 mm,總共有1 878 個斷層圖像,分辨率為2 048×1 216,采用24 位真彩色定義圖像數(shù)據(jù),總數(shù)據(jù)量為13 GB[10],本文采用的肝臟圖片來源VHP 數(shù)據(jù)集,總共180 張jpg 格式的彩色圖片,分辨率為2 048×1 216,局部截取后分辨率為600×630,如圖1(a)。因為后期合成體紋理時,用OpenGL 生成三維紋理,要求紋理的長寬高都要為2 的n次方,并且采取肝臟體和血管分別貼圖的方案。所以根據(jù)肝臟在原始圖片中的位置,除去頭尾幾張肝臟區(qū)域較小的圖片,抽取中間的128 張圖片,用OpenCV 按編號順序讀取并截取每張圖片特定位置的感興趣區(qū)域(ROI),區(qū)域大小為128×128。接著根據(jù)數(shù)據(jù)集合成體紋理空間,在XY平面讀取每一張截取圖像的數(shù)據(jù),在Z軸方向上累加128張圖片,即先在左右排列,再前后排列,其中相交的點的像素值則取平均值,再通過OpenGL的glTexImage3D函數(shù)生成三維紋理。這樣構建的好處在于使得肝臟表面的紋理同內(nèi)部紋理有所不同,增加肝臟紋理的多樣性,更貼近現(xiàn)實中的肝臟紋理。這里設計了體紋理的查看界面,通過拖動XYZ坐標軸上的小球可以觀看每個切割面上的紋理,如圖1(b)。
圖1 數(shù)據(jù)源預處理
依據(jù)VHP 數(shù)據(jù)集提供的人體肝臟連續(xù)橫斷面圖像,合成出了如圖1(b)所示的肝臟體紋理樣本。根據(jù)陳昕提出的二維紋理復用計算的方法,首先需要合成一個初始區(qū)域,然后才能復用合成余下的部分。
在合成初始區(qū)域時,首先要確定紋理塊的參數(shù),即合成紋理塊尺寸和重疊區(qū)域的體積(在二維平面上為重疊區(qū)域的面積)。這里參考王一平[11]在二維紋理合成時采用的方法,并將其拓展到三維空間,具體做法是通過計算RGB分量的L2 距離(即顏色差值的平方和)[12]來度量每個尺寸的合成紋理塊對樣本體紋理的特征包容性,特征包容性越好的塊對樣本紋理塊的全局特征保持的就越好,選擇特征包容性最好的紋理塊尺寸進行分布排列,此方法可以自適應的確定紋理塊尺寸。在確定重疊區(qū)域體積時,為了減少計算量,采取固定的體積計算,設為合成紋理塊尺寸的1/6,經(jīng)測試對實驗結果影響不大。在排列布塊時,首先計算肝臟體模型在XYZ方向上的最小值點,記為點A(xmin,ymin,zmin),其三維坐標分別為模型XYZ方向上的最小值。以A點作為起始點,合成一個初始區(qū)域。在排列布塊時,陳昕的方法是根據(jù)結構紋理的周期性,以間隔布塊的方式消除相鄰塊間的約束,由于肝臟紋理不具有明顯的結構性與周期性,這里采用類似二維光柵掃描線方法,如圖2。
圖2 第k 層掃描線合成示意圖
在掃描線合成方法中,計算L2 距離以及尋找匹配塊是制約合成速度的主要因素。采用像素塊方法計算L2 距離以及分類塊拼接的方法,對紋理合成過程進行加速。參考文獻[12]提出了一種基于像素塊計算L2 距離的塊紋理合成方法,針對此方法本文做了三維的拓展,具體做法是先對合成好的體紋理塊進行預處理,按照m×n×k像素塊進行劃分,如圖3 所示為按照2×2×2分塊示意圖。對于邊緣一些尺寸不足m×n×k的像素塊,按其實際體積計算。把每個像素塊當作計算L2 距離的一個“像素點”進行計算,計算每個像素塊的RGB均值作為該“像素點”的顏色值,并且保持各塊相對位置不變的原則。在后期匹配計算及選塊填充時,再按照原始樣本和分塊后的樣本的相對位置關系分布輸出。這樣,當m×n×k取值較小時,可以提高m×n×k倍的速度,加速合成過程。需要注意的是,此處劃分的尺寸應該小于初始根據(jù)特征包容性計算出來的尺寸,算是二次劃分。實現(xiàn)中,取2×2×2 的劃分尺寸,這樣經(jīng)縮小處理的紋理樣本能夠較好地保持原始樣本的紋元信息,如圖3 所示。
圖3 按照2×2×2 分塊平面示意圖
基于塊的紋理合成相對于基于點的紋理合成優(yōu)勢在于合成速度快,但是其缺點在于隨機性不強,容易產(chǎn)生重復拼貼的紋理塊,會影響圖像質(zhì)量。這種問題在三維情況下同樣存在。因此本文考慮在搜索匹配塊時,首先對劃分的紋理塊進行分類,計算每個紋理塊的RGB均值,并對RGB三個分量值加和,在此記為PCC(Per Cube Color),這里取紋理塊尺寸為16×16×16,原始體紋理塊尺寸為128×128×128,128/16=8,則總共有8×8×8=512 個紋理塊。按照PCC 的取值范圍將樣本紋理分為三類,如圖4。這樣做的目的是消除個別塊多次重復拼貼的可能性,增加隨機性。并且在最終合成結果上,也要保持各類塊數(shù)目的概率分布同樣本塊一樣。因此,在實現(xiàn)上,根據(jù)概率論采取隨機選擇方法就可以保持同樣的概率分布。合成時,先在所有塊中隨機選取一個塊填充,在之后的匹配搜索中,先隨機選取一個塊類,然后在這個塊類中再按照L2 距離作匹配搜索。這樣既增加了隨機性并且保持概率分布不變,也減少了搜索匹配塊的時間。如圖5 所示為三類塊中的代表,A類塊顏色較深,C類塊最為明亮。其中任意一類塊的重復拼貼,都會對合成質(zhì)量有較大影響。
圖4 分類塊拼貼
圖5 塊分類
剩下的步驟就是按照L2 距離進行匹配塊的搜索,拼貼到輸出區(qū)域中,而重疊區(qū)域縫合在3.3 節(jié)討論。
合成好初始區(qū)域后,按照成倍增長的方式合成剩余區(qū)域。具體實現(xiàn)上,需要重新計算合成紋理塊體積,本文設為已合成區(qū)域長寬高各一半作為新的紋理塊體積,然后在XYZ正方向上(因為之前已選取模型上最小值點A作為初始合成點)逐步添加紋理塊,當已合成區(qū)域長寬高都增加1 倍后,即合成區(qū)域體積增加至8 倍后,再重新計算新的紋理塊尺寸,開始新一輪的復用計算,直到已合成區(qū)域完整包含整個模型空間為止,合成過程如圖6 所示;整個復用過程算法流程如圖7 所示。這樣做的好處是可以保證整個體紋理空間可以完整的包含模型空間,在后期的紋理映射時不會遺漏掉模型中的部分點,并且每一輪的復用所采用的紋理塊尺寸不同,后期的合成可以直接使用前期的合成結果,可以有效地提高合成速度。
圖6 復用合成過程示意圖
圖7 復用計算算法流程
傳統(tǒng)的二維紋理合成,在處理體紋理合成中的重疊區(qū)域問題上,只需要考慮三種重疊形狀,即上下重合、左右重合以及上下左右重合(L 形)。而在三維的情況下,體紋理的空間排列有好幾種重疊的情況,具體來說,有兩個、四個和八個體紋理塊重疊的情況,總共有如圖8所示的幾種重疊區(qū)域形狀。為了簡單而高效地處理多種情況,在重疊區(qū)域像素的縫合問題上,采用類似“羽化”的縫合方法[13],即對重疊區(qū)域像素根據(jù)其到各體紋理邊界的距離做色彩的插值計算。如果當前待合成像素處于兩個體紋理重疊的區(qū)域中,如圖9,則有:
圖8 幾種重疊情況
圖9 “羽化”算法示意
圖中,C為閾值,Cresult為融合計算后的色彩值,CA和CB分別表示體紋理塊A和體紋理塊B中相應位置的像素值,ω(x)為為對應位置處的權重,和當前待合成像素到塊A邊界及塊B邊界距離有關。二維情況下ω(x)為當前合成點到相應邊界線的垂線,而在三維情況下,則表現(xiàn)為當前合成點到相應邊界平面的垂線。其他重疊情況也類似,只要增加參數(shù)個數(shù)就可以。“羽化”的方法方便快捷,可以保持銜接的部分虛化,起到漸變的作用從而達到自然銜接的效果。在邊緣像素的處理問題上,提出一種閾值判斷的方法,假如當前待合成的紋理塊包含大部分邊緣像素,大于給定的閾值,則保留該紋理塊,否則舍棄該塊,采用“羽化”方法從已合成區(qū)域縫合邊緣像素。實現(xiàn)上,取閾值為30%,經(jīng)測試能取得比較好的處理效果。
合成好體紋理并且正確地在三維空間排列后,接下來需要把體紋理映射到肝臟體模型上。首先需要預先把肝臟體的表面模型轉化為四面體模型,采用了德國Weierstrass 實驗室開發(fā)的tetgen 庫[14-16],獲取到模型上所有點的位置信息以及所有四面體的信息。接著根據(jù)模型中每個點B的位置判斷其屬于哪個體紋理塊,計算當前點B與該體紋理中心點A在XYZ三個方向上的距離d,d的取值根據(jù)當前點B相對于中心點A位置的不同而不同。再用體紋理尺寸的一半減去d即可算出當前點B的三維紋理坐標,如圖10所示。在計算模型表面的三角面片分布時,提出一種新方法,即通過判斷每個四面體的四個面是否具有相鄰面來計算,如果當前四面體四個面都有相鄰面,則為模型內(nèi)部四面體。如當前四面體其中有一個面無相鄰面,則為表面四面體。每個三角面片三個點的紋理坐標已經(jīng)根據(jù)以上方法計算得到,這樣只要在繪制時利用簡單的紋理映射即可完成。
圖10 三維紋理坐標的計算
在上文中,根據(jù)模型表面三角面片三個頂點在相應體紋理中的位置來確定其紋理,由于點數(shù)量較少,會造成映射形成的表面紋理較模糊的問題。針對以上問題,提出一種計算每個三角面片內(nèi)部所有點的紋理值方法,以達到合成精細紋理的目的。設三角面片三個頂點分別為A(x0,y0,z0),B(x1,y1,z1),C(x2,y2,z2),三角形ABC內(nèi)部任意一點D(x,y,z),如圖11 所示。需要計算三角形內(nèi)部所有點集D的空間坐標,進一步算出其紋理坐標。根據(jù)數(shù)學知識,可知任意不共線的兩個向量可表示由這兩個向量所確定的平面內(nèi)的任意一點。利用該性質(zhì)可得到對于三角形內(nèi)部任意一點D(x,y,z),有:
其中0 ≤a≤1,0 ≤b≤1,并且a+b≤1。當a=0,b=0時,表示點A;當a=1,b=0 時,表示點B;當a=0,b=1 時,表示點C。由式(2)可得:
圖11 三角面片內(nèi)部點計算
遍歷a和b的取值可以得到三角形內(nèi)部的所有點。其中,a和b的步進值很重要,步進值設的過小,計算得到的點數(shù)目很多,其中會有大量重復的點,雖然對最終的合成效果沒有明顯的影響,但是加大了系統(tǒng)的負擔,增加了計算時間。步進值設的過大,則計算得到的點數(shù)目較少,對合成效果有較大影響。通過相應值的測試,設置a和b的步進值為線段AB和AC長度值的倒數(shù),即設AB和AC長度為lAB和lAC,根據(jù)空間兩點的距離公式,則有:
長度單位為像素,則a和b的步進值分別為1/lAB和1/lAC,在計算D點坐標時進行四舍五入取整即可。計算出內(nèi)部所有點的位置信息后,再根據(jù)前文所論述的方法計算紋理坐標,完成表面紋理的細化工作,如圖11所示。
體紋理的優(yōu)勢之一在于能夠表現(xiàn)物體內(nèi)部紋理,因此需要設計切割肝臟體顯示內(nèi)部紋理結構功能。由于切割不是本文研究的重點,采用了翟朝亮的切割算法[17]實現(xiàn)對肝臟體的切割。對切割所形成的新三角面片按照上述方法計算其內(nèi)部點集進而得出紋理坐標,可以達到顯示切面的效果。
利用Visual C++結合OpenCV 和OpenGL,在PC 機上實現(xiàn)了上述算法,PC 機的配置為Core 2 Duo E4700 2.6 GHz CPU,2 GB RAM,NVIDIA GeForce GT 430顯卡,所得到的肝臟效果圖如圖12 所示。
圖12 肝臟效果圖
從合成效果圖可以看出,未計算內(nèi)部點集的情況下,合成的紋理較模糊,只能大致表現(xiàn)出紋理結構。計算內(nèi)部點集后,紋理結構更為精細。其中,步進值的設置對內(nèi)部點集的計算有較大的影響,步進值較大則計算點數(shù)目較少,會在表面出現(xiàn)顆粒情況。步進值較小則計算點數(shù)目較多,會影響合成速度。同時為了在效果上進行對比,選用了文獻[18]和文獻[7]所提出的代表方法得到的效果圖如圖13 所示??梢钥闯鑫墨I[18]的方法出現(xiàn)部分紋理有變形的情況且比較模糊,文獻[7]的方法較精細但顯得紋理雜亂無章,而本文的方法則可以表現(xiàn)出精細和未變形的紋理。由于其他合成方法應用場合的特殊性以及有些方法沒有提供實驗數(shù)據(jù),而為了比較合成速度,表1 列出了復用計算方法合成不同大小模型體紋理的時間開銷以及同常規(guī)非復用方法的對比,二者使用同一套肝臟數(shù)據(jù)源,非復用方法使用的是基本的塊紋理拼貼方法,每次的合成紋理塊尺寸不變;圖14 給出了各個模型的效果圖,表1 最后一行的尺寸數(shù)據(jù)是所用的肝臟模型,與之前初始合成階段采用間隔布塊的研究工作相比,合成時間進一步縮短。
圖13 文獻[18]和文獻[7]方法效果圖
圖14 不同尺寸模型的合成對比
表1 復用計算合成效率對比
可以看出,同二維的情況類似[9],在數(shù)據(jù)量較少的情況下,兩種方法的平均合成時間差別不大。當模型的尺寸逐漸增大時,復用方法的平均合成時間逐漸降低,非復用方法則保持基本穩(wěn)定。因此,把復用計算的方法擴展到三維,對于虛擬手術這樣需要顯示高精度紋理并且合成速度有要求的場合,具有很好的應用前景。
提出一種合成并且映射肝臟體紋理的方法,首先對數(shù)據(jù)集進行預處理,根據(jù)數(shù)據(jù)集構建肝臟體紋理塊,接著參考二維的情況在模型空間復用合成體紋理塊,計算模型每個點的紋理坐標進行映射,并且為了精細化紋理還計算了每個三角面片內(nèi)部點集并映射相應的紋理,最后實現(xiàn)了切割顯示。二維情況下為小尺寸樣圖-大尺寸樣圖,三維情況下為樣圖-樣本體紋理-全模型體紋理。實驗結果表明,本文方法相比傳統(tǒng)方法在處理大體積大數(shù)據(jù)的模型體紋理合成方面,有著明顯的速度優(yōu)勢,并且能夠合成較高質(zhì)量的體紋理,在虛擬手術可視化方面有一定的應用價值。目前本文方法存在的主要缺點在于切割顯示的速度不是很理想,需要在后期的研究中加以改進。
[1] 邢英杰,張少華,劉曉冰.虛擬手術系統(tǒng)技術現(xiàn)狀[J].計算機工程與應用,2004,40(7):88-90.
[2] 楊君順,馮青.基于虛擬現(xiàn)實與系統(tǒng)仿真的人機心理研究[J].藝術與設計:理論,2007(4):41-44.
[3] 李曼.虛擬手術系統(tǒng)對實踐教學的作用探討[J].湖南中醫(yī)藥大學學報,2007(3):72-73.
[4] 顧巍.虛擬肝臟手術規(guī)劃系統(tǒng)的關鍵技術研究[D].長沙:國防科學技術大學,2009.
[5] Catmull E.A subdivision algorithm for computer display of curved surfaces[R].Utah Univ Salt Lake City,1974.
[6] Wei L Y.Texture synthesis from multiple sources[C]//Proceedings of ACM SIGGRAPH 2003 Sketches and Applications,2003.
[7] Kopf J,F(xiàn)u C W,Cohen-Or D,et al.Solid texture synthesis from 2D exemplars[J].ACM Transactions on Graphics(TOG),2007,26(3):2-3.
[8] 江巨浪,薛峰,鄭江云,等.一種基于樣圖的體紋理快速生成算法[J].計算機輔助設計與圖形學學報,2011,23(8):1312-1318.
[9] 陳昕,王文成.基于復用計算的大紋理實時合成[J].計算機學報,2010,33(4):768-775.
[10] 張紹祥,劉正津.數(shù)字化可視人體研究[J].第三軍醫(yī)大學學報,2003(7):4-7.
[11] 王一平,王文成,吳恩華.塊紋理合成的優(yōu)化計算[J].計算機輔助設計與圖形學學報,2006,18(10):1502-1507.
[12] 任軍利,王偉.基于以像素塊計算L2 距離的塊紋理合成[J].現(xiàn)代計算機:專業(yè)版,2011(3):34-37.
[13] Liang L,Liu C,Xu Y Q,et al.Real-time texture synthesis by patch-based sampling[J].ACM Transactions on Graphics(ToG),2001,20(3):127-150.
[14] Si H.TETGEN:A quality tetrahedral mesh generator and three-dimensional Delaunay triangulator.2004-01.
[15] Si H.On Refinement of constrained Delaunay tetrahedralizations[C]//Proceedings of the 15th International Meshing Roundtable,2006:509-528.
[16] Si H.TETGEN:A 3D Delaunay tetrahedral mesh generator.2003.
[17] 翟朝亮,陳國棟,王娜,等.基于體紋理的肝臟可視化仿真方法研究[J].電視技術,2012,36(17):169-172.
[18] Pietroni N,Otaduy M A,Bickel B,et al.Texturing internal surfaces from a few cross sections[C]//Proceedings of Computer Graphics Forum.[S.l.]:Blackwell Publishing Ltd,2007,26(3):637-644.