cvtypes.h
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:12k
源码类别:

波变换

开发平台:

Visual C++

  1. /*M///////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
  4. //
  5. //  By downloading, copying, installing or using the software you agree to this license.
  6. //  If you do not agree to this license, do not download, install,
  7. //  copy or use the software.
  8. //
  9. //
  10. //                        Intel License Agreement
  11. //                For Open Source Computer Vision Library
  12. //
  13. // Copyright (C) 2000, Intel Corporation, all rights reserved.
  14. // Third party copyrights are property of their respective owners.
  15. //
  16. // Redistribution and use in source and binary forms, with or without modification,
  17. // are permitted provided that the following conditions are met:
  18. //
  19. //   * Redistribution's of source code must retain the above copyright notice,
  20. //     this list of conditions and the following disclaimer.
  21. //
  22. //   * Redistribution's in binary form must reproduce the above copyright notice,
  23. //     this list of conditions and the following disclaimer in the documentation
  24. //     and/or other materials provided with the distribution.
  25. //
  26. //   * The name of Intel Corporation may not be used to endorse or promote products
  27. //     derived from this software without specific prior written permission.
  28. //
  29. // This software is provided by the copyright holders and contributors "as is" and
  30. // any express or implied warranties, including, but not limited to, the implied
  31. // warranties of merchantability and fitness for a particular purpose are disclaimed.
  32. // In no event shall the Intel Corporation or contributors be liable for any direct,
  33. // indirect, incidental, special, exemplary, or consequential damages
  34. // (including, but not limited to, procurement of substitute goods or services;
  35. // loss of use, data, or profits; or business interruption) however caused
  36. // and on any theory of liability, whether in contract, strict liability,
  37. // or tort (including negligence or otherwise) arising in any way out of
  38. // the use of this software, even if advised of the possibility of such damage.
  39. //
  40. //M*/
  41. #ifndef _CVTYPES_H_
  42. #define _CVTYPES_H_
  43. #ifndef SKIP_INCLUDES
  44.   #include <assert.h>
  45.   #include <stdlib.h>
  46. #endif
  47. /* spatial and central moments */
  48. typedef struct CvMoments
  49. {
  50.     double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */
  51.     double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */
  52.     double  inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */
  53. }
  54. CvMoments;
  55. /* Hu invariants */
  56. typedef struct CvHuMoments
  57. {
  58.     double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */
  59. }
  60. CvHuMoments;
  61. /**************************** Connected Component  **************************************/
  62. typedef struct CvConnectedComp
  63. {
  64.     double area;    /* area of the connected component  */
  65.     CvScalar value; /* average color of the connected component */
  66.     CvRect rect;    /* ROI of the component  */
  67.     CvSeq* contour; /* optional component boundary
  68.                       (the contour might have child contours corresponding to the holes)*/
  69. }
  70. CvConnectedComp;
  71. /*
  72. Internal structure that is used for sequental retrieving contours from the image.
  73. It supports both hierarchical and plane variants of Suzuki algorithm.
  74. */
  75. typedef struct _CvContourScanner* CvContourScanner;
  76. /* contour retrieval mode */
  77. #define CV_RETR_EXTERNAL 0
  78. #define CV_RETR_LIST     1
  79. #define CV_RETR_CCOMP    2
  80. #define CV_RETR_TREE     3
  81. /* contour approximation method */
  82. #define CV_CHAIN_CODE               0
  83. #define CV_CHAIN_APPROX_NONE        1
  84. #define CV_CHAIN_APPROX_SIMPLE      2
  85. #define CV_CHAIN_APPROX_TC89_L1     3
  86. #define CV_CHAIN_APPROX_TC89_KCOS   4
  87. #define CV_LINK_RUNS                5
  88. /* Freeman chain reader state */
  89. typedef struct CvChainPtReader
  90. {
  91.     CV_SEQ_READER_FIELDS()
  92.     char      code;
  93.     CvPoint   pt;
  94.     schar     deltas[8][2];
  95. }
  96. CvChainPtReader;
  97. /* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */
  98. #define  CV_INIT_3X3_DELTAS( deltas, step, nch )            
  99.     ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  
  100.      (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  
  101.      (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  
  102.      (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))
  103. /* Contour tree header */
  104. typedef struct CvContourTree
  105. {
  106.     CV_SEQUENCE_FIELDS()
  107.     CvPoint p1;            /* the first point of the binary tree root segment */
  108.     CvPoint p2;            /* the last point of the binary tree root segment */
  109. }
  110. CvContourTree;
  111. /* Finds a sequence of convexity defects of given contour */
  112. typedef struct CvConvexityDefect
  113. {
  114.     CvPoint* start; /* point of the contour where the defect begins */
  115.     CvPoint* end; /* point of the contour where the defect ends */
  116.     CvPoint* depth_point; /* the farthest from the convex hull point within the defect */
  117.     float depth; /* distance between the farthest point and the convex hull */
  118. }
  119. CvConvexityDefect;
  120. /************ Data structures and related enumerations for Planar Subdivisions ************/
  121. typedef size_t CvSubdiv2DEdge;
  122. #define CV_QUADEDGE2D_FIELDS()     
  123.     int flags;                     
  124.     struct CvSubdiv2DPoint* pt[4]; 
  125.     CvSubdiv2DEdge  next[4];
  126. #define CV_SUBDIV2D_POINT_FIELDS()
  127.     int            flags;      
  128.     CvSubdiv2DEdge first;      
  129.     CvPoint2D32f   pt;
  130. #define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30)
  131. typedef struct CvQuadEdge2D
  132. {
  133.     CV_QUADEDGE2D_FIELDS()
  134. }
  135. CvQuadEdge2D;
  136. typedef struct CvSubdiv2DPoint
  137. {
  138.     CV_SUBDIV2D_POINT_FIELDS()
  139. }
  140. CvSubdiv2DPoint;
  141. #define CV_SUBDIV2D_FIELDS()    
  142.     CV_GRAPH_FIELDS()           
  143.     int  quad_edges;            
  144.     int  is_geometry_valid;     
  145.     CvSubdiv2DEdge recent_edge; 
  146.     CvPoint2D32f  topleft;      
  147.     CvPoint2D32f  bottomright;
  148. typedef struct CvSubdiv2D
  149. {
  150.     CV_SUBDIV2D_FIELDS()
  151. }
  152. CvSubdiv2D;
  153. typedef enum CvSubdiv2DPointLocation
  154. {
  155.     CV_PTLOC_ERROR = -2,
  156.     CV_PTLOC_OUTSIDE_RECT = -1,
  157.     CV_PTLOC_INSIDE = 0,
  158.     CV_PTLOC_VERTEX = 1,
  159.     CV_PTLOC_ON_EDGE = 2
  160. }
  161. CvSubdiv2DPointLocation;
  162. typedef enum CvNextEdgeType
  163. {
  164.     CV_NEXT_AROUND_ORG   = 0x00,
  165.     CV_NEXT_AROUND_DST   = 0x22,
  166.     CV_PREV_AROUND_ORG   = 0x11,
  167.     CV_PREV_AROUND_DST   = 0x33,
  168.     CV_NEXT_AROUND_LEFT  = 0x13,
  169.     CV_NEXT_AROUND_RIGHT = 0x31,
  170.     CV_PREV_AROUND_LEFT  = 0x20,
  171.     CV_PREV_AROUND_RIGHT = 0x02
  172. }
  173. CvNextEdgeType;
  174. /* get the next edge with the same origin point (counterwise) */
  175. #define  CV_SUBDIV2D_NEXT_EDGE( edge )  (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3])
  176. /* Defines for Distance Transform */
  177. #define CV_DIST_USER    -1  /* User defined distance */
  178. #define CV_DIST_L1      1   /* distance = |x1-x2| + |y1-y2| */
  179. #define CV_DIST_L2      2   /* the simple euclidean distance */
  180. #define CV_DIST_C       3   /* distance = max(|x1-x2|,|y1-y2|) */
  181. #define CV_DIST_L12     4   /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */
  182. #define CV_DIST_FAIR    5   /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */
  183. #define CV_DIST_WELSCH  6   /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */
  184. #define CV_DIST_HUBER   7   /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */
  185. /* Filters used in pyramid decomposition */
  186. typedef enum CvFilter
  187. {
  188.     CV_GAUSSIAN_5x5 = 7
  189. }
  190. CvFilter;
  191. /****************************************************************************************/
  192. /*                                    Older definitions                                 */
  193. /****************************************************************************************/
  194. typedef float*   CvVect32f;
  195. typedef float*   CvMatr32f;
  196. typedef double*  CvVect64d;
  197. typedef double*  CvMatr64d;
  198. typedef struct CvMatrix3
  199. {
  200.     float m[3][3];
  201. }
  202. CvMatrix3;
  203. #ifdef __cplusplus
  204. extern "C" {
  205. #endif
  206. typedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );
  207. #ifdef __cplusplus
  208. }
  209. #endif
  210. typedef struct CvConDensation
  211. {
  212.     int MP;
  213.     int DP;
  214.     float* DynamMatr;       /* Matrix of the linear Dynamics system  */
  215.     float* State;           /* Vector of State                       */
  216.     int SamplesNum;         /* Number of the Samples                 */
  217.     float** flSamples;      /* arr of the Sample Vectors             */
  218.     float** flNewSamples;   /* temporary array of the Sample Vectors */
  219.     float* flConfidence;    /* Confidence for each Sample            */
  220.     float* flCumulative;    /* Cumulative confidence                 */
  221.     float* Temp;            /* Temporary vector                      */
  222.     float* RandomSample;    /* RandomVector to update sample set     */
  223.     struct CvRandState* RandS; /* Array of structures to generate random vectors */
  224. }
  225. CvConDensation;
  226. /*
  227. standard Kalman filter (in G. Welch' and G. Bishop's notation):
  228.   x(k)=A*x(k-1)+B*u(k)+w(k)  p(w)~N(0,Q)
  229.   z(k)=H*x(k)+v(k),   p(v)~N(0,R)
  230. */
  231. typedef struct CvKalman
  232. {
  233.     int MP;                     /* number of measurement vector dimensions */
  234.     int DP;                     /* number of state vector dimensions */
  235.     int CP;                     /* number of control vector dimensions */
  236.     /* backward compatibility fields */
  237. #if 1
  238.     float* PosterState;         /* =state_pre->data.fl */
  239.     float* PriorState;          /* =state_post->data.fl */
  240.     float* DynamMatr;           /* =transition_matrix->data.fl */
  241.     float* MeasurementMatr;     /* =measurement_matrix->data.fl */
  242.     float* MNCovariance;        /* =measurement_noise_cov->data.fl */
  243.     float* PNCovariance;        /* =process_noise_cov->data.fl */
  244.     float* KalmGainMatr;        /* =gain->data.fl */
  245.     float* PriorErrorCovariance;/* =error_cov_pre->data.fl */
  246.     float* PosterErrorCovariance;/* =error_cov_post->data.fl */
  247.     float* Temp1;               /* temp1->data.fl */
  248.     float* Temp2;               /* temp2->data.fl */
  249. #endif
  250.     CvMat* state_pre;           /* predicted state (x'(k)):
  251.                                     x(k)=A*x(k-1)+B*u(k) */
  252.     CvMat* state_post;          /* corrected state (x(k)):
  253.                                     x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) */
  254.     CvMat* transition_matrix;   /* state transition matrix (A) */
  255.     CvMat* control_matrix;      /* control matrix (B)
  256.                                    (it is not used if there is no control)*/
  257.     CvMat* measurement_matrix;  /* measurement matrix (H) */
  258.     CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */
  259.     CvMat* measurement_noise_cov; /* measurement noise covariance matrix (R) */
  260.     CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):
  261.                                     P'(k)=A*P(k-1)*At + Q)*/
  262.     CvMat* gain;                /* Kalman gain matrix (K(k)):
  263.                                     K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/
  264.     CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):
  265.                                     P(k)=(I-K(k)*H)*P'(k) */
  266.     CvMat* temp1;               /* temporary matrices */
  267.     CvMat* temp2;
  268.     CvMat* temp3;
  269.     CvMat* temp4;
  270.     CvMat* temp5;
  271. }
  272. CvKalman;
  273. /*********************** Haar-like Object Detection structures **************************/
  274. #define CV_HAAR_MAGIC_VAL    0x42500000
  275. #define CV_TYPE_NAME_HAAR    "opencv-haar-classifier"
  276. #define CV_IS_HAAR_CLASSIFIER( haar )                                                    
  277.     ((haar) != NULL &&                                                                   
  278.     (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)
  279. #define CV_HAAR_FEATURE_MAX  3
  280. typedef struct CvHaarFeature
  281. {
  282.     int  tilted;
  283.     struct
  284.     {
  285.         CvRect r;
  286.         float weight;
  287.     } rect[CV_HAAR_FEATURE_MAX];
  288. }
  289. CvHaarFeature;
  290. typedef struct CvHaarClassifier
  291. {
  292.     int count;
  293.     CvHaarFeature* haar_feature;
  294.     float* threshold;
  295.     int* left;
  296.     int* right;
  297.     float* alpha;
  298. }
  299. CvHaarClassifier;
  300. typedef struct CvHaarStageClassifier
  301. {
  302.     int  count;
  303.     float threshold;
  304.     CvHaarClassifier* classifier;
  305.     int next;
  306.     int child;
  307.     int parent;
  308. }
  309. CvHaarStageClassifier;
  310. typedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;
  311. typedef struct CvHaarClassifierCascade
  312. {
  313.     int  flags;
  314.     int  count;
  315.     CvSize orig_window_size;
  316.     CvSize real_window_size;
  317.     double scale;
  318.     CvHaarStageClassifier* stage_classifier;
  319.     CvHidHaarClassifierCascade* hid_cascade;
  320. }
  321. CvHaarClassifierCascade;
  322. typedef struct CvAvgComp
  323. {
  324.     CvRect rect;
  325.     int neighbors;
  326. }
  327. CvAvgComp;
  328. struct CvFeatureTree;
  329. #endif /*_CVTYPES_H_*/
  330. /* End of file. */