四、MPR多平面重建(采用VTK方法代码示例)

一、读取DICOM文件(vtkDICOMImageReader)

cpp 复制代码
auto reader = vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetDirectoryName(folderPath.toStdString().c_str());
reader->Update();

二、获取vtkImageData

cpp 复制代码
vtkSmartPointer<vtkImageData> m_imageData = reader->GetOutput();

三、设置"十字定位器"(vtkResliceCursor)

cpp 复制代码
vtkSmartPointer<vtkResliceCursor> resliceCursor = vtkSmartPointer<vtkResliceCursor>::New();
//设置三视图同步定位点
resliceCursor->SetCenter(imageData->GetCenter());
//设置是否启用"厚切片(Thick Slab)模式"
resliceCursor->SetThickMode(0);
//设置图片数据
resliceCursor->SetImage(imageData);

四、创建三个render

cpp 复制代码
vtkSmartPointer<vtkRenderer> renAxial =
    vtkSmartPointer<vtkRenderer>::New();

vtkSmartPointer<vtkRenderer> renSagittal =
    vtkSmartPointer<vtkRenderer>::New();

vtkSmartPointer<vtkRenderer> renCoronal =
    vtkSmartPointer<vtkRenderer>::New();

五、创建三个 widget

cpp 复制代码
vtkSmartPointer<vtkResliceCursorWidget> widgetAxial =
    vtkSmartPointer<vtkResliceCursorWidget>::New();

vtkSmartPointer<vtkResliceCursorWidget> widgetSagittal =
    vtkSmartPointer<vtkResliceCursorWidget>::New();

vtkSmartPointer<vtkResliceCursorWidget> widgetCoronal =
    vtkSmartPointer<vtkResliceCursorWidget>::New();

六、创建 representation

cpp 复制代码
vtkSmartPointer<vtkResliceCursorLineRepresentation> repAxial =
    vtkSmartPointer<vtkResliceCursorLineRepresentation>::New();

vtkSmartPointer<vtkResliceCursorLineRepresentation> repSagittal =
    vtkSmartPointer<vtkResliceCursorLineRepresentation>::New();

vtkSmartPointer<vtkResliceCursorLineRepresentation> repCoronal =
    vtkSmartPointer<vtkResliceCursorLineRepresentation>::New();

七. 绑定 cursor(关键:共享同一个)

cpp 复制代码
repAxial->GetResliceCursorActor()
    ->GetCursorAlgorithm()
    ->SetResliceCursor(cursor);

repSagittal->GetResliceCursorActor()
    ->GetCursorAlgorithm()
    ->SetResliceCursor(cursor);

repCoronal->GetResliceCursorActor()
    ->GetCursorAlgorithm()
    ->SetResliceCursor(cursor);

八、设置方向

cpp 复制代码
repAxial->SetPlaneOrientationToZAxis();      // Axial

repSagittal->SetPlaneOrientationToXAxis();   // Sagittal

repCoronal->SetPlaneOrientationToYAxis();    // Coronal

九、设置 widget

cpp 复制代码
widgetAxial->SetRepresentation(repAxial);
widgetSagittal->SetRepresentation(repSagittal);
widgetCoronal->SetRepresentation(repCoronal);

十、renderer + interactor

cpp 复制代码
vtkSmartPointer<vtkRenderWindow> renderWindow =
    vtkSmartPointer<vtkRenderWindow>::New();

renderWindow->AddRenderer(renAxial);
renderWindow->AddRenderer(renSagittal);
renderWindow->AddRenderer(renCoronal);

vtkSmartPointer<vtkRenderWindowInteractor> interactor =
    vtkSmartPointer<vtkRenderWindowInteractor>::New();

interactor->SetRenderWindow(renderWindow);

十一、初始化Widget

cpp 复制代码
widgetAxial->SetInteractor(interactor);
widgetSagittal->SetInteractor(interactor);
widgetCoronal->SetInteractor(interactor);

widgetAxial->EnabledOn();
widgetSagittal->EnabledOn();
widgetCoronal->EnabledOn();

十二、启动

cpp 复制代码
renderWindow->Render();
interactor->Start();
相关推荐
luoyayun3615 小时前
Qt + FFmpeg 实战:获取音视频文件基础属性、流信息和元数据
qt·ffmpeg·音视频·元数据·获取音视频文件属性
mN9B2uk175 小时前
在Qt中使用SQLite数据库
数据库·qt·sqlite
Drone_xjw6 小时前
Qt国际化多语言配置详解-入门到精通
开发语言·qt·命令模式
谁刺我心6 小时前
[QtCPP]Examples使用示例-QtMultimedia、QMediaPlayer、Audio音频引擎测试mp3播放
qt·音视频·qml
Quz7 小时前
Qt Quick 粒子系统(二):系统控制与生命周期管理
qt·qml·粒子系统
Quz8 小时前
Qt Quick 粒子系统(三):发射器深度解析
qt·qml·粒子系统
San813_LDD1 天前
[QT]《Qt 开发避坑指南:随机数、容器操作与 VS 环境配置》
开发语言·qt
稷下元歌1 天前
七天学会plc加机器视觉之AI 接入 外设模块开发全详细操作文档(全程配套视频按文档实操)
python·sql·qt·贪心算法·r语言·wpf·时序数据库
艾莉丝努力练剑1 天前
【QT】界面优化:QSS
linux·运维·开发语言·网络·qt·计算机网络·udp
雪的季节1 天前
Qt 自定义表头
开发语言·qt