VTK:体绘制——颜色传输函数

1.颜色传输函数

颜色传输函数与不透明度传输函数的使用类似,二者的不同之处在于颜色传输函数是将一个标量值映射为颜色值。这个颜色值可以是RGB值,也可以是HSV值。
VTK颜色传输函数采用VTKColorTransferFunction类实现,其函数为:
int AddRGBPoint(double x,double r,double g, double b); int AddHSVPoint(double x,double h,double s,double v);
这样就可以实现一个RGB断点或者HSV断点的添加,其中x表示像素灰度值,r,g,b为映射的RGB分量,h,s,v为映射的HSV颜色分量。
当然,颜色传输函数也支持添加线段的方法。
void AddRGBSegment(double x1, double r1,double g1,double b1, double x2,double r2,double g2,double b2); void AddHSVSegment(double x1, double h1,double s1,double v1, double x2,double h2,double s2,double v2);
颜色传输函数标准代码片如下:

vtkSmartPointer<vtkColorTransferFunction> color =
		vtkSmartPointer<vtkColorTransferFunction>::New();
	color->AddRGBPoint(0, 0, 0, 0);
	color->AddRGBPoint(64, 1.0, 0.52, 0.3);
	color->AddRGBPoint(190.0, 1.00, 1.00, 1.00);
	color->AddRGBPoint(220.0, 0.20, 0.20, 0.20);

由于VTKVolumeProperty接受两种形式的颜色传输函数(灰度或者RGB),一次在获取相应的颜色传输函数时,需要首先判断VTKVolumeProperty已经设置的颜色传输类型,其函数为:
int GetColorChannels();
如果返回为1,则说明设置的是灰度传输函数;
如果返回为3,则说明设置的是彩色RGB传输函数。
根据不同的类型既可通过如下函数获取有效的传输函数:VTKColorTransferFunction* GetRGBTransferFunction(); vtkPiecewiseFunction* GetGrayTransferFunction();

2.多元数据体绘制渲染

多元数据体绘制渲染时需要根据数据区别对待。如果多元数据的各个组分是相互独立的,则可以为每个组分单独设置相应的不透明度、梯度不透明度、颜色传输函数。在为VTKVolumeProperty设置相应传输函数时,应为多元数据组分较多,所以需要在函数中指定一个索引号,表示当前为那个组分设置,标准代码片如下:

void SetScalarOpacity(int index, vtkPiecewiseFunction* function);
void SetGradientOpacity(int index, vtkPiecewiseFunction* function);
void SetColor(int index, vtkPiecewiseFunction* function);
void SetColor(int index, vtkColorTransferFunction* function);

多元数据的组分可能是非独立的,例如,RGB图像中每个像素的颜色值是由R.G.B三个颜色组分共同定义的。vtkVolumeMapper支持两种类型的非独立多元数据。

  • 第一种是二元数据。第一元数据用于定义颜色传输函数,第二元数据用于定义不透明度传输函数;
  • 第二种是四元数据。前三元数据作为一个R.G.B颜色定义颜色传输函数,第四元数据用于定义不透明度传输函数。
  • **需要注意的是,两种方式都是利用最后一元数据来计算梯度,并决定梯度不透明度传输函数。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 。单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值