topical media & game development

talk show tell print

lib-of-vs-addons-ofxOpenCv-libs-opencv-include-cvtypes.h / h



  /*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 _CVTYPES_H_ define _CVTYPES_H_ ifndef SKIP_INCLUDES #include <assert.h> #include <stdlib.h> endif /* spatial and central moments */ typedef struct CvMoments { double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ } CvMoments; /* Hu invariants */ typedef struct CvHuMoments { double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */ } CvHuMoments;
************************** Connected Component *************************************

  
  
  typedef struct CvConnectedComp
  {
      double area;    /* area of the connected component  */
      CvScalar value; /* average color of the connected component */
      CvRect rect;    /* ROI of the component  */
      CvSeq* contour; /* optional component boundary
                        (the contour might have child contours corresponding to the holes)*/
  }
  CvConnectedComp;
  
  /*
  Internal structure that is used for sequental retrieving contours from the image.
  It supports both hierarchical and plane variants of Suzuki algorithm.
  */
  typedef struct _CvContourScanner* CvContourScanner;
  
  /* contour retrieval mode */
  define CV_RETR_EXTERNAL 0
  define CV_RETR_LIST     1
  define CV_RETR_CCOMP    2
  define CV_RETR_TREE     3
  
  /* contour approximation method */
  define CV_CHAIN_CODE               0
  define CV_CHAIN_APPROX_NONE        1
  define CV_CHAIN_APPROX_SIMPLE      2
  define CV_CHAIN_APPROX_TC89_L1     3
  define CV_CHAIN_APPROX_TC89_KCOS   4
  define CV_LINK_RUNS                5
  
  /* Freeman chain reader state */
  typedef struct CvChainPtReader
  {
      CV_SEQ_READER_FIELDS()
      char      code;
      CvPoint   pt;
      schar     deltas[8][2];
  }
  CvChainPtReader;
  
  /* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */
  define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \
      ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \
       (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \
       (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \
       (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))
  
  /* Contour tree header */
  typedef struct CvContourTree
  {
      CV_SEQUENCE_FIELDS()
      CvPoint p1;            /* the first point of the binary tree root segment */
      CvPoint p2;            /* the last point of the binary tree root segment */
  }
  CvContourTree;
  
  /* Finds a sequence of convexity defects of given contour */
  typedef struct CvConvexityDefect
  {
      CvPoint* start; /* point of the contour where the defect begins */
      CvPoint* end; /* point of the contour where the defect ends */
      CvPoint* depth_point; /* the farthest from the convex hull point within the defect */
      float depth; /* distance between the farthest point and the convex hull */
  }
  CvConvexityDefect;
  
  
********** Data structures and related enumerations for Planar Subdivisions ***********

  
  
  typedef size_t CvSubdiv2DEdge;
  
  define CV_QUADEDGE2D_FIELDS()     \
      int flags;                     \
      struct CvSubdiv2DPoint* pt[4]; \
      CvSubdiv2DEdge  next[4];
  
  define CV_SUBDIV2D_POINT_FIELDS()\
      int            flags;      \
      CvSubdiv2DEdge first;      \
      CvPoint2D32f   pt;
  
  define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30)
  
  typedef struct CvQuadEdge2D
  {
      CV_QUADEDGE2D_FIELDS()
  }
  CvQuadEdge2D;
  
  typedef struct CvSubdiv2DPoint
  {
      CV_SUBDIV2D_POINT_FIELDS()
  }
  CvSubdiv2DPoint;
  
  define CV_SUBDIV2D_FIELDS()    \
      CV_GRAPH_FIELDS()           \
      int  quad_edges;            \
      int  is_geometry_valid;     \
      CvSubdiv2DEdge recent_edge; \
      CvPoint2D32f  topleft;      \
      CvPoint2D32f  bottomright;
  
  typedef struct CvSubdiv2D
  {
      CV_SUBDIV2D_FIELDS()
  }
  CvSubdiv2D;
  
  typedef enum CvSubdiv2DPointLocation
  {
      CV_PTLOC_ERROR = -2,
      CV_PTLOC_OUTSIDE_RECT = -1,
      CV_PTLOC_INSIDE = 0,
      CV_PTLOC_VERTEX = 1,
      CV_PTLOC_ON_EDGE = 2
  }
  CvSubdiv2DPointLocation;
  
  typedef enum CvNextEdgeType
  {
      CV_NEXT_AROUND_ORG   = 0x00,
      CV_NEXT_AROUND_DST   = 0x22,
      CV_PREV_AROUND_ORG   = 0x11,
      CV_PREV_AROUND_DST   = 0x33,
      CV_NEXT_AROUND_LEFT  = 0x13,
      CV_NEXT_AROUND_RIGHT = 0x31,
      CV_PREV_AROUND_LEFT  = 0x20,
      CV_PREV_AROUND_RIGHT = 0x02
  }
  CvNextEdgeType;
  
  /* get the next edge with the same origin point (counterwise) */
  define  CV_SUBDIV2D_NEXT_EDGE( edge )  (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3])
  
  /* Defines for Distance Transform */
  define CV_DIST_USER    -1  /* User defined distance */
  define CV_DIST_L1      1   /* distance = |x1-x2| + |y1-y2| */
  define CV_DIST_L2      2   /* the simple euclidean distance */
  define CV_DIST_C       3   /* distance = max(|x1-x2|,|y1-y2|) */
  define CV_DIST_L12     4   /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */
  define CV_DIST_FAIR    5   /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */
  define CV_DIST_WELSCH  6   /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */
  define CV_DIST_HUBER   7   /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */
  
  /* Filters used in pyramid decomposition */
  typedef enum CvFilter
  {
      CV_GAUSSIAN_5x5 = 7
  }
  CvFilter;
  
  
*************************************************************************************

  
  /*                                    Older definitions                                 */
  
*************************************************************************************

  
  
  typedef float*   CvVect32f;
  typedef float*   CvMatr32f;
  typedef double*  CvVect64d;
  typedef double*  CvMatr64d;
  
  typedef struct CvMatrix3
  {
      float m[3][3];
  }
  CvMatrix3;
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  typedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );
  
  ifdef __cplusplus
  }
  endif
  
  typedef struct CvConDensation
  {
      int MP;
      int DP;
      float* DynamMatr;       /* Matrix of the linear Dynamics system  */
      float* State;           /* Vector of State                       */
      int SamplesNum;         /* Number of the Samples                 */
      float** flSamples;      /* arr of the Sample Vectors             */
      float** flNewSamples;   /* temporary array of the Sample Vectors */
      float* flConfidence;    /* Confidence for each Sample            */
      float* flCumulative;    /* Cumulative confidence                 */
      float* Temp;            /* Temporary vector                      */
      float* RandomSample;    /* RandomVector to update sample set     */
      struct CvRandState* RandS; /* Array of structures to generate random vectors */
  }
  CvConDensation;
  
  /*
  standard Kalman filter (in G. Welch' and G. Bishop's notation):
  
    x(k)=A*x(k-1)+B*u(k)+w(k)  p(w)~N(0,Q)
    z(k)=H*x(k)+v(k),   p(v)~N(0,R)
  */
  typedef struct CvKalman
  {
      int MP;                     /* number of measurement vector dimensions */
      int DP;                     /* number of state vector dimensions */
      int CP;                     /* number of control vector dimensions */
  
      /* backward compatibility fields */
  if 1
      float* PosterState;         /* =state_pre->data.fl */
      float* PriorState;          /* =state_post->data.fl */
      float* DynamMatr;           /* =transition_matrix->data.fl */
      float* MeasurementMatr;     /* =measurement_matrix->data.fl */
      float* MNCovariance;        /* =measurement_noise_cov->data.fl */
      float* PNCovariance;        /* =process_noise_cov->data.fl */
      float* KalmGainMatr;        /* =gain->data.fl */
      float* PriorErrorCovariance;/* =error_cov_pre->data.fl */
      float* PosterErrorCovariance;/* =error_cov_post->data.fl */
      float* Temp1;               /* temp1->data.fl */
      float* Temp2;               /* temp2->data.fl */
  endif
  
      CvMat* state_pre;           /* predicted state (x'(k)):
                                      x(k)=A*x(k-1)+B*u(k) */
      CvMat* state_post;          /* corrected state (x(k)):
                                      x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) */
      CvMat* transition_matrix;   /* state transition matrix (A) */
      CvMat* control_matrix;      /* control matrix (B)
                                     (it is not used if there is no control)*/
      CvMat* measurement_matrix;  /* measurement matrix (H) */
      CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */
      CvMat* measurement_noise_cov; /* measurement noise covariance matrix (R) */
      CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):
                                      P'(k)=A*P(k-1)*At + Q)*/
      CvMat* gain;                /* Kalman gain matrix (K(k)):
                                      K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/
      CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):
                                      P(k)=(I-K(k)*H)*P'(k) */
      CvMat* temp1;               /* temporary matrices */
      CvMat* temp2;
      CvMat* temp3;
      CvMat* temp4;
      CvMat* temp5;
  }
  CvKalman;
  
  
********************* Haar-like Object Detection structures *************************

  
  define CV_HAAR_MAGIC_VAL    0x42500000
  define CV_TYPE_NAME_HAAR    "opencv-haar-classifier"
  
  define CV_IS_HAAR_CLASSIFIER( haar )                                                    \
      ((haar) != NULL &&                                                                   \
      (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)
  
  define CV_HAAR_FEATURE_MAX  3
  
  typedef struct CvHaarFeature
  {
      int  tilted;
      struct
      {
          CvRect r;
          float weight;
      } rect[CV_HAAR_FEATURE_MAX];
  }
  CvHaarFeature;
  
  typedef struct CvHaarClassifier
  {
      int count;
      CvHaarFeature* haar_feature;
      float* threshold;
      int* left;
      int* right;
      float* alpha;
  }
  CvHaarClassifier;
  
  typedef struct CvHaarStageClassifier
  {
      int  count;
      float threshold;
      CvHaarClassifier* classifier;
  
      int next;
      int child;
      int parent;
  }
  CvHaarStageClassifier;
  
  typedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;
  
  typedef struct CvHaarClassifierCascade
  {
      int  flags;
      int  count;
      CvSize orig_window_size;
      CvSize real_window_size;
      double scale;
      CvHaarStageClassifier* stage_classifier;
      CvHidHaarClassifierCascade* hid_cascade;
  }
  CvHaarClassifierCascade;
  
  typedef struct CvAvgComp
  {
      CvRect rect;
      int neighbors;
  }
  CvAvgComp;
  
  struct CvFeatureTree;
  
  endif /*_CVTYPES_H_*/
  
  /* End of file. */
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.