| /*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. */ |