1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 // 5 // By downloading, copying, installing or using the software you agree to this license. 6 // If you do not agree to this license, do not download, install, 7 // copy or use the software. 8 // 9 // 10 // License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2013, OpenCV Foundation, all rights reserved. 14 // Third party copyrights are property of their respective owners. 15 // 16 // Redistribution and use in source and binary forms, with or without modification, 17 // are permitted provided that the following conditions are met: 18 // 19 // * Redistribution's of source code must retain the above copyright notice, 20 // this list of conditions and the following disclaimer. 21 // 22 // * Redistribution's in binary form must reproduce the above copyright notice, 23 // this list of conditions and the following disclaimer in the documentation 24 // and/or other materials provided with the distribution. 25 // 26 // * The name of the copyright holders may not be used to endorse or promote products 27 // derived from this software without specific prior written permission. 28 // 29 // This software is provided by the copyright holders and contributors "as is" and 30 // any express or implied warranties, including, but not limited to, the implied 31 // warranties of merchantability and fitness for a particular purpose are disclaimed. 32 // In no event shall the Intel Corporation or contributors be liable for any direct, 33 // indirect, incidental, special, exemplary, or consequential damages 34 // (including, but not limited to, procurement of substitute goods or services; 35 // loss of use, data, or profits; or business interruption) however caused 36 // and on any theory of liability, whether in contract, strict liability, 37 // or tort (including negligence or otherwise) arising in any way out of 38 // the use of this software, even if advised of the possibility of such damage. 39 // 40 //M*/ 41 42 #ifndef __OPENCV_PRECOMP_H__ 43 #define __OPENCV_PRECOMP_H__ 44 45 #include "opencv2/core.hpp" 46 #include "opencv2/core/ocl.hpp" 47 #include "opencv2/core/hal/hal.hpp" 48 49 #include "opencv2/video/tracking.hpp" 50 51 #include "opencv2/tracking.hpp" 52 53 54 #include "opencv2/tracking/tracking_internals.hpp" 55 56 namespace cv { inline namespace tracking { 57 namespace impl { } 58 using namespace impl; 59 using namespace cv::detail::tracking; 60 }} // namespace 61 62 63 namespace cv { 64 namespace detail { 65 inline namespace tracking { 66 67 extern const float ColorNames[][10]; 68 69 /* Cholesky decomposition 70 The function performs Cholesky decomposition <https://en.wikipedia.org/wiki/Cholesky_decomposition>. 71 A - the Hermitian, positive-definite matrix, 72 astep - size of row in A, 73 asize - number of cols and rows in A, 74 L - the lower triangular matrix, A = L*Lt. 75 */ 76 77 template<typename _Tp> bool 78 inline callHalCholesky( _Tp* L, size_t lstep, int lsize ); 79 80 template<> bool callHalCholesky(float * L,size_t lstep,int lsize)81 inline callHalCholesky<float>( float* L, size_t lstep, int lsize ) 82 { 83 return hal::Cholesky32f(L, lstep, lsize, NULL, 0, 0); 84 } 85 86 template<> bool callHalCholesky(double * L,size_t lstep,int lsize)87 inline callHalCholesky<double>( double* L, size_t lstep, int lsize) 88 { 89 return hal::Cholesky64f(L, lstep, lsize, NULL, 0, 0); 90 } 91 92 template<typename _Tp> bool choleskyDecomposition(const _Tp * A,size_t astep,int asize,_Tp * L,size_t lstep)93 inline choleskyDecomposition( const _Tp* A, size_t astep, int asize, _Tp* L, size_t lstep ) 94 { 95 bool success = false; 96 97 astep /= sizeof(_Tp); 98 lstep /= sizeof(_Tp); 99 100 for(int i = 0; i < asize; i++) 101 for(int j = 0; j <= i; j++) 102 L[i*lstep + j] = A[i*astep + j]; 103 104 success = callHalCholesky(L, lstep*sizeof(_Tp), asize); 105 106 if(success) 107 { 108 for(int i = 0; i < asize; i++ ) 109 for(int j = i + 1; j < asize; j++ ) 110 L[i*lstep + j] = 0.0; 111 } 112 113 return success; 114 } 115 116 }}} // namespace 117 118 #endif 119