#include <vtkSmartPointer.h>
#include <vtkDICOMImageReader.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkImageMapToColors.h>
#include <vtkImageActor.h>
#include <vtkImageReslice.h>
#include <vtkImageSliceMapper.h>
#include <vtkInteractorStyleTrackballCamera.h>
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cerr << "Usage: " << argv[0] << " DicomDirectory" << std::endl;
return EXIT_FAILURE;
}
// 读取 DICOM 文件
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetDirectoryName(argv[1]);
reader->Update();
// 三维重建
vtkSmartPointer<vtkImageReslice> reslice =
vtkSmartPointer<vtkImageReslice>::New();
reslice->SetInputConnection(reader->GetOutputPort());
reslice->SetOutputDimensionality(2);
reslice->SetInterpolationModeToLinear();
reslice->SetResliceAxesDirectionCosines(1, 0, 0, 0, 1, 0, 0, 0, 1);
reslice->Update();
// 显示 MPR 图像
vtkSmartPointer<vtkImageMapToColors> colors =
vtkSmartPointer<vtkImageMapToColors>::New();
colors->SetInputConnection(reslice->GetOutputPort());
vtkSmartPointer<vtkImageSliceMapper> mapper =
vtkSmartPointer<vtkImageSliceMapper>::New();
mapper->SetInputConnection(colors->GetOutputPort());
mapper->SliceAtFocalPointOn();
mapper->SetSliceNumber(reslice->GetOutput()->GetDimensions()[0] / 2);
vtkSmartPointer<vtkImageActor> actor =
vtkSmartPointer<vtkImageActor>::New();
actor->SetMapper(mapper);
// 渲染器
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
// 窗口
vtkSmartPointer<vtkRenderWindow> window =
vtkSmartPointer<vtkRenderWindow>::New();
window->AddRenderer(renderer);
// 交互器
vtkSmartPointer<vtkRenderWindowInteractor> interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(window);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =
vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
interactor->SetInteractorStyle(style);
// 显示窗口
window->Render();
interactor->Start();
return EXIT_SUCCESS;
}
该程序实现了对 DICOM 数据集进行 MPR 渲染,并显示在窗口中。可以根据需要修改或扩展代码。注意,该程序需要使用 VTK 库,需要先安装并配置好 VTK 库才能编译运行。