使用Android读取低对比度(3D)打印的QR码

时间:2017-01-17 13:08:49

标签: android image-processing qr-code barcode-scanner

我目前处于需要扫描仪才能处理读取QR码的情况,如下所示。

Printed QR codes

您可以立即了解这会导致问题的原因。正常' QR码通常在白色背景上打印黑色(或其一些变体),以提供最大的对比度,这些'打印' QR码几乎没有提供。我尝试优化它们以尽可能地显示QR码和背景之间的差异,但这真的不在我的驾驶室中。我发现了一些OpenCV引用来应用某些过滤器来提取轮廓,但我担心结果会有很多不足之处。

enter image description here 人眼很难辨认最后两幅图像,更不用说计算机视觉了。在理想的情况下,最后的图像应该是完全白色的,具有几乎完全黑色的QR码。

关于扫描仪的实际实施,我已经尝试过下面列出的SDK,但没有成功获得QR码的响应。

  1. Mobile Vision API(Google Play服务)
  2. ZXing SDK
  3. Anyline SDK
  4. ZBar
  5. 简而言之,我的问题是:

    我是否可以添加一些类型的过滤,以使QR码更具可读性,或者是否有其他替代方法可以使用过滤器。

2 个答案:

答案 0 :(得分:0)

我个人会尝试以下步骤:

  1. 使用this

  2. 将色彩空间更改为实验室
  3. 仅从色彩空间中提取L通道。

  4. 使用CLAHE而非 equaliseHist

  5. 使用检测到QR的方法

答案 1 :(得分:0)

转换为亮度(或获取b& w中的图像)后,您将需要强大的二值化过滤器 - 我可以推荐在javaocr库中实现的Sauvola binarisation: https://sourceforge.net/p/javaocr/source/ci/master/tree/core/src/main/java/net/sourceforge/javaocr/filter/SauvolaBinarisationFilter.java

(有安卓演示,展示其在预览图像中的用法)

此滤镜在嘈杂和不均匀的照明条件下工作得非常好。尽管工作时间超过50x50(实际上,窗口大小对于此过滤器无关紧要),它的速度也相当快