[ITK-users] problem with 3d region growing

Matt McCormick matt.mccormick at kitware.com
Sun Feb 8 15:58:10 EST 2015


Hi,

These errors suggest that a 2D IndexType must be passed.

HTH,
Matt

On Sun, Feb 8, 2015 at 7:07 AM, samah bouzidi <samah.bouzidi at gmail.com> wrote:
> hi,
>
> I finished the slice by slice region growing version of code. unfortunately
> I have these errors:
>
> 1) no matching function for call to 'itk :: ConnectedThresholdImageFilter
> <itk :: Image <short int, 2u>, itk :: Image <unsigned char, 2u>> :: SetSeed
> (itk :: Image <short int, 3u> :: INDEXTYPE &) '
> connectedThreshold-> SetSeed (index)
>
> 2)
> /home/doctorant/src/InsightToolkit-4.7.0/Modules/Segmentation/RegionGrowing/include/itkConnectedThresholdImageFilter.hxx:53:1:
> note:   no known conversion for argument 1 from ‘itk::Image<short int,
> 3u>::IndexType {aka itk::Index<3u>}’ to ‘const IndexType& {aka const
> itk::Index<2u>&}’
>
>
> here is my code :
>
> #include "itkConnectedThresholdImageFilter.h"
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkSliceBySliceImageFilter.h"
> #include "iostream"
>
> int main( int argc, char *argv[])
> {
>   typedef   signed short         InternalPixelType;
>   typedef   unsigned char        OutputPixelType;
>   const     unsigned int         Dimension = 3;
>   const     int                  sliceDim =2;
>   typedef itk::Image< InternalPixelType, Dimension > InternalImageType; //
> input
>   typedef itk::Image< OutputPixelType, Dimension > OutputImageType; //output
>
>   typedef  itk::ImageFileReader< InternalImageType > ReaderType;
>   typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
>
>   ReaderType::Pointer reader = ReaderType::New();
>   WriterType::Pointer writer = WriterType::New();
>
>   reader->SetFileName( "/home/doctorant/Téléchargements/Images/in.img" );
>   writer->SetFileName( "/home/doctorant/Téléchargements/Images/out.img");
>
>
>   typedef itk::SliceBySliceImageFilter< InternalImageType,OutputImageType>
> SliceBySliceFilterType;
>
>   SliceBySliceFilterType::Pointer sliceBySliceFilter =
> SliceBySliceFilterType::New();
>
>   typedef itk::ConnectedThresholdImageFilter<
> SliceBySliceFilterType::InternalInputImageType,
>           SliceBySliceFilterType::InternalOutputImageType >
> ConnectedFilterType;
>   ConnectedFilterType::Pointer connectedThreshold
> =ConnectedFilterType::New();
>
>   const InternalPixelType lowerThreshold =  -3700 ;
>   const InternalPixelType upperThreshold = -600;
>
>  connectedThreshold->SetLower(  lowerThreshold   );  // error here
>  connectedThreshold->SetUpper(  upperThreshold  );  //error here
>     connectedThreshold->SetReplaceValue( 255 );  // error here
>
>     InternalImageType::IndexType  index;
>     index[0] = 257;
>     index[1] = 449;
>     connectedThreshold->SetSeed(index);  // error here
>
>   sliceBySliceFilter -> SetInput(reader->GetOutput());
>   sliceBySliceFilter->SetFilter(connectedThreshold);
>   writer->SetInput( sliceBySliceFilter->GetOutput());
>   try
>     {
>     writer->Update();
>     }
>   catch( itk::ExceptionObject & excep )
>     {
>     std::cerr << "Exception caught !" << std::endl;
>     std::cerr << excep << std::endl;
>     }
>
>   return 0;
> }
>
> 2015-02-06 21:59 GMT+01:00 samah bouzidi <samah.bouzidi at gmail.com>:
>>
>> hi,
>>
>> sincerely, I fail to understand the response of this filter, the algorithm
>> succeeds to segment the region .however, in 3D, the first  slice is the same
>> used to check the segmentation in 2D, I am not getting at least for the
>> first slice the region obtained in 2D.
>> ps: the modified code takes into account the third dimension :
>>
>>
>> InternalImageType::IndexType  index;
>>   index[0] = 250;
>>   index[1] = 239;
>>   index[2]= 1;
>>
>>   connectedThreshold->SetSeed( index );
>>
>>
>> any help will be appreciated.
>> thanks in advance.
>>
>>
>>
>> 2015-02-04 21:24 GMT+01:00 Christopher Mullins
>> <christopher.mullins at kitware.com>:
>>>
>>> The ConnectedThresholdImageFilter example [1] might be of use.
>>>
>>> [1]
>>> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Examples/Segmentation/ConnectedThresholdImageFilter.cxx
>>>
>>> On Wed, Feb 4, 2015 at 3:14 PM, samah bouzidi <samah.bouzidi at gmail.com>
>>> wrote:
>>>>
>>>> hi Matt,
>>>>
>>>> thank you for replying.
>>>>
>>>> I can't find the error in my code (a black volume result)
>>>>
>>>> can you please look at my code.
>>>>
>>>>
>>>>
>>>> Regards
>>>> Samah
>>>>
>>>>
>>>>
>>>> 2015-02-04 20:36 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com>:
>>>>>
>>>>> Hi Samah,
>>>>>
>>>>> Welcome to ITK!
>>>>>
>>>>> For a 3D image, the third index of the seed does need to be defined.
>>>>>
>>>>> To apply a filter on each slice independently, use the
>>>>> SliceBySliceImageFilter [1].
>>>>>
>>>>> HTH,
>>>>> Matt
>>>>>
>>>>> [1]
>>>>> http://www.itk.org/Doxygen/html/classitk_1_1SliceBySliceImageFilter.html
>>>>>
>>>>> On Wed, Feb 4, 2015 at 1:59 PM, samah bouzidi <samah.bouzidi at gmail.com>
>>>>> wrote:
>>>>> > hello itk users,
>>>>> >
>>>>> > I am a beginner ITK users. I am trying to segment a volume using
>>>>> > region
>>>>> > growing algorithm. I am able to do it in a 2D image (dicom) but not
>>>>> > for a
>>>>> > volume.
>>>>> > 1) I saw that for 3D region growing the seed point have 3 coordinates
>>>>> > (x, y,
>>>>> > z). In my case, z is the slice number (i am using .img format). Can I
>>>>> > use an
>>>>> > (x,y) seed point?
>>>>> > 2) I have another idea,  reading an image series  and applied the
>>>>> > filter for
>>>>> > each image and then writing them in volume. Are there any examples (
>>>>> > applied
>>>>> > a filter in image series) that one could help me?
>>>>> >
>>>>> > regards
>>>>> > Samah.
>>>>> >
>>>>> > My source code is as follows
>>>>> > ================================
>>>>> > #include "itkConnectedThresholdImageFilter.h"
>>>>> > #include "itkImage.h"
>>>>> > #include "itkImageFileReader.h"
>>>>> > #include "itkImageFileWriter.h"
>>>>> >
>>>>> > int main( int argc, char *argv[])
>>>>> > {
>>>>> >   typedef   signed short         InternalPixelType;
>>>>> >   typedef   unsigned char        OutputPixelType;
>>>>> >   const     unsigned int           Dimension = 3;
>>>>> >   typedef itk::Image< InternalPixelType, Dimension >
>>>>> > InternalImageType;
>>>>> >
>>>>> >   typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>>>>> >
>>>>> >   typedef  itk::ImageFileReader< InternalImageType > ReaderType;
>>>>> >   typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
>>>>> >
>>>>> >   ReaderType::Pointer reader = ReaderType::New();
>>>>> >   WriterType::Pointer writer = WriterType::New();
>>>>> >
>>>>> >     reader->SetFileName(
>>>>> > "/home/doctorant/Téléchargements/Images/in.img" );
>>>>> >     writer->SetFileName(
>>>>> > "/home/doctorant/Téléchargements/Images/out.img");
>>>>> >
>>>>> >
>>>>> >   typedef itk::ConnectedThresholdImageFilter< InternalImageType,
>>>>> > OutputImageType > ConnectedFilterType;
>>>>> >
>>>>> >   ConnectedFilterType::Pointer connectedThreshold =
>>>>> > ConnectedFilterType::New();
>>>>> >
>>>>> >   connectedThreshold->SetInput( reader->GetOutput() );
>>>>> >   writer->SetInput( connectedThreshold->GetOutput() );
>>>>> >
>>>>> >
>>>>> >   const InternalPixelType lowerThreshold =  -1050  ;
>>>>> >   const InternalPixelType upperThreshold = -600;
>>>>> >
>>>>> >   connectedThreshold->SetLower(  lowerThreshold  );
>>>>> >   connectedThreshold->SetUpper(  upperThreshold  );
>>>>> >
>>>>> >   connectedThreshold->SetReplaceValue( 255 );
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> >   InternalImageType::IndexType  index;
>>>>> >   index[0] = 250;
>>>>> >   index[1] = 239;
>>>>> >
>>>>> >   connectedThreshold->SetSeed( index );
>>>>> >
>>>>> >
>>>>> >   try
>>>>> >     {
>>>>> >     writer->Update();
>>>>> >     }
>>>>> >   catch( itk::ExceptionObject & excep )
>>>>> >     {
>>>>> >     std::cerr << "Exception caught !" << std::endl;
>>>>> >     std::cerr << excep << std::endl;
>>>>> >     }
>>>>> >
>>>>> >   return 0;
>>>>> > }
>>>>> >
>>>>> > _____________________________________
>>>>> > 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.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://public.kitware.com/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.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://public.kitware.com/mailman/listinfo/insight-users
>>>>
>>>
>>>
>>>
>>> --
>>> Christopher Mullins
>>> R&D Engineer
>>> Kitware Inc.,
>>> 919.869.8871
>>
>>
>
>
> _____________________________________
> 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.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://public.kitware.com/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list