2015-04-24 29 views
0

我是ITK和VTK醫學影像編程的初學者。 我想將以下代碼用作ITK讀取圖像並由VTK顯示它。沒有其他選擇。我已經「建立」和「運行」「成功」。 但我無法在VTK窗口中看到圖像。ITK VTK的組合

#include "itkPNGImageIO.h" 
#include "itkImage.h" 
#include "itkImageFileReader.h" 
#include "itkImageToVTKImageFilter.h" 

#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL) 
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL) 

#include "vtkImageViewer.h" 
#include "vtkRenderWindowInteractor.h" 
#include "vtkImageActor.h" 
#include "vtkRenderer.h" 
#include "vtkRenderWindow.h" 

int main() 
{ 
    typedef itk::Image<unsigned short,2> ImageType; 
    typedef itk::ImageFileReader<ImageType> ReaderType; 
    typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType; 

    ReaderType::Pointer reader= ReaderType::New(); 
    ConnectorType::Pointer connector= ConnectorType::New(); 
    reader->SetFileName("BrainT1Slice.png"); 
    reader->SetImageIO(itk::PNGImageIO::New()); 
    connector->SetInput(reader->GetOutput()); 

    vtkImageActor *actor = vtkImageActor::New(); 
    actor->SetInputData(connector->GetOutput()); 
    vtkRenderer * ren = vtkRenderer::New(); 
    ren->AddActor(actor); 
    vtkRenderWindow *renWin = vtkRenderWindow::New(); 
    renWin->AddRenderer(ren); 

    vtkImageViewer* viewer= vtkImageViewer::New(); 
    vtkRenderWindowInteractor* renderWindowInteractor=vtkRenderWindowInteractor::New(); 
    viewer->SetInputData(connector->GetOutput()); 
    viewer->SetupInteractor(renderWindowInteractor); 
    viewer->SetColorWindow(255); 
    viewer->SetColorLevel(128); 
    viewer->Render(); 
    renderWindowInteractor->Initialize(); 
    renderWindowInteractor->Start(); 

    return 0; 
} 

當連接器傳輸數據給actor時會發生什麼? 我使用「itk-4.6.0」,「vtk-6.2.0」(都成功建立)和「vs2010」。

回答

2

我想將您的代碼與示例http://itk.org/Wiki/ITK/Examples/IO/ImageToVTKImageFilter進行比較。由於使用vtk6(在本例中,它是VTK_MAJOR_VERSION <的其他= 5),嘗試更換

actor->SetInputData(connector->GetOutput()); 

connector->Update(); 
actor->GetMapper()->SetInputData(connector->GetOutput()); 

如果仍然不工作,檢查是否有正確讀取數據,例如使用MinimumMaximumImageCalculator檢查強度範圍http://itk.org/Wiki/ITK/Examples/ImageProcessing/MinimumMaximumImageCalculator

請注意圖像的數據類型。難道你的PNG實際上是一個RGB圖像? (例如,請參閱http://www.na-mic.org/svn/Slicer3-lib-mirrors/trunk/Insight/Testing/Code/IO/itkPNGImageIOTest.cxx

+0

謝謝。只是connector-> update()很好。感到不好意識到這條管道。 – Xavier

+0

我認爲錯過管道中的更新已經咬傷ITK每個初學者:) p.s如果它解決了你的問題,你能接受答案嗎? – lib