三维C三维配准软件(术中CT)

前言:整体目标是通过 CT 标记点和 NDI 探针采集点,计算 C 臂基座坐标系到 CT 坐标系的转换矩阵,并通过验证点计算配准误差,判断配准精度是否可用。

功能核心链路:DICOM导入 -> CT点采集 -> C臂基座采集 -> 探针NDI点采集 -> 点对点配准 -> T_CT_CArm -> 验证误差。

核心输出:T_CT_CArm

核心验证指标:error = norm(P_CArm_measured - inverse(T_CT_CArm) * P_CT_ref)

1. 功能范围

本功能主要由两个插件完成:

  • PluginFirstImageCollectPointsView:负责 C 臂 CT/DICOM 影像加载、CT 标记点采集。

  • PluginFirstImageRegistrationView:负责 C 臂基座采集、探针 NDI 点采集、配准矩阵计算、配准验证和探针实时显示。

2. 总体输入输出

2.1 输入

输入项 来源 说明
DICOM/CT 影像 C 臂 DICOM 接收服务或本地文件夹 用于显示 CT 四视图和采集 CT 标记点
CT 金属球标记点 PluginFirstImageCollectPointsView 用户在 CT 影像上采集的 3 到 6 个点
C 臂基座位姿 OTS,CArmTracker.rom C 臂基座示踪器在 NDI 世界坐标系下的位置和姿态
NDI下金属球位姿 OTS,ProbeTracker.rom 探针示踪器在 NDI 世界坐标系下的位置和姿态
C 臂侧别 页面选择 左侧或右侧,用于区分保存基座和配准矩阵

2.2 输出

输出项 保存/使用位置 说明
CT 影像对象 内存服务 IUICollectPointsServer 供配准页面加载到 3D 视图
CT 标记点坐标 内存服务 IUICollectPointsServer 供配准计算和验证误差计算使用
C 臂基座位姿 basePose.json 按左侧、右侧分别保存
C 臂配准矩阵 regMatrix.json 即 T_CT_CArm,按左侧、右侧分别保存
验证误差 验证页面显示 用于判断当前配准精度
探针实时显示 配准页面 3D 视图 配准后显示探针在 CT 坐标系下的位置
  1. 主要流程

3.1 CT 影像加载

  1. 用户选择从 C 臂接收目录加载,或手动选择本地 DICOM 文件夹。

  2. 系统导入 DICOM 文件并更新 CT 影像对象。

  3. 系统在四视图中显示 CT 影像,重置视图并显示十字线。

  4. 系统清理旧 CT 节点,避免新旧影像叠加。

  5. 系统清空已有 CT 标记点,重新开始采点。

  6. 系统发送影像更新通知,供配准页面刷新使用。

3.2 CT 标记点采集

  1. 系统初始化 6 个 CT 标记点节点。

  2. 用户点击"采集标记点 1~6"中的某一个按钮,激活对应标记点。

  3. 用户在 CT 四视图中落点或移动点位。

  4. 每个标记点最多保存 1 个点。

  5. 落点成功后,按钮显示该标记点已采集。

  6. 其他模块可通过服务读取单个点、全部点、已采集数量和当前 CT 影像对象

3.3 进入配准页面

  1. 用户从 CT 点采集页面进入配准。

  2. 配准页面加载当前 CT 影像到 3D 视图。

  3. 配准页面初始化或检查 OTS 相机连接。

  4. 页面显示 C 臂基座和探针相关示踪器状态。

  5. 系统按当前 C 臂侧别加载历史基座位姿和历史配准矩阵。

3.4 C 臂基座采集

  1. 用户选择 C 臂位置:左侧或右侧。

  2. 用户点击"采集基座"。

  3. 系统读取 CArmTracker.rom 在 NDI 世界坐标系下的绝对位姿。

  4. 系统将位姿保存到 basePose.json。

  5. 系统将基座位姿转换成 4x4 矩阵,并提前计算逆矩阵。

  6. 后续NDI探针采点使用该本地基座矩阵,不依赖实时 CArmTracker.rom 一直可见。

3.5 探针 NDI 点采集

  1. 用户使用探针触碰实际金属球点位。

  2. 用户点击采集 NDI 点。

  3. 系统读取 ProbeTracker.rom 在 NDI 世界坐标系下的绝对位姿。

  4. 系统使用已保存的 C 臂基座逆矩阵,将探针坐标转换到 C 臂基座坐标系。

  5. 系统保存该 NDI 点,并在页面列表中显示点序号和坐标。

  6. NDI 点数量最少 3 个、最多 6 个。

3.6 影像配准

  1. 用户点击配准。

  2. 系统检查 NDI 点数量是否不少于 3 个。

  3. 系统从 CT 点采集服务读取 CT 标记点。

  4. 系统检查 CT 点数量是否不少于 3 个。

  5. 系统检查 CT 点数量和 NDI 点数量是否一致。

  6. 系统将 NDI 点和 CT 点传入算法库执行点对点配准。

  7. 配准成功后,系统得到 T_CT_CArm。

  8. 系统将 T_CT_CArm 按当前侧别保存到 regMatrix.json。

  9. 系统启动探针实时显示。

3.7 配准验证

  1. 用户进入验证模式。

  2. 系统隐藏配准采点控件,显示 3 个验证点按钮。

  3. 用户分别采集验证点 1、2、3。

  4. 验证时系统要求 CArmTracker.rom 和 ProbeTracker.rom 同时实时可见。

  5. 系统实时读取探针相对 C 臂基座的坐标。

  6. 系统读取对应序号的 CT 标记点作为参考点。

  7. 系统计算该验证点的预测 NDI 坐标和误差。

  8. 页面显示实测坐标、CT 参考点、预测坐标和误差等级。

4. 关键计算

计算探针相对 C 臂基座坐标

点对点配准计算

探针在 CT 中实时显示

验证点误差计算

相关推荐
choumin7 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里8 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
努力努力再努力wz11 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
划破黑暗的第一缕曙光11 小时前
[C++]:4.模板
c++·template·模板·函数模版·类模版
十五年专注C++开发11 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
CodeYp201912 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
沫璃染墨12 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
hetao173383712 小时前
2026-10-25 hetao1733837 的刷题记录
c++·算法
fqbqrr13 小时前
2610C++,UI复合技术在窗口中绘画字体图标
c++·ui
见叶之秋13 小时前
【C++】红与黑的边界:红黑树从插入到自检
数据结构·c++·算法·面试