ITK/Examples/ImageProcessing/PermuteAxesImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
No edit summary
Line 1: Line 1:
<div class="floatright">[[File:ITK_Examples_Baseline_ImageProcessing_TestPermuteAxesImageFilter.png]]</div>
==PermuteAxesImageFilter.cxx==
==PermuteAxesImageFilter.cxx==
<source lang="cpp">
<source lang="cpp">

Revision as of 20:38, 10 December 2010

ITK Examples Baseline ImageProcessing TestPermuteAxesImageFilter.png

PermuteAxesImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkRescaleIntensityImageFilter.h"
  4. include "itkPermuteAxesImageFilter.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::PermuteAxesImageFilter <ImageType>
   PermuteAxesImageFilterType;
 itk::FixedArray<unsigned int, 2> order;
 order[0] = 1;
 order[1] = 0;
         
 PermuteAxesImageFilterType::Pointer permuteAxesFilter
   = PermuteAxesImageFilterType::New();
 permuteAxesFilter->SetInput(image);
 permuteAxesFilter->SetOrder(order);
 permuteAxesFilter->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 permuted image
 ConnectorType::Pointer permutedConnector = ConnectorType::New();
 permutedConnector->SetInput(permuteAxesFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> permutedActor =
   vtkSmartPointer<vtkImageActor>::New();
 permutedActor->SetInput(permutedConnector->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(permutedActor);
 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 with 2 connected components
 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 a square
 for(unsigned int r = 20; r < 80; r++)
   {
   for(unsigned int c = 20; c < 30; c++)
     {
     ImageType::IndexType pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 200);
     }
   }

} </source>

CMakeLists.txt

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

PROJECT(PermuteAxesImageFilter)

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(PermuteAxesImageFilter PermuteAxesImageFilter.cxx) TARGET_LINK_LIBRARIES(PermuteAxesImageFilter vtkHybrid ITKBasicFilters ITKCommon ITKIO)

</source>