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