[Insight-users] Gatens Label Object Representation and Manipulation

Gaëtan Lehmann gaetan.lehmann at jouy.inra.fr
Sun Feb 28 10:07:30 EST 2010


Hi Christian,

The output pixel type must be a RGBPixel. See an example at

   http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/Review/itkLabelToRGBImageFilterTest.cxx?revision=1.3&root=Insight&view=markup

Regards,

Gaëtan


Le 28 févr. 10 à 15:38, Christian Werner a écrit :

> Hello!
>
> Thanks for your reply. The itk:: prefix indeed helped me getting a  
> few lines further. Now I get errors when I want to instantiate a  
> LabelToRGBImageType. I have attached my little program. Its simple  
> purpose is to do some thresholding and then display all ojects in  
> color and save the resulting file. It would be nice if you could  
> help me here.
>
> The following errors all come from the very last line in the code  
> before everything else is commented out.
>
>
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h: In  
> constructor ‘itk::Functor::LabelToRGBFunctor<TLabel,  
> TRGBPixel>::LabelToRGBFunctor() [with TLabel = unsigned int,  
> TRGBPixel = unsigned char]’:                           /home/ 
> christian/programming/itk/labeling/itkLabelMapToRGBImageFilter.cxx: 
> 42:   instantiated from ‘void  
> itk::LabelMapToRGBImageFilter<TInputImage,  
> TOutputImage>::BeforeThreadedGenerateData() [with TInputImage =  
> itk::LabelMap<itk::ShapeLabelObject<unsigned int, 2u> >,  
> TOutputImage = itk::Image<unsigned char,  
> 2u>]’                                        /home/christian/ 
> programming/itk/labeling/testITK.cxx:75:   instantiated from  
> here                                    /opt/InsightToolkit-3.16.0/ 
> Code/Review/itkLabelToRGBFunctor.h:51: error: ‘unsigned char’ is not  
> a class, struct, or union type
> /home/christian/programming/itk/labeling/ 
> itkLabelMapToRGBImageFilter.cxx:42:   instantiated from ‘void  
> itk::LabelMapToRGBImageFilter<TInputImage,  
> TOutputImage>::BeforeThreadedGenerateData() [with TInputImage =  
> itk::LabelMap<itk::ShapeLabelObject<unsigned int, 2u> >,  
> TOutputImage = itk::Image<unsigned char, 2u>]’
> /home/christian/programming/itk/labeling/testITK.cxx:75:    
> instantiated from here
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h:98:  
> error: request for member ‘Fill’ in  
> ‘((itk::Functor::LabelToRGBFunctor<unsigned int, unsigned  
> char>*)this)->itk::Functor::LabelToRGBFunctor<unsigned int, unsigned  
> char>::m_BackgroundColor’, which is of non-class type ‘unsigned char’
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h:98:  
> error: ‘unsigned char’ is not a class, struct, or union type
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h:50:  
> warning: unused variable ‘rgbPixel’
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h: In  
> member function ‘void itk::Functor::LabelToRGBFunctor<TLabel,  
> TRGBPixel>::AddColor(unsigned char, unsigned char, unsigned char)  
> [with TLabel = unsigned int, TRGBPixel = unsigned char]’:
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h:65:    
> instantiated from ‘itk::Functor::LabelToRGBFunctor<TLabel,  
> TRGBPixel>::LabelToRGBFunctor() [with TLabel = unsigned int,  
> TRGBPixel = unsigned char]’
> /home/christian/programming/itk/labeling/ 
> itkLabelMapToRGBImageFilter.cxx:42:   instantiated from ‘void  
> itk::LabelMapToRGBImageFilter<TInputImage,  
> TOutputImage>::BeforeThreadedGenerateData() [with TInputImage =  
> itk::LabelMap<itk::ShapeLabelObject<unsigned int, 2u> >,  
> TOutputImage = itk::Image<unsigned char, 2u>]’
> /home/christian/programming/itk/labeling/testITK.cxx:75:    
> instantiated from here
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h:118:  
> error: ‘unsigned char’ is not a class, struct, or union type
> /opt/InsightToolkit-3.16.0/Code/Review/itkLabelToRGBFunctor.h:122:  
> error: request for member ‘Set’ in ‘rgbPixel’, which is of non-class  
> type ‘unsigned char’
>
>
>
>
> Gaëtan Lehmann wrote:
>>
>> Le 27 févr. 10 à 22:59, Christian Werner a écrit :
>>
>>> Hi!
>>>
>>> Yes, USE_REVIEW is on I am sure about that since I already built  
>>> some libraries. I am using Debian Lenny and gcc 4.4.3. But maybe  
>>> it is only because I misunderstand something.
>>>
>>> I see that I need label objects anyway, so it does not harm if I  
>>> include them in my own code. But I was really confused about  
>>> getting errors when just including a single header. Shouldn't this  
>>> header take care of his own dependencies?
>>>
>>> Anyway, these 3 lines are the very beginning of my labeling try  
>>> and these already produce errors:
>>>
>>> typedef itk::Image< unsigned char,  2 >   InputImageType;
>>> ...
>>> 56  typedef ShapeLabelObject<unsigned char, 2> LabelObjectType;
>>> 57  typedef LabelMap< LabelObjectType >        LabelMapType;
>>
>> shouldn't you add the itk:: prefix to those typedefs?
>>
>> typedef itk::ShapeLabelObject<unsigned char, 2> LabelObjectType;
>> typedef LabelMap< LabelObjectType >        LabelMapType;
>>
>> a few other notes:
>>
>> * you may be careful about the type used to store the labels -  
>> unsigned char is likely to become quickly unable to store all the  
>> labels in your image
>> * when using ShapeLabelObject, it is convenient to use  
>> BinaryImageToShapeLabelMapFilter instead of  
>> BinaryImageToLabelMapFilter: the attribute values are computed with  
>> a single filter, and it can be declared simply as
>>
>>  typedef itk::BinaryImageToLabelMapFilter<InputImageType>  
>> ImageToLabelType;
>>
>> without much type declaration.
>>
>> Gaëtan
>>
>>> 58  typedef itk::BinaryImageToLabelMapFilter<InputImageType,  
>>> LabelMapType> ImageToLabelType;
>>> 59  //2)
>>> 60  ImageToLabelType::Pointer image2LabelMap =  
>>> ImageToLabelType::New();
>>>
>>> Compiler Errors:
>>> /home/christian/programming/itk/labeling/testITK.cxx: In function  
>>> ‘int main(int, char**)’:
>>> /home/christian/programming/itk/labeling/testITK.cxx:56: error:  
>>> expected initializer before ‘<’ token
>>> /home/christian/programming/itk/labeling/testITK.cxx:57: error:  
>>> expected initializer before ‘<’ token
>>> /home/christian/programming/itk/labeling/testITK.cxx:58: error:  
>>> ‘LabelMapType’ was not declared in this scope
>>> /home/christian/programming/itk/labeling/testITK.cxx:58: error:  
>>> template argument 2 is invalid
>>> /home/christian/programming/itk/labeling/testITK.cxx:58: error:  
>>> invalid type in declaration before ‘;’ token
>>> /home/christian/programming/itk/labeling/testITK.cxx:60: error:  
>>> expected initializer before ‘image2LabelMap’
>>>
>>> Maybe I don't get this labeling right... ?
>>>
>>> This is what I include now:
>>>
>>> #include "itkImageToImageFilter.h"
>>> #include "itkShapeLabelObject.h"
>>> #include "itkLabelMap.h"
>>> #include "itkBinaryImageToLabelMapFilter.h"
>>> #include "itkLabelMapToRGBImageFilter.h"
>>>
>>>
>>>
>>> Bill Lorensen wrote:
>>>> When you configured ITK did you build with USE_REVIEW ON?
>>>>
>>>> If so, what platform/compiler are you using?
>>>>
>>>> Bill
>>>>
>>>> On Sat, Feb 27, 2010 at 2:24 PM, Christian Werner
>>>> <christian.werner at rwth-aachen.de> wrote:
>>>>
>>>>> Hello!
>>>>>
>>>>> I am off to make some serious object labling and manipulation.  
>>>>> Unfortunately
>>>>> some very basic code does not compile:
>>>>>
>>>>> #include "itkBinaryImageToLabelMapFilter.h"
>>>>> int main( int argc, char * argv[] )
>>>>> {
>>>>> }
>>>>>
>>>>> christian at trinity:~/programming/itk/labeling/bin$ make -j2
>>>>> Scanning dependencies of target testITK
>>>>> [100%] Building CXX object CMakeFiles/testITK.dir/testITK.o
>>>>> In file included from
>>>>> /home/christian/programming/itk/labeling/testITK.cxx:2:
>>>>> /opt/InsightToolkit-3.16.0/Code/Review/ 
>>>>> itkBinaryImageToLabelMapFilter.h:54:
>>>>> error: expected type-specifier before ‘LabelMap’
>>>>> /opt/InsightToolkit-3.16.0/Code/Review/ 
>>>>> itkBinaryImageToLabelMapFilter.h:54:
>>>>> error: expected ‘>’ before ‘LabelMap’
>>>>> make[2]: *** [CMakeFiles/testITK.dir/testITK.o] Error 1
>>>>> make[1]: *** [CMakeFiles/testITK.dir/all] Error 2
>>>>> make: *** [all] Error 2
>>>>>
>>>>> I can fix this, when I edit (and this already feels bad) the
>>>>> itkBinaryImageToLabelMapFilter.h by adding
>>>>>
>>>>> #include "itkLabelMap.h"
>>>>> #include "itkLabelObject.h"
>>>>>
>>>>> The above code compiles this way. However if I actually use some  
>>>>> functions
>>>>> out of the itkBinaryImageToLabelMapFilter.h I get errors over  
>>>>> errors.
>>>>>
>>>>> My CMakeLists looks like this:
>>>>>
>>>>> cmake_minimum_required(VERSION 2.4)
>>>>>
>>>>> PROJECT(testITK)
>>>>>
>>>>> FIND_PACKAGE(ITK REQUIRED)
>>>>> IF(ITK_FOUND)
>>>>> INCLUDE(${ITK_USE_FILE})
>>>>> ENDIF(ITK_FOUND)
>>>>>
>>>>> ADD_EXECUTABLE(testITK testITK.cxx)
>>>>>
>>>>> TARGET_LINK_LIBRARIES(testITK ITKCommon ITKIO ITKBasicFilters  
>>>>> ITKStatistics)
>>>>>
>>>>>
>>>>> General ITK programming works without trouble. I must be doing  
>>>>> something
>>>>> totally wrong, any suggestions?
>>>>>
>>>>>
>>>>> 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
>>
>
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
>
> #include "itkBinaryThresholdImageFilter.h"
>
> #include "itkImageToImageFilter.h"
> #include "itkShapeLabelObject.h"
> #include "itkLabelMap.h"
> #include "itkBinaryImageToLabelMapFilter.h"
> #include "itkLabelMapToRGBImageFilter.h"
>
> int main( int argc, char * argv[] )
> {
>  if( argc < 5 )
>    {
>    std::cerr << "Usage: " << argv[0];
>    std::cerr << " inputImageFile outputImageFile ";
>    std::cerr << " lowerThreshold upperThreshold " << std::endl;
>    //std::cerr << " outsideValue insideValue   "  << std::endl;
>    return EXIT_FAILURE;
>    }
>
>  typedef  unsigned char  InputPixelType;
>  typedef  unsigned char  OutputPixelType;
>  typedef itk::Image< InputPixelType,  2 >   InputImageType;
>  typedef itk::Image< OutputPixelType, 2 >   OutputImageType;
>  typedef itk::BinaryThresholdImageFilter<
>               InputImageType, OutputImageType >  FilterType;
>  typedef itk::ImageFileReader< InputImageType >  ReaderType;
>  typedef itk::ImageFileWriter< OutputImageType >  WriterType;
>
>  ReaderType::Pointer reader = ReaderType::New();
>  FilterType::Pointer filter = FilterType::New();
>
>  reader->SetFileName( argv[1] );
>
>  /// filtering
>  filter->SetInput( reader->GetOutput() );
>  const OutputPixelType outsideValue = 0;
>  const OutputPixelType insideValue  = 255;
>  filter->SetOutsideValue( outsideValue );
>  filter->SetInsideValue(  insideValue  );
>  const InputPixelType lowerThreshold = atoi(argv[3]);
>  const InputPixelType upperThreshold = atoi(argv[4]);
>
>  filter->SetLowerThreshold( lowerThreshold );
>  filter->SetUpperThreshold( upperThreshold );
>  // Software Guide : EndCodeSnippet
>
>  filter->Update();
>
>  /// labeling
>  //1)
>  typedef itk::ShapeLabelObject<unsigned int, 2> LabelObjectType;
>  typedef itk::LabelMap< LabelObjectType >       LabelMapType;
>  typedef itk::BinaryImageToLabelMapFilter<InputImageType,  
> LabelMapType> ImageToLabelType;
>  typedef itk::LabelMapToRGBImageFilter<LabelMapType,  
> OutputImageType>   LabelToRGBImageType;
>  //2)
>  ImageToLabelType::Pointer image2LabelMap    =  
> ImageToLabelType::New();
>  LabelToRGBImageType::Pointer label2RGBImage =  
> LabelToRGBImageType::New();
>  //image2LabelMap->SetInput( filter->getOutput() );
>  //label2RGBImage->SetInput( image2LabelMap->getOutput() );
>
>  ///save result image
>  //WriterType::Pointer writer = WriterType::New();
>  //writer->SetInput( label2RGBImage->GetOutput() );
>  //writer->SetFileName( argv[2] );
>  //writer->Update();
>
>  return EXIT_SUCCESS;
> }
> _____________________________________
> 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

-- 
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
http://voxel.jouy.inra.fr  http://www.itk.org
http://www.mandriva.org  http://www.bepo.fr

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 203 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <http://www.itk.org/pipermail/insight-users/attachments/20100228/ec8eb7ba/attachment-0001.pgp>


More information about the Insight-users mailing list