<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><DIV>Hi, </DIV>
<DIV>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.</DIV>
<DIV>Cheers </DIV>
<DIV>Sara<BR><BR>--- En date de : <B>Mer 27.8.08, wassim_belhadj@topnet.tn <I><wassim_belhadj@topnet.tn></I></B> a écrit :<BR></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(16,16,255) 2px solid">De: wassim_belhadj@topnet.tn <wassim_belhadj@topnet.tn><BR>Objet: Re: [Insight-users] Watersheds performace in Debug mode<BR>À: "Luis Ibanez" <luis.ibanez@kitware.com><BR>Cc: sara_meghellati@yahoo.fr, "insight itk" <insight-users@itk.org><BR>Date: Mercredi 27 Août 2008, 8h40<BR><BR><PRE>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@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@gmail.com>/* a
> écrit :
>>
>> De: Dan Mueller <dan.muel@gmail.com>
>> Objet: Re: [Insight-users] nobody could answer me ? Fw : Please
>> help:problem with wathershed segmentation applied to 3D grayscale
> Image
>> À: sara_meghellati@yahoo.fr
>> Cc: "Luis Ibanez" <luis.ibanez@kitware.com>,
"insight itk"
>> <insight-users@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@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@kitware.com>
>> a
>>> écrit :
>>>
>>> De: Luis Ibanez <luis.ibanez@kitware.com>
>>> Objet: Re: [Insight-users] nobody could answer me ? Fw : Please
>> help:problem
>>> with wathershed segmentation applied to 3D grayscale Image
>>> À: sara_meghellati@yahoo.fr
>>> Cc: "insight itk" <insight-users@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@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@yahoo.fr> a
>>>> écrit :
>>>>
>>>> De: sara meghellati <sara_meghellati@yahoo.fr>
>>>> Objet: [Insight-users] Please help:problem with wathershed
>> segmentation
>>>> applied to 3D grayscale Image
>>>> À: "insight itk" <insight-users@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@itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>
</PRE></BLOCKQUOTE></td></tr></table><br>
<hr size="1">
Envoyé avec <a href="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">Yahoo! Mail</a>.<br>Une boite mail plus intelligente. </a>