# 病例标注操作说明

2026-10-08。规则先写定，再开始看图。以下内容在你标注期间不要修改。

标注者：本项目用户本人。按 D-237（用户裁定：人工审核一律按专家级登记）与 D-036（人类标注者不区分资历等级，统一高置信度），本批判读登记为专家级人工审核，证据等级用 D-232 原定的 `independent_reference`：判读只依据 H&E 形态，不读取任何 RNA 读数或模型输出。

方案原要求试点全部双阅（两人独立判读、记录分歧、裁定）。目前只有一位判读者，因此本批标注是单阅。这一点会写进标签版本，任何结论都必须带上这个限制。

## 一、你要做的事

在这 10 张切片的病理图上，把"哪里像淋巴结构"画出来，并记录你看过哪些区域。

这两件事都要做。只有前者时，我们只能说"画了哪些地方像"，不能说"其他地方确实没有"。

## 二、四类标注

每一块你圈出的区域必须归到下面恰好一类。

| 类别 | 含义 |
| --- | --- |
| `TLS` | 异位淋巴结构：非淋巴组织里成形的淋巴聚集，有可辨的组织化 |
| `lymphoid_aggregate` | 淋巴细胞聚集，但没有可辨组织化或生发中心 |
| `non_TLS` | 看过但明确不是：弥漫炎症、坏死、伪影、肿瘤细胞团 |
| `unresolved` | 拿不准 |

`lymphoid_aggregate` 不要自动升级成 `TLS`。两者都要画，但不要合并。

成熟度（有无生发中心）作为单独字段记录，不影响上面的分类。没看到生发中心不等于确认不成熟。

## 三、什么算 TLS

**必要条件**，三条都要满足：

1. 位置在非淋巴组织里。
2. 细胞密度明显高于周围，有边界或成团。
3. 看得见组织化。以下至少一条：B 细胞区和 T 细胞区可分、滤泡样结构、生发中心、被膜或边缘、被膜高内皮微静脉样的血管。

**不算 TLS 的常见情形**，遇到就归到 `non_TLS` 或 `lymphoid_aggregate`：

- **肠道原有的淋巴组织。** 这是本次最大的陷阱。肠壁固有层里的孤立淋巴滤泡、集合淋巴结（Peyer patch）、以及肠系膜引流淋巴结被切进切片，都不是异位 TLS。判断依据是位置和结构形态，不是密度。你圈之前先想一下这一块是不是本来就有。
- **弥漫浸润。** 大量淋巴细胞散在或弥漫分布，没有成团、没有分区。
- 肿瘤细胞团。细胞大、异型、核深染、成巢或成腺腔，与淋巴细胞形态不同。
- **伪影。** 折叠、撕裂、刀痕、压榨（细胞拉长变暗）、电刀灼伤、扫描失焦、组织边缘、切片厚薄不均、悬浮碎屑。
- 血管与血管周围的淋巴细胞环；神经节；腺体结构被淋巴细胞包绕。
- 肝里沿胆管的淋巴细胞聚集，需单独判断是否成结构；若不成形，归 `non_TLS` 或 `unresolved`。

**拿不准就写 `unresolved`。** 猜错比留空更糟。

## 四、两遍流程

### 第一遍：覆盖

低倍缩放看全片，把组织区域圈成"已检查"。目的是让我们知道阴性结论覆盖了哪里。

- 圈组织实体，不要圈背景。
- 组织中间有大空洞（脂肪、腔隙）时，可以分几块圈，不用凑成一个。
- 折叠、碎屑、污渍这些非组织区单独标成"已检查-非组织"，不要并进组织覆盖里。

### 第二遍：实例

在已检查区域内，找淋巴聚集，逐个圈出。

- 每块独立画出，不要合并成一整片。
- 一个实例一张多边形。
- 边缘尽量贴紧实际细胞范围，不要画得比实际大一圈。

## 五、怎么用工具

```bash
cd /home/huyudi/013_spatial
DISPLAY=:0 /opt/anaconda3/bin/python3 ../viewer/index.html（离线版）
```

如果显示号不对，先试 `:1`、`:2`。桌面在 tty1。

操作：

| 操作 | 键 |
| --- | --- |
| 选类别 | `1` TLS，`2` 聚集，`3` 非，`4` 不确定，`5` 已检查覆盖 |
| 画多边形 | 左键逐点点击，`Enter` 闭合 |
| 取消当前多边形 | `Esc` |
| 撤销最后一个实例 | `u` |
| 平移 | 按住空格拖动，或按住右键拖动 |
| 缩放 | 滚轮 |
| 保存 | `Ctrl+S` |
| 下一张 / 上一张 | `n` / `p` |
| 查看说明 | `h` |

文件自动存在 `infra/tls_four_cancer_labels_20261008/annotation/incoming/<切片>/`，每 30 秒和每次类别切换时自动存一次。

## 六、输出格式

两张文件：

- `instances.geojson`：你画的每一个实例，带类别
- `reviewed_regions.geojson`：你检查过的区域

坐标是原始全分辨率图像的像素坐标，由工具自动换算，你不用管。

每条记录带：`structure_class`、`confidence`（high/medium/low）、`maturity`（GC_present/GC_not_identified/unknown）、`note`（可选，你自己的判断依据）。

## 七、不要做的事

- 不要打开 `infra/tls_fourcancer_20261006/` 里的任何文件。那里面是分子分数和热图，看了会污染判读。这批切片从未跑过任何自动 TLS 检测，所以不存在自动候选答案；但你自己的判读必须独立于我们已经讨论过的那些分数。
- 不要按 Visium 点的位置画。每个点的直径是 55 微米（高清切片不是），我们之后自己映射。你画的是组织结构，不是点。
- 不要为了"多标几个"而放宽标准，也不要为了"干净"而漏掉小的聚集。小的、拿不准的照样画，标 `unresolved` 或 `confidence=low`。
- 不要修改本文件或任何决策文档。发现问题告诉我，我来改并记录。

## 八、量级与建议顺序

10 张切片共约 280 平方毫米组织需要浏览。单张从 9.6 到 66.9 平方毫米不等。

建议顺序：

| 顺序 | 切片 | 器官 | 组织面积 | 为什么先做 |
| --- | --- | --- | --- | --- |
| 1 | NCBI642 | 肝 | 17.3 mm² | 最小且有可数病人，用来验证工具和格式 |
| 2 | NCBI643 | 肝 | 20.1 mm² | 同研究第二位病人 |
| 3 | ZEN44 | 肠 | 9.6 mm² | 全场最小，验证肠道的原发淋巴组织陷阱 |
| 4 | ZEN39 | 肠 | 12.7 mm² | |
| 5–8 | ZEN46、ZEN48、TENX68、NCBI776 | 肠、乳腺 | 17.9–66.9 mm² | 面积更大 |
| 9–10 | TENX62、TENX72 | 肺 | 32.8–53.8 mm² | 肺最后 |

建议先只做第 1 张，确认格式没问题再继续。

## 九、这套标注的天花板

必须清楚知道，以免后面高估它：

- **单阅，不是双阅。** 方案要求试点每张由两人独立判读并记录分歧。现在只有你一位，因此没有分歧记录与裁定。若以后补第二读者，须重做并两版并存，现有 v1 不得追认为双阅。
- **判读者同时是本项目分析的设计者**，不是外部第三方读者。这批片子从未跑过任何自动 TLS 检测，所以不存在被算法答案影响的可能，但这一点如实登记。
- **10 张里 4 张身份未知**（肺 2、乳腺 2）。它们只能验证流程，不能进入按病人汇总的结论。
- **没有外部锁定测试集**。留出的两个肠癌标本只有两个病人，不构成验证集。
- 独立病人只有 6 位。这批标注能回答"流程能否跑通、阳性实例长什么样"，**不能**回答"这个方法换人群换癌种是否成立"。

## 十、做完之后

我会跑校验脚本检查格式、坐标是否落在图像内、覆盖是否完整，然后映射到测量点。映射规则：完全落在实例内的点为阳性，完全落在已检查区内且不碰任何实例的点为阴性，其余为未知。未知不补成阴性。

标注实例数与阴性区域的对照，只用于评价自动候选方法的可信度，不用于证明任何生物学结论。