Algorithm 确定图像中是否存在二维码的快速可靠算法?

Algorithm 确定图像中是否存在二维码的快速可靠算法?,algorithm,computer-vision,Algorithm,Computer Vision,如果不实现openCV或调用QR码的识别API,是否有快速可靠的算法来确定图像中是否存在QR码 此问题的目的是改善扫描二维码的用户体验。当二维码识别失败时,程序需要知道是否确实存在二维码,以便再次扫描和识别二维码,或者没有任何二维码,以便程序调用其他程序 为了响应某些响应,检测程序不需要100%准确,而是以合理的概率返回准确的结果。如果我们可以在这里使用openCV,傅里叶变换将很容易实现,以检测图像中是否存在明显的高频,这是QR存在的良好迹象。但是openCV的集成将大大增加我的程序的大小,这

如果不实现openCV或调用QR码的识别API,是否有快速可靠的算法来确定图像中是否存在QR码

此问题的目的是改善扫描二维码的用户体验。当二维码识别失败时,程序需要知道是否确实存在二维码,以便再次扫描和识别二维码,或者没有任何二维码,以便程序调用其他程序

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

1)将图像转换为灰度 2) 将图像分成n x m的单元,比如说3 x 3。本程序旨在确保至少一个单元完全覆盖在可能的二维码(如有)中 3) 对所有单元进行二维傅里叶变换。如果在任何单元格中,在X轴和Y轴的高频区域中存在显著较大的值,则极有可能存在QR码


我要解决的是概率问题,而不是100%准确的检测。在该算法中,棋盘也将被检测为QR码

您希望向用户提供反馈,这太好了。提供显示用户在查找二维码时“越来越热”的图形可以使查找和读取二维码的过程更快、更顺畅

看起来您已经有了答案,但要提供更可靠的解决方案和/或提供更多选项,您可以尝试以下一种或多种方法:

  • 使用N次迭代来变形闭合的暗像素,得到的方形棋盘图案应该更接近于填充的正方形。这是我用来确定DataMatrix(类似的2D代码)是否存在的检测方法的一部分,无论它是否可读。这是否有效在很大程度上取决于你的背景
  • 在应用FFT之前,考虑寻找仿射变换以减少透视失真。分析FFT数据可能是一件痛苦的事,如果频率由于前缩而有一点扩散
  • 您可以使用纹理度量(如局部二进制模式(LBP))或旧技术(如Law的纹理方法)获得一些不错的结果。您甚至可能会很幸运,能够检测到2D代码和棋盘格图案之间的纹理度量直方图中的细微差异
  • 在棋盘格图案的区域中,在二维码的拐角处查找3个导向功能。您可以尝试类似SIFT/SURF的方法,或者通过使用在比例空间中测试的有限数量的相关模板来实现更简单的匹配方法
  • 说到比例空间:生成一个图像金字塔,省去在全分辨率图像中搜索正方形的麻烦。您可以尝试使用保留边缘或非保留边缘的方法来生成金字塔中较小的图像,或者两者的组合
  • 如果您有用于快速内核处理的代码,那么您可以尝试一种角点检测方法,以减少用于检测棋盘模式的数据量
  • 在方形区域中寻找清晰的灰度值双峰分布。纸张标签上的2D代码往往具有鲜明的对比度,即使纸张上的2D代码在低对比度下非常可读
  • 与其寻找灰度值的双峰分布,还不如寻找梯度大小非常一致、近乎单峰的区域
  • 如果您知道可读QR码的最小/最大面积限制,您可能会对图像中符合上述一个或多个标准的面片进行采样:一种模式的梯度大小、几乎均匀的角点间距等。如果面片看起来很有希望,然后跳转到另一个随机位置,并警告说新补丁之前并没有被发现是毫无希望的
如果您有图像金字塔的内存,那么使用分辨率较低的图像可能是有利的,因为您可以相当快地尝试一些测试


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

如果存在一种既快速又可靠的检测算法,那么任何像样的识别API都已经在使用它了。因此,如果您现有的二维码识别过程失败,您将无法通过尝试自己找到二维码获得任何收益。我不能完全同意。如果这个论点成立,那么所有现有的算法或程序都不会有任何改进。检测程序不需要100%准确,但会以合理的概率返回准确的结果。如果我们可以在这里使用openCV,傅里叶变换将很容易实现,以检测图像中是否存在明显的高频,这是QR存在的良好迹象。但是openCV的集成将大大增加我的程序的大小,这是我想要避免的@Kevin您是否需要区分二维码和其他二维码,例如