[vtkusers] How do i port an image from ITK to VTK

Prename Surname bsd.diverse at gmail.com
Wed Oct 11 13:25:30 EDT 2006


Hello again.
I managed to compile and run the program. But there seems to be a problem.
The output just shows static noise, it can be seen here:
http://www.coachkontakt.dk/rendered.jpg

A cube of green static noise. The image should be okay since i have seen it
in other programs where it looks just fine. So i suspect something has gone
wrong in the conversion.
I am a bit lost here, I hope you have some suggestions as of what is wrong.

Thank you very much.

My code looks like this :

//Used for the analyze reader
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"//

#include "itkImageToVTKImageFilter.h"//Makes ITK->VTK pipeline (remember to
set path in CMakeLists.txt firs)

#include "vtkImageViewer.h"//Makes 2D images in VTK

//Use for volumerendering
#include "vtkStructuredPointsReader.h"
#include "vtkPiecewiseFunction.h"
#include "vtkColorTransferFunction.h"
#include "vtkVolumeProperty.h"
#include "vtkVolumeRayCastCompositeFunction.h"
#include "vtkVolumeRayCastMapper.h"
#include "vtkVolume.h"


//Used for the vtk examples
#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"

#include "itkVTKImageExport.h"
#include "vtkImageImport.h"

//Used for string manipulation in c++
#include <strstream>
#include <string>
#include <iostream>

void showSphere();
void readAFile();

int main( int , char * argv[])
{
 typedef unsigned char PixelType;
 const unsigned int Dimension=3;

 typedef itk::Image<PixelType,Dimension> ImageType;
 typedef itk::ImageFileReader<ImageType> ReaderType;
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;

 ReaderType::Pointer reader = ReaderType::New();
 ConnectorType::Pointer connector = ConnectorType::New();

 reader->SetFileName("D:\\skole\\thesis\\Data\\KDIGWKFN\\ANALYZE\\KDIGWKFN_mpr_pip.img");
 connector->SetInput(reader->GetOutput());//In connector lies now the
imagedata. Retrieve it by calling GetOutput()

 vtkStructuredPointsReader *vtkReader=vtkStructuredPointsReader::New();


 //Create transfer mapping scalar value to color
 vtkPiecewiseFunction *opacityTransferfunction=vtkPiecewiseFunction::New();
 opacityTransferfunction->AddPoint(20.,0.0);
 opacityTransferfunction->AddPoint(255.,0.2);

 vtkColorTransferFunction
*colorTransferFunction=vtkColorTransferFunction::New();
 colorTransferFunction->AddRGBPoint(0.0,0.0,0.0,0.0);
 colorTransferFunction->AddRGBPoint(64.0,1.0,0.0,0.0);
 colorTransferFunction->AddRGBPoint(128.0,0.0,0.0,1.0);
 colorTransferFunction->AddRGBPoint(192.0,0.0,1.0,0.0);
 colorTransferFunction->AddRGBPoint(255.0,0.0,0.2,0.0);

 vtkVolumeProperty *volumeProperty=vtkVolumeProperty::New();
 volumeProperty->SetColor(colorTransferFunction);
 volumeProperty->SetScalarOpacity(opacityTransferfunction);

 vtkVolumeRayCastCompositeFunction *compositeFunction =
vtkVolumeRayCastCompositeFunction::New();
 vtkVolumeRayCastMapper *volumeMapper=vtkVolumeRayCastMapper::New();
 volumeMapper->SetVolumeRayCastFunction(compositeFunction);
 volumeMapper->SetInput(connector->GetOutput());

 vtkVolume *volume=vtkVolume::New();
 volume->SetMapper(volumeMapper);
 volume->SetProperty(volumeProperty);

 // A renderer and render window
 vtkRenderer *ren1 = vtkRenderer::New();
 vtkRenderWindow *renWin = vtkRenderWindow::New();

 vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
 iren->SetRenderWindow(renWin);



 // Add the actor to the scene
 ren1->AddProp(volume);

 renWin->AddRenderer(ren1);

 //Render an image(lights and camera are created automatically)
 renWin->Render();

 //Begin mouse interaction
 iren->Start();

 return 0;
}



2006/10/11, Kevin H. Hobbs <hobbsk at ohiou.edu>:
>
> On Wed, 2006-10-11 at 16:07 +0200, Prename Surname wrote:
> > Hello Brian.
> > I have tried to do what you said, and it makes good sense. I think i
> > almost got i working, but i still have a doubt about how exactly i can
> > connect the
> > itk::ImageToVTKImageFilter to the vtkVolumeRayCastMapper.
> > It seems that  ImageToVTKImageFilter->GetOutput(...) returns a
> > vtkImageData, and
> > vtkVolumeRayCastMapper->SetInputConnection(...) only accepts a
> > vtkAlgorithmOutput object.
> >
> >
>
> I do VTK -> ITK -> VTK to stream through ITK filters in the attached
> file. I want the pieces in a specific order so I mess with them. You can
> ignore that part.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20061011/973037db/attachment.htm>


More information about the vtkusers mailing list