16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M///////////////////////////////////////////////////////////////////////////////////////
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  By downloading, copying, installing or using the software you agree to this license.
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  If you do not agree to this license, do not download, install,
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  copy or use the software.
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//                        Intel License Agreement
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//                For Open Source Computer Vision Library
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved.
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners.
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification,
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met:
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's of source code must retain the above copyright notice,
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer.
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's in binary form must reproduce the above copyright notice,
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer in the documentation
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     and/or other materials provided with the distribution.
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * The name of Intel Corporation may not be used to endorse or promote products
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     derived from this software without specific prior written permission.
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed.
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct,
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services;
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability,
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage.
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef __CVAUX_HPP__
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define __CVAUX_HPP__
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                      Image class                                       *
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvCamShiftTracker
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic:
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvCamShiftTracker();
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual ~CvCamShiftTracker();
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /**** Characteristics of the object that are calculated by track_object method *****/
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   get_orientation() const // orientation of the object in degrees
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_box.angle; }
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   get_length() const // the larger linear size of the object
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_box.size.height; }
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   get_width() const // the smaller linear size of the object
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_box.size.width; }
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f get_center() const // center of the object
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_box.center; }
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRect get_window() const // bounding rectangle for the object
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_comp.rect; }
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /*********************** Tracking parameters ************************/
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     get_threshold() const // thresholding value that applied to back project
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_threshold; }
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     get_hist_dims( int* dims = 0 ) const // returns number of histogram dimensions and sets
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_hist ? cvGetDims( m_hist->bins, dims ) : 0; }
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     get_min_ch_val( int channel ) const // get the minimum allowed value of the specified channel
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_min_ch_val[channel]; }
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     get_max_ch_val( int channel ) const // get the maximum allowed value of the specified channel
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_max_ch_val[channel]; }
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // set initial object rectangle (must be called before initial calculation of the histogram)
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    set_window( CvRect window)
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { m_comp.rect = window; return true; }
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    set_threshold( int threshold ) // threshold applied to the histogram bins
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { m_threshold = threshold; return true; }
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    set_hist_bin_range( int dim, int min_val, int max_val );
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    set_hist_dims( int c_dims, int* dims );// set the histogram parameters
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    set_min_ch_val( int channel, int val ) // set the minimum allowed value of the specified channel
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { m_min_ch_val[channel] = val; return true; }
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    set_max_ch_val( int channel, int val ) // set the maximum allowed value of the specified channel
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { m_max_ch_val[channel] = val; return true; }
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /************************ The processing methods *********************************/
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // update object position
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool  track_object( const IplImage* cur_frame );
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // update object histogram
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool  update_histogram( const IplImage* cur_frame );
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // reset histogram
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual void  reset_histogram();
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /************************ Retrieving internal data *******************************/
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // get back project image
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual IplImage* get_back_project()
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_back_project; }
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float query( int* bin ) const
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    { return m_hist ? (float)cvGetRealND(m_hist->bins, bin) : 0.f; }
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected:
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // internal method for color conversion: fills m_color_planes group
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual void color_transform( const IplImage* img );
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvHistogram* m_hist;
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBox2D    m_box;
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvConnectedComp m_comp;
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float      m_hist_ranges_data[CV_MAX_DIM][2];
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float*     m_hist_ranges[CV_MAX_DIM];
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int        m_min_ch_val[CV_MAX_DIM];
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int        m_max_ch_val[CV_MAX_DIM];
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int        m_threshold;
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*  m_color_planes[CV_MAX_DIM];
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*  m_back_project;
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*  m_temp;
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*  m_mask;
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /* __cplusplus */
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /* __CVAUX_HPP__ */
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file. */
145