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__H__
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define __CVAUX__H__
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cv.h"
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern "C" {
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvSegmentImage( const CvArr* srcarr, CvArr* dstarr,
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    double canny_threshold,
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    double ffill_threshold,
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMemStorage* storage );
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                  Eigen objects                                         *
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL * CvCallback)(int index, void* buffer, void* user_data);
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef union
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvCallback callback;
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    void* data;
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvInput;
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_EIGOBJ_NO_CALLBACK     0
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_EIGOBJ_INPUT_CALLBACK  1
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_EIGOBJ_OUTPUT_CALLBACK 2
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_EIGOBJ_BOTH_CALLBACK   3
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates covariation matrix of a set of arrays */
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvCalcCovarMatrixEx( int nObjects, void* input, int ioFlags,
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  int ioBufSize, uchar* buffer, void* userData,
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  IplImage* avg, float* covarMatrix );
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates eigen values and vectors of covariation matrix of a set of
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   arrays */
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvCalcEigenObjects( int nObjects, void* input, void* output,
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 int ioFlags, int ioBufSize, void* userData,
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 CvTermCriteria* calcLimit, IplImage* avg,
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 float* eigVals );
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates dot product (obj - avg) * eigObj (i.e. projects image to eigen vector) */
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double)  cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Projects image to eigen space (finds all decomposion coefficients */
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput,
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 int ioFlags, void* userData, IplImage* avg,
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 float* coeffs );
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Projects original objects used to calculate eigen space basis to that space */
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvEigenProjection( void* eigInput, int nEigObjs, int ioFlags,
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                void* userData, float* coeffs, IplImage* avg,
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                IplImage* proj );
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                       1D/2D HMM                                        *
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvImgObsInfo
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int obs_x;
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int obs_y;
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int obs_size;
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* obs;//consequtive observations
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* state;/* arr of pairs superstate/state to which observation belong */
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* mix;  /* number of mixture to which observation belong */
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvImgObsInfo;/*struct for 1 image*/
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvImgObsInfo Cv1DObsInfo;
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvEHMMState
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int num_mix;        /*number of mixtures in this state*/
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* mu;          /*mean vectors corresponding to each mixture*/
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* inv_var;     /* square root of inversed variances corresp. to each mixture*/
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* log_var_val; /* sum of 0.5 (LN2PI + ln(variance[i]) ) for i=1,n */
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* weight;      /*array of mixture weights. Summ of all weights in state is 1. */
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvEHMMState;
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvEHMM
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int level; /* 0 - lowest(i.e its states are real states), ..... */
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int num_states; /* number of HMM states */
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float*  transP;/*transition probab. matrices for states */
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float** obsProb; /* if level == 0 - array of brob matrices corresponding to hmm
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        if level == 1 - martix of matrices */
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    union
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        CvEHMMState* state; /* if level == 0 points to real states array,
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               if not - points to embedded hmms */
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        struct CvEHMM* ehmm; /* pointer to an embedded model or NULL, if it is a leaf */
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    } u;
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvEHMM;
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(int)  icvCreate1DHMM( CvEHMM** this_hmm,
1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int state_number, int* num_mix, int obs_size );
1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icvRelease1DHMM( CvEHMM** phmm );
1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icvUniform1DSegm( Cv1DObsInfo* obs_info, CvEHMM* hmm );
1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icvInit1DMixSegm( Cv1DObsInfo** obs_info_array, int num_img, CvEHMM* hmm);
1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icvEstimate1DHMMStateParams( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm);
1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icvEstimate1DObsProb( CvImgObsInfo* obs_info, CvEHMM* hmm );
1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icvEstimate1DTransProb( Cv1DObsInfo** obs_info_array,
1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           int num_seq,
1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           CvEHMM* hmm );
1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(float)  icvViterbi( Cv1DObsInfo* obs_info, CvEHMM* hmm);
1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  icv1DMixSegmL2( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );*/
1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** Embedded HMMs *************************************/
1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates 2D HMM */
1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvEHMM*)  cvCreate2DHMM( int* stateNumber, int* numMix, int obsSize );
1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases HMM */
1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvRelease2DHMM( CvEHMM** hmm );
1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COUNT_OBS(roi, win, delta, numObs )                                       \
1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{                                                                                    \
1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (numObs)->width  =((roi)->width  -(win)->width  +(delta)->width)/(delta)->width;  \
1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (numObs)->height =((roi)->height -(win)->height +(delta)->height)/(delta)->height;\
1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates storage for observation vectors */
1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvImgObsInfo*)  cvCreateObsInfo( CvSize numObs, int obsSize );
1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases storage for observation vectors */
1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvReleaseObsInfo( CvImgObsInfo** obs_info );
1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* The function takes an image on input and and returns the sequnce of observations
1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   to be used with an embedded HMM; Each observation is top-left block of DCT
1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   coefficient matrix */
1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvImgToObs_DCT( const CvArr* arr, float* obs, CvSize dctSize,
1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             CvSize obsSize, CvSize delta );
1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Uniformly segments all observation vectors extracted from image */
1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvUniformImgSegm( CvImgObsInfo* obs_info, CvEHMM* ehmm );
1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does mixture segmentation of the states of embedded HMM */
1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvInitMixSegm( CvImgObsInfo** obs_info_array,
1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int num_img, CvEHMM* hmm );
2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Function calculates means, variances, weights of every Gaussian mixture
2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   of every low-level state of embedded HMM */
2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvEstimateHMMStateParams( CvImgObsInfo** obs_info_array,
2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int num_img, CvEHMM* hmm );
2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Function computes transition probability matrices of embedded HMM
2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   given observations segmentation */
2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvEstimateTransProb( CvImgObsInfo** obs_info_array,
2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  int num_img, CvEHMM* hmm );
2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Function computes probabilities of appearing observations at any state
2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (i.e. computes P(obs|state) for every pair(obs,state)) */
2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvEstimateObsProb( CvImgObsInfo* obs_info,
2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvEHMM* hmm );
2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Runs Viterbi algorithm for embedded HMM */
2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(float)  cvEViterbi( CvImgObsInfo* obs_info, CvEHMM* hmm );
2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Function clusters observation vectors from several images
2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   given observations segmentation.
2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   Euclidean distance used for clustering vectors.
2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   Centers of clusters are given means of every mixture */
2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvMixSegmL2( CvImgObsInfo** obs_info_array,
2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                          int num_img, CvEHMM* hmm );
2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*               A few functions from old stereo gesture recognition demosions            *
2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates hand mask image given several points on the hand */
2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvCreateHandMask( CvSeq* hand_points,
2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   IplImage *img_mask, CvRect *roi);
2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds hand region in range image data */
2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvFindHandRegion (CvPoint3D32f* points, int count,
2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvSeq* indexs,
2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                float* line, CvSize2D32f size, int flag,
2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvPoint3D32f* center,
2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMemStorage* storage, CvSeq **numbers);
2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds hand region in range image data (advanced version) */
2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvFindHandRegionA( CvPoint3D32f* points, int count,
2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvSeq* indexs,
2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                float* line, CvSize2D32f size, int jc,
2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvPoint3D32f* center,
2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMemStorage* storage, CvSeq **numbers);
2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                           Additional operations on Subdivisions                        *
2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// paints voronoi diagram: just demo function
2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// checks planar subdivision for correctness. It is not an absolute check,
2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// but it verifies some relations between quad-edges
2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)   icvSubdiv2DCheck( CvSubdiv2D* subdiv );
2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// returns squared distance between two 2D points with floating-point coordinates.
2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double icvSqDist2D32f( CvPoint2D32f pt1, CvPoint2D32f pt2 )
2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double dx = pt1.x - pt2.x;
2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double dy = pt1.y - pt2.y;
2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return dx*dx + dy*dy;
2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                           More operations on sequences                                 *
2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*****************************************************************************************/
2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CURRENT_INT( reader ) (*((int *)(reader).ptr))
2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PREV_INT( reader ) (*((int *)(reader).prev_elem))
2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_GRAPH_WEIGHTED_VERTEX_FIELDS() CV_GRAPH_VERTEX_FIELDS()\
2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float weight;
2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_GRAPH_WEIGHTED_EDGE_FIELDS() CV_GRAPH_EDGE_FIELDS()
2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraphWeightedVtx
2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GRAPH_WEIGHTED_VERTEX_FIELDS()
2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraphWeightedVtx;
2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraphWeightedEdge
2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GRAPH_WEIGHTED_EDGE_FIELDS()
2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraphWeightedEdge;
2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvGraphWeightType
2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_NOT_WEIGHTED,
2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_WEIGHTED_VTX,
3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_WEIGHTED_EDGE,
3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_WEIGHTED_ALL
3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvGraphWeightType;
3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*****************************************************************************************/
3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*******************************Stereo correspondence*************************************/
3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvCliqueFinder
3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvGraph* graph;
3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int**    adj_matr;
3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int N; //graph size
3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    // stacks, counters etc/
3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int k; //stack size
3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* current_comp;
3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int** All;
3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* ne;
3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* ce;
3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* fixp; //node with minimal disconnections
3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* nod;
3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* s; //for selected candidate
3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int status;
3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int best_score;
3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int weighted;
3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int weighted_edges;
3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float best_weight;
3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* edge_weights;
3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* vertex_weights;
3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* cur_weight;
3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* cand_weight;
3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvCliqueFinder;
3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CLIQUE_TIME_OFF 2
3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CLIQUE_FOUND 1
3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CLIQUE_END   0
3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(void) cvStartFindCliques( CvGraph* graph, CvCliqueFinder* finder, int reverse,
3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int weighted CV_DEFAULT(0),  int weighted_edges CV_DEFAULT(0));
3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvFindNextMaximalClique( CvCliqueFinder* finder, int* clock_rest CV_DEFAULT(0) );
3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvEndFindCliques( CvCliqueFinder* finder );
3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvBronKerbosch( CvGraph* graph );*/
3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*F///////////////////////////////////////////////////////////////////////////////////////
3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Name:    cvSubgraphWeight
3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Purpose: finds weight of subgraph in a graph
3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Context:
3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Parameters:
3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      graph - input graph.
3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      subgraph - sequence of pairwise different ints.  These are indices of vertices of subgraph.
3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight_type - describes the way we measure weight.
3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            one of the following:
3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_NOT_WEIGHTED - weight of a clique is simply its size
3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices
3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_WEIGHTED_EDGE - the same but edges
3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_WEIGHTED_ALL - the same but both edges and vertices
3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight_vtx - optional vector of floats, with size = graph->total.
3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL
3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            weights of vertices must be provided.  If weight_vtx not zero
3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            these weights considered to be here, otherwise function assumes
3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            that vertices of graph are inherited from CvGraphWeightedVtx.
3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight_edge - optional matrix of floats, of width and height = graph->total.
3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL
3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            weights of edges ought to be supplied.  If weight_edge is not zero
3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            function finds them here, otherwise function expects
3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            edges of graph to be inherited from CvGraphWeightedEdge.
3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            If this parameter is not zero structure of the graph is determined from matrix
3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            rather than from CvGraphEdge's.  In particular, elements corresponding to
3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            absent edges should be zero.
3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Returns:
3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight of subgraph.
3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Notes:
3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//F*/
3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(float) cvSubgraphWeight( CvGraph *graph, CvSeq *subgraph,
3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),
3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  CvVect32f weight_vtx CV_DEFAULT(0),
3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  CvMatr32f weight_edge CV_DEFAULT(0) );*/
3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*F///////////////////////////////////////////////////////////////////////////////////////
3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Name:    cvFindCliqueEx
3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Purpose: tries to find clique with maximum possible weight in a graph
3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Context:
3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Parameters:
3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      graph - input graph.
3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      storage - memory storage to be used by the result.
3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      is_complementary - optional flag showing whether function should seek for clique
3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            in complementary graph.
3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight_type - describes our notion about weight.
3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            one of the following:
3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_NOT_WEIGHTED - weight of a clique is simply its size
4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices
4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_WEIGHTED_EDGE - the same but edges
4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            CV_WEIGHTED_ALL - the same but both edges and vertices
4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight_vtx - optional vector of floats, with size = graph->total.
4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL
4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            weights of vertices must be provided.  If weight_vtx not zero
4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            these weights considered to be here, otherwise function assumes
4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            that vertices of graph are inherited from CvGraphWeightedVtx.
4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      weight_edge - optional matrix of floats, of width and height = graph->total.
4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL
4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            weights of edges ought to be supplied.  If weight_edge is not zero
4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            function finds them here, otherwise function expects
4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            edges of graph to be inherited from CvGraphWeightedEdge.
4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            Note that in case of CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL
4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            nonzero is_complementary implies nonzero weight_edge.
4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      start_clique - optional sequence of pairwise different ints.  They are indices of
4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            vertices that shall be present in the output clique.
4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      subgraph_of_ban - optional sequence of (maybe equal) ints.  They are indices of
4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            vertices that shall not be present in the output clique.
4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      clique_weight_ptr - optional output parameter.  Weight of found clique stored here.
4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      num_generations - optional number of generations in evolutionary part of algorithm,
4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            zero forces to return first found clique.
4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      quality - optional parameter determining degree of required quality/speed tradeoff.
4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            Must be in the range from 0 to 9.
4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            0 is fast and dirty, 9 is slow but hopefully yields good clique.
4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Returns:
4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      sequence of pairwise different ints.
4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      These are indices of vertices that form found clique.
4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Notes:
4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      in cases of CV_WEIGHTED_EDGE and CV_WEIGHTED_ALL weights should be nonnegative.
4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      start_clique has a priority over subgraph_of_ban.
4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//F*/
4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(CvSeq*) cvFindCliqueEx( CvGraph *graph, CvMemStorage *storage,
4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 int is_complementary CV_DEFAULT(0),
4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),
4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 CvVect32f weight_vtx CV_DEFAULT(0),
4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 CvMatr32f weight_edge CV_DEFAULT(0),
4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 CvSeq *start_clique CV_DEFAULT(0),
4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 CvSeq *subgraph_of_ban CV_DEFAULT(0),
4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 float *clique_weight_ptr CV_DEFAULT(0),
4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 int num_generations CV_DEFAULT(3),
4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                 int quality CV_DEFAULT(2) );*/
4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_UNDEF_SC_PARAM         12345 //default value of parameters
4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IDP_BIRCHFIELD_PARAM1  25
4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IDP_BIRCHFIELD_PARAM2  5
4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IDP_BIRCHFIELD_PARAM3  12
4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IDP_BIRCHFIELD_PARAM4  15
4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IDP_BIRCHFIELD_PARAM5  25
4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_DISPARITY_BIRCHFIELD  0
4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*F///////////////////////////////////////////////////////////////////////////
4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Name:    cvFindStereoCorrespondence
4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Purpose: find stereo correspondence on stereo-pair
4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Context:
4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Parameters:
4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      leftImage - left image of stereo-pair (format 8uC1).
4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      rightImage - right image of stereo-pair (format 8uC1).
4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   mode - mode of correspondence retrieval (now CV_DISPARITY_BIRCHFIELD only)
4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      dispImage - destination disparity image
4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      maxDisparity - maximal disparity
4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      param1, param2, param3, param4, param5 - parameters of algorithm
4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Returns:
4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//    Notes:
4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      Images must be rectified.
4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      All images must have format 8uC1.
4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//F*/
4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)
4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvFindStereoCorrespondence(
4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   const  CvArr* leftImage, const  CvArr* rightImage,
4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   int     mode,
4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   CvArr*  dispImage,
4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   int     maxDisparity,
4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   double  param1 CV_DEFAULT(CV_UNDEF_SC_PARAM),
4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   double  param2 CV_DEFAULT(CV_UNDEF_SC_PARAM),
4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   double  param3 CV_DEFAULT(CV_UNDEF_SC_PARAM),
4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   double  param4 CV_DEFAULT(CV_UNDEF_SC_PARAM),
4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   double  param5 CV_DEFAULT(CV_UNDEF_SC_PARAM) );
4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*****************************************************************************************/
4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************ Epiline functions *******************/
4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvStereoLineCoeff
4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double Xcoef;
4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double XcoefA;
4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double XcoefB;
4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double XcoefAB;
4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double Ycoef;
4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double YcoefA;
4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double YcoefB;
5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double YcoefAB;
5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double Zcoef;
5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double ZcoefA;
5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double ZcoefB;
5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double ZcoefAB;
5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}CvStereoLineCoeff;
5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvCamera
5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   imgSize[2]; /* size of the camera view, used during calibration */
5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   matrix[9]; /* intinsic camera parameters:  [ fx 0 cx; 0 fy cy; 0 0 1 ] */
5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   distortion[4]; /* distortion coefficients - two coefficients for radial distortion
5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              and another two for tangential: [ k1 k2 p1 p2 ] */
5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   rotMatr[9];
5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float   transVect[3]; /* rotation matrix and transition vector relatively
5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             to some reference point in the space. */
5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvCamera;
5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvStereoCamera
5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvCamera* camera[2]; /* two individual camera parameters */
5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float fundMatr[9]; /* fundamental matrix */
5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* New part for stereo */
5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint3D32f epipole[2];
5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f quad[2][4]; /* coordinates of destination quadrangle after
5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                epipolar geometry rectification */
5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double coeffs[2][3][3];/* coefficients for transformation */
5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f border[2][4];
5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize warpSize;
5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvStereoLineCoeff* lineCoeffs;
5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int needSwapCameras;/* flag set to 1 if need to swap cameras for good reconstruction */
5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float rotMatrix[9];
5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float transVector[3];
5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStereoCamera;
5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvContourOrientation
5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float egvals[2];
5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float egvects[4];
5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float max, min; // minimum and maximum projections
5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int imax, imin;
5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvContourOrientation;
5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAMERA_TO_WARP 1
5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_WARP_TO_CAMERA 2
5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvConvertWarpCoordinates(double coeffs[3][3],
5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvPoint2D32f* cameraPoint,
5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvPoint2D32f* warpPoint,
5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                int direction);
5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvGetSymPoint3D(  CvPoint3D64f pointCorner,
5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint3D64f point1,
5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint3D64f point2,
5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint3D64f *pointSym2);
5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetPieceLength3D(CvPoint3D64f point1,CvPoint3D64f point2,double* dist);
5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvCompute3DPoint(    double alpha,double betta,
5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvStereoLineCoeff* coeffs,
5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint3D64f* point);
5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvCreateConvertMatrVect( CvMatr64d     rotMatr1,
5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMatr64d     transVect1,
5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMatr64d     rotMatr2,
5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMatr64d     transVect2,
5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMatr64d     convRotMatr,
5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMatr64d     convTransVect);
5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvConvertPointSystem(CvPoint3D64f  M2,
5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint3D64f* M1,
5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d     rotMatr,
5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d     transVect
5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            );
5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvComputeCoeffForStereo(  CvStereoCamera* stereoCamera);
5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvGetCrossPieceVector(CvPoint2D32f p1_start,CvPoint2D32f p1_end,CvPoint2D32f v2_start,CvPoint2D32f v2_end,CvPoint2D32f *cross);
5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvGetCrossLineDirect(CvPoint2D32f p1,CvPoint2D32f p2,float a,float b,float c,CvPoint2D32f* cross);
5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(float) icvDefinePointPosition(CvPoint2D32f point1,CvPoint2D32f point2,CvPoint2D32f point);
5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvStereoCalibration( int numImages,
5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int* nums,
5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvSize imageSize,
5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D32f* imagePoints1,
5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D32f* imagePoints2,
5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint3D32f* objectPoints,
5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvStereoCamera* stereoparams
5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                           );
5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvComputeRestStereoParams(CvStereoCamera *stereoparams);
5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvComputePerspectiveMap( const double coeffs[3][3], CvArr* rectMapX, CvArr* rectMapY );
6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvComCoeffForLine(   CvPoint2D64f point1,
6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f point2,
6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f point3,
6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f point4,
6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d    camMatr1,
6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d    rotMatr1,
6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d    transVect1,
6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d    camMatr2,
6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d    rotMatr2,
6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d    transVect2,
6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvStereoLineCoeff*    coeffs,
6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int* needSwapCameras);
6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvGetDirectionForPoint(  CvPoint2D64f point,
6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvMatr64d camMatr,
6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvPoint3D64f* direct);
6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvGetCrossLines(CvPoint3D64f point11,CvPoint3D64f point12,
6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                       CvPoint3D64f point21,CvPoint3D64f point22,
6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                       CvPoint3D64f* midPoint);
6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvComputeStereoLineCoeffs(   CvPoint3D64f pointA,
6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint3D64f pointB,
6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint3D64f pointCam1,
6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    double gamma,
6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvStereoLineCoeff*    coeffs);
6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(int) icvComputeFundMatrEpipoles ( CvMatr64d camMatr1,
6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr64d     rotMatr1,
6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect64d     transVect1,
6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr64d     camMatr2,
6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr64d     rotMatr2,
6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect64d     transVect2,
6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint2D64f* epipole1,
6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint2D64f* epipole2,
6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr64d     fundMatr);*/
6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) icvGetAngleLine( CvPoint2D64f startPoint, CvSize imageSize,CvPoint2D64f *point1,CvPoint2D64f *point2);
6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetCoefForPiece(   CvPoint2D64f p_start,CvPoint2D64f p_end,
6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        double *a,double *b,double *c,
6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        int* result);
6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(void) icvGetCommonArea( CvSize imageSize,
6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvPoint2D64f epipole1,CvPoint2D64f epipole2,
6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvMatr64d fundMatr,
6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvVect64d coeff11,CvVect64d coeff12,
6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvVect64d coeff21,CvVect64d coeff22,
6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    int* result);*/
6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvComputeeInfiniteProject1(CvMatr64d    rotMatr,
6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvMatr64d    camMatr1,
6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvMatr64d    camMatr2,
6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvPoint2D32f point1,
6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvPoint2D32f *point2);
6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvComputeeInfiniteProject2(CvMatr64d    rotMatr,
6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvMatr64d    camMatr1,
6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvMatr64d    camMatr2,
6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvPoint2D32f* point1,
6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvPoint2D32f point2);
6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetCrossDirectDirect(  CvVect64d direct1,CvVect64d direct2,
6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f *cross,int* result);
6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetCrossPieceDirect(   CvPoint2D64f p_start,CvPoint2D64f p_end,
6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            double a,double b,double c,
6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f *cross,int* result);
6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetCrossPiecePiece( CvPoint2D64f p1_start,CvPoint2D64f p1_end,
6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f p2_start,CvPoint2D64f p2_end,
6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f* cross,
6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int* result);
6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetPieceLength(CvPoint2D64f point1,CvPoint2D64f point2,double* dist);
6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetCrossRectDirect(    CvSize imageSize,
6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            double a,double b,double c,
6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f *start,CvPoint2D64f *end,
6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            int* result);
6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvProjectPointToImage(   CvPoint3D64f point,
6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvMatr64d camMatr,CvMatr64d rotMatr,CvVect64d transVect,
6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f* projPoint);
6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetQuadsTransform( CvSize        imageSize,
6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvMatr64d     camMatr1,
6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvMatr64d     rotMatr1,
6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvVect64d     transVect1,
6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvMatr64d     camMatr2,
6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvMatr64d     rotMatr2,
6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvVect64d     transVect2,
6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvSize*       warpSize,
6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        double quad1[4][2],
6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        double quad2[4][2],
6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvMatr64d     fundMatr,
6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvPoint3D64f* epipole1,
6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvPoint3D64f* epipole2
6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        );
7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetQuadsTransformStruct(  CvStereoCamera* stereoCamera);
7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvComputeStereoParamsForCameras(CvStereoCamera* stereoCamera);
7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetCutPiece(   CvVect64d areaLineCoef1,CvVect64d areaLineCoef2,
7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvPoint2D64f epipole,
7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvSize imageSize,
7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvPoint2D64f* point11,CvPoint2D64f* point12,
7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvPoint2D64f* point21,CvPoint2D64f* point22,
7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    int* result);
7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetMiddleAnglePoint(   CvPoint2D64f basePoint,
7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f point1,CvPoint2D64f point2,
7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f* midPoint);
7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetNormalDirect(CvVect64d direct,CvPoint2D64f point,CvVect64d normDirect);
7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) icvGetVect(CvPoint2D64f basePoint,CvPoint2D64f point1,CvPoint2D64f point2);
7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvProjectPointToDirect(  CvPoint2D64f point,CvVect64d lineCoeff,
7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                            CvPoint2D64f* projectPoint);
7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) icvGetDistanceFromPointToDirect( CvPoint2D64f point,CvVect64d lineCoef,double*dist);
7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) icvCreateIsometricImage( IplImage* src, IplImage* dst,
7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int desired_depth, int desired_num_channels );
7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvDeInterlace( const CvArr* frame, CvArr* fieldEven, CvArr* fieldOdd );
7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(int) icvSelectBestRt(           int           numImages,
7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    int*          numPoints,
7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvSize        imageSize,
7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint2D32f* imagePoints1,
7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint2D32f* imagePoints2,
7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvPoint3D32f* objectPoints,
7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr32f     cameraMatrix1,
7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect32f     distortion1,
7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr32f     rotMatrs1,
7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect32f     transVects1,
7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr32f     cameraMatrix2,
7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect32f     distortion2,
7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr32f     rotMatrs2,
7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect32f     transVects2,
7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvMatr32f     bestRotMatr,
7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvVect32f     bestTransVect
7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    );*/
7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                   Contour Morphing                                     *
7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* finds correspondence between two contours */
7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeq* cvCalcContoursCorrespondence( const CvSeq* contour1,
7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     const CvSeq* contour2,
7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                     CvMemStorage* storage);
7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* morphs contours using the pre-calculated correspondence:
7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   alpha=0 ~ contour1, alpha=1 ~ contour2 */
7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeq* cvMorphContours( const CvSeq* contour1, const CvSeq* contour2,
7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvSeq* corr, double alpha,
7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                        CvMemStorage* storage );
7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                    Texture Descriptors                                 *
7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCM_OPTIMIZATION_NONE                   -2
7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCM_OPTIMIZATION_LUT                    -1
7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCM_OPTIMIZATION_HISTOGRAM              0
7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST    10
7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_OPTIMIZATION_ALLOWTRIPLENEST    11
7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_OPTIMIZATION_HISTOGRAM          4
7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_ENTROPY                         0
7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_ENERGY                          1
7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_HOMOGENITY                      2
7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_CONTRAST                        3
7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_CLUSTERTENDENCY                 4
7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_CLUSTERSHADE                    5
7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_CORRELATION                     6
7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_CORRELATIONINFO1                7
7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_CORRELATIONINFO2                8
7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCMDESC_MAXIMUMPROBABILITY              9
7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCM_ALL                                 0
7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCM_GLCM                                1
7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GLCM_DESC                                2
7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGLCM CvGLCM;
7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGLCM*) cvCreateGLCM( const IplImage* srcImage,
7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                int stepMagnitude,
7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                const int* stepDirections CV_DEFAULT(0),
7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                int numStepDirections CV_DEFAULT(0),
7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                int optimizationType CV_DEFAULT(CV_GLCM_OPTIMIZATION_NONE));
8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseGLCM( CvGLCM** GLCM, int flag CV_DEFAULT(CV_GLCM_ALL));
8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCreateGLCMDescriptors( CvGLCM* destGLCM,
8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                        int descriptorOptimizationType
8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                        CV_DEFAULT(CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST));
8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvGetGLCMDescriptor( CvGLCM* GLCM, int step, int descriptor );
8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGetGLCMDescriptorStatistics( CvGLCM* GLCM, int descriptor,
8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                              double* average, double* standardDeviation );
8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) cvCreateGLCMImage( CvGLCM* GLCM, int step );
8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                  Face eyes&mouth tracking                              *
8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFaceTracker CvFaceTracker;
8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NUM_FACE_ELEMENTS    3
8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennenum CV_FACE_ELEMENTS
8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_FACE_MOUTH = 0,
8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_FACE_LEFT_EYE = 1,
8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_FACE_RIGHT_EYE = 2
8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};
8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvFaceTracker*) cvInitFaceTracker(CvFaceTracker* pFaceTracking, const IplImage* imgGray,
8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                                CvRect* pRects, int nRects);
8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvTrackFace( CvFaceTracker* pFaceTracker, IplImage* imgGray,
8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              CvRect* pRects, int nRects,
8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              CvPoint* ptRotate, double* dbAngleRotate);
8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseFaceTracker(CvFaceTracker** ppFaceTracker);
8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFace
8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRect MouthRect;
8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRect LeftEyeRect;
8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRect RightEyeRect;
8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvFaceData;
8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeq * cvFindFace(IplImage * Image,CvMemStorage* storage);
8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeq * cvPostBoostingFindFace(IplImage * Image,CvMemStorage* storage);
8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                         3D Tracker                                     *
8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned char CvBool;
8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct
8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int id;
8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f p; // pgruebele: So we do not loose precision, this needs to be float
8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} Cv3dTracker2dTrackedObject;
8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE Cv3dTracker2dTrackedObject cv3dTracker2dTrackedObject(int id, CvPoint2D32f p)
8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    Cv3dTracker2dTrackedObject r;
8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    r.id = id;
8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    r.p = p;
8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return r;
8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct
8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int id;
8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint3D32f p;             // location of the tracked object
8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} Cv3dTrackerTrackedObject;
8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE Cv3dTrackerTrackedObject cv3dTrackerTrackedObject(int id, CvPoint3D32f p)
8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    Cv3dTrackerTrackedObject r;
8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    r.id = id;
8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    r.p = p;
8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return r;
8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct
8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBool valid;
8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float mat[4][4];              /* maps camera coordinates to world coordinates */
8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f principal_point; /* copied from intrinsics so this structure */
8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                  /* has all the info we need */
8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} Cv3dTrackerCameraInfo;
8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct
8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f principal_point;
8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float focal_length[2];
8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float distortion[4];
8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} Cv3dTrackerCameraIntrinsics;
8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvBool) cv3dTrackerCalibrateCameras(int num_cameras,
8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                     const Cv3dTrackerCameraIntrinsics camera_intrinsics[], /* size is num_cameras */
8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                     CvSize etalon_size,
9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                     float square_size,
9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                     IplImage *samples[],                                   /* size is num_cameras */
9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                     Cv3dTrackerCameraInfo camera_info[]);                  /* size is num_cameras */
9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  cv3dTrackerLocateObjects(int num_cameras, int num_objects,
9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   const Cv3dTrackerCameraInfo camera_info[],        /* size is num_cameras */
9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   const Cv3dTracker2dTrackedObject tracking_info[], /* size is num_objects*num_cameras */
9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   Cv3dTrackerTrackedObject tracked_objects[]);      /* size is num_objects */
9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************
9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tracking_info is a rectangular array; one row per camera, num_objects elements per row.
9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The id field of any unused slots must be -1. Ids need not be ordered or consecutive. On
9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn completion, the return value is the number of objects located; i.e., the number of objects
9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn visible by more than one camera. The id field of any unused slots in tracked objects is
9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn set to -1.
9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn****************************************************************************************/
9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                           Skeletons and Linear-Contour Models                          *
9196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
9206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvLeeParameters
9226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_INT = 0,
9246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_FLOAT = 1,
9256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_DOUBLE = 2,
9266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_AUTO = -1,
9276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_ERODE = 0,
9286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_ZOOM = 1,
9296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_LEE_NON = 2
9306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvLeeParameters;
9316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NEXT_VORONOISITE2D( SITE ) ((SITE)->edge[0]->site[((SITE)->edge[0]->site[0] == (SITE))])
9336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PREV_VORONOISITE2D( SITE ) ((SITE)->edge[1]->site[((SITE)->edge[1]->site[0] == (SITE))])
9346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FIRST_VORONOIEDGE2D( SITE ) ((SITE)->edge[0])
9356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LAST_VORONOIEDGE2D( SITE ) ((SITE)->edge[1])
9366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NEXT_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[(EDGE)->site[0] != (SITE)])
9376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PREV_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[2 + ((EDGE)->site[0] != (SITE))])
9386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_VORONOIEDGE2D_BEGINNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] != (SITE))])
9396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_VORONOIEDGE2D_ENDNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] == (SITE))])
9406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TWIN_VORONOISITE2D( SITE, EDGE ) ( (EDGE)->site[((EDGE)->site[0] == (SITE))])
9416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_VORONOISITE2D_FIELDS()    \
9436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvVoronoiNode2D *node[2]; \
9446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvVoronoiEdge2D *edge[2];
9456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvVoronoiSite2D
9476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_VORONOISITE2D_FIELDS()
9496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvVoronoiSite2D *next[2];
9506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvVoronoiSite2D;
9516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_VORONOIEDGE2D_FIELDS()    \
9536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvVoronoiNode2D *node[2]; \
9546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvVoronoiSite2D *site[2]; \
9556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvVoronoiEdge2D *next[4];
9566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvVoronoiEdge2D
9586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_VORONOIEDGE2D_FIELDS()
9606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvVoronoiEdge2D;
9616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_VORONOINODE2D_FIELDS()       \
9636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_SET_ELEM_FIELDS(CvVoronoiNode2D) \
9646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f pt;                    \
9656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float radius;
9666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvVoronoiNode2D
9686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_VORONOINODE2D_FIELDS()
9706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvVoronoiNode2D;
9716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_VORONOIDIAGRAM2D_FIELDS() \
9736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GRAPH_FIELDS()                \
9746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSet *sites;
9756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvVoronoiDiagram2D
9776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
9786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_VORONOIDIAGRAM2D_FIELDS()
9796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvVoronoiDiagram2D;
9806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Computes Voronoi Diagram for given polygons with holes */
9826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  cvVoronoiDiagramFromContour(CvSeq* ContourSeq,
9836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           CvVoronoiDiagram2D** VoronoiDiagram,
9846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           CvMemStorage* VoronoiStorage,
9856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           CvLeeParameters contour_type CV_DEFAULT(CV_LEE_INT),
9866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           int contour_orientation CV_DEFAULT(-1),
9876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                           int attempt_number CV_DEFAULT(10));
9886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Computes Voronoi Diagram for domains in given image */
9906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  cvVoronoiDiagramFromImage(IplImage* pImage,
9916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                         CvSeq** ContourSeq,
9926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                         CvVoronoiDiagram2D** VoronoiDiagram,
9936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                         CvMemStorage* VoronoiStorage,
9946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                         CvLeeParameters regularization_method CV_DEFAULT(CV_LEE_NON),
9956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                         float approx_precision CV_DEFAULT(CV_LEE_AUTO));
9966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
9976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Deallocates the storage */
9986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseVoronoiStorage(CvVoronoiDiagram2D* VoronoiDiagram,
9996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                          CvMemStorage** pVoronoiStorage);
10006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************** Linear-Contour Model ****************************/
10026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvLCMEdge;
10046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvLCMNode;
10056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvLCMEdge
10076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
10086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GRAPH_EDGE_FIELDS()
10096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSeq* chain;
10106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float width;
10116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int index1;
10126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int index2;
10136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvLCMEdge;
10146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvLCMNode
10166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
10176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GRAPH_VERTEX_FIELDS()
10186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContour* contour;
10196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvLCMNode;
10206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Computes hybrid model from Voronoi Diagram */
10236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGraph*) cvLinearContorModelFromVoronoiDiagram(CvVoronoiDiagram2D* VoronoiDiagram,
10246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                                         float maxWidth);
10256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases hybrid model storage */
10276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvReleaseLinearContorModelStorage(CvGraph** Graph);
10286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* two stereo-related functions */
10316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvInitPerspectiveTransform( CvSize size, const CvPoint2D32f vertex[4], double matrix[3][3],
10336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                              CvArr* rectMap );
10346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CVAPI(void) cvInitStereoRectification( CvStereoCamera* params,
10366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                             CvArr* rectMap1, CvArr* rectMap2,
10376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                             int do_undistortion );*/
10386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*************************** View Morphing Functions ************************/
10406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* The order of the function corresponds to the order they should appear in
10426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   the view morphing pipeline */
10436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds ending points of scanlines on left and right images of stereo-pair */
10456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvMakeScanlines( const CvMatrix3* matrix, CvSize  img_size,
10466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int*  scanlines1, int*  scanlines2,
10476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int*  lengths1, int*  lengths2,
10486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int*  line_count );
10496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Grab pixel values from scanlines and stores them sequentially
10516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (some sort of perspective image transform) */
10526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvPreWarpImage( int       line_count,
10536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             IplImage* img,
10546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             uchar*    dst,
10556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             int*      dst_nums,
10566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             int*      scanlines);
10576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Approximate each grabbed scanline by a sequence of runs
10596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   (lossy run-length compression) */
10606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvFindRuns( int    line_count,
10616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         uchar* prewarp1,
10626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         uchar* prewarp2,
10636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         int*   line_lengths1,
10646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         int*   line_lengths2,
10656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         int*   runs1,
10666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         int*   runs2,
10676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         int*   num_runs1,
10686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                         int*   num_runs2);
10696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Compares two sets of compressed scanlines */
10716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvDynamicCorrespondMulti( int  line_count,
10726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int* first,
10736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int* first_runs,
10746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int* second,
10756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int* second_runs,
10766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int* first_corr,
10776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                       int* second_corr);
10786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds scanline ending coordinates for some intermediate "virtual" camera position */
10806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvMakeAlphaScanlines( int*  scanlines1,
10816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*  scanlines2,
10826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*  scanlinesA,
10836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*  lengths,
10846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int   line_count,
10856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   float alpha);
10866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
10876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Blends data of the left and right image scanlines to get
10886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   pixel values of "virtual" image scanlines */
10896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvMorphEpilinesMulti( int    line_count,
10906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   uchar* first_pix,
10916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   first_num,
10926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   uchar* second_pix,
10936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   second_num,
10946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   uchar* dst_pix,
10956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   dst_num,
10966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   float  alpha,
10976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   first,
10986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   first_runs,
10996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   second,
11006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   second_runs,
11016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   first_corr,
11026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   int*   second_corr);
11036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does reverse warping of the morphing result to make
11056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   it fill the destination image rectangle */
11066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvPostWarpImage( int       line_count,
11076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              uchar*    src,
11086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int*      src_nums,
11096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              IplImage* img,
11106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                              int*      scanlines);
11116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Deletes Moire (missed pixels that appear due to discretization) */
11136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void)  cvDeleteMoire( IplImage*  img );
11146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
11176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                           Background/foreground segmentation                           *
11186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
11196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* We discriminate between foreground and background pixels
11216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * by building and maintaining a model of the background.
11226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Any pixel which does not fit this model is then deemed
11236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * to be foreground.
11246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * At present we support two core background models,
11266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * one of which has two variations:
11276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *  o CV_BG_MODEL_FGD: latest and greatest algorithm, described in
11296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *	 Foreground Object Detection from Videos Containing Complex Background.
11316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *	 Liyuan Li, Weimin Huang, Irene Y.H. Gu, and Qi Tian.
11326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *	 ACM MM2003 9p
11336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *  o CV_BG_MODEL_FGD_SIMPLE:
11356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       A code comment describes this as a simplified version of the above,
11366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       but the code is in fact currently identical
11376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *  o CV_BG_MODEL_MOG: "Mixture of Gaussians", older algorithm, described in
11396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       Moving target classification and tracking from real-time video.
11416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       A Lipton, H Fujijoshi, R Patil
11426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       Proceedings IEEE Workshop on Application of Computer Vision pp 8-14 1998
11436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
11446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       Learning patterns of activity using real-time tracking
11456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       C Stauffer and W Grimson  August 2000
11466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *       IEEE Transactions on Pattern Analysis and Machine Intelligence 22(8):747-757
11476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */
11486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BG_MODEL_FGD		0
11516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BG_MODEL_MOG		1			/* "Mixture of Gaussians".	*/
11526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BG_MODEL_FGD_SIMPLE	2
11536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvBGStatModel;
11556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void (CV_CDECL * CvReleaseBGStatModel)( struct CvBGStatModel** bg_model );
11576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL * CvUpdateBGStatModel)( IplImage* curr_frame, struct CvBGStatModel* bg_model );
11586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BG_STAT_MODEL_FIELDS()                                                   \
11606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int             type; /*type of BG model*/                                      \
11616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvReleaseBGStatModel release;                                                   \
11626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvUpdateBGStatModel update;                                                     \
11636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*       background;   /*8UC3 reference background image*/               \
11646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*       foreground;   /*8UC1 foreground image*/                         \
11656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage**      layers;       /*8UC3 reference background image, can be null */ \
11666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int             layer_count;  /* can be zero */                                 \
11676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMemStorage*   storage;      /*storage for �foreground_regions�*/              \
11686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSeq*          foreground_regions /*foreground object contours*/
11696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBGStatModel
11716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
11726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_BG_STAT_MODEL_FIELDS();
11736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
11746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBGStatModel;
11756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
11776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Releases memory used by BGStatModel
11796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvReleaseBGStatModel( CvBGStatModel** bg_model )
11806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
11816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( bg_model && *bg_model && (*bg_model)->release )
11826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        (*bg_model)->release( bg_model );
11836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
11846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Updates statistical model and returns number of found foreground regions
11866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvUpdateBGStatModel( IplImage* current_frame, CvBGStatModel*  bg_model )
11876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
11886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return bg_model && bg_model->update ? bg_model->update( current_frame, bg_model ) : 0;
11896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
11906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Performs FG post-processing using segmentation
11926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (all pixels of a region will be classified as foreground if majority of pixels of the region are FG).
11936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// parameters:
11946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      segments - pointer to result of segmentation (for example MeanShiftSegmentation)
11956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//      bg_model - pointer to CvBGStatModel structure
11966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRefineForegroundMaskBySegm( CvSeq* segments, CvBGStatModel*  bg_model );
11976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
11986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Common use change detection function */
11996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int)  cvChangeDetection( IplImage*  prev_frame,
12006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               IplImage*  curr_frame,
12016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               IplImage*  change_mask );
12026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
12046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  Interface of ACM MM2003 algorithm
12056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/
12066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Default parameters of foreground detection algorithm: */
12086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_LC              128
12096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_N1C             15
12106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_N2C             25
12116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_LCC             64
12136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_N1CC            25
12146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_N2CC            40
12156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Background reference image update parameter: */
12176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_ALPHA_1         0.1f
12186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* stat model update parameter
12206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 0.002f ~ 1K frame(~45sec), 0.005 ~ 18sec (if 25fps and absolutely static BG)
12216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */
12226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_ALPHA_2         0.005f
12236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* start value for alpha parameter (to fast initiate statistic model) */
12256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_ALPHA_3         0.1f
12266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_DELTA           2
12286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_T               0.9f
12306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_MINAREA         15.f
12326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_BGFG_FGD_BG_UPDATE_TRESH 0.5f
12346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* See the above-referenced Li/Huang/Gu/Tian paper
12366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * for a full description of these background-model
12376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * tuning parameters.
12386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
12396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Nomenclature:  'c'  == "color", a three-component red/green/blue vector.
12406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *                         We use histograms of these to model the range of
12416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *                         colors we've seen at a given background pixel.
12426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
12436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *                'cc' == "color co-occurrence", a six-component vector giving
12446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *                         RGB color for both this frame and preceding frame.
12456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *                             We use histograms of these to model the range of
12466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *                         color CHANGES we've seen at a given background pixel.
12476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */
12486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFGDStatModelParams
12496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
12506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    Lc;			/* Quantized levels per 'color' component. Power of two, typically 32, 64 or 128.				*/
12516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    N1c;			/* Number of color vectors used to model normal background color variation at a given pixel.			*/
12526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    N2c;			/* Number of color vectors retained at given pixel.  Must be > N1c, typically ~ 5/3 of N1c.			*/
12536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn				/* Used to allow the first N1c vectors to adapt over time to changing background.				*/
12546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    Lcc;			/* Quantized levels per 'color co-occurrence' component.  Power of two, typically 16, 32 or 64.			*/
12566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    N1cc;		/* Number of color co-occurrence vectors used to model normal background color variation at a given pixel.	*/
12576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    N2cc;		/* Number of color co-occurrence vectors retained at given pixel.  Must be > N1cc, typically ~ 5/3 of N1cc.	*/
12586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn				/* Used to allow the first N1cc vectors to adapt over time to changing background.				*/
12596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    is_obj_without_holes;/* If TRUE we ignore holes within foreground blobs. Defaults to TRUE.						*/
12616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int    perform_morphing;	/* Number of erode-dilate-erode foreground-blob cleanup iterations.						*/
12626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn				/* These erase one-pixel junk blobs and merge almost-touching blobs. Default value is 1.			*/
12636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float  alpha1;		/* How quickly we forget old background pixel values seen.  Typically set to 0.1  				*/
12656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float  alpha2;		/* "Controls speed of feature learning". Depends on T. Typical value circa 0.005. 				*/
12666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float  alpha3;		/* Alternate to alpha2, used (e.g.) for quicker initial convergence. Typical value 0.1.				*/
12676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float  delta;		/* Affects color and color co-occurrence quantization, typically set to 2.					*/
12696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float  T;			/* "A percentage value which determines when new features can be recognized as new background." (Typically 0.9).*/
12706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float  minArea;		/* Discard foreground blobs whose bounding box is smaller than this threshold.					*/
12716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
12726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFGDStatModelParams;
12736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBGPixelCStatTable
12756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
12766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float          Pv, Pvb;
12776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar          v[3];
12786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
12796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBGPixelCStatTable;
12806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBGPixelCCStatTable
12826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
12836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float          Pv, Pvb;
12846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar          v[6];
12856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
12866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBGPixelCCStatTable;
12876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBGPixelStat
12896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
12906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float                 Pbc;
12916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float                 Pbcc;
12926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBGPixelCStatTable*  ctable;
12936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBGPixelCCStatTable* cctable;
12946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar                 is_trained_st_model;
12956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar                 is_trained_dyn_model;
12966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
12976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBGPixelStat;
12986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
12996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFGDStatModel
13016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_BG_STAT_MODEL_FIELDS();
13036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBGPixelStat*         pixel_stat;
13046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*              Ftd;
13056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*              Fbd;
13066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    IplImage*              prev_frame;
13076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvFGDStatModelParams   params;
13086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
13096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFGDStatModel;
13106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates FGD model */
13126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvBGStatModel*) cvCreateFGDStatModel( IplImage* first_frame,
13136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    CvFGDStatModelParams* parameters CV_DEFAULT(NULL));
13146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
13166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   Interface of Gaussian mixture algorithm
13176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   "An improved adaptive background mixture model for real-time tracking with shadow detection"
13196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   P. KadewTraKuPong and R. Bowden,
13206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001."
13216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn   http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf
13226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/
13236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Note:  "MOG" == "Mixture Of Gaussians": */
13256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_MAX_NGAUSSIANS 500
13276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* default parameters of gaussian background detection algorithm */
13296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_BACKGROUND_THRESHOLD     0.7     /* threshold sum of weights for background test */
13306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_STD_THRESHOLD            2.5     /* lambda=2.5 is 99% */
13316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_WINDOW_SIZE              200     /* Learning rate; alpha = 1/CV_GBG_WINDOW_SIZE */
13326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_NGAUSSIANS               5       /* = K = number of Gaussians in mixture */
13336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_WEIGHT_INIT              0.05
13346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_SIGMA_INIT               30
13356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_MINAREA                  15.f
13366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BGFG_MOG_NCOLORS                  3
13396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGaussBGStatModelParams
13416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     win_size;               /* = 1/alpha */
13436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     n_gauss;
13446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double  bg_threshold, std_threshold, minArea;
13456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double  weight_init, variance_init;
13466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}CvGaussBGStatModelParams;
13476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGaussBGValues
13496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int         match_sum;
13516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double      weight;
13526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double      variance[CV_BGFG_MOG_NCOLORS];
13536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double      mean[CV_BGFG_MOG_NCOLORS];
13546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
13556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGaussBGValues;
13566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGaussBGPoint
13586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvGaussBGValues* g_values;
13606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
13616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGaussBGPoint;
13626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGaussBGModel
13656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_BG_STAT_MODEL_FIELDS();
13676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvGaussBGStatModelParams   params;
13686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvGaussBGPoint*            g_point;
13696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int                        countFrames;
13706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
13716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGaussBGModel;
13726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates Gaussian mixture background model */
13756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvBGStatModel*) cvCreateGaussianBGModel( IplImage* first_frame,
13766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                CvGaussBGStatModelParams* parameters CV_DEFAULT(NULL));
13776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBGCodeBookElem
13806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvBGCodeBookElem* next;
13826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int tLastUpdate;
13836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int stale;
13846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar boxMin[3];
13856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar boxMax[3];
13866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar learnMin[3];
13876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar learnMax[3];
13886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
13896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBGCodeBookElem;
13906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
13916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBGCodeBookModel
13926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
13936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize size;
13946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int t;
13956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar cbBounds[3];
13966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar modMin[3];
13976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar modMax[3];
13986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBGCodeBookElem** cbmap;
13996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMemStorage* storage;
14006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvBGCodeBookElem* freeList;
14016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
14026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBGCodeBookModel;
14036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvBGCodeBookModel*) cvCreateBGCodeBookModel();
14056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseBGCodeBookModel( CvBGCodeBookModel** model );
14066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvBGCodeBookUpdate( CvBGCodeBookModel* model, const CvArr* image,
14086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                CvRect roi CV_DEFAULT(cvRect(0,0,0,0)),
14096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                const CvArr* mask CV_DEFAULT(0) );
14106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvBGCodeBookDiff( const CvBGCodeBookModel* model, const CvArr* image,
14126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                             CvArr* fgmask, CvRect roi CV_DEFAULT(cvRect(0,0,0,0)) );
14136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvBGCodeBookClearStale( CvBGCodeBookModel* model, int staleThresh,
14156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    CvRect roi CV_DEFAULT(cvRect(0,0,0,0)),
14166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    const CvArr* mask CV_DEFAULT(0) );
14176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvSegmentFGMask( CvArr *fgmask, int poly1Hull0 CV_DEFAULT(1),
14196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               float perimScale CV_DEFAULT(4.f),
14206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               CvMemStorage* storage CV_DEFAULT(0),
14216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                               CvPoint offset CV_DEFAULT(cvPoint(0,0)));
14226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
14246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
14256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
14266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
14286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\
14306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*                                   Calibration engine                                   *
14316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/
14326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvCalibEtalonType
14346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
14356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_CALIB_ETALON_USER = -1,
14366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_CALIB_ETALON_CHESSBOARD = 0,
14376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_CALIB_ETALON_CHECKERBOARD = CV_CALIB_ETALON_CHESSBOARD
14386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
14396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvCalibEtalonType;
14406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvCalibFilter
14426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
14436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic:
14446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Constructor & destructor */
14456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvCalibFilter();
14466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual ~CvCalibFilter();
14476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Sets etalon type - one for all cameras.
14496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       etalonParams is used in case of pre-defined etalons (such as chessboard).
14506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       Number of elements in etalonParams is determined by etalonType.
14516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       E.g., if etalon type is CV_ETALON_TYPE_CHESSBOARD then:
14526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn         etalonParams[0] is number of squares per one side of etalon
14536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn         etalonParams[1] is number of squares per another side of etalon
14546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn         etalonParams[2] is linear size of squares in the board in arbitrary units.
14556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       pointCount & points are used in case of
14566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       CV_CALIB_ETALON_USER (user-defined) etalon. */
14576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool
14586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        SetEtalon( CvCalibEtalonType etalonType, double* etalonParams,
14596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   int pointCount = 0, CvPoint2D32f* points = 0 );
14606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Retrieves etalon parameters/or and points */
14626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual CvCalibEtalonType
14636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        GetEtalon( int* paramCount = 0, const double** etalonParams = 0,
14646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                   int* pointCount = 0, const CvPoint2D32f** etalonPoints = 0 ) const;
14656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Sets number of cameras calibrated simultaneously. It is equal to 1 initially */
14676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual void SetCameraCount( int cameraCount );
14686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Retrieves number of cameras */
14706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int GetCameraCount() const { return cameraCount; }
14716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Starts cameras calibration */
14736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool SetFrames( int totalFrames );
14746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Stops cameras calibration */
14766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual void Stop( bool calibrate = false );
14776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Retrieves number of cameras */
14796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool IsCalibrated() const { return isCalibrated; }
14806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Feeds another serie of snapshots (one per each camera) to filter.
14826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       Etalon points on these images are found automatically.
14836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       If the function can't locate points, it returns false */
14846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool FindEtalon( IplImage** imgs );
14856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* The same but takes matrices */
14876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool FindEtalon( CvMat** imgs );
14886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Lower-level function for feeding filter with already found etalon points.
14906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       Array of point arrays for each camera is passed. */
14916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool Push( const CvPoint2D32f** points = 0 );
14926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Returns total number of accepted frames and, optionally,
14946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       total number of frames to collect */
14956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual int GetFrameCount( int* framesTotal = 0 ) const;
14966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
14976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Retrieves camera parameters for specified camera.
14986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       If camera is not calibrated the function returns 0 */
14996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual const CvCamera* GetCameraParams( int idx = 0 ) const;
15006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual const CvStereoCamera* GetStereoParams() const;
15026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Sets camera parameters for all cameras */
15046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool SetCameraParams( CvCamera* params );
15056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Saves all camera parameters to file */
15076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool SaveCameraParams( const char* filename );
15086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Loads all camera parameters from file */
15106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool LoadCameraParams( const char* filename );
15116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */
15136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool Undistort( IplImage** src, IplImage** dst );
15146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */
15166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool Undistort( CvMat** src, CvMat** dst );
15176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Returns array of etalon points detected/partally detected
15196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn       on the latest frame for idx-th camera */
15206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool GetLatestPoints( int idx, CvPoint2D32f** pts,
15216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                                  int* count, bool* found );
15226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Draw the latest detected/partially detected etalon */
15246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual void DrawPoints( IplImage** dst );
15256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Draw the latest detected/partially detected etalon */
15276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual void DrawPoints( CvMat** dst );
15286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool Rectify( IplImage** srcarr, IplImage** dstarr );
15306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    virtual bool Rectify( CvMat** srcarr, CvMat** dstarr );
15316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected:
15336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    enum { MAX_CAMERAS = 3 };
15356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* etalon data */
15376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvCalibEtalonType  etalonType;
15386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     etalonParamCount;
15396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double* etalonParams;
15406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     etalonPointCount;
15416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f* etalonPoints;
15426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize  imgSize;
15436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat*  grayImg;
15446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat*  tempImg;
15456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMemStorage* storage;
15466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* camera data */
15486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     cameraCount;
15496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvCamera cameraParams[MAX_CAMERAS];
15506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvStereoCamera stereo;
15516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f* points[MAX_CAMERAS];
15526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat*  undistMap[MAX_CAMERAS][2];
15536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat*  undistImg;
15546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     latestCounts[MAX_CAMERAS];
15556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f* latestPoints[MAX_CAMERAS];
15566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat*  rectMap[MAX_CAMERAS][2];
15576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* Added by Valery */
15596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    //CvStereoCamera stereoParams;
15606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     maxPoints;
15626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     framesTotal;
15636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int     framesAccepted;
15646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    bool    isCalibrated;
15656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};
15666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cvaux.hpp"
15686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cvvidsurv.hpp"
15696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*#include "cvmat.hpp"*/
15706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
15716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
15736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
15746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file. */
1575