当前位置:网站首页>三维扫描体数据的VTK体绘制程序设计

三维扫描体数据的VTK体绘制程序设计

2022-07-06 16:44:00 biyezuopinvip

资源下载地址:https://download.csdn.net/download/sheziqiong/85926449
资源下载地址:https://download.csdn.net/download/sheziqiong/85926449
摘 要
随着科学技术的不断发展,电子技术、计算机技术、网络技术在测绘领域的广泛应用,获取数据的能力和手段得到了极大地丰富。而面对呈爆发式增长的数据量,如何在保留数据原始细节信息的基础上更加有效的显示和处理这些数据,就成了今后研究的重点。本文的主要内容是介绍了科学可视化的体绘制方法,分析了其相比于传统面元绘制方法的优势,然后介绍了几种不同的体绘制算法和其特点。然后介绍了VTK可视化软件包的相关结构和功能,并使用VTK编写了体绘制实现的程序,最后分析了获得的结果图像。
关键词:体绘制;科学可视化;三维体数据
ABSTRACT
With the continuous development of science and technology, electronic technology, computer technology, network technology is widely used in the field of surveying and mapping, data acquisition capability and means has been greatly enriched. To deal with those amount of data became more and more significant, how to be more effective in retaining the original details of the data on the display and processing of these data, it would be the focus of future research. The main content of this paper is to introduce the scientific visualization volume rendering method, analyzes its advantages compared to the traditional method of drawing bins, and then introduces several different volume rendering algorithm and its characteristics. Then introduced the VTK visualization related structure and function packages, and volume rendering using VTK write a program to be realized, the final analysis result of the image obtained.
Keywords: Volume data; Volume Render; scientific visualization
目 录

1 绪论 1
1.1 体绘制研究现状和发展趋势 1
1.2 课题研究来源和意义 2
1.3 研究的主要内容 3
1.4 论文的主要结构 4
2 体绘制原理 5
2.1传统绘制方法的不足 5
2.2 体绘制几种算法介绍 6
2.2.1 光线投射法 6
2.2.2 抛雪球法 7
2.2.3 错切—变形法 8
2.2.4基于硬件的三维纹理映射法 9
2.3 四种体绘制算法的比较 10
2.3.1 光线投射法 10
2.3.2 抛雪球算法 10
2.3.3 错切-变形法 10
2.3.4 基于硬件的三维纹理映射法 10
3 视化工具包VTK 12
3.1 VTK介绍 12
3.2 VTK程序架构 12
3.2.1 VTK的主要架构 12
3.2.2 可视化管线 14
3.2.3 VTK的体绘制可视化管线 15
3.3 VTK的数据读写 15
3.3.1 VTK的数据读写结构 15
3.3.2 VTK的数据读写主要步骤 16
3.3.3 VTK的数据读写的具体类介绍 16
3.3.4 图像数据的类型转换 17
3.4 一个简单的VTK工程 18
4 VTK下体绘制实践 20
4.1 环境配置 20
4.1.1 获取VTK源码 20
4.1.2 编译VTK的准备工作 20
4.1.3 编译VTK的详细步骤 20
4.2 程序运行流程 23
4.2.1 23
主程序程序Python代码 23
4.2.2 程序流程图 26
4.3 结果分析 26
4.3.1 实验数据说明 26
4.3.2 程序功能说明 27
4.3.3 程序结果图像 28
5 结语 32
5.1 总结 32
5.2 展望 32
参考文献 34
致 谢 35
本文是对科学可视化中的体绘制算法,以及使用VTK软件库进行体绘制程序实现方法的研究。主要工作是分析了传统面元绘制方法相比体绘制方式的不足和各类体绘制算法的特点,介绍了VTK软件库的程序架构和主要功能,其各种模块的相应作用,以及其数据流在可视化管线以及渲染引擎中的传递关系,最后使用最新的VTK6.3.0版本进行编程环境的搭建和体绘制程序的编写,并对得到的结果进行了分析。
本论文大体模块分为五章:
第一章为绪论,介绍了本课题的国内外研究现状,课题的来源与意义和主要研究内容等。
第二章对传统面元绘制方法的不足进行了分析,并对体绘制四种主要算法原理进行了介绍,并讨论了这几种方法的区别。
第三章是对VTK软件库的介绍,介绍了其架构和主要功能,其各个模块的作用和数据读写的特点,最后借助一个简单的VTK程序介绍了其体绘制程序代码的结构。
第四章是使用VTK进行体绘制程序编写的实践,使用CMAKE进行了最新版本的VTK编程环境的搭建,编写Python程序实现了体绘制程序的基本功能,并对最后使用程序对三维数据进行处理后的成果图像进行了分析。
第五章是结语部分,对全文的内容进行了整理和总结,提出了一些展望。

体绘制程序代码:
```csharp
#!/usr/bin/env python
# *-* coding:utf-8 *-*

from vtk import *


#读取,使用的是vtkMetaImageReader类读取MHD格式
file_name = r"G:\graduate project\VolumeRenderData\backpack8.raw\backpack8.mhd"
reader = vtkMetaImageReader()
reader.SetFileName(file_name)

#vtkImageCast进行数据类型转换,这里转换成unsignedShort
cast = vtkImageCast()
cast.SetInputConnection(reader.GetOutputPort())
cast.SetOutputScalarTypeToUnsignedShort()
cast.Update()
output = cast.GetOutputPort()

'''
#或者使用vtk格式直接读取
file_name = r"mummy.128.vtk"
reader = vtkStructuredPointsReader()
reader.SetFileName(file_name)
reader.Update()
output = reader.GetOutputPort()
'''

#定义体绘制算法函数
##rayCastFun = vtkVolumeRayCastCompositeFunction() #光线投射法
##rayCastFun = vtkVolumeRayCastMIPFunction() #最大密度法
rayCastFun = vtkVolumeRayCastIsosurfaceFunction()  #特定等值面法
rayCastFun.SetIsoValue(100)  #特定等值面的数值


#设置体绘制的Mapper,有两个输入
volumeMapper = vtkVolumeRayCastMapper()
volumeMapper.SetInputConnection(output) #第一个是输入图像数据
volumeMapper.SetVolumeRayCastFunction(rayCastFun)  #另一个是设置体绘制的光线投射函数


#########接下来到了设置体绘制的各种属性的时间www############################
'''
#设置光线采样距离
volumeMapper.SetSampleDistance(volumeMapper.GetSampleDistance()*4)
#设置图像采样步长
volumeMapper.SetAutoAdjustSampleDistances(0)
volumeMapper.SetImageSampleDistance(4)
'''
#体绘制属性设置
volumeProperty = vtkVolumeProperty()
volumeProperty.SetInterpolationTypeToLinear()
volumeProperty.ShadeOn() #打开或者关闭阴影测试
volumeProperty.SetAmbient(0.4)
volumeProperty.SetDiffuse(0.6)
volumeProperty.SetSpecular(0.2)

#灰色不透明函数
compositeOpacity = vtkPiecewiseFunction()
compositeOpacity.AddPoint(70, 0.00)
compositeOpacity.AddPoint(90, 0.40)
compositeOpacity.AddPoint(180, 0.60)
volumeProperty.SetScalarOpacity(compositeOpacity) #灰色不透明函数导入体绘制属性

#颜色传输函数
color = vtkColorTransferFunction()
color.AddRGBPoint(0.000, 0.00, 0.00, 0.00)
color.AddRGBPoint(64.00, 1.00, 0.52, 0.30)
color.AddRGBPoint(190.0, 1.00, 1.00, 1.00)
color.AddRGBPoint(220.0, 0.20, 0.20, 0.20)
volumeProperty.SetColor(color) #导入颜色函数

#梯度不透明函数
volumeGradientOpacity = vtkPiecewiseFunction()
volumeGradientOpacity.AddPoint(10, 0.0)
volumeGradientOpacity.AddPoint(90, 0.5)
volumeGradientOpacity.AddPoint(110, 1.0)
##volumeProperty.SetGradientOpacity(volumeGradientOpacity)#导入梯度不透明效果

#vtkVolume类型,相似于vtkActor,接受两个输入
volume = vtkVolume()
volume.SetMapper(volumeMapper) #设置Mapper对象
volume.SetProperty(volumeProperty) #设置属性对象


######################################渲染引擎设置############################

ren = vtkRenderer()
ren.SetBackground(1.0, 1.0, 1.0)
ren.AddVolume(volume)

renWin = vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.Render()
renWin.SetWindowName("VolumeRenderingApp")

iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
ren.ResetCamera()

renWin.Render()
iren.Start()







资源下载地址:https://download.csdn.net/download/sheziqiong/85926449
资源下载地址:https://download.csdn.net/download/sheziqiong/85926449
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
资源下载地址:https://download.csdn.net/download/sheziqiong/85926449
资源下载地址:https://download.csdn.net/download/sheziqiong/85926449

原网站

版权声明
本文为[biyezuopinvip]所创,转载请带上原文链接,感谢
https://biyezuopin.blog.csdn.net/article/details/125635420