简体   繁体   中英

the combination of ITK VTK

I am a beginner of medical imaging programming of ITK and VTK. I want to using The following code as reading image by ITK and showing it by VTK. There is no other options. And I have it "build" and "run" "successfully". But I can't see the image in the VTK window.

#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;
}

What happens when connector transports data to actor? I use "itk-4.6.0", "vtk-6.2.0"(both are successfully established) and "vs2010".

I am trying to compare your code to the example http://itk.org/Wiki/ITK/Examples/IO/ImageToVTKImageFilter . Since you are using vtk6 (in the example, it's the else of VTK_MAJOR_VERSION <= 5 ) , try to replace

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

with

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

If it still doesn't work, check that you have read the data correctly, for example use the MinimumMaximumImageCalculator to check the intensity range http://itk.org/Wiki/ITK/Examples/ImageProcessing/MinimumMaximumImageCalculator

Be also careful with the data type of your image. Could it be that your png is actually a RGB image? (for an example, see http://www.na-mic.org/svn/Slicer3-lib-mirrors/trunk/Insight/Testing/Code/IO/itkPNGImageIOTest.cxx )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM