条形码识别(3)——译码
标签: 机器视觉 条形码识别 Python
1.目标
本节的主要目标是根据bar和space的宽度译出其所表示的字符。
2.算法
条形码译码常见的方法有2个:平均值译码法和相似边距离译码法。
2.1平均值译码法
平均值译码法先测量出从起始符到终止符的像素数M,这一段的像素数是(95=3+7*6+5+7*6+3)个单位长度,则可以计算出单位长度的像素数(unit=M/95),根据单位长度的像素数,就可以计算出每个bar或者space的标准宽度,根据其标准宽度就可以查表译出相应的数字字符。
平均值译码法易于理解,编写简单,但是有一个致命的缺点,那就是对条形码图片的质量要求太高。博主按照这种方法编写了译码程序,效果差强人意。
2.2相似边距离译码法
相似边距离译码法相对于平均值译码法而言最大的好处就是对于图片的质量要求没有那么高。
2.2.1计算相似边距离与归一化值
一个数字字符由2个bar和2个space相间组合而成,如下所示:
相似边距离其实就是相邻边长度和,如下所示:
T 1 , T 2 , T 3 , T 4 T_1,T_2,T_3,T_4 T1,T2,T3,T4就是相似边距离,一般只取 T 1 , T 2 T_1,T_2 T1,T2,可以用bar和space的宽度计算。用 A T 1 , A T 2 AT_1,AT_2 AT1,AT2定义 T 1 , T 2 T_1,T_2 T1,T2的归一化值, A T 1 , A T 2 AT_1,AT_2 AT1,AT2表示相似边距离的标准长度,例如A子集的数字字符0表示为[0001101]
, A T 1 = 3 + 2 = 5 , A T 2 = 2 + 1 = 3 AT_1=3+2=5,AT_2=2+1=3 AT1=3+2=5,AT2=2+1=3,其归一化值为(5,3)
,计算相似边距离和 A T 1 , A T 2 AT_1,AT_2 AT1,AT2的方法如下:
- 计算一个bar或者space的总像素长度( L = C 1 + C 2 + C 3