Hi,

That is what the BoundingBoxImageLabelMapFilter is suppose to do. It crops an 
axis aligned bounding box around a label in the label map infrastructure.

What are you trying to do?

And why did you try this approach?

There is the MaskImageFilter[1] that may suit your needs.

Brad

[1] http://www.itk.org/Doxygen/html/classitk_1_1MaskImageFilter.html

On Nov 13, 2013, at 8:25 AM, elhadj meljane <[email protected]> wrote:

> Hi Bradley,
> Thanks, it worked when I added a label image. But it crops the item in a 
> smaller image. Is there a way to keep the initial image size: just mask the 
> other items in the initial image ...
>  
> Thanks.
> Best,
> EM
> 
> 
> On Tue, Nov 12, 2013 at 9:50 PM, Bradley Lowekamp <[email protected]> 
> wrote:
> Hello,
> 
> Around ITK programs you need exception handling to determine the errors 
> thrown.
> 
> I added the following around your code:
> 
> try
> {
> ...
> }
> catch (std::exception &e)
>   {
> std::cerr << "Exception: " << e.what() << std::endl;
> return 1;
> }
> catch (...)
>   {
> std::cerr << "Unknown Exception!" << std::endl;
> throw;
> }
> 
> Note that the itk::ExceptionObject class is derived from std::exception so 
> this will catch that too.
> 
> The gave me the following output:
> 
> Exception: 
> /Users/blowekamp/src/ITK/Modules/Core/Common/src/itkProcessObject.cxx:1380:
> itk::ERROR: BoundingBoxImageLabelMapFilter(0x7f92bb8bce90): Input 
> FeatureImage is required but not set.
> 
> Which says you are missing an input to this filter.
> 
> You can provide the input label image as the feature image like so:
> 
> toBBILabelMap->SetFeatureImage(reader->GetOutput());
> 
> The examples in that modules should be usable. You just need to get your 
> labels correct for the binary/label image. Not too hard to run a 
> ConnectedComponets filter if needed.
> 
> Brad
> 
> On Nov 12, 2013, at 2:43 PM, elhadj meljane <[email protected]> wrote:
> 
>>  I don't have a label image to use the example: 
>> https://github.com/blowekamp/itkOBBLabelMap/blob/master/test/itkOBBExample.cxx
>>  
>> However, I used to write the main method ... where only a binary image is 
>> used as input.
>>  
>> Thanks!
>> EM
>> 
>> 
>> On Tue, Nov 12, 2013 at 2:26 PM, elhadj meljane <[email protected]> 
>> wrote:
>> Hello!
>> I am using your github extension (I included the files manually in my 
>> project)... and wrote the main method below. The code compile but at the run 
>> time I got the error:
>> 
>> "program.exe has stopped working. A problem caused the program to stop 
>> working correctly. Windows will close the program and notify you if a 
>> solution is available. "
>> When I click to debug with MS Visual Studio, I got the warning: 
>> Unhandled exception at 0x01... in program.exe: 0xC00000005: Acces violation 
>> reading location 0x18...
>>  
>> Here's the code:
>>  
>> #include "itkImageFileReader.h"
>> 
>> #include "itkImageFileWriter.h"
>> 
>> #include "itkBoundingBoxImageLabelMapFilter.h"
>> 
>> #include "itkAttributeImageLabelObject.h"
>> 
>> #include "itkBinaryImageToShapeLabelMapFilter.h"
>> 
>>  
>> const unsigned int Dimension = 2;
>> 
>> typedef unsigned char LabelPixelType;
>> 
>> typedef itk::Image< LabelPixelType, Dimension > LabelImageType;
>> 
>> typedef unsigned char OutputPixelType;
>> 
>> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>> 
>> typedef itk::ImageFileReader< OutputImageType > ReaderType;
>> 
>> typedef itk::ImageFileWriter< OutputImageType > WriterType;
>> 
>> typedef itk::AttributeImageLabelObject< LabelPixelType, Dimension, 
>> OutputImageType > LabelObjectAttributeType;
>> 
>> typedef itk::LabelMap<LabelObjectAttributeType> LabelMapAttributeType;
>> 
>> typedef itk::BinaryImageToShapeLabelMapFilter
>> 
>> <OutputImageType, LabelMapAttributeType> LabelMapperAttributeType;
>> 
>> typedef itk::LabelMapToLabelImageFilter<LabelMapAttributeType, 
>> OutputImageType> LabelMapToLabelImageFilterType;
>> 
>> typedef itk::BoundingBoxImageLabelMapFilter<LabelMapAttributeType> 
>> BBILabelMapFilter;
>> 
>>  
>>  
>> int main( int argc, char *argv[] )
>> 
>> {
>> 
>> 
>> ReaderType::Pointer reader = ReaderType::New();
>> 
>> typedef itk::ImageFileWriter< OutputImageType > WriterType;
>> 
>>  
>> //input
>> 
>> reader->SetFileName( argv[1] );
>> 
>> 
>> //label image
>> 
>> LabelMapperAttributeType::Pointer labelerAttribute = 
>> LabelMapperAttributeType::New();
>> 
>> labelerAttribute->SetInput( reader->GetOutput() );
>> 
>> labelerAttribute->SetComputePerimeter( false );
>> 
>> labelerAttribute->SetOutputBackgroundValue(0);
>> 
>> labelerAttribute->Update();
>> 
>> LabelMapAttributeType::Pointer labelMapAttribute = 
>> labelerAttribute->GetOutput();
>> 
>> 
>> //extract the component with the label 1
>> 
>> BBILabelMapFilter::Pointer toBBILabelMap = BBILabelMapFilter::New();
>> 
>> toBBILabelMap->SetInput(labelMapAttribute);
>> 
>> toBBILabelMap->Update();
>> 
>> const LabelObjectAttributeType* labelObjectAttribute = 
>> toBBILabelMap->GetOutput()->GetLabelObject(1);
>> 
>> 
>> //write
>> 
>> WriterType::Pointer writer = WriterType::New();
>> 
>> writer->SetFileName( "copy_input.jpg" );
>> 
>> writer->SetInput( reader->GetOutput());
>> 
>> writer->Update();
>> 
>> 
>> return 0;
>> 
>> }
>> 
>>  
>>  
>>  
>> 
>>  
>>  
>> 
>>  
>> On Tue, Nov 12, 2013 at 1:53 PM, Bradley Lowekamp <[email protected]> 
>> wrote:
>> Hello,
>> 
>> It appears that you are trying to use some code from my github extension:
>> 
>> https://github.com/blowekamp/itkOBBLabelMap
>> 
>> I am not sure where to begin helping you. You didn't include the run-time 
>> error message, and your code fragment is missing key parts. Can you post a 
>> minimal compilable example which illustrates the problem? Sometime just 
>> narrowing down you code to this part help you figure out your issue.
>> 
>> Do the tests for the extension pass for you?
>> 
>> Are you able to run the example?
>> 
>> https://github.com/blowekamp/itkOBBLabelMap/blob/master/test/itkOBBExample.cxx
>> 
>> Brad
>> 
>> 
>> On Nov 12, 2013, at 1:43 PM, elhadj meljane <[email protected]> wrote:
>> 
>>> Hi all, 
>>> I am trying to use itk to select a component from a binary image. The 
>>> binary image contains several items and I want to separate them in 
>>> different images.
>>>    
>>> I used the code below but it doesn't work. I got an error message at the 
>>> run time. It looks from the debugger that the line
>>>  
>>> labelerAttribute->Update()
>>>  
>>> causes the error. I gave a valid file as input and  checked that ITK reads 
>>> correctly this file.  I would appreciate your help to fix this!
>>> 
>>> #include "itkAttributeImageLabelObject.h"
>>> 
>>> const      unsigned int    Dimension = 2;
>>> typedef  unsigned char LabelPixelType;
>>> typedef  itk::Image< LabelPixelType, Dimension >  LabelImageType;
>>> typedef  unsigned char                           OutputPixelType;
>>> typedef  itk::Image< OutputPixelType, Dimension > OutputImageType;
>>> typedef   itk::ImageFileReader< OutputImageType > ReaderType;
>>> typedef   itk::ImageFileWriter<  OutputImageType  > WriterType;
>>> typedef  itk::AttributeImageLabelObject< LabelPixelType, Dimension, 
>>> OutputImageType > LabelObjectAttributeType;
>>> typedef  itk::LabelMap<LabelObjectAttributeType> LabelMapAttributeType;
>>> typedef  itk::BinaryImageToShapeLabelMapFilter 
>>>    <OutputImageType, LabelMapAttributeType>  LabelMapperAttributeType;
>>> typedef  itk::LabelMapToLabelImageFilter<LabelMapAttributeType, 
>>> OutputImageType> LabelMapToLabelImageFilterType;
>>> typedef  itk::BoundingBoxImageLabelMapFilter<LabelMapAttributeType> 
>>> BBILabelMapFilter;
>>> typedef   itk::ImageFileWriter<  OutputImageType  > WriterType;
>>> 
>>> ReaderType::Pointer reader = ReaderType::New();
>>> 
>>> reader->SetFileName( argv[1] );
>>>  
>>> LabelMapperAttributeType::Pointer labelerAttribute = 
>>> LabelMapperAttributeType::New();
>>> 
>>> 
>>> labelerAttribute->SetInput( reader->GetOutput() );
>>> labelerAttribute->SetComputePerimeter( false ); 
>>> labelerAttribute->SetOutputBackgroundValue(0); 
>>> labelerAttribute->Update();
>>>  
>>>  
>>> //select the item with the label 1
>>> const LabelObjectAttributeType* labelObjectAttribute = 
>>> toBBILabelMap->GetOutput()->GetLabelObject(1);
>>> 
>>> BBILabelMapFilter::Pointer toBBILabelMap =  BBILabelMapFilter::New();
>>> toBBILabelMap->SetInput(labelMapAttribute);
>>> toBBILabelMap->Update();
>>> 
>>> 
>>> Thanks.
>>> Best 
>>> EM
>>> 
>>> _______________________________________________
>>> 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://kitware.com/products/protraining.php
>>> 
>>> 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-developers
>> 
>> 
>> 
> 
> 
> _______________________________________________
> 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://kitware.com/products/protraining.php
> 
> 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-developers
> 
> 

_______________________________________________
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://kitware.com/products/protraining.php

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-developers

Reply via email to