【问题标题】:Bounding Box in Image Difference in Video视频中图像差异中的边界框
【发布时间】:2019-04-05 19:47:25
【问题描述】:

我正在尝试在视频帧中找到对象的边界框。我假设当前的边界框检测在原始帧中找到对象,而我想在 Frame Difference 中提取边界框。在下图中,我从框架中减去了背景,结果是正确的图像。

由于帧差中的大多数像素将为零,我假设对此的边界框检测应该在计算上很便宜。

【问题讨论】:

  • 从每个白色像素开始 BFS 或 DFS(除非您已经访问过它)并计算到达像素的边界框。或者,在此之前执行形态关闭以消除小岛。
  • 问题是图像差异不是那么干净。由于一些光线变化,很少有像素不为零,如果我做 BFS,那么它们也可能连接两个对象。我应该对视频帧进行某种平滑处理吗?
  • 然后在之前执行二值化(例如使用简单的阈值方法)。
  • 我假设二值化是指将像素转换为二值强度。对吗?
  • 是的,0/1 强度(白色或黑色)。

标签: algorithm opencv image-processing bounding-box


【解决方案1】:

您没有使用特定语言进行标记,所以我将给出一个伪代码答案,并带有指向要使用的 OpenCV 函数的指针:

  1. 如果您想确保将靠近的不相交区域分配到同一个框,请填补空白:morphologyEx 使用 MORPH_CLOSE 操作并使用小内核。

  2. 连接组件分析:connectedComponents。这会生成一个整数图像,其中每个“对象”的所有像素都涂有相同的值(标签)。

  3. 查找每个标签的 x 和 y 坐标的最小值和最大值。您可以在 OpenCV 中使用 connectedComponentsWithStats 将此步骤与上一步结合,并获取 stats 输出的 CC_STAT_LEFTCC_STAT_TOPCC_STAT_WIDTHCC_STAT_HEIGHT 列。

是的,这很便宜。

【讨论】:

  • 对图像差异进行边界框检测的整个动机是它应该比原始图像的边界框检测便宜。你能解释一下计算复杂度的比较吗?
  • 我可以使用上述函数来获取任何图像的边界框(不是特定的帧差),因为 connectedComponents 将标记对象的像素。我可以使用您的步骤 3 来获取边界框。这个怎么便宜?
  • @random_28:我不确定你的意思。是的,这是在二进制图像中查找对象边界框的标准方法。如果您不进行产生二进制输出的背景比较,您将获得灰度值(或 RGB?)图像,并且您不能对其使用连通分量分析。您需要应用某种对象检测,这在计算上是昂贵的。背景减法是我所知道的最便宜的对象检测形式...
  • 这是在 VIDEO 帧中进行边界框检测的标准且已知的方法吗?我的意思是取背景帧和取帧差异?
  • @random_28:这里有两个不同的问题:(1)物体检测,(2)寻找物体的边界框。 (1) 可以用背景减法解决。 (2) 应该用连通分量分析来解决。您已经解决了(1),并且正在询问如何做(2),所以我回答了如何做(2)。这两个任务是正交的。您可以通过其他方式解决 (1),例如使用深度 CNN,但您仍然需要执行 (2),此处概述的方法就是执行此操作的方法。
猜你喜欢
  • 2019-08-06
  • 2021-03-31
  • 2013-01-19
  • 2021-08-29
  • 1970-01-01
  • 2019-07-28
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多