ITK/Examples/Developer/MiniPipeline: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Deprecated content that is moved to sphinx)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
==MiniPipeline.cxx==
DS{{warning|1=The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/*  pages likely require ITK version 4.13 or earlier releasesIn many cases, the examples on this page no longer conform to the best practices for modern ITK versions.}}
<source lang="cpp">
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
 
#include "ImageFilter.h"
 
template <typename TImage>
static void CreateImage(TImage* const image);
 
int main(int, char*[])
{
  // Setup types
  typedef itk::Image<unsigned char, 2>  ImageType;
  typedef itk::ImageFilter<ImageType>  FilterType;
 
  ImageType::Pointer image = ImageType::New();
  CreateImage(image.GetPointer());
 
  std::cout << "Input:" << std::endl;
  std::cout << image->GetLargestPossibleRegion() << std::endl;
  // Create and the filter
  FilterType::Pointer filter = FilterType::New();
  filter->SetInput(image);
  filter->Update();
 
  std::cout << "Input:" << std::endl;
  std::cout << filter->GetOutput()->GetLargestPossibleRegion() << std::endl;
 
  typedef  itk::ImageFileWriter< ImageType  > WriterType;
  WriterType::Pointer writer = WriterType::New();
  writer->SetFileName("Output.png");
  writer->SetInput(filter->GetOutput());
  writer->Update();
 
  return EXIT_SUCCESS;
}
 
template <typename TImage>
void CreateImage(TImage* const image)
{
  // Create an image with 2 connected components
  typename TImage::IndexType corner = {{0,0}};
 
  unsigned int NumRows = 200;
  unsigned int NumCols = 300;
  typename TImage::SizeType size = {{NumRows, NumCols}};
 
  typename TImage::RegionType region(corner, size);
 
  image->SetRegions(region);
  image->Allocate();
 
  // Make another square
  for(unsigned int r = 40; r < 100; r++)
  {
    for(unsigned int c = 40; c < 100; c++)
    {
      typename TImage::IndexType pixelIndex;
      pixelIndex[0] = r;
      pixelIndex[1] = c;
 
      image->SetPixel(pixelIndex, 15);
    }
  }
}
 
</source>
 
==ImageFilter.h==
<source lang="cpp">
#ifndef __itkImageFilter_h
#define __itkImageFilter_h
 
#include "itkImageToImageFilter.h"
 
#include "itkRecursiveGaussianImageFilter.h"
 
namespace itk
{
template< class TImage>
class ImageFilter:public ImageToImageFilter< TImage, TImage >
{
public:
  /** Standard class typedefs. */
  typedef ImageFilter            Self;
  typedef ImageToImageFilter< TImage, TImage > Superclass;
  typedef SmartPointer< Self >        Pointer;
 
  /** Method for creation through the object factory. */
  itkNewMacro(Self);
 
  /** Run-time type information (and related methods). */
  itkTypeMacro(ImageFilter, ImageToImageFilter);
 
 
  /** Image dimension. */
  itkStaticConstMacro(ImageDimension, unsigned int,
                      TImage::ImageDimension);
 
 
  /**  Smoothing filter type */
  typedef RecursiveGaussianImageFilter<
    TImage,
    TImage
    >    InternalGaussianFilterType;
 
  /**  Pointer to a gaussian filter. */
  typedef typename InternalGaussianFilterType::Pointer InternalGaussianFilterPointer;
 
protected:
  ImageFilter();
  ~ImageFilter(){}
 
  /** Does the real work. */
  virtual void GenerateData();
 
private:
  ImageFilter(const Self &); //purposely not implemented
  void operator=(const Self &); //purposely not implemented
 
};
} //namespace ITK
 
 
#ifndef ITK_MANUAL_INSTANTIATION
#include "ImageFilter.hxx"
#endif
 
 
#endif // __itkImageFilter_h
 
</source>
 
==ImageFilter.hxx==
<source lang="cpp">
#ifndef __itkImageFilter_txx
#define __itkImageFilter_txx
 
#include "ImageFilter.h"
#include "itkObjectFactory.h"
#include "itkImageRegionIterator.h"
 
namespace itk
{
 
template< class TImage>
ImageFilter< TImage>
::ImageFilter()
{
 
}
 
template< class TImage>
void ImageFilter< TImage>
::GenerateData()
{
   InternalGaussianFilterPointer smoothingFilters[ImageDimension];
 
  // Instantiate all filters
  for ( unsigned int i = 0; i < ImageDimension; i++ )
    {
    smoothingFilters[i] = InternalGaussianFilterType::New();
    smoothingFilters[i]->SetOrder(InternalGaussianFilterType::ZeroOrder);
    smoothingFilters[i]->SetDirection(i);
    }
 
  // Connect all filters (start at 1 because 0th filter is connected to the input
  for ( unsigned int i = 1; i < ImageDimension; i++ )
    {
    smoothingFilters[i]->SetInput(
      smoothingFilters[i - 1]->GetOutput() );
    }
 
  const typename TImage::ConstPointer inputImage( this->GetInput() );
 
  const typename TImage::RegionType region = inputImage->GetRequestedRegion();
  const typename TImage::SizeType  size  = region.GetSize();
 
  smoothingFilters[0]->SetInput(inputImage);
 
  smoothingFilters[ImageDimension-1]->Update();
 
  // Copy the output from the last filter
  //this->GraftOutput( m_SmoothingFilters[ImageDimension-1]->GetOutput() );
  this->GetOutput()->Graft(smoothingFilters[ImageDimension-1]->GetOutput() );
}
 
}// end namespace
 
 
#endif
</source>
 
{{ITKCMakeLists|MiniPipeline}}

Latest revision as of 19:58, 7 June 2019

DS

Warning: The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.