[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