# TLS 标注包（离线）

日期 2026-10-08。四癌 TLS 试点 10 张切片的判读工具与数据。规则先于判读写定，见 `docs/`。

## 打开

**Windows**：双击 `run.bat`
**Ubuntu / macOS**：双击 `run.sh`，或在终端里 `./run.sh`

浏览器会自动打开。没有 Python 也能用：直接双击 `viewer/index.html`，功能完全一样，只是浏览器本地存储可能不可用——那种情况下请务必用「导出全部」保存。

## 操作

| 操作 | 键 |
| --- | --- |
| 选类别 | `1` 淋巴结构，`2` 淋巴聚集，`3` 明确不是，`4` 拿不准，`5` 已检查 |
| 画点 | 左键 |
| 闭合多边形 | `Enter` 或双击 |
| 取消 / 退一点 | `Esc` / `Backspace` |
| 撤销 | `u` |
| 平移 | 右键或中键拖动，或切到「平移」模式后左键拖动 |
| 缩放 | 滚轮（`+` `-` 也可），`f` 回到全片 |
| 换切片 | `n` 下一张，`p` 上一张 |

进度每 30 秒自动存在浏览器本地；每次改类别、闭合、撤销时也会存。关掉再开能接着画。

## 保存与交回

- **导出全部**（推荐）：得到一个 `annotations.json`，把它发回给我就行。我会拆成每片的 GeoJSON 并做校验。
- **导出本片**：得到该片两个 GeoJSON 文件，用于自查。

换机器继续画时，用「导入」把 `annotations.json` 读回去。

## 判读标准

`docs/ANNOTATION_GUIDE.md` 是完整规则，标注期间不要改。其中最容易出错的一条：**肠道固有层的孤立淋巴滤泡、集合淋巴结不是异位淋巴结构**，不要因为那里有淋巴细胞就算阳性。

每张画完后过一遍 `docs/CHECKLIST.md`。

## 分辨率

影像已切成金字塔块，最高一层约 **1.1 µm/px**。原生分辨率是 0.274–0.548 µm/px，即包内影像比原生粗 2 倍。

用于判断聚集是否成形、密度高低、细胞形态是够的（一个淋巴细胞核约 7 µm，合 6–7 像素）。若要判生发中心内部的精细结构（套状区、滤泡树突网），这一层偏粗，需要我按原生分辨率重新打包（约 1.4 GB）。

顶栏实时显示当前载入层、光标处的 µm/px 与比例尺，请以它为准。

## 不要做的事

- 不要打开任何分子分数或热图文件。本包内没有这类文件，也不要去别处找。这批切片从未跑过自动检测，判读必须独立于分子结果。
- 不要按 Visium 点位画。点直径 55 µm，淋巴结构是 100–500 µm 量级。画组织结构，点位由我映射。
- 不要为了多标而放宽标准，也不要为了干净而漏掉小聚集。小的、拿不准的照样画，标 `4 拿不准` 或把置信度改成 `low`。

## 这批标注的边界

只有一位判读者，且不是外部第三方读者，因此是**单阅**，标签里记 `double_read=false`。10 张里 4 张身份未知。独立病人 6 位，没有外部锁定测试集。

它能回答：流程是否跑得通、阳性实例长什么样、阴性覆盖到哪、自动候选的假阳性大致什么水平。
它不能回答：换人群换癌种是否成立。

## 目录

```
run.sh / run.bat        启动脚本
viewer/                 标注工具（纯静态，无依赖）
data/index.json         切片清单
data/<切片>/meta.json   尺寸、比例尺、层级
data/<切片>/<层>/<列>_<行>.jpg   影像块
data/<切片>/tissue.geojson       组织轮廓，仅用于计算覆盖率
docs/                   判读规则与自查表
```