首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速可靠的算法,以确定QR码在图像中的存在?

快速可靠的算法,以确定QR码在图像中的存在?
EN

Stack Overflow用户
提问于 2013-09-12 15:10:50
回答 2查看 1.9K关注 0票数 2

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

本课题的目的是提高用户对QR码扫描的体验。当QR码识别失败时,程序需要知道是否真的存在QR码,以便再次扫描和识别QR码,或者没有QR码,以便程序调用其他过程。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-13 00:13:09

( 1)将图像转换为灰度2)将图像划分为n×m的单元,例如3x3。此过程旨在保证至少一个单元格将被可能的QR码完全覆盖,如果任何3 )对所有单元实现2D Fourier变换。如果在任何一个单元中,在X和Y轴的高频区域都有一个显著的大值,则很可能存在一个QR码。

我处理的是概率问题,而不是百分之百准确的检测。在该算法中,棋盘也将被检测为QR码。

票数 1
EN

Stack Overflow用户

发布于 2013-09-16 17:10:18

这是很好的,你想提供反馈给用户。在查找QR代码时,提供显示用户正在“变暖”的图形可以使查找和读取代码的过程更快、更流畅。

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

  • 使用N次迭代使黑色像素闭合,所产生的方形格子图案应该更接近填充的正方形。这是我用来确定是否存在DataMatrix (类似的2D代码)的检测方法的一部分,它是否具有可读性。这是否有效将在很大程度上取决于您的背景。
  • 在应用FFT之前,考虑找到仿射变换以减少透视失真。分析FFT数据可能是一个痛苦,如果频率有一点扩展,因为预测。
  • 您可以使用纹理度量(如本地二进制模式(LBPs) )或更老的技术(如Law的纹理方法)获得一些不错的结果。您甚至可以幸运地检测到2D代码和棋盘模式之间纹理度量直方图的细微差异。
  • 在类似棋盘模式的区域中,在QR代码的拐角处寻找三个指南特性。您可以尝试SIFT/SURF类方法,也可以通过使用在比例空间中测试的有限数量的相关模板来实现更简单的匹配方法。
  • 说到比例空间:生成一个图像金字塔,省去在全分辨率图像中搜索方块的麻烦。你可以尝试边缘保持或非边缘保存的方法来生成金字塔中较小的图像,或者两者的结合。
  • 如果您有用于快速内核处理的代码,则可以尝试一种角检测方法来减少检测类似棋盘模式的处理数据量。
  • 寻找清楚的双峰分布的灰度值在方格区。纸质标签上的2D代码往往具有明显的对比度,尽管在低对比度下,纸上的2D代码是可读的。
  • 与其寻找灰度值的双峰分布,不如寻找梯度震级非常一致、几乎是单峰的区域。
  • 如果您知道可读的QR代码的最小/最大面积限制,您可以对符合上述一个或多个标准的补丁进行概率采样:一个梯度幅度模式、几乎均匀的空间角点等。如果一个补丁看起来确实很有希望,那么跳到另一个随机位置,并注意到新的补丁之前并没有被发现没有希望。

如果您有图像金字塔的内存,那么处理降低分辨率的图像将是有利的,因为您可以相当快地尝试一些测试。

就用户交互而言,您还可以在预处理期间多次更新“这可能是QR代码”的图形,并使用逐步增强/绿色的图形(或任何适合本地文化的颜色)表示信任程度。例如,如果一个纹理补丁有大约60%的可能性成为QR代码,您可能会显示一个带有虚线边框的淡绿色矩形。对于80% - 90%的可能性,您可能会显示一个更饱和绿色的实心矩形。如果你可以每隔100到200毫秒更新一次图形,那么用户就会有一些想法,比如移动智能手机会有帮助或伤害。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18768049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档