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

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

3.参看资料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3.  张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

VTK修炼之道69:体绘制讨论_颜色传输函数相关推荐

  1. VTK修炼之道67:体绘制讨论_不透明度传输函数

    1.vtkVolume vtkVolume类似于几何渲染中的vtkActor,用于表示渲染场景中的对象.除了存储基本变换信息(平移.旋转.缩放等),其内部还存储了两个重要对象.这两个对象分别是vtkA ...

  2. VTK修炼之道39:图像平滑_各向异性滤波

    1.各向异性扩散滤波 高斯平滑方法在平滑噪声的同时,模糊了图像的重要边缘图像. 各向异性滤波是一种基于偏微分方程的滤波技术,建立于热量的各向异性扩散理论. 各向异性滤波在图像的平坦区域选择大尺度平滑, ...

  3. VTK修炼之道38:图像平滑_中值滤波器

    1.中值滤波 vtkImageHybridMedian2D实现了对二维图像的中值滤波.其实现原理是,采用一个5x5的模板,逐次将模板中心对应于图像的每个像素上,将模板图像覆盖的像素的中值作为当前像素的 ...

  4. VTK修炼之道37:图像平滑_高斯滤波器

    1.高斯滤波 高斯平滑的原理类似于均值滤波.均值滤波模板的系数都是一样的,而高斯平滑则是需要根据像素与模板中心的距离来定义权重.权重的计算方法是采用高斯分布,离中心越远,权重越小. 下面是一个利用Ga ...

  5. VTK修炼之道36:图像平滑_均值滤波器

    1.图像平滑 图像平滑常用于图像的预处理中,如计算梯度时先对图像进行平滑处理,可以减少噪声对梯度的影响.图像平滑一般是通过模板卷积运算实现.模板可以看做是一个大小为nxn的小图像,例如3x3,5x5等 ...

  6. VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)

    1.前言 前面演示的例子都是在一个窗口中显示一个图像.但是在常见的图像处理软件中,经常会遇到在一个窗口中显示多个图像,这就会用到图像融合技术.图像融合利用图像的alpha通道和不透明度来实现.VTK中 ...

  7. VTK修炼之道15:图像处理_显示(vtkImageViewer2 vtkImageActor)

    1.vtkImageViewer2用于图像显示实例分析 在VTK早期版本中,提供了vtkImageViewer类来显示图像.随着版本的发展,目前vtkImageViewer2代替了vtkImageVi ...

  8. VTK修炼之道14:图像处理_创建

    1.引言:图像数据结构 数字图像文件内容由两个部分组成:图像头信息和数据.图像头信息定义了图像的基本信息,主要包括起点位置(Origin),像素间隔(space)和维数(dimension).通过这三 ...

  9. VTK修炼之道32:边缘检测_梯度算子

    1.梯度算子提取图像边缘 图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法,如分水岭算法,通常是分割原图的梯度图像,梯度实际上也是反应的图像边缘信息.图像边缘一般常用图像一阶导数 ...

最新文章

  1. 批处理命令——goto 和 :
  2. Rails non browser app高级篇-capistrano/daemon部署
  3. 20145309信息安全系统设计基础第12周学习总结后篇
  4. 数据访问增删改查之单项查询
  5. (四)在MLOps管道中进行持续训练
  6. gcc编译选项【转】
  7. 用QBE语言实现关系代数
  8. 代码整洁之道读书笔记----第二章---命名--第一节-名副其实
  9. influxdb可视化工具
  10. 【HAVENT原创】Eureka 注册中心服务上线下线邮件提醒
  11. BES ANC降噪耳机在量产中发现的噪声
  12. 人工智能和计算机程序有什么区别,人工智能和机器学习之间有什么区别?
  13. oracle数据比对工具
  14. mavennexus环境搭建
  15. 解决QQ小游戏、微信小游戏 getLaunchOptionsSync()获取的数据为旧数据
  16. 商场会员营销系统 购物中心会员精细化运营体系
  17. spring及boot注解
  18. 【问题】vcenter7升级遇到“Exception in invoking authentication handler unidentifiable C++ exception”
  19. Html主要内容总结
  20. CCF-CSP认证历年真题解(100分)

热门文章

  1. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)
  2. KineticJS教程(6)
  3. django1.4 关于处理静态文件的问题
  4. nyoj 61(双线程dp)
  5. 大一java图书馆管理系统课程设计
  6. LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)
  7. HDUOJ1864最大报销额(01背包)
  8. centos 6.5 下 nginx 简单优化_虚拟主机_负载均衡
  9. centos 7.0 查看selinux状态|关闭|开启
  10. 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构