[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