ITK/Examples/Developer/InplaceImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Created page with "This example demonstrates how to write a filter which produces an output image which is equal to the input image except its corner pixel is set to 3. The image that is the input ...")
 
(Deprecated content that is moved to sphinx)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This example demonstrates how to write a filter which produces an output image which is equal to the input image except its corner pixel is set to 3. The image that is the input to the filter also has its corner pixel value changed!
{{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.}}
 
==InPlaceImageFilterExample.cxx==
<source lang="cpp">
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
 
#include "MyInPlaceImageFilter.h"
 
template <typename TImage>
static void CreateImage(TImage* const image);
 
int main(int, char*[])
{
  // Setup types
  typedef itk::Image<int, 2>  ImageType;
  typedef itk::MyInPlaceImageFilter<ImageType>  FilterType;
 
  ImageType::Pointer image = ImageType::New();
  CreateImage(image.GetPointer());
 
  // Create and the filter
  FilterType::Pointer filter = FilterType::New();
  filter->SetInput(image);
  filter->SetInPlace(true);
  filter->Update();
 
  itk::Index<2> cornerPixel = image->GetLargestPossibleRegion().GetIndex();
 
  itk::Index<2> cornerPixel2 = {{image->GetLargestPossibleRegion().GetSize()[0] - 1,
                                image->GetLargestPossibleRegion().GetSize()[1] - 1}};
 
  // The output here is:
  // 3
  // 4
  std::cout << filter->GetOutput()->GetPixel(cornerPixel) << std::endl;
  std::cout << filter->GetOutput()->GetPixel(cornerPixel) << std::endl;
 
  // The output here is also:
  // 3
  // 4
  // That is, the filter changed the pixel in the output, and also in the input.
  std::cout << image->GetPixel(cornerPixel) << std::endl;
  std::cout << image->GetPixel(cornerPixel2) << std::endl;
 
 
 
  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();
 
  image->FillBuffer(0);
}
 
</source>
 
==MyInPlaceImageFilter.h==
<source lang="cpp">
#ifndef __itkMyInPlaceImageFilter_h
#define __itkMyInPlaceImageFilter_h
 
#include "itkInPlaceImageFilter.h"
 
namespace itk
{
template< class TImage>
class MyInPlaceImageFilter : public InPlaceImageFilter<TImage>
{
public:
  /** Standard class typedefs. */
  typedef MyInPlaceImageFilter            Self;
  typedef InPlaceImageFilter<TImage> Superclass;
  typedef SmartPointer< Self >        Pointer;
 
  /** Method for creation through the object factory. */
  itkNewMacro(Self);
 
  /** Run-time type information (and related methods). */
  itkTypeMacro(MyInPlaceImageFilter, InPlaceImageFilter);
 
protected:
  MyInPlaceImageFilter(){}
  ~MyInPlaceImageFilter(){}
 
  /** Does the real work. */
  virtual void GenerateData();
 
private:
  MyInPlaceImageFilter(const Self &); //purposely not implemented
  void operator=(const Self &); //purposely not implemented
 
};
} //namespace ITK
 
 
#ifndef ITK_MANUAL_INSTANTIATION
#include "MyInPlaceImageFilter.hxx"
#endif
 
 
#endif
 
</source>
 
==MyInPlaceImageFilter.txx==
<source lang="cpp">
#ifndef __itkMyInPlaceImageFilter_hxx
#define __itkMyInPlaceImageFilter_hxx
 
#include "MyInPlaceImageFilter.h"
 
#include "itkObjectFactory.h"
#include "itkImageRegionIterator.h"
#include "itkImageRegionConstIterator.h"
 
namespace itk
{
 
template< class TImage>
void MyInPlaceImageFilter< TImage>
::GenerateData()
{
  if (!this->GetRunningInPlace())
  {
    std::cerr << "The idea of this example is to run inplace!" << std::endl;
  }
//  typename TImage::ConstPointer input = this->GetInput();
//
//  itk::Index<2> cornerPixel = this->GetInput()->GetLargestPossibleRegion().GetIndex();
//   typename TImage::PixelType newValue = 3;
 
//  itk::Index<2> cornerPixel2 = {{this->GetInput()->GetLargestPossibleRegion().GetSize()[0] - 1,
//                                  this->GetInput()->GetLargestPossibleRegion().GetSize()[1] - 1}}
//  typename TImage::PixelType newValue2 = 4;
//
//  this->AllocateOutputs();
 
  // Here we set the pixel on the INPUT image, as it is the same data as the output image
  //this->GetInput()->SetPixel( cornerPixel, newValue );
 
  // Here we set the pixel on the OUTPUT image
  //this->GetOutput()->SetPixel( cornerPixel2, newValue2 );
}
 
}// end namespace
 
 
#endif
 
</source>
 
{{ITKCMakeLists|ImageFilter}}

Latest revision as of 18:08, 7 June 2019

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.