[ITK] [ITK-users] problem with 3d region growing

samah bouzidi samah.bouzidi at gmail.com
Sun Feb 8 16:59:45 EST 2015


hi,

thank you Matt McCormick for your reply.
I* finally fixed "The Problem"*.

// the code

#include "itkConnectedThresholdImageFilter.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkSliceBySliceImageFilter.h"

int main( int argc, char *argv[])
{
  typedef   signed short         InternalPixelType;
  typedef   unsigned char        OutputPixelType;
  const     unsigned int         Dimension = 3;
  const     unsigned int         sliceDim =2;
  typedef itk::Image< InternalPixelType, Dimension > InternalImageType; //
input
  typedef itk::Image< InternalPixelType, sliceDim > sliceType; // 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();

  SliceBySliceFilterType::InternalInputImageType::InternalPixelType
lowerThreshold =  -1100;
  SliceBySliceFilterType::InternalInputImageType::InternalPixelType
upperThreshold = -600;
  SliceBySliceFilterType::InternalOutputImageType::InternalPixelType x =
255;
  connectedThreshold->SetLower(lowerThreshold);
  connectedThreshold->SetUpper(  upperThreshold  );
  connectedThreshold->SetReplaceValue( x );
  // 250, 239
  SliceBySliceFilterType::InternalInputImageType::IndexType  index;
    index[0] = 252;
    index[1] = 275;
  connectedThreshold->SetSeed(index);

  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-08 21:58 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com>:

> 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
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20150208/ff46ea2c/attachment-0001.html>
-------------- next part --------------
_____________________________________
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 Community mailing list