实时检测视频上的唯一图标

数据挖掘 Python 计算机视觉 opencv
2022-02-25 22:13:04

对于我正在从事的项目,我希望能够检测视频片段中的唯一图标/条形码。假设框架中有 10 个人,每个人都穿着一件带有相似但唯一标识符(类似于条形码)的 T 恤,程序将检测每个唯一标识符。

以下是我现在正在使用的三个选项以及相关的缺点:

  1. 使用蛮力特征匹配(SURF、SIFT 或 ORB) - 不确定在人们移动和旋转时这在现实世界场景中的准确度如何,因此如果标识符非常相似,这仍然可以达到良好的准确度吗?
    1. 训练微型 YOLO 模型。现在这似乎是一个不错的选择,但不是很可扩展,而且似乎有一个更简单的解决方案
    2. 简单的模板匹配 - 由于视角、大小和角度的变化,这不是一个很好的选择

任何建议将不胜感激!

编辑

我想为上下文添加一些图像。这个想法是每个人都会有一个标志,周围有一个独特的二进制模式。见下图:

唯一 ID-1 唯一 ID-2

正如你所看到的,由于周围的条纹,两者相似但不相同。

我正在对其应用 Adoptive Gaussian Blur 并获得类似“条形码”的图像,这些图像明显不同

唯一 ID-1 唯一 ID-2

现在,在我看来,正常的 SURF 匹配至少不能可靠地识别两个图像中的细微差别

1个回答

好吧,关于条形码/二维码,您首先需要考虑的是它们通常是黑色的,背景是白色的。

如果使用 T 恤或独特标签,则应遵循此模式(或任何一种)。您应该能够轻松检测到这些。以这个图像处理类为例,最后有一个条形码示例,我在这里复制:

0 - 给定图像:

原来的

1 - 您可以通过转换为灰度然后执行自适应阈值进行二值化,这基本上是像素的聚类算法:

在此处输入图像描述

2 - 然后你可以通过离心率过滤斑点

在此处输入图像描述

3 - 然后按主轴:

在此处输入图像描述

4 - 最后是方向

在此处输入图像描述

这是在硬表面上分割条形码的基本算法。T 恤会呈现扭曲的条形码,但如果您可以通过检测二进制图像中可能的条形码来缩小搜索区域,那么您可能会获得很大的加速,然后使用更复杂的算法,例如您的算法提出。

建议:

1 - 在前面算法的步骤(3)之前添加一个FCN来重新生成被T-Shirt表面扭曲的图像

2 - 训练 CNN 以检测二进制图像上的条形码斑点(替换步骤 2,3 和 4)

更新

我将添加另一个答案,因为您通过举例改变了问题。您的唯一标识符被视为由具有 3 个不同半径的同心圆弧的固定中心(等于所有标识符)组成r1<r2<r3和半径的弧r2r3用孔刺破,这些孔应该使它们与每个标识符中的不同。

您可以使用阈值和霍夫变换来识别圆,您可以使用中心作为参考来计算孔之间的角距离。然后,您可以通过以下方式将标识符与另一个标识符不同:

  • 数孔然后
  • 分析它们的角距离

您还可以使用弧线来预测/计算标识符因图像失真(旋转、移位、非线性变换)而遭受的变换并对其进行校正。