|
|
(3 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
| This example demonstrates how to write a filter that produces an output image that is equal to the input image except its corner pixel is set to 3. The image that is the input to the filter remains unchanged.
| | {{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 releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.}} |
| | |
| ==ImageFilterExample.cxx==
| |
| <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<int, 2> ImageType;
| |
| typedef itk::ImageFilter<ImageType> FilterType;
| |
| | |
| ImageType::Pointer image = ImageType::New();
| |
| CreateImage(image.GetPointer());
| |
| | |
| // Create and the filter
| |
| FilterType::Pointer filter = FilterType::New();
| |
| filter->SetInput(image);
| |
| filter->Update();
| |
| | |
| itk::Index<2> cornerPixel = image->GetLargestPossibleRegion().GetIndex();
| |
| | |
| // The output here is:
| |
| // 0
| |
| // 3
| |
| // That is, the filter changed the pixel, but the input remained unchagned.
| |
| std::cout << image->GetPixel(cornerPixel) << std::endl;
| |
| std::cout << filter->GetOutput()->GetPixel(cornerPixel) << 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>
| |
| | |
| ==ImageFilter.h==
| |
| <source lang="cpp">
| |
| #ifndef __itkImageFilter_h
| |
| #define __itkImageFilter_h
| |
| | |
| #include "itkImageToImageFilter.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); | |
| | |
| 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_hxx
| |
| #define __itkImageFilter_hxx
| |
| | |
| #include "ImageFilter.h"
| |
| #include "itkObjectFactory.h"
| |
| #include "itkImageRegionIterator.h"
| |
| #include "itkImageRegionConstIterator.h"
| |
| | |
| namespace itk
| |
| {
| |
| | |
| template< class TImage>
| |
| void ImageFilter< TImage>
| |
| ::GenerateData()
| |
| {
| |
| typename TImage::ConstPointer input = this->GetInput();
| |
| typename TImage::Pointer output = this->GetOutput();
| |
| | |
| itk::Index<2> cornerPixel = input->GetLargestPossibleRegion().GetIndex();
| |
| typename TImage::PixelType newValue = 3;
| |
| | |
| this->AllocateOutputs();
| |
| | |
| ImageAlgorithm::Copy(input.GetPointer(), output.GetPointer(), output->GetRequestedRegion(),
| |
| output->GetRequestedRegion() );
| |
| | |
| output->SetPixel( cornerPixel, newValue );
| |
| }
| |
| | |
| }// end namespace
| |
| | |
| | |
| #endif
| |
| </source>
| |
| | |
| {{ITKCMakeLists|ImageFilter}}
| |