Newer
Older
Gaëlle USSEGLIO
committed
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/*
* Copyright (C) 2005-2018 Centre National d'Etudes Spatiales (CNES)
*
* This file is part of Orfeo Toolbox
*
* https://www.orfeo-toolbox.org/
*
* 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
*
* 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 otbSARGroupedByMLImageFilter_h
#define otbSARGroupedByMLImageFilter_h
#include "itkImageToImageFilter.h"
#include "itkSmartPointer.h"
#include "itkPoint.h"
#include "itkSimpleFastMutexLock.h"
#include "itkImageScanlineConstIterator.h"
#include "itkImageScanlineIterator.h"
#include "otbImageKeywordlist.h"
namespace otb
{
/** \class SARGroupedByMLImageFilter
* \brief Creates an interferogram into ml geometry between two SAR images.
*
* This filter built the ML interferogram between a master and a slave image.
*
* The output is a vector image with amplitude, phase coherency and occurrences.
* \ingroup DiapOTBModule
*/
template <typename TImageSAR, typename TImageOut>
class ITK_EXPORT SARGroupedByMLImageFilter :
public itk::ImageToImageFilter<TImageSAR,TImageOut>
{
public:
// Standard class typedefs
typedef SARGroupedByMLImageFilter Self;
typedef itk::ImageToImageFilter<TImageSAR,TImageOut> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
// Method for creation through object factory
itkNewMacro(Self);
// Run-time type information
itkTypeMacro(SARGroupedByMLImageFilter,ImageToImageFilter);
/** Typedef to image input type (master and slave reech images) : otb::Image (Complex) */
typedef TImageSAR ImageSARType;
/** Typedef to describe the inout image pointer type. */
typedef typename ImageSARType::Pointer ImageSARPointer;
typedef typename ImageSARType::ConstPointer ImageSARConstPointer;
/** Typedef to describe the inout image region type. */
typedef typename ImageSARType::RegionType ImageSARRegionType;
/** Typedef to describe the type of pixel and point for inout image. */
typedef typename ImageSARType::PixelType ImageSARPixelType;
typedef typename ImageSARType::PointType ImageSARPointType;
/** Typedef to describe the image index, size types and spacing for inout image. */
typedef typename ImageSARType::IndexType ImageSARIndexType;
typedef typename ImageSARType::IndexValueType ImageSARIndexValueType;
typedef typename ImageSARType::SizeType ImageSARSizeType;
typedef typename ImageSARType::SizeValueType ImageSARSizeValueType;
typedef typename ImageSARType::SpacingType ImageSARSpacingType;
typedef typename ImageSARType::SpacingValueType ImageSARSpacingValueType;
/** Typedef to image output type : otb::VectorImage */
typedef TImageOut ImageOutType;
/** Typedef to describe the output image pointer type. */
typedef typename ImageOutType::Pointer ImageOutPointer;
typedef typename ImageOutType::ConstPointer ImageOutConstPointer;
/** Typedef to describe the output image region type. */
typedef typename ImageOutType::RegionType ImageOutRegionType;
/** Typedef to describe the type of pixel and point for output image. */
typedef typename ImageOutType::PixelType ImageOutPixelType;
typedef typename ImageOutType::PointType ImageOutPointType;
/** Typedef to describe the image index, size types and spacing for output image. */
typedef typename ImageOutType::IndexType ImageOutIndexType;
typedef typename ImageOutType::IndexValueType ImageOutIndexValueType;
typedef typename ImageOutType::SizeType ImageOutSizeType;
typedef typename ImageOutType::SizeValueType ImageOutSizeValueType;
typedef typename ImageOutType::SpacingType ImageOutSpacingType;
typedef typename ImageOutType::SpacingValueType ImageOutSpacingValueType;
// Define Point2DType and Point3DType
using Point2DType = itk::Point<double,2>;
using Point3DType = itk::Point<double,3>;
// Typedef for iterators
typedef itk::ImageScanlineConstIterator< ImageSARType > InputSARIterator;
typedef itk::ImageScanlineIterator< ImageOutType > OutputIterator;
typedef itk::SimpleFastMutexLock MutexType;
// Setter
itkSetMacro(MLRan, unsigned int);
itkSetMacro(MLAzi, unsigned int);
itkSetMacro(MarginRan, unsigned int);
itkSetMacro(MarginAzi, unsigned int);
itkSetMacro(Gain, float);
// Getter
itkGetMacro(MLRan, unsigned int);
itkGetMacro(MLAzi, unsigned int);
itkGetMacro(MarginRan, unsigned int);
itkGetMacro(MarginAzi, unsigned int);
itkGetMacro(Gain, float);
protected:
// Constructor
SARGroupedByMLImageFilter();
// Destructor
virtual ~SARGroupedByMLImageFilter() ITK_OVERRIDE;
// Print
void PrintSelf(std::ostream & os, itk::Indent indent) const ITK_OVERRIDE;
/** SARGroupedByMLImageFilter produces an image which are into output geometry. The differences between
* output and input images can be the size of images and the dimensions.
* As such, SARGroupedByMLImageFilter needs to provide an implementation for
* GenerateOutputInformation() in order to inform the pipeline execution model.
*/
virtual void GenerateOutputInformation() ITK_OVERRIDE;
/** SARGroupedByMLImageFilter needs a input requested region that corresponds to the margin and ML factors
* into the requested region of our output requested region.
* As such, SARGroupedByMLImageFilter needs to provide an implementation for
* GenerateInputRequestedRegion() in order to inform the pipeline execution model.
* \sa ProcessObject::GenerateInputRequestedRegion() */
virtual void GenerateInputRequestedRegion() ITK_OVERRIDE;
/**
* OutputRegionToInputRegion returns the input SAR region
*/
ImageSARRegionType OutputRegionToInputRegion(const ImageOutRegionType& outputRegion, bool withMargin) const;
/**
* SARGroupedByMLImageFilterr can be implemented as a multithreaded filter.
* Therefore, this implementation provides a ThreadedGenerateData() routine
* which is called for each processing thread. The main output image data is
* allocated automatically by the superclass prior to calling
* ThreadedGenerateData(). ThreadedGenerateData can only write to the
* portion of the output image specified by the parameter
* "outputRegionForThread"
*
* \sa ImageToImageFilter::ThreadedGenerateData(),
* ImageToImageFilter::GenerateData() */
virtual void ThreadedGenerateData(const ImageOutRegionType& outputRegionForThread,
itk::ThreadIdType threadId) ITK_OVERRIDE;
private:
SARGroupedByMLImageFilter(const Self&); // purposely not implemented
void operator=(const Self &); // purposely not
// ML factor in range
unsigned int m_MLRan;
// ML factor in azimut
unsigned int m_MLAzi;
// gain for amplitude estimation
float m_Gain;
// SAR Dimensions
int m_nbLinesSAR;
int m_nbColSAR;
// Margin in order to spend our averaging
unsigned int m_MarginRan;
unsigned int m_MarginAzi;
};
} // End namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbSARGroupedByMLImageFilter.txx"
#endif
#endif