三、MPR(三平面重建)和三视图

MPR(三维重建中的 Multi-Planar Reconstruction,多平面重建)里的"三视图",是医学影像软件(CT、MRI、PET-CT 等)中的核心。

一、核心三视图解析

1、横断面(Axial)

相当于把人体水平切开。观察方向:从下往上看。常用于脑 CT、胸部 CT、腹部 CT.

2、冠状面(Coronal)

相当于把人体从正面切开。观察方向:面对病人。常用于鼻窦、脊柱、肺部上下关系.

3、矢状面(Sagittal)

相当于把人体左右切开。观察方向:从身体侧面看。常用于脊柱、膝关节、大脑中线结构.

4、示例图

5、三视图核心思想

在三个正交切面(轴状、冠状、矢状)之间共享同一个空间坐标点(x,y,z),用户在任意一个视图里的操作,会同步影响另外两个视图。所以三个视图其实只是同一体数据的不同切片投影。

二、为什么需要三视图

因为单个方向无法完整描述空间关系。例如某个肿瘤,在横断面里能看到左右位置,但不知道上下深度。加入冠状面、矢状面后才能真正定位。

三、三视图的核心价值

  • 医生能快速知道病灶在人体哪个空间位置。

  • 观察器官关系。例如:肿瘤是否侵犯血管、骨折是否穿透关节、病灶与神经距离。

  • 提高手术规划能力。例如:穿刺路径、切除范围、导航定位。

四、什么是MPR(Multi-Planar Reconstruction)

Multi-Planar Reconstruction翻译过来就是多平面重建。因为原始 CT 实际只直接采集了某个方向的数据。比如CT 常以 axial 为主采集,coronal/sagittal 是后处理重新生成,因此叫多平面重建。

五、MPR本质和三视图

CT/MRI 原始数据本质上是一个三维标量场,每个 voxel(体素)都有灰度值,可以理解成 3D 数组。

例如:512 × 512 × 400;表示512×512 的单层图像,共 400 层。

MPR 本质从三维体数据中重新取样(resampling)得到任意平面切片。三视图其实就是三个互相垂直的二维采样面。可以理解为三维数组在三个维度上的"切片操作"。

六、VTK中的MPR三视图

在 VTK 中实现 MPR 的核心通常是:

  • vtkImageData:读取 DICOM/CT 数据。

  • vtkImageReslice:做任意切面重建(核心)。

  • vtkResliceCursorWidget:三视图联动十字线。

  • vtkImageViewer2:显示二维切片。

  • 多个 vtkRenderer:同时显示三个方向。

1、经典MPR架构

DICOM 数据

Volume Builder

(体数据构建)

3D Volume Cache

(体缓存)

┌─────────┼─────────┐

▼ ▼ ▼

Axial Coronal Sagittal

Renderer Renderer Renderer

│ │ │

└─────────┼─────────┘

MPR Controller

(同步控制)

UI显示

2、简单实现流程

cpp 复制代码
//读取 DICOM
vtkNew<vtkDICOMImageReader> reader;
reader->SetDirectoryName("dicom/");
reader->Update();
//得到vtkImageData*
//创建三个 Viewer
vtkNew<vtkImageViewer2> axialViewer;
vtkNew<vtkImageViewer2> coronalViewer;
vtkNew<vtkImageViewer2> sagittalViewer;

/*设置方向*/
//1.Axial
viewer->SetSliceOrientationToXY();
//2.Coronal
viewer->SetSliceOrientationToXZ();
//3.Sagittal
viewer->SetSliceOrientationToYZ();

3、医院系统中的完整功能

真正临床 MPR 通常包括:

功能 VTK组件
三视图 vtkResliceCursorWidget
十字线 ResliceCursorActor
斜切 vtkImageReslice
厚层MPR SlabMode
VR三维 vtkGPUVolumeRayCastMapper
窗宽窗位 vtkImageMapToWindowLevelColors
测量 vtkDistanceWidget
ROI vtkContourWidget
相关推荐
CHPCWWHSU2 小时前
DeepSeek-Harness-Qt将浏览器端Agent装入桌面应用
开发语言·qt
飘忽不定的bug7 小时前
ubuntu20.04交叉编译QT5.15.12(RK3562+ubuntu20.04)
linux·qt·ubuntu
秋田君9 小时前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt
mengzhi啊9 小时前
QT程序界面自适应1080/2K/4K屏幕。qputenv或者setAttribute
qt
C++ 老炮儿的技术栈9 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
大丑哥1 天前
QT QML 中实现高亮功能
qt
小白不想画工图1 天前
银河麒麟V10系统安装QT5.12
linux·开发语言·qt·银河麒麟
mengzhi啊1 天前
QEventLoop loop配合loop.exec();替代while(1)。电脑cpu占用为0,使用while(1)cpu占用率100%
c++·qt
@福者1 天前
C++ QT 入门
开发语言·c++·qt
长友cy1 天前
Qt官方示例BluetoothLowEnergyGame源码阅读
开发语言·qt