Ocean
Loading...
Searching...
No Matches
TestFrameInterpolatorNearestPixel.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_TEST_TESTCV_TEST_FRAME_INTERPOLATOR_NEAREST_PIXEL_H
9#define META_OCEAN_TEST_TESTCV_TEST_FRAME_INTERPOLATOR_NEAREST_PIXEL_H
10
12
13#include "ocean/base/Worker.h"
14
16
18
19namespace Ocean
20{
21
22namespace Test
23{
24
25namespace TestCV
26{
27
28/**
29 * This class implements a nearest pixel frame interpolator test.
30 * @ingroup testcv
31 */
32class OCEAN_TEST_CV_EXPORT TestFrameInterpolatorNearestPixel
33{
34 public:
35
36 /**
37 * Tests all nearest pixel interpolation filter functions.
38 * @param width The width of the test frame in pixel, with range [1, infinity)
39 * @param height The height of the test frame in pixel, with range [1, infinity)
40 * @param testDuration Number of seconds for each test, with range (0, infinity)
41 * @param worker The worker object to distribute the CPU load
42 * @param selector The test selector to control which tests to run
43 * @return True, if succeeded
44 */
45 static bool test(const unsigned int width, const unsigned int height, const double testDuration, Worker& worker, const TestSelector& selector = TestSelector());
46
47 /**
48 * Test for affine image transformations.
49 * @param testDuration Number of seconds for each test, with range (0, infinity)
50 * @param worker The worker object to distribute the CPU load
51 * @return True, if succeeded
52 */
53 static bool testAffine(const double testDuration, Worker& worker);
54
55 /**
56 * Test for affine image transformations for varying frame dimensions and channel numbers.
57 * @param width The width of the frame in pixel, if this value is 0 (or `height`) it will be randomly selected in the range [1, 1920], range: [0, infinity)
58 * @param height The height of the frame in pixel, if the value is 0 (or `width`) it will be randomly selected in the range [1, 1080], range: [0, infinity)
59 * @param channels The number of frame channels, with range [1, infinity)
60 * @param testDuration Number of seconds for each test, with range (0, infinity)
61 * @param worker The worker object to distribute the CPU load
62 * @return True, if succeeded
63 */
64 static bool testAffine(const unsigned int width, const unsigned int height, const unsigned int channels, const double testDuration, Worker& worker);
65
66 /**
67 * Tests the homography transformation function.
68 * @param testDuration Number of seconds for each test, with range (0, infinity)
69 * @param worker The worker object to distribute the CPU load
70 * @return True, if succeeded
71 * @tparam T The data type of each pixel element, e.g., 'uint8_t', 'float'
72 */
73 template <typename T>
74 static bool testHomography(const double testDuration, Worker& worker);
75
76 /**
77 * Tests the homography transformation function for a given frame dimension and channel number.
78 * @param width The width of the frame in pixel, with range [1, infinity)
79 * @param height The height of the frame in pixel, with range [1, infinity)
80 * @param channels The number of frame channels, with range [1, infinity)
81 * @param testDuration Number of seconds for each test, with range (0, infinity)
82 * @param worker The worker object to distribute the CPU load
83 * @return True, if succeeded
84 * @tparam T The data type of each pixel element, e.g., 'uint8_t', 'float'
85 */
86 template <typename T>
87 static bool testHomography(const unsigned int width, const unsigned int height, const unsigned int channels, const double testDuration, Worker& worker);
88
89 /**
90 * Tests the homography transformation function defining a binary mask for known and unknown image content.
91 * @param testDuration Number of seconds for each test, with range (0, infinity)
92 * @param worker The worker object to distribute the CPU load
93 * @return True, if succeeded
94 */
95 static bool testHomographyMask(const double testDuration, Worker& worker);
96
97 /**
98 * Tests the homography transformation function (with binary mask defining known and unknown image content) for a given frame dimension and channel number.
99 * @param width The width of the frame in pixel, with range [1, infinity)
100 * @param height The height of the frame in pixel, with range [1, infinity)
101 * @param channels The number of frame channels, with range [1, 4]
102 * @param testDuration Number of seconds for each test, with range (0, infinity)
103 * @param worker The worker object to distribute the CPU load
104 * @return True, if succeeded
105 */
106 static bool testHomographyMask(const unsigned int width, const unsigned int height, const unsigned int channels, const double testDuration, Worker& worker);
107
108 /**
109 * Tests the resize function.
110 * @param testDuration Number of seconds for each test, with range (0, infinity)
111 * @param worker The worker object to distribute the CPU load
112 * @return True, if succeeded
113 */
114 static bool testResize(const double testDuration, Worker& worker);
115
116 /**
117 * Tests the resize function for a given frame dimension and channel number.
118 * @param sourceWidth Width of the source frame in pixel, with range [1, infinity)
119 * @param sourceHeight Height of the source frame in pixel, with range [1, infinity)
120 * @param targetWidth Width of the target frame in pixel, with range [1, infinity)
121 * @param targetHeight Height of the target frame in pixel, with range [1, infinity)
122 * @param testDuration Number of seconds for each test, with range (0, infinity)
123 * @param worker The worker object to distribute the CPU load
124 * @return True, if succeeded
125 * @tparam T The data type of each elements, e.g., 'unsigned char', 'float'
126 * @tparam tChannels The number of channels the frames have, with range [1, infinity)
127 */
128 template <typename T, unsigned int tChannels>
129 static bool testResize(const unsigned int sourceWidth, const unsigned int sourceHeight, const unsigned int targetWidth, const unsigned int targetHeight, const double testDuration, Worker& worker);
130
131 /**
132 * Tests the special case resize function for image resolutions from 400x400 to 224x224.
133 * @param testDuration Number of seconds for each test, with range (0, infinity)
134 * @return True, if succeeded
135 */
136 static bool testSpecialCasesResize400x400To224x224_8BitPerChannel(const double testDuration);
137
138 /**
139 * Tests the frame transformation function applying a lookup table.
140 * @param width The width of the test frame in pixel, with range [1, infinity)
141 * @param height The height of the test frame in pixel, with range [1, infinity)
142 * @param testDuration Number of seconds for each test, with range (0, infinity)
143 * @param worker The worker object to distribute the CPU load
144 * @return True, if succeeded
145 * @tparam tOffset True, to use an offset transformation; False, to use an absolute transformation
146 */
147 template <bool tOffset>
148 static bool testTransform(const unsigned int width, const unsigned int height, const double testDuration, Worker& worker);
149
150 /**
151 * Tests the frame mask transformation function applying a lookup table.
152 * @param width The width of the test frame in pixel, with range [1, infinity)
153 * @param height The height of the test frame in pixel, with range [1, infinity)
154 * @param testDuration Number of seconds for each test, with range (0, infinity)
155 * @param worker The worker object to distribute the CPU load
156 * @return True, if succeeded
157 * @tparam tOffset True, to use an offset transformation; False, to use an absolute transformation
158 */
159 template <bool tOffset>
160 static bool testTransformMask(const unsigned int width, const unsigned int height, const double testDuration, Worker& worker);
161
162 /**
163 * Tests the 90 degree rotate function.
164 * @param testDuration Number of seconds for each test, with range (0, infinity)
165 * @param worker The worker object to distribute the CPU load
166 * @return True, if succeeded
167 */
168 static bool testRotate90(const double testDuration, Worker& worker);
169
170 /**
171 * Tests the 90 degree rotate function for a specific frame size and number of channels
172 * @param width The width of the test frame in pixels, range: [1, infinity)
173 * @param height The height of the test frame in pixels, range: [1, infinity)
174 * @param testDuration Number of seconds for each test, with range (0, infinity)
175 * @param worker The worker object to distribute the CPU load
176 * @return True, if succeeded
177 * @tparam TElementType The data type of each elements, e.g., 'unsigned char', 'float'
178 * @tparam tChannels The number of channels the frames have, with range [1, infinity)
179 */
180 template <typename TElementType, unsigned int tChannels>
181 static bool testRotate90(const unsigned int width, const unsigned int height, const double testDuration, Worker& worker);
182
183 /**
184 * Validation function for the nearest-neighbor interpolation of 2D homogeneous image transformations (+ constant background color for unknown image content).
185 * @param frame Pointer to the source frame, must be valid
186 * @param frameWidth Width of the source frame, range: [0, infinity)
187 * @param frameHeight Height of the source frame, range: [0, infinity)
188 * @param framePaddingElements The number of padding elements at the end of each source frame row, in elements, with range [0, infinity)
189 * @param interpolatedFrame Pointer to the target frame, must be valid
190 * @param interpolatedFrameWidth Width of the target frame, range: [0, infinity)
191 * @param interpolatedFrameHeight Height of the target frame, range: [0, infinity)
192 * @param interpolatedFramePaddingElements The number of padding elements at the end of each target frame row, in elements, with range [0, infinity)
193 * @param channels Number of channels in both, the source and the target frame, range: [1, infinity) * @param homography The 2D homogeneous image transformation that has been used to interpolate/warp the frame, transforming points defined in the interpolatedFrame to the source frame, i.e. pointFrame = transformation * pointInterpolatedFrame, must not be singular
194 * @param backgroundColor The background color for all pixels for which no valid source pixel exists, one for each frame channel, must be valid
195 * @param interpolatedFrameOrigin The origin of the interpolated frame defining the global position of the interpolated frame's pixel coordinate (0, 0), with range (-infinity, infinity)x(-infinity, infinity)
196 * @param maximalAbsError If specified, will hold the maximum absolute error measured
197 * @param averageAbsError If specified, will hold the average of all absolute pixel errors
198 * @param groundtruth If specified, the result of the validation (which is used as ground truth) will be stored at the specified pointer location, note: memory must be allocated (same size and frame type as the input frames)
199 * @tparam T The data type of each pixel element
200 */
201 template <typename T>
202 static void validateHomography(const T* frame, const unsigned int frameWidth, const unsigned int frameHeight, const unsigned int framePaddingElements, const T* interpolatedFrame, const unsigned int interpolatedFrameWidth, const unsigned int interpolatedFrameHeight, const unsigned int interpolatedFramePaddingElements, const unsigned int channels, const SquareMatrix3& homography, const T* backgroundColor, const CV::PixelPositionI& interpolatedFrameOrigin, double* maximalAbsError = nullptr, double* averageAbsError = nullptr, T* groundtruth = nullptr);
203
204 /**
205 * Validates a resized frame.
206 * @param source The source frame which has been resized, must be valid
207 * @param target The target frame to validate, must be valid
208 * @param sourceWidth Width of the source frame in pixel, with range [1, infinity)
209 * @param sourceHeight Height of the source frame in pixel, with range [1, infinity)
210 * @param targetWidth Width of the target frame in pixel, with range [1, infinity)
211 * @param targetHeight Height of the target frame in pixel, with range [1, infinity)
212 * @param channels The number of frame channels, with range [1, infinity)
213 * @param sourcePaddingElements The optional number of padding elements at the end of each row of the source frame, in elements, with range [0, infinity)
214 * @param targetPaddingElements The optional number of padding elements at the end of each row of the target frame, in elements, with range [0, infinity)
215 * @return True, if succeeded
216 * @tparam T The data type of each element e.g., 'unsigned char', 'float'
217 */
218 template <typename T>
219 static bool validateResizedFrame(const T* source, const T* target, const unsigned int sourceWidth, const unsigned int sourceHeight, const unsigned int targetWidth, const unsigned int targetHeight, const unsigned int channels, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements);
220
221 /**
222 * Validates the frame transformation function applying a lookup table.
223 * @param frame The frame which will be transformed, must be valid
224 * @param target The target which has received the transformed frame, must be valid
225 * @param lookupTable The lookup table which has been used to transform the image
226 * @param borderColor The border color which has been used, must be valid
227 * @return True, if succeeded
228 * @tparam tOffset True, to use an offset transformation; False, to use an absolute transformation
229 */
230 template <bool tOffset>
231 static bool validateTransformation(const Frame& frame, const Frame& target, const CV::FrameInterpolatorNearestPixel::LookupTable& lookupTable, const uint8_t* borderColor);
232
233 /**
234 * Validates the frame mask transformation function applying a lookup table.
235 * @param frame The frame which will be transformed, must be valid
236 * @param target The target which has received the transformed frame, must be valid
237 * @param targetMask The target mask which has received the mask of the transformed frame, must be valid
238 * @param lookupTable The lookup table which has been used to transform the image
239 * @param maskValue The pixel value of a mask pixel with corresponding source pixel, with range [0, 255]
240 * @return True, if succeeded
241 * @tparam tOffset True, to use an offset transformation; False, to use an absolute transformation
242 */
243 template <bool tOffset>
244 static bool validateTransformationMask(const Frame& frame, const Frame& target, const Frame& targetMask, const CV::FrameInterpolatorNearestPixel::LookupTable& lookupTable, const uint8_t maskValue);
245
246 /**
247 * Validates the 90 degree rotate function.
248 * @param frame The original frame, must be valid
249 * @param channels The number of data channels the frame has, with range [1, infinity)
250 * @param width The width of the original frame in pixel, with range [1, infinity)
251 * @param height The height of the original frame in pixel, with range [1, infinity)
252 * @param clockwise The clockwise rotated frame to be checked, must be valid
253 * @param counterClockwise The counter clockwise frame to be checked, must be valid
254 * @param framePaddingElements Optional number of padding elements at the end of each frame row, in elements, range: [0, infinity)
255 * @param clockwisePaddingElements Optional number of padding elements at the end of each clockwise row, in elements, range: [0, infinity)
256 * @param counterClockwisePaddingElements Optional number of padding elements at the end of each clockwise row, in elements, range: [0, infinity)
257 * @return True, if succeeded
258 * @tparam TElementType The data type of each channel data
259 */
260 template <typename TElementType>
261 static bool validateRotate90(const TElementType* frame, const unsigned int channels, const unsigned int width, const unsigned int height, const TElementType* clockwise, const TElementType* counterClockwise, const unsigned int framePaddingElements, const unsigned int clockwisePaddingElements, const unsigned int counterClockwisePaddingElements);
262
263 protected:
264
265 /**
266 * Validates the homography interpolation function (using a binary mask to define known and unknown image content).
267 * @param inputFrame The frame which will be interpolated based on the homography, must be valid
268 * @param outputFrame The interpolated/warped frame to be validated, width same pixel format and pixel origin as 'frame, must be valid
269 * @param outputMask The binary mask corresponding to the interpolated/warped frame specifying known and unknown image content, a mask value of 0xFF defined known image content, 0x00 defines unknown image content, with same pixel origin and frame resolution as 'outputFrame'
270 * @param input_H_output The homography transforming output to input points, must be valid
271 * @param outputFrameOrigin The origin of the interpolated frame defining the global position of the interpolated frame's pixel coordinate (0, 0), with range (-infinity, infinity)x(-infinity, infinity)
272 * @return True, if the interpolation is correct
273 */
274 static bool validateHomographyMask8BitPerChannel(const Frame& inputFrame, const Frame& outputFrame, const Frame& outputMask, const SquareMatrix3& input_H_output, const CV::PixelPositionI& outputFrameOrigin);
275};
276
277template <typename T>
278void TestFrameInterpolatorNearestPixel::validateHomography(const T* frame, const unsigned int frameWidth, const unsigned int frameHeight, const unsigned int framePaddingElements, const T* interpolatedFrame, const unsigned int interpolatedFrameWidth, const unsigned int interpolatedFrameHeight, const unsigned int interpolatedFramePaddingElements, const unsigned int channels, const SquareMatrix3& homography, const T* backgroundColor, const CV::PixelPositionI& interpolatedFrameOrigin, double* maximalAbsError, double* averageAbsError, T* groundtruth)
279{
280 ocean_assert(frame != nullptr && interpolatedFrame != nullptr);
281 ocean_assert(frameWidth != 0u && frameHeight != 0u);
282 ocean_assert(interpolatedFrameWidth != 0u && interpolatedFrameHeight != 0u);
283 ocean_assert(channels != 0u);
284 ocean_assert(!homography.isSingular());
285 ocean_assert(backgroundColor != nullptr);
286
287 double sumAbsError = 0.0;
288 double maxAbsError = 0.0;
289 unsigned long long measurements = 0ull;
290
291 for (unsigned int y = 0u; y < interpolatedFrameHeight; ++y)
292 {
293 for (unsigned int x = 0u; x < interpolatedFrameWidth; ++x)
294 {
295 const T* const interpolatedPixel = interpolatedFrame + (interpolatedFrameWidth * y + x) * channels + y * interpolatedFramePaddingElements;
296
297 const Vector2 outputPosition = Vector2(Scalar(x) + Scalar(interpolatedFrameOrigin.x()), Scalar(y) + Scalar(interpolatedFrameOrigin.y()));
298 const Vector2 inputPosition = homography * outputPosition;
299
300 const int inputXI = Numeric::round32(inputPosition.x());
301 const int inputYI = Numeric::round32(inputPosition.y());
302
303 // Ignore the border pixels because background and foreground can be mixed differently here
304 if (inputXI == -1 || inputXI == 0 || inputXI == (int)(frameWidth - 1u) || inputXI == (int)frameWidth || inputYI == -1 || inputYI == 0 || inputYI == (int)(frameHeight - 1u) || inputYI == (int)(frameHeight))
305 {
306 continue;
307 }
308
309 const unsigned int inputX = (unsigned int)inputXI;
310 const unsigned int inputY = (unsigned int)inputYI;
311
312 if (inputX < frameWidth && inputY < frameHeight)
313 {
314 const unsigned int nearestNeighborIndex = (inputY * frameWidth + inputX) * channels + inputY * framePaddingElements;
315
316 for (unsigned int n = 0u; n < channels; ++n)
317 {
318 if (groundtruth)
319 {
320 *groundtruth = frame[nearestNeighborIndex + n];
321 groundtruth++;
322 }
323
324 const double interpolatedPixelD = double(interpolatedPixel[n]);
325 const double framePixelD = double(frame[nearestNeighborIndex + n]);
326 const double absError = NumericD::abs(interpolatedPixelD - framePixelD);
327
328 sumAbsError += absError;
329
330 if (absError > maxAbsError)
331 {
332 maxAbsError = absError;
333 }
334
335 measurements++;
336 }
337 }
338 else
339 {
340 for (unsigned int n = 0u; n < channels; ++n)
341 {
342 if (groundtruth)
343 {
344 *groundtruth = backgroundColor[n];
345 groundtruth++;
346 }
347
348 const double absError = NumericD::abs(double(interpolatedPixel[n]) - double(backgroundColor[n]));
349
350 sumAbsError += absError;
351
352 if (absError > maxAbsError)
353 {
354 maxAbsError = absError;
355 }
356
357 measurements++;
358 }
359 }
360 }
361 }
362
363 if (averageAbsError)
364 {
365 ocean_assert(measurements != 0ull);
366 *averageAbsError = sumAbsError / double(measurements);
367 }
368
369 if (maximalAbsError)
370 {
371 *maximalAbsError = maxAbsError;
372 }
373}
374
375} // namespace TestCV
376
377} // namespace Test
378
379} // namespace Ocean
380
381#endif // META_OCEAN_TEST_TESTCV_TEST_FRAME_INTERPOLATOR_NEAREST_PIXEL_H
This class implements a 2D pixel position with pixel precision.
Definition PixelPosition.h:63
T y() const
Returns the vertical coordinate position of this object.
Definition PixelPosition.h:468
T x() const
Returns the horizontal coordinate position of this object.
Definition PixelPosition.h:456
This class implements Ocean's image class.
Definition Frame.h:1879
This class implements a 2D lookup object with values at the bins' corners defining the individual loo...
Definition Lookup2.h:636
static T abs(const T value)
Returns the absolute value of a given value.
Definition Numeric.h:1220
static constexpr int32_t round32(const T value)
Returns the rounded 32 bit integer value of a given value.
Definition Numeric.h:2073
bool isSingular() const
Returns whether this matrix is singular (and thus cannot be inverted).
Definition SquareMatrix3.h:1342
This class implements a nearest pixel frame interpolator test.
Definition TestFrameInterpolatorNearestPixel.h:33
static bool testResize(const double testDuration, Worker &worker)
Tests the resize function.
static bool testAffine(const unsigned int width, const unsigned int height, const unsigned int channels, const double testDuration, Worker &worker)
Test for affine image transformations for varying frame dimensions and channel numbers.
static bool testResize(const unsigned int sourceWidth, const unsigned int sourceHeight, const unsigned int targetWidth, const unsigned int targetHeight, const double testDuration, Worker &worker)
Tests the resize function for a given frame dimension and channel number.
static bool testHomography(const double testDuration, Worker &worker)
Tests the homography transformation function.
static bool validateRotate90(const TElementType *frame, const unsigned int channels, const unsigned int width, const unsigned int height, const TElementType *clockwise, const TElementType *counterClockwise, const unsigned int framePaddingElements, const unsigned int clockwisePaddingElements, const unsigned int counterClockwisePaddingElements)
Validates the 90 degree rotate function.
static bool validateHomographyMask8BitPerChannel(const Frame &inputFrame, const Frame &outputFrame, const Frame &outputMask, const SquareMatrix3 &input_H_output, const CV::PixelPositionI &outputFrameOrigin)
Validates the homography interpolation function (using a binary mask to define known and unknown imag...
static bool testTransform(const unsigned int width, const unsigned int height, const double testDuration, Worker &worker)
Tests the frame transformation function applying a lookup table.
static bool testTransformMask(const unsigned int width, const unsigned int height, const double testDuration, Worker &worker)
Tests the frame mask transformation function applying a lookup table.
static bool testHomographyMask(const unsigned int width, const unsigned int height, const unsigned int channels, const double testDuration, Worker &worker)
Tests the homography transformation function (with binary mask defining known and unknown image conte...
static void validateHomography(const T *frame, const unsigned int frameWidth, const unsigned int frameHeight, const unsigned int framePaddingElements, const T *interpolatedFrame, const unsigned int interpolatedFrameWidth, const unsigned int interpolatedFrameHeight, const unsigned int interpolatedFramePaddingElements, const unsigned int channels, const SquareMatrix3 &homography, const T *backgroundColor, const CV::PixelPositionI &interpolatedFrameOrigin, double *maximalAbsError=nullptr, double *averageAbsError=nullptr, T *groundtruth=nullptr)
Validation function for the nearest-neighbor interpolation of 2D homogeneous image transformations (+...
Definition TestFrameInterpolatorNearestPixel.h:278
static bool test(const unsigned int width, const unsigned int height, const double testDuration, Worker &worker, const TestSelector &selector=TestSelector())
Tests all nearest pixel interpolation filter functions.
static bool testRotate90(const double testDuration, Worker &worker)
Tests the 90 degree rotate function.
static bool validateTransformationMask(const Frame &frame, const Frame &target, const Frame &targetMask, const CV::FrameInterpolatorNearestPixel::LookupTable &lookupTable, const uint8_t maskValue)
Validates the frame mask transformation function applying a lookup table.
static bool testHomography(const unsigned int width, const unsigned int height, const unsigned int channels, const double testDuration, Worker &worker)
Tests the homography transformation function for a given frame dimension and channel number.
static bool validateResizedFrame(const T *source, const T *target, const unsigned int sourceWidth, const unsigned int sourceHeight, const unsigned int targetWidth, const unsigned int targetHeight, const unsigned int channels, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements)
Validates a resized frame.
static bool testHomographyMask(const double testDuration, Worker &worker)
Tests the homography transformation function defining a binary mask for known and unknown image conte...
static bool testAffine(const double testDuration, Worker &worker)
Test for affine image transformations.
static bool validateTransformation(const Frame &frame, const Frame &target, const CV::FrameInterpolatorNearestPixel::LookupTable &lookupTable, const uint8_t *borderColor)
Validates the frame transformation function applying a lookup table.
static bool testRotate90(const unsigned int width, const unsigned int height, const double testDuration, Worker &worker)
Tests the 90 degree rotate function for a specific frame size and number of channels.
static bool testSpecialCasesResize400x400To224x224_8BitPerChannel(const double testDuration)
Tests the special case resize function for image resolutions from 400x400 to 224x224.
This class implements a test selector that parses test function strings and determines which tests sh...
Definition TestSelector.h:51
const T & x() const noexcept
Returns the x value.
Definition Vector2.h:710
const T & y() const noexcept
Returns the y value.
Definition Vector2.h:722
This class implements a worker able to distribute function calls over different threads.
Definition Worker.h:33
float Scalar
Definition of a scalar type.
Definition Math.h:129
VectorT2< Scalar > Vector2
Definition of a 2D vector.
Definition Vector2.h:28
The namespace covering the entire Ocean framework.
Definition Accessor.h:15