0
這是一個關於vtk程序的問題。如何在註冊後裁剪圖像數據?
我在3D MRI和3D美國圖像之間進行了嚴格的註冊。美國數據的規模比MRI要大得多。首先,我在兩幅圖像的同一個器官上繪製一些地標。然後,我使用「vtkLandmarkTransform」來獲得這些界標點之間的變換。最後我通過使用「vtkImageReslice」將變換應用於MRI數據。所以我得到一個巨大的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();
感謝您的關注。
我也問VTK用戶郵件列表中的問題。但沒有收到重播。所以請不要建議我這樣做:) – Yao 2013-04-24 13:18:43
「我如何裁剪大量數據以使新的MRI數據具有與美國圖像相同的尺寸」 如果兩個圖像數據的大小相同,您如何裁剪?你的意思是你想調整它的大小? – 2013-04-24 21:47:42
@TanyunLing不,他們沒有相同的尺寸。我在圖像器官的地標之間進行轉換。所以變換將保持器官具有相同的大小,但不是圖像。 – Yao 2013-04-25 11:37:17