5

我是图像处理的新手,我想识别图像中的二维码。实际上有三种查找模式,首先我需要找到它们。

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

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

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

4

2 回答 2

4

可以看一下ZXing使用的方法:http ://code.google.com/p/zxing/source/browse/trunk下core/src/com/google/zxing/qrcode/Detector.java

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

于 2010-01-12T16:35:30.317 回答
1

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

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

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

于 2010-01-04T21:28:17.287 回答