数据可视化(一):体绘制的概念与算法实现-光线投射算法 (ray-casting)
体绘制的概念与部分算法实现-光线投射算法 (ray-casting)
目录
一、体绘制基本概念
1.1 定义
体绘制又叫直接体绘制(DVR),是一种用于显示 3D 离散采样数据集的 2D 投影技术。
Wikipedia describes volume rendering as “a set of techniques used to display a 2D projection of a 3D discretely sampled data set”.(一种用于显示3D离散采样数据集的2D投影技术)
1.2 应用领域
常用于医学CT切片图像、气象数值预报产品、雷达扫描数据等。比如有人摔断了腿,医生可能会对他的腿进行CT扫描。扫描产生一个三维数据集,其中每个细胞定义了该点的密度。
1.3 特点
体绘制算法常见特点如下:
1、用颜色表示属性值大小,如污染物浓度。
2、用不透明度表示数据的重要程度,比如污染物的不透明度越高影响程度越大。
3、表现变量的立体感和内容物
1.4 常见体绘制算法
1、光线投射算法(Ray-casting)
2、光线行进算法(Ray-marching)
3、基于三维纹理的体绘制算法
二、光线投射(Ray-casting)算法
2.1 算法思想
类比人眼将三维空间接收的光线投影到视网膜从而形成二维图像,光线投射算法在一定的视角范围内,跟踪视点到物体的射(光)线,将三维体数据不同距离的数据点按照一定方式叠加显示在平面上。
1、由于光线是有无数条,首先需要进行方向离散化得到不同方向的光线,再将每一条光线分成N个样本。
图
2、将投射光线上的采样值映射为图像属性,光线在二维平面的投影点是由光线上的离散点投影叠加形成,每一个离散点的贡献不一样,累积到一起决定了图像像素的颜色。
2.2 具体实现(三线性插值)
1、确定采样点
根据需求确定投射光线方向上的采样间距,将三维对象分割成一个个正方体,并按照一定的采样间距在光线上采样,以下是采样的二维剖面展示。
2、计算采样值
在每一个小正方体中,V(x0,y0,z0)表示在点(x0,y0,z0)处的值,通过三线性插值的方法计算P(X, Y, Z)点处的采样值P。
①计算权重
在x轴方向上计算权重:Xd=(X-x0)/(x1-x0) 。
在y轴方向上计算权重:Yd=(Y-y0)/(y1-y0) 。
在z轴方向上计算权重:Zd=(Z-z0)/(z1-z0) 。
②三个方向的插值
下图为A1所在横截面, A2类似为B3,B4。
先计算x轴方向上的插值:
B1=V(x0,y0,z0)(1-Xd)+V(x1,y0,z0)Xd
B2=V(x0,y0,z1)(1-Xd)+V(x1,y0,z1)Xd
B3=V(x0,y1,z1)(1-Xd)+V(x1,y1,z1)Xd
B4=V(x0,y1,z0)(1-Xd)+V(x1,y1,z0)Xd
再计算y轴方向上的插值:
A1=B1*(1-Zd)+B2 * Zd
A2=B4*(1-Zd)+B3 * Zd
最后计算y轴上的插值:
P=A1*(1-Yd)+A2 * Yd
综合起来:
3、进行采样值的像素属性映射(这里后续有时间再更新,只阐述基本原理)
通过传输函数将采样值映射为图像属性,包括颜色传输函数和不透明度函数,对体绘制效果起决定性作用。
①基本原则
突出感兴趣采样区域,弱化不重要的采样区域。即对体数据进行分类表达
②分类
颜色传输函数:将采样值映射为颜色,反映采样值的大小和性质。
不透明度传输函数:将采样值映射为不透明度值,反映采样值的重要性。
③问题
数据分类及传输函数与位置无关;
体数据多样且复杂;
人机交互接口设计;
4、采样值合成
①方法:
根据成像贡献累积光线上所有采样点,合成像素值。累计值的计算是一个迭代的过程,采样点从前往后(靠近成像点为前),如下图所示
②颜色累计值计算
前i点颜色累积值:是由前i-1点的采样点的颜色累积值+该采样点的颜色贡献值(该点的不透明度越高,其颜色贡献值越大,前面i点的不透明度越大,该点的颜色贡献值越小):
③不透明度累计值计算
前i点不透明度累计值:是由前i-1点的不透明度累计值+该点不透明度贡献值(前i-1点不透明度累积值越大,该点贡献值越大)
可以看出当不透明度累计值等于1时,迭代计算结束,将叠加值赋予成像点。
2.3 算法分析
1、优点
表现内容更加丰富,便于观察事物整体结构和内容物
可以通过调整传输函数突出感兴趣区域
2、缺点
传输函数设计复杂
观察方向变化时。需要重新进行采样、计算量大
更多推荐
所有评论(0)