/* * NICE-Core - efficient algebra and computer vision methods * - libicelink - An icelink/template for new NICE libraries * See file License for license information. */ /*****************************************************************************/ /** * @file convertice.h * Conversion to/from ICE vectors (and maybe some day also matrices). * @note * This file requires the ICE library. * However, that library is NOT defined as a dependency in the * limun image library. If you use this file, you have to use ICE, too. * This shouldn't be a problem, as this file is only useful if you are using * ICE already. */ #ifndef _CONVERTICE_BASICVECTOR_H #define _CONVERTICE_BASICVECTOR_H #include // #include // #include // ICE #include namespace NICE { /** * Convert a \c basicvector::VectorT into an \c ice::VectorT. * This also works for \c basicvector::VectorT to \c ice::Vector. * @param v original vector * @result ICE vector */ template inline ice::VectorT makeIceVectorT(const NICE::VectorT& v) { ice::VectorT result(v.size()); for (unsigned int i = 0; i < v.size(); i++) { result[i] = v[i]; } return result; } /** * Convert a \c basicvector::MatrixT into an \c ice::Matrix (double values). * @param m original matrix * @result ICE Matrix */ template inline ice::Matrix makeICEMatrix(const NICE::MatrixT& m) { ice::Matrix result(m.rows(), m.cols()); for(unsigned int j= 0; j < m.rows(); ++j) { for(unsigned int i= 0; i < m.cols(); ++i) { result[j][i]= (double)m(j,i); } } return result; } /** * Convert a \c ice::IMatrix (integer values) into an \c basicvector::MatrixT. * @param m ICE Matrix * @result Matrix */ template inline NICE::MatrixT makeIntegerMatrix ( const ice::IMatrix& m ){ NICE::MatrixT result(m.rows(),m.cols()); for(int j= 0; j < m.rows(); ++j) { for(int i= 0; i < m.cols(); ++i) { result(j,i)= m[j][i]; } } return result; } /** * Convert a \c ice::Matrix (double values) into an \c basicvector::MatrixT. * @param m ICE Matrix * @result Matrix */ inline NICE::MatrixT makeDoubleMatrix(const ice::Matrix& m){ NICE::MatrixT result(m.rows(),m.cols()); for(int j= 0; j < m.rows(); ++j) { for(int i= 0; i < m.cols(); ++i) { result(j,i)= m[j][i]; } } return result; } /** * Convert a \c ice::Matrix (double values) into an \c basicvector::MatrixT. * @param m ICE Matrix * @result FloatMatrix */ inline NICE::MatrixT makeFloatMatrix(const ice::Matrix& m){ NICE::MatrixT result(m.rows(),m.cols()); for(int j= 0; j < m.rows(); ++j) { for(int i= 0; i < m.cols(); ++i) { result(j,i)= (float)m[j][i]; } } return result; } /** * Convert a \c basicvector::VectorT into an \c ice::VectorT. * This also works for \c basicvector::VectorT to \c ice::Vector. * @param v original vector * @result ICE vector as a new object (ownership given away!) */ template inline ice::VectorT* createIceVectorT(const NICE::VectorT& v) { // auto_ptr for exception safety std::auto_ptr > result(new ice::VectorT(v.size())); for (unsigned int i = 0; i < v.size(); i++) { (*result)[i] = v[i]; } return result.release(); } /** * Convert an \c ice::VectorT into a \c basicvector::VectorT. * This also works for \c ice::Vector to \c basicvector::VectorT. * @param v original vector * @result LImUn vector */ template inline NICE::VectorT makeEVector(const ice::VectorT& v) { NICE::VectorT result(v.Size()); for (int i = 0; i < v.Size(); i++) { result[i] = v[i]; } return result; } /** * Convert an \c ice::VectorT into a \c basicvector::VectorT. * This also works for \c ice::Vector to \c basicvector::VectorT. * @param v original vector * @result LImUn vector as a new object (ownership given away!) */ template inline NICE::VectorT* createEVector(const ice::VectorT& v) { // auto_ptr for exception safety std::auto_ptr > result(new NICE::VectorT(v.Size())); for (int i = 0; i < v.Size(); i++) { (*result)[i] = v[i]; } return result.release(); } }; // namespace #endif