首页 > 其他分享 >VTK_Learning_体绘制讨论_颜色传输函数

VTK_Learning_体绘制讨论_颜色传输函数

时间:2022-12-30 13:08:47浏览次数:40  
标签:颜色 函数 int double VTK 传输 Learning 绘制 void


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颜色定义颜色传输函数,第四元数据用于定义不同明度传输函数。

需要注意的是,两种方式都是利用最后一元数据来计算梯度,并决定梯度不透明度传输函数。
 

标签:颜色,函数,int,double,VTK,传输,Learning,绘制,void
From: https://blog.51cto.com/u_15926338/5980071

相关文章

  • VTK_Learning_体绘制讨论_光照&阴影、VTKLODProp3D
    1.光照与阴影通过VTKVolumeProperty可以设置体绘制阴影效果(Shading)。阴影效果主要受环境光系数、散射光系数、反射光系数和高光强度四个参数影响。vtkVolumeProperty::SetAm......
  • VTK_Learning_图形基本操作进阶_模型区率计算
    1.曲率计算曲率时曲面弯曲程度的一种度量,是几何体的一种重要的局部特征。如下图所示:要计算曲面上给定点M的曲率,考虑经过M的法线的一个平面与曲面相交,得到一条二维曲面,称之为......
  • VTK_Learning_图形基本操作进阶_连通区域分析
    1.连通区域分析许多图形数据中,并非只包含一个对象(连通区域)。而在处理这些图形数据时,有时需要对每一个对象单独处理或者让其单独显示。比如,利用MarchingCube方法提取三维图像......
  • VTK_Learning_交互部件_测量类Widget的应用
    1.与测量类相关的主要Widget与测量类相关的主要Widget如下:vtkDistanceWidget:用于在二维平面上测量两点之间的距离。vtkAngleWidget:用于在平面的角度测量。vtkBiDimensiona......
  • VTK_Learning_交互与Widget_观察者/命令模式
    1.前言一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(hhttp://www.paraview.org)、德国癌症研究中心研发的MITK(http://www......
  • VTK_Learning_图像二值化_阈值法
    1.阈值法实现图像二值化操作二值图像和label图像是图像分割中经常用到的两种图像。二值图像的每个像素只有两种可能的取值,例如0或者255。通常0代表图像的背景,而255代码图像......
  • VTK_Learning_交互部件_Widget应用综述
    1.交互器样式遇到的难题交互器样式(如vtkInteractorStyleImage)主要是根据不同的键盘、鼠标等消息来控制相机(vtkCamera)/Actor等相关参数,从而达到了交互的目的!然而,在渲染场......
  • VTK_Learning_交互与拾取_点拾取
    1.拾取选择拾取是人机交互过程的一个重要功能。一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能。另外......
  • VTK_Learning_体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制
    1.固定点光线投影算法vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者。该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能......
  • VTK_Learning_图像统计_灰度直方图计算_彩色直方图计算
    1.灰度图像直方图直方图统计是图像处理中的一个非常重要的操作。VTK中实现直方图统计功能的filter是vtkImageAccumulate。其将每个组分的数值范围划分为离散的间隔,然后统计......