convertice.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /*
  2. * NICE-Core - efficient algebra and computer vision methods
  3. * - libicelink - An icelink/template for new NICE libraries
  4. * See file License for license information.
  5. */
  6. /*****************************************************************************/
  7. /**
  8. * @file convertice.h
  9. * Conversion to/from ICE vectors (and maybe some day also matrices).
  10. * @note
  11. * This file requires the ICE library.
  12. * However, that library is NOT defined as a dependency in the
  13. * limun image library. If you use this file, you have to use ICE, too.
  14. * This shouldn't be a problem, as this file is only useful if you are using
  15. * ICE already.
  16. */
  17. #ifndef _CONVERTICE_BASICVECTOR_H
  18. #define _CONVERTICE_BASICVECTOR_H
  19. #include <core/vector/VectorT.h>
  20. // #include <core/vector/MatrixT.h>
  21. // #include <core/vector/RowMatrixT.h>
  22. // ICE
  23. #include <image_nonvis.h>
  24. namespace NICE {
  25. /**
  26. * Convert a \c basicvector::VectorT<T> into an \c ice::VectorT<T>.
  27. * This also works for \c basicvector::VectorT<double> to \c ice::Vector.
  28. * @param v original vector
  29. * @result ICE vector
  30. */
  31. template<class T> inline
  32. ice::VectorT<T> makeIceVectorT(const NICE::VectorT<T>& v) {
  33. ice::VectorT<T> result(v.size());
  34. for (unsigned int i = 0; i < v.size(); i++) {
  35. result[i] = v[i];
  36. }
  37. return result;
  38. }
  39. /**
  40. * Convert a \c basicvector::MatrixT<T> into an \c ice::Matrix (double values).
  41. * @param m original matrix
  42. * @result ICE Matrix
  43. */
  44. template<class T> inline
  45. ice::Matrix makeICEMatrix(const NICE::MatrixT<T>& m) {
  46. ice::Matrix result(m.rows(), m.cols());
  47. for(unsigned int j= 0; j < m.rows(); ++j)
  48. {
  49. for(unsigned int i= 0; i < m.cols(); ++i)
  50. {
  51. result[j][i]= (double)m(j,i);
  52. }
  53. }
  54. return result;
  55. }
  56. /**
  57. * Convert a \c ice::IMatrix (integer values) into an \c basicvector::MatrixT<int>.
  58. * @param m ICE Matrix
  59. * @result Matrix
  60. */
  61. template<class T> inline
  62. NICE::MatrixT<int> makeIntegerMatrix ( const ice::IMatrix& m ){
  63. NICE::MatrixT<int> result(m.rows(),m.cols());
  64. for(int j= 0; j < m.rows(); ++j)
  65. {
  66. for(int i= 0; i < m.cols(); ++i)
  67. {
  68. result(j,i)= m[j][i];
  69. }
  70. }
  71. return result;
  72. }
  73. /**
  74. * Convert a \c ice::Matrix (double values) into an \c basicvector::MatrixT<T>.
  75. * @param m ICE Matrix
  76. * @result Matrix
  77. */
  78. inline NICE::MatrixT<double> makeDoubleMatrix(const ice::Matrix& m){
  79. NICE::MatrixT<double> result(m.rows(),m.cols());
  80. for(int j= 0; j < m.rows(); ++j)
  81. {
  82. for(int i= 0; i < m.cols(); ++i)
  83. {
  84. result(j,i)= m[j][i];
  85. }
  86. }
  87. return result;
  88. }
  89. /**
  90. * Convert a \c ice::Matrix (double values) into an \c basicvector::MatrixT<T>.
  91. * @param m ICE Matrix
  92. * @result FloatMatrix
  93. */
  94. inline NICE::MatrixT<float> makeFloatMatrix(const ice::Matrix& m){
  95. NICE::MatrixT<float> result(m.rows(),m.cols());
  96. for(int j= 0; j < m.rows(); ++j)
  97. {
  98. for(int i= 0; i < m.cols(); ++i)
  99. {
  100. result(j,i)= (float)m[j][i];
  101. }
  102. }
  103. return result;
  104. }
  105. /**
  106. * Convert a \c basicvector::VectorT<T> into an \c ice::VectorT<T>.
  107. * This also works for \c basicvector::VectorT<double> to \c ice::Vector.
  108. * @param v original vector
  109. * @result ICE vector as a new object (ownership given away!)
  110. */
  111. template<class T> inline
  112. ice::VectorT<T>* createIceVectorT(const NICE::VectorT<T>& v) {
  113. // auto_ptr for exception safety
  114. std::auto_ptr<ice::VectorT<T> > result(new ice::VectorT<T>(v.size()));
  115. for (unsigned int i = 0; i < v.size(); i++) {
  116. (*result)[i] = v[i];
  117. }
  118. return result.release();
  119. }
  120. /**
  121. * Convert an \c ice::VectorT<T> into a \c basicvector::VectorT<T>.
  122. * This also works for \c ice::Vector to \c basicvector::VectorT<double>.
  123. * @param v original vector
  124. * @result LImUn vector
  125. */
  126. template<class T> inline
  127. NICE::VectorT<T> makeEVector(const ice::VectorT<T>& v) {
  128. NICE::VectorT<T> result(v.Size());
  129. for (int i = 0; i < v.Size(); i++) {
  130. result[i] = v[i];
  131. }
  132. return result;
  133. }
  134. /**
  135. * Convert an \c ice::VectorT<T> into a \c basicvector::VectorT<T>.
  136. * This also works for \c ice::Vector to \c basicvector::VectorT<double>.
  137. * @param v original vector
  138. * @result LImUn vector as a new object (ownership given away!)
  139. */
  140. template<class T> inline
  141. NICE::VectorT<T>* createEVector(const ice::VectorT<T>& v) {
  142. // auto_ptr for exception safety
  143. std::auto_ptr<NICE::VectorT<T> >
  144. result(new NICE::VectorT<T>(v.Size()));
  145. for (int i = 0; i < v.Size(); i++) {
  146. (*result)[i] = v[i];
  147. }
  148. return result.release();
  149. }
  150. }; // namespace
  151. #endif