Update to 2.0.0 tree from current Fremantle build
[opencv] / src / cvaux / vs / blobtrackanalysisior.cpp
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 //                        Intel License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000, Intel Corporation, 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 Intel Corporation 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 #include "_cvaux.h"
43
44 /*======================= FILTER LIST SHELL =====================*/
45 #define MAX_ANS 16
46 #define MAX_DESC 1024
47 class CvBlobTrackAnalysisIOR : public CvBlobTrackAnalysis
48 {
49 protected:
50     struct  DefAn
51     {
52         const char*                   pName;
53         CvBlobTrackAnalysis*    pAn;
54     } m_Ans[MAX_ANS];
55     int m_AnNum;
56     char m_Desc[MAX_DESC];
57
58 public:
59     CvBlobTrackAnalysisIOR()
60     {
61         m_AnNum = 0;
62         SetModuleName("IOR");
63     }
64
65     ~CvBlobTrackAnalysisIOR()
66     {
67     };
68
69     virtual void    AddBlob(CvBlob* pBlob)
70     {
71         int i;
72         for(i=0; i<m_AnNum; ++i)
73         {
74             m_Ans[i].pAn->AddBlob(pBlob);
75         } /* Next analyzer. */
76     };
77
78     virtual void    Process(IplImage* pImg, IplImage* pFG)
79     {
80         int i;
81 #ifdef _OPENMP
82 #pragma omp parallel for
83 #endif
84         for(i=0; i<m_AnNum; ++i)
85         {
86             m_Ans[i].pAn->Process(pImg, pFG);
87         } /* Next analyzer. */
88     };
89
90     float GetState(int BlobID)
91     {
92         int state = 0;
93         int i;
94         for(i=0; i<m_AnNum; ++i)
95         {
96             state |= (m_Ans[i].pAn->GetState(BlobID) > 0.5);
97         } /* Next analyzer. */
98
99         return (float)state;
100     };
101
102     virtual const char*   GetStateDesc(int BlobID)
103     {
104         int     rest = MAX_DESC-1;
105         int     i;
106         m_Desc[0] = 0;
107
108         for(i=0; i<m_AnNum; ++i)
109         {
110             const char* str = m_Ans[i].pAn->GetStateDesc(BlobID);
111
112             if(str && strlen(m_Ans[i].pName) + strlen(str)+4 < (size_t)rest)
113             {
114                 strcat(m_Desc,m_Ans[i].pName);
115                 strcat(m_Desc,": ");
116                 strcat(m_Desc,str);
117                 strcat(m_Desc,"\n");
118                 rest = MAX_DESC - (int)strlen(m_Desc) - 1;
119             }
120         } /* Next analyzer. */
121
122         if(m_Desc[0]!=0)return m_Desc;
123
124         return NULL;
125     };
126
127     virtual void SetFileName(char* /*DataBaseName*/)
128     {
129     };
130
131     int AddAnalyzer(CvBlobTrackAnalysis* pA, const char* pName)
132     {
133         if(m_AnNum<MAX_ANS)
134         {
135             //int i;
136             m_Ans[m_AnNum].pName = pName;
137             m_Ans[m_AnNum].pAn = pA;
138             TransferParamsFromChild(m_Ans[m_AnNum].pAn, pName);
139             m_AnNum++;
140             return 1;
141         }
142         else
143         {
144             printf("Can not add track analyzer %s! (not more that %d analyzers)\n",pName,MAX_ANS);
145             return 0;
146         }
147     }
148     void    Release()
149     {
150         int i;
151         for(i=0; i<m_AnNum; ++i)
152         {
153             m_Ans[i].pAn->Release();
154         } /* Next analyzer. */
155
156         delete this;
157     };
158 }; /* CvBlobTrackAnalysisIOR. */
159
160 CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR()
161 {
162     CvBlobTrackAnalysisIOR* pIOR = new CvBlobTrackAnalysisIOR();
163     CvBlobTrackAnalysis* pA = NULL;
164
165     pA = cvCreateModuleBlobTrackAnalysisHistPVS();
166     pIOR->AddAnalyzer(pA, "HIST");
167
168     //pA = (CvBlobTrackAnalysis*)cvCreateModuleBlobTrackAnalysisHeightScale();
169     //pIOR->AddAnalyzer(pA, "SCALE");
170
171     return (CvBlobTrackAnalysis*)pIOR;
172 }/* cvCreateCvBlobTrackAnalysisIOR */
173 /* ======================== Analyser modules ============================= */
174