00001 #include "tracking.h"
00002
00003
00004
00005
00006 Tracking::Tracking() {
00007 }
00008
00009 Tracking::~Tracking() {}
00010
00011 void Tracking::addKalmanPrediction(float x,float y) {
00012 vecKalmanPoints.push_back(cvPoint(x,y));
00013 KalmanFilter *addkalman=new KalmanFilter();
00014 vecKalmanObjects.push_back(addkalman);
00015 addkalman->predictionBegin(x,y);
00016
00017 vecLastPointUpdate.push_back(cvPoint(x,y));
00018 CvPoint pre;
00019 addkalman->predictionGet(pre);
00020 vecKalmanPredicted.push_back(pre);
00021 }
00022 void Tracking::addKalmanPrediction(CBlob blob){
00023 double dWidth = blob.MaxX() - blob.MinX();
00024 double dHeight = blob.MaxY() - blob.MinY();
00025 float iCenterX=blob.MinX()+(dWidth/2);
00026 float iCenterY=blob.MinY()+(dHeight/2);
00027 addKalmanPrediction(iCenterX,iCenterY);
00028
00029
00030
00031
00032
00033
00034
00035
00036 }
00037
00038 void Tracking::updateKalmanPrediction(float x,float y,int i) {
00039 vecKalmanObjects[i]->predictionUpdate(x,y);
00040 vecLastPointUpdate[i]=cvPoint(x,y);
00041 vecKalmanObjects[i]->predictionGet(vecKalmanPredicted[i]);
00042 }
00043
00044 void Tracking::updateKalmanPrediction(CBlob blob,int i){
00045 double dWidth = blob.MaxX() - blob.MinX();
00046 double dHeight = blob.MaxY() - blob.MinY();
00047 float iCenterX=blob.MinX()+(dWidth/2);
00048 float iCenterY=blob.MinY()+(dHeight/2);
00049 updateKalmanPrediction(iCenterX,iCenterY,i);
00050
00051
00052
00053 }
00054
00055 void Tracking::clearKalman() {
00056 vecKalmanPoints.clear();
00057
00058 vecLastPointUpdate.clear();
00059
00060 vecKalmanObjects.clear();
00061 vecKalmanPredicted.clear();
00062 }
00063
00064 IplImage* Tracking::paintCrossKalmanSelected(IplImage* src) {
00065
00066 int iCrossLen=10;
00067
00068 IplImage *dst=getColorImage(src);
00069
00070 for(int i=0;i<vecKalmanPoints.size();i++) {
00071 CvPoint sel=vecKalmanPoints[i];
00072 cvLine( dst, cvPoint(sel.x-iCrossLen,sel.y),cvPoint(sel.x+iCrossLen,sel.y), CV_RGB(0,255,0),2,CV_AA);
00073 cvLine( dst, cvPoint(sel.x,sel.y-iCrossLen),cvPoint(sel.x,sel.y+iCrossLen), CV_RGB(0,255,0),2,CV_AA);
00074 }
00075 return dst;
00076 }
00077
00078 IplImage* Tracking::paintCrossKalmanPredicted(IplImage* src) {
00079
00080 int iCrossLen=5;
00081
00082 IplImage *dst=getColorImage(src);
00083
00084 for(int i=0;i<vecKalmanPredicted.size();i++) {
00085 CvPoint pre=vecKalmanPredicted[i];
00086 cvLine( dst, cvPoint(pre.x-iCrossLen,pre.y),cvPoint(pre.x+iCrossLen,pre.y), CV_RGB(255,0,0),1,CV_AA);
00087 cvLine( dst, cvPoint(pre.x,pre.y-iCrossLen),cvPoint(pre.x,pre.y+iCrossLen), CV_RGB(255,0,0),1,CV_AA);
00088 }
00089 return dst;
00090 }
00091
00092 IplImage* Tracking::paintCrossKalmanPredictedAutoUpdate(IplImage* src) {
00093
00094 int iCrossLen=5;
00095
00096 IplImage *dst=getColorImage(src);
00097
00098 for(int i=0;i<vecKalmanObjects.size();i++) {
00099 vecKalmanObjects[i]->predictionGet(vecKalmanPredicted[i]);
00100 CvPoint pre=vecKalmanPredicted[i];
00101 cvLine( dst, cvPoint(pre.x-iCrossLen,pre.y),cvPoint(pre.x+iCrossLen,pre.y), CV_RGB(255,0,0),1,CV_AA);
00102 cvLine( dst, cvPoint(pre.x,pre.y-iCrossLen),cvPoint(pre.x,pre.y+iCrossLen), CV_RGB(255,0,0),1,CV_AA);
00103 }
00104 return dst;
00105 }
00106
00107 IplImage* Tracking::paintCrossKalmanPredictedLastUpdate(IplImage* src) {
00108
00109 int iCrossLen=5;
00110
00111 IplImage *dst=getColorImage(src);
00112
00113 for(int i=0;i<vecKalmanObjects.size();i++) {
00114 vecKalmanObjects[i]->predictionUpdate(vecLastPointUpdate[i].x,vecLastPointUpdate[i].y);
00115 vecKalmanObjects[i]->predictionGet(vecKalmanPredicted[i]);
00116 CvPoint pre=vecKalmanPredicted[i];
00117 cvLine( dst, cvPoint(pre.x-iCrossLen,pre.y),cvPoint(pre.x+iCrossLen,pre.y), CV_RGB(255,0,0),1,CV_AA);
00118 cvLine( dst, cvPoint(pre.x,pre.y-iCrossLen),cvPoint(pre.x,pre.y+iCrossLen), CV_RGB(255,0,0),1,CV_AA);
00119 }
00120 return dst;
00121 }
00122
00123 std::vector<CvPoint> Tracking::getKalmanPoints(){
00124 return vecKalmanPoints;
00125 }
00126
00127
00128
00129
00130
00131 std::vector<CvPoint> Tracking::getKalmanPredicted(){
00132
00133
00134 return vecKalmanPredicted;
00135 }
00136 std::vector<CvPoint> Tracking::getLastPointUpdate(){
00137 return vecLastPointUpdate;
00138 }
00139
00140 IplImage* Tracking::getColorImage(IplImage *src_image){
00141 if (cvGetElemType(src_image)==0){
00142 IplImage *dst=cvCreateImage( cvGetSize(src_image), 8, 3 );
00143 cvCvtColor( src_image, dst, CV_GRAY2BGR );
00144 cvReleaseImage(&src_image);
00145 return dst;
00146 } else
00147 return src_image;
00148 }
00149