3. 多模态数据获取与工程化预处理
多模态融合的第一道工程关口并不在模型结构,而在数据进入网络之前。CT、MRI、PET 等模态在采集设备、空间分辨率、体素间距、灰度语义和存储格式上差异巨大,若直接拼接送入网络,融合结果往往被“几何错位”和“强度尺度不一致”主导,而非被真正的互补信息主导。本节围绕一条可落地的预处理链展开:DICOM 解析 → 重采样 → 配准前处理 → 强度归一化 → 缺失模态处理,并说明每一步的输入、关键参数、可观察结果与判断依据。
一、DICOM 解析:把像素和几何信息一起读出来
DICOM 文件不是普通图像,它由文件元信息(File Meta Information)和数据集(Dataset)组成,像素数据只是其中一个标签。工程上必须同时取出三类信息:像素矩阵(Pixel Data)、几何信息(Image Position Patient、Image Orientation Patient、Pixel Spacing、Slice Thickness、Slice Location)以及强度语义信息(Rescale Slope、Rescale Intercept、Modality、Photometric Interpretation)。其中最容易出错的是 CT 的 HU 换算:存储的像素值并非 CT 值,必须按 HU = pixel × RescaleSlope + RescaleIntercept 还原,否则后续归一化会把不同扫描的窗宽窗位语义彻底打乱。
解析时还需处理多帧、压缩传输语法(如 JPEG Lossless)和序列排序。一个常见坑是:同一序列的切片可能按 Instance Number 排序,但真实空间顺序应由 Image Position Patient 沿层法向投影决定。若仅按文件名或 Instance Number 排序,遇到缺失切片或重复采集时会出现层间错位。建议解析后立即构建一个统一的体数据对象,至少包含:三维数组、仿射矩阵(体素索引 → 患者坐标)、模态标识和强度单位说明。
二、重采样:统一体素间距与空间范围
不同模态的体素间距差异显著,例如 CT 常见 0.7×0.7×1.0 mm,而 PET 可能为 4×4×4 mm。重采样目标是把所有模态映射到同一参考网格。工程上通常选择其中一种模态(多为 CT 或 T1 MRI)作为参考网格,其余模态重采样到该网格。插值方式需按数据类型区分:CT、MRI 等连续强度图像可用三线性插值;分割标签、掩膜等离散标签必须用最近邻插值,否则会引入不存在的类别值。
重采样后要检查两件事:一是物理尺寸是否一致,可用仿射矩阵验证体素中心对应的患者坐标范围;二是方向是否一致,DICOM 的 LPS 坐标系与部分工具(如 ITK)的 RAS 约定不同,需在仿射矩阵中显式处理,避免左右翻转。若方向约定在后续配准中被隐式改变,融合结果会出现“看似对齐、实则镜像”的严重错误。
三、配准前处理:为配准准备可用的初始条件
配准前处理不是配准本身,而是降低配准失败率的准备步骤。典型操作包括:裁剪或掩膜掉扫描床、头枕等非解剖结构;对 MRI 做偏置场校正(N4 Bias Field Correction),减少低频频偏对相似性度量的干扰;对 PET 做 SUV 归一化或至少记录剂量与体重信息,使强度具有可比性;对 CT 可先做肺、骨等组织的窗宽窗位截断,突出配准关注的解剖边界。
此外,初始对齐非常关键。若两模态初始姿态差异过大,基于互信息或归一化互相关的优化容易陷入局部极值。常用做法是用方向信息(Image Orientation Patient)做粗对齐,或用一个快速刚性配准得到初始变换,再交给后续可变形配准。判断配准前处理是否合格,可观察:非解剖区域是否被有效抑制、强度分布是否更集中、初始变换后的重叠区域是否覆盖主要解剖结构。
四、强度归一化:让不同模态的灰度可比
强度归一化的目标是消除设备、协议和个体差异带来的灰度尺度差异,同时保留模态内部的相对对比。常用方法有三类:
- Z-score 归一化:对每个模态在脑组织或前景掩膜内计算均值和标准差,做
(x − μ) / σ。适合 MRI 这类无绝对单位的模态。 - 百分位截断 + 线性缩放:取 1% 和 99% 分位数作为上下界,截断后缩放到 [0,1]。对 CT、PET 等存在离群高值的模态更稳健。
- 直方图匹配:把待处理模态的强度分布映射到参考模态,适合同模态跨中心数据,但跨模态使用需谨慎。
归一化必须在配准前处理之后、且在前景掩膜内进行,否则背景零值会显著拉低均值、压缩有效动态范围。判断归一化是否合理,可检查前景区域的直方图是否覆盖完整、是否出现过度截断导致的“平台”,以及不同样本间同一组织的强度分布是否大致对齐。
五、缺失模态处理:工程上必须面对的现实
真实临床数据中,某个模态缺失是常态而非例外。处理策略分三个层次:数据层,用零填充并附加模态可用性掩码,让网络显式知道哪些通道无效;特征层,用共享编码器加模态特定分支,缺失时跳过对应分支并做特征对齐;生成层,用已有模态合成缺失模态(如 CT→MRI 或 MRI→CT 的跨模态生成),但生成结果只能作为辅助输入,不能替代真实模态参与最终诊断判断。
无论采用哪种策略,都应在数据划分时保证训练、验证、测试的缺失模式分布一致,否则模型在测试时遇到未见过的缺失组合会性能骤降。评估时也应分别报告“全模态”和“缺失模态”两组指标,而不是只给一个平均值。
六、工程实现中的参数与判断依据
下面给出一段可参考的预处理参数配置示例,用于说明各步骤中真正需要显式约定的字段。示例参数属于教学假设,实际项目应按数据分布调整。
preprocess:
dicom:
sort_by: "ImagePositionPatient_projection"
hu_convert: true
resample:
reference_modality: "CT"
target_spacing: [1.0, 1.0, 1.0] # mm
interpolator:
intensity: "linear"
label: "nearest"
preregistration:
remove_bed: true
n4_bias_correction: true # MRI only
pet_suv_normalize: true
normalization:
method: "percentile"
lower: 1
upper: 99
mask: "foreground"
missing_modality:
strategy: "zero_fill_with_mask"
mask_channel: true
判断整条链是否合格,可以按以下顺序快速核查:第一,随机抽取若干病例,把重采样后的各模态叠加显示,观察解剖边界是否重合;第二,检查归一化后前景区域的强度直方图是否覆盖合理、是否出现异常尖峰;第三,确认缺失模态掩码与张量通道一一对应;第四,在验证集上分别统计全模态与缺失模态的指标,若两者差距过大,说明缺失处理策略或数据划分存在问题。只有这四步都通过,预处理结果才适合进入融合网络。