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( InputArray silhouette, InputOutputArray mhi,
00248 double timestamp, double duration );
00249
00251 CV_EXPORTS_W void calcMotionGradient( InputArray mhi, OutputArray mask,
00252 OutputArray orientation,
00253 double delta1, double delta2,
00254 int apertureSize=3 );
00255
00257 CV_EXPORTS_W double calcGlobalOrientation( InputArray orientation, InputArray mask,
00258 InputArray mhi, double timestamp,
00259 double duration );
00260
00261 CV_EXPORTS_W void segmentMotion(InputArray mhi, OutputArray segmask,
00262 vector<Rect>& boundingRects,
00263 double timestamp, double segThresh);
00264
00266 CV_EXPORTS_W RotatedRect CamShift( InputArray probImage, CV_IN_OUT Rect& window,
00267 TermCriteria criteria );
00268
00270 CV_EXPORTS_W int meanShift( InputArray probImage, CV_IN_OUT Rect& window,
00271 TermCriteria criteria );
00272
00280 class CV_EXPORTS_W KalmanFilter
00281 {
00282 public:
00284 CV_WRAP KalmanFilter();
00286 CV_WRAP KalmanFilter(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);
00288 void init(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);
00289
00291 CV_WRAP const Mat& predict(const Mat& control=Mat());
00293 CV_WRAP const Mat& correct(const Mat& measurement);
00294
00295 Mat statePre;
00296 Mat statePost;
00297 Mat transitionMatrix;
00298 Mat controlMatrix;
00299 Mat measurementMatrix;
00300 Mat processNoiseCov;
00301 Mat measurementNoiseCov;
00302 Mat errorCovPre;
00303 Mat gain;
00304 Mat errorCovPost;
00305
00306
00307 Mat temp1;
00308 Mat temp2;
00309 Mat temp3;
00310 Mat temp4;
00311 Mat temp5;
00312 };
00313
00314
00315 enum { OPTFLOW_USE_INITIAL_FLOW=4, OPTFLOW_FARNEBACK_GAUSSIAN=256 };
00316
00318 CV_EXPORTS_W void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg,
00319 InputArray prevPts, CV_OUT InputOutputArray nextPts,
00320 OutputArray status, OutputArray err,
00321 Size winSize=Size(15,15), int maxLevel=3,
00322 TermCriteria criteria=TermCriteria(
00323 TermCriteria::COUNT+TermCriteria::EPS,
00324 30, 0.01),
00325 double derivLambda=0.5,
00326 int flags=0 );
00327
00329 CV_EXPORTS_W void calcOpticalFlowFarneback( InputArray prev, InputArray next,
00330 CV_OUT InputOutputArray flow, double pyr_scale, int levels, int winsize,
00331 int iterations, int poly_n, double poly_sigma, int flags );
00332
00334
00335 CV_EXPORTS_W Mat estimateRigidTransform( InputArray src, InputArray dst,
00336 bool fullAffine);
00337
00338 }
00339
00340 #endif
00341
00342 #endif