Structural deformable models
DMatrixUtil.h
Go to the documentation of this file.
1 #ifndef _DMATRIXUTIL_H_
2 #define _DMATRIXUTIL_H_
3 
4 namespace dmutil {
5  template<class T>
7  {
8  dword sxy = diag.size();
9  DMatrix<T> mat(sxy, sxy, T(0));
10  typename DMatrix<T>::const_iterator di = diag.getData().begin();
11  for(dword i = 0; i < sxy; i++, di++) mat.at(i,i) = *di;
12  return mat;
13  }
14 
15  template<class T>
16  DMatrix<T> makeIdentity(dword sxy, const T& diag = 1) {
17  return DMatrix<T>(sxy, sxy, T(0)).setDiag(diag);
18  }
19 
20  template<class T>
21  DMatrix<T> makeUpper(dword sxy, bool filldiag=true, const T& val = 1) {
22  return DMatrix<T>(sxy, sxy).setUpper(1, val);
23  }
24 
25  template<class T>
26  DMatrix<T> makeLower(dword sxy, bool filldiag=true, const T& val = 1) {
27  return DMatrix<T>(sxy, sxy).setLower(val);
28  }
29 
30  template<class T>
31  DMatrix<T> makeRotMat2D(const float& angle) {
32  DMatrix<T> mat(2,2);
33  mat.at(0,0) = (T)cos(angle); mat.at(1,0) = (T)-sin(angle);
34  mat.at(0,1) = (T)sin(angle); mat.at(1,1) = (T)cos(angle);
35  return mat;
36  }
37 
38  template<class T>
39  DMatrix<T> horizCat(const DMatrix<T>& lm, const DMatrix<T>& rm)
40  {
41  assert(lm.sizeY() == rm.sizeY());
42  DMatrix<T> res(lm.sizeX()+rm.sizeX(), lm.sizeY());
43  res.setRange(0,0, lm);
44  res.setRange(lm.sizeX(),0, rm);
45  return res;
46  }
47 
48  template<class T>
49  DMatrix<T> vertCat(const DMatrix<T>& um, const DMatrix<T>& lm)
50  {
51  assert(um.sizeX() == lm.sizeX());
52  DMatrix<T> res(um.sizeX(), lm.sizeY() + um.sizeY());
53  res.setRange(0,0, um);
54  res.setRange(0,um.sizeY(), lm);
55  return res;
56  }
57 
58  template<class T>
60  {
61  DMatrix<T> res(mat.sizeX(), 1);
62  typename DMatrix<T>::const_iterator mi = mat.getData().begin();
63  for(dword y=0; y<mat.sizeY(); y++) {
64  typename DMatrix<T>::iterator ri = res.getData().begin();
65  for(dword x=0; x<mat.sizeX(); x++, ri++, mi++)
66  *ri += *mi;
67  }
68  return res;
69  }
70 
71  template<class T>
73  {
74  for(typename DMatrix<T>::iterator mi = mat.getData().begin();
75  mi != mat.getData().end(); mi++)
76  *mi = *mi**mi;
77  return mat;
78  }
79 
80  template<class T>
82  {
83  for(typename DMatrix<T>::iterator mi = mat.getData().begin();
84  mi != mat.getData().end(); mi++)
85  *mi = (T)sqrtf((double)*mi);
86  return mat;
87  }
88 
89  template<class T>
91  {
92  DMatrix<T> res(sum(mat));
93  return res/=T(mat.sizeY());
94  }
95 
96  template<class T>
98  {
99  DMatrix<T> e(avg(mat));
100  DMatrix<T> x2(mat); sqr(x2);
101  DMatrix<T> e2(avg(x2));
102  return e2-=sqr(e);
103  }
104 
105  template<class T>
107  {
108  DMatrix<T> sd(var(mat));
109  return dmutil::sqrt(sd);
110  }
111 
112  template<class T>
113  DMatrix<T> expand(const DMatrix<T>& mat, dword mx, dword my)
114  {
115  DMatrix<T> res(mat.sizeX()*mx, mat.sizeY()*my);
116  for(dword y=0; y<my; y++)
117  for(dword x=0; x<mx; x++)
118  res.setRange(mat.sizeX()*x, mat.sizeY()*y, mat);
119  return res;
120  }
121 
122  template<class T>
123  DMatrix<T>& threshold(DMatrix<T>& mat, const T& th, const T& repl=T(0))
124  {
125  for(typename DMatrix<T>::iterator mi = mat.getData().begin();
126  mi != mat.getData().end(); mi++)
127  if(*mi<th) *mi = repl;
128  return mat;
129  }
130 
131  template<class T>
133  {
134  for(typename DMatrix<T>::iterator mi = mat.getData().begin();
135  mi != mat.getData().end(); mi++)
136  if(*mi<T(0)) *mi = -*mi;
137  return mat;
138  }
139 
140 }; // namespace dmutil
141 
142 #endif
DMatrix< T > makeLower(dword sxy, bool filldiag=true, const T &val=1)
Definition: DMatrixUtil.h:26
DMatrix< T > makeRotMat2D(const float &angle)
Definition: DMatrixUtil.h:31
DMatrix< T > makeDiag(const DMatrix< T > &diag)
Definition: DMatrixUtil.h:6
DMatrix< T > & threshold(DMatrix< T > &mat, const T &th, const T &repl=T(0))
Definition: DMatrixUtil.h:123
DMatrix< T > makeIdentity(dword sxy, const T &diag=1)
Definition: DMatrixUtil.h:16
DMatrix< T > var(const DMatrix< T > &mat)
Definition: DMatrixUtil.h:97
DMatrix< T > & sqr(DMatrix< T > &mat)
Definition: DMatrixUtil.h:72
DMatrix< T > makeUpper(dword sxy, bool filldiag=true, const T &val=1)
Definition: DMatrixUtil.h:21
DMatrix< T > & abs(DMatrix< T > &mat)
Definition: DMatrixUtil.h:132
dword sizeX() const
Definition: DMatrix.h:42
DMatrix< T > sum(const DMatrix< T > &mat)
Definition: DMatrixUtil.h:59
DMatrix< T > vertCat(const DMatrix< T > &um, const DMatrix< T > &lm)
Definition: DMatrixUtil.h:49
unsigned long dword
Definition: simpletypes.h:6
std::vector< T >::const_iterator const_iterator
Definition: DMatrix.h:15
dword size() const
Definition: DMatrix.h:44
DMatrix< T > avg(const DMatrix< T > &mat)
Definition: DMatrixUtil.h:90
MT & setRange(dword ox, dword oy, const MT &mat)
Definition: DMatrix.h:185
std::vector< T >::iterator iterator
Definition: DMatrix.h:16
DMatrix< T > stdev(const DMatrix< T > &mat)
Definition: DMatrixUtil.h:106
dword sizeY() const
Definition: DMatrix.h:43
T & at(dword x, dword y)
Definition: DMatrix.h:46
DMatrix< T > expand(const DMatrix< T > &mat, dword mx, dword my)
Definition: DMatrixUtil.h:113
DMatrix< T > horizCat(const DMatrix< T > &lm, const DMatrix< T > &rm)
Definition: DMatrixUtil.h:39
std::vector< T > & getData()
Definition: DMatrix.h:48
DMatrix< T > & sqrt(DMatrix< T > &mat)
Definition: DMatrixUtil.h:81