ITK/Examples/Developer/ImageFilterMultipleInputsDifferentType
ImageFilterMultipleInputsDifferentTypeExample.cxx
<source lang="cpp">
- 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;
} </source>
ImageFilterMultipleInputsDifferentType.h
<source lang="cpp">
- 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(){}
/** 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
</source>
ImageFilterMultipleInputsDifferentType.txx
<source lang="cpp">
- 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> void ImageFilterMultipleInputsDifferentType<TImage, TMask>::GenerateData() {
typename TImage::ConstPointer input = this->GetInput(0); //typename TMask::ConstPointer mask = const_cast<typename TMask::Pointer> (this->GetInput(1)); typename TMask::ConstPointer mask = const_cast<TMask*> (this->GetInput(1)); // invalid cast //error: invalid const_cast from type ‘const itk::Image<itk::CovariantVector<unsigned char, 3u>, 2u>*’ to type ‘itk::Image<unsigned char, 2u>*’
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
</source>
CMakeLists.txt
<source lang="cmake"> cmake_minimum_required(VERSION 2.6)
PROJECT(ImageFilterMultipleInputsDifferentType)
FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(ImageFilterMultipleInputsDifferentType ImageFilterMultipleInputsDifferentTypeExample.cxx) TARGET_LINK_LIBRARIES(ImageFilterMultipleInputsDifferentType ITKBasicFilters ITKIO ITKCommon)
</source>