当前位置:网站首页>三维扫描体数据的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
边栏推荐
- 智能运维应用之道,告别企业数字化转型危机
- Three application characteristics of immersive projection in offline display
- [CVPR 2022] target detection sota:dino: Detr with improved detecting anchor boxes for end to end object detection
- How about the order management of okcc call center
- Devops can help reduce technology debt in ten ways
- Everyone is always talking about EQ, so what is EQ?
- How can computers ensure data security in the quantum era? The United States announced four alternative encryption algorithms
- DAY TWO
- Personal digestion of DDD
- okcc呼叫中心的订单管理时怎么样的
猜你喜欢
DAY ONE
1000 words selected - interface test basis
2022/2/12 summary
刘永鑫报告|微生物组数据分析与科学传播(晚7点半)
Why is bat still addicted to 996 when the four-day working system is being tried out in Britain?
陀螺仪的工作原理
工程师如何对待开源 --- 一个老工程师的肺腑之言
Liuyongxin report | microbiome data analysis and science communication (7:30 p.m.)
2022年PMP项目管理考试敏捷知识点(9)
Yaduo Sangu IPO
随机推荐
PostgreSQL uses pgpool II to realize read-write separation + load balancing
DAY ONE
48页数字政府智慧政务一网通办解决方案
Close unregistering application XXX with Eureka with status down after Eureka client starts
kubernetes部署ldap
MySQL learning notes (mind map)
Imeta | Chen Chengjie / Xia Rui of South China Agricultural University released a simple method of constructing Circos map by tbtools
pinia 模块划分
Leecode brush question record sword finger offer 58 - ii Rotate string left
[2022 the finest in the whole network] how to test the interface test generally? Process and steps of interface test
2022/2/10 summary
自动化测试工具Katalon(Web)测试操作说明
[CVPR 2022] semi supervised object detection: dense learning based semi supervised object detection
[automated testing framework] what you need to know about unittest
File and image comparison tool kaleidoscope latest download
【精品】pinia 基于插件pinia-plugin-persist的 持久化
MIT 6.824 - raft Student Guide
Clipboard management tool paste Chinese version
MATLIB reads data from excel table and draws function image
Quickly use various versions of PostgreSQL database in docker