VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法
生活随笔
收集整理的這篇文章主要介紹了
VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.vtkVolumeMapper
vtkVolumeMapper是所有體繪制Mapper類的虛基類,提供接口函數(shù),并由其子類實(shí)現(xiàn)具體功能。該類的繼承關(guān)系如下圖所示:應(yīng)該掌握一些常用的體繪制類。
2.光線投射:vtkVolumeRayCastMapper
光線投射法是最常用的體繪制方法。它是一種基于圖像序列的直接體繪制方法。 光線投影法的基本原理是從投影圖像平面(通常為平面)的每個(gè)像素沿著視線方向發(fā)射一條穿過體數(shù)據(jù)的射線,然后在射線上按照一定的步長進(jìn)行等距采樣,對(duì)每個(gè)采樣點(diǎn)采用插值技術(shù)來計(jì)算其體素值,根據(jù)顏色傳輸函數(shù)和不透明度傳輸函數(shù)來獲取相應(yīng)的顏色值和不透明度,最后利用光線吸收模型將顏色值進(jìn)行累加直至管線穿過體數(shù)據(jù)。這樣,就可以得到當(dāng)前平面像素的渲染顏色,最終生成顯示圖像。 光線投影法的優(yōu)點(diǎn)是能夠比較精確地模擬原始體數(shù)據(jù),但計(jì)算量較大,實(shí)時(shí)體繪制對(duì)計(jì)算機(jī)硬件的要求比較高。 在VTK中,VTKVolumeRayCastMapper類可用于實(shí)現(xiàn)光線投影體算法,并生成渲染圖元數(shù)據(jù)傳遞給vtkVolume對(duì)象進(jìn)行渲染。 vtkVolumeRayCastMapper采用軟件方法來實(shí)現(xiàn)光線投影算法,精度高但是計(jì)算量比較大,因此渲染速度相對(duì)比較慢。 該類內(nèi)部實(shí)現(xiàn)了兩個(gè)非常重要的函數(shù):- vtkVolumeRayCastMapper::SetInput(vtkImageData*):該函數(shù)用于設(shè)置輸入圖像數(shù)據(jù);
- vtkVolumeRayCastMapper::SetVolumeRayCastFunction(vtkVolumeRayCastFunction*):該類用于設(shè)置光線投射函數(shù)。
2.1?vtkVolumeRauCastCompositeFunction
該方式通過Alpha合成技術(shù)生成每個(gè)像素的顏色值。對(duì)于每條光線在穿過體數(shù)據(jù)時(shí),先根據(jù)設(shè)置的采樣步長進(jìn)行采樣,通過插值技術(shù)來計(jì)算每個(gè)采樣點(diǎn)的像素值;然后根據(jù)vtkVolumeProperty中設(shè)置顏色傳輸函數(shù)和不透明度傳輸函數(shù)來計(jì)算采樣點(diǎn)的顏色和不透明度。最后,對(duì)所有采樣點(diǎn)采用Alpha合成方法計(jì)算最終的顏色。 另外,該方式還可以設(shè)置插值優(yōu)先還是分類優(yōu)先。插值優(yōu)先是指對(duì)投射光線進(jìn)行采樣,計(jì)算采樣點(diǎn)的顏色值時(shí),先通過插值方式計(jì)算該采樣點(diǎn)的標(biāo)量值(灰度值),然后再根據(jù)顏色傳輸函數(shù)和不透明度傳輸函數(shù)計(jì)算該點(diǎn)的顏色值和不透明度。分類優(yōu)先是指在計(jì)算采樣點(diǎn)時(shí),先根據(jù)顏色傳輸函數(shù)和不透明度傳輸函數(shù)計(jì)算包含該采樣點(diǎn)的立方體的8個(gè)頂點(diǎn)顏色值和不透明度,然后通過插值方法獲取當(dāng)前采樣點(diǎn)的顏色值與不透明度。選擇插值優(yōu)先還是分類優(yōu)先要通過一下兩個(gè)函數(shù):- SetCompositeMethodToInterpolateFirst()
- SetCompositeMethodToClassifyFirst()
2.2?vtkVolumeRayCastMIPFunction
最大密度投影函數(shù)主要用于對(duì)體數(shù)據(jù)中高灰度值得結(jié)構(gòu)進(jìn)行可視化。當(dāng)光線穿過體數(shù)據(jù)時(shí),在光線上進(jìn)行等距采樣。取采樣點(diǎn)中屬性最大值為該條光線的輸出。光線對(duì)應(yīng)的屏幕像素顏色值就可以通過該值進(jìn)行顏色映射獲得。默認(rèn)情況下,這個(gè)屬性是指體數(shù)據(jù)的像素值或者體數(shù)據(jù)的不透明度,其設(shè)置函數(shù)為:- SetMaximizeMethodToScalarValue()
- SetMaximizedMethodToOpacity()
2.3 vtkVolumeRayCastIsosurfaceFunction
對(duì)等值面繪制函數(shù)能夠渲染體數(shù)據(jù)中特定等值面,其中,SetIsoValue(double)函數(shù)用于設(shè)置等值面的值。在進(jìn)行體繪制,所有小于該值的像素不透明度都設(shè)置為0.通過設(shè)定等值面的值,可以重建出某一特定的組織,如皮膚、骨骼等,渲染結(jié)果類似與面繪制。同樣地,使用該函數(shù)進(jìn)行體繪制時(shí),代碼如下: vtkSmartPointer<vtkVolumeRayCastIsosurfaceFunction> rayCastFun = vtkSmartPointer<vtkVolumeRayCastIsosurfaceFunction>::New(); rayCastFun->SetIsoValue(100);三種體繪制輸出結(jié)果如下: 1.光線投影法輸出圖像:效果最好; 2.最大密度投影法輸出圖像:缺乏深度信息(更像X光輸出); 3.等值面法體繪制輸出結(jié)果:與面繪制結(jié)果類似。3.光線投影體繪制討論
3.1 討論一:投影光線上的采樣點(diǎn)的步長
光線投影體繪制中,投影光線上的采樣點(diǎn)的步長是一個(gè)重要參數(shù),決定了體繪制的精度和速度。步長越小,采樣點(diǎn)就越多,但是體繪制效果提高的同時(shí)計(jì)算量也會(huì)增加。vtkVolumeRayCastMapper中設(shè)置步長的函數(shù)為: Void SetSampleDistance(float);這里需要注意的是,等值面繪制函數(shù)不需要進(jìn)行采樣,而其他另個(gè)繪制函數(shù)都需要進(jìn)行采樣。在實(shí)際應(yīng)用中,調(diào)整采樣步長主要考慮的因素有樣本間距、標(biāo)量數(shù)據(jù)以及標(biāo)量數(shù)據(jù)映射的顏色和不同明度變化率。vtkVolumeRayCastMapper中默認(rèn)的采樣步長為1;單位為世界坐標(biāo)系。下面顯示了步長為1和步長為4的兩種情況對(duì)比:
左側(cè)為步長等于1的情況;非常精細(xì)。 右側(cè)為步長等于4的卿狂,比較粗糙。 實(shí)際應(yīng)用過程中,如果體數(shù)據(jù)變化比較劇烈,應(yīng)該適當(dāng)減小采樣步長以獲得比較精細(xì)的渲染結(jié)果,代價(jià)就是速度的降低。
3.2 討論二:圖像采樣間距(投影光線間隔)
默認(rèn)情況下,圖像采樣間距為1,即每個(gè)像素對(duì)應(yīng)一條投影光線;如果設(shè)為0.5,那么每個(gè)像素對(duì)應(yīng)4條投射光線;如果設(shè)置為2,則每四個(gè)像素對(duì)應(yīng)一條投影光線。設(shè)置圖像采樣距離的函數(shù): void SetImageSampleDistance(float);需要格外注意的是,當(dāng)使用這個(gè)函數(shù)的時(shí)候,必須先關(guān)閉自動(dòng)調(diào)節(jié)采樣距離功能,代碼如下:SetAutoAdjustSampleDistance(0); //關(guān)閉自動(dòng)調(diào)整采樣默認(rèn)的情況下,該函數(shù)的功能是開啟的,以保證在圖像旋轉(zhuǎn)等交互時(shí),能夠自動(dòng)調(diào)整采樣距離保證實(shí)時(shí)性。如果關(guān)閉此功能,在旋轉(zhuǎn)圖像等交互過程中,體繪制渲染過程會(huì)變得很慢。
當(dāng)然,即使我們采用自動(dòng)調(diào)整圖像采樣距離,也可以設(shè)定它的范圍,控制函數(shù)為: void SetMaximunImageSampleDistance(float); void SetMinimumImageSampleDistance(float);下圖顯示的是不同圖像采樣距離的渲染結(jié)果: 左圖的圖像采樣距離為1;右圖的圖像采樣間距為4.同樣,步長越小,渲染越精細(xì),渲染時(shí)間越長。
4.參看資料
1.《C++ primer》2.《The VTK User’s Guide – 11thEdition》
3. ?張曉東, 羅火靈. VTK圖形圖像開發(fā)進(jìn)階[M]. 機(jī)械工業(yè)出版社, 2015.
總結(jié)
以上是生活随笔為你收集整理的VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞鸽传书该如何去优化?
- 下一篇: 转载Silverlight AutoCo