2. 全切片图像数据基础
数字病理的几乎所有算法问题,最终都要回到一个共同的起点:全切片图像(Whole Slide Image,WSI)。它不是一张普通的大图,而是一个自带多分辨率结构、坐标系、颜色约定和元数据的“图像数据库”。如果只把 WSI 当成一张超大 PNG 来读,后续的切块、染色归一化、模型训练和结果回写都会出现难以定位的错误。本节围绕 WSI 的六个基础要素展开:文件格式、金字塔层级、扫描分辨率、颜色空间、元数据以及公开数据集。
一、WSI 格式:容器而非单一图像
WSI 文件本质是一个容器格式,内部同时保存了多级缩略图、瓦片(tile)、标签图(label/macro 图)以及描述性元数据。常见格式包括:
- 专有/厂商格式:Aperio 的
.svs、Hamamatsu 的.ndpi、Leica 的.scn、3DHISTECH 的.mrxs、Philips 的.isyntax。它们通常基于 TIFF 或自有容器,压缩方式、瓦片尺寸和元数据字段各不相同。 - 开放格式:
.tiff/.tif(通用金字塔 TIFF)、.ome.tiff(带 OME 元数据)、DICOM WSI(.dcm,医疗影像标准,支持多帧与结构化元数据)。
工程上通常不直接解析这些格式,而是通过 OpenSlide、libvips、pyvips、tiffslide 或厂商 SDK 读取。以 OpenSlide 为例,读取某层某区域的核心接口是:
import openslide
slide = openslide.OpenSlide("case_001.svs")
print(slide.level_count) # 金字塔层数
print(slide.level_dimensions) # 每层 (宽, 高)
print(slide.level_downsamples) # 每层相对 level 0 的降采样倍数
region = slide.read_region((x, y), level, (w, h)) # 注意 (x,y) 始终是 level 0 坐标
这里有一个极易出错的约定:read_region 的坐标始终以 level 0 为参照,而返回图像尺寸由 (w, h) 决定。若把某层的坐标直接传入,就会读到错误位置。这是 WSI 工程中最常见的坐标错误来源。
二、金字塔层级与扫描分辨率
扫描仪以最高分辨率采集整张玻片后,会逐级降采样生成金字塔。若 level 0 为 40×(约 0.25 μm/pixel),则 level 1 通常为 20×(0.5 μm/pixel),level 2 为 10×(1.0 μm/pixel),以此类推。降采样倍数与物理分辨率成反比:
MPP_level = MPP_0 × downsample
例如 MPP_0 = 0.25 μm/px,downsample = 4 → MPP = 1.0 μm/px(约 10×)
不同任务对层级的需求不同:细胞核分割与有丝分裂检测通常需要 40× 或 20×;组织区域分割、肿瘤/正常判别常用 10× 或 5×;而全局缩略图用于导航和质控。因此,一个实用的做法是先确定“目标 MPP”,再反推应读取哪一层,而不是固定使用某一层。例如目标 MPP 为 0.5 μm/px,就应选择 downsample 最接近 2 的层。
此外,WSI 的像素坐标与物理尺寸之间通过 MPP 换算。若要在 40× 下取一个 256×256 的 patch,其物理边长约为 256 × 0.25 = 64 μm;若在 10× 下取同样像素尺寸,物理边长则为 256 μm,覆盖范围相差 4 倍。这一换算直接决定了模型的感受野和细胞计数密度。
三、颜色空间与染色归一化
病理图像是 RGB 三通道,但 RGB 并不适合直接做染色分离。H&E 染色中,苏木素(Hematoxylin)呈蓝紫色,伊红(Eosin)呈粉红色,两者在 RGB 中高度耦合。常用处理方式包括:
- RGB → 灰度:用于快速质控或简单分割,但会丢失染色信息。
- HSV / Lab:分离亮度与色度,便于处理光照不均。
- 光密度(OD)与颜色去卷积:将 RGB 转换到 OD 空间,再按已知染色矩阵分离为 H 和 E 两个通道。这是 Macenko、Vahadane 等归一化方法的基础。
颜色归一化的目的是消除不同扫描仪、不同实验室、不同批次染色造成的色差。工程上通常先估计参考图像的染色矩阵,再把目标图像映射到参考空间。需要注意:归一化会改变像素值,若后续模型在未归一化数据上训练,推理时也必须保持一致的处理链,否则性能会明显下降。
四、元数据:决定读取方式的关键信息
WSI 元数据通常包含:扫描仪型号、MPP、放大倍数、金字塔层数与各层尺寸、瓦片尺寸、压缩方式、ICC 色彩配置、玻片标签、扫描时间等。OpenSlide 以 properties 字典暴露这些字段,例如 openslide.mpp-x、openslide.objective-power、openslide.level[0].downsample。读取前应先检查这些字段是否存在,因为部分格式或转换后的文件可能缺失 MPP,此时需要根据 objective-power 或已知扫描参数估算。
五、常见公开数据集
公开数据集是验证算法和对比结果的基准。下表列出数字病理中常用的几个:
| 数据集 | 任务 | 规模/特点 |
|---|---|---|
| CAMELYON16/17 | 乳腺淋巴结转移检测 | 数百张 WSI,含像素级标注,常用于肿瘤区域分割 |
| TCGA | 多癌种诊断/分型 | 数万张 WSI,覆盖多种癌种,元数据丰富 |
| PANDA | 前列腺癌 Gleason 分级 | 约 1 万张穿刺 WSI,分级标注 |
| PatchCamelyon (PCam) | patch 级二分类 | 327,680 个 96×96 patch,适合快速验证 |
| MoNuSeg / CoNSeP | 细胞核分割 | 提供细胞核实例标注,用于分割与分类 |
使用公开数据集时,应关注其扫描分辨率、染色方案和标注粒度是否与自己的任务一致。例如 PCam 是 patch 级数据,不能直接用于 WSI 级推理;TCGA 的 WSI 来自多个中心,色差较大,是检验归一化方法的好材料。
六、从读取到可训练样本的完整链路
把上述要素串起来,一个典型的 WSI 预处理链路是:读取元数据 → 确定目标 MPP 与对应层级 → 在 level 0 坐标系下按步长滑窗取 patch → 过滤背景(如根据灰度阈值或组织掩膜)→ 颜色归一化 → 保存为 patch 数据集。下面给出一个可参考的参数配置示例:
目标 MPP: 0.5 μm/px
patch 尺寸: 256 × 256 px
步长: 256 px(无重叠)或 128 px(50% 重叠)
背景过滤: 灰度均值 < 220 且组织占比 > 30%
归一化: Macenko,参考图取自同批次正常切片
输出: patch 图像 + 对应 level 0 坐标 (x, y)
其中坐标必须记录为 level 0 坐标,这样无论后续用哪一层读取,都能通过 downsample 换算回原图位置,保证结果可回写、可复核。
掌握以上六个要素后,面对任意一张 WSI,都能先回答三个问题:它是什么格式、有哪些层级、目标 MPP 对应哪一层;再决定如何取 patch、如何归一化、如何记录坐标。这些基础决定了下游细胞检测与分类模型能否稳定复现。