如何使用 VTK 在 X、Y 和 Z 中旋转 dicom?

How can rotate dicom in the X, Y and Z with VTK?

需要能够在内存中旋转一个dicom块,然后将.mhd写入这个结果。

我知道在VTK中可以配合相机来实现这些效果,vtkimageSlice可以统一裁切。

但是不能旋转的是dicom自己的块在xyz轴上

我看到了这个postFlip a DICOM Image over the x = y Line, 制作vtkTransform的表格,但在新版本的vtk(6.3)中无法使其工作。

我可以这样做

string path;

vtkDICOMImageReader *reader = vtkDICOMImageReader::New();
reader->SetDirectoryName(path.c_str());
reader->Update();
double bounds[6];
reader->GetOutput()->GetBounds(bounds);


vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();

double center[3];
center[0] = (bounds[1] + bounds[0]) / 2.0;
center[1] = (bounds[3] + bounds[2]) / 2.0;
center[2] = (bounds[5] + bounds[4]) / 2.0;

transform->Translate(center[0], center[1], center[2]);
transform->RotateX(90);
transform->Translate(-center[0], -center[1], -center[2]);

vtkSmartPointer<vtkImageReslice> reslice = vtkSmartPointer<vtkImageReslice>::New();
reslice->SetInputConnection(reader->GetOutputPort());
reslice->SetResliceTransform(transform);
reslice->SetInterpolationModeToCubic();
reslice->SetOutputSpacing(reader->GetOutput()->GetSpacing()[0], reader->GetOutput()->GetSpacing()[1], reader->GetOutput()->GetSpacing()[2]);
reslice->SetOutputOrigin(reader->GetOutput()->GetOrigin()[0], reader->GetOutput()->GetOrigin()[1], reader->GetOutput()->GetOrigin()[2]);
reslice->SetOutputExtent(reader->GetOutput()->GetExtent());


//Saida alterada!
reslice->GetOutput();

然后我们保存在.mhd