这是一个关于 vtk 程序的问题。
我正在 3D MRI 和 3D US 图像之间进行严格的配准。美国数据的大小比 MRI 大得多。首先,我在两张图像的同一个器官上取一些地标。然后,我使用“vtkLandmarkTransform”在这些地标点之间进行转换。最后,我使用“vtkImageReslice”将转换应用于 MRI 数据。所以我得到了一个巨大的核磁共振数据。
如何裁剪大量数据以使新的 MRI 数据具有与美国图像相同的大小并显示与美国图像相同的器官位置?
她是我的密码
vtkSmartPointer<vtkPoints> sourcePoints = vtkSmartPointer<vtkPoints>::New();//Input source points
for ( int t = 0; t < 6; t++ )
{
float sourcePoint[3] = {inital_points_mri[t][0], inital_points_mri[t][1], inital_points_mri[t][2]};
sourcePoints->InsertNextPoint(sourcePoint);
}
vtkSmartPointer<vtkPoints> targetPoints = vtkSmartPointer<vtkPoints>::New();//Input target points
for ( int t = 0; t < 6; t++ )
{
float targetPoint[3] = {inital_points_us[t][0], inital_points_us[t][1], inital_points_us[t][2]};
targetPoints->InsertNextPoint(targetPoint);
}
vtkSmartPointer<vtkLandmarkTransform> landmarkTransform = vtkSmartPointer<vtkLandmarkTransform>::New();//get landmark transform
landmarkTransform->SetSourceLandmarks(sourcePoints);
landmarkTransform->SetTargetLandmarks(targetPoints);
landmarkTransform->SetModeToSimilarity ();
landmarkTransform->Update();
vtkSmartPointer<vtkImageReslice> transform2 = vtkSmartPointer<vtkImageReslice>::New(); // Apply transform
transform2->SetInput(MRIimagedata); // Input MRI image
transform2->AutoCropOutputOn(); // I'm not sure I need it or not?
// transform2->SetOutputExtent(0,499,0,489,0,358); // set the extent as US data, but can't get the same organ position
landmarkTransform->Inverse();
transform2->SetResliceTransform(landmarkTransform);
transform2->Update();
vtkImageData* transformImage = transform2->GetOutput();
感谢您的关注。