ITK/Examples/SimpleOperations/TranslationTransform
From KitwarePublic
< ITK | Examples
Jump to navigationJump to search
Revision as of 00:05, 23 October 2010 by Daviddoria (talk | contribs) (Created page with "This example currently freezes. The idea is to display an image along with a sphere at (0,0). Then display the translated image with the sphere still at (0,0). This should be eno...")
This example currently freezes. The idea is to display an image along with a sphere at (0,0). Then display the translated image with the sphere still at (0,0). This should be enough to see the translation that occured.
TranslateAnImage.cxx
<source lang="cpp">
- include "itkImage.h"
- include "itkTranslationTransform.h"
- include "itkImageFileReader.h"
- include "itkNormalizeImageFilter.h"
- include "itkResampleImageFilter.h"
- include <itkImageToVTKImageFilter.h>
- include "vtkImageViewer.h"
- include "vtkRenderWindowInteractor.h"
- include "vtkSmartPointer.h"
- include "vtkImageActor.h"
- include "vtkInteractorStyleImage.h"
- include "vtkRenderer.h"
- include "vtkPolyDataMapper.h"
- include "vtkActor.h"
- include "vtkProperty.h"
- include "vtkSphereSource.h"
int main(int argc, char *argv[]) {
if(argc < 2) { std::cerr << "Required: filename" << std::endl; return EXIT_FAILURE; }
typedef itk::Image<unsigned char, 2> ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType; ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName(argv[1]);
typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType; ConnectorType::Pointer originalConnector = ConnectorType::New(); originalConnector->SetInput(reader->GetOutput()); vtkSmartPointer<vtkImageActor> originalActor = vtkSmartPointer<vtkImageActor>::New(); originalActor->SetInput(originalConnector->GetOutput());
itk::TranslationTransform<double,2>::Pointer transform = itk::TranslationTransform<double,2>::New(); itk::TranslationTransform<double,2>::OutputVectorType translation; translation[0] = 10; translation[0] = 20; transform->Translate(translation);
vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); sphereSource->SetRadius(10); sphereSource->SetCenter(0, 0, 0); sphereSource->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(sphereSource->GetOutputPort()); vtkSmartPointer<vtkActor> sphereActor = vtkSmartPointer<vtkActor>::New(); sphereActor->SetMapper(mapper); sphereActor->GetProperty()->SetColor(1,0,0); typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType; ResampleFilterType::Pointer resampleFilter = ResampleFilterType::New(); resampleFilter->SetInput(reader->GetOutput()); resampleFilter->SetTransform(transform);
ConnectorType::Pointer resampledConnector = ConnectorType::New(); resampledConnector->SetInput(resampleFilter->GetOutput());
vtkSmartPointer<vtkImageActor> resampledActor = vtkSmartPointer<vtkImageActor>::New(); resampledActor->SetInput(resampledConnector->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); leftRenderer->AddActor(sphereActor);
rightRenderer->AddActor(resampledActor); rightRenderer->AddActor(sphereActor); leftRenderer->ResetCamera(); rightRenderer->ResetCamera();
renderWindow->Render();
vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
interactor->SetInteractorStyle(style);
interactor->Start();
return EXIT_SUCCESS;
} </source>
CMakeLists.txt
<source lang="cmake"> cmake_minimum_required(VERSION 2.6)
PROJECT(ResampleImageFilter)
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(ResampleImageFilter ResampleImageFilter.cxx) TARGET_LINK_LIBRARIES(ResampleImageFilter vtkHybrid ITKIO ITKNumerics ITKBasicFilters ITKCommon ) </source>