diff options
Diffstat (limited to 'thirdparty/raspberrypi/includes/opencv2/legacy/blobtrack.hpp')
-rw-r--r-- | thirdparty/raspberrypi/includes/opencv2/legacy/blobtrack.hpp | 948 |
1 files changed, 0 insertions, 948 deletions
diff --git a/thirdparty/raspberrypi/includes/opencv2/legacy/blobtrack.hpp b/thirdparty/raspberrypi/includes/opencv2/legacy/blobtrack.hpp deleted file mode 100644 index 496b8be..0000000 --- a/thirdparty/raspberrypi/includes/opencv2/legacy/blobtrack.hpp +++ /dev/null @@ -1,948 +0,0 @@ -/*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 __OPENCV_VIDEOSURVEILLANCE_H__ -#define __OPENCV_VIDEOSURVEILLANCE_H__ - -/* Turn off the functionality until cvaux/src/Makefile.am gets updated: */ -//#if _MSC_VER >= 1200 - -#include "opencv2/core/core_c.h" -#include <stdio.h> - -#if (defined _MSC_VER && _MSC_VER >= 1200) || defined __BORLANDC__ -#define cv_stricmp stricmp -#define cv_strnicmp strnicmp -#if defined WINCE -#define strdup _strdup -#define stricmp _stricmp -#endif -#elif defined __GNUC__ || defined __sun -#define cv_stricmp strcasecmp -#define cv_strnicmp strncasecmp -#else -#error Do not know how to make case-insensitive string comparison on this platform -#endif - -//struct DefParam; -struct CvDefParam -{ - struct CvDefParam* next; - char* pName; - char* pComment; - double* pDouble; - double Double; - float* pFloat; - float Float; - int* pInt; - int Int; - char** pStr; - char* Str; -}; - -class CV_EXPORTS CvVSModule -{ -private: /* Internal data: */ - CvDefParam* m_pParamList; - char* m_pModuleTypeName; - char* m_pModuleName; - char* m_pNickName; -protected: - int m_Wnd; -public: /* Constructor and destructor: */ - CvVSModule(); - virtual ~CvVSModule(); -private: /* Internal functions: */ - void FreeParam(CvDefParam** pp); - CvDefParam* NewParam(const char* name); - CvDefParam* GetParamPtr(int index); - CvDefParam* GetParamPtr(const char* name); -protected: /* INTERNAL INTERFACE */ - int IsParam(const char* name); - void AddParam(const char* name, double* pAddr); - void AddParam(const char* name, float* pAddr); - void AddParam(const char* name, int* pAddr); - void AddParam(const char* name, const char** pAddr); - void AddParam(const char* name); - void CommentParam(const char* name, const char* pComment); - void SetTypeName(const char* name); - void SetModuleName(const char* name); - void DelParam(const char* name); - -public: /* EXTERNAL INTERFACE */ - const char* GetParamName(int index); - const char* GetParamComment(const char* name); - double GetParam(const char* name); - const char* GetParamStr(const char* name); - void SetParam(const char* name, double val); - void SetParamStr(const char* name, const char* str); - void TransferParamsFromChild(CvVSModule* pM, const char* prefix = NULL); - void TransferParamsToChild(CvVSModule* pM, char* prefix = NULL); - virtual void ParamUpdate(); - const char* GetTypeName(); - int IsModuleTypeName(const char* name); - char* GetModuleName(); - int IsModuleName(const char* name); - void SetNickName(const char* pStr); - const char* GetNickName(); - virtual void SaveState(CvFileStorage*); - virtual void LoadState(CvFileStorage*, CvFileNode*); - - virtual void Release() = 0; -};/* CvVMModule */ - -CV_EXPORTS void cvWriteStruct(CvFileStorage* fs, const char* name, void* addr, const char* desc, int num=1); -CV_EXPORTS void cvReadStructByName(CvFileStorage* fs, CvFileNode* node, const char* name, void* addr, const char* desc); - -/* FOREGROUND DETECTOR INTERFACE */ -class CV_EXPORTS CvFGDetector : public CvVSModule -{ -public: - CvFGDetector(); - virtual IplImage* GetMask() = 0; - /* Process current image: */ - virtual void Process(IplImage* pImg) = 0; - /* Release foreground detector: */ - virtual void Release() = 0; -}; - -CV_EXPORTS void cvReleaseFGDetector(CvFGDetector** ppT ); -CV_EXPORTS CvFGDetector* cvCreateFGDetectorBase(int type, void *param); - - -/* BLOB STRUCTURE*/ -struct CvBlob -{ - float x,y; /* blob position */ - float w,h; /* blob sizes */ - int ID; /* blob ID */ -}; - -inline CvBlob cvBlob(float x,float y, float w, float h) -{ - CvBlob B = {x,y,w,h,0}; - return B; -} -#define CV_BLOB_MINW 5 -#define CV_BLOB_MINH 5 -#define CV_BLOB_ID(pB) (((CvBlob*)(pB))->ID) -#define CV_BLOB_CENTER(pB) cvPoint2D32f(((CvBlob*)(pB))->x,((CvBlob*)(pB))->y) -#define CV_BLOB_X(pB) (((CvBlob*)(pB))->x) -#define CV_BLOB_Y(pB) (((CvBlob*)(pB))->y) -#define CV_BLOB_WX(pB) (((CvBlob*)(pB))->w) -#define CV_BLOB_WY(pB) (((CvBlob*)(pB))->h) -#define CV_BLOB_RX(pB) (0.5f*CV_BLOB_WX(pB)) -#define CV_BLOB_RY(pB) (0.5f*CV_BLOB_WY(pB)) -#define CV_BLOB_RECT(pB) cvRect(cvRound(((CvBlob*)(pB))->x-CV_BLOB_RX(pB)),cvRound(((CvBlob*)(pB))->y-CV_BLOB_RY(pB)),cvRound(CV_BLOB_WX(pB)),cvRound(CV_BLOB_WY(pB))) -/* END BLOB STRUCTURE*/ - - -/* simple BLOBLIST */ -class CV_EXPORTS CvBlobSeq -{ -public: - CvBlobSeq(int BlobSize = sizeof(CvBlob)) - { - m_pMem = cvCreateMemStorage(); - m_pSeq = cvCreateSeq(0,sizeof(CvSeq),BlobSize,m_pMem); - strcpy(m_pElemFormat,"ffffi"); - } - virtual ~CvBlobSeq() - { - cvReleaseMemStorage(&m_pMem); - }; - virtual CvBlob* GetBlob(int BlobIndex) - { - return (CvBlob*)cvGetSeqElem(m_pSeq,BlobIndex); - }; - virtual CvBlob* GetBlobByID(int BlobID) - { - int i; - for(i=0; i<m_pSeq->total; ++i) - if(BlobID == CV_BLOB_ID(GetBlob(i))) - return GetBlob(i); - return NULL; - }; - virtual void DelBlob(int BlobIndex) - { - cvSeqRemove(m_pSeq,BlobIndex); - }; - virtual void DelBlobByID(int BlobID) - { - int i; - for(i=0; i<m_pSeq->total; ++i) - { - if(BlobID == CV_BLOB_ID(GetBlob(i))) - { - DelBlob(i); - return; - } - } - }; - virtual void Clear() - { - cvClearSeq(m_pSeq); - }; - virtual void AddBlob(CvBlob* pB) - { - cvSeqPush(m_pSeq,pB); - }; - virtual int GetBlobNum() - { - return m_pSeq->total; - }; - virtual void Write(CvFileStorage* fs, const char* name) - { - const char* attr[] = {"dt",m_pElemFormat,NULL}; - if(fs) - { - cvWrite(fs,name,m_pSeq,cvAttrList(attr,NULL)); - } - } - virtual void Load(CvFileStorage* fs, CvFileNode* node) - { - if(fs==NULL) return; - CvSeq* pSeq = (CvSeq*)cvRead(fs, node); - if(pSeq) - { - int i; - cvClearSeq(m_pSeq); - for(i=0;i<pSeq->total;++i) - { - void* pB = cvGetSeqElem( pSeq, i ); - cvSeqPush( m_pSeq, pB ); - } - } - } - void AddFormat(const char* str){strcat(m_pElemFormat,str);} -protected: - CvMemStorage* m_pMem; - CvSeq* m_pSeq; - char m_pElemFormat[1024]; -}; -/* simple BLOBLIST */ - - -/* simple TRACKLIST */ -struct CvBlobTrack -{ - int TrackID; - int StartFrame; - CvBlobSeq* pBlobSeq; -}; - -class CV_EXPORTS CvBlobTrackSeq -{ -public: - CvBlobTrackSeq(int TrackSize = sizeof(CvBlobTrack)); - virtual ~CvBlobTrackSeq(); - virtual CvBlobTrack* GetBlobTrack(int TrackIndex); - virtual CvBlobTrack* GetBlobTrackByID(int TrackID); - virtual void DelBlobTrack(int TrackIndex); - virtual void DelBlobTrackByID(int TrackID); - virtual void Clear(); - virtual void AddBlobTrack(int TrackID, int StartFrame = 0); - virtual int GetBlobTrackNum(); -protected: - CvMemStorage* m_pMem; - CvSeq* m_pSeq; -}; - -/* simple TRACKLIST */ - - -/* BLOB DETECTOR INTERFACE */ -class CV_EXPORTS CvBlobDetector: public CvVSModule -{ -public: - CvBlobDetector(){SetTypeName("BlobDetector");}; - /* Try to detect new blob entrance based on foreground mask. */ - /* pFGMask - image of foreground mask */ - /* pNewBlob - pointer to CvBlob structure which will be filled if new blob entrance detected */ - /* pOldBlobList - pointer to blob list which already exist on image */ - virtual int DetectNewBlob(IplImage* pImg, IplImage* pImgFG, CvBlobSeq* pNewBlobList, CvBlobSeq* pOldBlobList) = 0; - /* release blob detector */ - virtual void Release()=0; -}; - -/* Release any blob detector: */ -CV_EXPORTS void cvReleaseBlobDetector(CvBlobDetector** ppBD); - -/* Declarations of constructors of implemented modules: */ -CV_EXPORTS CvBlobDetector* cvCreateBlobDetectorSimple(); -CV_EXPORTS CvBlobDetector* cvCreateBlobDetectorCC(); - -struct CV_EXPORTS CvDetectedBlob : public CvBlob -{ - float response; -}; - -CV_INLINE CvDetectedBlob cvDetectedBlob( float x, float y, float w, float h, int ID = 0, float response = 0.0F ) -{ - CvDetectedBlob b; - b.x = x; b.y = y; b.w = w; b.h = h; b.ID = ID; b.response = response; - return b; -} - - -class CV_EXPORTS CvObjectDetector -{ -public: - CvObjectDetector( const char* /*detector_file_name*/ = 0 ); - ~CvObjectDetector(); - - /* - * Release the current detector and load new detector from file - * (if detector_file_name is not 0) - * Return true on success: - */ - bool Load( const char* /*detector_file_name*/ = 0 ); - - /* Return min detector window size: */ - CvSize GetMinWindowSize() const; - - /* Return max border: */ - int GetMaxBorderSize() const; - - /* - * Detect the object on the image and push the detected - * blobs into <detected_blob_seq> which must be the sequence of <CvDetectedBlob>s - */ - void Detect( const CvArr* /*img*/, /* out */ CvBlobSeq* /*detected_blob_seq*/ = 0 ); - -protected: - class CvObjectDetectorImpl* impl; -}; - - -CV_INLINE CvRect cvRectIntersection( const CvRect r1, const CvRect r2 ) -{ - CvRect r = cvRect( MAX(r1.x, r2.x), MAX(r1.y, r2.y), 0, 0 ); - - r.width = MIN(r1.x + r1.width, r2.x + r2.width) - r.x; - r.height = MIN(r1.y + r1.height, r2.y + r2.height) - r.y; - - return r; -} - - -/* - * CvImageDrawer - * - * Draw on an image the specified ROIs from the source image and - * given blobs as ellipses or rectangles: - */ - -struct CvDrawShape -{ - enum {RECT, ELLIPSE} shape; - CvScalar color; -}; - -/*extern const CvDrawShape icv_shape[] = -{ - { CvDrawShape::ELLIPSE, CV_RGB(255,0,0) }, - { CvDrawShape::ELLIPSE, CV_RGB(0,255,0) }, - { CvDrawShape::ELLIPSE, CV_RGB(0,0,255) }, - { CvDrawShape::ELLIPSE, CV_RGB(255,255,0) }, - { CvDrawShape::ELLIPSE, CV_RGB(0,255,255) }, - { CvDrawShape::ELLIPSE, CV_RGB(255,0,255) } -};*/ - -class CV_EXPORTS CvImageDrawer -{ -public: - CvImageDrawer() : m_image(0) {} - ~CvImageDrawer() { cvReleaseImage( &m_image ); } - void SetShapes( const CvDrawShape* shapes, int num ); - /* <blob_seq> must be the sequence of <CvDetectedBlob>s */ - IplImage* Draw( const CvArr* src, CvBlobSeq* blob_seq = 0, const CvSeq* roi_seq = 0 ); - IplImage* GetImage() { return m_image; } -protected: - //static const int MAX_SHAPES = sizeof(icv_shape) / sizeof(icv_shape[0]);; - - IplImage* m_image; - CvDrawShape m_shape[16]; -}; - - - -/* Trajectory generation module: */ -class CV_EXPORTS CvBlobTrackGen: public CvVSModule -{ -public: - CvBlobTrackGen(){SetTypeName("BlobTrackGen");}; - virtual void SetFileName(char* pFileName) = 0; - virtual void AddBlob(CvBlob* pBlob) = 0; - virtual void Process(IplImage* pImg = NULL, IplImage* pFG = NULL) = 0; - virtual void Release() = 0; -}; - -inline void cvReleaseBlobTrackGen(CvBlobTrackGen** pBTGen) -{ - if(*pBTGen)(*pBTGen)->Release(); - *pBTGen = 0; -} - -/* Declarations of constructors of implemented modules: */ -CV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGen1(); -CV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGenYML(); - - - -/* BLOB TRACKER INTERFACE */ -class CV_EXPORTS CvBlobTracker: public CvVSModule -{ -public: - CvBlobTracker(); - - /* Add new blob to track it and assign to this blob personal ID */ - /* pBlob - pointer to structure with blob parameters (ID is ignored)*/ - /* pImg - current image */ - /* pImgFG - current foreground mask */ - /* Return pointer to new added blob: */ - virtual CvBlob* AddBlob(CvBlob* pBlob, IplImage* pImg, IplImage* pImgFG = NULL ) = 0; - - /* Return number of currently tracked blobs: */ - virtual int GetBlobNum() = 0; - - /* Return pointer to specified by index blob: */ - virtual CvBlob* GetBlob(int BlobIndex) = 0; - - /* Delete blob by its index: */ - virtual void DelBlob(int BlobIndex) = 0; - - /* Process current image and track all existed blobs: */ - virtual void Process(IplImage* pImg, IplImage* pImgFG = NULL) = 0; - - /* Release blob tracker: */ - virtual void Release() = 0; - - - /* Process one blob (for multi hypothesis tracing): */ - virtual void ProcessBlob(int BlobIndex, CvBlob* pBlob, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL); - - /* Get confidence/wieght/probability (0-1) for blob: */ - virtual double GetConfidence(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL); - - virtual double GetConfidenceList(CvBlobSeq* pBlobList, IplImage* pImg, IplImage* pImgFG = NULL); - - virtual void UpdateBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL); - - /* Update all blob models: */ - virtual void Update(IplImage* pImg, IplImage* pImgFG = NULL); - - /* Return pointer to blob by its unique ID: */ - virtual int GetBlobIndexByID(int BlobID); - - /* Return pointer to blob by its unique ID: */ - virtual CvBlob* GetBlobByID(int BlobID); - - /* Delete blob by its ID: */ - virtual void DelBlobByID(int BlobID); - - /* Set new parameters for specified (by index) blob: */ - virtual void SetBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/); - - /* Set new parameters for specified (by ID) blob: */ - virtual void SetBlobByID(int BlobID, CvBlob* pBlob); - - /* =============== MULTI HYPOTHESIS INTERFACE ================== */ - - /* Return number of position hyposetis of currently tracked blob: */ - virtual int GetBlobHypNum(int /*BlobIdx*/); - - /* Return pointer to specified blob hypothesis by index blob: */ - virtual CvBlob* GetBlobHyp(int BlobIndex, int /*hypothesis*/); - - /* Set new parameters for specified (by index) blob hyp - * (can be called several times for each hyp ): - */ - virtual void SetBlobHyp(int /*BlobIndex*/, CvBlob* /*pBlob*/); -}; - -CV_EXPORTS void cvReleaseBlobTracker(CvBlobTracker**ppT ); -/* BLOB TRACKER INTERFACE */ - -/*BLOB TRACKER ONE INTERFACE */ -class CV_EXPORTS CvBlobTrackerOne : public CvVSModule -{ -public: - virtual void Init(CvBlob* pBlobInit, IplImage* pImg, IplImage* pImgFG = NULL) = 0; - virtual CvBlob* Process(CvBlob* pBlobPrev, IplImage* pImg, IplImage* pImgFG = NULL) = 0; - virtual void Release() = 0; - - /* Non-required methods: */ - virtual void SkipProcess(CvBlob* /*pBlobPrev*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){}; - virtual void Update(CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){}; - virtual void SetCollision(int /*CollisionFlag*/){}; /* call in case of blob collision situation*/ - virtual double GetConfidence(CvBlob* /*pBlob*/, IplImage* /*pImg*/, - IplImage* /*pImgFG*/ = NULL, IplImage* /*pImgUnusedReg*/ = NULL) - { - return 1; - }; -}; -inline void cvReleaseBlobTrackerOne(CvBlobTrackerOne **ppT ) -{ - ppT[0]->Release(); - ppT[0] = 0; -} -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerList(CvBlobTrackerOne* (*create)()); -/*BLOB TRACKER ONE INTERFACE */ - -/* Declarations of constructors of implemented modules: */ - -/* Some declarations for specific MeanShift tracker: */ -#define PROFILE_EPANECHNIKOV 0 -#define PROFILE_DOG 1 -struct CvBlobTrackerParamMS -{ - int noOfSigBits; - int appearance_profile; - int meanshift_profile; - float sigma; -}; - -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1(CvBlobTrackerParamMS* param); -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS2(CvBlobTrackerParamMS* param); -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1ByList(); - -/* Some declarations for specific Likelihood tracker: */ -struct CvBlobTrackerParamLH -{ - int HistType; /* see Prob.h */ - int ScaleAfter; -}; - -/* Without scale optimization: */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHR(CvBlobTrackerParamLH* /*param*/ = NULL); - -/* With scale optimization: */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHRS(CvBlobTrackerParamLH* /*param*/ = NULL); - -/* Simple blob tracker based on connected component tracking: */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCC(); - -/* Connected component tracking and mean-shift particle filter collion-resolver: */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCCMSPF(); - -/* Blob tracker that integrates meanshift and connected components: */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFG(); -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFGS(); - -/* Meanshift without connected-components */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS(); - -/* Particle filtering via Bhattacharya coefficient, which */ -/* is roughly the dot-product of two probability densities. */ -/* See: Real-Time Tracking of Non-Rigid Objects using Mean Shift */ -/* Comanicius, Ramesh, Meer, 2000, 8p */ -/* http://citeseer.ist.psu.edu/321441.html */ -CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSPF(); - -/* =========== tracker integrators trackers =============*/ - -/* Integrator based on Particle Filtering method: */ -//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPF(); - -/* Rule based integrator: */ -//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIRB(); - -/* Integrator based on data fusion using particle filtering: */ -//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPFDF(); - - - - -/* Trajectory postprocessing module: */ -class CV_EXPORTS CvBlobTrackPostProc: public CvVSModule -{ -public: - CvBlobTrackPostProc(){SetTypeName("BlobTrackPostProc");}; - virtual void AddBlob(CvBlob* pBlob) = 0; - virtual void Process() = 0; - virtual int GetBlobNum() = 0; - virtual CvBlob* GetBlob(int index) = 0; - virtual void Release() = 0; - - /* Additional functionality: */ - virtual CvBlob* GetBlobByID(int BlobID) - { - int i; - for(i=GetBlobNum();i>0;i--) - { - CvBlob* pB=GetBlob(i-1); - if(pB->ID==BlobID) return pB; - } - return NULL; - }; -}; - -inline void cvReleaseBlobTrackPostProc(CvBlobTrackPostProc** pBTPP) -{ - if(pBTPP == NULL) return; - if(*pBTPP)(*pBTPP)->Release(); - *pBTPP = 0; -} - -/* Trajectory generation module: */ -class CV_EXPORTS CvBlobTrackPostProcOne: public CvVSModule -{ -public: - CvBlobTrackPostProcOne(){SetTypeName("BlobTrackPostOne");}; - virtual CvBlob* Process(CvBlob* pBlob) = 0; - virtual void Release() = 0; -}; - -/* Create blob tracking post processing module based on simle module: */ -CV_EXPORTS CvBlobTrackPostProc* cvCreateBlobTrackPostProcList(CvBlobTrackPostProcOne* (*create)()); - - -/* Declarations of constructors of implemented modules: */ -CV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcKalman(); -CV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverRect(); -CV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverExp(); - - -/* PREDICTORS */ -/* blob PREDICTOR */ -class CvBlobTrackPredictor: public CvVSModule -{ -public: - CvBlobTrackPredictor(){SetTypeName("BlobTrackPredictor");}; - virtual CvBlob* Predict() = 0; - virtual void Update(CvBlob* pBlob) = 0; - virtual void Release() = 0; -}; -CV_EXPORTS CvBlobTrackPredictor* cvCreateModuleBlobTrackPredictKalman(); - - - -/* Trajectory analyser module: */ -class CV_EXPORTS CvBlobTrackAnalysis: public CvVSModule -{ -public: - CvBlobTrackAnalysis(){SetTypeName("BlobTrackAnalysis");}; - virtual void AddBlob(CvBlob* pBlob) = 0; - virtual void Process(IplImage* pImg, IplImage* pFG) = 0; - virtual float GetState(int BlobID) = 0; - /* return 0 if trajectory is normal - return >0 if trajectory abnormal */ - virtual const char* GetStateDesc(int /*BlobID*/){return NULL;}; - virtual void SetFileName(char* /*DataBaseName*/){}; - virtual void Release() = 0; -}; - - -inline void cvReleaseBlobTrackAnalysis(CvBlobTrackAnalysis** pBTPP) -{ - if(pBTPP == NULL) return; - if(*pBTPP)(*pBTPP)->Release(); - *pBTPP = 0; -} - -/* Feature-vector generation module: */ -class CV_EXPORTS CvBlobTrackFVGen : public CvVSModule -{ -public: - CvBlobTrackFVGen(){SetTypeName("BlobTrackFVGen");}; - virtual void AddBlob(CvBlob* pBlob) = 0; - virtual void Process(IplImage* pImg, IplImage* pFG) = 0; - virtual void Release() = 0; - virtual int GetFVSize() = 0; - virtual int GetFVNum() = 0; - virtual float* GetFV(int index, int* pFVID) = 0; /* Returns pointer to FV, if return 0 then FV not created */ - virtual float* GetFVVar(){return NULL;}; /* Returns pointer to array of variation of values of FV, if returns 0 then FVVar does not exist. */ - virtual float* GetFVMin() = 0; /* Returns pointer to array of minimal values of FV, if returns 0 then FVrange does not exist */ - virtual float* GetFVMax() = 0; /* Returns pointer to array of maximal values of FV, if returns 0 then FVrange does not exist */ -}; - - -/* Trajectory Analyser module: */ -class CV_EXPORTS CvBlobTrackAnalysisOne -{ -public: - virtual ~CvBlobTrackAnalysisOne() {}; - virtual int Process(CvBlob* pBlob, IplImage* pImg, IplImage* pFG) = 0; - /* return 0 if trajectory is normal - return >0 if trajectory abnormal */ - virtual void Release() = 0; -}; - -/* Create blob tracking post processing module based on simle module: */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateBlobTrackAnalysisList(CvBlobTrackAnalysisOne* (*create)()); - -/* Declarations of constructors of implemented modules: */ - -/* Based on histogram analysis of 2D FV (x,y): */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistP(); - -/* Based on histogram analysis of 4D FV (x,y,vx,vy): */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPV(); - -/* Based on histogram analysis of 5D FV (x,y,vx,vy,state): */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPVS(); - -/* Based on histogram analysis of 4D FV (startpos,stoppos): */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistSS(); - - - -/* Based on SVM classifier analysis of 2D FV (x,y): */ -//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMP(); - -/* Based on SVM classifier analysis of 4D FV (x,y,vx,vy): */ -//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPV(); - -/* Based on SVM classifier analysis of 5D FV (x,y,vx,vy,state): */ -//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPVS(); - -/* Based on SVM classifier analysis of 4D FV (startpos,stoppos): */ -//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMSS(); - -/* Track analysis based on distance between tracks: */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisTrackDist(); - -/* Analyzer based on reation Road and height map: */ -//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysis3DRoadMap(); - -/* Analyzer that makes OR decision using set of analyzers: */ -CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR(); - -/* Estimator of human height: */ -class CV_EXPORTS CvBlobTrackAnalysisHeight: public CvBlobTrackAnalysis -{ -public: - virtual double GetHeight(CvBlob* pB) = 0; -}; -//CV_EXPORTS CvBlobTrackAnalysisHeight* cvCreateModuleBlobTrackAnalysisHeightScale(); - - - -/* AUTO BLOB TRACKER INTERFACE -- pipeline of 3 modules: */ -class CV_EXPORTS CvBlobTrackerAuto: public CvVSModule -{ -public: - CvBlobTrackerAuto(){SetTypeName("BlobTrackerAuto");}; - virtual void Process(IplImage* pImg, IplImage* pMask = NULL) = 0; - virtual CvBlob* GetBlob(int index) = 0; - virtual CvBlob* GetBlobByID(int ID) = 0; - virtual int GetBlobNum() = 0; - virtual IplImage* GetFGMask(){return NULL;}; - virtual float GetState(int BlobID) = 0; - virtual const char* GetStateDesc(int BlobID) = 0; - /* return 0 if trajectory is normal; - * return >0 if trajectory abnormal. */ - virtual void Release() = 0; -}; -inline void cvReleaseBlobTrackerAuto(CvBlobTrackerAuto** ppT) -{ - ppT[0]->Release(); - ppT[0] = 0; -} -/* END AUTO BLOB TRACKER INTERFACE */ - - -/* Constructor functions and data for specific BlobTRackerAuto modules: */ - -/* Parameters of blobtracker auto ver1: */ -struct CvBlobTrackerAutoParam1 -{ - int FGTrainFrames; /* Number of frames needed for FG (foreground) detector to train. */ - - CvFGDetector* pFG; /* FGDetector module. If this field is NULL the Process FG mask is used. */ - - CvBlobDetector* pBD; /* Selected blob detector module. */ - /* If this field is NULL default blobdetector module will be created. */ - - CvBlobTracker* pBT; /* Selected blob tracking module. */ - /* If this field is NULL default blobtracker module will be created. */ - - CvBlobTrackGen* pBTGen; /* Selected blob trajectory generator. */ - /* If this field is NULL no generator is used. */ - - CvBlobTrackPostProc* pBTPP; /* Selected blob trajectory postprocessing module. */ - /* If this field is NULL no postprocessing is done. */ - - int UsePPData; - - CvBlobTrackAnalysis* pBTA; /* Selected blob trajectory analysis module. */ - /* If this field is NULL no track analysis is done. */ -}; - -/* Create blob tracker auto ver1: */ -CV_EXPORTS CvBlobTrackerAuto* cvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param = NULL); - -/* Simple loader for many auto trackers by its type : */ -inline CvBlobTrackerAuto* cvCreateBlobTrackerAuto(int type, void* param) -{ - if(type == 0) return cvCreateBlobTrackerAuto1((CvBlobTrackerAutoParam1*)param); - return 0; -} - - - -struct CvTracksTimePos -{ - int len1,len2; - int beg1,beg2; - int end1,end2; - int comLen; //common length for two tracks - int shift1,shift2; -}; - -/*CV_EXPORTS int cvCompareTracks( CvBlobTrackSeq *groundTruth, - CvBlobTrackSeq *result, - FILE *file);*/ - - -/* Constructor functions: */ - -CV_EXPORTS void cvCreateTracks_One(CvBlobTrackSeq *TS); -CV_EXPORTS void cvCreateTracks_Same(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2); -CV_EXPORTS void cvCreateTracks_AreaErr(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2, int addW, int addH); - - -/* HIST API */ -class CV_EXPORTS CvProb -{ -public: - virtual ~CvProb() {}; - - /* Calculate probability value: */ - virtual double Value(int* /*comp*/, int /*x*/ = 0, int /*y*/ = 0){return -1;}; - - /* Update histograpp Pnew = (1-W)*Pold + W*Padd*/ - /* W weight of new added prob */ - /* comps - matrix of new fetature vectors used to update prob */ - virtual void AddFeature(float W, int* comps, int x =0, int y = 0) = 0; - virtual void Scale(float factor = 0, int x = -1, int y = -1) = 0; - virtual void Release() = 0; -}; -inline void cvReleaseProb(CvProb** ppProb){ppProb[0]->Release();ppProb[0]=NULL;} -/* HIST API */ - -/* Some Prob: */ -CV_EXPORTS CvProb* cvCreateProbS(int dim, CvSize size, int sample_num); -CV_EXPORTS CvProb* cvCreateProbMG(int dim, CvSize size, int sample_num); -CV_EXPORTS CvProb* cvCreateProbMG2(int dim, CvSize size, int sample_num); -CV_EXPORTS CvProb* cvCreateProbHist(int dim, CvSize size); - -#define CV_BT_HIST_TYPE_S 0 -#define CV_BT_HIST_TYPE_MG 1 -#define CV_BT_HIST_TYPE_MG2 2 -#define CV_BT_HIST_TYPE_H 3 -inline CvProb* cvCreateProb(int type, int dim, CvSize size = cvSize(1,1), void* /*param*/ = NULL) -{ - if(type == CV_BT_HIST_TYPE_S) return cvCreateProbS(dim, size, -1); - if(type == CV_BT_HIST_TYPE_MG) return cvCreateProbMG(dim, size, -1); - if(type == CV_BT_HIST_TYPE_MG2) return cvCreateProbMG2(dim, size, -1); - if(type == CV_BT_HIST_TYPE_H) return cvCreateProbHist(dim, size); - return NULL; -} - - - -/* Noise type definitions: */ -#define CV_NOISE_NONE 0 -#define CV_NOISE_GAUSSIAN 1 -#define CV_NOISE_UNIFORM 2 -#define CV_NOISE_SPECKLE 3 -#define CV_NOISE_SALT_AND_PEPPER 4 - -/* Add some noise to image: */ -/* pImg - (input) image without noise */ -/* pImg - (output) image with noise */ -/* noise_type - type of added noise */ -/* CV_NOISE_GAUSSIAN - pImg += n , n - is gaussian noise with Ampl standart deviation */ -/* CV_NOISE_UNIFORM - pImg += n , n - is uniform noise with Ampl standart deviation */ -/* CV_NOISE_SPECKLE - pImg += n*pImg , n - is gaussian noise with Ampl standart deviation */ -/* CV_NOISE_SALT_AND_PAPPER - pImg = pImg with blacked and whited pixels, - Ampl is density of brocken pixels (0-there are not broken pixels, 1 - all pixels are broken)*/ -/* Ampl - "amplitude" of noise */ -//CV_EXPORTS void cvAddNoise(IplImage* pImg, int noise_type, double Ampl, CvRNG* rnd_state = NULL); - -/*================== GENERATOR OF TEST VIDEO SEQUENCE ===================== */ -typedef void CvTestSeq; - -/* pConfigfile - Name of file (yml or xml) with description of test sequence */ -/* videos - array of names of test videos described in "pConfigfile" file */ -/* numvideos - size of "videos" array */ -CV_EXPORTS CvTestSeq* cvCreateTestSeq(char* pConfigfile, char** videos, int numvideo, float Scale = 1, int noise_type = CV_NOISE_NONE, double noise_ampl = 0); -CV_EXPORTS void cvReleaseTestSeq(CvTestSeq** ppTestSeq); - -/* Generate next frame from test video seq and return pointer to it: */ -CV_EXPORTS IplImage* cvTestSeqQueryFrame(CvTestSeq* pTestSeq); - -/* Return pointer to current foreground mask: */ -CV_EXPORTS IplImage* cvTestSeqGetFGMask(CvTestSeq* pTestSeq); - -/* Return pointer to current image: */ -CV_EXPORTS IplImage* cvTestSeqGetImage(CvTestSeq* pTestSeq); - -/* Return frame size of result test video: */ -CV_EXPORTS CvSize cvTestSeqGetImageSize(CvTestSeq* pTestSeq); - -/* Return number of frames result test video: */ -CV_EXPORTS int cvTestSeqFrameNum(CvTestSeq* pTestSeq); - -/* Return number of existing objects. - * This is general number of any objects. - * For example number of trajectories may be equal or less than returned value: - */ -CV_EXPORTS int cvTestSeqGetObjectNum(CvTestSeq* pTestSeq); - -/* Return 0 if there is not position for current defined on current frame */ -/* Return 1 if there is object position and pPos was filled */ -CV_EXPORTS int cvTestSeqGetObjectPos(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pPos); -CV_EXPORTS int cvTestSeqGetObjectSize(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pSize); - -/* Add noise to final image: */ -CV_EXPORTS void cvTestSeqAddNoise(CvTestSeq* pTestSeq, int noise_type = CV_NOISE_NONE, double noise_ampl = 0); - -/* Add Intensity variation: */ -CV_EXPORTS void cvTestSeqAddIntensityVariation(CvTestSeq* pTestSeq, float DI_per_frame, float MinI, float MaxI); -CV_EXPORTS void cvTestSeqSetFrame(CvTestSeq* pTestSeq, int n); - -#endif - -/* End of file. */ |