VTK三維重建 使用VTK讀取DICOM,並動態輸出


[效果顯示]

將腳部骨骼掃描的CT照片進行的連續讀取, 運行結果存為了兩個動態gif, 不知道能不能正常顯示

[主程序實現]

 1 int main(int argc, char* argv[])  2 {  3    // Verify input arguments
 4    if ( argc != 2 )  5  {  6       std::cout << "Usage: " << argv[0]  7       << " FolderName" << std::endl;  8       return EXIT_FAILURE;  9  } 10  
11    std::string folder = argv[1]; 12  
13    // Read all the DICOM files in the specified directory.
14    vtkSmartPointer<vtkDICOMImageReader> reader =
15       vtkSmartPointer<vtkDICOMImageReader>::New(); 16    reader->SetDirectoryName(folder.c_str()); 17    reader->Update(); 18  
19    // Visualize
20    vtkSmartPointer<vtkImageViewer2> imageViewer =
21       vtkSmartPointer<vtkImageViewer2>::New(); 22    imageViewer->SetInputConnection(reader->GetOutputPort()); 23  
24    // slice status message
25    vtkSmartPointer<vtkTextProperty> sliceTextProp = vtkSmartPointer<vtkTextProperty>::New(); 26    sliceTextProp->SetFontFamilyToCourier(); 27    sliceTextProp->SetFontSize(20); 28    sliceTextProp->SetVerticalJustificationToBottom(); 29    sliceTextProp->SetJustificationToLeft(); 30  
31    vtkSmartPointer<vtkTextMapper> sliceTextMapper = vtkSmartPointer<vtkTextMapper>::New(); 32    std::string msg = StatusMessage::Format(imageViewer->GetSliceMin(), imageViewer->GetSliceMax()); 33    sliceTextMapper->SetInput(msg.c_str()); 34    sliceTextMapper->SetTextProperty(sliceTextProp); 35  
36    vtkSmartPointer<vtkActor2D> sliceTextActor = vtkSmartPointer<vtkActor2D>::New(); 37    sliceTextActor->SetMapper(sliceTextMapper); 38    sliceTextActor->SetPosition(15, 10); 39  
40    // usage hint message
41    vtkSmartPointer<vtkTextProperty> usageTextProp = vtkSmartPointer<vtkTextProperty>::New(); 42    usageTextProp->SetFontFamilyToCourier(); 43    usageTextProp->SetFontSize(14); 44    usageTextProp->SetVerticalJustificationToTop(); 45    usageTextProp->SetJustificationToLeft(); 46  
47    vtkSmartPointer<vtkTextMapper> usageTextMapper = vtkSmartPointer<vtkTextMapper>::New(); 48    usageTextMapper->SetInput("- Slice with mouse wheel\n or Up/Down-Key\n- Zoom with pressed right\n mouse button while dragging"); 49    usageTextMapper->SetTextProperty(usageTextProp); 50  
51    vtkSmartPointer<vtkActor2D> usageTextActor = vtkSmartPointer<vtkActor2D>::New(); 52    usageTextActor->SetMapper(usageTextMapper); 53    usageTextActor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedDisplay(); 54    usageTextActor->GetPositionCoordinate()->SetValue( 0.05, 0.95); 55  
56    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
57       vtkSmartPointer<vtkRenderWindowInteractor>::New(); 58  
59    vtkSmartPointer<myVtkInteractorStyleImage> myInteractorStyle =
60       vtkSmartPointer<myVtkInteractorStyleImage>::New(); 61  
62    myInteractorStyle->SetImageViewer(imageViewer); 63    myInteractorStyle->SetStatusMapper(sliceTextMapper); 64  
65    imageViewer->SetupInteractor(renderWindowInteractor); 66    renderWindowInteractor->SetInteractorStyle(myInteractorStyle); 67  
68    imageViewer->GetRenderer()->AddActor2D(sliceTextActor); 69    imageViewer->GetRenderer()->AddActor2D(usageTextActor); 70  
71    imageViewer->Render(); 72    imageViewer->GetRenderer()->ResetCamera(); 73    imageViewer->Render(); 74    renderWindowInteractor->Start(); 75    return EXIT_SUCCESS; 76 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM