条形码阅读器程序:条形码识别方法

时间:2010-01-02 18:52:07

标签: image-processing barcode barcode-scanner

我是图像处理的新手,我想识别图像中的QRCode。 实际上有三种取景器模式,起初我需要找到它们。

所以我尝试了一些方法,首先是与二值化有关,但是当图像有阴影和强烈的光照差异时,很难制作出好的二值图像。 实际上,自适应保护取决于滑动窗口的大小,这可能对大条形码不利。所以,即使我制作了一个好的二进制图像,你能否建议我找到条形码的取景器模式和条形码本身的方法。如果我们谈论QRCode,最简单的方法是找到图像的所有轮廓,并选择那些方形和内部两个方形轮廓的轮廓。

另一种方法是扫描图像的每条水平线以找到正确的取景器图案,这取决于二进制图像的制作程度。

所以我看到了解决这个问题的方法,但我想知道是否还有其他不同方法可以找到条形码的取景器模式?我认为模式匹配在这里并不好。你能否提出一个不依赖于照明的良好二值化方法?我尝试了很多自适应阈值二值化方法,但是它们有共同的问题,如果图像包含一个大的黑色正方形,那么二进制图像将不具有整个正方形,而是在正方形的中间有一些白色部分的正方形,这是因为自适应阈值法中滑动窗口的大小不够大。

2 个答案:

答案 0 :(得分:4)

你可以看一下ZXing使用的方法:{/ 3}}在core / src / com / google / zxing / qrcode / Detector.java下

基本上,它以大约1:1:3:1:1的图案在整个图像中看到黑白 - 黑 - 白 - 黑。除非旋转角度接近45度,135度,225度或315度,并且除非代码严重透视失真,否则此方法将找到取景器图案。然后它会交叉检查几种方式 - 垂直查看图像中的那一点以确认它也找到了这样的图案。它还有一些检查可以抛出误报,然后确定哪个模式是哪个。

答案 1 :(得分:1)

您还可以尝试使用变化率控制的阈值滞后。这是正常Threshold Hysteresis的链接。将第一个阈值设置为典型的白色值。将第二个阈值设置为小于角落中的最低白色值。

不同之处在于您要检查第一个和第二个阈值之间所有值的像素之间的差异。理想情况下,如果差异为正,则采取正常行动。但如果它是负数,你只想在差异很小的情况下达到阈值。

这将能够补偿照明变化,但会忽略背景和条形码之间的巨大变化。最终结果是二进制对象图像,而不是边缘图像。此外,没有自适应窗口可以正确地尝试尺寸。