-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathitkGradientTensorImageFilter.h
130 lines (90 loc) · 4.15 KB
/
itkGradientTensorImageFilter.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
/*=========================================================================
Program: Tensor ToolKit - TTK
Module: $URL$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) INRIA 2010. All rights reserved.
See LICENSE.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef _itk_GradientTensorImageFilter_h_
#define _itk_GradientTensorImageFilter_h_
#include "itkImageToImageFilter.h"
#include "itkImage.h"
#include "itkVector.h"
#include "itkConstNeighborhoodIterator.h"
namespace itk
{
/*! \class GradientTensorImageFilter
\ingroup TensorToolKit
Calculate the gradient of an itk tensor image.
*/
template < class TInputImage, class TOutputValue=double >
class ITK_EXPORT GradientTensorImageFilter :
public ImageToImageFilter < TInputImage, Image < Vector < TOutputValue, TInputImage::ImageDimension >, TInputImage::ImageDimension > >
/* public ImageToImageFilter < TInputImage, TInputImage > */
{
public:
/** Extract dimension from input image. */
itkStaticConstMacro(InputImageDimension, unsigned int,
TInputImage::ImageDimension);
itkStaticConstMacro(OutputImageDimension, unsigned int,
TInputImage::ImageDimension);
/** Standard class typedefs. */
typedef GradientTensorImageFilter Self;
/** Convenient typedefs for simplifying declarations. */
typedef TInputImage InputImageType;
typedef Image < Vector < TOutputValue, TInputImage::ImageDimension >, TInputImage::ImageDimension > OutputImageType;
/* typedef TInputImage OutputImageType; */
/** Standard class typedefs. */
typedef ImageToImageFilter< InputImageType, OutputImageType> 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(GradientImageFilter, ImageToImageFilter);
/** Image typedef support. */
typedef typename InputImageType::PixelType InputPixelType;
typedef TOutputValue OutputValueType;
typedef typename OutputImageType::PixelType OutputPixelType;
typedef typename OutputImageType::RegionType OutputImageRegionType;
typedef ConstNeighborhoodIterator<TInputImage> ConstNeighborhoodIteratorType;
typedef typename ConstNeighborhoodIteratorType::RadiusType RadiusType;
virtual void GenerateInputRequestedRegion() throw(InvalidRequestedRegionError);
/** Use the image spacing information in calculations. Use this option if you
* want derivatives in physical space. Default is UseImageSpacingOn. */
void SetUseImageSpacingOn()
{ this->SetUseImageSpacing(true); }
/** Ignore the image spacing. Use this option if you want derivatives in
isotropic pixel space. Default is UseImageSpacingOn. */
void SetUseImageSpacingOff()
{ this->SetUseImageSpacing(false); }
/** Set/Get whether or not the filter will use the spacing of the input
image in its calculations */
itkSetMacro(UseImageSpacing, bool);
itkGetMacro(UseImageSpacing, bool);
protected:
GradientTensorImageFilter()
{
m_UseImageSpacing = true;
for(unsigned int i=0;i<InputImageDimension;i++)
m_NeighborhoodRadius[i]=1;
}
virtual ~GradientTensorImageFilter(){};
void DynamicThreadedGenerateData(const OutputImageRegionType& outputRegionForThread);
OutputPixelType FiniteDifferenceCalculation (const ConstNeighborhoodIteratorType &it);
private:
GradientTensorImageFilter (const Self&);
void operator=(const Self&);
bool m_UseImageSpacing;
RadiusType m_NeighborhoodRadius;
};
} // end of namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkGradientTensorImageFilter.txx"
#endif
#endif