Ocean
|
This class implements a 2D lookup object with values at the bins' corners defining the individual lookup values. More...
Public Member Functions | |
LookupCorner2 ()=default | |
Creates a new empty lookup object. More... | |
LookupCorner2 (const LookupCorner2< T, TScalar > &lookup) | |
Copy constructor. More... | |
LookupCorner2 (LookupCorner2< T, TScalar > &&lookup) noexcept | |
Move constructor. More... | |
LookupCorner2 (const size_t sizeX, const size_t sizeY, const size_t binsX, const size_t binsY) | |
Creates a new lookup object by definition of the dimensions and bin numbers. More... | |
LookupCorner2 (const size_t sizeX, const size_t sizeY, const size_t binsX, const size_t binsY, const T *binCornerValues) | |
Creates a new lookup object by definition of the dimensions and bin numbers. More... | |
LookupCorner2 (const size_t sizeX, const size_t sizeY, const LookupCorner2< T, TScalar > &lookup) | |
Creates a new lookup object by definition of the dimensions and a given lookup object. More... | |
bool | isInside (const TScalar x, const TScalar y) const |
Returns whether a given position lies inside this lookup object and therefore whether this position can be applied for the interpolation functions. More... | |
size_t | binX (const TScalar x) const |
Returns the horizontal bin that corresponds to a precise horizontal lookup position. More... | |
size_t | binY (const TScalar y) const |
Returns the vertical bin that corresponds to a precise vertical lookup position. More... | |
TScalar | binTopLeftCornerPositionX (const size_t binX) const |
Returns the horizontal corner position of a specific bin corner (the top left corner) in relation to the dimension of this lookup object. More... | |
TScalar | binTopLeftCornerPositionY (const size_t binY) const |
Returns the vertical corner position of a specific bin corner (the top left corner) in relation to the dimension of this lookup object. More... | |
Vector2 | binTopLeftCornerPosition (const size_t binX, const size_t binY) const |
Returns the corner position (the top left corner) of a specific bin in relation to the dimension of this lookup object. More... | |
const T & | binTopLeftCornerValue (const size_t binX, const size_t binY) const |
Returns the lookup value of a specific bin corner (the top left corner value) of this lookup object. More... | |
T | nearestValue (const TScalar x, const TScalar y) const |
Applies a lookup for a specific position in this lookup object. More... | |
T | bilinearValue (const TScalar x, const TScalar y) const |
Applies a lookup for a specific position in this lookup object. More... | |
template<typename TTarget = T> | |
void | bilinearValues (const size_t y, TTarget *values) const |
Applies a lookup for an entire row in this lookup object. More... | |
template<typename TTarget = T> | |
void | bilinearValues (const size_t x, const size_t y, const size_t size, TTarget *values) const |
Applies a lookup for a subset of a row in this lookup object. More... | |
void | bilinearValue (const TScalar x, const TScalar y, T &topLeft, T &topRight, T &bottomLeft, T &bottomRight, TScalar &factorTopLeft, TScalar &factorTopRight, TScalar &factorBottomLeft, TScalar &factorBottomRight) const |
Applies a lookup for a specific position in this lookup object but does not apply the bilinear interpolation, instead all necessary parameters will be returned. More... | |
T | bicubicValue (const TScalar x, const TScalar y) const |
Applies a lookup for a specific position in this lookup object. More... | |
T | clampedNearestValue (const TScalar x, const TScalar y) const |
Applies a lookup for a specific position in this lookup object while the position is clamped to match into the domain of the lookup table. More... | |
T | clampedBilinearValue (const TScalar x, const TScalar y) const |
Applies a lookup for a specific position in this lookup object while the position is clamped to match into the domain of the lookup table. More... | |
T | clampedBicubicValue (const TScalar x, const TScalar y) const |
Applies a lookup for a specific position in this lookup object while the position is clamped to match into the domain of the lookup table. More... | |
void | setBinTopLeftCornerValue (const size_t binX, const size_t binY, const T &value) |
Sets the value of one specific lookup bin's top left corner. More... | |
LookupCorner2< T, TScalar > | operator+ (const T &offset) const |
Adds an offset value to each lookup value. More... | |
LookupCorner2< T, TScalar > & | operator+= (const T &offset) |
Adds an offset value to each lookup value. More... | |
LookupCorner2< T, TScalar > | operator- (const T &offset) const |
Subtracts an offset value from each lookup value. More... | |
LookupCorner2< T, TScalar > & | operator-= (const T &offset) |
Subtracts an offset value from each lookup value. More... | |
LookupCorner2< T, TScalar > & | operator= (const LookupCorner2< T, TScalar > &lookup) |
Copy operator. More... | |
LookupCorner2< T, TScalar > & | operator= (LookupCorner2< T, TScalar > &&lookup) noexcept |
Move operator. More... | |
Public Member Functions inherited from Ocean::Lookup2< T, Scalar > | |
const T * | data () const |
Returns a pointer to the constant bin data (row aligned). More... | |
T * | data () |
Returns a pointer to the bin data (row aligned). More... | |
size_t | sizeX () const |
Returns the horizontal dimension of this lookup object. More... | |
size_t | sizeY () const |
Returns the vertical dimension of this lookup object. More... | |
size_t | binsX () const |
Returns the number of horizontal bins of this lookup object. More... | |
size_t | binsY () const |
Returns the number of vertical bins of this lookup object. More... | |
bool | isEmpty () const |
Returns whether this lookup object does not hold any lookup bin. More... | |
operator bool () const | |
Returns whether this lookup object holds at least one lookup bin. More... | |
bool | operator== (const Lookup2< T, Scalar > &lookup) const |
Returns whether two lookup objects are identical. More... | |
bool | operator!= (const Lookup2< T, Scalar > &lookup) const |
Returns whether two lookup objects are not identical. More... | |
Additional Inherited Members | |
Public Types inherited from Ocean::Lookup2< T, Scalar > | |
typedef T | Type |
Definition of the lookup data type. More... | |
Protected Types inherited from Ocean::Lookup2< T, Scalar > | |
typedef std::vector< T > | Values |
Definition of a vector holding lookup values. More... | |
Protected Member Functions inherited from Ocean::Lookup2< T, Scalar > | |
Lookup2 ()=default | |
Creates a new empty lookup object. More... | |
Lookup2 (const Lookup2< T, Scalar > &lookup) | |
Copy constructor. More... | |
Lookup2 (Lookup2< T, Scalar > &&lookup) noexcept | |
Move constructor. More... | |
Lookup2< T, Scalar > & | operator= (const Lookup2< T, Scalar > &lookup) |
Assign operator. More... | |
Lookup2< T, Scalar > & | operator= (Lookup2< T, Scalar > &&lookup) noexcept |
Move operator. More... | |
Protected Attributes inherited from Ocean::Lookup2< T, Scalar > | |
size_t | sizeX_ |
Horizontal dimension of this lookup object. More... | |
size_t | sizeY_ |
Vertical dimension of this lookup object. More... | |
size_t | binsX_ |
Number of horizontal bins. More... | |
size_t | binsY_ |
Number of vertical bins. More... | |
Scalar | invSizeX_ |
Inverse horizontal dimension of this lookup object. More... | |
Scalar | invSizeY_ |
Inverse vertical dimension of this lookup object. More... | |
Scalar | invBinsX_ |
Inverse number of horizontal bins. More... | |
Scalar | invBinsY_ |
Inverse number of vertical bins. More... | |
Values | values_ |
The values of the lookup bins. More... | |
This class implements a 2D lookup object with values at the bins' corners defining the individual lookup values.
This area is separated into individual neighboring bins (with absolute identical sizes) as each bin may cover a non-integer sized area of elements (e.g, pixels).
Thus, the positions and sizes of a bin do not match with physical elements (e.g., pixels).
The lookup table with 4x2 bins has the following layout:
+ --- + --- + --- + --- + | | | | | + --- + --- + --- + --- + | | | | | + --- + --- + --- + --- +
With '+' showing the corner positions of the lookup values.
Thus, the lookup table has 4 horizontal bins and 5 horizontal lookup values.
The first lookup value is located at the horizontal position 0 and the last lookup value is located at the horizontal position sizeX (and not sizeX - 1).
The vertical positions are accordingly.
If this lookup table is applied to visual content like e.g. an image, the layout of a 4x2 bins object can be interpreted as follows:
----------------------- |+ + + + |+ | | |+ + + + |+ | | ----------------------- + + + + +
With '-' and '|' showing the border of the image (not covering one pixel).
Thus, the first column of lookup values is located in the image column with index '0' while the last column of lookup values is located in the image column with index 'width' (not width - 1).
And the first row of lookup values is located in the image row with index '0' while the last row of lookup values it located in the image row with index 'height' (not height - 1).
T | The data type of the stored lookup values |
TScalar | The data type of the scalar values, either 'float' or 'double' |
|
default |
Creates a new empty lookup object.
|
inline |
Copy constructor.
lookup | The lookup object to be copied |
|
inlinenoexcept |
Move constructor.
lookup | The lookup object to be moved |
Ocean::LookupCorner2< T, TScalar >::LookupCorner2 | ( | const size_t | sizeX, |
const size_t | sizeY, | ||
const size_t | binsX, | ||
const size_t | binsY | ||
) |
Creates a new lookup object by definition of the dimensions and bin numbers.
Beware: The bin values will be initialized with the default constructor of the template class.
sizeX | Horizontal dimension of the lookup table, with range [1, infinity) |
sizeY | Vertical dimension of the lookup table, with range [1, infinity) |
binsX | Number of horizontal bins, with range [1, sizeX] |
binsY | Number of vertical bins, with range [1, sizeY] |
Ocean::LookupCorner2< T, TScalar >::LookupCorner2 | ( | const size_t | sizeX, |
const size_t | sizeY, | ||
const size_t | binsX, | ||
const size_t | binsY, | ||
const T * | binCornerValues | ||
) |
Creates a new lookup object by definition of the dimensions and bin numbers.
sizeX | Horizontal dimension of the lookup table, with range [1, infinity) |
sizeY | Vertical dimension of the lookup table, with range [1, infinity) |
binsX | Number of horizontal bins, with range [1, sizeX] |
binsY | Number of vertical bins, with range [1, sizeY] |
binCornerValues | The bins' corner values of the lookup object (row aligned), (binsX + 1) * (binsY + 1) values must be provided |
Ocean::LookupCorner2< T, TScalar >::LookupCorner2 | ( | const size_t | sizeX, |
const size_t | sizeY, | ||
const LookupCorner2< T, TScalar > & | lookup | ||
) |
Creates a new lookup object by definition of the dimensions and a given lookup object.
sizeX | Horizontal dimension of the lookup table, with range [1, infinity) |
sizeY | Vertical dimension of the lookup table, with range [1, infinity) |
lookup | The lookup object specifying the lookup values and the number of lookup bins |
T Ocean::LookupCorner2< T, TScalar >::bicubicValue | ( | const TScalar | x, |
const TScalar | y | ||
) | const |
Applies a lookup for a specific position in this lookup object.
The resulting value is cubic interpolated within the 16-neighborhood of the lookup bins.
x | Precise horizontal position for the resulting lookup value, with range [0, sizeX()] |
y | Precise vertical position for the resulting lookup value, with range [0, sizeY()] |
T Ocean::LookupCorner2< T, TScalar >::bilinearValue | ( | const TScalar | x, |
const TScalar | y | ||
) | const |
Applies a lookup for a specific position in this lookup object.
The resulting value is bilinear interpolated within the 4-neighborhood of the lookup bins.
x | Precise horizontal position for the resulting lookup value, with range [0, sizeX()] |
y | Precise vertical position for the resulting lookup value, with range [0, sizeY()] |
void Ocean::LookupCorner2< T, TScalar >::bilinearValue | ( | const TScalar | x, |
const TScalar | y, | ||
T & | topLeft, | ||
T & | topRight, | ||
T & | bottomLeft, | ||
T & | bottomRight, | ||
TScalar & | factorTopLeft, | ||
TScalar & | factorTopRight, | ||
TScalar & | factorBottomLeft, | ||
TScalar & | factorBottomRight | ||
) | const |
Applies a lookup for a specific position in this lookup object but does not apply the bilinear interpolation, instead all necessary parameters will be returned.
The resulting value is bilinear interpolated within the 4-neighborhood of the lookup bins.
x | Precise horizontal position for the resulting lookup value, with range [0, sizeX()] |
y | Precise vertical position for the resulting lookup value, with range [0, sizeY()] |
topLeft | The lookup value of the top left bin (in relation to the lookup position) |
topRight | The lookup value of the top right bin (in relation to the lookup position) |
bottomLeft | The lookup value of the bottom left bin (in relation to the lookup position) |
bottomRight | The lookup value of the bottom right bin (in relation to the lookup position) |
factorTopLeft | The interpolation value for value of the top left bin, with range [0, 1] |
factorTopRight | The interpolation value for value of the top right bin, with range [0, 1] |
factorBottomLeft | The interpolation value for value of the bottom left bin, with range [0, 1] |
factorBottomRight | The interpolation value for value of the bottom right bin, with range [0, 1] |
void Ocean::LookupCorner2< T, TScalar >::bilinearValues | ( | const size_t | x, |
const size_t | y, | ||
const size_t | size, | ||
TTarget * | values | ||
) | const |
Applies a lookup for a subset of a row in this lookup object.
The resulting values are bilinear interpolated within the individual 4-neighborhood of the lookup bins. This function provides the same results as bilinearValue(), but for a subset of the row to speed up the computation.
x | The horizontal start position for which the lookup values will be determined, with range [0, sizeX() - 1] |
y | The vertical position of the row for which the lookup values will be determined, with range [0, sizeY() - 1] |
size | The number of subsequent lookup values which will be created, with range [1, sizeX() - xStart] |
values | The resulting size lookup values |
TTarget | The data type of the interpolated target values, e.g., T == VectorD2, TTarget == VectorF2 |
void Ocean::LookupCorner2< T, TScalar >::bilinearValues | ( | const size_t | y, |
TTarget * | values | ||
) | const |
Applies a lookup for an entire row in this lookup object.
The resulting values are bilinear interpolated within the individual 4-neighborhood of the lookup bins. This function provides the same results as bilinearValue(), but for an entire row to speed up the computation.
y | The vertical position of the row for which the lookup values will be determined, with range [0, sizeY()) |
values | The resulting sizeX() lookup values |
TTarget | The data type of the interpolated target values, e.g., T == VectorD2, TTarget == VectorF2 |
|
inline |
|
inline |
Returns the horizontal corner position of a specific bin corner (the top left corner) in relation to the dimension of this lookup object.
binX | Horizontal bin position, with range [0, binsX()] |
|
inline |
Returns the vertical corner position of a specific bin corner (the top left corner) in relation to the dimension of this lookup object.
binY | Vertical bin position, with range [0, binsY()] |
|
inline |
|
inline |
Returns the horizontal bin that corresponds to a precise horizontal lookup position.
x | Precise horizontal position in relation to the dimension of this lookup object, with range [0, sizeX()] |
|
inline |
Returns the vertical bin that corresponds to a precise vertical lookup position.
y | Precise vertical position in relation to the dimension of this lookup object, with range [0, sizeY()] |
T Ocean::LookupCorner2< T, TScalar >::clampedBicubicValue | ( | const TScalar | x, |
const TScalar | y | ||
) | const |
Applies a lookup for a specific position in this lookup object while the position is clamped to match into the domain of the lookup table.
The resulting value is cubic interpolated within the 16-neighborhood of the lookup bins.
x | Precise horizontal position for the resulting lookup value, with range -(infinity, infinity) |
y | Precise vertical position for the resulting lookup value, with range -(infinity, infinity) |
T Ocean::LookupCorner2< T, TScalar >::clampedBilinearValue | ( | const TScalar | x, |
const TScalar | y | ||
) | const |
Applies a lookup for a specific position in this lookup object while the position is clamped to match into the domain of the lookup table.
The resulting value is bilinear interpolated within the 4-neighborhood of the lookup bins.
x | Precise horizontal position for the resulting lookup value, with range -(infinity, infinity) |
y | Precise vertical position for the resulting lookup value, with range -(infinity, infinity) |
T Ocean::LookupCorner2< T, TScalar >::clampedNearestValue | ( | const TScalar | x, |
const TScalar | y | ||
) | const |
Applies a lookup for a specific position in this lookup object while the position is clamped to match into the domain of the lookup table.
The resulting value is specified by the nearest bin (determined by the bin's corner positions).
x | Precise horizontal position for the resulting lookup value, with range -(infinity, infinity) |
y | Precise vertical position for the resulting lookup value, with range -(infinity, infinity) |
|
inline |
Returns whether a given position lies inside this lookup object and therefore whether this position can be applied for the interpolation functions.
x | Precise horizontal position for the resulting lookup value, with range (-infinity, infinity) |
y | Precise vertical position for the resulting lookup value, with range (-infinity, infinity) |
T Ocean::LookupCorner2< T, TScalar >::nearestValue | ( | const TScalar | x, |
const TScalar | y | ||
) | const |
Applies a lookup for a specific position in this lookup object.
The resulting value is specified by the nearest bin (determined by the bin's corner positions).
x | Precise horizontal position for the resulting lookup value, with range [0, sizeX()] |
y | Precise vertical position for the resulting lookup value, with range [0, sizeY()] |
LookupCorner2< T, TScalar > Ocean::LookupCorner2< T, TScalar >::operator+ | ( | const T & | offset | ) | const |
Adds an offset value to each lookup value.
offset | The offset to be added |
LookupCorner2< T, TScalar > & Ocean::LookupCorner2< T, TScalar >::operator+= | ( | const T & | offset | ) |
Adds an offset value to each lookup value.
offset | The offset to be added |
LookupCorner2< T, TScalar > Ocean::LookupCorner2< T, TScalar >::operator- | ( | const T & | offset | ) | const |
Subtracts an offset value from each lookup value.
offset | The offset to be subtracted |
LookupCorner2< T, TScalar > & Ocean::LookupCorner2< T, TScalar >::operator-= | ( | const T & | offset | ) |
Subtracts an offset value from each lookup value.
offset | The offset to be subtracted |
|
inline |
Copy operator.
lookup | The lookup object to be copied |
|
inlinenoexcept |
Move operator.
lookup | The lookup object to be moved |
|
inline |