Update to 2.0.0 tree from current Fremantle build
[opencv] / cvaux / include / cvaux.h
diff --git a/cvaux/include/cvaux.h b/cvaux/include/cvaux.h
deleted file mode 100644 (file)
index 6e1b950..0000000
+++ /dev/null
@@ -1,1546 +0,0 @@
-/*M///////////////////////////////////////////////////////////////////////////////////////
-//
-//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
-//
-//  By downloading, copying, installing or using the software you agree to this license.
-//  If you do not agree to this license, do not download, install,
-//  copy or use the software.
-//
-//
-//                        Intel License Agreement
-//                For Open Source Computer Vision Library
-//
-// Copyright (C) 2000, Intel Corporation, all rights reserved.
-// Third party copyrights are property of their respective owners.
-//
-// Redistribution and use in source and binary forms, with or without modification,
-// are permitted provided that the following conditions are met:
-//
-//   * Redistribution's of source code must retain the above copyright notice,
-//     this list of conditions and the following disclaimer.
-//
-//   * Redistribution's in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//
-//   * The name of Intel Corporation may not be used to endorse or promote products
-//     derived from this software without specific prior written permission.
-//
-// This software is provided by the copyright holders and contributors "as is" and
-// any express or implied warranties, including, but not limited to, the implied
-// warranties of merchantability and fitness for a particular purpose are disclaimed.
-// In no event shall the Intel Corporation or contributors be liable for any direct,
-// indirect, incidental, special, exemplary, or consequential damages
-// (including, but not limited to, procurement of substitute goods or services;
-// loss of use, data, or profits; or business interruption) however caused
-// and on any theory of liability, whether in contract, strict liability,
-// or tort (including negligence or otherwise) arising in any way out of
-// the use of this software, even if advised of the possibility of such damage.
-//
-//M*/
-
-#ifndef __CVAUX__H__
-#define __CVAUX__H__
-
-#include "cv.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-CVAPI(CvSeq*) cvSegmentImage( const CvArr* srcarr, CvArr* dstarr,
-                                    double canny_threshold,
-                                    double ffill_threshold,
-                                    CvMemStorage* storage );
-
-/****************************************************************************************\
-*                                  Eigen objects                                         *
-\****************************************************************************************/
-
-typedef int (CV_CDECL * CvCallback)(int index, void* buffer, void* user_data);
-typedef union
-{
-    CvCallback callback;
-    void* data;
-}
-CvInput;
-
-#define CV_EIGOBJ_NO_CALLBACK     0
-#define CV_EIGOBJ_INPUT_CALLBACK  1
-#define CV_EIGOBJ_OUTPUT_CALLBACK 2
-#define CV_EIGOBJ_BOTH_CALLBACK   3
-
-/* Calculates covariation matrix of a set of arrays */
-CVAPI(void)  cvCalcCovarMatrixEx( int nObjects, void* input, int ioFlags,
-                                  int ioBufSize, uchar* buffer, void* userData,
-                                  IplImage* avg, float* covarMatrix );
-
-/* Calculates eigen values and vectors of covariation matrix of a set of
-   arrays */
-CVAPI(void)  cvCalcEigenObjects( int nObjects, void* input, void* output,
-                                 int ioFlags, int ioBufSize, void* userData,
-                                 CvTermCriteria* calcLimit, IplImage* avg,
-                                 float* eigVals );
-
-/* Calculates dot product (obj - avg) * eigObj (i.e. projects image to eigen vector) */
-CVAPI(double)  cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );
-
-/* Projects image to eigen space (finds all decomposion coefficients */
-CVAPI(void)  cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput,
-                                 int ioFlags, void* userData, IplImage* avg,
-                                 float* coeffs );
-
-/* Projects original objects used to calculate eigen space basis to that space */
-CVAPI(void)  cvEigenProjection( void* eigInput, int nEigObjs, int ioFlags,
-                                void* userData, float* coeffs, IplImage* avg,
-                                IplImage* proj );
-
-/****************************************************************************************\
-*                                       1D/2D HMM                                        *
-\****************************************************************************************/
-
-typedef struct CvImgObsInfo
-{
-    int obs_x;
-    int obs_y;
-    int obs_size;
-    float* obs;//consequtive observations
-
-    int* state;/* arr of pairs superstate/state to which observation belong */
-    int* mix;  /* number of mixture to which observation belong */
-
-}
-CvImgObsInfo;/*struct for 1 image*/
-
-typedef CvImgObsInfo Cv1DObsInfo;
-
-typedef struct CvEHMMState
-{
-    int num_mix;        /*number of mixtures in this state*/
-    float* mu;          /*mean vectors corresponding to each mixture*/
-    float* inv_var;     /* square root of inversed variances corresp. to each mixture*/
-    float* log_var_val; /* sum of 0.5 (LN2PI + ln(variance[i]) ) for i=1,n */
-    float* weight;      /*array of mixture weights. Summ of all weights in state is 1. */
-
-}
-CvEHMMState;
-
-typedef struct CvEHMM
-{
-    int level; /* 0 - lowest(i.e its states are real states), ..... */
-    int num_states; /* number of HMM states */
-    float*  transP;/*transition probab. matrices for states */
-    float** obsProb; /* if level == 0 - array of brob matrices corresponding to hmm
-                        if level == 1 - martix of matrices */
-    union
-    {
-        CvEHMMState* state; /* if level == 0 points to real states array,
-                               if not - points to embedded hmms */
-        struct CvEHMM* ehmm; /* pointer to an embedded model or NULL, if it is a leaf */
-    } u;
-
-}
-CvEHMM;
-
-/*CVAPI(int)  icvCreate1DHMM( CvEHMM** this_hmm,
-                                   int state_number, int* num_mix, int obs_size );
-
-CVAPI(int)  icvRelease1DHMM( CvEHMM** phmm );
-
-CVAPI(int)  icvUniform1DSegm( Cv1DObsInfo* obs_info, CvEHMM* hmm );
-
-CVAPI(int)  icvInit1DMixSegm( Cv1DObsInfo** obs_info_array, int num_img, CvEHMM* hmm);
-
-CVAPI(int)  icvEstimate1DHMMStateParams( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm);
-
-CVAPI(int)  icvEstimate1DObsProb( CvImgObsInfo* obs_info, CvEHMM* hmm );
-
-CVAPI(int)  icvEstimate1DTransProb( Cv1DObsInfo** obs_info_array,
-                                           int num_seq,
-                                           CvEHMM* hmm );
-
-CVAPI(float)  icvViterbi( Cv1DObsInfo* obs_info, CvEHMM* hmm);
-
-CVAPI(int)  icv1DMixSegmL2( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );*/
-
-/*********************************** Embedded HMMs *************************************/
-
-/* Creates 2D HMM */
-CVAPI(CvEHMM*)  cvCreate2DHMM( int* stateNumber, int* numMix, int obsSize );
-
-/* Releases HMM */
-CVAPI(void)  cvRelease2DHMM( CvEHMM** hmm );
-
-#define CV_COUNT_OBS(roi, win, delta, numObs )                                       \
-{                                                                                    \
-   (numObs)->width  =((roi)->width  -(win)->width  +(delta)->width)/(delta)->width;  \
-   (numObs)->height =((roi)->height -(win)->height +(delta)->height)/(delta)->height;\
-}
-
-/* Creates storage for observation vectors */
-CVAPI(CvImgObsInfo*)  cvCreateObsInfo( CvSize numObs, int obsSize );
-
-/* Releases storage for observation vectors */
-CVAPI(void)  cvReleaseObsInfo( CvImgObsInfo** obs_info );
-
-
-/* The function takes an image on input and and returns the sequnce of observations
-   to be used with an embedded HMM; Each observation is top-left block of DCT
-   coefficient matrix */
-CVAPI(void)  cvImgToObs_DCT( const CvArr* arr, float* obs, CvSize dctSize,
-                             CvSize obsSize, CvSize delta );
-
-
-/* Uniformly segments all observation vectors extracted from image */
-CVAPI(void)  cvUniformImgSegm( CvImgObsInfo* obs_info, CvEHMM* ehmm );
-
-/* Does mixture segmentation of the states of embedded HMM */
-CVAPI(void)  cvInitMixSegm( CvImgObsInfo** obs_info_array,
-                            int num_img, CvEHMM* hmm );
-
-/* Function calculates means, variances, weights of every Gaussian mixture
-   of every low-level state of embedded HMM */
-CVAPI(void)  cvEstimateHMMStateParams( CvImgObsInfo** obs_info_array,
-                                       int num_img, CvEHMM* hmm );
-
-/* Function computes transition probability matrices of embedded HMM
-   given observations segmentation */
-CVAPI(void)  cvEstimateTransProb( CvImgObsInfo** obs_info_array,
-                                  int num_img, CvEHMM* hmm );
-
-/* Function computes probabilities of appearing observations at any state
-   (i.e. computes P(obs|state) for every pair(obs,state)) */
-CVAPI(void)  cvEstimateObsProb( CvImgObsInfo* obs_info,
-                                CvEHMM* hmm );
-
-/* Runs Viterbi algorithm for embedded HMM */
-CVAPI(float)  cvEViterbi( CvImgObsInfo* obs_info, CvEHMM* hmm );
-
-
-/* Function clusters observation vectors from several images
-   given observations segmentation.
-   Euclidean distance used for clustering vectors.
-   Centers of clusters are given means of every mixture */
-CVAPI(void)  cvMixSegmL2( CvImgObsInfo** obs_info_array,
-                          int num_img, CvEHMM* hmm );
-
-/****************************************************************************************\
-*               A few functions from old stereo gesture recognition demosions            *
-\****************************************************************************************/
-
-/* Creates hand mask image given several points on the hand */
-CVAPI(void)  cvCreateHandMask( CvSeq* hand_points,
-                                   IplImage *img_mask, CvRect *roi);
-
-/* Finds hand region in range image data */
-CVAPI(void)  cvFindHandRegion (CvPoint3D32f* points, int count,
-                                CvSeq* indexs,
-                                float* line, CvSize2D32f size, int flag,
-                                CvPoint3D32f* center,
-                                CvMemStorage* storage, CvSeq **numbers);
-
-/* Finds hand region in range image data (advanced version) */
-CVAPI(void)  cvFindHandRegionA( CvPoint3D32f* points, int count,
-                                CvSeq* indexs,
-                                float* line, CvSize2D32f size, int jc,
-                                CvPoint3D32f* center,
-                                CvMemStorage* storage, CvSeq **numbers);
-
-/****************************************************************************************\
-*                           Additional operations on Subdivisions                        *
-\****************************************************************************************/
-
-// paints voronoi diagram: just demo function
-CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
-
-// checks planar subdivision for correctness. It is not an absolute check,
-// but it verifies some relations between quad-edges
-CVAPI(int)   icvSubdiv2DCheck( CvSubdiv2D* subdiv );
-
-// returns squared distance between two 2D points with floating-point coordinates.
-CV_INLINE double icvSqDist2D32f( CvPoint2D32f pt1, CvPoint2D32f pt2 )
-{
-    double dx = pt1.x - pt2.x;
-    double dy = pt1.y - pt2.y;
-
-    return dx*dx + dy*dy;
-}
-
-
-/****************************************************************************************\
-*                           More operations on sequences                                 *
-\****************************************************************************************/
-
-/*****************************************************************************************/
-
-#define CV_CURRENT_INT( reader ) (*((int *)(reader).ptr))
-#define CV_PREV_INT( reader ) (*((int *)(reader).prev_elem))
-
-#define  CV_GRAPH_WEIGHTED_VERTEX_FIELDS() CV_GRAPH_VERTEX_FIELDS()\
-    float weight;
-
-#define  CV_GRAPH_WEIGHTED_EDGE_FIELDS() CV_GRAPH_EDGE_FIELDS()
-
-typedef struct CvGraphWeightedVtx
-{
-    CV_GRAPH_WEIGHTED_VERTEX_FIELDS()
-}
-CvGraphWeightedVtx;
-
-typedef struct CvGraphWeightedEdge
-{
-    CV_GRAPH_WEIGHTED_EDGE_FIELDS()
-}
-CvGraphWeightedEdge;
-
-typedef enum CvGraphWeightType
-{
-    CV_NOT_WEIGHTED,
-    CV_WEIGHTED_VTX,
-    CV_WEIGHTED_EDGE,
-    CV_WEIGHTED_ALL
-} CvGraphWeightType;
-
-
-/*****************************************************************************************/
-
-
-/*******************************Stereo correspondence*************************************/
-
-typedef struct CvCliqueFinder
-{   
-    CvGraph* graph;
-    int**    adj_matr;
-    int N; //graph size
-
-    // stacks, counters etc/
-    int k; //stack size
-    int* current_comp;
-    int** All;
-    
-    int* ne;
-    int* ce;
-    int* fixp; //node with minimal disconnections
-    int* nod;
-    int* s; //for selected candidate
-    int status;
-    int best_score;
-    int weighted;
-    int weighted_edges;    
-    float best_weight;
-    float* edge_weights;
-    float* vertex_weights;
-    float* cur_weight;
-    float* cand_weight;
-
-} CvCliqueFinder;
-
-#define CLIQUE_TIME_OFF 2
-#define CLIQUE_FOUND 1
-#define CLIQUE_END   0
-
-/*CVAPI(void) cvStartFindCliques( CvGraph* graph, CvCliqueFinder* finder, int reverse, 
-                                   int weighted CV_DEFAULT(0),  int weighted_edges CV_DEFAULT(0));
-CVAPI(int) cvFindNextMaximalClique( CvCliqueFinder* finder, int* clock_rest CV_DEFAULT(0) ); 
-CVAPI(void) cvEndFindCliques( CvCliqueFinder* finder );
-
-CVAPI(void) cvBronKerbosch( CvGraph* graph );*/
-
-
-/*F///////////////////////////////////////////////////////////////////////////////////////
-//
-//    Name:    cvSubgraphWeight
-//    Purpose: finds weight of subgraph in a graph
-//    Context:
-//    Parameters:
-//      graph - input graph.
-//      subgraph - sequence of pairwise different ints.  These are indices of vertices of subgraph.
-//      weight_type - describes the way we measure weight.
-//            one of the following:
-//            CV_NOT_WEIGHTED - weight of a clique is simply its size
-//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices
-//            CV_WEIGHTED_EDGE - the same but edges
-//            CV_WEIGHTED_ALL - the same but both edges and vertices
-//      weight_vtx - optional vector of floats, with size = graph->total.
-//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL
-//            weights of vertices must be provided.  If weight_vtx not zero
-//            these weights considered to be here, otherwise function assumes
-//            that vertices of graph are inherited from CvGraphWeightedVtx.
-//      weight_edge - optional matrix of floats, of width and height = graph->total.
-//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL
-//            weights of edges ought to be supplied.  If weight_edge is not zero
-//            function finds them here, otherwise function expects
-//            edges of graph to be inherited from CvGraphWeightedEdge.
-//            If this parameter is not zero structure of the graph is determined from matrix
-//            rather than from CvGraphEdge's.  In particular, elements corresponding to
-//            absent edges should be zero.
-//    Returns:
-//      weight of subgraph.
-//    Notes:
-//F*/
-/*CVAPI(float) cvSubgraphWeight( CvGraph *graph, CvSeq *subgraph,
-                                  CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),
-                                  CvVect32f weight_vtx CV_DEFAULT(0),
-                                  CvMatr32f weight_edge CV_DEFAULT(0) );*/
-
-
-/*F///////////////////////////////////////////////////////////////////////////////////////
-//
-//    Name:    cvFindCliqueEx
-//    Purpose: tries to find clique with maximum possible weight in a graph
-//    Context:
-//    Parameters:
-//      graph - input graph.
-//      storage - memory storage to be used by the result.
-//      is_complementary - optional flag showing whether function should seek for clique
-//            in complementary graph.
-//      weight_type - describes our notion about weight.
-//            one of the following:
-//            CV_NOT_WEIGHTED - weight of a clique is simply its size
-//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices
-//            CV_WEIGHTED_EDGE - the same but edges
-//            CV_WEIGHTED_ALL - the same but both edges and vertices
-//      weight_vtx - optional vector of floats, with size = graph->total.
-//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL
-//            weights of vertices must be provided.  If weight_vtx not zero
-//            these weights considered to be here, otherwise function assumes
-//            that vertices of graph are inherited from CvGraphWeightedVtx.
-//      weight_edge - optional matrix of floats, of width and height = graph->total.
-//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL
-//            weights of edges ought to be supplied.  If weight_edge is not zero
-//            function finds them here, otherwise function expects
-//            edges of graph to be inherited from CvGraphWeightedEdge.
-//            Note that in case of CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL
-//            nonzero is_complementary implies nonzero weight_edge.
-//      start_clique - optional sequence of pairwise different ints.  They are indices of
-//            vertices that shall be present in the output clique.
-//      subgraph_of_ban - optional sequence of (maybe equal) ints.  They are indices of
-//            vertices that shall not be present in the output clique.
-//      clique_weight_ptr - optional output parameter.  Weight of found clique stored here.
-//      num_generations - optional number of generations in evolutionary part of algorithm,
-//            zero forces to return first found clique.
-//      quality - optional parameter determining degree of required quality/speed tradeoff.
-//            Must be in the range from 0 to 9.
-//            0 is fast and dirty, 9 is slow but hopefully yields good clique.
-//    Returns:
-//      sequence of pairwise different ints.
-//      These are indices of vertices that form found clique.
-//    Notes:
-//      in cases of CV_WEIGHTED_EDGE and CV_WEIGHTED_ALL weights should be nonnegative.
-//      start_clique has a priority over subgraph_of_ban.
-//F*/
-/*CVAPI(CvSeq*) cvFindCliqueEx( CvGraph *graph, CvMemStorage *storage,
-                                 int is_complementary CV_DEFAULT(0),
-                                 CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),
-                                 CvVect32f weight_vtx CV_DEFAULT(0),
-                                 CvMatr32f weight_edge CV_DEFAULT(0),
-                                 CvSeq *start_clique CV_DEFAULT(0),
-                                 CvSeq *subgraph_of_ban CV_DEFAULT(0),
-                                 float *clique_weight_ptr CV_DEFAULT(0),
-                                 int num_generations CV_DEFAULT(3),
-                                 int quality CV_DEFAULT(2) );*/
-
-
-#define CV_UNDEF_SC_PARAM         12345 //default value of parameters
-
-#define CV_IDP_BIRCHFIELD_PARAM1  25    
-#define CV_IDP_BIRCHFIELD_PARAM2  5
-#define CV_IDP_BIRCHFIELD_PARAM3  12
-#define CV_IDP_BIRCHFIELD_PARAM4  15
-#define CV_IDP_BIRCHFIELD_PARAM5  25
-
-
-#define  CV_DISPARITY_BIRCHFIELD  0    
-
-
-/*F///////////////////////////////////////////////////////////////////////////
-//
-//    Name:    cvFindStereoCorrespondence
-//    Purpose: find stereo correspondence on stereo-pair
-//    Context:
-//    Parameters:
-//      leftImage - left image of stereo-pair (format 8uC1).
-//      rightImage - right image of stereo-pair (format 8uC1).
-//   mode - mode of correspondence retrieval (now CV_DISPARITY_BIRCHFIELD only)
-//      dispImage - destination disparity image
-//      maxDisparity - maximal disparity 
-//      param1, param2, param3, param4, param5 - parameters of algorithm
-//    Returns:
-//    Notes:
-//      Images must be rectified.
-//      All images must have format 8uC1.
-//F*/
-CVAPI(void) 
-cvFindStereoCorrespondence( 
-                   const  CvArr* leftImage, const  CvArr* rightImage,
-                   int     mode,
-                   CvArr*  dispImage,
-                   int     maxDisparity,                                
-                   double  param1 CV_DEFAULT(CV_UNDEF_SC_PARAM), 
-                   double  param2 CV_DEFAULT(CV_UNDEF_SC_PARAM), 
-                   double  param3 CV_DEFAULT(CV_UNDEF_SC_PARAM), 
-                   double  param4 CV_DEFAULT(CV_UNDEF_SC_PARAM), 
-                   double  param5 CV_DEFAULT(CV_UNDEF_SC_PARAM) );
-
-/*****************************************************************************************/
-/************ Epiline functions *******************/
-
-
-
-typedef struct CvStereoLineCoeff
-{
-    double Xcoef;
-    double XcoefA;
-    double XcoefB;
-    double XcoefAB;
-
-    double Ycoef;
-    double YcoefA;
-    double YcoefB;
-    double YcoefAB;
-
-    double Zcoef;
-    double ZcoefA;
-    double ZcoefB;
-    double ZcoefAB;
-}CvStereoLineCoeff;
-
-
-typedef struct CvCamera
-{
-    float   imgSize[2]; /* size of the camera view, used during calibration */
-    float   matrix[9]; /* intinsic camera parameters:  [ fx 0 cx; 0 fy cy; 0 0 1 ] */
-    float   distortion[4]; /* distortion coefficients - two coefficients for radial distortion
-                              and another two for tangential: [ k1 k2 p1 p2 ] */
-    float   rotMatr[9];
-    float   transVect[3]; /* rotation matrix and transition vector relatively
-                             to some reference point in the space. */
-}
-CvCamera;
-
-typedef struct CvStereoCamera
-{
-    CvCamera* camera[2]; /* two individual camera parameters */
-    float fundMatr[9]; /* fundamental matrix */
-
-    /* New part for stereo */
-    CvPoint3D32f epipole[2];
-    CvPoint2D32f quad[2][4]; /* coordinates of destination quadrangle after
-                                epipolar geometry rectification */
-    double coeffs[2][3][3];/* coefficients for transformation */
-    CvPoint2D32f border[2][4];
-    CvSize warpSize;
-    CvStereoLineCoeff* lineCoeffs;
-    int needSwapCameras;/* flag set to 1 if need to swap cameras for good reconstruction */
-    float rotMatrix[9];
-    float transVector[3];
-}
-CvStereoCamera;
-
-
-typedef struct CvContourOrientation
-{
-    float egvals[2];
-    float egvects[4];
-
-    float max, min; // minimum and maximum projections
-    int imax, imin;
-} CvContourOrientation;
-
-#define CV_CAMERA_TO_WARP 1
-#define CV_WARP_TO_CAMERA 2
-
-CVAPI(int) icvConvertWarpCoordinates(double coeffs[3][3],
-                                CvPoint2D32f* cameraPoint,
-                                CvPoint2D32f* warpPoint,
-                                int direction);
-
-CVAPI(int) icvGetSymPoint3D(  CvPoint3D64f pointCorner,
-                            CvPoint3D64f point1,
-                            CvPoint3D64f point2,
-                            CvPoint3D64f *pointSym2);
-
-CVAPI(void) icvGetPieceLength3D(CvPoint3D64f point1,CvPoint3D64f point2,double* dist);
-
-CVAPI(int) icvCompute3DPoint(    double alpha,double betta,
-                            CvStereoLineCoeff* coeffs,
-                            CvPoint3D64f* point);
-
-CVAPI(int) icvCreateConvertMatrVect( CvMatr64d     rotMatr1,
-                                CvMatr64d     transVect1,
-                                CvMatr64d     rotMatr2,
-                                CvMatr64d     transVect2,
-                                CvMatr64d     convRotMatr,
-                                CvMatr64d     convTransVect);
-
-CVAPI(int) icvConvertPointSystem(CvPoint3D64f  M2,
-                            CvPoint3D64f* M1,
-                            CvMatr64d     rotMatr,
-                            CvMatr64d     transVect
-                            );
-
-CVAPI(int) icvComputeCoeffForStereo(  CvStereoCamera* stereoCamera);
-
-CVAPI(int) icvGetCrossPieceVector(CvPoint2D32f p1_start,CvPoint2D32f p1_end,CvPoint2D32f v2_start,CvPoint2D32f v2_end,CvPoint2D32f *cross);
-CVAPI(int) icvGetCrossLineDirect(CvPoint2D32f p1,CvPoint2D32f p2,float a,float b,float c,CvPoint2D32f* cross);
-CVAPI(float) icvDefinePointPosition(CvPoint2D32f point1,CvPoint2D32f point2,CvPoint2D32f point);
-CVAPI(int) icvStereoCalibration( int numImages,
-                            int* nums,
-                            CvSize imageSize,
-                            CvPoint2D32f* imagePoints1,
-                            CvPoint2D32f* imagePoints2,
-                            CvPoint3D32f* objectPoints,
-                            CvStereoCamera* stereoparams
-                           );
-
-
-CVAPI(int) icvComputeRestStereoParams(CvStereoCamera *stereoparams);
-
-CVAPI(void) cvComputePerspectiveMap( const double coeffs[3][3], CvArr* rectMapX, CvArr* rectMapY );
-
-CVAPI(int) icvComCoeffForLine(   CvPoint2D64f point1,
-                            CvPoint2D64f point2,
-                            CvPoint2D64f point3,
-                            CvPoint2D64f point4,
-                            CvMatr64d    camMatr1,
-                            CvMatr64d    rotMatr1,
-                            CvMatr64d    transVect1,
-                            CvMatr64d    camMatr2,
-                            CvMatr64d    rotMatr2,
-                            CvMatr64d    transVect2,
-                            CvStereoLineCoeff*    coeffs,
-                            int* needSwapCameras);
-
-CVAPI(int) icvGetDirectionForPoint(  CvPoint2D64f point,
-                                CvMatr64d camMatr,
-                                CvPoint3D64f* direct);
-
-CVAPI(int) icvGetCrossLines(CvPoint3D64f point11,CvPoint3D64f point12,
-                       CvPoint3D64f point21,CvPoint3D64f point22,
-                       CvPoint3D64f* midPoint);
-
-CVAPI(int) icvComputeStereoLineCoeffs(   CvPoint3D64f pointA,
-                                    CvPoint3D64f pointB,
-                                    CvPoint3D64f pointCam1,
-                                    double gamma,
-                                    CvStereoLineCoeff*    coeffs);
-
-/*CVAPI(int) icvComputeFundMatrEpipoles ( CvMatr64d camMatr1, 
-                                    CvMatr64d     rotMatr1, 
-                                    CvVect64d     transVect1,
-                                    CvMatr64d     camMatr2,
-                                    CvMatr64d     rotMatr2,
-                                    CvVect64d     transVect2,
-                                    CvPoint2D64f* epipole1,
-                                    CvPoint2D64f* epipole2,
-                                    CvMatr64d     fundMatr);*/
-
-CVAPI(int) icvGetAngleLine( CvPoint2D64f startPoint, CvSize imageSize,CvPoint2D64f *point1,CvPoint2D64f *point2);
-
-CVAPI(void) icvGetCoefForPiece(   CvPoint2D64f p_start,CvPoint2D64f p_end,
-                        double *a,double *b,double *c,
-                        int* result);
-
-/*CVAPI(void) icvGetCommonArea( CvSize imageSize,
-                    CvPoint2D64f epipole1,CvPoint2D64f epipole2,
-                    CvMatr64d fundMatr,
-                    CvVect64d coeff11,CvVect64d coeff12,
-                    CvVect64d coeff21,CvVect64d coeff22,
-                    int* result);*/
-
-CVAPI(void) icvComputeeInfiniteProject1(CvMatr64d    rotMatr,
-                                     CvMatr64d    camMatr1,
-                                     CvMatr64d    camMatr2,
-                                     CvPoint2D32f point1,
-                                     CvPoint2D32f *point2);
-
-CVAPI(void) icvComputeeInfiniteProject2(CvMatr64d    rotMatr,
-                                     CvMatr64d    camMatr1,
-                                     CvMatr64d    camMatr2,
-                                     CvPoint2D32f* point1,
-                                     CvPoint2D32f point2);
-
-CVAPI(void) icvGetCrossDirectDirect(  CvVect64d direct1,CvVect64d direct2,
-                            CvPoint2D64f *cross,int* result);
-
-CVAPI(void) icvGetCrossPieceDirect(   CvPoint2D64f p_start,CvPoint2D64f p_end,
-                            double a,double b,double c,
-                            CvPoint2D64f *cross,int* result);
-
-CVAPI(void) icvGetCrossPiecePiece( CvPoint2D64f p1_start,CvPoint2D64f p1_end,
-                            CvPoint2D64f p2_start,CvPoint2D64f p2_end,
-                            CvPoint2D64f* cross,
-                            int* result);
-                            
-CVAPI(void) icvGetPieceLength(CvPoint2D64f point1,CvPoint2D64f point2,double* dist);
-
-CVAPI(void) icvGetCrossRectDirect(    CvSize imageSize,
-                            double a,double b,double c,
-                            CvPoint2D64f *start,CvPoint2D64f *end,
-                            int* result);
-
-CVAPI(void) icvProjectPointToImage(   CvPoint3D64f point,
-                            CvMatr64d camMatr,CvMatr64d rotMatr,CvVect64d transVect,
-                            CvPoint2D64f* projPoint);
-
-CVAPI(void) icvGetQuadsTransform( CvSize        imageSize,
-                        CvMatr64d     camMatr1,
-                        CvMatr64d     rotMatr1,
-                        CvVect64d     transVect1,
-                        CvMatr64d     camMatr2,
-                        CvMatr64d     rotMatr2,
-                        CvVect64d     transVect2,
-                        CvSize*       warpSize,
-                        double quad1[4][2],
-                        double quad2[4][2],
-                        CvMatr64d     fundMatr,
-                        CvPoint3D64f* epipole1,
-                        CvPoint3D64f* epipole2
-                        );
-
-CVAPI(void) icvGetQuadsTransformStruct(  CvStereoCamera* stereoCamera);
-
-CVAPI(void) icvComputeStereoParamsForCameras(CvStereoCamera* stereoCamera);
-
-CVAPI(void) icvGetCutPiece(   CvVect64d areaLineCoef1,CvVect64d areaLineCoef2,
-                    CvPoint2D64f epipole,
-                    CvSize imageSize,
-                    CvPoint2D64f* point11,CvPoint2D64f* point12,
-                    CvPoint2D64f* point21,CvPoint2D64f* point22,
-                    int* result);
-
-CVAPI(void) icvGetMiddleAnglePoint(   CvPoint2D64f basePoint,
-                            CvPoint2D64f point1,CvPoint2D64f point2,
-                            CvPoint2D64f* midPoint);
-
-CVAPI(void) icvGetNormalDirect(CvVect64d direct,CvPoint2D64f point,CvVect64d normDirect);
-
-CVAPI(double) icvGetVect(CvPoint2D64f basePoint,CvPoint2D64f point1,CvPoint2D64f point2);
-
-CVAPI(void) icvProjectPointToDirect(  CvPoint2D64f point,CvVect64d lineCoeff,
-                            CvPoint2D64f* projectPoint);
-
-CVAPI(void) icvGetDistanceFromPointToDirect( CvPoint2D64f point,CvVect64d lineCoef,double*dist);
-
-CVAPI(IplImage*) icvCreateIsometricImage( IplImage* src, IplImage* dst,
-                              int desired_depth, int desired_num_channels );
-
-CVAPI(void) cvDeInterlace( const CvArr* frame, CvArr* fieldEven, CvArr* fieldOdd );
-
-/*CVAPI(int) icvSelectBestRt(           int           numImages,
-                                    int*          numPoints,
-                                    CvSize        imageSize,
-                                    CvPoint2D32f* imagePoints1,
-                                    CvPoint2D32f* imagePoints2,
-                                    CvPoint3D32f* objectPoints,
-
-                                    CvMatr32f     cameraMatrix1,
-                                    CvVect32f     distortion1,
-                                    CvMatr32f     rotMatrs1,
-                                    CvVect32f     transVects1,
-
-                                    CvMatr32f     cameraMatrix2,
-                                    CvVect32f     distortion2,
-                                    CvMatr32f     rotMatrs2,
-                                    CvVect32f     transVects2,
-
-                                    CvMatr32f     bestRotMatr,
-                                    CvVect32f     bestTransVect
-                                    );*/
-
-/****************************************************************************************\
-*                                   Contour Morphing                                     *
-\****************************************************************************************/
-
-/* finds correspondence between two contours */
-CvSeq* cvCalcContoursCorrespondence( const CvSeq* contour1,
-                                     const CvSeq* contour2, 
-                                     CvMemStorage* storage);
-
-/* morphs contours using the pre-calculated correspondence:
-   alpha=0 ~ contour1, alpha=1 ~ contour2 */
-CvSeq* cvMorphContours( const CvSeq* contour1, const CvSeq* contour2,
-                        CvSeq* corr, double alpha,
-                        CvMemStorage* storage );
-
-/****************************************************************************************\
-*                                    Texture Descriptors                                 *
-\****************************************************************************************/
-
-#define CV_GLCM_OPTIMIZATION_NONE                   -2
-#define CV_GLCM_OPTIMIZATION_LUT                    -1
-#define CV_GLCM_OPTIMIZATION_HISTOGRAM              0
-
-#define CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST    10
-#define CV_GLCMDESC_OPTIMIZATION_ALLOWTRIPLENEST    11
-#define CV_GLCMDESC_OPTIMIZATION_HISTOGRAM          4
-
-#define CV_GLCMDESC_ENTROPY                         0
-#define CV_GLCMDESC_ENERGY                          1
-#define CV_GLCMDESC_HOMOGENITY                      2
-#define CV_GLCMDESC_CONTRAST                        3
-#define CV_GLCMDESC_CLUSTERTENDENCY                 4
-#define CV_GLCMDESC_CLUSTERSHADE                    5
-#define CV_GLCMDESC_CORRELATION                     6
-#define CV_GLCMDESC_CORRELATIONINFO1                7
-#define CV_GLCMDESC_CORRELATIONINFO2                8
-#define CV_GLCMDESC_MAXIMUMPROBABILITY              9
-
-#define CV_GLCM_ALL                                 0
-#define CV_GLCM_GLCM                                1
-#define CV_GLCM_DESC                                2
-
-typedef struct CvGLCM CvGLCM;
-
-CVAPI(CvGLCM*) cvCreateGLCM( const IplImage* srcImage,
-                                int stepMagnitude,
-                                const int* stepDirections CV_DEFAULT(0),
-                                int numStepDirections CV_DEFAULT(0),
-                                int optimizationType CV_DEFAULT(CV_GLCM_OPTIMIZATION_NONE));
-
-CVAPI(void) cvReleaseGLCM( CvGLCM** GLCM, int flag CV_DEFAULT(CV_GLCM_ALL));
-
-CVAPI(void) cvCreateGLCMDescriptors( CvGLCM* destGLCM,
-                                        int descriptorOptimizationType
-                                        CV_DEFAULT(CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST));
-
-CVAPI(double) cvGetGLCMDescriptor( CvGLCM* GLCM, int step, int descriptor );
-
-CVAPI(void) cvGetGLCMDescriptorStatistics( CvGLCM* GLCM, int descriptor,
-                                              double* average, double* standardDeviation );
-
-CVAPI(IplImage*) cvCreateGLCMImage( CvGLCM* GLCM, int step );
-
-/****************************************************************************************\
-*                                  Face eyes&mouth tracking                              *
-\****************************************************************************************/
-
-
-typedef struct CvFaceTracker CvFaceTracker;
-
-#define CV_NUM_FACE_ELEMENTS    3 
-enum CV_FACE_ELEMENTS
-{
-    CV_FACE_MOUTH = 0,
-    CV_FACE_LEFT_EYE = 1,
-    CV_FACE_RIGHT_EYE = 2
-};
-
-CVAPI(CvFaceTracker*) cvInitFaceTracker(CvFaceTracker* pFaceTracking, const IplImage* imgGray,
-                                                CvRect* pRects, int nRects);
-CVAPI(int) cvTrackFace( CvFaceTracker* pFaceTracker, IplImage* imgGray,
-                              CvRect* pRects, int nRects,
-                              CvPoint* ptRotate, double* dbAngleRotate);
-CVAPI(void) cvReleaseFaceTracker(CvFaceTracker** ppFaceTracker);
-
-
-typedef struct CvFace
-{
-    CvRect MouthRect;
-    CvRect LeftEyeRect;
-    CvRect RightEyeRect;
-} CvFaceData;
-
-CvSeq * cvFindFace(IplImage * Image,CvMemStorage* storage);
-CvSeq * cvPostBoostingFindFace(IplImage * Image,CvMemStorage* storage);
-
-
-/****************************************************************************************\
-*                                         3D Tracker                                     *
-\****************************************************************************************/
-
-typedef unsigned char CvBool;
-
-typedef struct
-{
-    int id;
-    CvPoint2D32f p; // pgruebele: So we do not loose precision, this needs to be float
-} Cv3dTracker2dTrackedObject;
-
-CV_INLINE Cv3dTracker2dTrackedObject cv3dTracker2dTrackedObject(int id, CvPoint2D32f p)
-{
-    Cv3dTracker2dTrackedObject r;
-    r.id = id;
-    r.p = p;
-    return r;
-}
-
-typedef struct
-{
-    int id;
-    CvPoint3D32f p;             // location of the tracked object
-} Cv3dTrackerTrackedObject;
-
-CV_INLINE Cv3dTrackerTrackedObject cv3dTrackerTrackedObject(int id, CvPoint3D32f p)
-{
-    Cv3dTrackerTrackedObject r;
-    r.id = id;
-    r.p = p;
-    return r;
-}
-
-typedef struct
-{
-    CvBool valid;
-    float mat[4][4];              /* maps camera coordinates to world coordinates */
-    CvPoint2D32f principal_point; /* copied from intrinsics so this structure */
-                                  /* has all the info we need */
-} Cv3dTrackerCameraInfo;
-
-typedef struct
-{
-    CvPoint2D32f principal_point;
-    float focal_length[2];
-    float distortion[4];
-} Cv3dTrackerCameraIntrinsics;
-
-CVAPI(CvBool) cv3dTrackerCalibrateCameras(int num_cameras,
-                     const Cv3dTrackerCameraIntrinsics camera_intrinsics[], /* size is num_cameras */
-                     CvSize etalon_size,
-                     float square_size,
-                     IplImage *samples[],                                   /* size is num_cameras */
-                     Cv3dTrackerCameraInfo camera_info[]);                  /* size is num_cameras */
-
-CVAPI(int)  cv3dTrackerLocateObjects(int num_cameras, int num_objects,
-                   const Cv3dTrackerCameraInfo camera_info[],        /* size is num_cameras */
-                   const Cv3dTracker2dTrackedObject tracking_info[], /* size is num_objects*num_cameras */
-                   Cv3dTrackerTrackedObject tracked_objects[]);      /* size is num_objects */
-/****************************************************************************************
- tracking_info is a rectangular array; one row per camera, num_objects elements per row.
- The id field of any unused slots must be -1. Ids need not be ordered or consecutive. On
- completion, the return value is the number of objects located; i.e., the number of objects
- visible by more than one camera. The id field of any unused slots in tracked objects is
- set to -1.
-****************************************************************************************/
-
-
-/****************************************************************************************\
-*                           Skeletons and Linear-Contour Models                          *
-\****************************************************************************************/
-
-typedef enum CvLeeParameters
-{
-    CV_LEE_INT = 0,
-    CV_LEE_FLOAT = 1,
-    CV_LEE_DOUBLE = 2,
-    CV_LEE_AUTO = -1,
-    CV_LEE_ERODE = 0,
-    CV_LEE_ZOOM = 1,
-    CV_LEE_NON = 2
-} CvLeeParameters;
-
-#define CV_NEXT_VORONOISITE2D( SITE ) ((SITE)->edge[0]->site[((SITE)->edge[0]->site[0] == (SITE))])
-#define CV_PREV_VORONOISITE2D( SITE ) ((SITE)->edge[1]->site[((SITE)->edge[1]->site[0] == (SITE))])
-#define CV_FIRST_VORONOIEDGE2D( SITE ) ((SITE)->edge[0])
-#define CV_LAST_VORONOIEDGE2D( SITE ) ((SITE)->edge[1])
-#define CV_NEXT_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[(EDGE)->site[0] != (SITE)])
-#define CV_PREV_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[2 + ((EDGE)->site[0] != (SITE))])
-#define CV_VORONOIEDGE2D_BEGINNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] != (SITE))])
-#define CV_VORONOIEDGE2D_ENDNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] == (SITE))])
-#define CV_TWIN_VORONOISITE2D( SITE, EDGE ) ( (EDGE)->site[((EDGE)->site[0] == (SITE))]) 
-
-#define CV_VORONOISITE2D_FIELDS()    \
-    struct CvVoronoiNode2D *node[2]; \
-    struct CvVoronoiEdge2D *edge[2];
-
-typedef struct CvVoronoiSite2D
-{
-    CV_VORONOISITE2D_FIELDS()
-    struct CvVoronoiSite2D *next[2];
-} CvVoronoiSite2D;
-
-#define CV_VORONOIEDGE2D_FIELDS()    \
-    struct CvVoronoiNode2D *node[2]; \
-    struct CvVoronoiSite2D *site[2]; \
-    struct CvVoronoiEdge2D *next[4];
-
-typedef struct CvVoronoiEdge2D
-{
-    CV_VORONOIEDGE2D_FIELDS()
-} CvVoronoiEdge2D;
-
-#define CV_VORONOINODE2D_FIELDS()       \
-    CV_SET_ELEM_FIELDS(CvVoronoiNode2D) \
-    CvPoint2D32f pt;                    \
-    float radius;
-
-typedef struct CvVoronoiNode2D
-{
-    CV_VORONOINODE2D_FIELDS()
-} CvVoronoiNode2D;
-
-#define CV_VORONOIDIAGRAM2D_FIELDS() \
-    CV_GRAPH_FIELDS()                \
-    CvSet *sites;
-
-typedef struct CvVoronoiDiagram2D
-{
-    CV_VORONOIDIAGRAM2D_FIELDS()
-} CvVoronoiDiagram2D;
-
-/* Computes Voronoi Diagram for given polygons with holes */
-CVAPI(int)  cvVoronoiDiagramFromContour(CvSeq* ContourSeq,
-                                           CvVoronoiDiagram2D** VoronoiDiagram,
-                                           CvMemStorage* VoronoiStorage,
-                                           CvLeeParameters contour_type CV_DEFAULT(CV_LEE_INT),
-                                           int contour_orientation CV_DEFAULT(-1),
-                                           int attempt_number CV_DEFAULT(10));
-
-/* Computes Voronoi Diagram for domains in given image */
-CVAPI(int)  cvVoronoiDiagramFromImage(IplImage* pImage,
-                                         CvSeq** ContourSeq,
-                                         CvVoronoiDiagram2D** VoronoiDiagram,
-                                         CvMemStorage* VoronoiStorage,
-                                         CvLeeParameters regularization_method CV_DEFAULT(CV_LEE_NON),
-                                         float approx_precision CV_DEFAULT(CV_LEE_AUTO));
-
-/* Deallocates the storage */
-CVAPI(void) cvReleaseVoronoiStorage(CvVoronoiDiagram2D* VoronoiDiagram,
-                                          CvMemStorage** pVoronoiStorage);
-
-/*********************** Linear-Contour Model ****************************/
-
-struct CvLCMEdge;
-struct CvLCMNode;
-
-typedef struct CvLCMEdge
-{
-    CV_GRAPH_EDGE_FIELDS() 
-    CvSeq* chain;
-    float width;
-    int index1;
-    int index2;
-} CvLCMEdge;
-
-typedef struct CvLCMNode
-{
-    CV_GRAPH_VERTEX_FIELDS()
-    CvContour* contour; 
-} CvLCMNode;
-
-
-/* Computes hybrid model from Voronoi Diagram */
-CVAPI(CvGraph*) cvLinearContorModelFromVoronoiDiagram(CvVoronoiDiagram2D* VoronoiDiagram,
-                                                         float maxWidth);
-
-/* Releases hybrid model storage */
-CVAPI(int) cvReleaseLinearContorModelStorage(CvGraph** Graph);
-
-
-/* two stereo-related functions */
-
-CVAPI(void) cvInitPerspectiveTransform( CvSize size, const CvPoint2D32f vertex[4], double matrix[3][3],
-                                              CvArr* rectMap );
-
-/*CVAPI(void) cvInitStereoRectification( CvStereoCamera* params,
-                                             CvArr* rectMap1, CvArr* rectMap2,
-                                             int do_undistortion );*/
-
-/*************************** View Morphing Functions ************************/
-
-/* The order of the function corresponds to the order they should appear in
-   the view morphing pipeline */ 
-
-/* Finds ending points of scanlines on left and right images of stereo-pair */
-CVAPI(void)  cvMakeScanlines( const CvMatrix3* matrix, CvSize  img_size,
-                              int*  scanlines1, int*  scanlines2,
-                              int*  lengths1, int*  lengths2,
-                              int*  line_count );
-
-/* Grab pixel values from scanlines and stores them sequentially
-   (some sort of perspective image transform) */
-CVAPI(void)  cvPreWarpImage( int       line_count,
-                             IplImage* img,
-                             uchar*    dst,
-                             int*      dst_nums,
-                             int*      scanlines);
-
-/* Approximate each grabbed scanline by a sequence of runs
-   (lossy run-length compression) */
-CVAPI(void)  cvFindRuns( int    line_count,
-                         uchar* prewarp1,
-                         uchar* prewarp2,
-                         int*   line_lengths1,
-                         int*   line_lengths2,
-                         int*   runs1,
-                         int*   runs2,
-                         int*   num_runs1,
-                         int*   num_runs2);
-
-/* Compares two sets of compressed scanlines */
-CVAPI(void)  cvDynamicCorrespondMulti( int  line_count,
-                                       int* first,
-                                       int* first_runs,
-                                       int* second,
-                                       int* second_runs,
-                                       int* first_corr,
-                                       int* second_corr);
-
-/* Finds scanline ending coordinates for some intermediate "virtual" camera position */
-CVAPI(void)  cvMakeAlphaScanlines( int*  scanlines1,
-                                   int*  scanlines2,
-                                   int*  scanlinesA,
-                                   int*  lengths,
-                                   int   line_count,
-                                   float alpha);
-
-/* Blends data of the left and right image scanlines to get
-   pixel values of "virtual" image scanlines */
-CVAPI(void)  cvMorphEpilinesMulti( int    line_count,
-                                   uchar* first_pix,
-                                   int*   first_num,
-                                   uchar* second_pix,
-                                   int*   second_num,
-                                   uchar* dst_pix,
-                                   int*   dst_num,
-                                   float  alpha,
-                                   int*   first,
-                                   int*   first_runs,
-                                   int*   second,
-                                   int*   second_runs,
-                                   int*   first_corr,
-                                   int*   second_corr);
-
-/* Does reverse warping of the morphing result to make
-   it fill the destination image rectangle */
-CVAPI(void)  cvPostWarpImage( int       line_count,
-                              uchar*    src,
-                              int*      src_nums,
-                              IplImage* img,
-                              int*      scanlines);
-
-/* Deletes Moire (missed pixels that appear due to discretization) */
-CVAPI(void)  cvDeleteMoire( IplImage*  img );
-
-
-/****************************************************************************************\
-*                           Background/foreground segmentation                           *
-\****************************************************************************************/
-
-/* We discriminate between foreground and background pixels
- * by building and maintaining a model of the background.
- * Any pixel which does not fit this model is then deemed
- * to be foreground.
- *
- * At present we support two core background models,
- * one of which has two variations:
- *
- *  o CV_BG_MODEL_FGD: latest and greatest algorithm, described in
- *    
- *      Foreground Object Detection from Videos Containing Complex Background.
- *      Liyuan Li, Weimin Huang, Irene Y.H. Gu, and Qi Tian. 
- *      ACM MM2003 9p
- *      http://muq.org/~cynbe/bib/foreground-object-detection-from-videos-containing-complex-background.pdf
- *
- *  o CV_BG_MODEL_FGD_SIMPLE:
- *       A code comment describes this as a simplified version of the above,
- *       but the code is in fact currently identical. (Cynbe 2008-05-25)
- *
- *  o CV_BG_MODEL_MOG: "Mixture of Gaussians", older algorithm, described in
- *
- *       Moving target classification and tracking from real-time video.
- *       A Lipton, H Fujijoshi, R Patil
- *       Proceedings IEEE Workshop on Application of Computer Vision pp 8-14 1998
- *       http://www.vision.cs.chubu.ac.jp/04/pdf/VSAM02.pdf
- *
- *       Learning patterns of activity using real-time tracking
- *       C Stauffer and W Grimson  August 2000
- *       IEEE Transactions on Pattern Analysis and Machine Intelligence 22(8):747-757
- *       http://people.csail.mit.edu/people/stauffer/Home/_papers/vsam-pami-tracking.ps
- *
- * Additional background may be found on the Wiki page
- *
- *       http://opencvlibrary.sourceforge.net/VideoSurveillance
- *
- * which in particular recommends the Intel semi-popular overview article
- *
- *       Computer Vision Workload Analysis: Case Study of Video Surveillance Systems
- *       Chen et al, Intel Technology Journal V09:02 , 2005 12p
- *       http://developer.intel.com/technology/itj/2005/volume09issue02/art02_computer_vision/vol09_art02.pdf
- *
- * which has both a good overview of the blobtracker software in particular,
- * and also many references to introductory (and advanced) papers on computer vision.
- *
- */
-
-
-#define CV_BG_MODEL_FGD                0
-#define CV_BG_MODEL_MOG                1                       /* "Mixture of Gaussians".      */
-#define CV_BG_MODEL_FGD_SIMPLE 2
-
-struct CvBGStatModel;
-
-typedef void (CV_CDECL * CvReleaseBGStatModel)( struct CvBGStatModel** bg_model );
-typedef int (CV_CDECL * CvUpdateBGStatModel)( IplImage* curr_frame, struct CvBGStatModel* bg_model );
-
-#define CV_BG_STAT_MODEL_FIELDS()                                                   \
-    int             type; /*type of BG model*/                                      \
-    CvReleaseBGStatModel release;                                                   \
-    CvUpdateBGStatModel update;                                                     \
-    IplImage*       background;   /*8UC3 reference background image*/               \
-    IplImage*       foreground;   /*8UC1 foreground image*/                         \
-    IplImage**      layers;       /*8UC3 reference background image, can be null */ \
-    int             layer_count;  /* can be zero */                                 \
-    CvMemStorage*   storage;      /*storage for \93foreground_regions\94*/              \
-    CvSeq*          foreground_regions /*foreground object contours*/
-
-typedef struct CvBGStatModel
-{
-    CV_BG_STAT_MODEL_FIELDS();
-}
-CvBGStatModel;
-
-// 
-
-// Releases memory used by BGStatModel
-CV_INLINE void cvReleaseBGStatModel( CvBGStatModel** bg_model )
-{
-    if( bg_model && *bg_model && (*bg_model)->release )
-        (*bg_model)->release( bg_model );
-}
-
-// Updates statistical model and returns number of found foreground regions
-CV_INLINE int cvUpdateBGStatModel( IplImage* current_frame, CvBGStatModel*  bg_model )
-{
-    return bg_model && bg_model->update ? bg_model->update( current_frame, bg_model ) : 0;
-}
-
-// Performs FG post-processing using segmentation
-// (all pixels of a region will be classified as foreground if majority of pixels of the region are FG).
-// parameters:
-//      segments - pointer to result of segmentation (for example MeanShiftSegmentation)
-//      bg_model - pointer to CvBGStatModel structure
-CVAPI(void) cvRefineForegroundMaskBySegm( CvSeq* segments, CvBGStatModel*  bg_model );
-
-/* Common use change detection function */
-CVAPI(int)  cvChangeDetection( IplImage*  prev_frame,
-                               IplImage*  curr_frame,
-                               IplImage*  change_mask );
-
-/*
-  Interface of ACM MM2003 algorithm
-*/
-
-/* Default parameters of foreground detection algorithm: */
-#define  CV_BGFG_FGD_LC              128
-#define  CV_BGFG_FGD_N1C             15
-#define  CV_BGFG_FGD_N2C             25
-
-#define  CV_BGFG_FGD_LCC             64
-#define  CV_BGFG_FGD_N1CC            25
-#define  CV_BGFG_FGD_N2CC            40
-
-/* Background reference image update parameter: */
-#define  CV_BGFG_FGD_ALPHA_1         0.1f
-
-/* stat model update parameter
- * 0.002f ~ 1K frame(~45sec), 0.005 ~ 18sec (if 25fps and absolutely static BG)
- */
-#define  CV_BGFG_FGD_ALPHA_2         0.005f
-
-/* start value for alpha parameter (to fast initiate statistic model) */
-#define  CV_BGFG_FGD_ALPHA_3         0.1f
-
-#define  CV_BGFG_FGD_DELTA           2
-
-#define  CV_BGFG_FGD_T               0.9f
-
-#define  CV_BGFG_FGD_MINAREA         15.f
-
-#define  CV_BGFG_FGD_BG_UPDATE_TRESH 0.5f
-
-/* See the above-referenced Li/Huang/Gu/Tian paper
- * for a full description of these background-model
- * tuning parameters.
- *
- * Nomenclature:  'c'  == "color", a three-component red/green/blue vector.
- *                         We use histograms of these to model the range of
- *                         colors we've seen at a given background pixel.
- *
- *                'cc' == "color co-occurrence", a six-component vector giving
- *                         RGB color for both this frame and preceding frame.
- *                             We use histograms of these to model the range of
- *                         color CHANGES we've seen at a given background pixel.
- */
-typedef struct CvFGDStatModelParams
-{
-    int    Lc;                 /* Quantized levels per 'color' component. Power of two, typically 32, 64 or 128.                               */
-    int    N1c;                        /* Number of color vectors used to model normal background color variation at a given pixel.                    */
-    int    N2c;                        /* Number of color vectors retained at given pixel.  Must be > N1c, typically ~ 5/3 of N1c.                     */
-                               /* Used to allow the first N1c vectors to adapt over time to changing background.                               */
-
-    int    Lcc;                        /* Quantized levels per 'color co-occurrence' component.  Power of two, typically 16, 32 or 64.                 */
-    int    N1cc;               /* Number of color co-occurrence vectors used to model normal background color variation at a given pixel.      */
-    int    N2cc;               /* Number of color co-occurrence vectors retained at given pixel.  Must be > N1cc, typically ~ 5/3 of N1cc.     */
-                               /* Used to allow the first N1cc vectors to adapt over time to changing background.                              */
-
-    int    is_obj_without_holes;/* If TRUE we ignore holes within foreground blobs. Defaults to TRUE.                                          */
-    int    perform_morphing;   /* Number of erode-dilate-erode foreground-blob cleanup iterations.                                             */
-                               /* These erase one-pixel junk blobs and merge almost-touching blobs. Default value is 1.                        */
-
-    float  alpha1;             /* How quickly we forget old background pixel values seen.  Typically set to 0.1                                */
-    float  alpha2;             /* "Controls speed of feature learning". Depends on T. Typical value circa 0.005.                               */
-    float  alpha3;             /* Alternate to alpha2, used (e.g.) for quicker initial convergence. Typical value 0.1.                         */
-
-    float  delta;              /* Affects color and color co-occurrence quantization, typically set to 2.                                      */
-    float  T;                  /* "A percentage value which determines when new features can be recognized as new background." (Typically 0.9).*/
-    float  minArea;            /* Discard foreground blobs whose bounding box is smaller than this threshold.                                  */
-}
-CvFGDStatModelParams;
-
-typedef struct CvBGPixelCStatTable
-{
-    float          Pv, Pvb;
-    uchar          v[3];
-}
-CvBGPixelCStatTable;
-
-typedef struct CvBGPixelCCStatTable
-{
-    float          Pv, Pvb;
-    uchar          v[6];
-}
-CvBGPixelCCStatTable;
-
-typedef struct CvBGPixelStat
-{
-    float                 Pbc;
-    float                 Pbcc;
-    CvBGPixelCStatTable*  ctable;
-    CvBGPixelCCStatTable* cctable;
-    uchar                 is_trained_st_model;
-    uchar                 is_trained_dyn_model;
-}
-CvBGPixelStat;
-
-
-typedef struct CvFGDStatModel
-{
-    CV_BG_STAT_MODEL_FIELDS();
-    CvBGPixelStat*         pixel_stat;
-    IplImage*              Ftd;
-    IplImage*              Fbd;
-    IplImage*              prev_frame;
-    CvFGDStatModelParams   params;
-}
-CvFGDStatModel;
-
-/* Creates FGD model */
-CVAPI(CvBGStatModel*) cvCreateFGDStatModel( IplImage* first_frame,
-                    CvFGDStatModelParams* parameters CV_DEFAULT(NULL));
-
-/* 
-   Interface of Gaussian mixture algorithm
-
-   "An improved adaptive background mixture model for real-time tracking with shadow detection"
-   P. KadewTraKuPong and R. Bowden,
-   Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001."
-   http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf
-*/
-
-/* Note:  "MOG" == "Mixture Of Gaussians": */
-
-#define CV_BGFG_MOG_MAX_NGAUSSIANS 500
-
-/* default parameters of gaussian background detection algorithm */
-#define CV_BGFG_MOG_BACKGROUND_THRESHOLD     0.7     /* threshold sum of weights for background test */
-#define CV_BGFG_MOG_STD_THRESHOLD            2.5     /* lambda=2.5 is 99% */
-#define CV_BGFG_MOG_WINDOW_SIZE              200     /* Learning rate; alpha = 1/CV_GBG_WINDOW_SIZE */
-#define CV_BGFG_MOG_NGAUSSIANS               5       /* = K = number of Gaussians in mixture */
-#define CV_BGFG_MOG_WEIGHT_INIT              0.05
-#define CV_BGFG_MOG_SIGMA_INIT               30
-#define CV_BGFG_MOG_MINAREA                  15.f
-
-
-#define CV_BGFG_MOG_NCOLORS                  3
-
-typedef struct CvGaussBGStatModelParams
-{    
-    int     win_size;               /* = 1/alpha */
-    int     n_gauss;
-    double  bg_threshold, std_threshold, minArea;
-    double  weight_init, variance_init;
-}CvGaussBGStatModelParams;
-
-typedef struct CvGaussBGValues
-{
-    int         match_sum;
-    double      weight;
-    double      variance[CV_BGFG_MOG_NCOLORS];
-    double      mean[CV_BGFG_MOG_NCOLORS];
-}
-CvGaussBGValues;
-
-typedef struct CvGaussBGPoint
-{
-    CvGaussBGValues* g_values;
-}
-CvGaussBGPoint;
-
-
-typedef struct CvGaussBGModel
-{
-    CV_BG_STAT_MODEL_FIELDS();
-    CvGaussBGStatModelParams   params;    
-    CvGaussBGPoint*            g_point;    
-    int                        countFrames;
-}
-CvGaussBGModel;
-
-
-/* Creates Gaussian mixture background model */
-CVAPI(CvBGStatModel*) cvCreateGaussianBGModel( IplImage* first_frame,
-                CvGaussBGStatModelParams* parameters CV_DEFAULT(NULL));
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __cplusplus
-
-/****************************************************************************************\
-*                                   Calibration engine                                   *
-\****************************************************************************************/
-
-typedef enum CvCalibEtalonType
-{
-    CV_CALIB_ETALON_USER = -1,
-    CV_CALIB_ETALON_CHESSBOARD = 0,
-    CV_CALIB_ETALON_CHECKERBOARD = CV_CALIB_ETALON_CHESSBOARD
-}
-CvCalibEtalonType;
-
-class CV_EXPORTS CvCalibFilter
-{
-public:
-    /* Constructor & destructor */
-    CvCalibFilter();
-    virtual ~CvCalibFilter();
-
-    /* Sets etalon type - one for all cameras.
-       etalonParams is used in case of pre-defined etalons (such as chessboard).
-       Number of elements in etalonParams is determined by etalonType.
-       E.g., if etalon type is CV_ETALON_TYPE_CHESSBOARD then:
-         etalonParams[0] is number of squares per one side of etalon
-         etalonParams[1] is number of squares per another side of etalon
-         etalonParams[2] is linear size of squares in the board in arbitrary units.
-       pointCount & points are used in case of
-       CV_CALIB_ETALON_USER (user-defined) etalon. */
-    virtual bool
-        SetEtalon( CvCalibEtalonType etalonType, double* etalonParams,
-                   int pointCount = 0, CvPoint2D32f* points = 0 );
-
-    /* Retrieves etalon parameters/or and points */
-    virtual CvCalibEtalonType
-        GetEtalon( int* paramCount = 0, const double** etalonParams = 0,
-                   int* pointCount = 0, const CvPoint2D32f** etalonPoints = 0 ) const;
-
-    /* Sets number of cameras calibrated simultaneously. It is equal to 1 initially */
-    virtual void SetCameraCount( int cameraCount );
-
-    /* Retrieves number of cameras */
-    int GetCameraCount() const { return cameraCount; }
-
-    /* Starts cameras calibration */
-    virtual bool SetFrames( int totalFrames );
-    
-    /* Stops cameras calibration */
-    virtual void Stop( bool calibrate = false );
-
-    /* Retrieves number of cameras */
-    bool IsCalibrated() const { return isCalibrated; }
-
-    /* Feeds another serie of snapshots (one per each camera) to filter.
-       Etalon points on these images are found automatically.
-       If the function can't locate points, it returns false */
-    virtual bool FindEtalon( IplImage** imgs );
-
-    /* The same but takes matrices */
-    virtual bool FindEtalon( CvMat** imgs );
-
-    /* Lower-level function for feeding filter with already found etalon points.
-       Array of point arrays for each camera is passed. */
-    virtual bool Push( const CvPoint2D32f** points = 0 );
-
-    /* Returns total number of accepted frames and, optionally,
-       total number of frames to collect */
-    virtual int GetFrameCount( int* framesTotal = 0 ) const;
-
-    /* Retrieves camera parameters for specified camera.
-       If camera is not calibrated the function returns 0 */
-    virtual const CvCamera* GetCameraParams( int idx = 0 ) const;
-
-    virtual const CvStereoCamera* GetStereoParams() const;
-
-    /* Sets camera parameters for all cameras */
-    virtual bool SetCameraParams( CvCamera* params );
-
-    /* Saves all camera parameters to file */
-    virtual bool SaveCameraParams( const char* filename );
-    
-    /* Loads all camera parameters from file */
-    virtual bool LoadCameraParams( const char* filename );
-
-    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */
-    virtual bool Undistort( IplImage** src, IplImage** dst );
-
-    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */
-    virtual bool Undistort( CvMat** src, CvMat** dst );
-
-    /* Returns array of etalon points detected/partally detected
-       on the latest frame for idx-th camera */
-    virtual bool GetLatestPoints( int idx, CvPoint2D32f** pts,
-                                                  int* count, bool* found );
-
-    /* Draw the latest detected/partially detected etalon */
-    virtual void DrawPoints( IplImage** dst );
-
-    /* Draw the latest detected/partially detected etalon */
-    virtual void DrawPoints( CvMat** dst );
-
-    virtual bool Rectify( IplImage** srcarr, IplImage** dstarr );
-    virtual bool Rectify( CvMat** srcarr, CvMat** dstarr );
-
-protected:
-
-    enum { MAX_CAMERAS = 3 };
-
-    /* etalon data */
-    CvCalibEtalonType  etalonType;
-    int     etalonParamCount;
-    double* etalonParams;
-    int     etalonPointCount;
-    CvPoint2D32f* etalonPoints;
-    CvSize  imgSize;
-    CvMat*  grayImg;
-    CvMat*  tempImg;
-    CvMemStorage* storage;
-
-    /* camera data */
-    int     cameraCount;
-    CvCamera cameraParams[MAX_CAMERAS];
-    CvStereoCamera stereo;
-    CvPoint2D32f* points[MAX_CAMERAS];
-    CvMat*  undistMap[MAX_CAMERAS][2];
-    CvMat*  undistImg;
-    int     latestCounts[MAX_CAMERAS];
-    CvPoint2D32f* latestPoints[MAX_CAMERAS];
-    CvMat*  rectMap[MAX_CAMERAS][2];
-
-    /* Added by Valery */
-    //CvStereoCamera stereoParams;
-
-    int     maxPoints;
-    int     framesTotal;
-    int     framesAccepted;
-    bool    isCalibrated;
-};
-
-#include "cvaux.hpp"
-#include "cvvidsurv.hpp"
-/*#include "cvmat.hpp"*/
-#endif
-
-#endif
-
-/* End of file. */