-
Notifications
You must be signed in to change notification settings - Fork 20
/
itkBlockMatchingNormalizedCrossCorrelationFFTMetricImageFilter.h
134 lines (113 loc) · 5.66 KB
/
itkBlockMatchingNormalizedCrossCorrelationFFTMetricImageFilter.h
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
/*=========================================================================
*
* Copyright NumFOCUS
*
* 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
*
* https://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 itkBlockMatchingNormalizedCrossCorrelationFFTMetricImageFilter_h
#define itkBlockMatchingNormalizedCrossCorrelationFFTMetricImageFilter_h
#include "itkBlockMatchingNormalizedCrossCorrelationMetricImageFilter.h"
#include "itkComplexConjugateImageFilter.h"
#include "itkHalfHermitianToRealInverseFFTImageFilter.h"
#include "itkConstantPadImageFilter.h"
#include "itkRealToHalfHermitianForwardFFTImageFilter.h"
#include "itkFFTShiftImageFilter.h"
#include "itkRegionFromReferenceImageFilter.h"
#include "itkMultiplyImageFilter.h"
namespace itk
{
namespace BlockMatching
{
/** \class NormalizedCrossCorrelationFFTMetricImageFilter
*
* \brief Create an image of the the normalized cross correlation with a kernel
* calculated with FFT based correlation (multiply forward FFT's and take IFFT).
*
* \sa NormalizedCrossCorrelationMetricImageFilter
*
* \ingroup Ultrasound
*/
template <class TFixedImage, class TMovingImage, class TMetricImage>
class ITK_TEMPLATE_EXPORT NormalizedCrossCorrelationFFTMetricImageFilter
: public NormalizedCrossCorrelationMetricImageFilter<TFixedImage, TMovingImage, TMetricImage>
{
public:
/** Standard class type alias. */
using Self = NormalizedCrossCorrelationFFTMetricImageFilter;
using Superclass = NormalizedCrossCorrelationMetricImageFilter<TFixedImage, TMovingImage, TMetricImage>;
using Pointer = SmartPointer<Self>;
using ConstPointer = SmartPointer<const Self>;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(NormalizedCrossCorrelationFFTMetricImageFilter, NormalizedCrossCorrelationMetricImageFilter);
/** ImageDimension enumeration. */
itkStaticConstMacro(ImageDimension, unsigned int, TFixedImage::ImageDimension);
/** Type of the fixed image. */
using FixedImageType = typename Superclass::FixedImageType;
using FixedImageConstPointerType = typename FixedImageType::ConstPointer;
/** Type of the moving image. */
using MovingImageType = typename Superclass::MovingImageType;
using MovingImageConstPointerType = typename MovingImageType::ConstPointer;
/** Type of the metric image. */
using MetricImageType = typename Superclass::MetricImageType;
using MetricImagePointerType = typename MetricImageType::Pointer;
using MetricImageConstPointerType = typename MetricImageType::ConstPointer;
using MetricImageRegionType = typename MetricImageType::RegionType;
using MetricImagePixelType = typename MetricImageType::PixelType;
/**
* Set/Get the greatest prime factor allowed on the size of the padded image.
* The filter increase the size of the image to reach a size with the greatest
* prime factor smaller or equal to the specified value. The default value is
* 13, which is the greatest prime number for which the FFT are precomputed
* in FFTW, and thus gives very good performance.
* A greatest prime factor of 2 produce a size which is a power of 2, and thus
* is suitable for vnl base fft filters.
* A greatest prime factor of 1 or less - typically 0 - disable the extra padding.
e */
itkGetConstMacro(SizeGreatestPrimeFactor, SizeValueType);
itkSetMacro(SizeGreatestPrimeFactor, SizeValueType);
protected:
NormalizedCrossCorrelationFFTMetricImageFilter();
virtual void
GenerateData() override;
using PadFilterType = ConstantPadImageFilter<MetricImageType, MetricImageType>;
using FFTShiftFilterType = FFTShiftImageFilter<MetricImageType, MetricImageType>;
using FFTFilterType = RealToHalfHermitianForwardFFTImageFilter<MetricImageType>;
using ComplexImageType = typename FFTFilterType::OutputImageType;
using IFFTFilterType = HalfHermitianToRealInverseFFTImageFilter<ComplexImageType>;
using ComplexConjugateFilterType = ComplexConjugateImageFilter<ComplexImageType, ComplexImageType>;
using MultiplyFilterType = MultiplyImageFilter<ComplexImageType, ComplexImageType, ComplexImageType>;
using CropFilterType = RegionFromReferenceImageFilter<MetricImageType, MetricImageType>;
typename PadFilterType::Pointer m_KernelPadFilter;
typename PadFilterType::Pointer m_MovingPadFilter;
typename FFTShiftFilterType::Pointer m_FFTShiftFilter;
typename FFTFilterType::Pointer m_KernelFFTFilter;
typename FFTFilterType::Pointer m_MovingFFTFilter;
typename ComplexConjugateFilterType::Pointer m_ComplexConjugateImageFilter;
typename MultiplyFilterType::Pointer m_MultiplyFilter;
typename IFFTFilterType::Pointer m_IFFTFilter;
typename CropFilterType::Pointer m_CropFilter;
SizeValueType m_SizeGreatestPrimeFactor;
private:
NormalizedCrossCorrelationFFTMetricImageFilter(const Self &); // purposely not implemented
void
operator=(const Self &); // purposely not implemented
};
} // end namespace BlockMatching
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
# include "itkBlockMatchingNormalizedCrossCorrelationFFTMetricImageFilter.hxx"
#endif
#endif