检测后跟踪对象的可能性(基于特征的对象识别)

时间:2014-01-21 12:50:55

标签: android opencv image-processing computer-vision video-tracking

我正在研究android中的对象识别。到目前为止,我能够以5-8 fps的帧速率检测/识别物体。现在,我想在后续帧中跟踪检测到的对象。

到目前为止我所做的简短摘要。

  1. 将感兴趣的对象捕获并存储在手机的外部目录中作为图像。
  2. 检测并提取特征点(使用ORB特征检测器和描述符)。
  3. 在检测到的对象周围执行匹配并绘制矩形框(Homography)。
  4. 检测到的对象的示例。 enter image description here

    现在,在执行单应性后,我打算在后续帧中跟踪对象。 哪些是可以做到这一点的可能算法(这种跟踪检测后的方法是否可行)?我已经完成了粒子滤波和基于卡尔曼滤波的跟踪,但无法理解在单应性之后需要传递哪些参数来实例化跟踪。 在openCV中对跟踪算法,文档和示例代码的任何引用都会有所帮助。

    修改

    for(int i_gm=0; i_gm<goodmatches.size(); i_gm++)
            {
    
                scene.push_back(v1[goodmatches[i_gm].trainIdx].pt);
                objnew.x+=scene[i_gm].x;
                objnew.y+=scene[i_gm].y;
            }
       // calculation of centroid of the object.
          objnew.x/=scene.size();
          objnew.y/=scene.size();
    
       // Kalman predict and correct.
            KfMeasurement.setTo(Scalar(0));
            Kf.statePre.at<float>(0)=objnew.x;
            Kf.statePre.at<float>(1)=objnew.y;
            Kf.statePre.at<float>(2)=0;
            Kf.statePre.at<float>(3)=0;
            Kf.transitionMatrix=(Mat_<float>(4,4)<< 1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1);
            setIdentity(Kf.measurementMatrix);
            setIdentity(Kf.processNoiseCov,Scalar::all(1e-5));
            setIdentity(Kf.measurementNoiseCov,Scalar::all(1e-1));
            setIdentity(Kf.errorCovPost,Scalar::all(.1));
            Mat prediction = Kf.predict();
            Point predictPt(prediction.at<float>(0),prediction.at<float>(1));
            KfMeasurement(0)=objnew.x;
            KfMeasurement(1)=objnew.y;
            Point measPt(KfMeasurement(0),KfMeasurement(1));
            Mat estimated=Kf.correct(KfMeasurement);
            Point statept(estimated.at<float>(0),estimated.at<float>(1));
            circle( kalRgba,statept,50, Scalar(255,255,255), 3 );
            circle(kalRgba, measPt, 10,Scalar(10,10,255), 3 );
            circle( kalRgba,predictPt,10, Scalar(100,255,0), 3 );
    

0 个答案:

没有答案