最近在AI工具的帮助下做了一个 DICOM 影像查看与分析工具:DicomVision。实现了我这几年来的梦想。
项目灵感来自“小赛看看”这类轻量医学影像查看器。我希望它既能像普通阅片工具一样快速浏览 DICOM,又能把一些更复杂的能力做进去,比如 MPR、斜切 MPR、4D 时相播放、服务端 3D 体渲染、MTF/FWHM 分析、水模 QA 等。
目前项目已经开源:
- Client:github.com/l5769389/Di…
- Server:github.com/l5769389/Di…
可以通过链接:dicom-vision-client.vercel.app/ 预览整个项目的web端。
它能做什么?
DicomVision 是一个 C/S 架构的 DICOM 阅片与分析工具,支持 Web 端和桌面端两种部署方式。
主要功能包括:
- Stack 切片阅览
- 窗宽窗位、缩放、平移、滚动、旋转、翻转
- MPR 三视图重建
- 十字线联动与斜切 MPR
- 4D 时相切换与播放
- 服务端 VTK 3D 体渲染
- DICOM Tag 查看
- ROI 测量
- MTF/FWHM 分析
- 水模 QA 分析
- 图像导出
- 深色 / 浅色主题
- Web 端部署
- Windows 桌面端打包
项目截图
Stack 阅片
MPR 重建
斜切 MPR 与十字线旋转
4D 时相播放
测量工具
DICOM 标签查看
MTF / FWHM 分析
水模 QA
主题与设置
技术架构
项目拆成两个仓库:
前端 DicomVisionClient
前端使用:
- Vue 3
- TypeScript
- Electron
- electron-vite
- Vuetify
- Tailwind CSS
- Axios
- Socket.IO Client
前端负责工作区、工具栏、标签页、视口交互、设置面板、Web 构建和桌面端打包。
后端 DicomVisionServer
后端使用:
- Python 3.13+
- FastAPI
- python-socketio
- pydicom
- NumPy / SciPy
- Pillow
- VTK
- uv
后端负责 DICOM 读取、序列管理、图像渲染、MPR 重建、4D 时相数据、3D 体渲染、测量计算和 QA 分析。
为什么采用 C/S 架构?
我没有把所有图像计算都放到浏览器里,而是采用前后端分离:
- 前端负责交互体验
- 后端负责 DICOM 处理和渲染计算
- 图像帧通过 Socket.IO 实时推送给前端
这样做的好处是:
- 浏览器端更轻
- 复杂计算可以放到 Python 生态里做
- VTK、pydicom、NumPy 这些库可以直接使用
- Web 端和桌面端可以复用同一套后端能力
- 桌面版也可以把后端一起打进安装包
本地运行
先启动后端:
cd DicomVisionServer
uv sync
uv run python run.py