天天看點

VTK 體繪制讨論_顔色傳輸函數

1.顔色傳輸函數

顔色傳輸函數與不透明度傳輸函數的使用類似,二者的不同之處在于顔色傳輸函數是将一個标量值映射為顔色值。這個顔色值可以是RGB值,也可以是HSV值。 VTK顔色傳輸函數采用VTKColorTransferFunction類實作,其函數為:

這樣就可以實作一個RGB斷點或者HSV斷點的添加,其中x表示像素灰階值,r,g,b為映射的RGB分量,h,s,v為映射的HSV顔色分量。 當然,顔色傳輸函數也支援添加線段的方法。

顔色傳輸函數标準代碼片如下:

由于VTKVolumeProperty接受兩種形式的顔色傳輸函數(灰階或者RGB),一次在擷取相應的顔色傳輸函數時,需要首先判斷VTKVolumeProperty已經設定的顔色傳輸類型,其函數為: int GetColorChannels(); 如果傳回為1,則說明設定的是灰階傳輸函數; 如果傳回為3,則說明設定的是彩色RGB傳輸函數。 根據不同的類型既可通過如下函數擷取有效的傳輸函數:

2.多中繼資料體繪制渲染

前面隻要讨論了設定标量圖像體繪制的不透明度傳輸函數、梯度不透明度傳輸函數和顔色傳輸函數。而多中繼資料體繪制渲染時需要根據資料差別對待。 如果多中繼資料的各個組分是互相獨立的,則可以為每個組分單獨設定相應的不透明度、梯度不透明度、顔色傳輸函數。 在位VTKVolumeProperty設定相應傳輸函數時,應為多中繼資料組分較多,是以需要在函數中指定一個索引号,表示目前為那個組分設定,标準代碼片如下:

多中繼資料的組分可能是非獨立的,例如,RGB圖像中每個像素的顔色值是由R.G.B三個顔色組分共同定義的。vtkVolumeMapper支援兩種類型的非獨立多中繼資料。 第一種是二進制資料。第一進制資料用于定義顔色傳輸函數,第二進制資料用于定義不透明度傳輸函數; 第二種是四中繼資料。前三中繼資料作為一個R.G.B顔色定義顔色傳輸函數,第四中繼資料用于定義不同明度傳輸函數。 需要注意的是,兩種方式都是利用最後一進制資料來計算梯度,并決定梯度不透明度傳輸函數。

繼續閱讀