跨多个视频帧的Blob位置比较



目标是检测一个物体/s(可以是多个)在ROI中是否静止一段时间(应用:阻塞斑马车道检测)。也就是说观察每一团在时间t

下的变化
  • 输入=视频文件

那么,假设行人过街车道是ROI。背景减法只发生在ROI内部,如果每个blob(车辆)在那里静止不动,则将分别观察时间t。

我想的是获得blob在第1帧和第n帧(时间阈值)的位置,并检查位置是否相同。但这必须应用于每个斑点假设有多个斑点。所以这里涉及到一个循环,一个接一个地处理每个斑点。但是如何处理每个blob,获取它在第1帧和第n帧的位置,然后比较它们是否相同(如果是,那么它在时间t内静止不动,因此它是"阻塞")。然后移动到下一个blob。

我的逻辑写在java代码上:

 //assuming "blobs" is an arraylist containing all the blobs in the image
   int initialPosition = 0, finalPosition = 0;
   static int violatorCount=0;
 for(int i=0; i<blobs.size(); i++){ //iterate to each blob to process them separately
     initialPosition = blobs.get(i).getPosition();
     for(int j=0; j<=timeThreshold; j++){
        if(blobs.get(i) == null){ //if blob is no longer existing on frame j
             break;
        }
        finalPosition = blobs.get(i).getPosition();
     }
     if(initialPosition == finalPosition){
        violatorCount++;
     }
  //output count on top-right part of window
 }

你能分享关于如何在Matlab或OpenCV中实现目标/想法的逻辑吗?

光流是一个选项,这要归功于PSchn。我可以考虑其他选择

听起来像光流。你可以使用OpenCV实现。将您的点与下一个图像一起传递给cv::calcOpticalFlowPyrLK(见这里)。然后你可以检查两点之间的距离,然后决定怎么做。

我不知道它是否有效,只是一个想法。

相关内容

  • 没有找到相关文章

最新更新