基于序列图像的三维体绘的视线投射算法(Ray Casting)

一.体绘算法步骤
 
1.体数据的生成:
将序列图像的象素数据部分剥离出来(如果是JPG等压缩类型的数据,还需要先解压缩),按照相对的上下层之间的关系,将其存到一内存区中,保存的原则比较简单,即能够根据象素的三维坐标最快的检索到体素的值(此处的象素值可以是灰度值、颜色值或者CT值等)。
 
2.设置材质的显示属性:
某象素属于何种材质,归根到底还是由象素值来确定,所以在设置材质的时候必须首先设定材质的受用象素值的范围,即该材质的值的上限和下限,进而设定材质的色泽、透明度、镜面反射系数、漫反射系数等其他显示属性。
 
3.设置光照属性:
设置光源的数目,并设置每个光源的属性:点光源还是平行光源还是环境光源、在点光源的情况下光源的位置、在平行光源的情况下光线投射的方向、光线强度、光强是否有衰减、在衰减的情况下衰减因子如何设定、光源颜色等等。
 
4.视线投射方向的确定:
根据视窗于物体的相对位置,我们很容易确定视线的方向向量。

 

5.视线采样:
遍历视窗中的所有象素,由每个象素都发出一条视线,并在视线经过的物体区域进行采样,一般采用用均匀采样的方式,即沿着视线方向,每隔一段距离就进行一次采样,如此便可获取采样位置的坐标,在获取采样坐标后对采样体素进行如下处理:
 
(1)根据采样位置坐标用三线性插值的方式从体数据当中获取采用位置的体素值,进而根据体素值确定体素的属性。
 
(2)获取体素的法向量值:
利用梯度法获取体素的法向量值:
设采样获得的体素坐标为(x0,y0,z0),f(x0,y0,z0)为体素值,那么该体素的法向量值应当为为:
{f(x0+△d,y0,z0)-f(x0-△d,y0,z0),f(x0,y0+△d,z0)-f(x0,y0-△d,z0),f(x0,y0,z0+△d)-f(x0,y0,z0-△d)}
       特别要指出的是,在体数据当中,可能会存在体素在X、Y、Z方向所占的区间大小不相同的情况,在获取获取体素法向量的计算过程当中要尤为注意。
 
(3)设置体素的颜色:
根据材质属性以及光照的属性来设置体素的色泽,以单平行光源为例,体素的色泽可以表示为:
I=I0+(I1–I0)*Cosα
其中I为体素表现颜色、I0为体素材质颜色、I1为光线颜色、α为光线方向向量和体素法向量所成的角度。

 

(4)获取体素的不透明度:
如果物体是完全透明的,那么视线便可穿透物体,也就是说视线能量不会有任何损耗,如果物体并非完全透明,那么视线必然会被部分或者完全的阻挡,视线能量会有损失,因此可以将不透明度理解成为视线损失程度的概念:
C1=C0*C
此处的C1为视线被体素所阻挡的程度,即体素的不透明度、C0为视线射到体素之前的能量的,C为材质的不透明度。
值得指出的一点是当C0和C1相等的时候说明视线完全被阻挡,即视线到此处截止,所以完成该体素采样后,该视线的采样工作便可宣告完成
 
(5)视窗象素值的设定:
将视线上所有的采样点的色泽与其不透明度相乘之后再相加便可得该视线的象素值
 
二.提升显示效果的有效手段
 
1.缩短均匀采样方法的采样间隔,增加视线采样体素的数目。
2.增大将视窗的分辨率,从而产生更多的采样视线
 
三.提升效率的有效手段
 
1.增加均匀采样方法的采样间隔,减少视线采样体素的数目。
2.减小视窗的分辨率,从而产生更少的采样视线

转载于:https://www.cnblogs.com/yxnchinahlj/archive/2011/03/25/1995851.html

基于序列图像的三维体绘的视线投射算法相关推荐

  1. VTK学习笔记(二)-----读入序列图像进行三维体渲染

    体绘制管线Imagedata->=VolumeMapper->Volume->Render->RenderWindow->RenderWindowInteractor S ...

  2. Visual Hull基于序列图像的三维重建

    Visual Hull是基于轮廓信息的三维重建,输入是序列图像以及对应序列图像的相机投影矩阵P.如果换成自己想要的序列图像, 相应的P矩阵也需要更换,因为P矩阵是相机标定后得到的.现在感觉自己作标定遇 ...

  3. MATLAB生成三维体数据

    MATLAB生成三维体数据 一.三维体数据的生成 二.多二维矩阵生成三维体数据 三.多二维图像生成三维体数据 四.DICOM序列生成三维体数据 五.其他 by HPC_ZY 之前写了医学影像三维重建的 ...

  4. Matlab批量转换dicom,基于Matlab的批量转换DICOM格式CT序列图像的实现

    龙源期刊网 http://www.doczj.com/doc/25ac806b59fb770bf78a6529647d27284a733760.html 基于Matlab的批量转换DICOM格式CT ...

  5. 【图像隐写】基于LSB+DWT+DCT三种算法实现图像和音频水印嵌入提取含Matlab源码

    1 简介 基于LSB+DWT+DCT三种算法实现图像和音频水印嵌入提取. 1.1 LSB算法 根据LSB算法简单易实现的特点,结合在图像置乱技术中很好特性的Arnold变换.利用变化产生影子图像.通过 ...

  6. 【数学建模】2022亚太赛A题 结晶器熔炼结晶过程序列图像特征提取与建模分析

    2022亚太赛A题 1 前言 2 问题重述 3 问题一 3.1 数据处理 3.1.1 图像裁剪 3.1.2 提取红色部分 3.2 汉字提取 3.2.1 失败的例子 3.2.2 正确的例子 4 问题二 ...

  7. matlab实现大气湍流退化模型算法,大气湍流下退化序列图像的目标检测方法

    引言 目标检测是计算机视觉的重要应用之一, 是后续目标识别.跟踪.目标分类以及行为分析的前提.远距离成像时通常会受到复杂变化的大气湍流影响, 使得成像结果中存在不规则抖动.偏移和模糊等退化现象[.因此 ...

  8. BioNano生物纳米分子的“原始数据到完成装配和组装分析”管线与基于序列的基因组FASTA映射...

    生物纳米分子的"原始数据到完成装配和组装分析"管线与基于序列的基因组FASTA映射 您完成本实验以及示例数据集所需的所有脚本将按照以下说明复制到计算机.您应该按照以下说明,将米色代 ...

  9. 三维体数据分割算法及实现

    三维体数据分割算法及实现 本文基于分裂合并分割算法,提出了两种新的分割算法:基于八叉树的分裂合并算法和基于自适应包围盒的分裂合并算法.下面将对这两种算法进行描述. 1 分裂合并法分析 区域生长法的原理 ...

最新文章

  1. 用计算机能改装成万用表吗,用旧手机电池修改万用表
  2. 并发控制:(三)MVCC 多版本并发控制
  3. c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作
  4. 《2020雇佣关系趋势报告》今发布:近三成受访者兼职,近七成工作量增加、考核变严格
  5. VC++如何处理自定义消息
  6. 【图网络】如何用Python实现算法:规划图技术(GraphPlanner)
  7. 【LeetCode笔记】42. 接雨水(Java、动态规划)
  8. centos6 mysql 启动_【17-02-18】 【求助】centos6 mysql重启后无法正常启动
  9. Scanner对象接收数据进行分类处理 java
  10. 知乎热榜:如何看待华为天才少年年薪201万?
  11. 如何从零开始搭建自己的博客
  12. MyEclipse安装包
  13. rtmp协议官方规范
  14. 凯恩帝绝对坐标清零_凯恩帝系统加工件数自动清零怎么设置
  15. 腰围尺寸2尺1、2、3、4、5、6、7、8寸分别等于是多少厘米/英寸(对照参考表)
  16. 基于文本检测模型检测文本框对图像进行旋转校正
  17. 设计模式之建造者模式与原型模式
  18. zlib简单使用说明(转)
  19. HCIA网络基础01
  20. 票据撮合区块链系统开发-去中心化的新型票据交易展现形式的系统

热门文章

  1. Ubuntu新版发布周期
  2. 读《世界是数字的》笔记
  3. 用ClusterSSH管理多台Linux服务器(2)
  4. .NET图像处理包 DotImage
  5. Thinkpad SU使用方法FOR 2008
  6. 关于程序员面试时的智力题集锦
  7. 二叉树遍历的非递归算法
  8. 大数据挖掘有哪些技术
  9. MySQL存储过程-循环遍历查询到的结果集
  10. python unicode编码转换中文_Python入门高级教程--Python 中文编码