Potato 在浏览器中显示多通道荧光显微图像和全切片病理扫描图,标注者可以为已分割的细胞分类,在十亿像素切片上勾画区域,并修正从 QuPath 或 ASAP 导入的区域。Potato 免费开源,运行在你自己的服务器上,并把每位标注者的区域导出为 QuPath 可读的 GeoJSON。
判读切片是一种判断,受过训练的判读者也会给出不同的结论。在一项研究中,115 名病理医生对乳腺活检切片给出了 6,900 个诊断,其中 75.3% 与由三名病理专家组成的小组确定的参考诊断一致,非典型增生病例的一致率为 48%(Elmore et al., 2015)。因此,报告各类别细胞计数或病灶面积的研究,能从每幅图像安排多名标注者、并给出标注者之间的一致性数值中获益。Potato 运行的正是这类研究:把每幅图像或切片发给你设定人数的标注者,并把每位标注者的细胞和区域存在该标注者的名下。Potato 读取在别处生成的分割结果,例如 Cellpose 或 StarDist 的标签图像,自己不运行任何分割模型。
Potato 中的显微成像与病理任务
荧光显微图像使用 Potato 2.13 新增的 microscopy 方案,明场切片则在深度缩放查看器中使用 image_annotation 方案。
| 任务 | Potato 的做法 | 文档 |
|---|---|---|
| 为已分割的细胞分类 | 标注者在标签图像上点击一个细胞,按 1 到 9 中的某个键为它指定类别 | 显微图像 |
| 在筛选中为表型评分 | 在高内涵筛选板的某个视野(例如 plate.ome.zarr/A/1/0)上运行设置了 tools: [] 的只标细胞任务 | 显微图像 |
| 在荧光图像上勾画区域 | 用矩形、多边形和点工具标出受损组织或碎屑等区域,每个区域对应一个 z 切片和一个时间点 | 显微图像 |
| 标注全切片图像 | SVS、NDPI、MRXS 以及 openslide 可读的其他切片格式,逐个瓦片打开,可绘制框、多边形和点 | 深度缩放 |
| 修正来自 QuPath 或 ASAP 的区域 | potato import 读取 QuPath GeoJSON 或 ASAP XML,并在每张切片上把这些区域显示为预标注 | 显微图像 |
| 细胞类别的一致性 | 所有标注者的逐细胞类别写在同一个 CSV 文件中,可用于计算 Cohen's kappa 或 Fleiss' kappa | 标注者间一致性 |
一项由三名标注者完成的标记物评分研究
下面的配置让三名标注者把每个视野中的每个细胞核判为标记物阳性或标记物阴性,细胞核取自图像 OME-Zarr labels/ 组中的 nuclei 项。显微图像页面列出了所有选项。
annotation_task_name: "Marker scoring"
task_dir: .
media_directory: media
output_annotation_dir: annotation_output
data_files: [data/fields.json] # each item names one OME-Zarr image in "image"
item_properties: {id_key: id, text_key: note}
user_config:
allow_all_users: true
num_annotators_per_item: 3
annotation_schemes:
- annotation_type: microscopy
name: marker
description: "Call every nucleus in the field positive or negative for the marker."
tools: [] # cells only, no region tools
label_image: nuclei # entry of the image's labels/ group
labels:
- {name: "marker positive", color: "#f03e3e"}
- {name: "marker negative", color: "#4dabf7"}
channels:
- {name: DAPI, label: "DAPI (nuclei)"}
- {index: 1, contrast: [100, 3000]}
min_cells: 20
label_requirement: {required: true}num_annotators_per_item: 3 把每个视野发给三名标注者。设置 tools: [] 后,区域工具被隐藏,两个类别作用于细胞。第二个 channels 项为标记物通道(从 0 开始计数)设置初始对比度窗口。min_cells 与 label_requirement 同时设置时,标注者为 20 个细胞分类之前,Next 一直不可用。
导入图像与导出标注
OME-Zarr 是开放显微环境(Open Microscopy Environment)的分块、多尺度图像格式;OME-TIFF 是一种 TIFF 文件,其 OME-XML 头部给出通道和维度的名称。图像路径相对于媒体目录,Potato 根据格式选择读取器:
- OME-Zarr。 0.4 和 0.5 版本通过 zarr-python 打开,标签图像取自存储中的
labels/组。 - OME-TIFF。 文件通过 tifffile 打开,金字塔以 SubIFD 形式存储时也能打开。OME-TIFF 没有存放标签图像的标准位置,因此每个条目要另外指定一个整数标签 TIFF。
- 全切片图像。 SVS、NDPI、MRXS 以及 openslide 可读的其他格式需要
wsi可选依赖,按切片自带的金字塔逐个瓦片打开。
荧光图像的读取器需要 pip install 'potato-annotation[microscopy]'。对于荧光图像,microscopy 导出写出每个区域都带有 user_id 的 microscopy_rois.geojson、每个已分类细胞一行的 microscopy_cells.csv,并把每位标注者的类别写成 OME-Zarr 标签图像。对于切片,下面第一条命令根据一个 QuPath GeoJSON 文件和同名切片建立修正项目,第二条命令把每位标注者的区域写回 QuPath GeoJSON:
potato import -i case_01.geojson --image-dir /data/slides -o case-project
python -m potato.export -c case-project/config.yaml -f qupath_geojson -o out/qupath切片导出为每位标注者的每张切片写出一个文件,-f asap_xml 则改为写出 ASAP XML。Potato 的一致性指标不覆盖 microscopy 方案。按 instance_id、label_image 和 label_id 匹配 microscopy_cells.csv 中的行,就得到每个细胞一行、包含每位标注者类别的表格,可用于计算两名标注者的 Cohen's kappa 或更多标注者的 Fleiss' kappa。对于用 image_annotation 方案绘制的切片区域,Potato 会就框和多边形报告几何一致性。
与 QuPath、napari 及 OMERO 的分工
QuPath 是用于生物图像分析的开源软件,内置细胞和组织检测,常用于数字病理研究,适合在大量切片上检测和测量细胞。napari 是一款面向 Python 的快速、交互式多维图像查看器,可以在 NumPy 或 Zarr 数组上叠加点、多边形和分割结果并加以编辑,适合在脚本化分析中完成的标注。OMERO 是用于存储、查看、整理、分析和共享显微图像的中央存储库,适合把所有图像放在一台服务器上的成像核心平台。当多名标注者标注同样的图像时,Potato 更合适,因为 Potato 把每幅图像或切片分配给设定人数的标注者,在正式条目之前培训标注者,并把每位标注者的工作分开导出。一种做法是先在 Cellpose 或 QuPath 中分割细胞,再在 Potato 中为细胞分类,最后在 QuPath 中打开导出的 GeoJSON。
借助编程智能体搭建研究
potato-skill 1.2.0 认得 microscopy 这个方案名称,并指导 Claude Code、Codex 或 Cursor 完成研究设计这一侧的工作,例如向标注者问什么、每幅图像由几名标注者分类、培训和注意力检查,以及导出。这个技能目前还没有记录 OME-Zarr、OME-TIFF 和切片格式、方案选项,以及 microscopy 和 wsi 可选依赖。请让智能体参考显微图像和深度缩放页面,或这些页面的 Markdown 副本(例如 https://www.potatoannotator.com/docs/annotation-types/microscopy.md),以了解格式和选项。
常见问题
能否导入 MRXS 或 SVS 切片上已有的标注,让标注者修正?
能,前提是标注为 QuPath GeoJSON 或 ASAP XML 格式。potato import 把每个区域文件与同名切片配对,例如 case_01.geojson 与 case_01.mrxs,并在深度缩放查看器中把这些区域显示为预标注。
在不同缩放级别下绘制的区域,在 QuPath 中能与切片对齐吗?
能。无论标注者在什么放大倍数下绘制,Potato 都把每个区域存储为相对于切片全分辨率宽度和高度的比例值,qupath_geojson 导出再把这些比例值换算为 0 级切片像素。QuPath 的“Import objects”要求同一张切片的 0 级像素坐标,每个标签导入后成为一个 QuPath 分类。
每位标注者的细胞类别能否作为标签图像保存到 OME-Zarr 文件中?
能。microscopy 导出把每位标注者的类别写成位于 labels/<schema>__<user> 的 OME-Zarr 标签图像,其中每个细胞 id 都替换为该细胞的类别编号,每个类别带有一个 image-label 颜色。把这个目录复制到源图像的 labels/ 目录中,并把它的名称加入源图像 labels/ 组的 labels 列表。
延伸阅读
- 显微图像:所有格式、方案选项和导出文件
- 基于深度缩放的十亿像素图像标注:全切片图像与瓦片金字塔
- 你需要多少位标注者?:选择每幅图像的标注者人数
- 气隙与离线部署:在没有对外路由的网络中运行 Potato
- 本站的相邻领域:生命科学和医疗健康与临床
参考文献
- Elmore et al. (2015). Diagnostic Concordance Among Pathologists Interpreting Breast Biopsy Specimens. JAMA 313(11). https://doi.org/10.1001/jama.2015.1405