四、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();
相关推荐
imatt4 小时前
Qt Creator 在Windows下编译信息乱码
windows·qt
赤水无泪5 小时前
qt中图标、名称的设置方式
开发语言·qt
房开民8 小时前
Qt TCP 服务器开发实战:与 VisionMaster OCR 通信
服务器·qt·tcp/ip
熬夜苦读学习9 小时前
QT_信号和槽
开发语言·qt
Quz10 小时前
QML 文字入场动画:逐字弹出、逐字飞入、3D 飞入
qt·3d·动画·qml
豆浆D油条1 天前
QT容器类QList调用erase崩溃
开发语言·qt·rpc
杜子不疼.1 天前
【Qt常用控件】WindowTitle 与 WindowIcon:窗口标题和图标
开发语言·qt
sycmancia2 天前
Qt——另一种创建线程的方式
开发语言·qt
sycmancia2 天前
Qt——多线程与界面组件的通信
开发语言·qt·算法
Quz2 天前
QML 基础组件专栏目录(V1)
qt·qml