[Insight-users] Watershed Segmentation - problem running itkWSRawToPNG.cxx

Luis Ibanez luis.ibanez at kitware.com
Sat, 28 Feb 2004 11:07:33 -0500


Hi Neha,


If your image size really

        24 pixels  by   7 pixels     ?


The chances of getting any significant
segmentation from such a small image are
very slim.


You said that the output of the GradientMagnitude
filter is working ok, did you verified this by
saving the image to a file ?



Could you please add the lines:

    watershed->Update();
    watershed->GetInput()->Print( std::cout );
    watershed->GetOutput()->Print( std::cout );

Put this lines just before you invoke the writer's
Update() method, execute the program and post the
results to the list.



Thanks


    Luis



-----------------
neha k wrote:

> Hi Luis,
>  
> Due to problem in example program itkWSRawToPNG.cxx, I have written 
> following simple code for experiment to work on RAW grayscale file.   I 
> am using this pipeline of filters->
> reader--->AnisotropicDiffusionFilter--->GradientMagnitudeFilter--->WaterShed
>  
> Problem is : Output file is of "0" Bytes.   But From 
> GradientMagnitudeFilter, I get desired output.  But watershed does not 
> give output file of original input size, instead it is Zero.
> I tried with 3 different values for conductance_term, threshold and 
> Level.  But still the output file has 0 bytes.
>  
> Please let me know if I am missing anything while using watershed.
>  
> Following the simple code i am using ->
> ***********************************************************************************
> 
> void segment()
> 
> {
> 
> _// declarations_
> 
> int threshold = 0.30, floodLevel = 0.50;
> 
> int noOfIterations = 3, retVal = 1, checkExtn =0;
> 
> char answer='y', inputFile[255]="breast.mhd", 
> outputFile[255]="breast_op.mhd";
> 
> float timeStep = 0.25,
> 
> conductance = 5.0;
> 
> typedef itk::Image< InputPixelType, 2 > InputImageType; // float type
> 
> typedef itk::Image< OutputPixelType, 2 > OutputImageType; // float type
> 
> typedef itk::Image<unsigned long, 2> LabeledImageType;
> 
> typedef itk::Image<float, 2> ScalarImageType;
> 
> typedef itk::Image<unsigned long, 2> WriteImageType;
> 
> typedef itk::GradientAnisotropicDiffusionImageFilter<InputImageType, 
> OutputImageType > FilterType;
> 
> FilterType::Pointer filter = FilterType::New();
> 
> // Instantiate Gradient Magnitude Filter typedef 
> itk::GradientMagnitudeImageFilter<InputImageType, OutputImageType>
> 
> GradientFilterType;
> 
> GradientFilterType::Pointer gradientFilter = GradientFilterType::New();
> 
> typedef itk::WatershedImageFilter<ScalarImageType> WatershedFilterType;
> 
> WatershedFilterType::Pointer watershed = WatershedFilterType::New();
> 
> typedef itk::ImageFileWriter< WriteImageType > WriterType; // write 
> output image as short - use rescaler
> 
> WriterType::Pointer writer = WriterType::New();
> 
> typedef itk::ImageFileReader< InputImageType > ReaderType; // read input 
> image as float
> 
> ReaderType::Pointer reader = ReaderType::New();
> 
> reader->SetFileName(inputFile);
> 
> writer->SetFileName( outputFile );
> 
> _// Read Input Image of RAW Type (uses MetaImage Header)_
> 
> try { reader->Update(); }
> 
> catch( itk::ExceptionObject & e ) {
> 
> std::cerr << "Exception caught during Raw file reading " << std::endl;
> 
> std::cerr << e << std::endl;
> 
> std::cout<< "\n\nMake Sure if the file name you specified already 
> exists...\n";
> 
> return -1;
> 
> }
> 
> _// First apply Edge Preserving smoothing filter "Anisotropic Diffusion 
> Filter"_
> 
> filter->SetInput( reader->GetOutput() );
> 
> filter->SetIterations(noOfIterations); // default value -> 3
> 
> filter->SetConductanceParameter(conductance); // default value -> 5.0
> 
> filter->SetTimeStep(timeStep); // default value -> 0.25 for 2-D image
> 
> _// Pass the output of Anisotropic Diffusion Filter to 
> GradientMagnitudeFilter_
> 
> gradientFilter->SetInput( filter->GetOutput() );
> 
> _// Apply Watershed Segmentation_
> 
> watershed->SetInput(gradientFilter->GetOutput());
> 
> watershed->SetThreshold(threshold); // 0.30
> 
> watershed->SetLevel(floodLevel); // 0.50
> 
> writer->SetInput(watershed->GetOutput());
> 
> _// Execute the pipeline_
> 
> try { writer->Update(); }
> 
> catch( itk::ExceptionObject & excep ){
> 
> std::cerr << "Exception caught !" << std::endl;
> 
> std::cerr << excep << std::endl;
> 
> retVal = -1;
> 
> }
> 
> }
> 
>  
> ***********************************************************************************
> 
> */Joshua Cates <cates at sci.utah.edu>/* wrote:
> 
>     Hi,
> 
>     Thanks for the feedback on the watershed example. This code is old and
>     probably in need of updating for more recent developments in the ITK IO
>     classes. I will take a look.
> 
>     Josh.
> 
>     On Mon, 23 Feb 2004, neha k wrote:
> 
>      >
>      > Hi All,
>      >
>      > I am trying to run exampleI programs in Watershed segmetnation. I
>     tried
>      > the example program with Input file as PGM file (in.pgm) which is of
>      > size (24*7). When I run itkWatershedSegmentationExample.cxx, I get 5
>      > output files of raw format (with level = 0.50). When I set any of
>     those
>      > 5 output files as an input file to second program
>     itkWSRawToPNG.cxx so
>      > that I can convert it to png file to view, program crashes( on
>     statement
>      > reader_update()). What should be the input file given to this second
>      > program? Also, if i want to segment the raw br est images, what
>     reader
>      > should I use and how should i generate the output files? What
>     filters,
>      > mappers should I use to apply watershed segmentation on grayscale
>     breast
>      > images of Raw format to find out if there is any lesion inside
>     the brest
>      > image? (Currently, I am using MetaImageReader to apply other ITK
>     filters
>      > on breast images.)
>      >
>      > Any suggestions are appreiated.
>      >
>      > My input PGM file is as follows
>      >
>      >
>     ***************************************************************************************
>      >
>      > P2
>      >
>      > 24 7
>      >
>      > 15
>      >
>      > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>      >
>      > 0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
>      >
>      > 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
>      >
>      > 0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
>      >
>      > 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
>      > *> 0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
>      >
>      > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>      >
>      >
>      >
>      >
>     ***************************************************************************************
> 
>      >
>      > Thanks,
>      >
>      > Neha
>      >
>      >
>      > ---------------------------------
>      > Do you Yahoo!?
>      > Yahoo! Mail SpamGuard - Read only the mail you want.
> 
>     _______________________________________________
>     Insight-users mailing list
>     Insight-users at itk.org
>     http://www.itk.org/mailman/listinfo/insight-users*
> 
> ------------------------------------------------------------------------
> *Do you Yahoo!?
> Get better spam protection with Yahoo! Mail 
> <http://us.rd.yahoo.com/mailtag_us/*http://antispam.yahoo.com/tools> *