# 直接体渲染 **Repository Path**: lzw_code/direct-volume-rendering ## Basic Information - **Project Name**: 直接体渲染 - **Description**: 使用opengl编写的体渲染,使用光线投射法。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-07 - **Last Updated**: 2024-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 直接体渲染 ## 介绍 本程序使用OpenGL编写,使用光线投射法进行直接体渲染。 一共包含五个项目: * VolumeRender:普通体渲染 * VolumeRender-Accelerate:体渲染加速 * ColorTransferFunction:颜色转移函数的读写 * DataStatistic:图象数据的统计 * DicomToRaw:DICOM数据转化 ### VolumeRender 实现了最基本的体渲染效果(无加速),下面展示了4种体渲染效果: * **标准体渲染效果图**
* **带光照的体渲染效果图**
* **等值面渲染图**
* **最大密度投影效果图**
允许漫游,键盘WASDQE和鼠标左键控制移动与转向。 用到的第三方库:glfw3、glew、glm、glad ### VolumeRender-Accelerate 在VolumeRender的基础上,实现了加速功能,主要有三种加速方法: * Block ESS * Chebyshev Distance ESS * Multi-Resolution Chebyshev Distance ESS 扩展性更好,能通过读取nhdr文件,来导入不同的raw体数据。 引入了imgui,允许更好的测试不同参数对体渲染效果与渲染帧率的影响。 用到的第三方库:glfw3、glew、glm、glad、imgui ### ColorTransferFunction 用于颜色转移函数二进制文件的读写与可视化 命令行用法:```ColorTransferFunction {mode} {file1} [file2]``` | mode | 说明 | 用法示例 | | ---- | ----------------- | -------------------------------------- | | 0 | 预览二进制dat文件 | ColorTransferFunction 0 lzw.dat | | 1 | 预览txt文件 | ColorTransferFunction 1 lzw.txt | | 2 | dat文件转txt文件 | ColorTransferFunction 2 lzw.dat fx.txt | | 3 | txt文件转dat文件 | ColorTransferFunction 3 fx.txt lzw.dat | 如果想要自定义一个颜色转移函数,并保存到dat文件中,需要进行以下步骤: 1. 创建文本文件custom.txt 2. 编辑custom.txt,格式说明: * 第一行:节点数量 最小密度值 最大密度值 * 第二行及以后:密度值 红通道 蓝通道 绿通道 透明度通道 *默认的密度值范围:[-1000, 4360],颜色通道范围:[0, 255],透明度通道范围:[0,1]* 3. 执行```ColorTransferFunction 3 custom.txt custom.dat```,生成dat文件 ### DataStatistic 统计两张图片之间的差异,会输出指标:PSNR和SSIM 命令行用法:```DataStatistics {file1} {file2} [width] [height] ``` 最后两个参数表示:不是比较两张图片的全部,而是居中裁剪成width*height后,再进行比较 用到的第三方库:opencv ### DicomToRaw 将DICOM序列转化为二进制raw文件和说明mhd文件 命令行用法:```DicomToRaw {DICOM Directory} {Output RAW File} {Output MHD File}``` 用到的第三方库:itk ## 使用方法 1. 克隆代码 2. 下载项目会用到的[资源](https://gitee.com/lzw_code/direct-volume-rendering/releases/download/v1.5.0/asset.rar) 3. 解压asset.rar,将其中的文件拷贝到项目的asset文件夹内 4. 打开CMake 5. 指定源码路径与构建路径 6. 点击Configure 7. 指定vcpkg的工具链文件 * 确保已安装vcpkg,若未安装参考:[vcpkg安装和使用——windows篇_vcpkg安装教程-CSDN博客](https://blog.csdn.net/qq625924821/article/details/135490808) * CMake会自动检测VCPKG_ROOT环境变量 * VCPKG_ROOT不存在时,需要手动指定DEFAULT_TOOLCHAIN_FILE的路径,值为/scripts/buildsystems/vcpkg.cmake * VCPKG_ROOT存在时,会自动为DEFAULT_TOOLCHAIN_FILE赋值 8. 使用vcpkg安装相应的包 生成VolumeRender或VolumeRender-Accelerate时,安装: ```vb vcpkg install glad vcpkg install glew vcpkg install glfw3 vcpkg install glm ``` 生成DataStatistic时,安装: ``` vcpkg install opencv ``` 生成DicomToRaw时,安装: ``` vcpkg install itk ``` 生成ColorTransferFunction时,无需安装 9. 选择要编译的项目 * ENABLE_VOLUMERENDER_ACCELERATE:默认开启,体渲染加速项目 * ENABLE_VOLUMERENDER:默认关闭,体渲染未加速项目 * ENABLE_DATASTATISTICS:默认关闭,数据统计项目 * ENABLE_COLORTRANSFERFUCNTION:默认关闭,颜色转移函数项目 * ENABLE_DICOMTORAW:默认关闭,DICOM格式转换项目 10. 点击Configure 11. 点击Generate 12. 点击Open Project 13. 右击ALL_BUILD,生成 14. 将VolumeRender-Accelerate设为启动项目 15. 按F5进行调试 ## 资源链接 * [体数据](https://klacansky.com/open-scivis-datasets/) * [Accelerated Volume Rendering with Chebyshev Distance Maps](https://dl.acm.org/doi/10.1145/3355088.3365164) * [Efficient ray casting of volumetric images using distance maps for empty space skipping](https://link.springer.com/article/10.1007/s41095-019-0155-y)