|
|
(2 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
| ==ImageFilterMultipleInputsDifferentTypeExample.cxx== | | {{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.}} |
| <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(){}
| |
| | |
| 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
| |
| </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>
| |
| 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
| |
| </source>
| |
| | |
| {{ITKCMakeLists|ImageFilterMultipleInputsDifferentTypeExample}}
| |