feat(review): 核对包改成医生读得懂;资料库超声一路只留给 agent 的参数

- ceus:灌注指标改为对病灶去暗区(roi_perf)和紫圈(roi_pan)两组算,roi_all 指标删除;
  D1–D4 仍要 roi_all、roi_perf 两条都过才定位(负责人 2026-10-17:医生要正常区与病灶对比看)
- build/library:tic.json 只出两组 11 个指标与 7 个槽位的视频时间;医生截图挪进
  ultrasound/keyframes/key.png,UltrasoundRoute 去掉 key_image、keyframes 多一个 key
- review:TIC参数.csv 取代 TIC结果.csv;问题清单按原因对照表写成大白话,对照表外的原因报错;
  程序原文进 snapshot/问题清单_原文.csv;说明.pdf 整份重写为合作者口吻
- 文档:结构.md、医生核对包、装配两个库、CEUS定量

任务书 04。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 10:22:15 -04:00
parent 77ee03f9a3
commit 7e7f32a13d
19 changed files with 2111 additions and 634 deletions
+66 -177
View File
@@ -1,202 +1,91 @@
# 医生核对包说明
# 核对包说明
## 一、这个包是什么
这个包是我们用程序处理你们交来的资料之后的结果,想请你们帮忙看一看:程序读到的报告和临床信息对不对,在造影视频上圈的病灶、取的关键帧、算出的 TIC 参数是否合理,问题清单里列的情况是否属实。不用填表,有意见直接告诉我们就好。
这是我们用程序处理贵方交付资料之后的结果,整理出来请您核对:程序读到的内容对不对、CEUS(超声造影)视频的自动定量做得对不对、哪些病例没能进入资料库以及原因。包里只有我们的处理结果,不需要填写或回复任何表格。
- 构建号:$build_id(资料库和标准答案库是同一次构建产出的,共用这个编号)
- CEUS 定量运行号:$ceus_run_id
- 生成日期:$generated_date
- 病例数:病例总表共 $total_cases 行,其中进入资料库 $passed_cases 例,没进入 $skipped_cases 例。
我们的系统给每个病例配了三位 AI 专家,分别只看临床信息、超声(报告和造影视频)、MR 报告,再让它们会诊。三位专家能看到的全部资料,我们叫「资料库」;包里的报告、临床信息、关键帧和 TIC 参数,就是它们看到的原样。这一版共 $total_cases 例:$passed_cases 例进了资料库,$skipped_cases 例因为资料或视频上的问题没进,原因写在问题清单里。
$ceus_note
**包里含患者资料(报告原文、临床信息、超声图像与视频、病理诊断),只在临床方与我们之间传递,请勿转发给其他人。**
**包里有患者资料(报告、临床信息、超声图像和视频、病理诊断),只在我们双方之间传,请不要转给别人。**
## 二、目录结构
## 一、包里有什么
- **医生核对包_\<构建号\>/**
- **说明.pdf**:本文件。
- **问题清单.csv**:程序在各环节观察到的现象,一行一条。
- **病例总表.csv**:这次涉及的全部病例,一例一行。
- **标准答案/**
- **化名对照.csv**:进入资料库的病例的化名、病例号、视频号。
- **诊断.csv**:进入资料库的病例在三张表里各自的病理诊断编码。
- **跳过病例.csv**:没进入资料库的病例,以及第一项没通过的检查。
- **报告复核句.csv**:报告里含「考虑」「可能」「倾向」「提示」的句子。
- **病例/\<病例号\>/**:只有进入资料库的病例才有目录,目录名是病例号(如 P001)。
- **临床信息.csv**:临床一路的字段,一行。
- **超声报告.pdf**:超声报告的描述段,就是 AI 专家看到的原文。
- **MR报告.pdf**:MR 报告的描述段,就是 AI 专家看到的原文。
- **关键图.png**:贵方截的超声关键图。
- **关键帧/**:程序从 CEUS 视频里取的关键帧,文件名是「槽位_第几秒.png」(如 B0_第1.6秒.png),秒数是视频时间、保留一位小数;没取到的槽位没有文件。
- **TIC曲线.png**:时间-强度曲线图。
- **TIC结果.csv**:曲线拟合、灌注指标、关键帧的逐项结果。
- **回放视频.mp4**:原视频逐帧叠加程序画出的病灶轮廓等。
- **说明.pdf**(这份说明)、**问题清单.csv**、**病例总表.csv**、**标准答案/**(4 张表):几张表见第六节。
- **病例/**:每个进了资料库的病例一个文件夹,名字是病例号(如 P001)。打开能看到:
- **临床信息.csv**:临床那位 AI 专家看到的临床信息,列名沿用你们临床工作簿的原列名。$codes_note
- **超声报告.pdf**、**MR报告.pdf**:报告里的描述部分,一字未改。结论(印象)部分写着诊断倾向,没有给 AI 专家,这里也就没有。
- **关键帧/**:「医生截图.png」是你们截的图;其余是程序从造影视频里取的画面,文件名如「D3_第12.4秒.png」,秒数是视频里的时间;没取到的时刻没有图。
- **TIC曲线.png**:时间-强度曲线图,见第四节。
- **TIC参数.csv**:11 个灌注参数,胰腺实质和病灶各一组,见第五节。
- **回放视频.mp4**:原视频上叠加了程序画的轮廓。
所有图片和视频都没有压缩、缩放或重新编码,与我们处理时用的文件逐字节相同。关键图和关键帧是写进资料库时那一份:程序重新保存时去掉了文件里附带的文字信息(如拍摄参数),像素没有改变。
图片和视频都是原样,没有压缩或缩放。
## 三、表格每一列的意思
```{=openxml}
<w:p><w:pPr><w:spacing w:before="240"/></w:pPr><w:r><w:rPr><w:sz w:val="15"/><w:color w:val="777777"/></w:rPr><w:t xml:space="preserve">供我们追溯用:构建号 $build_id · 视频处理运行号 $ceus_run_id · 生成于 $generated_date</w:t></w:r></w:p>
```
表格都是 CSV 文件,可以直接用 Excel 打开。空着的格子表示没有这项值。
## 二、看一个病例的建议顺序
**病例总表.csv**(这次交付涉及的全部病例,按病例号排序)
1. **先读超声报告和 MR 报告**,心里有个病灶的样子。
2. **看关键帧文件夹里的医生截图**,确认是哪个病灶。
3. **看回放视频。** 绿框和紫圈是你们在视频上画的:绿框圈病灶,紫圈圈一块正常的胰腺实质。黄色线(造影那一屏)和绿色线(灰阶那一屏)是程序画的病灶轮廓;蓝色线圈出的是程序认为一直不进造影剂的部分(如囊液)。病灶轮廓内去掉蓝色部分,剩下的一般是囊壁、分隔、实性成分这些会进造影剂的部分,后面叫「病灶(去暗区)」。青色小圆圈是程序在病灶旁边挑的一小块背景,用来检查整段视频里机器的整体亮度(增益)有没有变化。请看轮廓是否一直跟着病灶、蓝色部分是否确实不增强。
4. **再看 TIC 曲线图**(第四节)**和关键帧**(第三节,每张是不是对应的时刻),**最后看 TIC 参数**(第五节)。
| 列 | 意思 |
| --- | --- |
| 病例号 | 贵方的病例编号,如 P001。表里认不出编号的行写成「文件 第 N 行」或「病例目录 名字」 |
| 视频号 | CEUS 视频编号,按「U + 三位病例号」写,如 U001。没进入资料库的病例也这样写;其中在核对视频编号那项检查(C05)之前就被跳过的,交付里实际的视频编号没有核对过。认不出编号的行空着 |
| 化名 | 资料库里代替病例号的 4 位随机字母数字(见第七节);没进入资料库的空着 |
| 是否进入资料库 | 是 / 否 |
| 没进的原因 | 第一项没通过的检查编号和说明(见第九节);进入的空着 |
| CEUS 定量是否成功 | 这段视频在 CEUS 定量的失败记录里写「否」;定量运行里有这段视频的结果写「是」(没进入资料库的病例也可能是「是」,它是因为别的检查被跳过的);两者都没有(这段视频没做定量)或这次没装 CEUS 结果时空着 |
| CEUS 失败在第几步 | CEUS 定量失败在第 1–9 步中的哪一步(见第四节);没失败的空着 |
| B0、D1、D2、D3、D4、F1、F2 | 7 个关键帧(见第五节):取到的写它在视频里的时间(秒);没取到写「未取到」;CEUS 失败或没装 CEUS 结果时空着 |
## 三、7 个关键帧是什么时刻
**问题清单.csv**(按病例号排序,一个病例可以有多行)
- **B0**:增强之前,病灶还没变亮。
- **D1**:造影剂到达,病灶开始变亮。
- **D2**:变亮最快的时刻。
- **D3**:病灶最亮的时刻(峰值)。
- **D4**:变暗最快的时刻(廓清最快)。
- **F1**:推注后第 $f1_s 秒。
- **F2**:推注后第 $f2_s 秒;前后 $f2_tol_s 秒内没有能用的画面就不取。
| 列 | 意思 |
| --- | --- |
| 病例号 | 同上 |
| 视频号 | 同上 |
| 环节 | 现象出在处理流程的哪一环,取值见第四节末尾的表 |
| 问题 | 程序观察到的现象,照程序记录的原文写,不含推测 |
B0 和 D1–D4 的找法:程序用一条平滑曲线分别去贴合「病灶整体」和「病灶(去暗区)」两条亮度曲线。两条都贴合上,才在病灶(去暗区)那条平滑曲线上定出这 5 个时刻,各取离它最近的一帧;其中 D1–D4 按时间先后取,后一个必须比前一个晚。两条里有一条没贴合上,这 5 个关键帧就都没有。
**标准答案/化名对照.csv**:化名、病例号、视频号。这里的病例号是三位数字(如 001),对应病例目录名 P001。
F1、F2 按超声表里的「推注开始时间s」换算。这个数我们理解为「视频第 0 秒时已经推注了多少秒」,所以推注后第 $f1_s 秒就在视频第 $f1_s − 这个数 秒。**如果你们的意思不是这样,请一定告诉我们**,否则 F1、F2 取的都是错的时刻。
**标准答案/诊断.csv**:化名、病例号、临床表诊断编码、超声表诊断编码、MR表诊断编码、诊断名。三张表的诊断编码分别取自临床工作簿、超声报告工作簿、MR 报告工作簿,进入资料库的病例三者一致。编码含义见第八节。诊断名一列在编码没有解码时空着。
<!-- 推注时间的含义出自负责人 2026-10-16(design 0002 决定 5)。 -->
**标准答案/跳过病例.csv**:病例、检查编号、检查说明、文件、列、涉及值。病例是三位数字病例号,或认不出编号时的「文件 第 N 行」。文件和列是这项检查涉及的交付文件和列名,多个时用分号隔开。涉及值是对不上的原始取值,以程序记录的格式写出(带引号和括号)。
「重复帧」是病灶那块画面和前一帧几乎一模一样的帧:视频录制时同一张画面被存了好几遍,它不是新的时刻,所以不用。「能用的画面」指不是重复帧、而且这一帧里程序认得出病灶区域的帧。
**标准答案/报告复核句.csv**:化名、路(超声或 MR)、命中的词、所在句子。进入资料库的病例中,报告描述段里含「考虑」「可能」「倾向」「提示」的句子,一句一行。这些词可能带出诊断倾向,所以单独列出;这些句子仍留在资料库里。
## 四、TIC 曲线图上的英文
**病例/\<病例号\>/临床信息.csv**:一行,列名是交付的临床工作簿原列名(性别、年龄、5 个症状、5 项既往史、5 项化验的数值与是否异常)。病例号和诊断两列不在这里。
- **TIC: Lognormal fit**:图的标题,时间-强度曲线和贴合它的平滑曲线。
- **Time (s)**、**Grayscale intensity**:横轴是视频时间(秒),纵轴是画面亮度(灰度)。
- **roi_all raw**:蓝色小点,病灶整体(轮廓以内全部)每一帧的亮度。
- **roi_perf (dark removed) raw**:橙色小点,病灶(去暗区)每一帧的亮度。
- **roi_pan reference raw**:紫色小点,紫圈(胰腺实质)每一帧的亮度。
- **名字后面是 Lognormal fit 的粗实线**:程序贴合出的平滑曲线,只画贴合上的。
- **roi_pan reference Lognormal fit [QC rejected]**:紫色虚线,紫圈曲线没贴合上,仍画出来供参考;这时 TIC 参数里胰腺实质那一组是空的。
- **D1 model … D4 model**:竖虚线,平滑曲线上 D1–D4 的时刻。
- **竖线名字后面带方括号的**,表示这个时刻没取到关键帧:[no_frame_in_window] 这个时刻附近没有能用的画面;[no_ordered_frame] 附近能用的画面都不晚于前一个关键帧取的那一帧;[not_covered] 这个时刻不在视频里;[anchor_undefined] 两条病灶曲线没有都贴合上。
- **No plottable TIC data**:没有能画的数据。
**病例/\<病例号\>/TIC结果.csv**:两列「项目」「值」。项目名是中文加程序里的字段名(括号里),值里的 true 表示是、false 表示否。各项的意思见第六节。
## 五、TIC 参数怎么看
## 四、我们的处理流程
TIC参数.csv 每行一个参数,两组数并排:**胰腺实质(紫圈)**和**病灶(去暗区)**,用意是让病灶和正常胰腺对着看。下面说的「开始变亮」「退回增强前水平」都是按切线定的:在变亮最快那一点(D2)画切线,与增强前水平的交点算开始变亮;在变暗最快那一点(D4)画切线,与增强前水平的交点算退回增强前水平。
处理分三段:先读交付资料并逐例检查,再对 CEUS 视频做定量,最后把通过的病例装进资料库。
- **PE 峰值增强**:最亮时比增强前亮了多少。
- **TTP 达峰时间**:最亮的时刻。
- **WiR 最大洗入斜率**:变亮最快时每秒亮多少。
- **RT 上升时间**:从开始变亮到最亮用了多久。
- **WiAUC 洗入曲线下面积**:从开始变亮到最亮这一段曲线下的面积,反映这段时间进来的造影剂多少。
- **WiPI 洗入灌注指数**:WiAUC 除以 RT,即变亮这一段的平均增强程度。
- **WoR 最大洗出斜率**:变暗最快时每秒暗多少,是负数。
- **FT 下降时间**:从最亮到退回增强前水平用了多久。
- **WoAUC 洗出曲线下面积**:从最亮到退回增强前水平这一段的面积。
- **WiWoAUC 洗入洗出曲线下面积**:上面两段面积加起来。
- **mTTl 平均渡越时间**:从开始变亮到退回增强前水平这一段里,造影剂平均停留了多久,从开始变亮算起;l 表示只在这一段(local)里算。
**第一段:读交付资料、逐例检查。** 程序读临床工作簿、超声报告工作簿、MR 报告工作簿和每例的病例目录,逐例做一串检查(编号能认出、三张表都有这一例、病例目录文件齐全、取值合规、三张表的诊断年龄性别一致、报告描述里没有结论段标题、没有亚型名、没有性别年龄等)。一例遇到第一项没通过的检查就整例跳过(见第九节)。关键图要能原样重新保存(检查 C14)。
看这些数时请注意三点。一是数值在视频画面的亮度(灰度,0–255)上算,不是超声机内部的回声强度,单看一个数意义不大,主要看两组的对比。二是时间从视频第一帧算起,不是从推注算起。三是参数都从贴合出的平滑曲线上算:某一组曲线没贴合上,这一组整列空着,表的最后一行写了原因;个别格子空着,是视频录得不够长(如还没退回增强前水平就结束了),这一项算不出来,就空着,不去估。
**第二段:CEUS 定量。** 每段 CEUS 视频依次做下面 9 步。第 1、2、4 步遇到视频不满足前提时,这一例整例失败、记下失败在哪一步和原因,接着处理下一例;第 7、8 步做不出来不算整例失败,只是相应结果空缺。
## 六、几张表
1. **解码与分屏、两半配准。** 读视频;超声机录造影时屏幕分左右两半,一半是造影画面,一半是普通灰阶画面,程序找出分界线,再估出两半画面之间的位置偏移。每段视频的偏移都经过我们人工目视核对,没通过核对的病例在这一步失败。视频读不出、找不到分界线、两半对不齐,也在这一步失败。
2. **找绿框、选提示帧。** 在两半上找贵方画的绿框:恰好一半有绿框,那一半就是造影画面;两半都有或都没有,这一例在这一步失败。然后挑出绿框位置或形状有明显变化的几帧作为「提示帧」,把绿框换算到灰阶那一半上。
3. **分割。** 用 MedSAM2 分割模型在灰阶那一半上,从提示帧的绿框出发,逐帧划出病灶范围。
4. **病灶轮廓。** 把逐帧的分割结果变成平滑的轮廓,与绿框的位置和形状融合,再换算回造影那一半。分割结果一帧都没有可用轮廓时,这一例在这一步失败。
5. **暗区。** 在病灶轮廓内找出一直发黑、不进造影剂的部分(如囊液)。
6. **TIC 采样。** TIC(时间-强度曲线)是某个区域的平均亮度随时间的变化。程序在造影那一半上逐帧取四条曲线:病灶整体(轮廓内,去掉绿框和紫圈的颜色)、病灶去暗区(再去掉暗区)、紫圈(贵方画的紫色圈内部,一块正常胰腺作对照)、背景圆(程序在病灶附近自动挑的一小块背景,只用来看整机亮度有没有漂移)。紫圈只有在足够多的帧里都认出来,紫圈曲线才算可用。
7. **曲线拟合。** 用 Lognormal(对数正态)曲线拟合每条 TIC,拟合要通过一组质量检查(下称质量门)才算成功。没通过时记下原因码,含义见第六节。
8. **关键帧。** 定位 7 个关键帧,见第五节。
9. **灌注指标。** 在病灶两条曲线拟合成功时,从拟合曲线算 11 项灌注指标(口径仿照商用造影定量软件 VueBOX),见第六节。
**第三段:装进资料库。** CEUS 定量失败或没有结果的病例整例跳过(检查 C15);关键帧也要能原样重新保存(检查 C14)。通过的病例取化名,把临床、超声、MR 三路资料分开存放,每一路的 AI 专家只看得到自己那一路。
问题清单里「环节」一列的取值:
| 环节 | 对应哪一步 | 问题的写法 |
| --- | --- | --- |
| 装配资料库 | 第一段的检查和第三段的 C14、C15 | 检查编号、检查说明、涉及的文件、列和值,照跳过病例表原样写 |
| CEUS 第 N 步 | 第二段第 N 步整例失败 | 「第 N 步失败:」加程序记录的原因 |
| TIC 拟合 | 第二段第 7 步,病灶整体或病灶去暗区曲线没通过质量门 | 「病灶整体曲线未完成拟合」或「病灶去暗区曲线未完成拟合」,括号里是原因码 |
| 关键帧 | 第二段第 8 步,某个关键帧没取到 | 「槽位 未取到:」加程序记录的原因 |
| 紫圈 | 第二段第 6 步,紫圈曲线不可用 | 「紫圈曲线不可用」 |
一个 CEUS 失败的病例会有一行「CEUS 第 N 步」,一般还同时有一行「装配资料库」(C15),两行来自不同的记录文件;但如果它在 C15 之前就因别的检查被跳过,「装配资料库」那一行写的是那项检查。
## 五、7 个关键帧
| 槽位 | 代表的时刻 | 怎么取 |
| --- | --- | --- |
| B0 | 病灶刚开始变亮之前 | 病灶去暗区曲线的拟合曲线上的到达时刻,再往前退一点,在到达之前的基线段里取帧 |
| D1 | 病灶开始变亮(造影剂到达) | 拟合曲线上的到达时刻 |
| D2 | 变亮最快的时刻(洗入拐点) | 拟合曲线 |
| D3 | 最亮的时刻(峰值) | 拟合曲线 |
| D4 | 变暗最快的时刻(洗出拐点) | 拟合曲线 |
| F1 | 推注后第 $f1_s 秒 | 视频时间 = 推注后时刻 − X |
| F2 | 推注后第 $f2_s 秒 | 视频时间 = 推注后时刻 − X |
B0、D1–D4 都来自病灶去暗区曲线的拟合曲线,在各自时刻附近的允许范围内找最近的可用帧,并保持先后顺序(D2 的帧不会早于 D1 的帧)。F1、F2 按推注时间取:X 是超声报告工作簿的「推注开始时间s」,意思是视频第 0 秒时已经推注了 X 秒,所以推注后第 T 秒在视频第 T − X 秒。F1 取离这个时刻最近的帧;F2 只在这个时刻前后 $f2_tol_s 秒内取。
「未取到」时,问题清单里写的是程序记录的原因原文,有以下几种:
- 「病灶两条曲线(roi_all、roi_perf)的 Lognormal 拟合没有都过质量门」:病灶整体、病灶去暗区两条曲线没有都拟合成功,B0、D1–D4 都不取。
- 「roi_perf 曲线的 Lognormal 拟合没过质量门(原因码)」:病灶去暗区曲线拟合没成功,B0、D1–D4 都不取。
- 「拟合曲线升不过到达门槛,没有到达时刻」(B0)、「拟合曲线上没有 D1 时刻(升不过到达门槛)」之类:拟合曲线上升的幅度不够,定不出到达时刻。
- 「视频开头没有观测到稳定的增强前基线(基线是估计的),B0 不定义」:视频一开始病灶就已经在变亮,没有变亮之前的那一段,所以没有 B0。
- 「峰后观测不够长,或洗出拐点落在观测范围之外,拟合曲线上没有 D4」:峰值之后录得不够长,拟合曲线上找不到洗出拐点。
- 「某时刻 … 秒落在视频有效帧范围 … 之外」:算出的时刻早于视频第一帧或晚于最后一帧。
- 「推注后第 T 秒在视频第 … 秒(推注时间 X=… 秒),落在 … 之外」(F1、F2):同上,按推注时间换算出的时刻不在视频里。
- 「… 容差窗口 … 内没有可用帧」:时刻附近的允许范围里没有可用的帧(重复帧不算可用)。
- 「… 容差窗口 … 内的候选帧都被时间更早的槽位占用,无法保持先后顺序」:附近的帧已经被前一个关键帧用掉了。
- 「视频第 … 秒 ±… 秒内没有不重复的帧」(F1、F2):同上,附近只有重复帧。
- 「没有推注时间,推注后时刻换算不到视频时间」(F1、F2):没有推注时间。
## 六、TIC 曲线图和 TIC 结果怎么看
**TIC曲线.png**:横轴是视频时间(秒),纵轴是灰度亮度。图上的英文标注:
| 图上的英文 | 中文意思 |
| --- | --- |
| TIC: Lognormal fit | 图标题:时间-强度曲线及其对数正态拟合 |
| Time (s) | 横轴:视频时间(秒) |
| Grayscale intensity | 纵轴:灰度亮度 |
| roi_all raw | 病灶整体曲线的逐帧原始值(蓝色小点) |
| roi_perf (dark removed) raw | 病灶去暗区曲线的逐帧原始值(橙色小点) |
| roi_pan reference raw | 紫圈曲线(正常胰腺对照)的逐帧原始值(紫色小点) |
| … Lognormal fit | 对应曲线的拟合曲线(粗实线),只画拟合成功的 |
| roi_pan reference Lognormal fit [QC rejected] | 紫圈曲线没通过质量门的拟合(紫色虚线),仍画出来供参考;病灶曲线拟合没通过时不画 |
| D1 model、D2 model、D3 model、D4 model | 竖虚线:拟合曲线上 D1–D4 的时刻(见第五节) |
| [no_frame_in_window] | 跟在竖线标签后面:这个时刻附近的允许范围里没有可用帧,关键帧没取到 |
| [no_ordered_frame] | 附近的帧都被时间更早的关键帧占用,关键帧没取到 |
| [not_covered] | 这个时刻落在视频有效帧范围之外,关键帧没取到 |
| [anchor_undefined] | 病灶两条曲线没有都拟合成功,这个时刻不用来取关键帧 |
| No plottable TIC data | 没有能画的曲线数据 |
背景圆曲线不画在图上。竖线没有标状态的,表示这个关键帧取到了。
**TIC结果.csv 的各项**:
- 四条曲线(病灶整体 roi_all、病灶去暗区 roi_perf、紫圈 roi_pan、背景圆 background_circle)各自「拟合成功」(success)和「拟合优度 R²」(r2,越接近 1 拟合越贴合;算不出时空着)。
- 病灶两条曲线的灌注指标(perfusion_metrics;拟合没成功时整组空着)。观测时间不够算不出的单项空着,不外推。
- 信号域 signal_domain = db_display:在视频显示的灰度上算,不是换算后的回声功率;时间零点 time_origin = video_start:时间从视频开头算起;面积所用曲线 area_curve = fitted_minus_baseline:面积用拟合曲线减去基线。
- PE:峰值增强(峰值减基线);TTP:达峰时间(秒);WiR:最大洗入斜率;WiAUC:洗入段曲线下面积(TI 到 TTP);RT:上升时间(TTP − TI);WiPI:洗入灌注指数(WiAUC / RT);WoR:最大洗出斜率;WoAUC:洗出段曲线下面积(TTP 到 TO);FT:下降时间(TO − TTP);WiWoAUC:洗入洗出总面积;mTTl:平均渡越时间(mTT − TI)。
- 辅助时刻:TI 是洗入切线与基线的交点,TO 是洗出切线与基线的交点,mTT 是 TI 到 TO 之间的平均渡越时刻(都是视频时间,秒)。
- 紫圈曲线可用(pan_curve_usable):紫圈在足够多的帧里认出来时为 true。
- 7 个关键帧各自「取到」(located)、「视频时间」(video_time_s,秒)、「未取到的原因」(reason)。
**拟合没通过质量门的原因码**(问题清单「TIC 拟合」一行括号里的英文):
| 原因码 | 意思 |
| --- | --- |
| insufficient_valid_samples | 可用的帧(亮度能取到、不是重复帧)太少 |
| candidate_grid_unavailable | 可用帧的时间点无法排成拟合用的等间隔时间轴 |
| credible_peak_not_found | 平滑后的曲线上找不到够高、够突出的峰 |
| candidate_arrival_not_found | 峰之前找不到亮度持续越过到达门槛的时刻 |
| insufficient_bolus_samples | 第一次团注(造影剂第一次通过)那一段里可用帧太少 |
| long_gap_in_wash_in | 峰之前的上升段里有一段太长的时间缺口(中间缺帧) |
| arrival_bounds_invalid | 按观测范围给到达时刻、峰时刻划的允许区间不成立(区间为空) |
| optimizer_failed | 拟合计算从各组起始值出发都没有算出结果 |
| parameter_on_boundary | 拟合出的曲线参数贴在允许范围的边上 |
| model_peak_on_boundary | 拟合曲线的峰落在拟合时间段的两端附近 |
| fit_quality_failed | 拟合曲线与原始数据贴合得不够(误差太大,且拟合优度和残差都没达标) |
**回放视频.mp4**:原视频逐帧叠加程序画的线:造影那一半的病灶轮廓是黄色,灰阶那一半的病灶轮廓是绿色,造影那一半的暗区轮廓是蓝色(灰阶那一半不画暗区),背景圆是青色圆圈。贵方画的绿框和紫圈是视频原有的。
## 七、化名与报告
**化名**:资料库里每例用一个 4 位随机字母数字代替病例号。交付文件名里带着病例号,而表格的行序可能与诊断分组有关;用随机化名并按化名排序,AI 专家就无法从编号或顺序猜出诊断。化名与病例号的对照只在标准答案里。
**报告只放描述段**:资料库里只放超声和 MR 报告的「所见」描述,不放「印象 / 结论」段,因为结论段写着医生的诊断倾向,AI 专家看到它就等于看到了答案。程序检查每份报告的描述文字里有没有结论段标题(如「超声提示:」「印象:」「诊断:」,检查 C11),有就整例跳过,不进资料库。超声报告.pdf 和 MR报告.pdf 就是资料库里 AI 专家看到的那段文字,一字未改;PDF 第一行的标题是我们加的。
## 八、编码列
诊断编码:1 IPMN(导管内乳头状黏液性肿瘤),2 SPN(实性假乳头状肿瘤),3 MCN(黏液性囊性肿瘤),4 SCN(浆液性囊性肿瘤)。出自交付的超声、MR 报告工作簿的诊断列表头。
$codes_note
## 九、跳过病例
一例只要有一项检查没通过,就整例跳过,不进资料库:缺了某一路资料或资料前后对不上,这一例就无法公平地交给三位 AI 专家会诊。跳过病例表里每例只记第一项没通过的检查:遇到它就跳过整例,后面的检查没有做过,所以表里没写的检查不代表没有问题。
- **问题清单.csv**:一个问题一行:病例号、视频号(你们交付包里视频的编号,如 U001)、环节(资料核对、造影视频处理、TIC 曲线、关键帧、紫圈)和一句话说明;同一个原因引起的几件事合成一行。「资料核对」是资料本身的问题,你们改好重交就行;其余是程序处理视频和曲线时遇到的,想请你们看看那段视频本身有没有异常,告诉我们就好。
- **病例总表.csv**:全部病例一例一行:进没进资料库、没进的原因、造影视频处理成功没有(没成功时写停在第几步)、7 个关键帧各在视频第几秒。
- **标准答案/化名对照.csv**:资料库里代替病例号的化名与病例号的对照。
- **标准答案/诊断.csv**:三张表的病理诊断编码(1 IPMN,2 SPN,3 MCN,4 SCN)。
- **标准答案/跳过病例.csv**:内容和问题清单里没进资料库的那几条一样,是程序原文版本,一般不用看。
- **标准答案/报告复核句.csv**:报告描述里含「考虑」「可能」「倾向」「提示」的句子。这些句子目前仍留在给 AI 专家的报告里,想请你们看看它们算不算带出了诊断倾向、该不该删掉。