[vtkusers] Problem with vtk RayCasting: volume to be of pixel type unsigned char or unsigned short
Amy Squillacote
ahs at cfdrc.com
Tue Aug 19 12:26:49 EDT 2008
Hi Sara,
This problem is described in the following location in the VTK FAQ:
http://www.vtk.org/Wiki/VTK_FAQ#The_C.2B.2B_compiler_cannot_convert_some_pointer_type_to_another_pointer_type_in_my_little_program.
What you need to do is add #include "vtkImageData.h".
- Amy
sara meghellati wrote:
> Hi Amy
> Thank you for your help. vtkFixedPointVolumeRayCastMapper is well
> working. Also I have tried keeping vtkVolumeRayCastMapper with the use
> of vtkImageShiftScale filter but I het the folloing error regarding
> the statment : shifter->SetInput(vtkImporter->GetOutput());
>
>
> 1>..\test_itk.cxx(129) : error C2664: 'void
> vtkImageAlgorithm::SetInput(vtkDataObject *)' : cannot convert
> parameter 1 from 'vtkImageData *' to 'vtkDataObject *'
>
>
> Please do you know how to resolve this problem. I'm not expert; I’m
> just doing my first steps in vtk and itk.
> Thank you
>
>
> Sara
>
> this this the modified code :
>
>
> // The following example illustrates the use of the
> ConfidenceConnectedImageFilter. The criterion used by the
> // ConfidenceConnectedImageFilter is based on simple statistics of the
> current region.
> // 3D
> // The following example illustrates the use of the
> ConfidenceConnectedImageFilter. The criterion used by the
> // ConfidenceConnectedImageFilter is based on simple statistics of the
> current region.
> // 3D
> #include "itkConfidenceConnectedImageFilter.h"
> #include "itkImage.h"
> #include "itkCastImageFilter.h"
> #include "itkCurvatureFlowImageFilter.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkVTKImageExport.h"
> #include "itkVTKImageImport.h"
> #include "vtkImageImport.h"
> #include "vtkImageExport.h"
> #include "vtkImageReader.h"
> #include "vtkPiecewiseFunction.h"
> #include "vtkVolumeProperty.h"
> #include "vtkVolumeRayCastMapper.h"
> #include "vtkVolumeTextureMapper3D.h"
> #include "vtkFixedPointVolumeRayCastMapper.h"
> #include "vtkVolumeRayCastCompositeFunction.h"
> #include "vtkVolume.h"
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkImageShiftScale.h"
> #include "vtkFixedPointVolumeRayCastMapper.h"
> // This function will connect the given itk::VTKImageExport filter to
> the given vtkImageImport filter.
> template <typename ITK_Exporter, typename VTK_Importer>
> void ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer)
> {
> importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
> importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
> importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
> importer->SetSpacingCallback(exporter->GetSpacingCallback());
> importer->SetOriginCallback(exporter->GetOriginCallback());
> importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
> importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
> importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
> importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
> importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
> importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
> importer->SetCallbackUserData(exporter->GetCallbackUserData());
> }
> int main( )
> {
> //typedef unsigned short InputPixelType;
> typedef float InputPixelType;
> typedef unsigned char OutputPixelType;
> const unsigned int Dimension = 3;
> typedef itk::Image< InputPixelType, Dimension > InputImageType;
> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
> typedef itk::CastImageFilter< InputImageType, OutputImageType >
> CastingFilterType;
> typedef itk::ImageFileReader< InputImageType > ReaderType;
> typedef itk::ImageFileWriter< OutputImageType > WriterType;
> typedef itk::CurvatureFlowImageFilter< InputImageType, InputImageType
> > CurvatureFlowImageFilterType;
> typedef itk::ConfidenceConnectedImageFilter<InputImageType,
> InputImageType> ConnectedFilterType;
> CastingFilterType::Pointer caster = CastingFilterType::New();
> ReaderType::Pointer reader = ReaderType::New();
> WriterType::Pointer writer = WriterType::New();
> CurvatureFlowImageFilterType::Pointer smoothing =
> CurvatureFlowImageFilterType::New();
> ConnectedFilterType::Pointer confidenceConnected =
> ConnectedFilterType::New();
> reader->SetFileName( "c:/images/3DImages/Patient01.mhd" );
> writer->SetFileName( "c:/images/3DConfidenceConnectedSegmImg.mhd" );
> smoothing->SetInput( reader->GetOutput() );
> confidenceConnected->SetInput( smoothing->GetOutput() );
> caster->SetInput( confidenceConnected->GetOutput() );
> writer->SetInput( caster->GetOutput() );
> smoothing->SetNumberOfIterations( 5 );
> smoothing->SetTimeStep( 0.125 );
> confidenceConnected->SetMultiplier( 2.5 );
> confidenceConnected->SetNumberOfIterations( 5);
> confidenceConnected->SetReplaceValue( 255 );
> InputImageType::IndexType index;
> index[0] = atoi( "256" );
> index[1] = atoi( "256" );
> index[2] = atoi( "16" );
> confidenceConnected->SetSeed( index );
> confidenceConnected->SetInitialNeighborhoodRadius( 2 );
> try
> {
> writer->Update();
> }
> catch( itk::ExceptionObject & excep )
> {
> std::cerr << "Exception caught !" << std::endl;
> std::cerr << excep << std::endl;
> }
> typedef itk::VTKImageExport< InputImageType > ExportFilterType;
> ExportFilterType::Pointer itkExporter = ExportFilterType::New();
> itkExporter->SetInput(reader->GetOutput());
> // Create the vtkImageImport and connect it to the itk::VTKImageExport
> instance.
> vtkImageImport* vtkImporter = vtkImageImport::New();
> ConnectPipelines(itkExporter, vtkImporter);
> vtkImageShiftScale* shifter = vtkImageShiftScale::New();
> shifter->SetInput(vtkImporter->GetOutput());
> //shifter->SetScale(256);
> shifter->SetOutputScalarTypeToUnsignedChar();
> // Define opacity transfer function
> vtkPiecewiseFunction *opacityTransferFunction =
> vtkPiecewiseFunction::New();
> vtkVolume *volume = vtkVolume::New();
> vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
> vtkVolumeRayCastMapper *VolumeMapper = vtkVolumeRayCastMapper::New();
> vtkVolumeRayCastCompositeFunction *RayCastFunction
> =vtkVolumeRayCastCompositeFunction::New();
> // Volume property
> opacityTransferFunction->AddPoint(0,0.001);
> opacityTransferFunction->AddPoint(255,0.2);
> volumeProperty->SetScalarOpacity(opacityTransferFunction);
> volumeProperty->SetInterpolationTypeToLinear();
> volumeProperty->ShadeOff();
> // Volume mapper
> VolumeMapper->SetVolumeRayCastFunction(RayCastFunction);
> VolumeMapper->SetSampleDistance(1.0);
> VolumeMapper->SetBlendModeToMaximumIntensity();
> //VolumeMapper->SetInput(vtkImporter->GetOutput() );
> VolumeMapper->SetInput(shifter->GetOutput() );
> // The volume
> volume->SetMapper(VolumeMapper);
> volume->SetProperty(volumeProperty);
> // Create a renderer, render window, and render window interactor to
> display the results.
> vtkRenderer *Renderer = vtkRenderer::New();
> vtkRenderWindow *RenWin = vtkRenderWindow::New();
> vtkRenderWindowInteractor *RenWinInterc =
> vtkRenderWindowInteractor::New();
> RenWin->AddRenderer(Renderer);
> RenWinInterc->SetRenderWindow(RenWin);
> //Renderer->AddActor(volume);
> Renderer->AddVolume(volume);
> Renderer->SetBackground(1,1,1);
> RenWin->Render();
> RenWinInterc->Initialize();
> RenWinInterc->Start();
> // Release all VTK components
> RenWinInterc->Delete();
> RenWin->Delete();
> Renderer->Delete();
> volume->Delete();
> VolumeMapper->Delete();
> volumeProperty->Delete();
> opacityTransferFunction->Delete();
> std::cout << "Code end !" << std::endl;
> std::cin.get();
> return 0;
> }
>
>
>
>
>
> --- En date de : *Mar 19.8.08, Amy Squillacote /<ahs at cfdrc.com>/* a
> écrit :
>
> De: Amy Squillacote <ahs at cfdrc.com>
> Objet: Re: [vtkusers] Problem with vtk RayCasting: volume to be of
> pixel type unsigned char or unsigned short
> À: sara_meghellati at yahoo.fr
> Cc: vtkusers at vtk.org
> Date: Mardi 19 Août 2008, 15h21
>
> Hi Sara,
>
> The vtkFixedPointVolumeRayCastMapper can handle float data, so try using
> it instead of vtkVolumeRayCastMapper. If for some reason you need to use
> vtkVolumeRayCastMapper, you should pass your vtkImageData through a
> vtkImageShiftScale filter to convert it to unsigned char or unsigned
> short, and then pass the output of that filter to the mapper.
>
> - Amy
>
> sara meghellati wrote:
> >
> > Hi all,
> > I have segmented 3D image using region growing method (using itk) and
> > I want to display the original volume(float type) using vtk. I got an
> > error at run time stating that vtk raycasting requires the volume to
> > be of pixel type unsigned char or unsigned short. I'm converting the
> > vtkimport that I use to unsigned char using the function
> > SetDataScalarTypeToChar() but I still get the error. The code is bellow.
> > Any help is very appreciated.
> > Thank you for your time
> > Sara
> >
> >
> > #include "itkConfidenceConnectedImageFilter.h"
> > #include "itkImage.h"
> > #include "itkCastImageFilter.h"
> > #include "itkCurvatureFlowImageFilter.h"
> > #include "itkImageFileReader.h"
> > #include "itkImageFileWriter.h"
> > #include "itkVTKImageExport.h"
> > #include "itkVTKImageImport.h"
> > #include "vtkImageImport.h"
> > #include "vtkImageExport.h"
> > #include "vtkImageReader.h"
> > #include "vtkPiecewiseFunction.h"
> > #include "vtkVolumeProperty.h"
> > #include "vtkVolumeRayCastMapper.h"
> > #include "vtkVolumeTextureMapper3D.h"
> > #include "vtkFixedPointVolumeRayCastMapper.h"
> > #include "vtkVolumeRayCastCompositeFunction.h"
> > #include "vtkVolume.h"
> > #include "vtkRenderer.h"
> > #include "vtkRenderWindow.h"
> > #include "vtkRenderWindowInteractor.h"
> > // This function will connect the given itk::VTKImageExport filter to
> > the given vtkImageImport filter.
> > template <typename ITK_Exporter, typename VTK_Importer>
> > void ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer)
> > {
> >
> importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
> >
> importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
> >
> importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
> > importer->SetSpacingCallback(exporter->GetSpacingCallback());
> > importer->SetOriginCallback(exporter->GetOriginCallback());
> > importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
> >
> importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
> >
> importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
> > importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
> > importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
> >
> importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
> > importer->SetCallbackUserData(exporter->GetCallbackUserData());
> > }
> > int main( )
> > {
> > //typedef unsigned short InputPixelType;
> > typedef float InputPixelType;
> > typedef unsigned char OutputPixelType;
> > const unsigned int Dimension = 3;
> > typedef itk::Image< InputPixelType, Dimension > InputImageType;
> > typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
> > typedef itk::CastImageFilter< InputImageType, OutputImageType >
> > CastingFilterType;
> > typedef itk::ImageFileReader< InputImageType > ReaderType;
> > typedef itk::ImageFileWriter< OutputImageType > WriterType;
> > typedef itk::CurvatureFlowImageFilter< InputImageType, InputImageType
> > > CurvatureFlowImageFilterType;
> > typedef itk::ConfidenceConnectedImageFilter<InputImageType,
> > InputImageType> ConnectedFilterType;
> > CastingFilterType::Pointer caster = CastingFilterType::New();
> > ReaderType::Pointer reader = ReaderType::New();
> > WriterType::Pointer writer = WriterType::New();
> > CurvatureFlowImageFilterType::Pointer smoothing =
> > CurvatureFlowImageFilterType::New();
> > ConnectedFilterType::Pointer confidenceConnected =
> > ConnectedFilterType::New();
> > reader->SetFileName( "c:/images/Patient01.mhd" );
> > writer->SetFileName(
> "c:/images/3DConfidenceConnectedSegmImg.mhd" );
> > smoothing->SetInput( reader->GetOutput() );
> > confidenceConnected->SetInput( smoothing->GetOutput() );
> > caster->SetInput( confidenceConnected->GetOutput() );
> > writer->SetInput( caster->GetOutput() );
> > smoothing->SetNumberOfIterations( 5 );
> > smoothing->SetTimeStep( 0.125 );
> > confidenceConnected->SetMultiplier( 2.5 );
> > confidenceConnected->SetNumberOfIterations( 2 );
> > confidenceConnected->SetReplaceValue( 255 );
> > InputImageType::IndexType index;
> > index[0] = atoi( "256" );
> > index[1] = atoi( "256" );
> > index[2] = atoi( "16" );
> > confidenceConnected->SetSeed( index );
> > confidenceConnected->SetInitialNeighborhoodRadius( 2 );
> > try
> > {
> > writer->Update();
> > }
> > catch( itk::ExceptionObject & excep )
> > {
> > std::cerr << "Exception caught !" << std::endl;
> > std::cerr << excep << std::endl;
> > }
> > //----------------------------------------------
> > // -------------------- vtk Display----------------
> > //----------------------------------------------
> > typedef itk::VTKImageExport< InputImageType > ExportFilterType;
> > ExportFilterType::Pointer itkExporter = ExportFilterType::New();
> > itkExporter->SetInput(reader->GetOutput());
> > vtkImageImport* vtkImporter = vtkImageImport::New();
> > ConnectPipelines(itkExporter, vtkImporter);
> > vtkImporter->SetDataScalarTypeToUnsignedChar();
> > // Define opacity transfer function
> > vtkPiecewiseFunction *opacityTransferFunction =
> > vtkPiecewiseFunction::New();
> > vtkVolume *volume = vtkVolume::New();
> > vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
> > vtkVolumeRayCastMapper *VolumeMapper = vtkVolumeRayCastMapper::New();
> > vtkVolumeRayCastCompositeFunction *RayCastFunction
> > =vtkVolumeRayCastCompositeFunction::New();
> > // Volume property
> > opacityTransferFunction->AddPoint(0,0.001);
> > opacityTransferFunction->AddPoint(255,0.2);
> > volumeProperty->SetScalarOpacity(opacityTransferFunction);
> > volumeProperty->SetInterpolationTypeToLinear();
> > volumeProperty->ShadeOff();
> > // Volume mapper
> > VolumeMapper->SetVolumeRayCastFunction(RayCastFunction);
> > VolumeMapper->SetSampleDistance(1.0);
> > VolumeMapper->SetBlendModeToMaximumIntensity();
> > VolumeMapper->SetInput(vtkImporter->GetOutput() );
> > // The volume
> > volume->SetMapper(VolumeMapper);
> > volume->SetProperty(volumeProperty);
> > // Create a renderer, render window, and render window interactor to
> > display the results.
> > vtkRenderer *Renderer = vtkRenderer::New();
> > vtkRenderWindow *RenWin = vtkRenderWindow::New();
> > vtkRenderWindowInteractor *RenWinInterc =
> > vtkRenderWindowInteractor::New();
> > RenWin->AddRenderer(Renderer);
> > RenWinInterc->SetRenderWindow(RenWin);
> > Renderer->AddVolume(volume);
> > Renderer->SetBackground(1,1,1);
> > RenWin->Render();
> > RenWinInterc->Initialize();
> > RenWinInterc->Start();
> > // Release all VTK components
> > RenWinInterc->Delete();
> > RenWin->Delete();
> > Renderer->Delete();
> > volume->Delete();
> > VolumeMapper->Delete();
> > volumeProperty->Delete();
> > opacityTransferFunction->Delete();
> >
> > return 0;
> > }
> >
> >
> > ------------------------------------------------------------------------
> > Envoyé avec Yahoo! Mail
> >
> <http://us.rd.yahoo.com/mailuk/taglines/isp/control/*http://us.rd.yahoo.com/evt=52423/*http://fr.docs.yahoo.com/mail/overview/index.html>.
> > Une boite mail plus intelligente.
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > This is the private VTK discussion list.
> > Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> > Follow this link to subscribe/unsubscribe:
> > http://www.vtk.org/mailman/listinfo/vtkusers
> >
>
> --
> Amy Squillacote Phone: (256) 726-4839
> Computer Scientist Fax: (256) 726-4806
> CFD Research Corporation Web: http://www.cfdrc.com
> 215 Wynn Drive, Suite 501
> Huntsville, AL 35805
>
>
>
>
>
> ------------------------------------------------------------------------
> Envoyé avec Yahoo! Mail
> <http://us.rd.yahoo.com/mailuk/taglines/isp/control/*http://us.rd.yahoo.com/evt=52423/*http://fr.docs.yahoo.com/mail/overview/index.html>.
> Une boite mail plus intelligente.
--
Amy Squillacote Phone: (256) 726-4839
Computer Scientist Fax: (256) 726-4806
CFD Research Corporation Web: http://www.cfdrc.com
215 Wynn Drive, Suite 501
Huntsville, AL 35805
More information about the vtkusers
mailing list