ITK/Examples/Images/ConstantPadImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
Line 7: Line 7:
#include "itkImageRegionIterator.h"
#include "itkImageRegionIterator.h"


#include <itkImageToVTKImageFilter.h>
#include "itkImageToVTKImageFilter.h"


#include "vtkImageViewer.h"
#include "vtkImageViewer.h"
Line 18: Line 18:
typedef itk::Image<unsigned char, 2>  ImageType;
typedef itk::Image<unsigned char, 2>  ImageType;


void CreateImage(ImageType::Pointer image);
static void CreateImage(ImageType::Pointer image);


int main(int, char *[])
int main(int, char *[])
Line 26: Line 26:


   typedef itk::ConstantPadImageFilter <ImageType, ImageType>
   typedef itk::ConstantPadImageFilter <ImageType, ImageType>
          ConstantPadImageFilterType;
    ConstantPadImageFilterType;


   ImageType::SizeType lowerExtendRegion;
   ImageType::SizeType lowerExtendRegion;
Line 39: Line 39:


   ConstantPadImageFilterType::Pointer padFilter
   ConstantPadImageFilterType::Pointer padFilter
          = ConstantPadImageFilterType::New();
    = ConstantPadImageFilterType::New();
   padFilter->SetInput(image);
   padFilter->SetInput(image);
   //padFilter->SetPadBound(outputRegion); // Calls SetPadLowerBound(region) and SetPadUpperBound(region)
   //padFilter->SetPadBound(outputRegion); // Calls SetPadLowerBound(region) and SetPadUpperBound(region)
Line 138: Line 138:
     }
     }
}
}
</source>
</source>



Revision as of 05:20, 16 November 2010

ConstantPadImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkRescaleIntensityImageFilter.h"
  4. include "itkConstantPadImageFilter.h"
  5. include "itkImageRegionIterator.h"
  1. include "itkImageToVTKImageFilter.h"
  1. include "vtkImageViewer.h"
  2. include "vtkRenderWindowInteractor.h"
  3. include "vtkSmartPointer.h"
  4. include "vtkImageActor.h"
  5. include "vtkInteractorStyleImage.h"
  6. include "vtkRenderer.h"

typedef itk::Image<unsigned char, 2> ImageType;

static void CreateImage(ImageType::Pointer image);

int main(int, char *[]) {

 ImageType::Pointer image = ImageType::New();
 CreateImage(image);
 typedef itk::ConstantPadImageFilter <ImageType, ImageType>
   ConstantPadImageFilterType;
 ImageType::SizeType lowerExtendRegion;
 lowerExtendRegion[0] = 20;
 lowerExtendRegion[1] = 30;
 ImageType::SizeType upperExtendRegion;
 upperExtendRegion[0] = 50;
 upperExtendRegion[1] = 40;
 ImageType::PixelType constantPixel = 100;
 ConstantPadImageFilterType::Pointer padFilter
   = ConstantPadImageFilterType::New();
 padFilter->SetInput(image);
 //padFilter->SetPadBound(outputRegion); // Calls SetPadLowerBound(region) and SetPadUpperBound(region)
 padFilter->SetPadLowerBound(lowerExtendRegion);
 padFilter->SetPadUpperBound(upperExtendRegion);
 padFilter->SetConstant(constantPixel);
 padFilter->Update();
 // Visualize first image
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer originalConnector = ConnectorType::New();
 originalConnector->SetInput(image);
 vtkSmartPointer<vtkImageActor> originalActor =
   vtkSmartPointer<vtkImageActor>::New();
 originalActor->SetInput(originalConnector->GetOutput());
 // Visualize padded image
 ConnectorType::Pointer paddedConnector = ConnectorType::New();
 paddedConnector->SetInput(padFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> paddedActor =
   vtkSmartPointer<vtkImageActor>::New();
 paddedActor->SetInput(paddedConnector->GetOutput());
 // There will be one render window
 vtkSmartPointer<vtkRenderWindow> renderWindow =
   vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->SetSize(600, 300);
 vtkSmartPointer<vtkRenderWindowInteractor> interactor =
   vtkSmartPointer<vtkRenderWindowInteractor>::New();
 interactor->SetRenderWindow(renderWindow);
 // Define viewport ranges
 // (xmin, ymin, xmax, ymax)
 double leftViewport[4] = {0.0, 0.0, 0.5, 1.0};
 double rightViewport[4] = {0.5, 0.0, 1.0, 1.0};
 // Setup both renderers
 vtkSmartPointer<vtkRenderer> leftRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(leftRenderer);
 leftRenderer->SetViewport(leftViewport);
 leftRenderer->SetBackground(.6, .5, .4);
 vtkSmartPointer<vtkRenderer> rightRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(rightRenderer);
 rightRenderer->SetViewport(rightViewport);
 rightRenderer->SetBackground(.4, .5, .6);
 // Add the sphere to the left and the cube to the right
 leftRenderer->AddActor(originalActor);
 rightRenderer->AddActor(paddedActor);
 leftRenderer->ResetCamera();
 rightRenderer->ResetCamera();
 renderWindow->Render();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 interactor->SetInteractorStyle(style);
 interactor->Start();
 return EXIT_SUCCESS;

}

void CreateImage(ImageType::Pointer image) {

 // Create an image
 ImageType::RegionType region;
 ImageType::IndexType start;
 start[0] = 0;
 start[1] = 0;
 ImageType::SizeType size;
 unsigned int NumRows = 200;
 unsigned int NumCols = 300;
 size[0] = NumRows;
 size[1] = NumCols;
 region.SetSize(size);
 region.SetIndex(start);
 image->SetRegions(region);
 image->Allocate();
 // Make the whole image white
 itk::ImageRegionIterator<ImageType> iterator(image,image->GetLargestPossibleRegion());
 while(!iterator.IsAtEnd())
   {
   iterator.Set(255);
   ++iterator;
   }

} </source>

CMakeLists.txt

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

PROJECT(ConstantPadImageFilter)

include_directories(/home/doriad/src/ITK/Wrapping/WrapITK/ExternalProjects/ItkVtkGlue/src/)

FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE})

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

ADD_EXECUTABLE(ConstantPadImageFilter ConstantPadImageFilter.cxx) TARGET_LINK_LIBRARIES(ConstantPadImageFilter vtkHybrid ITKBasicFilters ITKCommon ITKIO)

</source>