[Insight-users] [slicer-devel] itkLabelMapMaskImageFilter issue

Bradley Lowekamp blowekamp at mail.nih.gov
Wed Jan 29 16:38:30 EST 2014


Laurent,

I am moving this question to the ITK users list as JC suggested.

Your task is well suited to transforming from pixel based work to ITK's LabelMap base selection. It should be faster and reduce memory usage using this approach.

I encourage you to read the Insight Journal article on the LabelMaps there is a lot there are many different ways to put the pieces together.

The hard part is getting the segmentation done, you seem to indicate that you have done that already thought :)


The basic flow is to select "objects" based on a attribute criteria, with an input of a binary image and a output of the same:

BinaryImageToShapeLabelMapFilter[1]->AttributeOpeningImageFilter[2]->LabelMapToBinaryImageFilter[3]


This pipeline is composed into the BinaryShapeOpeningImageFilter[4], but I think you will need to have a couple of AttributeOpening filters in your pipeline, so building the pipeline your self is the flexibility you need for your case.

If all you need is a masked feature image output and not the opened binary image, you what you initially tried, the LabelMapMaskImageFilter[5]

This is a useful example[6].

Hope this helps,
Brad

[1] http://www.itk.org/Doxygen/html/classitk_1_1BinaryImageToShapeLabelMapFilter.html
[2] http://www.itk.org/Doxygen/html/classitk_1_1AttributeOpeningLabelMapFilter.html
[3] http://www.itk.org/Doxygen/html/classitk_1_1LabelMapToBinaryImageFilter.html
[4] http://www.itk.org/Doxygen/html/classitk_1_1BinaryShapeOpeningImageFilter.html
[5] http://www.itk.org/Doxygen/html/classitk_1_1LabelMapMaskImageFilter.html
[6]

On Jan 29, 2014, at 3:56 PM, Laurent Chauvin <lchauvin at bwh.harvard.edu> wrote:

> Hello Bradley,
> 
> I understand.
> However my goal is too detect object with a certain number of pixels, and use the other "objects" (bigger or smaller than my range) to mask my original image to remove them, so I would only keep the object with the number of pixel in my range in my image.
> 
> I applied a ConnectedComponentImageFilter, and then a RelabelComponentImageFilter to label object by size of pixels.
> Now from these filter, for each object, I would like to look if the number of pixel is in my range, and if not use the label created by RelabelComponentImageFilter to mask my original image (to remove the object from the original image).
> 
> I don't think I can specify a label in MaskImageFilter, can I ?
> 
> Thank you very much.
> -Laurent
> 
> 
> On Wed, Jan 29, 2014 at 3:34 PM, Bradley Lowekamp <blowekamp at mail.nih.gov> wrote:
> Hello Laurent,
> 
> The ITK "LabelMap" class is different that the Slicer concept of a label map. The ITK LabelMap is a run-length encode image designed to map label ID to associated data to facilitate label based attribute filtering. This was contributed in an Insight Journal article[1]. There are a great many things that can be efficiently computed in the framework.
> 
> You are using it wrong as it's not suppose to work with the ITK Image but the ITK LabelMap class. You are likely looking for just the regular MaskImageFilter[2] in ITK.
> 
> [1] http://www.insight-journal.org/browse/publication/176
> [2] http://www.itk.org/Doxygen/html/classitk_1_1MaskImageFilter.html
> 
> On Jan 29, 2014, at 3:22 PM, Laurent Chauvin <lchauvin at bwh.harvard.edu> wrote:
> 
>> Hello slicer developers,
>> 
>> I'm trying to create a CLI that use some itk filters, and it's working, but now I want to include a itkLabelMapMaskImageFilter but I got some errors.
>> 
>> This is the code:
>> 
>>   const    unsigned int      Dimension  = 3;
>>   typedef unsigned short  IntegralPixelType;
>>   typedef itk::Image<IntegralPixelType, Dimension>  IntegralImageType;
>>   typedef itk::LabelMapMaskImageFilter<IntegralImageType, IntegralImageType> MaskFilter;
>> 
>> 
>>   // This line create an issue
>>   typename MaskFilter::Pointer mFilter = MaskFilter::New();
>> 
>> 
>> Here is the error:
>> 
>> In file included from /home/snr/Slicer4/Slicer-Debug/ITKv4/Modules/Filtering/LabelMap/include/itkLabelMapMaskImageFilter.h:21:0,
>>                  from /home/snr/Slicer4/ExternalModules/PointillismRegistration/PointillismRegistration/PointillismRegistration.cxx:7:
>> /home/snr/Slicer4/Slicer-Debug/ITKv4/Modules/Filtering/LabelMap/include/itkLabelMapFilter.h: In instantiation of ‘class itk::LabelMapFilter<itk::Image<short unsigned int, 3u>, itk::Image<short unsigned int, 3u> >’:
>> /home/snr/Slicer4/Slicer-Debug/ITKv4/Modules/Filtering/LabelMap/include/itkLabelMapMaskImageFilter.h:47:7:   required from ‘class itk::LabelMapMaskImageFilter<itk::Image<short unsigned int, 3u>, itk::Image<short unsigned int, 3u> >’
>> /home/snr/Slicer4/ExternalModules/PointillismRegistration/PointillismRegistration/PointillismRegistration.cxx:74:22:   required from here
>> /home/snr/Slicer4/Slicer-Debug/ITKv4/Modules/Filtering/LabelMap/include/itkLabelMapFilter.h:80:55: error: no type named ‘LabelObjectType’ in ‘itk::LabelMapFilter<itk::Image<short unsigned int, 3u>, itk::Image<short unsigned int, 3u> >::InputImageType {aka class itk::Image<short unsigned int, 3u>}’
>> /home/snr/Slicer4/Slicer-Debug/ITKv4/Modules/Filtering/LabelMap/include/itkLabelMapFilter.h:127:37: error: no type named ‘Iterator’ in ‘itk::LabelMapFilter<itk::Image<short unsigned int, 3u>, itk::Image<short unsigned int, 3u> >::InputImageType {aka class itk::Image<short unsigned int, 3u>}’
>> 
>> I'm not sure why LabelObjectType cannot be found in LabelMapFilter (and why it's looking LabelMapFilter for it and not in LabelMapMaskFilter).
>> 
>> I tried to find examples of code with itkLabelMapMaskImageFilter but I couldn't find any.
>> 
>> Is there something wrong in the class or is it in my code ?
>> 
>> Thank you.
>> -Laurent
>> 
>> -- 
>> Laurent Chauvin, MS
>> Surgical Navigation and Robotics Laboratory, Radiology Department
>> Brigham And Women's Hospital, Harvard Medical School
>> http://wiki.ncigt.org/index.php/User:Lchauvin
>> _______________________________________________
>> slicer-devel mailing list
>> slicer-devel at bwh.harvard.edu
>> http://massmail.spl.harvard.edu/mailman/listinfo/slicer-devel
>> To unsubscribe: send email to slicer-devel-request at massmail.spl.harvard.edu with unsubscribe as the subject
>> http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/FAQ
>> 
>> 
>> The information in this e-mail is intended only for the person to whom it is
>> addressed. If you believe this e-mail was sent to you in error and the e-mail
>> contains patient information, please contact the Partners Compliance HelpLine at
>> http://www.partners.org/complianceline . If the e-mail was sent to you in error
>> but does not contain patient information, please contact the sender and properly
>> dispose of the e-mail.
> 
> 
> 
> 
> -- 
> Laurent Chauvin, MS
> Surgical Navigation and Robotics Laboratory, Radiology Department
> Brigham And Women's Hospital, Harvard Medical School
> http://wiki.ncigt.org/index.php/User:Lchauvin

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20140129/a7229d14/attachment.html>


More information about the Insight-users mailing list