领域备注高容量彩色条形码

Gavin Jancke

我们都非常熟悉条形码,虽然它们一点也不引人注目,但在日常生活中却无处不在,从食品包装到发货标签,到处都能看到条形码的身影。条形码最初是在 1974 年出现在零售业中,当时是由宽度可变的一维竖直条组成,其中可存储 12 位数字。八十年代后期,条形码逐渐发展成为计算能力得到大幅提高的二维黑白条形码(矩阵码),其数据密度从只有几位数字增加到数百个字节。

2003 年,我开始着手 Microsoft Research 的生物防伪身份证项目。我不但需要存储加密文本(如姓名和年龄),还需要存储指纹或虹膜扫描样板。对于现有的黑白条形码而言,要存储所有这些必要数据,其尺寸将会比身份证本身还要大,因此显然需要采用一种新方法。

我必须决定如何在每个符号中存储多位信息,以符合二维黑白条形码的标准。通过采用彩色而非黑白,即可增加存储的数据位数,四种颜色可增加两位,而八种可增加三位。

此外,我还对符号形状进行了试验,以查看在扫描时不影响注册效果的情况下,其排列是否还能更紧凑一些。最初使用的六边形看起来非常不错,但这种形状混合在一起后,计算机将无法清晰识别。

最终我决定使用三角形,因为在紧凑空间中巧妙交织的同时,它们仍然可以保持其特有的形状。通过使用多行多种颜色的三角形,可将密度容量增加到三维。

janke.fieldnotes.gif

另外,还有许多不确定因素需要解决。在处理颜色时面临的其中一个最大问题是打印规格和光照条件的变化。虽然肉眼可以轻松地分辨各种颜色(至少对那些非色盲的人来说),但对计算机而言却并非如此。

我采用了数种不同的方法来确保软件能准确读取颜色。我在条形码中创建了一个小到几乎无法发现的调色板,其中包含了存在于实际条形码中的基准色。这将提供一种定标机制,可准确指定构成某种特殊颜色(例如红色)的信息。我还尝试了一些更高级的技术,如自定义简化颜色分类算法,它可以利用颜色空间理论将颜色分为不同的集合。这两种方法都很有效,而且可以互为补充。

此项目的目标之一是编写一段用手机读取条形码的程序。说到手机,人们首先会想到光照不足、聚焦不准、焦距镜头不可变等特点。一个更为严峻的挑战是如何使用基于整数的、运行速度相对缓慢的手机 CPU 来处理本该通过计算机视觉完成的工作,为此团队需要提出某种可靠的理论,以解决如何利用尽可能少的像素来检测图像中的条形码的问题。扫描过程需要在某一读取质量范围内都能工作,如从清晰明亮的 LCD 面板到亮度较低、聚焦不准的实际印刷品。

最终算法在解码条形码图像时,实时照相机视频帧要快于实际帧速率 — 使用 200Mhz 的 CPU 时大约快 10 毫秒。在条形码图像中,可以被检测到的最小数据负载是单位面积像素数至少为 45 个。

在各种不同情况下对此工作进行测试验证花费了两年多的时间。此技术现已授权给第三方,今年晚些时候,利用此技术开发的一些激动人心的应用程序将会面世。

Gavin Jancke 是 Microsoft Research 的工程主管,负责运营高级开发小组和 Web 体验团队。以前他曾是 SQL Server 的产品支持工程师、软件工程师,并且曾担任过比尔·盖茨的执行技术咨询人员。