Files
CADx-4/src/cadx/review/readme_template.md
T
iomgaa 9d82210f31 feat(review): 跳过病例表只进快照;规模表 review 行注明已接受
负责人 2026-10-17:跳过病例.csv 不放进医生目录,只留在 snapshot/,病例总表和问题清单已用大白话说了同样的内容;review 行数超预期一倍,原因对照表本来就该这么长,接受。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 10:33:10 -04:00

9.0 KiB
Raw Blame History

核对包说明

这个包是我们用程序处理你们交来的资料之后的结果,想请你们帮忙看一看:程序读到的报告和临床信息对不对,在造影视频上圈的病灶、取的关键帧、算出的 TIC 参数是否合理,问题清单里列的情况是否属实。不用填表,有意见直接告诉我们就好。

我们的系统给每个病例配了三位 AI 专家,分别只看临床信息、超声(报告和造影视频)、MR 报告,再让它们会诊。三位专家能看到的全部资料,我们叫「资料库」;包里的报告、临床信息、关键帧和 TIC 参数,就是它们看到的原样。这一版共 $total_cases 例:$passed_cases 例进了资料库,$skipped_cases 例因为资料或视频上的问题没进,原因写在问题清单里。

$ceus_note

包里有患者资料(报告、临床信息、超声图像和视频、病理诊断),只在我们双方之间传,请不要转给别人。

一、包里有什么

  • 说明.pdf(这份说明)、问题清单.csv、病例总表.csv、标准答案/(3 张表):几张表见第六节。
  • 病例/:每个进了资料库的病例一个文件夹,名字是病例号(如 P001)。打开能看到:
    • 临床信息.csv:临床那位 AI 专家看到的临床信息,列名沿用你们临床工作簿的原列名。$codes_note
    • 超声报告.pdf、MR报告.pdf:报告里的描述部分,一字未改。结论(印象)部分写着诊断倾向,没有给 AI 专家,这里也就没有。
    • 关键帧/:「医生截图.png」是你们截的图;其余是程序从造影视频里取的画面,文件名如「D3_第12.4秒.png」,秒数是视频里的时间;没取到的时刻没有图。
    • TIC曲线.png:时间-强度曲线图,见第四节。
    • TIC参数.csv:11 个灌注参数,胰腺实质和病灶各一组,见第五节。
    • 回放视频.mp4:原视频上叠加了程序画的轮廓。

图片和视频都是原样,没有压缩或缩放。

<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>

二、看一个病例的建议顺序

  1. 先读超声报告和 MR 报告,心里有个病灶的样子。
  2. 看关键帧文件夹里的医生截图,确认是哪个病灶。
  3. 看回放视频。 绿框和紫圈是你们在视频上画的:绿框圈病灶,紫圈圈一块正常的胰腺实质。黄色线(造影那一屏)和绿色线(灰阶那一屏)是程序画的病灶轮廓;蓝色线圈出的是程序认为一直不进造影剂的部分(如囊液)。病灶轮廓内去掉蓝色部分,剩下的一般是囊壁、分隔、实性成分这些会进造影剂的部分,后面叫「病灶(去暗区)」。青色小圆圈是程序在病灶旁边挑的一小块背景,用来检查整段视频里机器的整体亮度(增益)有没有变化。请看轮廓是否一直跟着病灶、蓝色部分是否确实不增强。
  4. 再看 TIC 曲线图(第四节)和关键帧(第三节,每张是不是对应的时刻),最后看 TIC 参数(第五节)。

三、7 个关键帧是什么时刻

  • B0:增强之前,病灶还没变亮。
  • D1:造影剂到达,病灶开始变亮。
  • D2:变亮最快的时刻。
  • D3:病灶最亮的时刻(峰值)。
  • D4:变暗最快的时刻(廓清最快)。
  • F1:推注后第 $f1_s 秒。
  • F2:推注后第 $f2_s 秒;前后 $f2_tol_s 秒内没有能用的画面就不取。

B0 和 D1–D4 的找法:程序用一条平滑曲线分别去贴合「病灶整体」和「病灶(去暗区)」两条亮度曲线。两条都贴合上,才在病灶(去暗区)那条平滑曲线上定出这 5 个时刻,各取离它最近的一帧;其中 D1–D4 按时间先后取,后一个必须比前一个晚。两条里有一条没贴合上,这 5 个关键帧就都没有。

F1、F2 按超声表里的「推注开始时间s」换算。这个数我们理解为「视频第 0 秒时已经推注了多少秒」,所以推注后第 $f1_s 秒就在视频第 $f1_s − 这个数 秒。如果你们的意思不是这样,请一定告诉我们,否则 F1、F2 取的都是错的时刻。

「重复帧」是病灶那块画面和前一帧几乎一模一样的帧:视频录制时同一张画面被存了好几遍,它不是新的时刻,所以不用。「能用的画面」指不是重复帧、而且这一帧里程序认得出病灶区域的帧。

四、TIC 曲线图上的英文

  • 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 参数怎么看

TIC参数.csv 每行一个参数,两组数并排:胰腺实质(紫圈)和病灶(去暗区),用意是让病灶和正常胰腺对着看。下面说的「开始变亮」「退回增强前水平」都是按切线定的:在变亮最快那一点(D2)画切线,与增强前水平的交点算开始变亮;在变暗最快那一点(D4)画切线,与增强前水平的交点算退回增强前水平。

  • PE 峰值增强:最亮时比增强前亮了多少。
  • TTP 达峰时间:最亮的时刻。
  • WiR 最大洗入斜率:变亮最快时每秒亮多少。
  • RT 上升时间:从开始变亮到最亮用了多久。
  • WiAUC 洗入曲线下面积:从开始变亮到最亮这一段曲线下的面积,反映这段时间进来的造影剂多少。
  • WiPI 洗入灌注指数:WiAUC 除以 RT,即变亮这一段的平均增强程度。
  • WoR 最大洗出斜率:变暗最快时每秒暗多少,是负数。
  • FT 下降时间:从最亮到退回增强前水平用了多久。
  • WoAUC 洗出曲线下面积:从最亮到退回增强前水平这一段的面积。
  • WiWoAUC 洗入洗出曲线下面积:上面两段面积加起来。
  • mTTl 平均渡越时间:从开始变亮到退回增强前水平这一段里,造影剂平均停留了多久,从开始变亮算起;l 表示只在这一段(local)里算。

看这些数时请注意三点。一是数值在视频画面的亮度(灰度,0–255)上算,不是超声机内部的回声强度,单看一个数意义不大,主要看两组的对比。二是时间从视频第一帧算起,不是从推注算起。三是参数都从贴合出的平滑曲线上算:某一组曲线没贴合上,这一组整列空着,表的最后一行写了原因;个别格子空着,是视频录得不够长(如还没退回增强前水平就结束了),这一项算不出来,就空着,不去估。

六、几张表

  • 问题清单.csv:一个问题一行:病例号、视频号(你们交付包里视频的编号,如 U001)、环节(资料核对、造影视频处理、TIC 曲线、关键帧、紫圈)和一句话说明;同一个原因引起的几件事合成一行。「资料核对」是资料本身的问题,你们改好重交就行;其余是程序处理视频和曲线时遇到的,想请你们看看那段视频本身有没有异常,告诉我们就好。
  • 病例总表.csv:全部病例一例一行:进没进资料库、没进的原因、造影视频处理成功没有(没成功时写停在第几步)、7 个关键帧各在视频第几秒。
  • 标准答案/化名对照.csv:资料库里代替病例号的化名与病例号的对照。
  • 标准答案/诊断.csv:三张表的病理诊断编码(1 IPMN,2 SPN,3 MCN,4 SCN)。
  • 标准答案/报告复核句.csv:报告描述里含「考虑」「可能」「倾向」「提示」的句子。这些句子目前仍留在给 AI 专家的报告里,想请你们看看它们算不算带出了诊断倾向、该不该删掉。