在医学影像质控系统中,一次检查(Study)通常包含多张 DICOM 图像。对每张图像分别进行质控分析后,需要将多张图像的结果聚合为该检查的整体质控结果。
本文档定义了五项质控维度的聚合策略,确保结果计算逻辑统一、可追溯。
| 维度编码 | 维度名称 | 可选值 | 说明 |
|---|---|---|---|
| CHECK_RANGE | 检查范围 | large(过大) / normal(正常) / small(过小) | 评估图像覆盖范围是否合适 |
| BODY_POSITION | 体位 | standard(标准) / non_standard(不标准) | 评估患者体位是否符合规范 |
| IMAGE_ARTIFACT | 图像伪影 | none(无) / motion_artifact(运动) / device(设备) / foreign_body(异物) | 评估图像是否存在伪影 |
| CENTER_LINE | 中心线 | normal(正常) / up(偏上) / down(偏下) / left(偏左) / right(偏右) | 评估中心线位置是否正确 |
| IMAGE_QUALITY_LEVEL | 质控等级 | X线: 1(甲)/2(乙)/3(丙)/4(丁);CT/MR: 0/1/2/3级 | 综合图像质量评级 |
| 策略类型 | 说明 | 算法 |
|---|---|---|
| 众数策略 | 取出现次数最多的值 | 统计各值出现次数,取最大次数对应的值;若次数相同,优先取"正常"值 |
| 最严格策略 | 只要有一个异常,整体即为异常 | 按严重程度排序,取最严重的值 |
| 最差值策略 | 取最差的等级 | 数值比较,取最差(最大或最小)的值 |
| 维度 | 聚合策略 | 策略理由 |
|---|---|---|
| 检查范围 | 众数策略 | 个别图片范围异常可能是序列边缘图像,应以多数图片为准 |
| 体位 | 众数策略 | 大部分图片体位标准即可认定检查体位合格 |
| 图像伪影 | 最严格策略 | 只要有一张图片存在伪影,就应记录并提示,取最严重的伪影类型 |
| 中心线 | 众数策略 | 少数图片偏移可接受,以多数图片的判定为准 |
| 质控等级 | 最差值策略 | 整体质量由最差的图片决定,木桶效应 |
输入: 值列表 [v1, v2, v3, ...]
输出: 出现次数最多的值
算法:
1. 统计每个值的出现次数
2. 找出最大次数
3. 如果有多个值次数相同:
- 检查范围: 优先返回 "normal"
- 体位: 优先返回 "standard"
- 中心线: 优先返回 "normal"
4. 返回众数值
示例:
伪影严重程度排序(从轻到重):
none(0) < motion_artifact(1) < device(2) < foreign_body(3)
输入: 伪影值列表 [v1, v2, v3, ...]
输出: 最严重的伪影类型
算法:
1. 将每个值映射为严重程度数值
2. 取最大数值对应的伪影类型
3. 返回该类型
示例:
质控等级数值定义:
- X线: 甲级=1, 乙级=2, 丙级=3, 丁级=4 (数值越大越差)
- CT/MR: 0级=0, 1级=1, 2级=2, 3级=3 (数值越大越差)
输入: 等级值列表 [v1, v2, v3, ...]
输出: 最差的等级
算法:
1. 将每个等级转为数值
2. 取最大数值
3. 转回等级表示
4. 返回该等级
示例(CT检查):
示例(X线检查):
某CT检查包含5张图像,分析结果如下:
| 图片序号 | 检查范围 | 体位 | 伪影 | 中心线 | 质控等级 |
|---|---|---|---|---|---|
| 0 | normal | standard | none | normal | 1 |
| 1 | normal | standard | foreign_body | left | 2 |
| 2 | large | standard | none | normal | 1 |
| 3 | normal | non_standard | none | normal | 2 |
| 4 | normal | standard | device | normal | 3 |
| 维度 | 策略 | 计算过程 | 结果 |
|---|---|---|---|
| 检查范围 | 众数 | normal=4, large=1 → 众数为normal | normal |
| 体位 | 众数 | standard=4, non_standard=1 → 众数为standard | standard |
| 伪影 | 最严格 | none=3, foreign_body=1, device=1 → 最严重为foreign_body | foreign_body |
| 中心线 | 众数 | normal=4, left=1 → 众数为normal | normal |
| 质控等级 | 最差值 | [1,2,1,2,3] → 最大值3 | 3级 |
{
"checkRangeResult": "normal",
"checkRangeLabel": "正常",
"bodyPositionResult": "standard",
"bodyPositionLabel": "标准",
"imageArtifactResult": "foreign_body",
"imageArtifactLabel": "体外异物伪影",
"centerLineResult": "normal",
"centerLineLabel": "正常",
"qualityLevel": "3",
"qualityLevelLabel": "3级",
"imageCount": 5,
"passCount": 2,
"failCount": 3
}
| 情况 | 处理方式 |
|---|---|
| 无法读取任何图片 | 五项结果均返回默认值(normal/standard/none/normal/2级),并标记分析状态为"失败" |
| 只有1张图片 | 直接使用该图片的分析结果,无需聚合 |
| 部分图片分析失败 | 只使用成功分析的图片进行聚合,记录失败图片数量 |
| 所有图片分析失败 | 同"无法读取任何图片" |
存储每张图片的每个维度分析结果:
| 字段 | 说明 |
|---|---|
| exam_id | 检查ID |
| image_index | 图片序号(0,1,2...) |
| factor_id | 因子ID(对应五个维度) |
| factor_value | 该图片该维度的分析结果 |
| analysis_log | 详细分析日志 |
存储整体聚合结果(需新增字段):
| 字段 | 说明 |
|---|---|
| check_range_result | 检查范围聚合结果 |
| body_position_result | 体位聚合结果 |
| image_artifact_result | 伪影聚合结果 |
| center_line_result | 中心线聚合结果 |
| quality_level | 质控等级聚合结果 |
| image_count | 分析的图片总数 |
| success_image_count | 成功分析的图片数 |
| 版本 | 日期 | 修改内容 | 作者 |
|---|---|---|---|
| 1.0 | 2025-12-28 | 初始版本 | Claude |