目标是检测一个物体/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
(见这里)。然后你可以检查两点之间的距离,然后决定怎么做。
我不知道它是否有效,只是一个想法。