【发布时间】:2014-04-05 06:24:32
【问题描述】:
我在扫描激光或喷墨打印的 QR 码时遇到了故障,我猜这是由于固体墨水/碳粉覆盖率不足以及我在两者中使用的图像处理参数的组合我可以控制的转换步骤。我想出了一个“解决方案”,但我不知道它有多强大,我想了解正在发生的事情以及是否有更可靠的方法。
我无法控制将作为输入接收的 PDF 文件,并且我不知道有任何工具可以可靠地让我检查我拥有的 PDF 样本中的图像,但我很确定这些样本是某种灰度图像。例如,这里是一个使用 Acrobat Reader 放大的 QR 码单元的一角的屏幕快照。我假设黑色内的模糊圆圈代表图像中的单个“光”像素。
为了将 PDF 转换为 PNG 文件,我使用带有 sDevice=pnggrey 的 ghostscript。在ZXing无法识别输出分辨率为200dpi的二维码后,我将输出分辨率改成100dpi就成功了,大概是因为通过将亮像素与周围更多的黑色像素进行平均,得到的水平低于随后用于将图像转换为 ZXing 处理的单色图像的阈值。
随后的图像处理步骤来自 ZXing.rb Ruby gem,包括来自 ZXing 的对 LuminanceSource 和 GlobalHistogramBinarizer 的调用。后者使用单个全局黑点进行二值化,并建议将HybridBinarizer 用于桌面应用程序,但由于在线版 ZXing 上的图像也失败了,所以我没有费心尝试“HybridBinarizer”。
200 dpi(失败)图像:
100 dpi(后续)图像:
更新:我尝试以 600 dpi 扫描转换 PDF,并且也成功了。很感兴趣,然后我用手机拍了一张打印出来的图像,这是生成的 JPEG 中一个模块的放大版:
正如预期的那样,手机二维码应用几乎可以从任何角度和距离识别图像。
更新 2 以下是(后续)600dpi (PNG) 图像中的一些代码:
【问题讨论】:
标签: image image-processing zxing qr-code