[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