00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #ifndef __OPENCV_TRACKING_HPP__
00048 #define __OPENCV_TRACKING_HPP__
00049
00050 #include "opencv2/core/core.hpp"
00051 #include "opencv2/imgproc/imgproc_c.h"
00052
00053 #ifdef __cplusplus
00054 extern "C" {
00055 #endif
00056
00057
00058
00059
00060
00061
00062
00063
00064 CVAPI(void) cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr,
00065 CvSize win_size, CvArr* velx, CvArr* vely );
00066
00067
00068 CVAPI(void) cvCalcOpticalFlowBM( const CvArr* prev, const CvArr* curr,
00069 CvSize block_size, CvSize shift_size,
00070 CvSize max_range, int use_previous,
00071 CvArr* velx, CvArr* vely );
00072
00073
00074 CVAPI(void) cvCalcOpticalFlowHS( const CvArr* prev, const CvArr* curr,
00075 int use_previous, CvArr* velx, CvArr* vely,
00076 double lambda, CvTermCriteria criteria );
00077
00078 #define CV_LKFLOW_PYR_A_READY 1
00079 #define CV_LKFLOW_PYR_B_READY 2
00080 #define CV_LKFLOW_INITIAL_GUESSES 4
00081 #define CV_LKFLOW_GET_MIN_EIGENVALS 8
00082
00083
00084
00085
00086
00087
00088 CVAPI(void) cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr,
00089 CvArr* prev_pyr, CvArr* curr_pyr,
00090 const CvPoint2D32f* prev_features,
00091 CvPoint2D32f* curr_features,
00092 int count,
00093 CvSize win_size,
00094 int level,
00095 char* status,
00096 float* track_error,
00097 CvTermCriteria criteria,
00098 int flags );
00099
00100
00101
00102
00103 CVAPI(void) cvCalcAffineFlowPyrLK( const CvArr* prev, const CvArr* curr,
00104 CvArr* prev_pyr, CvArr* curr_pyr,
00105 const CvPoint2D32f* prev_features,
00106 CvPoint2D32f* curr_features,
00107 float* matrices, int count,
00108 CvSize win_size, int level,
00109 char* status, float* track_error,
00110 CvTermCriteria criteria, int flags );
00111
00112
00113 CVAPI(int) cvEstimateRigidTransform( const CvArr* A, const CvArr* B,
00114 CvMat* M, int full_affine );
00115
00116
00117 CVAPI(void) cvCalcOpticalFlowFarneback( const CvArr* prev, const CvArr* next,
00118 CvArr* flow, double pyr_scale, int levels,
00119 int winsize, int iterations, int poly_n,
00120 double poly_sigma, int flags );
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 CVAPI(void) cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,
00136 double timestamp, double duration );
00137
00138
00139
00140 CVAPI(void) cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,
00141 double delta1, double delta2,
00142 int aperture_size CV_DEFAULT(3));
00143
00144
00145
00146
00147 CVAPI(double) cvCalcGlobalOrientation( const CvArr* orientation, const CvArr* mask,
00148 const CvArr* mhi, double timestamp,
00149 double duration );
00150
00151
00152
00153 CVAPI(CvSeq*) cvSegmentMotion( const CvArr* mhi, CvArr* seg_mask,
00154 CvMemStorage* storage,
00155 double timestamp, double seg_thresh );
00156
00157
00158
00159
00160
00161
00162
00163 CVAPI(int) cvCamShift( const CvArr* prob_image, CvRect window,
00164 CvTermCriteria criteria, CvConnectedComp* comp,
00165 CvBox2D* box CV_DEFAULT(NULL) );
00166
00167
00168
00169 CVAPI(int) cvMeanShift( const CvArr* prob_image, CvRect window,
00170 CvTermCriteria criteria, CvConnectedComp* comp );
00171
00172
00173
00174
00175
00176
00177
00178 typedef struct CvKalman
00179 {
00180 int MP;
00181 int DP;
00182 int CP;
00183
00184
00185 #if 1
00186 float* PosterState;
00187 float* PriorState;
00188 float* DynamMatr;
00189 float* MeasurementMatr;
00190 float* MNCovariance;
00191 float* PNCovariance;
00192 float* KalmGainMatr;
00193 float* PriorErrorCovariance;
00194 float* PosterErrorCovariance;
00195 float* Temp1;
00196 float* Temp2;
00197 #endif
00198
00199 CvMat* state_pre;
00200
00201 CvMat* state_post;
00202
00203 CvMat* transition_matrix;
00204 CvMat* control_matrix;
00205
00206 CvMat* measurement_matrix;
00207 CvMat* process_noise_cov;
00208 CvMat* measurement_noise_cov;
00209 CvMat* error_cov_pre;
00210
00211 CvMat* gain;
00212
00213 CvMat* error_cov_post;
00214
00215 CvMat* temp1;
00216 CvMat* temp2;
00217 CvMat* temp3;
00218 CvMat* temp4;
00219 CvMat* temp5;
00220 } CvKalman;
00221
00222
00223 CVAPI(CvKalman*) cvCreateKalman( int dynam_params, int measure_params,
00224 int control_params CV_DEFAULT(0));
00225
00226
00227 CVAPI(void) cvReleaseKalman( CvKalman** kalman);
00228
00229
00230 CVAPI(const CvMat*) cvKalmanPredict( CvKalman* kalman,
00231 const CvMat* control CV_DEFAULT(NULL));
00232
00233
00234
00235 CVAPI(const CvMat*) cvKalmanCorrect( CvKalman* kalman, const CvMat* measurement );
00236
00237 #define cvKalmanUpdateByTime cvKalmanPredict
00238 #define cvKalmanUpdateByMeasurement cvKalmanCorrect
00239
00240 #ifdef __cplusplus
00241 }
00242
00243 namespace cv
00244 {
00245
00247 CV_EXPORTS_W void updateMotionHistory( const Mat& silhouette, Mat& mhi,
00248 double timestamp, double duration );
00249
00251 CV_EXPORTS_W void calcMotionGradient( const Mat& mhi, CV_OUT Mat& mask,
00252 CV_OUT Mat& orientation,
00253 double delta1, double delta2,
00254 int apertureSize=3 );
00255
00257 CV_EXPORTS_W double calcGlobalOrientation( const Mat& orientation, const Mat& mask,
00258 const Mat& mhi, double timestamp,
00259 double duration );
00260
00261
00263 CV_EXPORTS_W RotatedRect CamShift( const Mat& probImage, CV_IN_OUT Rect& window,
00264 TermCriteria criteria );
00265
00267 CV_EXPORTS_W int meanShift( const Mat& probImage, CV_IN_OUT Rect& window,
00268 TermCriteria criteria );
00269
00277 class CV_EXPORTS_W KalmanFilter
00278 {
00279 public:
00281 CV_WRAP KalmanFilter();
00283 CV_WRAP KalmanFilter(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);
00285 void init(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);
00286
00288 CV_WRAP const Mat& predict(const Mat& control=Mat());
00290 CV_WRAP const Mat& correct(const Mat& measurement);
00291
00292 Mat statePre;
00293 Mat statePost;
00294 Mat transitionMatrix;
00295 Mat controlMatrix;
00296 Mat measurementMatrix;
00297 Mat processNoiseCov;
00298 Mat measurementNoiseCov;
00299 Mat errorCovPre;
00300 Mat gain;
00301 Mat errorCovPost;
00302
00303
00304 Mat temp1;
00305 Mat temp2;
00306 Mat temp3;
00307 Mat temp4;
00308 Mat temp5;
00309 };
00310
00311
00312 enum { OPTFLOW_USE_INITIAL_FLOW=4, OPTFLOW_FARNEBACK_GAUSSIAN=256 };
00313
00315 CV_EXPORTS_W void calcOpticalFlowPyrLK( const Mat& prevImg, const Mat& nextImg,
00316 const vector<Point2f>& prevPts, CV_OUT vector<Point2f>& nextPts,
00317 CV_OUT vector<uchar>& status, CV_OUT vector<float>& err,
00318 Size winSize=Size(15,15), int maxLevel=3,
00319 TermCriteria criteria=TermCriteria(
00320 TermCriteria::COUNT+TermCriteria::EPS,
00321 30, 0.01),
00322 double derivLambda=0.5,
00323 int flags=0 );
00324
00326 CV_EXPORTS_W void calcOpticalFlowFarneback( const Mat& prev, const Mat& next,
00327 CV_OUT Mat& flow, double pyr_scale, int levels, int winsize,
00328 int iterations, int poly_n, double poly_sigma, int flags );
00329
00330 }
00331
00332 #endif
00333
00334 #endif