VR实现过程(使用VTK官方代码)
VR的介绍
VR(Volume Rendering)也称为体绘制,是一种直接由三维数据场产生屏幕上二维图像的技术。
VR的优点:
- 可以探索物体的内部结构
- 可以描述非常定形的物体
- 面绘制在这些方面比较弱
VR的缺点:
- 数据存储量大
- 计算时间较长
实验工具及配置
平台:Windows 10
语言:C++
图像格式:MHD
数据集:使用的是VTK-Example中的
FullHead.mhd
也可以使用Promise12 (可以参考 医学影像公开数据集(续))等mhd格式数据
软件 | 版本 | 地址 |
---|---|---|
VTK | 8.2.0 | https://vtk.org/download/ |
CMake | 3.14.0 | https://cmake.org/download/ |
Visual Studio | 2017_64 bit | https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ |
实验步骤
配置环境
安装VS2017
参考博客:VS2017的安装与应用
安装CMake
参考博客:Windows系统 安装 CMake
安装VTK
参考博客:
实验步骤
编译过程
进入VTK官网可以看到关于VR有许多例子,而且每个例子都会有示意图,选择了第一个FixedPointVolumeRayCastMapperCT
。
- 点击here to download FixedPointVolumeRayCastMapperCT后系统会自动下载,并解压:
- 该文件夹下包括
CMakeLists.txt
和cxx
源文件和一个build
文件夹:
- 新建
source
文件夹和testData
文件夹,并将CMakeLists.txt
和cxx
源文件移动到source
文件:
- 打开CMake,打开CMake,source code路径即为
VR/FixedPointVolumeRayCastMapperCT/source
,build路径即为VR/FixedPointVolumeRayCastMapperCT/build
:
- 点击
configure
按钮,使用本地编译器,选择Visual Studio 15 2017
,并选择x64
后点击Finish
,之后会出现一片红色,将其中CMAKE_INSTALL_PREFIX
的路径改为VR/FixedPointVolumeRayCastMapperCT/build
:
- 继续
configure
,直到无红色出现,点击generate
,generate
结束后,打开vs2017,找到build
文件夹下的FixedPointVolumeRayCastMapperCT.sln
文件选择打开,并将**FixedPointVolumeRayCastMapperCT**
设为启动项目,点击本地Windows调试器即可运行。
参数介绍
Example: FixedPointVolumeRayCastMapperCT -DICOM CTNeck -MIP 4096 1024
1 | -DICOM <directory> // 使用的数据集为 DICOM 格式 |
- 必须使用
-DICOM
选项指定数据所在的目录,或使用-VTI
或-MHA
选项指定.VTI文件的路径。 - 默认情况下,程序假定文件具有独立组件,使用
-DependentComponents
指定文件具有从属组件。 - 使用
-Clip
选项显示用于剪切卷的多维数据集小部件。 - 将
-FrameRate
选项与所需的帧速率(以每秒帧数为单位)一起使用,以控制交互式渲染速率。 - 使用
-DataReduction
选项和缩减因子(大于零且小于1)在渲染前缩减数据。 - 使用其余选项之一指定混合函数和传递函数。
MIP
选项使用最大强度投影方法,而其他选项使用合成。 -CompositeRamp
选项是非着色合成,而其他合成选项使用着色。- 注:
MIP
、CompositeRamp
、CompositeShadeRamp
、CT_Skin
、CT_Bone
和CT_Muscle
适用于DICOM数据。MIP
、CompositeRamp
和RGB_Composite
适用于RGB数据。
修改源代码
由于VTK官网是在Linux/macOS的终端运行,但已经在本机Windows 10下安装了全套的配置软件,故修改了其中一些代码,使其更直观操作。
源代码如下,并配置了相关判断代码(修改后将判断代码全部注释掉,用以自己直接修改参数),用来判断在终端中输入的参数值。
1 | // Parse the parameters |
由于采用Windows 10
系统,未使用终端,参数修改后如下:
1 | // Parse the parameters |
并将代码中判断参数代码直接注释掉,从while ( count < args )
一直到if ( !dirname && !fileName)
结束。
实验效果
当 blendType
= 0时:
使用CT_Skin
参数时:
----------到结尾啦!! Hoohoo----------