[Insight-users] Gatens Label Object Representation and Manipulation

Christian Werner christian.werner at rwth-aachen.de
Mon Mar 1 04:25:56 EST 2010


Hi!

I have implemented your suggestion. I now draw a white pixel into the 
image that is produced by the LabelMapToRGBImageFilter. I also drawed a 
black one next to the white one. Then I tried drawing all different 
kinds of pixel. They are all visible and have the color they are set to.

 RGBImageType::Pointer debugImage = label2RGBImage->GetOutput();
 itk::Index<2> pixelIndex;
 pixelIndex[0] = 100; pixelIndex[1] = 100;
 RGBPixelType RGBValue;
 RGBValue[0] = RGBValue[1] = RGBValue[2] = 255;
 debugImage->SetPixel( pixelIndex, RGBValue );

...and the same way a black pixel next to the white


Since LabelMapToLabelImage Filter yields an image where the labeling is 
clearly visible in shades of grey, I do not know what to try further, 
the RGBLabeler does not seem to produce anything, i.e. just produces an 
empty image regardless of its input. No matter if I save the image as 
.tif, .jpg or .bmp, the only thing I see now are my newly generated test 
pixels or nothing, if I comment them out.



Kishore Mosaliganti wrote:
> Hi Christian,
>
> Before writing out the output image pointer, can you hard code to set
> 1 pixel in the RGB image to [255, 255, 255] and another pixel to
> [0,0,0] and see if the output is showing those pixels in different
> colors.
>
> I am just wondering
>
> (i) if the thresholds you set are not giving you two different labels
> and so everything is black.
> (ii) The labels have low ranges in the RGB space.
>
>
> Kishore
>
>
> On Sun, Feb 28, 2010 at 5:56 PM, Christian Werner
> <christian.werner at rwth-aachen.de> wrote:
>   
>> Yes, this RGBPixel Type makes sense... :)
>>
>> Unfortunately I am still fighting to get the LabelMapToRGBImageFilter make
>> its work. Now that I fiddled around with this without success I tried the
>> LabelMapToLabelImageFilter for a change and voila: that worked with exactly
>> the same style of code! I am getting a labeled image with my objects painted
>> in all shades of grey. But when using the RGB labeling I get black void.
>>
>> I attached my code, maybe I am blind or still misunderstand something, but I
>> really don't know how to fix this.
>>
>> Best regards,
>> Christian
>>
>>
>>
>>
>> Gaëtan Lehmann wrote:
>>     
>>> 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
>>>>         
>> _____________________________________
>> 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