WSI 金字塔、物理像素尺寸与观察尺度
学习目标
- 解释全切片图像(whole-slide image,WSI)的分块与多分辨率金字塔如何支持按需读取,并区分 tile 与金字塔层级。
- 区分物理像素尺寸(micrometers per pixel,MPP)、物镜倍率、光学分辨率与屏幕缩放,判断哪些信息可用于组织尺度测量。
- 根据 MPP、像素尺寸和下采样系数,计算图块的物理视野、二维面积及层级间的近似尺度关系。
- 应用 OpenSlide 的参数约定,区分 Level 0 起点坐标与所选层的输出尺寸,并读取层级与 MPP 元数据。
- 比较不同图块的物理视野与观察尺度,判断统一像素尺寸或插值缩放能否保证尺度可比或增加真实细节。
本文聚焦这些基础概念、换算关系及其在病理阅片与 AI 图像分析中的作用。数字切片文件格式的全面比较、QuPath/OpenSlide 的批量导出流程、WSI 采样代表性与模型架构另有独立专题,不在这里展开。
一、WSI 为什么需要金字塔与分块
1. 一张 WSI 究竟有多大?
设一张用于计算的合成示例图像在最高分辨率下为 80,000 × 60,000 像素,物理像素尺寸为 0.25 µm/pixel。它包含:
仅按 8 位 RGB、每像素 3 字节估算,未压缩的原始像素阵列占用约 14.4 GB(十进制),尚未计入缓存、元数据及额外层级。它在真实文件中的压缩后大小可能显著不同;不能由这个估算反推磁盘大小。[1, 5]
如果每次缩放都要完整解码最高分辨率图像,不仅内存负担很大,还会浪费 I/O。因此,WSI 通常将两个技术组合使用:
- 分块存储(tiling): 把一个分辨率层拆成许多可单独访问的小块;读取视野时只需取用相交的块,而不是解码整层。
- 多分辨率金字塔(pyramidal image): 把相同组织范围表示为不同像素密度的多个层级;低倍浏览使用较粗层级,放大时切换到更细层级。
两者不是同义词:tile 是同一层内部的空间划分,金字塔是不同分辨率之间的层级关系。 也不是所有 WSI 格式、软件后端都以完全相同的方式存储或生成金字塔;有时会动态计算缩略层。[1, 3]
图 1|WSI 的多分辨率金字塔与分块。上层表示更少的像素、更大的单像素物理覆盖范围;最底层 Level 0 保留最高采样密度。虚线表示各层覆盖同一组织范围,底层网格示意 tile。层与层的绘制比例仅为示意,不代表实际组织图像或扫描结果。来源:JHT Med 原创示意图,依据 OpenSlide 与 OME-TIFF 官方文档绘制。[1, 3]
2. Level 0 为什么是最高分辨率?
在 OpenSlide 的层级约定中,Level 0 是最高分辨率层,层编号越大,通常像素尺寸越少、下采样倍数越大;不能把它误解成“第 0 层是缩略图”。[1]
沿用上述合成示例,假设每升一级,宽、高均缩小一半:
| 层级 | 下采样系数 | 图像尺寸(像素) | 每像素的物理尺寸 | 典型观察用途 |
|---|---|---|---|---|
| Level 0 | 1 | 80,000 × 60,000 | 0.25 µm | 高细节观察 |
| Level 1 | 2 | 40,000 × 30,000 | 0.50 µm | 细胞与局部组织 |
| Level 2 | 4 | 20,000 × 15,000 | 1.00 µm | 局部结构与组织关系 |
| Level 3 | 8 | 10,000 × 7,500 | 2.00 µm | 较大组织范围浏览 |
这里的层级数量和 1、2、4、8 倍数只是计算示例,不是所有扫描仪或文件的统一规定。实际下采样系数可以不按 2 的幂变化,层级尺寸还可能因为边界取整出现细微比例差异;应读取具体图像元数据,而非仅由层编号推算。[1]
核心直觉:各层通常表达同一片组织的相同物理范围;变化的是表示这个范围需要多少像素。较粗层不能凭空恢复在下采样过程中丢失的细节。
另外,thumbnail(缩略图)、macro(宏观照片)与 label(玻片标签)可能作为 associated images(关联图像)另行保存;它们未必是主组织图像金字塔中的一层。[1]
二、MPP:把图像坐标连接到真实组织
1. 什么是物理像素尺寸?
MPP 表示数字图像在组织平面上的采样间距:相邻像素中心在真实标本上大致相隔多少微米。常见的 0.25 µm/pixel 可以理解为:沿某方向移动 1 个像素,对应组织平面上约 0.25 µm 的距离。
严格地说,像素是一次采样所记录的数值,并非组织上边界锐利的小方块。MPP 为几何测量提供尺度,但并不直接等于显微系统能够分辨两个物体的最小距离;后者还受到物镜数值孔径、光学成像、对焦、噪声和重建处理等因素影响。[2, 7]
若 Level 0 在水平与垂直方向的物理像素尺寸分别为 和 (单位均为 µm/pixel),则一个轴向对齐、宽 像素、高 像素的区域,物理宽高约为:
例如当两个方向的 MPP 都为 0.25,一个 512 × 512 的 Level 0 图块覆盖约 128 × 128 µm。如组织近似位于同一平面、像素标定可信,则含 个像素的分割区域面积近似为:
注意这里是图像上物体投影的二维面积,不是组织体积。若 ,仅使用一个平均 MPP 计算长度或面积可能产生误差;应分别使用两个方向的标定值。[2]
不同文件生态对同一物理尺度使用不同字段,读入时必须核对单位和轴向:
| 元数据体系 | 相关字段 | 读取时的关键点 |
|---|---|---|
| OpenSlide | openslide.mpp-x、openslide.mpp-y | 指 Level 0 的水平、垂直 µm/pixel;可能缺失或不准确。[2] |
| OME-XML / OME-TIFF | Pixels.PhysicalSizeX、PhysicalSizeY 及对应 Unit | 字段可选,默认单位可为 µm,但需检查实际单位及数据来源。[3, 4] |
| DICOM WSI | Pixel Spacing (0028,0030) | 单位通常为 mm;先行间距(垂直),后列间距(水平),换算成 µm 时乘以 1,000;并注意所处金字塔层。[6, 9] |
这些字段表示数据中记录的标定,并不自动证明扫描设备的真实误差已被独立校准。
2. MPP 和“20×、40×”有什么关系?
在数字病理行业,0.5 µm/pixel 常被称作约“20× 等效”扫描,0.25 µm/pixel 常被称作约“40× 等效”扫描。它们是便于交流的近似惯例,不是跨设备的精确换算式。[5, 7]
| 概念 | 具体回答的问题 | 能否直接代表细节质量? |
|---|---|---|
| 物镜放大倍率(objective magnification) | 光学系统把标本放大多少倍 | 不能,仍受光学与传感器限制 |
| MPP(采样间距) | 组织上相邻像素中心相隔多远 | 不能单独代表光学分辨能力,但适合约定物理尺度 |
| 光学分辨率(optical resolving power) | 多近的两个结构仍可被区分 | 更直接关乎可分辨细节,仍依赖成像条件 |
| 屏幕显示倍率 / 数字缩放 | 图像在屏幕上看起来有多大 | 不能;放大显示不会增加原始信息 |
两个“40×”文件的实际 MPP 未必相同;一个 MPP 更小的文件,也未必包含更多真实可辨认的组织细节。 扫描系统可能使用不同的光学、相机像素和图像处理流程。OpenSlide 官方甚至明确提示,其记录的 objective-power 与 MPP 元数据可能缺失或不准确。[2]
因此,分析跨中心/跨扫描仪数据时,应优先核查物理标定与成像质量,不要仅按“20×/40×”文字标签分组。
3. 为什么屏幕上看起来一样大的图像,组织范围会不同?
假设屏幕上并排显示三个均为 512 × 512 像素的图块,它们在实际数据中的 MPP 分别为 0.25、0.50 和 1.00 µm/pixel:
图 2|相同 512 × 512 像素数下的不同观察尺度。三幅图显示尺寸相同,但依次覆盖 128 × 128、256 × 256 和 512 × 512 µm 的真实组织范围。蓝色圆形仅表示一个假想直径为 40 µm 的结构,随着 MPP 增大,其占用像素数减少;不是病理细胞实拍。来源:JHT Med 原创合成示意图,数值按本文公式计算。
这解释了一个常见的模型输入陷阱:把所有图块统一 resize 成 224 × 224 或 512 × 512,并不意味着它们拥有相同的组织学观察尺度。 如果输入原始视野不同,缩放到相同张量维度后,模型看到的细胞大小、组织上下文仍然不同;如需跨扫描仪比较,应该报告输入前的物理视野与目标 MPP。
三、金字塔层级之间如何换算?
1. 下采样系数与层级 MPP
设最高分辨率层的 MPP 为 ;第 层相对于 Level 0 在横、纵方向的缩小系数为 ,则:
对于宽高同比缩放的常见金字塔,简写为 。例如 Level 0 = 0.25 µm/pixel,第 2 层相对缩小 4 倍,则第 2 层约为 1.0 µm/pixel。
若已知 和 ,可分别估计 、。由于像素尺寸是整数、文件可能有取整和不同坐标规则,这些比例用于理解或近似换算;程序读取时应遵守对应库的坐标 API,精密测量要使用经核对的标定与坐标变换。[1]
2. 坐标是以哪一层为基准?
处理 WSI 最常见的错误之一,是把不同层的像素坐标混用。
在 OpenSlide Python 中,read_region(location, level, size) 的参数含义是:[1]
location = (x, y):所取区域左上角在 Level 0 坐标系中的位置;level:从哪一个金字塔层读取;size = (width, height):输出区域在所选 level 的像素单位下有多宽、多高。
因此对于下采样系数 的层级,一般有以下近似关系:
合成示例: 以 Level 0 的 (20,000, 12,000) 为左上角,在 d_2 = 4 的 Level 2 读取 512 × 512 像素,则:
- 该位置大约对应 Level 2 坐标
(5,000, 3,000); - 读出的区域覆盖 Level 0 上约
2,048 × 2,048像素; - 若 Level 0 的 MPP 为
0.25,覆盖约512 × 512 µm的组织范围; (20,000, 12,000)乘以 MPP 得到5,000 µm、3,000 µm,是相对于当前图像 Level 0 原点的距离,不能自动视为玻片的绝对物理坐标。
扫描图像的原点、载玻片物理坐标原点、组织非空区域的边界,乃至不同切片间的配准坐标,都可能不同。涉及跨切片对齐、切除边缘定位、空间组学配准时,需要额外使用平移、旋转或更一般的几何变换;DICOM WSI 对像素矩阵和玻片坐标系也作了明确区分。[5, 6]
3. 指定“目标 MPP”与直接指定“层级”有什么区别?
科研分析的目标经常是“所有切片都按 0.50 µm/pixel 提取”,而不是“所有切片都选 Level 1”。原因在于不同原始扫描文件的 Level 0 MPP、层级数量和下采样比例可能不同。
若源图的 Level 0 MPP 为 ,期望输出的 MPP 为 ,在两个方向像素标定近似相同的条件下,理想的相对下采样系数为:
例如源图 s0 = 0.25、目标 st = 0.50,应在物理上约缩小 2 倍。若源图 s0 = 0.40,相同目标对应 d_target = 1.25,未必恰好存在这个原生金字塔层。
常见实现是选取合适的已有层,再按照需要重采样。应区分“原生采样间距”和“重采样后的输出像素间距”;插值能改变像素数量与间距,但不会重新采集丢失的光学信息。对于核分裂象等细微结构的识别,不能把单纯上采样当成提高真实分辨率。[1, 7]
四、观察尺度决定了能回答什么病理问题
病理判读依赖的不是一个固定缩放倍数,而是观察对象的空间范围和细节要求:
| 观察重点 | 需要看见什么 | 尺度选择的逻辑 | 过于局部或过于粗糙会怎样 |
|---|---|---|---|
| 全片与低倍全局 | 标本整体、组织分布、病变范围、坏死和背景 | 先保证足够大的物理视野 | 单个小图块无法说明全片覆盖情况 |
| 中倍组织结构 | 腺体、间质、浸润边界、病灶与周围组织关系 | 在结构细节与上下文之间平衡 | 只看细胞可能失去结构关系;过低分辨率又难分辨局部形态 |
| 高倍细胞细节 | 细胞与细胞核形态、局部核分裂等 | 需要较小 MPP 及足够的实际成像质量 | 光学信息不足或下采样可能掩盖细节 |
这些只是任务驱动的概念分层,不是“某一 MPP 必然可以诊断某病”的临床阈值。实际需要的尺度取决于病变、染色、扫描质量与具体研究终点。
在 AI 研究中,多尺度输入往往有明确理由:高分辨率局部图块能呈现细胞形态,较大视野能保留组织关系,低分辨率全局图可帮助筛查候选区域。但模型能读取某个尺度,不代表它已经充分观察整张切片;多尺度和全覆盖是不同维度。采样数量、组织覆盖比例、背景排除、异常区域遗漏与结果稳定性,应在后续“全切片采样策略、组织覆盖与取样代表性”专题中单独评估。
五、实践:读取层级与 MPP,而不是猜测放大倍率
下面的示例使用 OpenSlide Python。适用条件是已安装 OpenSlide 库及其 Python 绑定,且文件格式受所用版本支持;API 参考 OpenSlide Python 1.4.7 文档。[1]
# 一种安装方式;具体操作取决于系统、包管理器与本地环境
python -m pip install openslide-python openslide-bin
将以下内容保存为 inspect_wsi.py,以 python inspect_wsi.py /path/to/slide.svs 运行:
import math
import sys
import openslide
if len(sys.argv) != 2:
raise SystemExit("Usage: python inspect_wsi.py /path/to/slide.svs")
with openslide.OpenSlide(sys.argv[1]) as slide:
props = slide.properties
print("Level-0 dimensions:", slide.dimensions)
print("Vendor:", props.get(openslide.PROPERTY_NAME_VENDOR, "unknown"))
print("Objective (metadata only):",
props.get(openslide.PROPERTY_NAME_OBJECTIVE_POWER))
def read_positive_mpp(key):
raw = props.get(key)
try:
value = float(raw)
except (TypeError, ValueError):
return None
return value if math.isfinite(value) and value > 0 else None
mpp_x = read_positive_mpp(openslide.PROPERTY_NAME_MPP_X)
mpp_y = read_positive_mpp(openslide.PROPERTY_NAME_MPP_Y)
print("Level-0 MPP (x, y):", mpp_x, mpp_y, "µm/pixel")
for level, (dims, ds) in enumerate(
zip(slide.level_dimensions, slide.level_downsamples)
):
sx = mpp_x * ds if mpp_x is not None else None
sy = mpp_y * ds if mpp_y is not None else None
print(f"Level {level}: size={dims}, downsample={ds:.4g}, "
f"approx MPP=({sx}, {sy})")
# 示例:所给 (x, y) 必须是 Level 0 的坐标,size 属于 level 的像素单位。
# 只演示 API,不对任何未知切片假定病变位置或研究结果。
level = min(2, slide.level_count - 1)
region = slide.read_region((0, 0), level, (256, 256))
region.save("wsi_example_region.png")
这段脚本的预期作用是打印实际文件的层级与标定,并保存一个从 Level 0 原点取样的演示图块;它并没有保证该位置包含组织,也没有执行诊断。read_region 返回 RGBA 图像,保存时可能带透明背景。[1]
如果希望在 QuPath 中查看相同的关键标定信息,可在脚本编辑器执行以下 Groovy 片段(QuPath 官方脚本文档与像素标定 API):[8]
def server = getCurrentServer()
def cal = server.getPixelCalibration()
println "Image size: ${server.getWidth()} × ${server.getHeight()}"
println "Pixel width (µm): ${cal.getPixelWidthMicrons()}"
println "Pixel height (µm): ${cal.getPixelHeightMicrons()}"
如果尺寸返回 NaN、空值或明显不合理的数字,不能擅自以“40× = 0.25 µm/pixel”填补为已知事实。应先核查扫描仪记录、原始文件元数据及带有可信尺寸的参考物,再决定能否进行绝对尺度测量。QuPath 官方文档特别警告像素尺寸元数据可能缺失或错误,普通 PNG/JPEG 和部分 TIFF 的 DPI/打印分辨率也不能直接作为组织物理尺寸。[7, 8]
建议记录哪些尺度信息?
为便于后续复现,研究图块至少记录:源切片标识、Level 0 宽高、原始 MPP_X/MPP_Y(包含缺失状态和来源)、读取层级或下采样系数、Level 0 起点、输出像素尺寸、输出 MPP 或物理视野、重采样方法。如果做跨切片 ROI 对齐,还应保存坐标变换和所使用的图像版本。这里的建议是可追溯分析记录,不是特定期刊的强制报告清单。
六、常见误解与适用边界
- “Level 0 是最低分辨率。” 在 OpenSlide 的层级定义中恰好相反:Level 0 是最高分辨率;其他库可能使用不同层级标记,需按实际 API 解读。[1]
- “40× 就等于 0.25 MPP。” 只是常见的近似等效表述;跨设备比较以核验后的物理尺度为主,不能取代光学质量检查。[2, 5, 7]
- “统一成 512 像素的图块就统一了观察尺度。” 只有物理视野、MPP 与采样方式也一致时,才可以说取得了可比的观察尺度。
- “把粗层图像插值放大,就能看见更多细胞细节。” 插值不会恢复未采集或已丢失的信息。
- “同一金字塔层中的全部位置都有组织。” WSI 往往包含背景、空白或未扫描的范围;总像素矩阵与有效组织区域不能混为一谈。OpenSlide 可提供部分格式的非空区域边界信息,但这些字段不保证存在,仍需进行组织区域判定。[2]
- “像素坐标乘以 MPP,就得到玻片上的真实绝对位置。” 这个换算只解决局部轴向尺度;绝对玻片坐标还涉及图像原点、方向以及可能的扫描和配准变换。[5, 6]
- “越小的 MPP,总能改善模型性能。” 更密集的像素采样可能提高细节表示,也会增加计算成本;收益受光学分辨能力、任务性质、数据质量及训练分布限制,必须实际验证。
特别注意:本文把图像平面视作可用近似恒定的二维像素标定描述。对于非均匀扫描变形、复杂拼接误差、多个焦平面或空间组学跨模态配准,这一近似可能不够,应引入更完整的几何与成像模型。
关联知识
当前项目的 ARTICLE_INDEX.md 尚无已确认正式发布的文章,所以本篇不添加无法核实的文章内链。后续最值得衔接的知识点(按 KNOWLEDGE_MAP.md)包括:
- 数字切片格式、元数据与标准化交换(理解 SVS、OME-TIFF、DICOM WSI 等如何表示尺度)。
- 数字切片的区域读取、查看与导出:以 OpenSlide 和 QuPath 为例(将坐标与尺度落实为操作)。
- 切块、图像尺度与坐标映射;全切片采样策略、组织覆盖与取样代表性(研究数据如何构建)。
- 多分辨率与层级 WSI 建模(把不同组织学尺度引入模型)。
这些只是候选关联主题,不是已发布文章或链接。
参考资料
以下资料以官方标准、项目维护者文档及可查证研究为主。软件 API 与格式说明适用于所引页面的文档版本;用于科研时仍需结合本机安装版本核对。
-
OpenSlide Project. OpenSlide Python Documentation, version 1.4.7. 官方 API 文档。用于确认 Level 编号、
level_dimensions、level_downsamples、read_region坐标及参数语义。 -
OpenSlide Project. List of Known Properties. 官方属性文档。明确
openslide.mpp-x/y、openslide.objective-power及缺失/准确性限制。 -
Open Microscopy Environment. OME-TIFF specification, OME Data Model and File Formats 6.2.2. 官方规范。说明 OME-TIFF 多分辨率与子分辨率层。
-
Open Microscopy Environment. OME-XML schema documentation, OME-2016-06. 官方模式说明。核对
Pixels.PhysicalSizeX、PhysicalSizeY及其单位;这些字段为可选项。 -
DICOM Standards Committee. DICOM Whole Slide Imaging. DICOM 官方专题。说明 WSI 典型像素量、
0.25/0.5 µm/pixel的近似等效倍率和空间坐标背景。 -
DICOM Standards Committee. DICOM PS3.3 — Whole Slide Microscopy Image Module, Section C.8.12.4. 标准正文。涉及
Total Pixel Matrix与Slide Coordinate System的相关属性及几何约定。 -
QuPath Project. Images: Pixel size, resolution & magnification, QuPath 0.7.0 documentation. 官方概念文档。说明像素标定、数字缩放与物理分辨率的区别及元数据校验要求。
-
QuPath Project. Scripting overview: Accessing image metadata, QuPath documentation. 官方脚本文档。用于核对
getPixelCalibration()与getPixelWidthMicrons()、getPixelHeightMicrons()的用法。 -
DICOM Standards Committee. DICOM PS3.3 — Basic Pixel Spacing Calibration Macro, Section 10.7.1.3. 标准正文。核对
Pixel Spacing的两个数值顺序及单位。
文章状态:AI 辅助编写,尚未经人工核验;合成示例与原创图仅用于解释原理,不是实际切片、医学研究结果或临床诊断依据。