[ITK] [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
>
_____________________________________
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