Presentation is loading. Please wait.

Presentation is loading. Please wait.

ITK Deformable Registration

Similar presentations


Presentation on theme: "ITK Deformable Registration"— Presentation transcript:

1 ITK Deformable Registration
Demons Methods

2 Deformable Registration

3 Deformable Transforms

4 Deformable Transformation
y y Transform x x Fixed Image Moving Image

5 Deformable Transformation
y y Transform x x Fixed Image Moving Image

6 Deformable Transformation
y y Transform x x Fixed Image Moving Image

7 Image Resampling Interpolator Fixed Image Resample Image Moving Image
Filter Moving Image Deformed Image Transform

8 Image Resampling Fixed Image Interpolator Resample Image Filter
Moving Image Orthogonal Basis Explicit Vector Field Splines High Order Polynomials Deformed Image Transform

9 Kernel Splines Transforms
Target Landmarks Source Landmarks Interpolated Values Displacement Vectors

10 Kernel Spline Transforms
Thin Plates Thin Plates R2 log R Elastic Body Elastic Body Reciprocal Volume

11 Kernel Spline Transforms
InsightApplications / ThinPlateSplines

12 Resampling: Kernel Spline Transform
#include "itkImage.h" #include "itkResampleImageFilter.h" #include "itkLinearInterpolateImageFunction.h" #include "itkElasticBodySplineKernelTransform.h" typedef itk::Image< char, 2 > ImageType; ImageType::ConstPointer fixedImage = GetFixedImage(); ImageType::ConstPointer movingImage = GetMovingImage(); typedef itk::LinearInterpolateImageFunction< ImageType, double > InterpolatorType; InterpolatorType::Pointer interpolator = InterpolatorType::New(); typedef itk::ResampleImageFilter< ImageType, ImageType > FilterType; FilterType::Pointer resampler = FilterType::New();

13 Resampling: Kernel Spline Transform
typedef itk::ElasticBodySplineKernelTransform< double, 2 > TransformType; TransformType::Pointer transform = TransformType::New(); resampler->SetInterpolator( interpolator ); resampler->SetInput( movingImage ); ImageType::RegionType region = fixedImage->GetBufferedRegion(); resampler->SetSize( region->GetSize() ); resampler->SetOutputStartIndex( region->GetIndex() ); resampler->SetOutputSpacing( fixedImage->GetSpacing() ); resampler->SetOutputOrigin( fixedImage->GetOrigin() );

14 Resampling: Kernel Spline Transform
resampler->SetTransform( transform ); typedef TransformType::PointSetType PointSetType; PointSetType::Pointer sourceLandmarks = PointSetType::New(); PointSetType::Pointer targetLandmarks = PointSetType::New(); transform->SetSourceLandmarks( sourceLandmarks ); transform->SetTargetLandmarks( targetLandmarks ); typedef PointSetType::PointsContainer PointsContainer; PointsContainer::Pointer sources = sourceLandmarks->GetPoints(); PointsContainer::Pointer targets = targetLandmarks->GetPoints();

15 Resampling: Kernel Spline Transform
sources->Reserve( numberOfLandmarks ); targets->Reserve( numberOfLandmarks ); typedef PointSetType::PointType PointType; PointType source; PointType target; for( int i = 0; i < numberOfLandmarks; i++ ) { inputFile >> source; inputFile >> target; sources->InsertElement( i, source ); targets->InsertElement( i, target ); } transform->ComputeWMatrix(); resampler->Update(); // Finally !! ImageType::ConstPointer deformedImage = resampler->GetOutput();

16 Kernel Spline Transforms
VolView : ITK Plugin

17 Kernel Spline Transforms
VolView : ITK Plugin

18 Deformable Transforms
Deformation Fields

19 Deformation Vector Field
ParaView:

20 Warp Image Filter #include "itkImage.h"
#include "itkWarpImageFilter.h" #include "itkLinearInterpolateImageFunction.h" typedef itk::Image< char, 2 > ImageType; ImageType::ConstPointer fixedImage = GetFixedImage(); ImageType::ConstPointer movingImage = GetMovingImage(); typedef itk::LinearInterpolateImageFunction< ImageType, double > InterpolatorType; InterpolatorType::Pointer interpolator = InterpolatorType::New(); typedef itk::Vector< float, 2 > VectorType; typedef itk::Image< VectorType , 2 > VectorFieldType; VectorFieldType::Pointer vectorField = GetVectorField();

21 Warp Image Filter typedef itk::WarpImageFilter< ImageType,
VectorFieldType > WarpFilterType; WarpFilterType::Pointer warpFilter = WarpFilterType::New(); warpFilter->SetInterpolator( interpolator ); warpFilter->SetInput( movingImage ); warpFilter->SetOutputSpacing( fixedImage->GetSpacing() ); warpFilter->SetOutputOrigin( fixedImage->GetOrigin() ); warpFilter->SetDeformationField( vectorField ); warpFilter->Update(); ImageType::ConstPointer deformedImage = warpFilter->GetOutput();

22 Demons Registration Demons Registration

23 Demons is a Family of Algorithms
Demons Registration Demons is a Family of Algorithms

24 Demons Registration Demons Type 0

25 Demons Registration: Type 0
Transform Scene Model

26 Demons Registration: Type 0
Transform Scene Gradients Model

27 Demons Registration: Type 0
Transform Scene Forces Model

28 Demons Registration Demons Type 1

29 Demons Registration: Type 1
Transform Scene Vector Field Model

30 Demons Registration: Type 1
Transform Scene Vector Field Model

31 Demons Registration: Type 1
Transform Scene Vector Field Model

32 Demons Registration: Type 1
Transform Scene Vector Field Model

33 Demons Registration: Type 1
Gradient Scene

34 Demons Registration: Type 1
Current Estimation Intensity Space Gradient Desired Displacement Scene

35 Demons Registration: Type 1
Transform Scene Vector Field Model

36 Demons Registration: Type 1
Scene

37 Demons Registration: Type 1
Iterations Incremental Field Next Field Previous Field Gaussian Smoothing

38 Demons Registration: Type 1
( s – m ) . Grad(s) V = Grad(s)2 ( s – m ) . Grad(s) V = Grad(s)2 + (s-m)2 K

39 Image Registration Framework
Fixed Image Increment Computation PDE Solver Moving Image Interpolator Deformation Field Transform

40 Demons Registration: Type 1
#include "itkImage.h" #include "itkDemonsRegistrationFilter.h" typedef itk::Image< char, 2 > ImageType; ImageType::ConstPointer fixedImage = GetFixedImage(); ImageType::ConstPointer movingImage = GetMovingImage(); typedef itk::Vector< float, 2 > VectorType; typedef itk::Image< VectorType , 2 > VectorFieldType; typedef itk::DemonsRegistrationFilter< ImageType, VectorFieldType > DemonsType; DemonsType::Pointer demons = DemonsType::New();

41 Demons Registration: Type 1
demons->SetFixedImage( fixedImage ); demons->SetMovingImage( movingImage ); demons->SetNumberOfIterations( 200 ); demons->SetStandardDeviations( 1.0 ); demons->Update(); ImageType::ConstPointer vectorField = demons->GetOutput();

42 Demons Registration: Type 1
Scene

43 Demons Registration: Type 1
Model

44 Demons Registration: Type 1
After Registration

45 Demons Registration: Type 1
Scene

46 Demons Registration: Type 1
Scene

47 Fixed and Moving images should have the same intensity distribution !
Requirements Fixed and Moving images should have the same intensity distribution !

48 Eventual Preprocessing
- Histogram Matching Filter - Anisotropic Diffusion Filtering

49 Image Registration Framework
Fixed Image Increment Computation PDE Solver Moving Image Interpolator Deformation Field Transform Resampler Moving Registered

50 Enjoy ITK !


Download ppt "ITK Deformable Registration"

Similar presentations


Ads by Google