#Volumetric Rendering
##Introduction
This application implements the marching cube algorithm using Three.js so that medical images and functions can be displayed in a web browser. When viewing medical images, the surface level can be changed to display different elements of an image. For example, we can look at the surface of a human foot and after increasing the surface value, we can view the skeletal structure of a foot.
##Usage
The application can be found here
(http://softwarego.no-ip.biz/FinalProject/Volumetic%20Rendering/MarchingCubesAlgorithm.html). Additional .raw 3D files can be downloaded here (http://www.volvis.org/). To use the application, users need to select an object to render, update rendering settings, and render the file.
The w,a,s,d keys can be used to move around the rendered scene. J,K,L,I can be used to rotate the object.
#####Select Object to Render
* Press the Select Object button
* Depending on type of object, a value from the dropdowns may need to be selected
* Press either Load 3D File, Load Function, or Upload A Local File
* Wait for the object to load
* Once all dialog boxes are automatically closed, the object can be rendered
#####Update Rendering Settings
* Press the Settings button
* In the following dialog, enter necessary values
* Rendering settings are specific to the type of file or function being rendered
* Specific rendering settings are displayed later in this document
#####Render An Object
* Simply press the button on the upper right hand corner of the screen
* The object will load automatically
* If the object does not load or the page crashes, try decreasing the cube size and adjusting other settings
##Algorithm Implementation
The marching cubes algorithm used is based on the algorithm described in this aritcle (http://paulbourke.net/geometry/polygonise/). The basic idea is that we take a 3D object that is represented with a function or points and divide it into a grid of cubes. We then look at each cube individually and determine if a surface of the 3D object is present inside the cube.
#####Render A Function
The implementation used here uses the algorithm described in the Paul Bourke paper linked earlier. When rendering a function, the application divides the area specified by the user in the settings into cubes, each with a user specified size. A function then loops through each cube and computes the function value at the four points of the cube. We then build a binary value by looking at which points are lower than the isovalue specified by the user. We then look at which edges of the cubes are intersected by the surface of the function. If there is an intersection along the edge, we use interpolation to compute the estimated location of the point. Finally, we use the triangle table presented in the Paul Bourke paper to create the triangles found within the current marching cube. We then apply smoothing to the entire object to make everything look cleaner.
#####Render A 3D File
To understand how the .raw 3D files are rendered, we must first look at how data is stored in the files. A description of how data is stored can be found here (http://www.3dleds.com/bitmap.html). Basically, each byte of the file stores a decimal value from 0 to 255. These bytes are then used to form a stack of 2D images where each byte is at a different point. The application stores the byte array and then itterates through the marching cubes as before but instead of computing a value for each point of a cube, the application gets a corresponding value from the byte array.
##Object Settings
Below are some settings that help render different objects correctly. If you are using a file not described here, you will need to find the settings on your own.
#####Skull.txt
XLength: 256
YLength: 256
ZLength: 256
CubeSize: 2
IsoValue: 45
#####Circle - x^2 + y^2 + z^2 - 10000
XLength: 256
YLength: 256
ZLength: 256
CubeSize: 4
IsoValue: 45
#####Distel - x^2 + y^2 + z^2 + 1000(x^2 + y^2)(x^2 + z^2)(y^2 + z^2)
XLength: 3
YLength: 3
ZLength: 3
CubeSize: .025
IsoValue: 60
#####Heart - (x^2 + (9yy)/4 + z^2 - 1)^3 - x^2z^3 - (9y^2z^3)/80
XLength: 2
YLength: 2
ZLength: 2
CubeSize: .02
IsoValue: 0
#####Crazy - sin(xy + xz + yz) + sin(xy) + sin(yz) + sin(xz) - 1
XLength: 3
YLength: 3
ZLength: 3
CubeSize: .1
IsoValue: 0
##References
The code in custom-ui.js, ParseWorker.js, and MarchingCubeAlgorithm.html was all written by me. Much of Main.js was also written by me however part of the algorithm for marching cubes was adapted from the Paul Bourke paper. This includes the lines dedicated to using the look up table provided in MarchingCubeEdges.js which was taken from the Paul Bourke paper as well. A majority of the other files in the application were not written by me but only provide Three.js support and design. Additional information about adapted code can be found in the comments of the files just described.
* Gallery of geometric functions (http://homepage.univie.ac.at/herwig.hauser/bildergalerie/gallery.html)
* Marching cube algorithm (http://paulbourke.net/geometry/polygonise/)
* Three.js marching cubes (http://stemkoski.github.io/Three.js/Marching-Cubes.html)
* .Raw 3D file structure (http://www.3dleds.com/bitmap.html)
* Cleaning objects from scene (http://stackoverflow.com/questions/18357529/threejs-remove-object-from-scene)
没有合适的资源?快使用搜索试试~ 我知道了~
Volume-Rendering:使用 Three.js 和行进立方体算法对 3D 医学图像进行体积渲染
共36个文件
js:14个
png:14个
css:4个
需积分: 44 20 下载量 67 浏览量
2021-07-07
20:00:54
上传
评论
收藏 13.84MB ZIP 举报
温馨提示
#体积渲染 ##介绍 此应用程序使用 Three.js 实现了行进立方体算法,以便可以在 Web 浏览器中显示医学图像和函数。 查看医学图像时,可以更改表面水平以显示图像的不同元素。 例如,我们可以查看人脚的表面,增加表面值后,我们可以查看脚的骨骼结构。 ##用法 该应用程序可以在这里找到( )。 可以在此处下载其他 .raw 3D 文件 ( )。 要使用该应用程序,用户需要选择要渲染的对象、更新渲染设置并渲染文件。 w,a,s,d 键可用于在渲染场景中移动。 J,K,L,I 可用于旋转对象。 #####选择要渲染的对象 按选择对象按钮 根据对象的类型,可能需要从下拉列表中选择一个值 按加载 3D 文件、加载函数或上传本地文件 等待对象加载 一旦所有对话框自动关闭,就可以渲染对象 #####更新渲染设置 按设置按钮 在下面的对话框中,输入必要的值 渲染设置特定于正在渲染的文件或函数
资源详情
资源评论
资源推荐
收起资源包目录
Volume-Rendering-master.zip (36个子文件)
Volume-Rendering-master
Volumetic Rendering
images
gridme.png 225B
MarchingCubesAlgorithm.html 4KB
assets
Skull.txt 42.4MB
js
THREEx.KeyboardState.js 3KB
jquery-ui.js 458KB
THREEx.WindowResize.js 1KB
Three.js 794KB
THREEx.FullScreen.js 3KB
Stats.js 3KB
ParseWorker.js 2KB
Detector.js 2KB
CameraControls.js 3KB
jquery-1.9.1.js 262KB
underscore.js 48KB
custom-ui.js 3KB
Main.js 27KB
MarchingCubeEdges.js 16KB
css
images
ui-icons_888888_256x240.png 7KB
ui-bg_glass_75_dadada_1x400.png 262B
ui-bg_glass_95_fef1ec_1x400.png 332B
ui-icons_2e83ff_256x240.png 4KB
ui-bg_flat_0_aaaaaa_40x100.png 212B
ui-bg_flat_75_ffffff_40x100.png 208B
ui-icons_222222_256x240.png 7KB
ui-icons_cd0a0a_256x240.png 4KB
ui-bg_glass_55_fbf9ee_1x400.png 335B
ui-bg_glass_65_ffffff_1x400.png 207B
ui-bg_glass_75_e6e6e6_1x400.png 262B
ui-bg_highlight-soft_75_cccccc_1x100.png 280B
ui-icons_454545_256x240.png 7KB
jquery-ui.theme.css 17KB
jquery-ui.css 34KB
site.css 163B
jquery-ui.structure.css 18KB
README.md 5KB
Presentation
LoganLaughery_VolumetricRendering.pptx 1.71MB
共 36 条
- 1
凌冽的风
- 粉丝: 30
- 资源: 4681
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java将2个List集合合并到一个List里面并排序工具类
- 1123231321321321
- 基于Python的歌曲搜索播放器源代码,利用requests库对歌曲宝网站进行歌曲采集,并用tkinter做了UI
- kernel-devel-3.10.0-1062.21.1.el7.x86-64.rpm
- kernel-3.10.0-1062.21.1.el7.x86-64.rpm
- A2_smvs.zip
- Assignment2(4).ipynb
- 用pytorch框架实现的油井时间序列动态预测的模型,其中包含一些传统的时间序列预测方法 .zip
- TimesNet作为一般时间序列分析强大的基础模型 在长短期预测、插补、异常检测和分类5个主流任务上取得了一致的前沿成果.zip
- 实现结构体序列化和反序列化工具类CSearchive,支持基本类型,C++STL容器以及对象 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0