Move the sources to trunk
[opencv] / filters / Tracker3dFilter / trackers / BlobTracker / BlobTrkObject.h
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) 2002, 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 //   * Redistributions of source code must retain the above copyright notice,
20 //     this list of conditions and the following disclaimer.
21 //
22 //   * Redistributions 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
43 // ////////////////////////////////////////////////////////////////////////////
44 // BlobTrkObject.h
45 //
46 // This file contains the class for Blob Tracker Objects 
47 //
48 // ////////////////////////////////////////////////////////////////////////////
49
50 #ifndef BLOBTRKOBJECT_H
51 #define BLOBTRKOBJECT_H
52
53 //--------------------
54 // Confidence
55 //--------------------
56
57 // What percentage of algorithm state and location confidences is based on hysteresis (HISTORY) 
58 // what percentage on the current frame information (PIXEL)
59 const double LOCATION_HISTORY_PERC = 0.50;
60 const double LOCATION_PIXEL_PERC = 0.50;
61
62 // Determines how much influence past states or locations have 
63 // over confidence of current algorithm state and location
64 // (example: if 2, that means that for frame A, 
65 // the state of frame A-1 has twice the influence of frame A-2 in algorithm state confidence
66 const double DECAY = 2.0;
67
68 // Distance from previous location that is without confidence penalty.
69 // Measured in pixels.
70 const double DISTANCE_FREE = 20.0;
71
72 // Used to determine Location Pixel Confidence, as in the equation:
73 // (total # of non-background pixels in centroid window) 
74 // / (total # non-background pixels in frame + LOCATION_CONFIDENCE_WEIGHT)
75 const unsigned long LOCATION_CONFIDENCE_WEIGHT = 1;
76
77 // What numbers are considered 100% confidence for location confidence
78 const double LOCATION_100_PERCENT = 100.0;
79
80 // How many frames of historical data should be saved to determine confidence
81 const unsigned long HISTORY = 2;
82 //--------------------
83
84
85 // Object Definition
86 class BlobTrackerObject
87 {
88     int m_id;
89     CvPoint m_Center;
90     CvRect m_Rectangle;
91     unsigned long m_Size;
92
93     static CvPoint RectCenter(const CvRect &rect)
94     {
95         CvPoint p = { rect.x + rect.width/2, rect.y + rect.height/2 };
96         return p;
97     };
98
99 public:
100     BlobTrackerObject(const CvRect &rect, unsigned long size)
101         : m_id(-1),
102           m_Rectangle(rect),
103           m_Size(size),
104           m_Center(RectCenter(rect))
105     {
106     };
107
108     void SetId(int id) { m_id = id; };
109
110     // Get Functions
111     int GetId() const { return m_id; };
112     CvPoint GetCenter() const { return m_Center; };
113     CvRect GetRect() const { return m_Rectangle; };
114     unsigned long GetSize() const { return m_Size; };
115 };
116
117 class BlobTrackerObjectList : public std::vector<BlobTrackerObject>
118 {
119 };
120
121 #endif // BLOBTRKOBJECT_H