VTK中光线投射法实现体绘制【转】

简介: VTK中光线投射法实现体绘制 1、体绘制函数VTK 为使用者提供了三种用于光线投射法的函数分别是:等值面绘制函数(vtkVolumeRayCastIsosurfaceFunction);最大密度投影函数(vtkVolumeRayCastMIPFunction);合成体绘制函数(vtkVolumeRayCastCompositeFunction)其中最常用的是合成体绘制函数,最大密度投影函数在显示血管影像方面有比较好的作用。

VTK中光线投射法实现体绘制

img_1244fb673506b897d3c2fc2782483105.jpg

1、体绘制函数
VTK 为使用者提供了三种用于光线投射法的函数分别是:
等值面绘制函数(vtkVolumeRayCastIsosurfaceFunction);
最大密度投影函数(vtkVolumeRayCastMIPFunction);
合成体绘制函数(vtkVolumeRayCastCompositeFunction)
其中最常用的是合成体绘制函数,最大密度投影函数在显示血管影像方面有比较好的作用。但是如图所看到的,MIP函数没有空间立体感,也就是不能提供深度的信息。

img_1ba70744643f0f5bd81c98fb9e5885e5.jpg

2、不透明度映射函数
不透明度映射函数是设置光线方向上的灰度值及其不透明度映射。
vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New();
opacityTransferFunction->AddPoint(10, 0.0);//灰度值及不透明度值
opacityTransferFunction->AddPoint(50,0.1);
opacityTransferFunction->AddPoint(200 ,0.1);
opacityTransferFunction->AddPoint(2900,0.1);
opacityTransferFunction->AddPoint(2950,0.8);
opacityTransferFunction->AddPoint(3050,1);//不透明度值为1则为完全不透明
opacityTransferFunction->ClampingOff();

3、颜色映射函数
颜色映射函数是设置灰度值与RGB颜色的映射。
vtkColorTransferFunction *colorTransferFunction = vtkColorTransferFunction::New();
colorTransferFunction->AddRGBPoint(0.0, 0.91, 0.65, 0.66); //灰度值及RGB颜色值
colorTransferFunction->AddRGBPoint(30.0, 0.91, 0.65, 0.66);
colorTransferFunction->AddRGBPoint(128.0, 0.91, 0.65, 0.66);
colorTransferFunction->AddRGBPoint(1200.0, 0.43, 0.43, 0.43);
colorTransferFunction->AddRGBPoint(1800.0, 0.43, 0.43, 0.43);
colorTransferFunction->AddRGBPoint(2950, .9, 0.0, 0.0);
colorTransferFunction->AddRGBPoint(3050, .9, 0.0, 0.0);
colorTransferFunction->ClampingOff();

4、梯度变换函数
梯度变换函数设置灰度值变换的大小与不透明度之间的映射。
vtkPiecewiseFunction *gradient=vtkPiecewiseFunction::New();
gradient->AddPoint(50,.2);//灰度值变化梯度与不透明度的关系
gradient->AddPoint(1500,.7);
gradient->AddPoint(2000,.1);
5、体数据属性设置
vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
volumeProperty->SetColor(colorTransferFunction);//载入颜色映射函数
volumeProperty->SetScalarOpacity(opacityTransferFunction);//载入不透明度映射
volumeProperty->SetGradientOpacity(gradient);//载入梯度映射
volumeProperty->ShadeOn();
volumeProperty->SetInterpolationTypeToLinear();//采用线性插值
6、光线投射函数设置及体绘制映射
本程序采用合成体绘制函数:
vtkVolumeRayCastCompositeFunction*compositeFunction=
vtkVolumeRayCastCompositeFunction::New();
vtkVolumeRayCastMapper *volumeMapper = vtkVolumeRayCastMapper::New();
volumeMapper->SetVolumeRayCastFunction(compositeFunction);//载入体绘制方法
volumeMapper->SetInput(append->GetOutput());//载入图像数据
volumeMapper->SetSampleDistance(.5);
vtkVolume *volume = vtkVolume::New();
volume->SetMapper(volumeMapper);//设置映射
volume->SetProperty(volumeProperty);//设置属性


目录
相关文章
针对FastAdmin新增上传多个图片,新增上传的视频的预览效果
针对FastAdmin新增上传多个图片,新增上传的视频的预览效果
1591 0
|
存储 缓存 算法
HLS介绍 - 01 - FPGA的架构、结构以及硬件设计相关概念(二)
HLS介绍 - 01 - FPGA的架构、结构以及硬件设计相关概念
955 0
HLS介绍 - 01 - FPGA的架构、结构以及硬件设计相关概念(二)
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
1329 3
|
6月前
|
人工智能 自然语言处理 开发工具
AI解说大师narrator-ai-cli:影视解说自动化工具,CLI架构让内容生产效率翻倍
narrator-ai-cli 是一款专为影视解说打造的开源CLI工具,支持字幕提取、风格化文案生成、配音合成与视频剪辑全流程自动化。本地优先、无需GPU,原片不上传;独有CLI架构可脚本调用、无缝接入QClaw等AI Agent,助力批量生产与工作流集成。(239字)
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
826 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
运维 Cloud Native 搜索推荐
中华财险X阿里云:新一代核心系统全面上线!
中华财险X阿里云:新一代核心系统全面上线!
556 12
|
数据可视化 Python
Python绘制定制3D曲面图
8月更文挑战第19天
602 14
|
缓存 Android开发 iOS开发
打造高效移动应用:Android与iOS性能优化策略
【4月更文挑战第29天】 在移动设备日益成为用户日常互动的主要平台的今天,应用程序的性能已成为决定其成功的关键因素之一。本文将探讨针对Android和iOS平台的性能优化技巧,涵盖内存管理、多线程处理、网络请求优化以及用户界面的流畅性提升等方面。通过分析不同操作系统的架构特点,我们旨在提供一套综合性的策略,帮助开发者构建快速、响应迅捷且用户体验良好的应用。
|
分布式计算 Serverless 数据处理
在Modbus RTU中同时进行读取和写入操作
在Modbus RTU中同时进行读取和写入操作
721 0