/usr/include/ITK-4.5/itkPhysicsBasedNonRigidRegistrationMethod.h is in libinsighttoolkit4-dev 4.5.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | /*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef __itkPhysicsBasedNonRigidRegistrationMethod_h
#define __itkPhysicsBasedNonRigidRegistrationMethod_h
#include "itkMaskFeaturePointSelectionFilter.h"
#include "itkBlockMatchingImageFilter.h"
#include "itkFEMScatteredDataPointSetToImageFilter.h"
#include "itkConceptChecking.h"
namespace itk
{
namespace fem
{
/** \class PhysicsBasedNonRigidRegistrationMethod
* \brief Perform a non-rigid registration of two 3D images using a set of
* feature points, block matching and linear elastic model.
*
* PhysicsBasedNonRigidRegistrationMethod takes a fixed image, a moving
* image with an optional mask and a mesh as inputs and generates a
* dense deformation field image as an output.
*
* This filter is intended to be used for driving the process of Physics-
* Based Non-Rigid Registration. It computes feature points from the
* moving image, then computes displacements of the feature points in the
* fixed image via block-matching, then computes deformation field of a
* whole image using linear elastic model[ M. Bierling, Displacement
* estimation by hierarchical block matching, Proc. SPIE Vis. Comm. and
* Image Proc., vol. 1001, pp. 942-951, 1988. ].
*
* The filter is templated over fixed image, moving image, mask, mesh and
* deformation field image.
*
* \author Andriy Kot, Center for Real-Time Computing, Old Dominion University,
* Norfolk, VA
*
* \ingroup ITKFEMRegistration
*/
template <typename TFixedImage, typename TMovingImage, typename TMaskImage, typename TMesh, typename TDeformationField>
class PhysicsBasedNonRigidRegistrationMethod : public ImageToImageFilter<TMovingImage, TDeformationField>
{
public:
typedef PhysicsBasedNonRigidRegistrationMethod Self;
typedef ImageToImageFilter<TMovingImage, TDeformationField> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods) */
itkTypeMacro( PhysicsBasedNonRigidRegistrationMethod, ImageToImageFilter );
typedef TMovingImage MovingImageType;
typedef TFixedImage FixedImageType;
typedef TMaskImage MaskImageType;
typedef TMesh MeshType;
typedef TDeformationField DeformationFieldType;
itkStaticConstMacro(ImageDimension, unsigned int, FixedImageType::ImageDimension);
/** Not input specific typedefs */
typedef ImageRegion< ImageDimension > ImageRegionType;
typedef Size< ImageDimension > ImageSizeType;
typedef Index< ImageDimension > ImageIndexType;
/** Typedefs for the components filters. */
typedef MaskFeaturePointSelectionFilter< MovingImageType, MaskImageType > FeatureSelectionFilterType;
typedef BlockMatchingImageFilter< FixedImageType, MovingImageType > BlockMatchingFilterType;
typedef FEMScatteredDataPointSetToImageFilter<
typename BlockMatchingFilterType::DisplacementsType,
MeshType,
DeformationFieldType,
typename BlockMatchingFilterType::SimilaritiesType,
typename FeatureSelectionFilterType::FeaturePointsType // tensors are optional pixel values of feature points pointset
> FEMFilterType;
/** set fraction of eligible points to select */
itkSetMacro(SelectFraction, double);
itkGetConstMacro(SelectFraction, double);
/** set/get non-connectivity */
itkSetMacro(NonConnectivity, unsigned int);
itkGetConstMacro(NonConnectivity, unsigned int);
/** set/get half size */
itkSetMacro(BlockRadius, ImageSizeType);
itkGetConstReferenceMacro(BlockRadius, ImageSizeType);
/** set/get half window */
itkSetMacro(SearchRadius, ImageSizeType);
itkGetConstReferenceMacro(SearchRadius, ImageSizeType);
/** set/get number of approximation steps */
itkSetMacro(ApproximationSteps, unsigned int);
itkGetMacro(ApproximationSteps, unsigned int);
/** set/get number of outlier rejection steps */
itkSetMacro(OutlierRejectionSteps, unsigned int);
itkGetMacro(OutlierRejectionSteps, unsigned int);
/** set/get fixed image */
itkSetInputMacro(FixedImage, FixedImageType);
itkGetInputMacro(FixedImage, FixedImageType);
/** set/get moving image */
itkSetInputMacro(MovingImage, MovingImageType);
itkGetInputMacro(MovingImage, MovingImageType);
/** set/get moving image */
itkSetInputMacro(MaskImage, MaskImageType);
itkGetInputMacro(MaskImage, MaskImageType);
/** set/get moving image */
itkSetInputMacro(Mesh, MeshType);
itkGetInputMacro(Mesh, MeshType);
#ifdef ITK_USE_CONCEPT_CHECKING
// Begin concept checking
/* Currently only the 3D implementation is available due to a narrow
definition of the filter in the original proposal
and lack of available resources. */
itkConceptMacro( FixedImageDimensionShouldBe3,
( Concept::SameDimension< TFixedImage::ImageDimension, 3u > ) );
itkConceptMacro( MovingImageDimensionShouldBe3,
( Concept::SameDimension< TMovingImage::ImageDimension, 3u > ) );
itkConceptMacro( MaskImageDimensionShouldBe3,
( Concept::SameDimension< TMaskImage::ImageDimension, 3u > ) );
itkConceptMacro( MeshDimensionShouldBe3,
( Concept::SameDimension< TMesh::PointType::PointDimension, 3u > ) );
itkConceptMacro( DeformationFieldImageDimensionShouldBe3,
( Concept::SameDimension< TDeformationField::ImageDimension, 3u > ) );
// End concept checking
#endif
protected:
PhysicsBasedNonRigidRegistrationMethod();
virtual ~PhysicsBasedNonRigidRegistrationMethod();
virtual void PrintSelf( std::ostream & os, Indent indent ) const;
virtual void GenerateData();
private:
//purposely not implemented
PhysicsBasedNonRigidRegistrationMethod( const PhysicsBasedNonRigidRegistrationMethod & );
void operator=( const PhysicsBasedNonRigidRegistrationMethod & );
// algorithm parameters
double m_SelectFraction;
unsigned int m_NonConnectivity;
ImageSizeType m_BlockRadius;
ImageSizeType m_SearchRadius;
unsigned int m_ApproximationSteps;
unsigned int m_OutlierRejectionSteps;
typename FeatureSelectionFilterType::Pointer m_FeatureSelectionFilter;
typename BlockMatchingFilterType::Pointer m_BlockMatchingFilter;
typename FEMFilterType::Pointer m_FEMFilter;
};
}
} // end namespace itk::fem
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkPhysicsBasedNonRigidRegistrationMethod.hxx"
#endif
#endif
|