超声学习笔记
超声学习笔记
超声成像模式
内容来源: B站 - 超声视频中级
超声不是只有一种"拍片子", 不同模式解决不同问题. 了解这些基本概念后, 看 DICOM 文件时才能理解它存的是哪类数据.
| 模式 | 全称 | 原理简述 | 典型用途 |
|---|---|---|---|
| B-mode | Brightness mode | 二维灰阶, 回波幅度用亮度表示 | 常规解剖成像, 看结构形态 |
| M-mode | Motion mode | 单一声束线上随时间变化的位移曲线 | 心脏瓣膜运动、室壁运动分析 |
| Doppler | 多普勒血流成像 | 检测红细胞散射的频移, 计算血流速度和方向 | 血流速度测量、狭窄/反流评估 |
| TDI | Tissue Doppler Imaging | 低通滤波滤除高速血流, 保留低速组织(心肌)运动信号 | 心肌运动速度、应变/应变率分析 |
B-mode
最基础的二维灰阶成像. 探头向体内发射超声波, 接收组织界面的回波, 按回波强度用不同灰度显示. 亮度高 = 回声强(如骨骼、钙化), 亮度低 = 回声弱(如血液、囊肿).
常说的"B超"就是这个模式. 腹部、产科、浅表器官检查都以 B-mode 为主.
M-mode
在 B-mode 图像上选定一条取样线, 记录该线上各点随时间运动的位移曲线. 横轴是时间, 纵轴是深度, 亮度表示回声强度.
时间分辨率极高, 是分析心脏瓣膜开放/关闭时序、室壁运动幅度的经典工具.
Doppler
利用多普勒效应: 超声遇到运动的红细胞时, 回波频率会发生偏移, 频移大小与血流速度成正比. 通过检测频移可以:
- 判断血流方向 (朝向/远离探头)
- 测量血流速度
- 评估血管狭窄、瓣膜反流
TDI
组织多普勒成像 (Tissue Doppler Imaging) 是 Doppler 技术的变体. 普通彩色多普勒检测的是高速血流(红细胞运动), TDI 通过低通滤波器把高速血流信号滤掉, 只保留低速高振幅的组织运动信号(心肌).
临床应用:
- 测量二尖瓣环/三尖瓣环组织速度 (e’, a’, s’)
- 评估左室舒张功能 (E/e’ 比值)
- 心脏再同步化治疗 (CRT) 的优化
TDI 有角度依赖性, 取样线需尽量与心肌运动方向平行. 新一代斑点追踪超声 (STE) 已部分取代 TDI, 但 TDI 因时间分辨率高、操作简便仍在临床广泛使用.
多部位对比的产品设计思路
看超声诊断时注意到几个实际需求, 记录一下:
一些诊断需要结合病史来看, 基础病会影响诊断结果.
很多诊断需要结合多部位, 有些病也需要其他检查来结合判断 (比如 CT).
很有使用价值的图, 我觉得这才是我们应该做的. 超声设备无法简单的做出这种界面, 我们很容易做出来, 又很有应用价值. 医生在分析和案例分享学习时, 能比 PDF/PPT 更高效.
切入邻床实际, 医生接到一位患者, 拿到病例表现, 去做部位检查. 因为涉及到多部位, 有需要频繁切换来对比观看, 超声机器上不方便. 他可能想要这么个界面: 多个部位对比着看, 左右点击一下就方便多部位参照.
DICOM 文件格式
文件结构
DICOM 文件包含两部分:
File Meta Header(文件头)
包括标识信息 (如 SOP Class、Transfer Syntax UID、创建时间等).
Data Set(数据集)
由一个个 Data Element(标签)组成, 比如:
| 标签 | 含义 |
|---|---|
| (0010,0010) | PatientName |
| (0028,0010) | Rows |
| (7FE0,0010) | Pixel Data ← 真正的图像像素在这里! |
按内容类型划分
| 类型 | 含义 | Pixel Data 结构 | 常见 SOP Class |
|---|---|---|---|
| 单帧图像 | 一张静态医学图像(如X光、CT单层) | 一帧像素矩阵 | e.g. CT Image Storage, MR Image Storage |
| 多帧图像 | 同一序列的多帧(可看作图像堆栈或短视频) | 多帧像素数组(帧数在 (0028,0008) Number of Frames) | Enhanced MR Image Storage, Ultrasound Multi-frame Image Storage |
| 视频(动态序列) | 超声、透视、内窥镜常见 | 多帧像素序列,通常以时间轴索引 | Ultrasound Image Storage, Video Endoscopic Image Storage |
| 多视频(多序列) | 某些设备一次扫描会输出多个 DICOM 序列文件夹,每个序列对应一个视频或体积 | 每个序列一组帧 | 多个 SOP Instance UID 不同 |
| 3D/体积数据 | CT、MRI 扫描生成的多切片组成三维体积 | 每个切片一帧,按 Z 坐标排列 | Enhanced CT/MR Image Storage |
| 结构化报告(DICOM SR) | 文本或标注信息,如测量值、病灶标注 | 无像素数据 | Structured Report Storage |
| RT系列(放疗) | 包括结构集、剂量、计划等 | 可混合使用图像与向量数据 | RT Structure Set Storage 等 |
| 场景 | DICOM 表现 | 文件数量 | Pixel Data 特征 |
|---|---|---|---|
| 普通胸片 | 单个 .dcm | 1 | 单帧,2D 灰度 |
| MRI 扫描(100层) | 100个 .dcm 或一个多帧 .dcm | 多个或1个 | 每帧代表一个切片 |
| 超声动态视频 | 1个 .dcm | 1 | 多帧,含时间轴 |
| 超声多序列 | 多个 .dcm 文件,每个一个视频序列 | 多个 | 每个有多帧 |
| 内窥镜或术中记录 | 有时封装 MPEG-2 / H.264 视频流 | 1个 .dcm | Pixel Data 中是压缩视频流 |
Pixel Data 编码方式
| 压缩方式 | 含义 | 示例 |
|---|---|---|
| 未压缩 | 原始像素矩阵(Raw) | 常见于 CT、MR |
| JPEG / JPEG2000 | 有损或无损压缩 | 超声、CR、DR |
| MPEG-2 / H.264 | 视频流压缩 | 内窥镜、超声视频 |
| RLE | 无损游程编码 | 某些老设备 |
超声 DICOM 的特殊性
超声设备导出的 DICOM 有三种形态, 处理时必须先判断是哪种, 否则读图或转视频时会踩坑.
静态图像
医生按键冻结画面时, 设备保存的"单张截图", 用于测量、诊断、报告等场景.
| 属性 | 示例 |
|---|---|
(0028,0008) Number of Frames | 不存在 或 值为 1 |
(7FE0,0010) Pixel Data | 单帧灰度或彩色图像 |
| 常见 SOP Class | Ultrasound Image Storage (1.2.840.10008.5.1.4.1.1.6.1) |
动态序列
超声扫描过程中记录的动态视频序列, 可用于回放或导出为 AVI/MP4.
实际就是时间轴连续的图片, 如需导出视频的话, 需要做编码转换 (有较大性能占用).
| 属性 | 示例 |
|---|---|
(0028,0008) Number of Frames | 存在且 > 1(例如 120) |
(0018,1063) Frame Time | 每帧间隔(单位 ms) |
(7FE0,0010) Pixel Data | 多帧像素序列或视频流 |
| 常见 SOP Class | Ultrasound Multi-frame Image Storage (1.2.840.10008.5.1.4.1.1.3.1) |
视频流
一些高端设备(尤其是内窥或心超)还可能使用 MPEG-2 或 H.264 编码的视频流嵌入在 (7FE0,0010) 的 Pixel Data 中.
对应 SOP Class 例如: Video Ultrasound Image Storage (1.2.840.10008.5.1.4.1.1.6.2)
实际就是编码压缩过的多帧图像, 占用体积比多帧小很多, 本身就是视频所以可直接导出 (几乎无性能占用).
import pydicom |
DICOM 导出与转换
标准导出层级
导出批次(Export Batch) |
层级关系: Patient → Study (一次检查) → Series (一个序列/模式) → Instance (单张图像/帧)
逸超设备导出格式
C:. |
逸超设备会在每个 Series 下自动创建
converted文件夹, 预转好 MP4/JPG, 方便非 DICOM 系统直接使用. 这点很贴心, 不用自己写脚本转视频了.
视频格式转换
| 格式 | 编码方式 | 特点 | 推荐场景 |
|---|---|---|---|
| MP4 (H.264) | 有损压缩 | 通用、兼容性极高、文件小、质量较好 | ✅ 推荐:用于展示、教学、科研报告等 |
| AVI (无压缩或MJPEG) | 可无损 | 文件大,但保真 | 医学分析、算法训练前数据准备 |
| MOV (H.264 / ProRes) | 有损或轻压缩 | 苹果生态友好,质量高 | 视频编辑、科研展示 |
| MKV (H.264 / H.265) | 有损压缩 | 可封装多通道音视频、元数据 | 特殊研究项目 |
| H.265 / HEVC | 有损高效压缩 | 同质量体积更小,但编码慢 | 长序列或云端传输 |
从 DICOM 多帧 Pixel Data 导出视频时, 要逐帧解码再编码, CPU 占用很高. 如果 DICOM 本身是视频流编码 (MPEG/H.264), 可以直接提取流封装到 MP4, 几乎零性能消耗.
医学影像标注
标注类型与格式
在医学影像中, 「标注(Annotation)」可能包含以下几种形式:
| 类型 | 示例 | 数据格式 |
|---|---|---|
| 像素级分割(Segmentation) | 器官或病灶mask | DICOM SEG、NIfTI、PNG mask |
| 二维标记(点/框/多边形) | ROI、测量线、医生手动圈选 | DICOM Presentation State (PR)、私有JSON |
| 结构化描述(诊断结论) | “前列腺体积xxml,疑似病灶区域xx” | DICOM SR(Structured Report) |
| AI推理结果 | 模型输出mask、评分、概率 | 通常自定义JSON + DICOM SEG |
| 格式 | 用途 | 优点 | 工具/库 |
|---|---|---|---|
| DICOM SEG | 存储分割Mask | 标准化、兼容各厂商 | dcmqi, pydicom, dcm4che |
| DICOM SR (Structured Report) | 存储测量/文字诊断 | 可机器解析、符合IHE标准 | highdicom, dcm4che |
| DICOM PR (Presentation State) | 存储显示用标注 | 支持图形ROI,但非语义化 | dcm4che, pydicom |
| 自定义 JSON 标注 | 训练数据集常用 | 简单灵活,非标准 | Python自定义 |
| 需求 | 推荐格式 | 生成方式 | 解析方式 |
|---|---|---|---|
| 影像分割结果(AI/手动mask) | DICOM SEG | Python: highdicom / dcmqi | Java: dcm4che-seg |
| 定量测量、文字报告 | DICOM SR | Python: highdicom | Java: dcm4che-sr |
| 仅内部使用训练标注 | JSON + mask 文件 | Python 自定义 | Java/Python 通用解析 |
| 目标 | 推荐做法 | 原因 |
|---|---|---|
| 构建标准化医学标注系统 | DICOM SR + SEG | 符合国际标准,方便医院/PACS对接 |
| 简单AI数据集标注 | JSON + NIfTI/PNG mask | 简单易操作 |
| Java 环境 | 用 dcm4che-sr / dcm4che-seg 解析与生成 | 官方支持 |
| Python 预处理或AI | 用 highdicom / dcmqi | 社区主流 |
Python vs Java 标注生态对比
为什么不推荐"让 Java 来做标注生成"? 主要是以下几个现实原因:
标注生成往往依赖图像数据处理
医学标注不仅是元信息写入, 还涉及像素、mask、坐标、图像空间映射. Java 没有成熟的医学影像处理库:
- 没有 SimpleITK、nibabel、numpy
- 坐标系、体素、spacing、affine matrix 等都需要自己实现
- Python 则有成熟生态 (highdicom, SimpleITK, dcmqi), 能直接读写、变换、验证
✅ 在 Python:
seg = highdicom.seg.Segmentation(...)就能生成符合标准的 SEG 文件.
❌ 在 Java: 你得手工拼 DICOM dataset 结构, 几百行 XML 树状属性.DICOM SR 的语义编码复杂
SR 文件需要使用标准化术语编码 (SNOMED CT、UCUM、LOINC). Python 的
highdicom.sr封装了各种编码模板 (如 TID 1500、TID 300), 可直接使用. Java 的dcm4che-sr层次较低, 需要你手动创建 Attributes 树、填 CodeSequence, 非常繁琐.✅ Python:
MeasurementReport(...)一行构建完整报告
❌ Java: 你得手工拼 ContentSequence、ValueType、ConceptNameCodeSequence、ConceptCodeSequence医学标注多与 AI / 图像算法绑定
实际上, 标注文件常来自 AI 推理结果或人工审阅系统. AI 推理 → 通常是 Python 环境 (PyTorch / MONAI). 标注后生成 DICOM SEG/SR → Python 一站式完成更自然. Java 若要参与标注生成, 反而要跨语言调用 Python 算法输出, 增加复杂度.
常见问题
为什么一个 Study 会有多个 Series
| 场景 | 说明 |
|---|---|
| 不同成像模式 | 比如 B 模、彩色多普勒(CFM)、脉冲多普勒(PW)、M 模等。每种模式会生成一个独立的 Series。 |
| 不同探头 | 如果在同一次检查中切换了探头(如腹部探头、腔内探头),也会分成不同 Series。 |
| 静态图像 vs 动态视频 | 一些超声仪器会把保存的"视频片段"和"静态截图"分别保存为独立 Series。 |
| 参数变化 | 比如改变了深度、焦点、增益或测量设置后,设备可能重新开始一个 Series。 |
| 复合图像或测量图 | 测量报告图(带测量线的图像)或复合模式(Compound Imaging)也可能单独作为 Series。 |
借物表
- 超声视频中级 - B站 — 基础概念来源
- Highdicom: a Python library for standardized encoding of image annotations — DICOM SEG/SR 标准化编码
- highdicom Documentation — Python DICOM 标注库
- DICOM Standard - NEMA — DICOM 标准官方文档
- DaoCloud public-image-mirror — 国内镜像源参考 (注: 与本主题无关, 保留原引用)












