|
|
Line 12: |
Line 12: |
|
| |
|
| * [[ITK_Release_4/SimpleITK/Advisory Review Board/Prototype Code Discussions]] | | * [[ITK_Release_4/SimpleITK/Advisory Review Board/Prototype Code Discussions]] |
|
| |
| == Gaussian Blur ==
| |
| * Open an image
| |
| * Filter the image with a Gaussian blur using sigma = 2
| |
| * Write the image back out
| |
|
| |
| ==== Procedural ====
| |
| <pre style="display: inline-block;">
| |
| // Read the image
| |
| Image::Pointer im = ImageFileReader::Execute("sample/path/to/image.jpg");
| |
|
| |
| // Apply Gaussian with sigma = 2
| |
| im = GaussianFilter::Execute(im, 2);
| |
|
| |
| // Write out the image
| |
| ImageFileWriter::Execute(im, "sample/path/to/output.png");
| |
| </pre>
| |
|
| |
| ==== Filter Blocks ====
| |
| <pre style="display: inline-block;">
| |
| // Read the image
| |
| ImageFileReader reader;
| |
| reader.SetFilename( "sample/path/to/image.jpg" );
| |
| Image::Pointer im = reader.execute();
| |
|
| |
| // Apply Gaussian with sigma = 2
| |
| Gaussian filter;
| |
| filter.SetSigma( 2 );
| |
| im = filter.execute( im );
| |
|
| |
| // Write out the image
| |
| ImageFileWriter writer;
| |
| writer.SetFilename( "sample/path/to/output.png" );
| |
| writer.execute( im );
| |
| </pre>
| |
|
| |
| ==== Pipelined ====
| |
| <pre style="display: inline-block;">
| |
| // Read the image
| |
| ImageFileReader reader;
| |
| reader.SetFilename( "sample/path/to/image.jpg" );
| |
|
| |
| // Apply Gaussian with sigma = 2
| |
| Gaussian filter;
| |
| filter.SetSigma( 2 );
| |
| filter.SetInput( reader.getOutput() );
| |
|
| |
| // Write out the image
| |
| ImageFileWriter writer;
| |
| writer.SetFilename( "sample/path/to/output.png" );
| |
| writer.SetInput( filter->GetOutput() );
| |
|
| |
| // Execute the pipieline
| |
| writer.Update();
| |
| </pre>
| |
|
| |
| == Image Registration ==
| |
| * Open two images (one fixed, one moving)
| |
| * Register the moving image to the fixed image using affine registration
| |
| * Resample the moving image using the computed transform
| |
| * Write the resampled image out
| |
|
| |
| ==== Procedural ====
| |
| <pre style="display: inline-block;">
| |
| // Open the fixed and moving images
| |
| Image::Pointer fixedImage = ImageFileReader::Execute( "path/to/fixed.jpg" );
| |
| Image::Pointer movingImage = ImageFileReader::Execute( "path/to/moving.jpg" );
| |
|
| |
| // Register the moving image to the fixed image
| |
| AffineTransform::Pointer transform AffineRegistrator::Execute( fixedImage, movingImage );
| |
|
| |
| // Resample the moving image
| |
| movingImage = ImageResampler::Execute( movingImage, transform );
| |
|
| |
| // Write out the resampled image
| |
| ImageFileWriter::Ececute( movingImage, "path/to/output.png" );
| |
| </pre>
| |
|
| |
| ==== Filter blocks ====
| |
| <pre style="display: inline-block;">
| |
| // Open the fixed and moving images
| |
| ImageFileReader reader;
| |
| reader.SetFilename( "path/to/fixed.jpg" );
| |
| Image::Pointer fixedImage = reader.execute();
| |
| reader.SetFilename( "path/to/moving.jpg" );
| |
| Image::Pointer movingImage = reader.execute();
| |
|
| |
| // Register the moving image to the fixed image
| |
| AffineRegistrator registrator;
| |
| registrator.SetFixedImage( fixedImage );
| |
| registrator.SetMovingImage( movingImage );
| |
| AffineTransform transform;
| |
| transform = registrator.execute();
| |
|
| |
| // Resample the moving image
| |
| Resampler resampler;
| |
| resampler.SetTransform( transform );
| |
| movingImage = resampler.execute( movingImage );
| |
|
| |
| // Write out the resampled image
| |
| ImageFileWriter writer;
| |
| writer.SetFilename( "path/to/output.png" );
| |
| writer.ececute( movingImage );
| |
| </pre>
| |
|
| |
| ==== Pipeline ====
| |
| <pre style="display: inline-block;">
| |
| // Open the fixed and moving images
| |
| ImageFileReader reader1;
| |
| ImageFileReader reader2;
| |
| reader1.SetFilename( "path/to/fixed.jpg" );
| |
| reader2.SetFilename( "path/to/moving.jpg" );
| |
|
| |
| // Register the moving image to the fixed image
| |
| AffineRegistrator registrator;
| |
| registrator.SetFixedImage( reader1.GetOutput() );
| |
| registrator.SetMovingImage( reader2.GetOutput() );
| |
|
| |
| // Resample the moving image
| |
| Resampler resampler;
| |
| resampler.SetInput( reader2.GetOutput() );
| |
| resampler.SetTransform( registrator.GetOutput() );
| |
|
| |
| // Write out the resampled image
| |
| ImageFileWriter writer;
| |
| writer.SetFilename( "path/to/output.png" );
| |
| writer.SetInput( movingImage );
| |
|
| |
| // Execute the pipeline
| |
| writer.Update();
| |
| </pre>
| |
|
| |
| ==== Enum approach ====
| |
| <pre>
| |
| // NOTE: Language = C#
| |
| // Create metric
| |
| itk::simple::simpleMetric metric;
| |
| metric.setType( itk::simple::MattesMutualInformation );
| |
| metric.setParameterInt( "NumberOfHistogramBins", 30 );
| |
| metric.setParameterInt( "NumberOfSpatialSamples", 1000 );
| |
|
| |
| // Create interpolator
| |
| itk::simple::simpleInterpolator interpolator;
| |
| interpolator.setType( itk::simple::LanczosWindowedSincInterpolation );
| |
|
| |
| // Create transform
| |
| itk::simple::simpleTransform transform;
| |
| transform.setType( itk::simple::AffineTransform );
| |
|
| |
| // Create optimizer
| |
| itk::simple::simpleOptimizer optimizer;
| |
| optimizer.setType( itk::simple::RegularStepGradientDescentOptimizer );
| |
| optimizer.setParameterInt( "NumberOfIterations", 100 );
| |
| optimizer.setParameterDouble( "MinimumStepLength", 0.005 );
| |
| optimizer.setParameterDouble( "MaximumStepLength", 1.0 );
| |
| optimizer.setParameterBoolean( "Maximize", true );
| |
|
| |
| // Registration
| |
| itk::simple::simpleRegistration registration;
| |
| registration.setMetric( metric );
| |
| registration.setInterpolator( interpolator );
| |
| registration.setTransform( transform );
| |
| registration.setOptimizer( optimizer );
| |
| registration.setFixedImage( fixedImage );
| |
| registration.setMovingImage( movingImage );
| |
| </pre>
| |
|
| |
| == Level Set ==
| |
|
| |
| == Region Growing ==
| |
|
| |
| == Watershed ==
| |
|
| |
| == QuadEdgeMesh ==
| |