四、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();
相关推荐
十五年专注C++开发4 小时前
QHttp: 一个开源的轻量级、异步、高性能 HTTP 库
c++·qt·网络协议·http·qhttp
宏笋4 小时前
QT 实现文件资源浏览器
qt
輕華4 小时前
YOLOv10轮毂缺陷检测(下)——模型推理与PyQt5可视化应用
开发语言·qt·yolo
小短腿的代码世界17 小时前
Qt进程间通信全体系深度解析:从QSharedMemory到本地Socket的七层武器
开发语言·qt
学习,学习,在学习18 小时前
Qt工控仪器程序框架设计详解(工控多仪器控制版本)
开发语言·c++·qt
mengzhi啊21 小时前
qt程序release版在Windows运行崩溃。使用dump文件+vs2022进行解析+豆包
qt
sycmancia1 天前
Qt——拖放事件深度剖析
开发语言·qt
长沙红胖子Qt1 天前
项目实战:Qt圆形百分比进度控件基础设计构架Demo
qt·圆形进行百分比控件
我在人间贩卖青春1 天前
重学Qt——模型视图结构
qt