Ocean
Loading...
Searching...
No Matches
SumAbsoluteDifferences.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_CV_SUM_ABSOLUTE_DIFFERENCES_H
9#define META_OCEAN_CV_SUM_ABSOLUTE_DIFFERENCES_H
10
11#include "ocean/cv/CV.h"
15
16#include "ocean/base/DataType.h"
17
18#include "ocean/math/Numeric.h"
19
20namespace Ocean
21{
22
23namespace CV
24{
25
26/**
27 * This class implements functions calculation the sum of absolute differences.
28 * @ingroup cv
29 */
31{
32 public:
33
34 /**
35 * Returns the sum of absolute differences between two square image patches.
36 * @param image0 The image in which the first patch is located, must be valid
37 * @param image1 The image in which the second patch is located, must be valid
38 * @param width0 The width of the first image, in pixels, with range [tPatchSize, infinity)
39 * @param width1 The width of the second image, in pixels, with range [tPatchSize, infinity)
40 * @param centerX0 Horizontal center position of the (tPatchSize x tPatchSize) block in the first frame, with range [tPatchSize/2, width - tPatchSize/2 - 1]
41 * @param centerY0 Vertical center position of the (tPatchSize x tPatchSize) block in the first frame, with range [tPatchSize/2, height - tPatchSize/2 - 1]
42 * @param centerX1 Horizontal center position of the (tPatchSize x tPatchSize) block in the second frame, with range [tPatchSize/2, width - tPatchSize/2 - 1]
43 * @param centerY1 Vertical center position of the (tPatchSize x tPatchSize) block in the second frame, with range [tPatchSize/2, height - tPatchSize/2 - 1]
44 * @param image0PaddingElements The number of padding elements at the end of each row of the first image, in elements, with range [0, infinity)
45 * @param image1PaddingElements The number of padding elements at the end of each row of the second image, in elements, with range [0, infinity)
46 * @return The resulting sum of square differences, with range [0, infinity)
47 * @tparam tChannels The number of frame channels, with range [1, infinity)
48 * @tparam tPatchSize The size of the square patch (the edge length) in pixel, with range [1, infinity), must be odd
49 */
50 template <unsigned int tChannels, unsigned int tPatchSize>
51 static inline uint32_t patch8BitPerChannel(const uint8_t* const image0, const uint8_t* const image1, const unsigned int width0, const unsigned int width1, const unsigned int centerX0, const unsigned int centerY0, const unsigned int centerX1, const unsigned int centerY1, const unsigned int image0PaddingElements, const unsigned int image1PaddingElements);
52
53 /**
54 * Returns the sum of absolute differences between an image patch and a memory buffer.
55 * @param image0 The image in which the image patch is located, must be valid
56 * @param width0 Width of the first frame in pixels, with range [tPatchSize, infinity)
57 * @param centerX0 Horizontal center position of the (tPatchSize x tPatchSize) block in the first frame, with range [tPatchSize / 2, width0 - tPatchSize / 2 - 1]
58 * @param centerY0 Vertical center position of the (tPatchSize x tPatchSize) block in the first frame, with range [tPatchSize / 2, height0 - tPatchSize / 2 - 1]
59 * @param image0PaddingElements The number of padding elements at the end of each row of the first image, in elements, with range [0, infinity)
60 * @param buffer1 The memory buffer with `tChannels * tPatchSize * tPatchSize` elements, must be valid
61 * @return The resulting sum of absolute differences for tPatchSize * tPatchSize * tChannels elements, with range [0, infinity)
62 * @tparam tChannels The number of channels for the given frames, with range [1, infinity)
63 * @tparam tPatchSize The size of the square patch (the edge length) in pixel, with range [1, infinity), must be odd
64 */
65 template <unsigned int tChannels, unsigned int tPatchSize>
66 static inline uint32_t patchBuffer8BitPerChannel(const uint8_t* const image0, const unsigned int width0, const unsigned int centerX0, const unsigned int centerY0, const unsigned int image0PaddingElements, const uint8_t* const buffer1);
67
68 /**
69 * Returns the sum of square differences between two memory buffers.
70 * @param buffer0 The first memory buffer, must be valid
71 * @param buffer1 The second memory buffer, must be valid
72 * @return The resulting sum of square differences
73 * @tparam tChannels The number of channels the buffers have, with range [1, infinity)
74 * @tparam tPixels The number of pixels the buffer holds, in pixels, with range [1, infinity)
75 */
76 template <unsigned int tChannels, unsigned int tPixels>
77 static inline uint32_t buffer8BitPerChannel(const uint8_t* buffer0, const uint8_t* buffer1);
78
79 /**
80 * Returns the sum of absolute differences between two patches within an image, patch pixels outside the image will be mirrored back into the image.
81 * @param image0 The image in which the first patch is located, must be valid
82 * @param image1 The image in which the second patch is located, must be valid
83 * @param width0 The width of the first image, in pixels, with range [tPatchSize, infinity)
84 * @param height0 The height of the first image, in pixels, with range [tPatchSize, infinity)
85 * @param width1 The width of the second image, in pixels, with range [tPatchSize, infinity)
86 * @param height1 The height of the second image, in pixels, with range [tPatchSize, infinity)
87 * @param centerX0 Horizontal center position of the (tPatchSize x tPatchSize) block in the first frame, with range [tPatchSize/2, width - tPatchSize/2 - 1]
88 * @param centerY0 Vertical center position of the (tPatchSize x tPatchSize) block in the first frame, with range [tPatchSize/2, height - tPatchSize/2 - 1]
89 * @param centerX1 Horizontal center position of the (tPatchSize x tPatchSize) block in the second frame, with range [tPatchSize/2, width - tPatchSize/2 - 1]
90 * @param centerY1 Vertical center position of the (tPatchSize x tPatchSize) block in the second frame, with range [tPatchSize/2, height - tPatchSize/2 - 1]
91 * @param image0PaddingElements The number of padding elements at the end of each row of the first image, in elements, with range [0, infinity)
92 * @param image1PaddingElements The number of padding elements at the end of each row of the second image, in elements, with range [0, infinity)
93 * @return The resulting sum of absolute differences, with range [0, infinity)
94 * @tparam tChannels The number of frame channels, with range [1, infinity)
95 * @tparam tPatchSize The size of the square patch (the edge length) in pixel, with range [1, infinity), must be odd
96 */
97 template <unsigned int tChannels, unsigned int tPatchSize>
98 static uint32_t patchMirroredBorder8BitPerChannel(const uint8_t* image0, const uint8_t* image1, const unsigned int width0, const unsigned int height0, const unsigned int width1, const unsigned int height1, const unsigned int centerX0, const unsigned int centerY0, const unsigned int centerX1, const unsigned int centerY1, const unsigned int image0PaddingElements, const unsigned int image1PaddingElements);
99
100 /**
101 * Determines the sum of absolute differences between two individual frames, individually for each channel.
102 * @param firstFrame The first frame for which the absolute difference will be determined, must be valid
103 * @param secondFrame The second frame for which the absolute difference will be determined, must be valid
104 * @param width The with of the first frame and second frame in pixel, with range [1, infinity)
105 * @param height The height of the first frame and second frame in pixel, with range [1, infinity)
106 * @param absoluteDifferences The resulting absolute differences, one for each channel, must be valid, with range [0, infinity)
107 * @param firstFramePaddingElements The number of optional padding elements at the end of each row of the first frame, in elements, with range [0, infinity)
108 * @param secondFramePaddingElements The number of optional padding elements at the end of each row of the second frame, in elements, with range [0, infinity)
109 * @tparam T The data type of each pixel element, e.g., 'uint8_t' or 'float'
110 * @tparam tChannels The number of frame channels, with range [1, infinity)
111 */
112 template <typename T, unsigned int tChannels>
113 static void determine(const T* firstFrame, const T* secondFrame, const unsigned int width, const unsigned int height, typename AbsoluteDifferenceValueTyper<T>::Type* absoluteDifferences, const unsigned int firstFramePaddingElements, const unsigned int secondFramePaddingElements);
114
115 /**
116 * Determines the sum of absolute differences between two individual frames, individually for each plane, and individually for each channel.
117 * @param firstFrame The first frame for which the absolute difference will be determined, must be valid, must have an element type of FrameType::DT_UNSIGNED_INTEGER_8.
118 * @param secondFrame The second frame for which the absolute difference will be determined, must be valid, must have the same frame type as 'firstFrame'
119 * @param absoluteDifferences The resulting absolute differences, one for each plane and channel; first all differences for the first plane, then all differences for the second plane etc., with range [0, infinity)
120 * @return True, if succeeded
121 */
122 static inline bool determine(const Frame& firstFrame, const Frame& secondFrame, Indices32& absoluteDifferences);
123};
124
125template <unsigned int tChannels, unsigned int tPatchSize>
126inline uint32_t SumAbsoluteDifferences::patch8BitPerChannel(const uint8_t* image0, const uint8_t* image1, const unsigned int width0, const unsigned int width1, const unsigned int centerX0, const unsigned int centerY0, const unsigned int centerX1, const unsigned int centerY1, const unsigned int image0PaddingElements, const unsigned int image1PaddingElements)
127{
128 static_assert(tChannels >= 1u, "Invalid channel number!");
129 static_assert(tPatchSize % 2u == 1u, "Invalid patch size!");
130
131 ocean_assert(image0 != nullptr && image1 != nullptr);
132
133 ocean_assert(width0 >= tPatchSize);
134 ocean_assert(width1 >= tPatchSize);
135
136 constexpr unsigned int tPatchSize_2 = tPatchSize / 2u;
137
138 ocean_assert(centerX0 >= tPatchSize_2 && centerY0 >= tPatchSize_2);
139 ocean_assert(centerX1 >= tPatchSize_2 && centerY1 >= tPatchSize_2);
140
141 ocean_assert(centerX0 < width0 - tPatchSize_2);
142 ocean_assert(centerX1 < width1 - tPatchSize_2);
143
144 const unsigned int image0StrideElements = width0 * tChannels + image0PaddingElements;
145 const unsigned int image1StrideElements = width1 * tChannels + image1PaddingElements;
146
147 const uint8_t* const patch0 = image0 + (centerY0 - tPatchSize_2) * image0StrideElements + (centerX0 - tPatchSize_2) * tChannels;
148 const uint8_t* const patch1 = image1 + (centerY1 - tPatchSize_2) * image1StrideElements + (centerX1 - tPatchSize_2) * tChannels;
149
150#if defined(OCEAN_HARDWARE_SSE_VERSION) && OCEAN_HARDWARE_SSE_VERSION >= 41
151
152 if constexpr (tPatchSize >= 5u)
153 {
154 return SumAbsoluteDifferencesSSE::patch8BitPerChannel<tChannels, tPatchSize>(patch0, patch1, image0StrideElements, image1StrideElements);
155 }
156
157#elif defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
158
159 if constexpr (tPatchSize >= 5u)
160 {
161 return SumAbsoluteDifferencesNEON::patch8BitPerChannel<tChannels, tPatchSize>(patch0, patch1, image0StrideElements, image1StrideElements);
162 }
163
164#endif // OCEAN_HARDWARE_SSE_VERSION, OCEAN_HARDWARE_NEON_VERSION
165
166 return SumAbsoluteDifferencesBase::patch8BitPerChannelTemplate<tChannels, tPatchSize>(patch0, patch1, image0StrideElements, image1StrideElements);
167}
168
169template <unsigned int tChannels, unsigned int tPatchSize>
170inline uint32_t SumAbsoluteDifferences::patchBuffer8BitPerChannel(const uint8_t* const image0, const unsigned int width0, const unsigned int centerX0, const unsigned int centerY0, const unsigned int image0PaddingElements, const uint8_t* const buffer1)
171{
172 static_assert(tChannels >= 1u, "Invalid channel number!");
173 static_assert(tPatchSize % 2u == 1u, "Invalid patch size!");
174
175 ocean_assert(image0 != nullptr && buffer1 != nullptr);
176
177 ocean_assert(width0 >= tPatchSize);
178
179 constexpr unsigned int tPatchSize_2 = tPatchSize / 2u;
180
181 ocean_assert(centerX0 >= tPatchSize_2 && centerY0 >= tPatchSize_2);
182
183 ocean_assert(centerX0 < width0 - tPatchSize_2);
184
185 const unsigned int image0StrideElements = width0 * tChannels + image0PaddingElements;
186
187 const uint8_t* const patch0 = image0 + (centerY0 - tPatchSize_2) * image0StrideElements + (centerX0 - tPatchSize_2) * tChannels;
188
189#if defined(OCEAN_HARDWARE_SSE_VERSION) && OCEAN_HARDWARE_SSE_VERSION >= 41
190
191 if constexpr (tPatchSize >= 5u)
192 {
193 return SumAbsoluteDifferencesSSE::patchBuffer8BitPerChannel<tChannels, tPatchSize>(patch0, buffer1, image0StrideElements);
194 }
195
196#elif defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
197
198 if constexpr (tPatchSize >= 5u)
199 {
200 return SumAbsoluteDifferencesNEON::patchBuffer8BitPerChannel<tChannels, tPatchSize>(patch0, buffer1, image0StrideElements);
201 }
202
203#endif // OCEAN_HARDWARE_SSE_VERSION, OCEAN_HARDWARE_NEON_VERSION
204
205 return SumAbsoluteDifferencesBase::patchBuffer8BitPerChannelTemplate<tChannels, tPatchSize>(patch0, buffer1, image0StrideElements);
206}
207
208template <unsigned int tChannels, unsigned int tPixels>
209inline uint32_t SumAbsoluteDifferences::buffer8BitPerChannel(const uint8_t* const buffer0, const uint8_t* const buffer1)
210{
211 static_assert(tChannels >= 1u, "Invalid channel number!");
212 static_assert(tPixels >= 1u, "Invalid pixel number!");
213
214 constexpr unsigned int tElements = tChannels * tPixels;
215
216#if defined(OCEAN_HARDWARE_SSE_VERSION) && OCEAN_HARDWARE_SSE_VERSION >= 41
217
218 if constexpr (tElements >= 15u)
219 {
220 return SumAbsoluteDifferencesSSE::buffer8BitPerChannel<tElements>(buffer0, buffer1);
221 }
222
223#elif defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
224
225 if constexpr (tElements >= 8u)
226 {
227 return SumAbsoluteDifferencesNEON::buffer8BitPerChannel<tElements>(buffer0, buffer1);
228 }
229
230#endif // OCEAN_HARDWARE_SSE_VERSION, OCEAN_HARDWARE_NEON_VERSION
231
232 return SumAbsoluteDifferencesBase::buffer8BitPerChannelTemplate<tElements>(buffer0, buffer1);
233}
234
235template <unsigned int tChannels, unsigned int tPatchSize>
236uint32_t SumAbsoluteDifferences::patchMirroredBorder8BitPerChannel(const uint8_t* image0, const uint8_t* image1, const unsigned int width0, const unsigned int height0, const unsigned int width1, const unsigned int height1, const unsigned int centerX0, const unsigned int centerY0, const unsigned int centerX1, const unsigned int centerY1, const unsigned int image0PaddingElements, const unsigned int image1PaddingElements)
237{
238 static_assert(tChannels >= 1u, "Invalid channel number!");
239 static_assert(tPatchSize % 2u == 1u, "Invalid patch size!");
240
241 return SumAbsoluteDifferencesBase::patchMirroredBorder8BitPerChannelTemplate<tChannels>(image0, image1, tPatchSize, width0, height0, width1, height1, centerX0, centerY0, centerX1, centerY1, image0PaddingElements, image1PaddingElements);
242}
243
244template <typename T, unsigned int tChannels>
245void SumAbsoluteDifferences::determine(const T* firstFrame, const T* secondFrame, const unsigned int width, const unsigned int height, typename AbsoluteDifferenceValueTyper<T>::Type* absoluteDifferences, const unsigned int firstFramePaddingElements, const unsigned int secondFramePaddingElements)
246{
247 ocean_assert(firstFrame != nullptr);
248 ocean_assert(secondFrame != nullptr);
249 ocean_assert(width != 0u && height != 0u);
250 ocean_assert(absoluteDifferences != nullptr);
251
252 typedef typename AbsoluteDifferenceValueTyper<T>::Type TResult;
253 typedef typename DifferenceValueTyper<T>::Type TDifferenceType;
254
255 const unsigned int firstFrameStrideElements = width * tChannels + firstFramePaddingElements;
256 const unsigned int secondFrameStrideElements = width * tChannels + secondFramePaddingElements;
257
258 TResult result[tChannels];
259
260 for (unsigned int n = 0u; n < tChannels; ++n)
261 {
262 result[n] = TResult(0);
263 }
264
265 for (unsigned int y = 0u; y < height; ++y)
266 {
267 for (unsigned int x = 0u; x < width; ++x)
268 {
269 for (unsigned int n = 0u; n < tChannels; ++n)
270 {
271 result[n] += TResult(NumericT<TDifferenceType>::abs(TDifferenceType(firstFrame[x * tChannels + n] - secondFrame[x * tChannels + n])));
272 }
273 }
274
275 firstFrame += firstFrameStrideElements;
276 secondFrame += secondFrameStrideElements;
277 }
278
279 for (unsigned int n = 0u; n < tChannels; ++n)
280 {
281 absoluteDifferences[n] = result[n];
282 }
283}
284
285inline bool SumAbsoluteDifferences::determine(const Frame& firstFrame, const Frame& secondFrame, Indices32& absoluteDifferences)
286{
287 ocean_assert(firstFrame.isValid() && secondFrame.isValid());
288 ocean_assert(firstFrame.frameType() == secondFrame.frameType());
289 ocean_assert(firstFrame.dataType() == FrameType::DT_UNSIGNED_INTEGER_8);
290
291 absoluteDifferences.clear();
292
293 if (!firstFrame.isValid() || firstFrame.dataType() != FrameType::DT_UNSIGNED_INTEGER_8 || firstFrame.frameType() != secondFrame.frameType())
294 {
295 return false;
296 }
297
298 for (unsigned int planeIndex = 0u; planeIndex < firstFrame.numberPlanes(); ++planeIndex)
299 {
300 switch (firstFrame.planeChannels(planeIndex))
301 {
302 case 1u:
303 {
304 unsigned int planeAbsoluteDifference = 0u;
305 determine<uint8_t, 1u>(firstFrame.constdata<uint8_t>(planeIndex), secondFrame.constdata<uint8_t>(planeIndex), firstFrame.planeWidth(planeIndex), firstFrame.planeHeight(planeIndex), &planeAbsoluteDifference, firstFrame.paddingElements(planeIndex), secondFrame.paddingElements(planeIndex));
306 absoluteDifferences.emplace_back(planeAbsoluteDifference);
307 break;
308 }
309
310 case 2u:
311 {
312 unsigned int planeAbsoluteDifferences[2] = {0u, 0u};
313 determine<uint8_t, 2u>(firstFrame.constdata<uint8_t>(planeIndex), secondFrame.constdata<uint8_t>(planeIndex), firstFrame.planeWidth(planeIndex), firstFrame.planeHeight(planeIndex), planeAbsoluteDifferences, firstFrame.paddingElements(planeIndex), secondFrame.paddingElements(planeIndex));
314 absoluteDifferences.emplace_back(planeAbsoluteDifferences[0]);
315 absoluteDifferences.emplace_back(planeAbsoluteDifferences[1]);
316 break;
317 }
318
319 case 3u:
320 {
321 unsigned int planeAbsoluteDifferences[3] = {0u, 0u, 0u};
322 determine<uint8_t, 3u>(firstFrame.constdata<uint8_t>(planeIndex), secondFrame.constdata<uint8_t>(planeIndex), firstFrame.planeWidth(planeIndex), firstFrame.planeHeight(planeIndex), planeAbsoluteDifferences, firstFrame.paddingElements(planeIndex), secondFrame.paddingElements(planeIndex));
323 absoluteDifferences.emplace_back(planeAbsoluteDifferences[0]);
324 absoluteDifferences.emplace_back(planeAbsoluteDifferences[1]);
325 absoluteDifferences.emplace_back(planeAbsoluteDifferences[2]);
326 break;
327 }
328
329 case 4u:
330 {
331 unsigned int planeAbsoluteDifferences[4] = {0u, 0u, 0u, 0u};
332 determine<uint8_t, 4u>(firstFrame.constdata<uint8_t>(planeIndex), secondFrame.constdata<uint8_t>(planeIndex), firstFrame.planeWidth(planeIndex), firstFrame.planeHeight(planeIndex), planeAbsoluteDifferences, firstFrame.paddingElements(planeIndex), secondFrame.paddingElements(planeIndex));
333 absoluteDifferences.emplace_back(planeAbsoluteDifferences[0]);
334 absoluteDifferences.emplace_back(planeAbsoluteDifferences[1]);
335 absoluteDifferences.emplace_back(planeAbsoluteDifferences[2]);
336 absoluteDifferences.emplace_back(planeAbsoluteDifferences[3]);
337 break;
338 }
339
340 default:
341 ocean_assert(false && "Invalid channel number!");
342 return false;
343 }
344 }
345
346 return true;
347}
348
349}
350
351}
352
353#endif // META_OCEAN_CV_SUM_ABSOLUTE_DIFFERENCES_H
unsigned long long Type
Definition of the data type for the absolute difference value.
Definition DataType.h:225
This class implements several sum of absolute differences functions.
Definition SumAbsoluteDifferencesBase.h:25
This class implements functions calculation the sum of absolute differences.
Definition SumAbsoluteDifferences.h:31
static uint32_t patchMirroredBorder8BitPerChannel(const uint8_t *image0, const uint8_t *image1, const unsigned int width0, const unsigned int height0, const unsigned int width1, const unsigned int height1, const unsigned int centerX0, const unsigned int centerY0, const unsigned int centerX1, const unsigned int centerY1, const unsigned int image0PaddingElements, const unsigned int image1PaddingElements)
Returns the sum of absolute differences between two patches within an image, patch pixels outside the...
Definition SumAbsoluteDifferences.h:236
static uint32_t buffer8BitPerChannel(const uint8_t *buffer0, const uint8_t *buffer1)
Returns the sum of square differences between two memory buffers.
Definition SumAbsoluteDifferences.h:209
static void determine(const T *firstFrame, const T *secondFrame, const unsigned int width, const unsigned int height, typename AbsoluteDifferenceValueTyper< T >::Type *absoluteDifferences, const unsigned int firstFramePaddingElements, const unsigned int secondFramePaddingElements)
Determines the sum of absolute differences between two individual frames, individually for each chann...
Definition SumAbsoluteDifferences.h:245
static uint32_t patch8BitPerChannel(const uint8_t *const image0, const uint8_t *const image1, const unsigned int width0, const unsigned int width1, const unsigned int centerX0, const unsigned int centerY0, const unsigned int centerX1, const unsigned int centerY1, const unsigned int image0PaddingElements, const unsigned int image1PaddingElements)
Returns the sum of absolute differences between two square image patches.
Definition SumAbsoluteDifferences.h:126
static uint32_t patchBuffer8BitPerChannel(const uint8_t *const image0, const unsigned int width0, const unsigned int centerX0, const unsigned int centerY0, const unsigned int image0PaddingElements, const uint8_t *const buffer1)
Returns the sum of absolute differences between an image patch and a memory buffer.
Definition SumAbsoluteDifferences.h:170
T Type
Definition of the data type for the signed difference value.
Definition DataType.h:176
This class implements Ocean's image class.
Definition Frame.h:1808
const T * constdata(const unsigned int planeIndex=0u) const
Returns a pointer to the read-only pixel data of a specific plane.
Definition Frame.h:4248
const FrameType & frameType() const
Returns the frame type of this frame.
Definition Frame.h:3855
bool isValid() const
Returns whether this frame is valid.
Definition Frame.h:4528
unsigned int planeChannels(const unsigned int planeIndex) const
Returns the channels of a plane of this frame.
Definition Frame.h:4170
unsigned int planeWidth(const unsigned int planeIndex) const
Returns the width of a plane of this frame.
Definition Frame.h:4154
unsigned int planeHeight(const unsigned int planeIndex) const
Returns the height of a plane of this frame.
Definition Frame.h:4162
unsigned int paddingElements(const unsigned int planeIndex=0u) const
Returns the optional number of padding elements at the end of each row for a specific plane.
Definition Frame.h:4122
uint32_t numberPlanes() const
Returns the number of planes of the pixel format of this frame.
Definition Frame.h:3210
@ DT_UNSIGNED_INTEGER_8
Unsigned 8 bit integer data type (uint8_t).
Definition Frame.h:41
DataType dataType() const
Returns the data type of the pixel format of this frame.
Definition Frame.h:3190
This class provides basic numeric functionalities.
Definition Numeric.h:57
std::vector< Index32 > Indices32
Definition of a vector holding 32 bit index values.
Definition Base.h:96
The namespace covering the entire Ocean framework.
Definition Accessor.h:15