[Insight-users] Watersheds performace in Debug mode

sara meghellati sara_meghellati at yahoo.fr
Wed Aug 27 07:20:07 EDT 2008


Hi, 
the code that I have past and the one of Luis are both working. there is nothing wrong with the code. it deos just take time to produce result and this depends in your machine performance. for example I tried the code in other computer P4,...and it still running for more than one hour without producing the result, so I stoped it.  let your code run for more time.
Cheers 
Sara

--- En date de : Mer 27.8.08, wassim_belhadj at topnet.tn <wassim_belhadj at topnet.tn> a écrit :

De: wassim_belhadj at topnet.tn <wassim_belhadj at topnet.tn>
Objet: Re: [Insight-users] Watersheds performace in Debug mode
À: "Luis Ibanez" <luis.ibanez at kitware.com>
Cc: sara_meghellati at yahoo.fr, "insight itk" <insight-users at itk.org>
Date: Mercredi 27 Août 2008, 8h40

Hi 
I tried  the wathershed segmentation example applied to "Patient01"
from
http://public.kitware.com/pub/itk/Data/LiverTumor/.
The code still running as it get stuck in a loop. I used 0.001 for
threshold and 0.1 for the level parameter.
My CPU is Pentium 4, 3.00Ghz and 1Gb of Ram
How have you been able to Operate the example ?
I need Your Help Please.
This is the  source code  :
/**********************************************************************/
/**********************************************************************/
/**********************************************************************/
/**********************************************************************/

#include "itkWatershedImageFilter.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkScalarToRGBPixelFunctor.h"
#include "itkUnaryFunctorImageFilter.h"
#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"


int main( int argc, char *argv[] )
{


  if( argc < 5 )
    {
    std::cerr << "Missing Parameters " << std::endl;
    std::cerr << "Usage: " << argv[0];
    std::cerr << " inputImage  outputImage lowerThreshold 
outputScaleLevel" << std::endl;
    return 1;
    }

  typedef float                             InternalPixelType;
  typedef itk::RGBPixel<unsigned char>      RGBPixelType;

  const   unsigned int                      Dimension = 3;


  typedef itk::Image< InternalPixelType,  Dimension >  InternalImageType;
  typedef itk::Image< RGBPixelType,       Dimension >  RGBImageType;

                       
  //
  // We instantiate reader and writer types
  //
  typedef  itk::ImageFileReader< InternalImageType   >  ReaderType;
  typedef  itk::ImageFileWriter< RGBImageType  >        WriterType;

  ReaderType::Pointer reader = ReaderType::New();
  WriterType::Pointer writer = WriterType::New();

  reader->SetFileName( argv[1] );
  writer->SetFileName( argv[2] );


  //
  //  Instantiate the GradientMagnitude image filter
  //
  typedef   itk::GradientMagnitudeRecursiveGaussianImageFilter<
                                                     InternalImageType,
                                                     InternalImageType 
                                                          >
GradientMagnitudeFilterType;

  GradientMagnitudeFilterType::Pointer gradienMagnitudeFilter =
GradientMagnitudeFilterType::New();

  gradienMagnitudeFilter->SetInput( reader->GetOutput() );
  gradienMagnitudeFilter->SetSigma( 1.0 );


  //
  //  Instantiate the Watershed filter
  //

  typedef  itk::WatershedImageFilter< 
                              InternalImageType 
                                            > WatershedFilterType;

  WatershedFilterType::Pointer watershedFilter =
WatershedFilterType::New();

  watershedFilter->SetInput( gradienMagnitudeFilter->GetOutput() );

  watershedFilter->SetThreshold( atof( argv[3] ) );
  watershedFilter->SetLevel(     atof( argv[4] ) );


  //
  //  Instantiate the filter that will encode the label image
  //  into a color image (random color attribution).
  //

  typedef itk::Functor::ScalarToRGBPixelFunctor< 
                                           unsigned long
                                                    > ColorMapFunctorType;

  typedef WatershedFilterType::OutputImageType  LabeledImageType;

  typedef itk::UnaryFunctorImageFilter< 
                                LabeledImageType,
                                RGBImageType,
                                ColorMapFunctorType
                                                > ColorMapFilterType;

  ColorMapFilterType::Pointer colorMapFilter = ColorMapFilterType::New();

  colorMapFilter->SetInput(  watershedFilter->GetOutput() );

  writer->SetInput( colorMapFilter->GetOutput() );

  try
    {
    writer->Update();
    }
  catch( itk::ExceptionObject & excep )
    {
    std::cerr << "Exception caught !" << std::endl;
    std::cerr << excep << std::endl;
    }


  return 0;

}
/**********************************************************************/
/**********************************************************************/
/**********************************************************************/




On Tue, 26 Aug 2008 11:04:50 -0400, Luis Ibanez <luis.ibanez at kitware.com>
wrote:
> 
> Sara,
> 
> When reporting performance issues,
> please build first under *Release* mode.
> 
> As Dan described, you can easily find differences of one order of
> magnitude between the performance on Debug and Release modes.
> 
> This is mainly due to the heavy use we made of C++ templates in ITK.
> 
> 
>     Regards,
> 
> 
>         Luis
> 
> 
> -------------------------
> sara meghellati wrote:
>> No, it was in debug mode. I will give a try at release mode.
>> Thanks Dan.
>> Cheers
>> Sara
>> 
>> --- En date de : *Mar 26.8.08, Dan Mueller
/<dan.muel at gmail.com>/* a
> écrit :
>> 
>>     De: Dan Mueller <dan.muel at gmail.com>
>>     Objet: Re: [Insight-users] nobody could answer me ? Fw : Please
>>     help:problem with wathershed segmentation applied to 3D grayscale
> Image
>>     À: sara_meghellati at yahoo.fr
>>     Cc: "Luis Ibanez" <luis.ibanez at kitware.com>,
"insight itk"
>>     <insight-users at itk.org>
>>     Date: Mardi 26 Août 2008, 10h42
>> 
>> Hi Sara,
>> 
>> Did you compile the code in Release mode? Compiling in Release mode
>> (as opposed to Debug mode) significantly improves performance...
>> 
>> 2008/8/26 sara meghellati <sara_meghellati at yahoo.fr>:
>>> Dear Luis,
>>> I would like to thank you and all the other itk members who have
> replied
>> me
>>> regarding my question.
>>> I have gave a try with your code. my CPU is Intel core 2, 2.41 Ghz
and
> 2
>> Gb
>>> of Ram. it takes nearly 34 minutes. So I have tried my code, its
> working
>> and
>>> it takes also nearly 34 minutes. I used 0.001 for threshold and
0.1 for
>> the
>>> level parameter.
>>> Sara
>>> Best regards
>>>
>>> --- En date de : Ven 22.8.08, Luis Ibanez
<luis.ibanez at kitware.com>
>> a
>>> écrit :
>>>
>>> De: Luis Ibanez <luis.ibanez at kitware.com>
>>> Objet: Re: [Insight-users] nobody could answer me ? Fw : Please
>> help:problem
>>> with wathershed segmentation applied to 3D grayscale Image
>>> À: sara_meghellati at yahoo.fr
>>> Cc: "insight itk" <insight-users at itk.org>
>>> Date: Vendredi 22 Août 2008, 18h59
>>>
>>>
>>> Hi Sara,
>>>
>>> Thanks for your detailed question regarding Watersheds.
>>>
>>>
>>> Please take a look at the attached code.
>>>
>>> It process the image "Patient01" from
>>>
>>>         http://public.kitware.com/pub/itk/Data/LiverTumor/.
>>>
>>> in a time of
>>>
>>>                     4 minutes 38 seconds.
>>>
>>> This was profiled in an QuadCore Intel Xeon 2.66 Ghz. (with 16Gb
RAM).
>>> (although the process uses only one of the cores)
>>>
>>> Note that the process peaks 1Gb of memory allocation when it is
> running.
>>>
>>> Depending on the configuration of your system, it may be that the
> program
>>> started swapping memory at some point.
>>>
>>> Please give a try at the attached code and let us know what you
find.
>>>
>>>
>>>      Regards,
>>>
>>>
>>>           Luis
>>>
>>>
>>>
>>
>
-----------------------------------------------------------------------------------------------------------------------------------
>>> On Fri, Aug 22, 2008 at 11:19 AM, sara meghellati
>> <sara_meghellati at yahoo.fr>
>>> wrote:
>>>>
>>>> I'm sending again my questions as nobody have answered me.
>>>>
>>>> --- En date de : Ven 22.8.08, sara meghellati
>> <sara_meghellati at yahoo.fr> a
>>>> écrit :
>>>>
>>>> De: sara meghellati <sara_meghellati at yahoo.fr>
>>>> Objet: [Insight-users] Please help:problem with wathershed
>> segmentation
>>>> applied to 3D grayscale Image
>>>> À: "insight itk" <insight-users at itk.org>
>>>> Date: Vendredi 22 Août 2008, 13h48
>>>>
>>>> Dear itk experts,
>>>>
>>>> I'm segmenting a volume (3D grayscale image) using
watershed
>> method
>>>> inspired from the WatershedSegmentation1
>>>>
>>>> (2D RGB image as input)example provided within itk.
>>>>
>>>> My code is well working for 2D grayscale images but when I
change
>>>>
>>>> the dimension to 3, the code
>>>>  still running as it get stuck in a
>>>>
>>>> loop!! I wait for more than 18min but no results!! Is it
normal
>>>>
>>>> that this kind of segmentation takes age to give the result in
3d
>>>>
>>>> image or there is some thing wrong with my code? Please could
you help
>> me
>>>> on that? Also, how can I follow the progress of the code?
>>>>
>>>> I pass my code bellow. In this example I used the 3D data
provided
>>>>
>>>> in http://public.kitware.com/pub/itk/Data/LiverTumor/.
>>>>
>>>> #include <iostream>
>>>>
>>>> #include "itkImage.h"
>>>>
>>>> #include
"itkGradientAnisotropicDiffusionImageFilter.h"
>>>
>>> #include "itkGradientMagnitudeImageFilter.h"
>>>
>>> #include "itkWatershedImageFilter.h"
>>>
>>> #include "itkImageFileReader.h"
>>>
>>> #include "itkImageFileWriter.h"
>>>
>>> #include "itkVectorCastImageFilter.h"
>>>
>>> #include "itkUnaryFunctorImageFilter.h"
>>>
>>> #include "itkScalarToRGBPixelFunctor.h"
>>>
>>>
>>>
>>> #include "itkVTKImageExport.h"
>>>
>>> #include "itkVTKImageImport.h"
>>>
>>>
>>>
>>> #include "vtkImageData.h"
>>>
>>> #include "vtkImageImport.h"
>>>
>>> #include "vtkImageExport.h"
>>>
>>> #include "vtkImageActor.h"
>>>
>>> #include "vtkRenderer.h"
>>>
>>> #include "vtkRenderWindow.h"
>>>
>>> #include "vtkRenderWindowInteractor.h"
>>>
>>> #include "vtkInteractorStyleTrackballCamera.h"
>>>
>>> #include "vtkImageShiftScale.h"
>>>
>>>
>>>
>>> // This function will connect the given itk::VTKImageExport filter
to
> the
>>> given vtkImageImport filter.
>>>
>>> template <typename ITK_Exporter, typename VTK_Importer>
>>>
>>> void ConnectPipelines(ITK_Exporter exporter, VTK_Importer*
importer)
>>>
>>> {
>>>
>>>
>>>
>>
>
importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
>>>
>>>
>>>
>>
>
importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
>>>
>>>  
>>
importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
>>>
>>>  
importer->SetSpacingCallback(exporter->GetSpacingCallback());
>>>
>>>  
importer->SetOriginCallback(exporter->GetOriginCallback());
>>>
>>>  
>>
importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
>>>
>>>
>>>
>>
>
importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
>>>
>>>
>>>
>>
>
importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
>>>
>>>  
>>
importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
>>>
>>>  
>>
importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
>>>
>>>  
>>
>
importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
>>>
>>>  
importer->SetCallbackUserData(exporter->GetCallbackUserData());
>>>
>>> }
>>>
>>>
>>>
>>> int main( )
>>>
>>> {
>>>
>>>       typedef itk::Image<float, 3>           ImageType;
>>>
>>>       typedef itk::Image<unsigned long, 3>  
LabeledImageType;
>>>
>>>       typedef itk::Image<float, 3>          
ScalarImageType;
>>>
>>>       // for visualization purposes
>>>
>>>       typedef itk::RGBPixel<unsigned char>   RGBPixelType;
>>>
>>>       typedef itk::Image<RGBPixelType, 3>    RGBImageType;
>>>
>>>
>>>
>>>       typedef itk::ImageFileReader<ImageType>
FileReaderType;
>>>
>>>       typedef
itk::GradientAnisotropicDiffusionImageFilter<ImageType,
>>> ImageType>  DiffusionFilterType;
>>>
>>>       typedef
itk::GradientMagnitudeImageFilter<ImageType,ImageType>
>>> GradientMagnitudeFilterType;
>>>
>>>       typedef itk::WatershedImageFilter<ScalarImageType>
>>> WatershedFilterType;
>>>
>>>       typedef itk::ImageFileWriter<RGBImageType>
FileWriterType;
>>>
>>>
>>>
>>>       FileReaderType::Pointer reader = FileReaderType::New
>>>
>>>       reader->SetFileName(
"c:/images/3DImages/Patient01.mhd"
>>  );
>>>
>>>      
>>
//reader->SetFileName("c:/Images/BrainProtonDensitySlice.png");
>>>
>>>
>>>
>>>       DiffusionFilterType::Pointer diffusion =
> DiffusionFilterType::New();
>>>
>>>       diffusion->SetNumberOfIterations( atoi("10") );
>>>
>>>       diffusion->SetConductanceParameter( atof("2.0")
);
>>>
>>>       diffusion->SetTimeStep(0.0625);
>>>
>>>
>>>
>>>       GradientMagnitudeFilterType::Pointer gradient =
>>> GradientMagnitudeFilterType::New();
>>>
>>>
>>>
>>>       WatershedFilterType::Pointer watershed =
> WatershedFilterType::New();
>>>
>>>       watershed->SetLevel( atof("0.15") );
>>>
>>>       watershed->SetThreshold( atof("0.001") );
>>>
>>>       typedef itk::Functor::ScalarToRGBPixelFunctor<unsigned
long>
>>> ColorMapFunctorType;
>>>
>>>       typedef itk::UnaryFunctorImageFilter<LabeledImageType,
>>> RGBImageType, ColorMapFunctorType> ColorMapFilterType;
>>>
>>>       ColorMapFilterType::Pointer colormapper =
> ColorMapFilterType::New();
>>>
>>>
>>>
>>>       FileWriterType::Pointer writer = FileWriterType::New();
>>>
>>>      
writer->SetFileName("c:/Images/WatershedSegImg.mhd");
>>>
>>>
>>>
>>>       diffusion->SetInput(reader->GetOutput());
>>>
>>>       gradient->SetInput(diffusion->GetOutput());
>>>
>>>       watershed->SetInput(gradient->GetOutput());
>>>
>>>       colormapper->SetInput(watershed->GetOutput());
>>>
>>>       writer->SetInput(colormapper->GetOutput());
>>>
>>>       writer->Update();
>>>
>>>
>>>
>>> try
>>>
>>>     {
>>>
>>>             writer->Update();
>>>
>>>     }
>>>
>>>   catch (itk::ExceptionObject &e)
>>>
>>>     {
>>>
>>>             std::cerr << e << std::endl;
>>>
>>>     }
>>>
>>>
>>>
>>>   return 0;
>>>
>>>
>>>
>>> }
>>>
>>> Thanks
>>>
>>> Sara
>> 
>> 
>>
------------------------------------------------------------------------
>> Envoyé avec Yahoo! Mail 
>>
>
<http://us.rd.yahoo.com/mailuk/taglines/isp/control/*http://us.rd.yahoo.com/evt=52423/*http://fr.docs.yahoo.com/mail/overview/index.html>.
>> Une boite mail plus intelligente.
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 




      _____________________________________________________________________________ 
Envoyez avec Yahoo! Mail. Une boite mail plus intelligente http://mail.yahoo.fr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20080827/0c0b1c10/attachment-0001.htm>


More information about the Insight-users mailing list