四、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();
相关推荐
西飘客8 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx9 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
半杯咖啡半行码12 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
时间的拾荒人13 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试
MayZork13 小时前
Qt 文件操作:QSaveFile 与 QTemporaryFile(含 QTemporaryDir)实战
开发语言·qt
半杯咖啡半行码16 小时前
Qt 开发基础:版本演进、常用工具与多平台安装
开发语言·qt
qq_4017004121 小时前
Qt Signal Mapper:一堆按钮,怎么共用一个槽函数
开发语言·qt
Python图像识别1 天前
35-【2027毕设】YOLO11中草药检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
Lhan.zzZ1 天前
Qt/QML:业务记录单展示、签名确认与 PDF 导出开发
c++·qt·pdf
Quz1 天前
QML 动画选择:GIF与Lottie 的区别,以及 Qt 6.8 与 6.11 的 Lottie 实现差异
qt