ITK/Examples/Developer/ImageFilterMultipleInputs

From KitwarePublic
< ITK‎ | Examples
Revision as of 20:45, 3 December 2010 by Daviddoria (talk | contribs) (Created page with "==ImageFilterMultipleInputsExample.cxx== <source lang="cpp"> #include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" #include "ImageFilterMultipleI...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

ImageFilterMultipleInputsExample.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileReader.h"
  3. include "itkImageFileWriter.h"
  1. include "ImageFilterMultipleInputs.h"

int main(int, char*[]) {

 // Setup types
 typedef itk::Image<unsigned char, 2>   ImageType;
 typedef itk::ImageFilterMultipleInputs<ImageType>  FilterType;
 typedef itk::ImageFileReader<ImageType> ReaderType;
 ReaderType::Pointer reader = ReaderType::New();
 reader->SetFileName("Test.jpg");
 reader->Update();
 
 // Create and the filter
 FilterType::Pointer filter = FilterType::New();
 filter->SetInput(reader->GetOutput());
 filter->Update();
 typedef  itk::ImageFileWriter< ImageType  > WriterType;
 WriterType::Pointer writer = WriterType::New();
 writer->SetFileName("TestOutput.jpg");
 writer->SetInput(filter->GetOutput());
 writer->Update();
 return EXIT_SUCCESS;

} </source>

ImageFilterMultipleInputs.h

<source lang="cpp">

  1. ifndef __itkImageFilterMultipleInputs_h
  2. define __itkImageFilterMultipleInputs_h
  1. include "itkImageToImageFilter.h"

namespace itk { template< class TImage> class ImageFilterMultipleInputs : public ImageToImageFilter< TImage, TImage > { public:

 /** Standard class typedefs. */
 typedef ImageFilterMultipleInputs             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(ImageFilterMultipleInputs, ImageToImageFilter);
 /** The image to be inpainted in regions where the mask is white.*/
 void SetInputImage(const TImage* image);
 /** The mask to be inpainted. White pixels will be inpainted, black pixels will be passed through to the output.*/
 void SetInputMask(const TImage* mask);
 

protected:

 ImageFilterMultipleInputs();
 ~ImageFilterMultipleInputs(){}
 /** Does the real work. */
 virtual void GenerateData();

private:

 ImageFilterMultipleInputs(const Self &); //purposely not implemented
 void operator=(const Self &);  //purposely not implemented

}; } //namespace ITK


  1. ifndef ITK_MANUAL_INSTANTIATION
  2. include "ImageFilterMultipleInputs.txx"
  3. endif


  1. endif // __itkImageFilterMultipleInputs_h

</source>

ImageFilterMultipleInputs.txx

<source lang="cpp">

  1. ifndef __itkImageFilterMultipleInputs_txx
  2. define __itkImageFilterMultipleInputs_txx
  1. include "ImageFilterMultipleInputs.h"
  1. include "itkObjectFactory.h"
  2. include "itkImageRegionIterator.h"
  3. include "itkImageRegionConstIterator.h"

namespace itk {

template< class TImage> ImageFilterMultipleInputs<TImage>::ImageFilterMultipleInputs() {

 this->SetNumberOfRequiredInputs(2);

}

template< class TImage> void ImageFilterMultipleInputs<TImage>::SetInputImage(const TImage* image) {

 SetNthInput(0, const_cast<TImage*>(image));

}

template< class TImage> void ImageFilterMultipleInputs<TImage>::SetInputMask(const TImage* mask) {

 SetNthInput(1, const_cast<TImage*>(mask));

}

template< class TImage> void ImageFilterMultipleInputs<TImage>::GenerateData() {

 typename TImage::ConstPointer input = this->GetInput();
 
 typename TImage::Pointer output = this->GetOutput();
 output->SetRegions(input->GetLargestPossibleRegion());
 output->Allocate();  
 
 itk::ImageRegionIterator<TImage> outputIterator(output, output->GetLargestPossibleRegion());
 itk::ImageRegionConstIterator<TImage> inputIterator(input, input->GetLargestPossibleRegion());
 while(!outputIterator.IsAtEnd())
   {
   if(inputIterator.GetIndex()[0] == inputIterator.GetIndex()[1])
     {
     outputIterator.Set(255);
     }
   else
     {
     outputIterator.Set(inputIterator.Get());
     }
   ++inputIterator;
   ++outputIterator;
   }

}

}// end namespace


  1. endif

</source>

CMakeLists.txt

<source lang="cmake"> cmake_minimum_required(VERSION 2.6)

PROJECT(ImageFilterMultipleInputs)

FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})

ADD_EXECUTABLE(ImageFilterMultipleInputs ImageFilterMultipleInputsExample.cxx) TARGET_LINK_LIBRARIES(ImageFilterMultipleInputs ITKBasicFilters ITKIO ITKCommon)

</source>