[Insight-users] CannyLevelSet Speed Image - dimension returned
Zero
Luis Ibanez
luis.ibanez at kitware.com
Sat Mar 26 11:58:53 EST 2005
Hi Conn,
Please try the following first:
1) before calling Update() in the writer, invoke
reader1->Update();
reader2->Update();
reader1->GetOutput()->Print( std::cout );
reader2->GetOutput()->Print( std::cout );
2) then run the program again, and post to the list
the result that you get in the standard output.
That should help to determine whether the input
images are being provided correctly to the
canny level set filtetr.
Please let us know what you find.
Thanks
Luis
-------------------------
conn sullivan wrote:
> Hello All,
>
> I am new to ITK and currently trying to check with Level set
> segmentation methods.
> I have written following code to refine the segmentation of Threshold
> Level Set. I have used different types of images for this as input.
> The problem is: speed image returned is of 0 bytes, basically
> GetRegionIO() receives 0 as dimension of the input image.
> Does anyone have idea why this is happening?
>
> Ex. -->
> Input Files used -->
> Input FileName --> c:\\BrainT1Slice_thresholdLevelSet.png
> Feature Image --> c:\\BrainT1Slice.png
> Output FileName --> c:\\BrainT1Slice_output.png
>
> Command Line paramters are used as -->
> c:\\BrainT1Slice.png 0.02 20 c:\\BrainT1Slice_thresholdLevelSet.png 10
> 128 10 -1 1 -1 -1 -1 -1 -1 -1 0.3 30 c:\\BrainT1Slice_op.png
>
> int main( int argc, char *argv[] )
> {
> FILE *fp = fopen("c:\\check.txt", "w+");
> if(NULL != fp ){
> fprintf(fp,"argv[1] Input File Name --> %s \n", argv[1]);
> fprintf(fp,"argv[2] RMS Error --> %s \n", argv[2]);
> fprintf(fp,"argv[3] Maximum Number Of Iterations--> %s \n", argv[3]);
> fprintf(fp,"argv[4] Input File #2 --> %s \n", argv[4]);
> fprintf(fp,"argv[5] Variance --> %s \n", argv[5]);
> fprintf(fp,"argv[6] Iso-Surface Value --> %s \n", argv[6]);
> fprintf(fp,"argv[7] Lower Threshold --> %s \n", argv[7]);
> fprintf(fp,"argv[8] Upper Threshold --> %s \n", argv[8]);
> fprintf(fp,"argv[9] AdvectionScaling--> %s \n", argv[9]);
> fprintf(fp,"argv[10] SeedX --> %s \n", argv[10]);
> fprintf(fp,"argv[11] SeedY --> %s \n", argv[11]);
> fprintf(fp,"argv[12] X-Radius/InitialDistance--> %s \n", argv[12]);
> fprintf(fp,"argv[13] Y-Radius --> %s \n", argv[13]);
> fprintf(fp,"argv[14] SeedX2 --> %s \n", argv[14]);
> fprintf(fp,"argv[15] SeedY2 --> %s \n", argv[15]);
> fprintf(fp,"argv[16] Propagation Scaling --> %s \n", argv[16]);
> fprintf(fp,"argv[17] Curvature Scaling --> %s \n", argv[17]);
> fprintf(fp,"argv[18] Output File Name --> %s \n", argv[18]);
> }
> fclose(fp);
> typedef float InternalPixelType;
> const unsigned int Dimension = 2;
> typedef unsigned char OutputPixelType;
> typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
> typedef itk::BinaryThresholdImageFilter< InternalImageType,
> OutputImageType > ThresholdingFilterType;
> typedef itk::ImageFileReader< InternalImageType > ReaderType;
> typedef itk::ImageFileWriter< OutputImageType > WriterType;
> typedef float InternalPixelType;
> typedef unsigned char OutputPixelType;
> typedef itk::BinaryThresholdImageFilter<InternalImageType,
> OutputImageType> ThresholdingFilterType;
> ThresholdingFilterType::Pointer thresholder =
> ThresholdingFilterType::New();
>
> float propgationScale = 0.0, curvatureScale = 0.0;
> typedef itk::ImageFileReader< InternalImageType > ReaderType;
> typedef itk::ImageFileWriter< OutputImageType > WriterType;
> ReaderType::Pointer reader1 = ReaderType::New();
> ReaderType::Pointer reader2 = ReaderType::New();
> WriterType::Pointer writer = WriterType::New();
> reader1->SetFileName( argv[1] ); // Feature image (smoothed image)
> reader2->SetFileName( argv[4] ); // already segmented initial model
> writer->SetFileName( argv[18] ); // output file name
> thresholder->SetUpperThreshold( 10.0 );
> thresholder->SetLowerThreshold( 0.0 );
> thresholder->SetOutsideValue( 0 );
> thresholder->SetInsideValue( 255 );
>
> typedef itk::CannySegmentationLevelSetImageFilter< InternalImageType,
> InternalImageType >
> CannySegmentationLevelSetImageFilterType;
> CannySegmentationLevelSetImageFilterType::Pointer cannySegmentation =
> CannySegmentationLevelSetImageFilterType::New();
>
> cannySegmentation->SetAdvectionScaling( ::atof(argv[9]) );
> cannySegmentation->SetCurvatureScaling( ::atof(argv[17]) );
> cannySegmentation->SetPropagationScaling( 0.0 );
> // For cases in which some surface expansion is to be allowed, a
> non-zero value may be set for the
> // propagation term. The propagation term is simply D. Here,we set it
> to 0.0
> // The maximum number of iterations is specified from the command
> line. It may not be desirable in some
> // applications to run the filter to convergence. Only a few
> iterations may be required.
>
> cannySegmentation->SetMaximumRMSError( ::atof(argv[2]) );
> cannySegmentation->SetNumberOfIterations( ::atoi(argv[3]) );
> cannySegmentation->SetThreshold( ::atof(argv[7]) );
> cannySegmentation->SetVariance( ::atof(argv[5]) );
> cannySegmentation->SetIsoSurfaceValue( ::atof(argv[6]) );
> cannySegmentation->SetInput( reader2->GetOutput() );
> cannySegmentation->SetFeatureImage( reader1->GetOutput() );
> thresholder->SetInput( cannySegmentation->GetOutput() );
> writer->SetInput( thresholder->GetOutput() );
> // Examining the propagation (speed) and advection images can help the
> process of tuning parameters.
> // These images are available using \code{Set/Get} methods from the
> filter after it has been updated.
>
> try {
> writer->Update();
> }
> catch( itk::ExceptionObject & excep ) {
> std::cerr << "Exception caught !" << std::endl;
> std::cerr << excep << std::endl;
> }
> // Print useful information
> std::cout << std::endl;
> std::cout << "Max. no. iterations: " <<
> cannySegmentation->GetNumberOfIterations() << std::endl;
> std::cout << "Max. RMS error: " <<
> cannySegmentation->GetMaximumRMSError() << std::endl;
> std::cout << std::endl;
> std::cout << "No. elpased iterations: " <<
> cannySegmentation->GetElapsedIterations() << std::endl;
> std::cout << "RMS change: " << cannySegmentation->GetRMSChange() <<
> std::endl;
> // Write out the speed (propagation) image for parameter tuning purposes.
> //itk::ImageFileWriter< OutputImageType >::Pointer speedWriter =
> itk::ImageFileWriter<OutputImageType>::New();
> itk::ImageFileWriter< InternalImageType >::Pointer speedWriter =
> itk::ImageFileWriter<InternalImageType>::New();
>
> speedWriter->SetFileName( "Canny_speedImage.mhd" );
> speedWriter->SetInput( cannySegmentation->GetSpeedImage());
>
> // Since output of LaplacianLevelSet is Float type, we need to rescale
> it to "unsigned char" (for png).
> /*typedef itk::RescaleIntensityImageFilter< InternalImageType,
> OutputImageType > RescaleFilterType;
> RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
>
> // Set Rescaler Parameters
> rescaler->SetOutputMinimum( 0 );
> rescaler->SetOutputMaximum( 255 );
>
> speedWriter->SetFileName( "Canny_speedImage.mhd" );
> rescaler->SetInput( cannySegmentation->GetSpeedImage());
> speedWriter->SetInput( rescaler->GetOutput() ); */
>
> try { speedWriter->Update(); }
> catch( itk::ExceptionObject & excep ){
> std::cerr << "Exception caught !" << std::endl;
> std::cerr << excep << std::endl;
> }
> return 0;
> } // end of main
>
> ------------------------------------------------------------------------
> Do you Yahoo!?
> Yahoo! Small Business - Try our new resources site!
> <http://us.rd.yahoo.com/evt=31637/*http://smallbusiness.yahoo.com/resources/>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
More information about the Insight-users
mailing list