【问题标题】:Quick and reliable algorithm to determine the existence of a QR code in an image?快速可靠的算法来确定图像中是否存在二维码?
【发布时间】:2013-09-12 15:10:50
【问题描述】:

在不实现openCV或调用二维码识别API的情况下,有没有快速可靠的算法来判断图像中二维码的存在?

本题意在改善用户扫码体验。当二维码识别失败时,程序需要知道是否真的存在二维码,以便再次扫描识别二维码,或者没有二维码,以便程序调用其他程序。

为了响应某些响应,检测程序不需要 100% 准确,而是以合理的概率返回准确的结果。如果我们可以在这里使用openCV,那么傅里叶变换将很容易实现,以检测图像中是否存在明显的高频,这是QR存在的好兆头。但是 openCV 的集成会大大增加我的程序的大小,这是我想避免的。

【问题讨论】:

  • 如果存在一种既快速又可靠的检测算法,那么任何体面的识别 API 都已经在使用它了。因此,如果您现有的 QR 码识别过程失败,您将无法通过尝试自己查找 QR 码来获得任何收益。
  • 我不能完全同意。如果这个论点有效,那么所有现有的算法或程序都不会有任何改进。
  • 检测程序不需要 100% 准确,但会以合理的概率返回准确的结果。如果我们可以在这里使用openCV,那么傅里叶变换将很容易实现,以检测图像中是否存在明显的高频,这是QR存在的好兆头。但是 openCV 的集成会在很大程度上增加我的程序的大小,这是我想避免的。 @凯文
  • 是否需要区分二维码和其他二维码,如Data Matrix?
  • @Rethunk 谢谢!这不是必须的。我不想让这个问题过于复杂。它打算对当前的二维码识别算法做一些小的改进。

标签: algorithm computer-vision


【解决方案1】:

很高兴您想向用户提供反馈。提供表明用户在查找 QR 码时“越来越热”的图形可以使查找和读取代码的过程更快、更顺畅。

您似乎已经有了答案,但为了提供更强大的解决方案和/或有选择,您可以尝试以下一项或多项:

  • 使用 N 次迭代来变形封闭的暗像素,生成的方形棋盘图案应该更接近于实心正方形。这是我用来确定是否存在 DataMatrix(类似的二维码)是否可读的检测方法的一部分。这是否有效很大程度上取决于您的背景。
  • 在应用 FFT 之前,考虑找到仿射变换以减少透视失真。如果由于透视缩短导致频率有点分散,分析 FFT 数据可能会很麻烦。
  • 您可以使用诸如局部二进制模式 (LBP) 之类的纹理度量或诸如 Law's Texture 方法之类的旧技术来获得一些不错的结果。您甚至可能很幸运,能够检测到二维码和棋盘图案之间纹理度量直方图中的细微差异。
  • 在棋盘状图案区域中,在 QR 码的角落寻找 3 个引导特征。您可以尝试类似 SIFT/SURF 的方法,或者通过使用在尺度空间中测试的有限数量的相关模板来实现更简单的匹配方法。
  • 说到尺度空间:生成一个图像金字塔,省去在全分辨率图像中搜索正方形的麻烦。您可以尝试使用边缘保留或非边缘保留方法来生成金字塔中较小的图像,或者两者结合。
  • 如果您有用于快速内核处理的代码,您可以尝试使用角点检测方法来减少处理的数据量以检测类似棋盘的模式。
  • 在方形区域中寻找清晰的灰度值双峰分布。纸质标签上的二维码往往具有鲜明的对比,尽管纸质标签上的二维码在低对比度下可读性很强。
  • 与其寻找灰度值的双峰分布,不如寻找梯度幅度非常一致、几乎是单峰的区域。
  • 如果您知道可读 QR 码的最小/最大区域限制,则可以概率性地对图像进行采样,以找出符合上述一项或多项标准的补丁:一种梯度幅度模式、几乎均匀的空间角点等。如果一个补丁看起来很有希望,那么就跳到另一个随机位置,但要注意新补丁之前并没有被认为没有希望。

如果您有用于图像金字塔的内存,那么使用降低分辨率的图像可能是有利的,因为您可以相当快地尝试许多测试。

就用户交互而言,您还可以在预处理期间多次更新“这可能是 QR 码”图形,并使用逐渐增强/绿色的图形(或任何适合当地文化)。例如,如果一块纹理有大约 60% 的几率是 QR 码,您可能会显示一个带有虚线边框的黄绿色薄矩形。对于 80% - 90% 的可能性,您可能会显示一个更饱和绿色的实心矩形。如果您可以大约每 100 到 200 毫秒更新一次图形,那么用户就会知道移动智能手机等某些操作是有帮助还是有害。

【讨论】:

    【解决方案2】:

    1) 将图像转换为灰度 2) 将图像分成 n x m 的单元格,例如 3 x 3。此过程旨在保证至少一个单元格将被可能的 QR 码完全覆盖(如果有) 3) 对所有单元实施二维傅里叶变换。如果任何一个单元格的X轴和Y轴高频区域的值都非常大,那么很有可能存在二维码

    我正在解决一个概率问题,而不是 100% 准确的检测。在该算法中,棋盘也会被检测为二维码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-31
      • 2021-10-09
      • 2016-06-13
      • 2010-10-10
      • 2011-01-17
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多