Image Component Library (ICL)
Classes | Namespaces | Macros | Enumerations | Functions | Variables
FixedMatrix.h File Reference
#include <ICLUtils/CompatMacros.h>
#include <ICLUtils/Exception.h>
#include <ICLUtils/ClippedCast.h>
#include <ICLUtils/FixedArray.h>
#include <ICLMath/DynMatrix.h>
#include <ICLMath/MatrixSubRectIterator.h>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <functional>
#include <iostream>
#include <vector>
#include <cmath>
#include <ippm.h>

Go to the source code of this file.

Classes

struct  icl::math::FixedMatrixBase
 FixedMatrix base struct defining datamode enum. More...
 
class  icl::math::FixedMatrixPart< T, N, Iterator >
 Utility struct for FixedMatrix sub-parts. More...
 
class  icl::math::FixedMatrix< T, COLS, ROWS >
 Powerful and highly flexible matrix class implementation. More...
 
struct  icl::math::FixedMatrix< T, COLS, ROWS >::col_iterator
 internal struct for row-wise iteration with stride=COLS More...
 

Namespaces

 icl
 undocument this line if you encounter any issues!
 
 icl::math
 

Macros

#define C1(N)   if(DIM>N) utils::FixedArray<T,COLS*ROWS>::m_data[N]=v##N
 
#define C4(A, B, C, D)   C1(A);C1(B);C1(C);C1(D)
 
#define OPTIMIZED_MATRIX_MULTIPLICATION(LEFT_COLS, LEFT_ROWS, RIGHT_COLS, TYPE, IPPSUFFIX)
 
#define USE_OPTIMIZED_INV_AND_DET_FOR_2X2_3X3_AND_4X4_MATRICES
 

Enumerations

enum  icl::math::AXES {
  icl::math::sxyz, icl::math::sxyx, icl::math::sxzy, icl::math::sxzx,
  icl::math::syzx, icl::math::syzy, icl::math::syxz, icl::math::syxy,
  icl::math::szxy, icl::math::szxz, icl::math::szyx, icl::math::szyz,
  icl::math::rzyx, icl::math::rxyx, icl::math::ryzx, icl::math::rxzx,
  icl::math::rxzy, icl::math::ryzy, icl::math::rzxy, icl::math::ryxy,
  icl::math::ryxz, icl::math::rzxz, icl::math::rxyz, icl::math::rzyz
}
 axes order specifications for euler angles More...
 

Functions

template<class T , unsigned int WIDTH, unsigned int HEIGHT, unsigned int HEIGHT2>
FixedMatrix< T, WIDTH, HEIGHT+HEIGHT2 > icl::math::operator% (const FixedMatrix< T, WIDTH, HEIGHT > &a, const FixedMatrix< T, WIDTH, HEIGHT2 > &b)
 Vertical Matrix concatenation. More...
 
template<class T , unsigned int WIDTH, unsigned int HEIGHT, unsigned int WIDTH2>
FixedMatrix< T, WIDTH+WIDTH2, HEIGHT > icl::math::operator, (const FixedMatrix< T, WIDTH, HEIGHT > &a, const FixedMatrix< T, WIDTH2, HEIGHT > &b)
 Horizontal Matrix concatenation. More...
 
template<class T , unsigned int M_ROWS_AND_COLS, unsigned int V_COLS>
FixedMatrix< T, V_COLS, M_ROWS_AND_COLS > & icl::math::operator *= (FixedMatrix< T, V_COLS, M_ROWS_AND_COLS > &v, const FixedMatrix< T, M_ROWS_AND_COLS, M_ROWS_AND_COLS > &m)
 Matrix multiplication (inplace) More...
 
template<class T , unsigned int COLS, unsigned int ROWS>
std::ostream & icl::math::operator<< (std::ostream &s, const FixedMatrix< T, COLS, ROWS > &m)
 put the matrix into a std::ostream (human readable) More...
 
template<class T , unsigned int COLS, unsigned int ROWS>
std::istream & icl::math::operator>> (std::istream &s, FixedMatrix< T, COLS, ROWS > &m)
 read matrix from std::istream (human readable) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 2, 2 > icl::math::create_rot_2D (T angle)
 creates a 2D rotation matrix (defined for float and double) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 3, 3 > icl::math::create_hom_3x3 (T angle, T dx=0, T dy=0, T v0=0, T v1=0)
 creates a 2D homogen matrix (defined for float and double) More...
 
template<class T >
FixedMatrix< T, 3, 3 > icl::math::create_hom_3x3_trans (T dx, T dy)
 creates a 2D homogen matrix with translation part only (defined for float and double) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 3, 3 > icl::math::create_rot_3D (T axisX, T axisY, T axisZ, T angle)
 create 3D rotation matrix from rotation axis and angle (defined for float and double only) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 3, 3 > icl::math::create_rot_3D (T ai, T aj, T ak, AXES axes=AXES_DEFAULT)
 create 3D rotation matrix from euler angles in specified axes order (defined for float and double only) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 4, 4 > icl::math::create_hom_4x4 (T rx, T ry, T rz, T dx=0, T dy=0, T dz=0, T v0=0, T v1=0, T v2=0, AXES axes=AXES_DEFAULT)
 creates a 3D homogeneous matrix (defined for float and double) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 4, 4 > icl::math::create_rot_4x4 (T axisX, T axisY, T axisZ, T angle)
 create 4D homogeneous matrix that rotates about given axis by given angle (defined for float and double only) More...
 
template<class T >
FixedMatrix< T, 4, 4 > icl::math::create_hom_4x4_trans (T dx, T dy, T dz)
 creates 4D homogeneous matrix with translation part only (defined for float and double) More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 1, 3 > icl::math::extract_euler_angles (const FixedMatrix< T, 3, 3 > &m, AXES axes=AXES_DEFAULT)
 compute euler angles for rotation matrix assuming specified axes order More...
 
template<class T >
ICLMath_IMP FixedMatrix< T, 1, 3 > icl::math::extract_euler_angles (const FixedMatrix< T, 4, 4 > &m, AXES axes=AXES_DEFAULT)
 
 icl::math::OPTIMIZED_MATRIX_MULTIPLICATION (2, 2, 2, float, 32f)
 
 icl::math::OPTIMIZED_MATRIX_MULTIPLICATION (3, 3, 3, float, 32f)
 
 icl::math::OPTIMIZED_MATRIX_MULTIPLICATION (4, 4, 4, float, 32f)
 
 icl::math::OPTIMIZED_MATRIX_MULTIPLICATION (2, 2, 2, double, 64f)
 
 icl::math::OPTIMIZED_MATRIX_MULTIPLICATION (3, 3, 3, double, 64f)
 
 icl::math::OPTIMIZED_MATRIX_MULTIPLICATION (4, 4, 4, double, 64f)
 

Variables

ICLMath_API const AXES icl::math::AXES_DEFAULT
 

Macro Definition Documentation

◆ C1

#define C1 (   N)    if(DIM>N) utils::FixedArray<T,COLS*ROWS>::m_data[N]=v##N

◆ C4

#define C4 (   A,
  B,
  C,
 
)    C1(A);C1(B);C1(C);C1(D)

◆ OPTIMIZED_MATRIX_MULTIPLICATION

#define OPTIMIZED_MATRIX_MULTIPLICATION (   LEFT_COLS,
  LEFT_ROWS,
  RIGHT_COLS,
  TYPE,
  IPPSUFFIX 
)
Value:
template<> template<> \
inline void \
FixedMatrix<TYPE,RIGHT_COLS,LEFT_ROWS>::mult \
( \
const FixedMatrix<TYPE,RIGHT_COLS,LEFT_COLS> &m, \
FixedMatrix<TYPE,RIGHT_COLS,LEFT_ROWS> &dst \
) const { \
static const unsigned int ST=sizeof(TYPE); \
ippmMul_mm_##IPPSUFFIX(data(),LEFT_COLS*ST,ST,LEFT_COLS,LEFT_ROWS, \
m.data(),RIGHT_COLS*ST,ST,RIGHT_COLS,LEFT_COLS, \
dst.data(),RIGHT_COLS*ST,ST); \
}
ICLQt_API ImgROI data(ImgQ &r)
creates full ROI ROI-struct

◆ USE_OPTIMIZED_INV_AND_DET_FOR_2X2_3X3_AND_4X4_MATRICES

#define USE_OPTIMIZED_INV_AND_DET_FOR_2X2_3X3_AND_4X4_MATRICES