ITK/Examples/Developer/ImageFilterMultipleInputsDifferentType
From KitwarePublic
Contents |
ImageFilterMultipleInputsDifferentTypeExample.cxx
#include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" #include "itkCovariantVector.h" #include "ImageFilterMultipleInputsDifferentType.h" int main(int, char*[]) { // Setup types typedef itk::Image<itk::CovariantVector<unsigned char, 3>, 2> VectorImageType; typedef itk::Image<unsigned char, 2> ScalarImageType; typedef itk::ImageFilterMultipleInputsDifferentType<VectorImageType, ScalarImageType> FilterType; typedef itk::ImageFileReader<VectorImageType> 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< VectorImageType > WriterType; WriterType::Pointer writer = WriterType::New(); writer->SetFileName("TestOutput.jpg"); writer->SetInput(filter->GetOutput()); writer->Update(); return EXIT_SUCCESS; }
ImageFilterMultipleInputsDifferentType.h
#ifndef __itkImageFilterMultipleInputsDifferentType_h #define __itkImageFilterMultipleInputsDifferentType_h #include "itkImageToImageFilter.h" namespace itk { template< typename TImage, typename TMask> class ImageFilterMultipleInputsDifferentType : public ImageToImageFilter< TImage, TImage > { public: /** Standard class typedefs. */ typedef ImageFilterMultipleInputsDifferentType 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(ImageFilterMultipleInputsDifferentType, 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 TMask* mask); protected: ImageFilterMultipleInputsDifferentType(); ~ImageFilterMultipleInputsDifferentType(){} typename TImage::ConstPointer GetInputImage(); typename TMask::ConstPointer GetInputMask(); /** Does the real work. */ virtual void GenerateData(); private: ImageFilterMultipleInputsDifferentType(const Self &); //purposely not implemented void operator=(const Self &); //purposely not implemented }; } //namespace ITK #ifndef ITK_MANUAL_INSTANTIATION #include "ImageFilterMultipleInputsDifferentType.txx" #endif #endif // __itkImageFilterMultipleInputsDifferentType_h
ImageFilterMultipleInputsDifferentType.txx
#ifndef __itkImageFilterMultipleInputs_txx #define __itkImageFilterMultipleInputs_txx #include "ImageFilterMultipleInputsDifferentType.h" #include "itkObjectFactory.h" #include "itkImageRegionIterator.h" #include "itkImageRegionConstIterator.h" namespace itk { template< typename TImage, typename TMask> ImageFilterMultipleInputsDifferentType<TImage, TMask>::ImageFilterMultipleInputsDifferentType() { this->SetNumberOfRequiredInputs(2); } template< typename TImage, typename TMask> void ImageFilterMultipleInputsDifferentType<TImage, TMask>::SetInputImage(const TImage* image) { SetNthInput(0, const_cast<TImage*>(image)); } template< typename TImage, typename TMask> void ImageFilterMultipleInputsDifferentType<TImage, TMask>::SetInputMask(const TMask* mask) { SetNthInput(1, const_cast<TMask*>(mask)); } template< typename TImage, typename TMask> typename TImage::ConstPointer ImageFilterMultipleInputsDifferentType<TImage, TMask>::GetInputImage() { return static_cast< const TImage * > ( this->ProcessObject::GetInput(0) ); } template< typename TImage, typename TMask> typename TMask::ConstPointer ImageFilterMultipleInputsDifferentType<TImage, TMask>::GetInputMask() { return static_cast< const TMask * > ( this->ProcessObject::GetInput(1) ); } template< typename TImage, typename TMask> void ImageFilterMultipleInputsDifferentType<TImage, TMask>::GenerateData() { typename TImage::ConstPointer input = this->GetInputImage(); typename TMask::ConstPointer mask = this->GetInputMask(); 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 #endif
CMakeLists.txt
cmake_minimum_required(VERSION 2.8) project(ImageFilterMultipleInputsDifferentTypeExample) find_package(ITK REQUIRED) include(${ITK_USE_FILE}) add_executable(ImageFilterMultipleInputsDifferentTypeExample ImageFilterMultipleInputsDifferentTypeExample.cxx) if( "${ITK_VERSION_MAJOR}" LESS 4 ) target_link_libraries(ImageFilterMultipleInputsDifferentTypeExample ITKReview ${ITK_LIBRARIES}) else( "${ITK_VERSION_MAJOR}" LESS 4 ) target_link_libraries(ImageFilterMultipleInputsDifferentTypeExample ${ITK_LIBRARIES}) endif( "${ITK_VERSION_MAJOR}" LESS 4 )