[Insight-users] VTKImageImport - Input Components Mayhem
Christian Werner
christian.werner at rwth-aachen.de
Wed Feb 17 14:22:47 EST 2010
Gee, that's embarassing. All the headache just because I did not know
how to properly set up RGB PixelTypes in ITK. But one thing was really
irritating and working against me:
The ITK Reference on the itkVTKImageImporter states:
"Note that the VTK images are assumed to be of 1, 2, or 3 dimensions.
Scalar value types can be one of: float, ... The images must have pixel
types with one component."
Do I misunderstand something here?? "The Images must have pixel types
with one component", what does that mean? I nearly spammed the VTK
Mailing List on how to convert vtkImageData to Data which have one
scalar component per pixel...
The other irritating thing was that I found one post where somebody told
the poster to use SetNumberOfScalarComponents(1) before importing to
ITK. That is not a good choice, because you corrupt your data that way...
Anyway I am glad everything works fine. In case somebody wants to know:
typedef itk::RGBPixel< unsigned char > PixelType;
typedef itk::Image<PixelType, DIM> InputType;
that does the trick and any itkVTKImageImporter instantiated that way is
happy with RGB images from VTK!
Are there still more PixelTypes I have to account for?
Best regards,
Christian
Christian Werner wrote:
> Hi Luis!
>
> I am instatiating according to what I get from
>
> vtkInput->GetDataDimension();
> vtkInput->GetScalarTypeAsString();
>
> and (DIM is a template parameter)
>
> if (strcmp("unsigned char", scalarTypeString) == 0) {
> typedef itk::Image<unsigned char, DIM> InputType;
> return applyConversion<InputType>(vtkOutImage); //return
> vtkImageData*
> ...
>
> and then I call my templated conversion functions, which instantias
> the Importer:
>
> template <typename InputType>
> applyConversion(vtkImageData* vtkSourceImage)
> {
> //vtkErrorMacro(<<"Applying Conversion...");
>
> typedef itk::VTKImageImport<InputType> ImageImportType;
> typename ImageImportType::Pointer itkImporter;
> itkImporter = ImageImportType::New();
> vtkImageExport* vtkExporter = vtkImageExport::New();
> vtkExporter->SetInput( vtkSourceImage) );
> ...ConnectPipelines...
> }
>
> =>corrupted ITK image or
>
> (ERROR: VTKImageImport(0x22900f0): Input number of components is 3 but
> should be 1)
>
> if I do not set the number of scalar components to 1.
>
> So I don't really have any influence here. Is there some information
> that I am missing? Aren't the number of components passed by the
> SetNumberOfComponentsCallback(...) in the ConnectPipelines?
>
> Best regards,
> Christian
>
>
>
> Luis Ibanez wrote:
>> Hi Christian,
>>
>> Does your image actually has 3 components ?
>>
>> Are you instantiating the ITK image with a pixel
>> type that has 3 components ?
>>
>> The typedef for the ITK image was not included
>> in your email.
>>
>>
>> Please let us know,
>>
>>
>> Thanks
>>
>>
>> Luis
>>
>>
>> ----------------------------------------------------
>> On Mon, Feb 15, 2010 at 4:04 PM, Christian Werner
>> <christian.werner at rwth-aachen.de> wrote:
>>
>>> Hello!
>>>
>>> At first I want to thank Arunachalam and Wagner for their responses
>>> on my
>>> last thread, thanks! :-) I finally managed to implement my vtk2itk2vtk
>>> templated super-class. It works with one little flaw:
>>>
>>> I have to SetNumberOfScalarComponents my vtkImageData to 1 before going
>>> through the whole conversion loop...
>>> (ERROR: VTKImageImport(0x22900f0): Input number of components is 3 but
>>> should be 1)
>>>
>>> This is bad, because the image content is clearly corrupted that
>>> way. It
>>> goes well through my vtk2itk2vtk and I can save a result vtk image,
>>> but this
>>> is distorted, as I fiddled around with these scalar components. Also
>>> the ITK
>>> filters I want to use on my import complain about
>>>
>>> ERROR: In /opt/ParaView3/VTK/Filtering/vtkImageData.cxx, line 1473
>>> vtkImageData (0x228afd0): GetScalarPointer: Pixel (0, 0, 0) not in
>>> memory.
>>> Current extent= (0, -1, 0, -1, 0, 0)
>>>
>>>
>>> This is how my pipelines connect:
>>>
>>> template <typename VTK_Exporter, typename ITK_Importer>
>>> void ConnectPipelines(VTK_Exporter* exporter, ITK_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());
>>> }
>>>
>>> I hope this can easily be fixed as I am so happy that after working the
>>> whole day on that vtk2itk2vtk stuff I finally got a vtk image that goes
>>> through this conversion jungle. How can it be equipped to survive this
>>> adventure undistorted?
>>>
>>>
>>> Best regards,
>>> Christian
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
More information about the Insight-users
mailing list