# viewer-dcm **Repository Path**: forproject/viewer-dcm ## Basic Information - **Project Name**: viewer-dcm - **Description**: 纯前端 3D DICOM 查看器,零部署、单 HTML 文件运行。支持最大密度投影(MIP)、体绘制(VR)、等值面提取三种渲染模式,以及轴位/冠状位/矢状位三平面重组。基于 Three.js + dicomParser 构建。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-30 - **Last Updated**: 2026-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: HTML, JavaScript ## README
# 🔬 3D DICOM Viewer **基于 WebGL 的轻量级 DICOM 医学影像三维查看器** [在线体验](#快速开始) · [功能特性](#功能特性) · [使用说明](#使用说明) · [技术架构](#技术架构) · [常见问题](#常见问题) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) [![HTML5](https://img.shields.io/badge/HTML5-E34F26?logo=html5&logoColor=white)](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5) [![WebGL](https://img.shields.io/badge/WebGL-990000?logo=webgl&logoColor=white)](https://www.khronos.org/webgl/) [![Three.js](https://img.shields.io/badge/Three.js-000000?logo=three.js&logoColor=white)](https://threejs.org/)
--- ## 📞 联系我们 如果您对该项目感兴趣,或有定制开发的需求,可以扫描下方二维码联系我们: | 昱扬科技官网 | 开源技术交流群 | |:----------:|:-------------:| | ![官网二维码](./assets/昱扬科技【二维码】.png) | ![交流群二维码](./assets/昱扬科技【开源技术交流群】.png) | | [https://www.yuyoung.cn](https://www.yuyoung.cn) | | --- ## 📖 项目简介 3D DICOM Viewer 是一个**零部署、纯前端**的医学影像查看器,支持 CT/MRI 等多模态 DICOM 影像的加载、浏览与三维重建。无需后端服务,打开 HTML 文件即可使用。 主要特点: - 🏥 **纯浏览器运行** — 无需安装任何软件或服务端,单个 HTML 文件即可启动 - 🧊 **三种 3D 渲染模式** — MIP 最大密度投影、VR 体绘制、等值面提取 - 🔲 **三平面重组(MPR)** — 轴位、冠状位、矢状位实时同步浏览 - 🎨 **多种颜色映射** — 灰度、热图、冷色、彩虹 - 🪟 **窗宽窗位调节** — 内置骨骼/肺窗/软组织预设,支持自由调节 - 📱 **响应式布局** — 适配桌面端与移动端,支持触控操作 - 📦 **多格式加载** — 支持 ZIP 压缩包、单个 DCM 文件、文件夹上传、拖拽上传 --- ## ✨ 功能特性 ### 三维渲染 | 模式 | 说明 | 适用场景 | |------|------|----------| | **MIP** | 最大密度投影,沿射线取最大像素值 | 血管显影、骨骼观察 | | **VR** | 体绘制,累积透明度与光照 | 软组织可视化、整体结构观察 | | **Surface** | 等值面提取 + Blinn-Phong 光照 | 骨骼表面重建、器官轮廓提取 | ### 三平面重组(MPR) - **轴位(Axial)** — 横断面,沿 Z 轴切片 - **冠状位(Coronal)** — 冠状面,沿 Y 轴切片 - **矢状位(Sagittal)** — 矢状面,沿 X 轴切片 - 支持鼠标滚轮快速切换切片位置 ### 窗宽窗位 | 预设 | 窗位 (WC) | 窗宽 (WW) | 适用场景 | |------|-----------|-----------|----------| | 🦴 骨骼 | 300 | 1500 | 骨折、骨病变 | | 🫁 肺窗 | -600 | 1500 | 肺结节、肺部感染 | | 🫀 软组织 | 50 | 350 | 肝脏、肌肉、淋巴结 | ### 交互操作 - 🖱️ **旋转** — 鼠标拖拽旋转 3D 视图 - 🔍 **缩放** — 鼠标滚轮缩放 - ⌨️ **快捷键** — `1-5` 切换视图模式,`R` 重置,`空格` 自动旋转 - 📷 **截图导出** — 一键导出当前 3D 渲染画面为 PNG ### 功能截图 > ⚠️ 截图待补充 ![功能截图1](./assets/1.png) ![功能截图2](./assets/2.png) ![功能截图3](./assets/3.png) ![功能截图4](./assets/4.png) ![功能截图5](./assets/5.png) --- ## 🚀 快速开始 ### 在线使用 直接用浏览器打开 `3d.html` 文件即可,无需任何构建步骤。 ```bash # 克隆仓库 git clone https://github.com/your-username/viewer-dcm.git # 进入目录 cd viewer-dcm # 用浏览器打开 # 方式一:双击 3d.html # 方式二:使用本地服务器(推荐,避免跨域限制) python -m http.server 8080 # 然后访问 http://localhost:8080/3d.html ``` ### 加载 DICOM 数据 支持以下方式加载影像数据: 1. **ZIP 压缩包** — 点击「选择文件」上传包含多个 `.dcm` 文件的 `.zip` 2. **单个/多个 DCM 文件** — 直接选择 `.dcm` 文件 3. **文件夹上传** — 点击「选择文件夹」上传整个 DICOM 序列 4. **拖拽上传** — 将文件拖入上传区域 > ⚠️ 建议使用本地 HTTP 服务器访问,部分浏览器对 `file://` 协议的跨域有限制。 --- ## 🏗️ 技术架构 ### 技术栈 | 技术 | 用途 | |------|------| | [Three.js](https://threejs.org/) | WebGL 3D 渲染引擎 | | [dicomParser](https://github.com/cornerstonejs/dicomParser) | DICOM 文件解析 | | [JSZip](https://stuk.github.io/jszip/) | ZIP 压缩包解压 | | WebGL 2.0 | GPU 加速体绘制(Ray Casting) | | HTML5 Canvas | 2D 切片渲染 | ### 渲染管线 ``` DICOM 文件 → dicomParser 解析 → 像素数据提取 (HU 值) ↓ 排序 & 构建 3D 体积纹理 ↓ ┌───────────────────┼───────────────────┐ ↓ ↓ ↓ MIP 模式 VR 体绘制 Surface 模式 (最大密度投影) (累积透明度+光照) (等值面+Phong光照) └───────────────────┼───────────────────┘ ↓ WebGL Ray Casting ↓ 屏幕输出 ``` ### 项目结构 ``` viewer-dcm/ ├── 3d.html # 主页面(单文件应用) ├── lib3d/ # 第三方依赖库 │ ├── dicomParser.min.js # DICOM 解析库 │ ├── jszip.min.js # ZIP 解压库 │ └── three.min.js # Three.js 渲染引擎 ├── dcm测试文件.zip # 测试用 DICOM 数据 └── README.md # 项目文档 ``` ### 核心实现 - **Ray Casting 体绘制** — 基于 GPU 的光线投射算法,通过 ShaderMaterial 实现单 Pass 体渲染 - **3D 纹理映射** — 将 DICOM 体积数据上传为 `Data3DTexture`,支持三线性插值与各向异性过滤 - **自动降采样** — 当体积数据超过 256³ 时自动降采样,兼顾渲染质量与性能 - **自适应像素比** — 限制最大像素比为 1.5-2.0,降低低端设备 GPU 压力 - **WebGL 上下文保护** — 监听上下文丢失/恢复事件,防止崩溃 --- ## 🎮 快捷键 | 快捷键 | 功能 | |--------|------| | `1` | 四联视图 | | `2` | 3D 视图 | | `3` | 轴位视图 | | `4` | 冠状位视图 | | `5` | 矢状位视图 | | `R` | 重置相机 | | `空格` | 切换自动旋转 | --- ## ❓ 常见问题 ### Q: 打开 3d.html 后无法加载文件? A: 部分浏览器对 `file://` 协议的跨域访问有限制,建议使用本地 HTTP 服务器: ```bash # Python python -m http.server 8080 # Node.js npx serve . # PHP php -S localhost:8080 ``` ### Q: 加载大量切片时浏览器卡顿? A: 项目内置了自动降采样机制。如仍有性能问题,可尝试: - 降低「步进质量」(64 或 32) - 减少切片数量 - 使用 Chrome/Edge 等对 WebGL 支持较好的浏览器 ### Q: 支持哪些 DICOM 模态? A: 目前主要测试了 CT 和 MRI 数据。其他模态(如 PET、超声)可能需要适配窗宽窗位参数。 ### Q: 渲染出现花屏或黑屏? A: 可能是 GPU 内存不足导致 WebGL 上下文丢失。建议: - 关闭其他占用 GPU 的程序 - 降低步进质量和数据量 - 刷新页面重试 --- ## 🤝 参与贡献 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 发起 Pull Request --- ## 📄 许可证 本项目基于 [Apache License 2.0](LICENSE) 开源。 --- ## 🙏 致谢 - [Three.js](https://threejs.org/) — 强大的 WebGL 3D 渲染库 - [dicomParser](https://github.com/cornerstonejs/dicomParser) — 高性能 DICOM 文件解析器 - [JSZip](https://stuk.github.io/jszip/) — 轻量级 ZIP 解压库 --- ## 🚀 未来规划 我们计划在后续版本中持续迭代更新,为该查看器增加更多实用功能,包括但不限于: - 🤖 **AI 智能分析** — 集成深度学习模型,自动检测和标注肺部结节、骨折、脑出血等异常区域 - 📊 **自动化报告生成** — 基于 AI 分析结果,一键生成结构化医学影像报告 - 🔍 **多模态融合** — 支持 PET/CT、PET/MRI 等多模态影像融合显示 - 📈 **历史对比** — 支持多次检查影像的时间轴对比,追踪病情变化 - 🎯 **精准测量** — 提供距离、角度、体积等精准测量工具 我们将持续优化用户体验,引入更多 AI 能力,让医学影像查看更加智能化。如有定制开发需求,欢迎联系我们。 ---
**⚠️ 本项目仅供学习与研究使用,不可用于临床诊断。**