记号信息的读取装置的制作方法

文档序号:6407335阅读:377来源:国知局
专利名称:记号信息的读取装置的制作方法
技术领域
本发明涉及条形码等记号信息的读取装置。
由于最近受人注目的POS(point-of-sale销售及时信息管理系统)的普及,条形码已广泛为人们所知。这里的所谓条形码,是指由大小相异的条带与空白平行编组的模式形成一个条形码符号,如有必要可以把包含检验数位(チツクデジツト/checkdigit)的必要的符号群平行地排列,例如在前后配置开始/停止符号的特征指定模式所构成的记号。
作为被广泛用于一般消费品的条形码,在日本已标准化为JAN(JapanArticleNumber-日本商品序号)。另外,作为条形码的其他应用,还有物流记号,该记号是由在上述的JAN码前追加一位或二位物流识别码构成的。
上述的哪类条形码记号都称为一维条形码。这些码体系可以容纳的信息量至多是数十信息组(字节byte=8bit)。
然而,近年来对条形码信息量要求的呼声越来越高了,与之相呼应,各种被称为二维条形码的记号体系也相继发表。
按照这些记号体系,哪一类都具有可以把比一维条形码多得多的信息编码化的特征。这个体系所采用的是通过一维条形码的堆积使信息量增加的手段。由这样方法构成的记号称为堆积式条形码。PDF-417的码体系就是其中之一种。
过去的作为读取这样的堆积式条形码的记号信息读取装置,如特开平2-268382号公报所公开的那样的激光扫描式装置已为众所周知。在该装置中,是用激光光做二维扫描来读取,译解条形码记号信息的。
另外,在特开平2-268383号公报中还公开了用二维摄像装置摄取条形码并把条形码的图像读入存储器,再根据这个数据,译解条形码记号信息的装置。
然而,在上述的这些条形码记号信息读取装置中,存在着从扫描或摄得的条形码记号信息中不能获得可以解码的信息,即尽管解码也得不到所期望的结果时,因为装置还是象平时那样地做解码处理,从而在处理上费时间。亦即,在不能解码的时候,虽然必须再次扫描或摄取要读取的条形码而得到条形码记号信息,但是是否可以解码则必须进入解码处理才能知道,不能在扫描或摄取条形码的时候立刻就知道是否可以解码,所以需要没用的等待时间。
本发明的目的是提供在读取条形码记号标识,特别是读取堆积式条形码标识时可以节省没用的等待时间的记号信息读取装置。
本发明可以提供具有以下装置的记号信息读取装置将由条带和空白组成的条形码做成二维像摄像的摄像装置;把从该摄像装置获得的信息进行存储的存储装置;其于存储在该保储装置的信息,推定条形码的码位置的位置推定手段;以由该位置推定手段推定的码位置为依据,推定条形码是否可以译解的解码可能性推定手段。
亦即,在按本发明的记号信息读取装置中,存储装置存储从把由条带和空白组成的条形码作为二维像摄像的摄像装置获得的信息,尔后以由位置推定手段根据被存储于上述存储装置的信息所推定的条形码的码位置为基础,利用译码可能性推定手段推定条形码是否可以解码。由此,因为在扫描或摄取条形码时立刻可以知道解码是否可能,故可以节省没用的等待时间。即,只在解码可能性推定手段的推定结果是可以解码的情况时才译解被存储于上述存储装置的信息。
附图的概要说明图1所示是用于本发明第一实施例的记号信息读取装置的框图。
图2所示是以堆积式条形码为例的PDF-417码体系的条形码标识图。
图3为假想的在帧存储器的像素阵列上投影了PDF-417码体系的条形码标识图像的模式图。
图4为说明用于本发明之第一实施例的记号信息读取装置的概略动作的流程图。
图5为说明图4中的前处理指令的流程图。
图6为说明图4中的图像读入指令的流程图。
图7为说明图4中的标识检出指令的流程图。
图8为表示取入供于说明标识检出手段的PDF-417码体系的条形码标识的图像时的帧存储器的内容。
图9为表示取入供于说明求标识的倾斜的手段的PDF-417码体系的条形码标识的图像时的帧存储器的内容。
图10为说明图7中的开始/停止码检出指令的流程图。
图11A至图11C是表示图10中的扫描及检出指令的流程图。
图12为说明图7中的开始边缘位置检出指令的流程图。
图13为说明图7中的停止边缘位置检出指令的流程图。
图14为说明图7中的求标识的倾斜的指令的流程图。
图15为说明图4中的手颤检出指令的流程图。
图16A及图16B为说明图15中的开始码校验指令的一系列的流程图。
图17A及图17B为说明图15中的停止码校验指令的一系列的流程图。
图18为说明图四中的阈值决定指令的流程图。
图19为表示取入供于说明阈值检出线的PDF-417码体系的条形码标识的图像时的帧存储器的内容之图。
图20是表示开始码的微分波形图。
图21为说明图4中的指示器信息决定指令的流程图。
图22为表示取入供于说明行序号及列序号的决定手段的PDF-417码体系的条形码标识的图像时的帧存储器的内容。
图23A及图23B为说明图4中的扫描方程式决定指令的一系列流程图。
图24为表示取入说明始点列及终点列的计算手段的PDF-417码体系的条形码标识的图像时的帧存储器内容。
图25为说明图4中的补充检查指令的流程图。
图26为说明补充检查指令的向帧存储器的条形码标识投影像。
图27为说明图25中的ROW(行)检出指令的流程图。
图28为说明图27中的ROW(行)序号检出指令的流程图。
图29为说明图4中的最佳扫描指令的流程图。
图30为表示取入说明最佳扫描手段的PDF-417码体系的条形码标识的图像时的帧存储器的内容。
图31为说明图4中的智能(intelligent=ィンテリジエント)扫描指令的流程图。
图32A及图32B为表示说明变换成图28,29及30中的宽信息的变换指令的流程图。
图33为说明为进行宽信息变换的峰值选择法则的图。
图34为表示为计算峰值间距离的二个峰值位置图。
图35为说明用于本发明的第二实施例的记号信息读取装置的概略动作的流程图。
图36为图35中的记号检出指令的流程图。
图37为图36中的开始/停止位置检出指令的流程图。
图38为图37中的开始/停止码检出指令的流程图。
图39为图38中的扫描及检出指令的流程图。
图40为图36中的数据倾斜检出指令的流程图。
图41为图40中的倾斜推定检出指令的流程图。
图42A及图42B分别为说明倾斜推定检出的图。
图43为图35中的扫描指令的流程图。及图44为扫描的说明图。
以下,参照


本发明的实施例。
图1所示为本发明第一实施例结构。本实施例的记号信息读取装置由成像透镜3、二维摄像装置5,帧存储器6及数据处理装置7构成。数据处理装置7虽然没有特殊图示,但却起着如由CPU和存储器构成为推定条形码的位置信息的位置检出部7A及倾斜检出部7B,以所推定的码排列为基础判定是否进行解码处理的解码执行决定部7C、以及按照上述判定结果进行条形码的译解的解码部7D等种种机能部的作用。此外,在该条形码处理装置7内的存储器中,包括为保存如后述的各种常数及变数所需的种种寄存器。
被印刷于货物1上的堆积式条形码标识,如PDF-417格式化的条形码标识2,通过成像透镜3,成像于搭载在二维摄像装置5上的光电转换面4上。由二维摄像装置5所光电转换了的标识信息,作为映像信号被时序地取入帧存储器6二个画面(Bank06A,Bank16B)。
图2,作为堆积式条形码的一个例子,表示PDF-417的标识结构。该条形码标识2具有作为由条带和空白编组而成的条形码符号群构成的应该可以解码的信息成分区域即标识部21,和被配置于其前、后的作为开始/停止符号的开始码22及停止码23。并且,一个信息单元,除停止码23外均由四个条带和空白构成。此外,开始及停止码22、23是从被称为“大条带”的大的条带22A、23A开始的。
进而,所谓“信息单元”在JAN码中是指被称为“符号”的东西,在PDF-417中是指被称为“码字”的东西(以下单独省略为“码”)。特别地,在PDF-417中,用条带和空白的模式组成的这个信息单元一旦被变换成用“0”~“928”所表示的中间信息后,根据规定的规则被解码成最终语言。这个最终语言,在PDF-417中,支持ASCII文字或二进制及其他。
标识部21由存在于开始码22及停止码23旁边的被称为行指示器21A的码和被夹在这些行指示器21A之间的由记载着实际数据的多数的数据列21B而成的标识矩阵21C所构成。在行指示器21A中记载着标识的行方向、列方向的尺寸或安全水平等。因而,如果解读了这个行指示器21A的信息,就可以决定标识的信息尺寸或可修复的码数等。
这里,所谓“安全水平”,是指数据修复(错误订正)能力的水平。若设安全水平为n,则可修复的码数就是[2n+1-2]个。该式中被减去的二个被用于错误检出。也就是,在标识矩阵21C中,为错误检出用的总是包含着二个的,如所使用的众所周知的读所罗门(read solomon/リ一ドリロモン)符号。在解码时,通过利用这个错误检出/修复码,可以修复被错误检出的实际的信息数据。
而且在这个图2还显示着具有4×2的标识矩阵(因而码数是“8”)的条形码标识。
现在,图3表示假想的在帧存储器6的像素阵列上投影了具有4×1标识阵列(因此码数是“4”)的PDF-417的标识图像的模式图。而且同图中的网格不是表示一个像素,而是n×n像素的大小。
在数据处理装置7,按照下面将详细说明那样的算法,进行标识检出,读出标识信息,进行解码并把解码结果输出给未图示的主机装置等。
即图4为表示在该数据处理装置7所执行的算法的概略的流程图。而且在本说明书中,流程图是按照编程语言C的记述方式书写的。
首先,调用前处理指令(步骤S1)并设定变数INCO的参数(实际中初始设定种种参数)。
此后,调用图像取入指令(步骤S2)、把图像连续地取入帧存储器二个画面(BankO6A,Bank16B)。这里,所谓的连续,首先是把一个画面的图像数据存入Bank06A,接着把另一画面的图像数据存入Bank16B这一形式。此时,最初是把发出取入指令后的最新的帧数据取入Bank06A,接着,在其取入结束之后,再次发出取入指令并把最新的帧数据取入Bank16B,因而,在二个画面的数据之间存在摄像的时间差(该时间差为(存入Bank06A的时间)+(0~1/30秒)。
然后,调用标识检出指令(步骤S3),利用这个被取入的图像数据内的Bank06A,检查标识存在与否,若标识存在便检出标识信息。
进而判断在上述步骤S3的标识检出处理的结果(步骤S4),在标识不存在的场合,再次转移控制到上述步骤S1调用前处理指令。
另一方面,在标识存在时,调用手颤检出指令(步骤S5),利用在上述步骤S2被取入的图像数据内的Bank16B进一步推定手颤的影响。这里,所谓手颤是指在把印刷着条形码标识2的印刷物安载在这个读取装置的时候,因高频度(多次反复)而产生的图像的颤动。
接着,判断上述步骤S5的手颤检出的结果(步骤S6),在发生了手颤的时候,再次转移控制到上述步骤S1并调用前处理指令。
而在没发生手颤的时候,调用阈值决定指令(步骤S7),在后述的步骤SB的补充检查指令,步骤SD的最佳扫描指令,以及步骤SF的智能扫描指令中从做为处理对象的行数据同取边缘间的宽信息的处理中求要利用的阈值(变数THRESHOLD)。
其次,调用指示器信息决定指令(步骤S8),并读取标识2的行指示器21A,决定标识的尺寸等。
进而,在上述步骤S8的决定指令中判断是否决定了标识尺寸等(步骤S9),在没被决定的时候,再次转移控制到上述步骤S1并调用前处理指令。
另一方面,在标识尺寸等被决定的时候,调用扫描方程式决定指令(步骤SA),定义为全面扫描标识2的各种变数。
接着,调用补充检查指令(步骤SB),进行各“码字”位置的推定,进而检查各“码字”的位置是否在画面之内。
并且,通过判断在上述步骤SB被推定的画面外即不能读取的码的数是否是在可修复数以上,判断解码可能与否(步骤SC),当是在其数以上时则认为解码不可能而再次转移控制到上述步骤S1并调用前处理指令。
另一方面,当是在其数之下时,即判断为可以解码时,调用最佳扫描指令(步骤SD),用在上述步骤SA所定义的各种变数以最佳的间隔全面扫描标识,读取标识信息。进而此处的所谓“最佳扫描”是指以最少的计算量就可以全部确定标识信息最佳的间隔所进行的扫描。
并且用在上述步骤SD的最佳扫描读取的信息判断解码可能与否(步骤SE),解码可能时,转移控制到步骤SH的解码处理。
另外,当解码不能时,调用详细后述那样的智能扫描指令(步骤SF)。该智能扫描指令,利用在上述步骤SB所定义的各种变数扫描在上述步骤SD没被读取的码位置,读取标识信息。
进而,用在该步骤SF和步骤SD读取的信息判断解码可能与否(步骤SG),在解码可能时,转移控制到步骤SH的解码处理。
另外,当解码不可能时,则再次转移控制到上述步骤S1并调用前处理指令。
在步骤SH的解码处理中,译解在上述步骤SD的最佳扫描指令和上述步骤SF的智能扫描指令中读取的信息,并把其译码结果输出给图中未示出的主机装置。
下面,详细说明以上所述的各种处理指令。
首先参照图5的流程图,说明在上述步骤S1被调用的前处理指令。
即,首先判断变数INCO的值是否与作为预先确定的检出间隔的基准增量相同(步骤S11)。如果一样,则把变数INCO再设定为附加了规定的修正增量的值(步骤S12);若是不同,则再设定其为上述基准增量(步骤S13)。由此,该变数INCO的值由图4中的概略流程图中的大循环,通过该前处理指令以奇数次数和偶数次数变化。还有,图中的记号“==”表示“是一样的”,记号“=”则表示代入。另外,变数INCO的值表示标识未检出时的检出间隔。
下面,参照图6的流程图,说明在上述步骤S2中被调用的图像取入指令。
首先,把图像数据从二维摄像装置5取入帧存储器6的Bank06A(步骤S21)。然后,再把图像数据从二维摄像装置5取入帧存储器6的Bank16B(步骤S22)。由此,形成连续取入二个画面的图像数据。
接着,参照图7的流程图以及图8的标识投影像的图(该图表示具有4×1标识阵列(故码数是4)的条形码标识),说明在上述步骤S3中被调用的标识检出指令。该标识检出指令包括检查标识的有无、检查标的位置信息即求为了从帧存储器6中与标识平行地抽取图像数据所需的抽取范围(变数TOP及BOTTOM)和标识的倾斜(变数SLOPE)这样两种的标识检出处理。这里变数TOP的值表示标识的顶座标,变数BOTTOM)和标识的倾斜(变数SLOPE)这样两种标识的检出处理。这里变数TOP的值表示标识的顶座标、变数BOTTOM的内容表示标识的底座标,而变数SLOPE的内容表示标识的倾斜。
在该标识检出指令中,首先把处理对象图像设为帧存储器6的Bank06A(步骤S31)。尔后,初始化标识检出标志(步骤S32)。这个标识检出标志由开始检出标志start-flag和停止检出标志stop-flag组成。这些标识检出志,在后述的其他处理中用于指示应该选择及处理开始码22及停止码23的哪一方。这是因为在检出了开始码22和停止码23双方的时候,有必要选择可靠性更高的一方所致。
接着,调用开始/停止码检出指令(步骤S33),检查取入帧存储器6的Bank06A的图像数据中是否存在开始/停止码。即检查出图8中的座标e,f,g,h(并不一定限于检出所有的这四个座标变量,例如,图9所示的情况就可能求不出座标变量f及h)。通过这个指令,如可以检出并确定开始(或)停止码,则可在开始码22的场合定义图8的帧存储器6上的座标变量g,或在停止码23的场合定义座标变量h。这里各座标变量分别表示为e为最初发现开始码22的座标,f为最初发现停止码23的座标,g为最后发现的开始码22的座标,h为最后找到停止码23的座标。(以下各图中8为条形码标识的投影像)。
进而,判断座标变量g,h的某一方是否已被定义(步骤S34),当未被定义时,作为无标识而脱离该处理,即携带无标识的信息返回。这里,在本说明书中,图的画法是按照C语言的表达方式而形成的,如果若按照FORTRAN等语言的表达方式,则应建立了无标志之后才返回。
如上所述这样,即可进行标识有无的检出了。
然后,即可进行标识的位置信息的检查,亦即进行为从帧存储器6中与标识平行地抽取图像数据所需的抽取范围(变量TOP及BOTTOM)和标识的倾斜(变量SLOPE)的计算了。
亦即,在上述步骤S34中,判断为座标变量g,h的某一方已被定义时,进而判断座标变量g是否已被定义(步骤S35),如果没被定义,则进入步骤S37。但是,在座标变数g被定义的时候,则调用开始边缘位置检出指令(步骤S36),进行开始边缘位置的检出。这个开始边缘检出通过座标变量e及g(若座标变量g已被定义,则座标变量e当然也已被定义)定义如图8所示那样的座标变量i及m,并进一步定义座标变量a及d。另外,ONstart-flag(即start-flag有效),定义座标变量TOP及BOTTOM。这里座标变量a及d分别表示标识的四角座标中之一。
其次,判断座标变量h是否已被定义(步骤S37),如果没被定义,则进入步骤S39)。但是,在座标变量h被定义时,则调用停止边缘位置检出指令(步骤S38),进行停止边缘位置的检出。这个停止边缘位置检出,通过座标变量f及h(若座标变量h已被定义,则座标变量f当然也已被定义了)定义如图8所示那样的座标变量j及k,进而定义座标变数b及c。另外,ONstop-flag,定义座标变数TOP及BOTTOM。这里,座标变量b及c分别表示标识的四角座标中的一个。
接着,判断start-flag,stop-flag是否共同ON(步骤S39),在双方没有被NO的时候,进入步骤S3E。而且此处,图中的记号“&&”表示理论积。
当二标识检出标志共同ON(有效)时,把这些start-flag、stop-flag双方一度复位之后(步骤S3A)、比较线段(a-d)和(c-d)(步骤S3B)、在开始码22和停止码23中选择其线段长的一方作为处理对象。这是因为在平常使用时,单方的码相对其它各方变短的最大理由是从画面溢出的情况,故选择长的一方作为处理基准。
并且,在线段(a-d)一方比线段(b-c)还短时,分别把座标变量b的值代入座标变数TOP,或把座标变量c的值代入座标变数BOTTOM并定义为决定标识信息的抽取范围所需的数据,进而,选择并ONstop-flag(步骤S3C)。
相反,在线段(a-d)的长度是线段(b-c)以上时,分别把座标变量a的值代入座标变数TOP,或把座标变量d的值代入座标变数BOTTOM并定义为决定标识信息的抽取范围所需要的数据,进而选择并ONstart-flag(步骤S3D)。
进而,调用求标识的倾斜的指令(步骤S3E)、通过这些座标变数TOP及BOTTOM求标识的倾斜(变量SLOPE)、并与这些得到的变量一起携带有标识的信息返回。
下面,参照图10的流程图说明上述的标识检出指信令中的步骤S33中被调用的开始/停止码检出指令。这个开始/停止码检出指令是如前所述那样地检出座标变量e及g、或f及h的至少一方的指令。
即,首先把标识未检出时的检出间隔变量INCO的值代入标识检出间隔用变量INIT(步骤S331)。尔后,调用扫描及检出(行)指令(步骤S332)、在行方向上扫描帧存储器6的Bank06A的图像数据,进行开始/停止码的检出,这里所谓行方向的扫描,是指如图8中作为行扫描所示那样的、向帧存储器6的长(长方形的长边方向)的方向的扫描。
进而判断上述扫描及检出(行)指令的结果、开始码22或停止码23被检出与否,亦即标识被检出来与否(步骤S333)、在标识被检出了的场合,携带有标识的检出信息返回。
另一方面,在标识没被检出的场合,在把标识未检出时的检出间隔变数INCO的值代入标识检出间隔用变数INIT之后(步骤S334),调用扫描及检出(列)指令(步骤S332)、并在列方向上扫描帧存储器6的Bank06A的图像数据,进行开始/停止码的检出。这里的所谓列方向的扫描是指如图8中作为列扫描所示那样的,向帧存储器6的短的方向(长方形的短边方向)的扫描。
进而,判断上述扫描及检出(列)指令的结果、开始码22或者停止码23是否已被检出,即标识是否已被检出(步骤S335),在标识已被检出的场合,携带有标识检出的信息返回。
然而,在这次也没能检出标识的场合,则要判断其原因是否是由角度错误造成的(步骤S336)。这个标识的角度错误参照在上述步骤S332中被调用的扫描及检出指令的返回值进行。即,用上述扫描及检出指令,逐次检查是否构成角度错误,如果发生错误,则在返回值上建立角度错误标志和标识非检出标志并在此中断处理返回。判断该角度错误的时候,因为此后再次处理的仅是行方向,所以通过让该步骤S336判断扫描了列方向的返回值,进行是因为角度错误才做了无标识检出的结论还是因标识不能检出而做了那种结论的判断。
在该步骤S336判断为不是角度错误的场合,携带无标识检出的信息返回。
另一方面,在判断为是角度错误的场合,接着,把标识检出时的标识检出间隔INC1代入标识检出间隔用变数INIT(步骤S337)。这里,检出间隔变数INCO和INC1的大小,基本上是期望二者的最小公倍数超出画面的范围,如INC0=23,INC1=17。
此后,再次调用扫描及检出(行)指令(步骤S332),在行方向扫描帧存储器6的Bank06A的图像数据,进行开始/停止码的检出。
并判断开始/停止码亦即标识是否已被检出(步骤S338),在被检出时携带有标识检出的信息返回,而在标识没被检出时则携带无标识检出的信息返回。
这样,在本开始/停止码检出指令中,其检出首先由向行方向的扫描进行,若由此不能求出,则由列方向的扫描来求。若由此也不能求出,则判断是否是角度错误(也就是标识倾斜过度),如果错误则改变标识检出间隔并再次进行行方向的扫描偿试再次检出。若如此还不能检出的话,则作为无标识检出。
这里,在角度错误时只进行行方向扫描,是因为条形码标识2一般地是用行扫描,即纵方向是如帧存储器6的长的方向(横方向)放置,如果利用这个人类的特性,就可以省略列方向的扫描。当然,既便进行列方向扫描也可以,但这时将降低执行的速度。
下面,我们再参照图11A,直至图11C中所示的一系列的流程图,说明在上述步骤S332被调用的扫描及检出指令。该指令的处理关键在于在行方向或者列方向上按照因种种条件而变化的检出间隔扫描Bank06A的数据,决定座标变量e及g和座标变量f及h中至少一方这一点上。至于扫描哪一方向则在调用该指令时才决定。在可以决定座标变量e及g,f及h至少一方,且此时没发生角度错误的时候,作为检出了标识返回上层的指令。在座标变量e及g,f及h的哪个组合都没能检出时,则作为无标识检出返回上层的指令。此外在既便可以检出,但由其座标值所计算的标识角度相对于扫描方向倾斜45°以上时,也作为无标识检出且角度错误返回上层的指令。
即,首先把参数scan-inc初始设定成检出间隔变数INIT(步骤S3321),进而把参数n初始设定成上述的scan-inc(步骤S3322)。这里,参数scan-inc表示在本指令所使用的标识检出(扫描)间隔,参数n表示实施检出(扫描)处理的行位置。然后,分别把开始码检出个数变量start-num及停止码检出了个数变量stop-num初始设定为“0”(步骤S3323)。
该初始设定后,判断是行扫描呢还是列扫描(步骤S3324),若是行扫描则取入第n行的图像数据(步骤S3325),若是列扫描则取入第n列的图像数据(步骤S3326)。
此后,判断在上述取入的图像数据中是否存在开始22(步骤S3327),如果不存在则进入步骤S3332A。而在开始码22存在的时候,则判断该开始码22是否是开始时被检出的码(步骤S3328)。当是开始时所检出的码时,则把其检出座标存入座标变量e(步骤S3329)。另外,当不是开始时所检出的码时,则把其检出座标存入座标变量g(步骤S332A)。这里,是否是最初所检出的码,由观察座标变量e中是否被存入值来判断。接着,把其开始码检出座标存入开始码检出座标数组start-pos[]的第start-num位(变量start-num之值表示该数组的序号)(步骤S332B)。进而,增量开始码检出变量start-num(步骤S332C)。由此,陆续检出的开始码的位置座标全部被存入开始码检出座标数组start-pos[]。其个数,被保存在开始码检出变数start-num中。
下面同样地,判断在上述取入的图像数据中是否存在停止码23(步骤S332D)、若不存在则进入步骤S332J。而在停止码23存在时,则判断其停止码23是否是最初被检出的码(步骤S332E)。当是最初所检出的码时,就把其检出座标存入座标变量f(步骤S332F)。另外,当不是最初所检出的码时,则把其检出座标存入座标变量h(步骤S332G)。在此,是否是最初所检出的码,由观察在座标变数f中是否被存入值来判断。此后,把其停止码检出座标存入停止码检出座标数组stop-pos[]的第stop-num(变量stop-num之值来表示该数组的序号)(步骤S332H)。进而,增量停止码检出变量stop-num(步骤S332I)。由此,陆续被检出的停止码的位置座标全部被存入停止码检出座标数组stop-pos[],其个数,被保存在停止码检出变量stop-num中。
然后,判断座标变量e或f是否已被定义(存储)(步骤S332J),若已被定义,则进入步骤S332K,若没被定义,则进入步骤S332L。即,若已被定义,接着判断上述的扫描间隔scan-inc是否为标识检出时的检出间隔变量INC1,或者判断座标变量g,h是否均定义完了(步骤S332K)。在不是INC1时或者g、h均定义完了时,把扫描间隔scan-inc设为上述变量INC1之值(步骤S332M),而在不是如此的场合,设(scan-inc)为1(步骤S332N)。另外,在上述步骤S332J座标变量e或者f被判断为没有被定义的场合,接着判断上述扫描间隔scan-inc是为检出间隔用变量INIT与否(步骤S332L)。是INIT时,设扫描间隔scan-inc为1(步骤S3320),而不是如此,设scan-inc为上述INOIT之值(步骤S332P)。
这样地从上述步骤S332J到步骤S332p,记述了使数据取入间隔变化的手法。其动作在座标变量e,f没被定义时,扫描间隔scan-inc交互地取检出间隔变量INIT和1之间的值。而在座标变量e,f被定义的场合,直到座标变量g,h均被定义为止,扫描间隔scan-inc交互地取标识检出时的检出间隔变量INC1和1之间的值。此外,当座标变量e,f,g,h均被定义的时候,扫描间隔scan-inc为上述变量INC1。
即,扫描间隔在从检出处理的开始到开始/停止码的某一方被检出时,交互地取INIT(=INC0,如23)和1之间的值,而从开始码/停止码的某一方被检出后直到画面的最后,则交互地取INC1(如17)和1之间的值。之所以要这样地使检出行间隔做种种变化,是根据如下的理由。即,现在如果设检出行间隔为一定,则可能存在由标识的最小线宽、摄像倍率,二维摄像单元间距所决定的构成检出不能的标识角度的情况。为极力避开这种情况,有必要使从检出处理的开始到开始/停止码的某一方被检出为止时的间隔发生变化。即便如此,因条件尽管标识已被摄像,仍然有找不到标识(漏掉)现象。因此,第一次漏掉虽然没办法,但为在第二次一定能够检出,故有使其增量INIT(=INC0)发生变化的做法。
另外,在座标变量e,f,g,h均被定义的场合之所以把扫描间隔scan-inc设为INC1,是根据与不管如何求得全部座标之后不再求其后的其它新的g,h也可以的做法相比,高速地使该处理结束更重要这样的理由。还有,求得全部的座标后,把增量设为INC1,通常是接着求新的g,h。
其次,使参数n的值只增加scan-inc之值来更新n(步骤S332Q)、决定下次取入的行或列数。而且,因帧存储器6的纵和横的尺寸是已知的,所以可用该尺寸判断上述被更新的n是否是在画面外(步骤S332R)、若是画面内时,则转移控制到上述步骤S3324。
如果是画面外的情况即扫描结束,则接着判断座标变量g是否已被定义(步骤S332S),在没被定义时转移控制到步骤S332Y。
在该座标变量g被定义的场合,下面即用已存储的开始码检出座标数组start-pos[],直线近似(最小二乘近似)开始码起始位置,并用该近似直线再设定e,g(步骤S332T)。亦即,用多数的开始码起始位置再设定e,g,开始码的推定可以更为准确。
然后,判断是行扫描还是列扫描(步骤S332U)。而且,在为行扫描时,把座标变量g的x座标值与座标变量e的x座标值之差除以座标变量g的y座标值与座标变量e的y座标值之差来,并取其结果值的绝对值(将此记为图中“ABS”)、把该值代入表示倾斜的绝对值的变量delta(步骤S332V)。
另外,在列扫描时,把座标变量g的y座标之值与座标变量e的y座标之值的差除以座标变量g的x座标之值与座标变量e的x座标之值的差,取其结果值的绝对值,并将其代入变量delta(步骤S332W)。
进而,通过判断所获得的倾斜的绝对值delta是否大于1(步骤S332X),来判断是否为角度错误。在是角度错误时,携带无标识检出及角度错误的信息返回。
在不是角度错误时,或者在上述步骤332N被判断为座标变量g没被定义的场合,接着判断座标变数h是否已被定义(步骤S332Y),在没被定义时转移控制到步骤S332e。
当该座标变量h被定义时,接着利用已经存储的停止码检出座标数组stop-pos[],直线近似停止码起始位置,并用该近似直线,再设定f,h(步骤S332Z)。此即,用多数的停止码起始位置再设定f,h,可以使停止码的推定更为准确。
然后,判断是行扫描还是列扫描(步骤S332a)。并且在行扫描时,把座标变量h的x座标值与座标变量f的x座标值之差除以座标变量h的y座标值与座标变量f的y座标值之差,取其结果值的绝对值,并将其代入倾斜的绝对值delta(步骤S332b)。
另外,当是列扫描时则把座标变量h的y座标值与座标变量f的y座标值之差除以座标变量h的x座标值与座标变量f的x座标值之差,取其结果值的绝对值,并将之代入delta(步骤S332c)。
进而,通过判断获得的倾斜的绝对值delta是否大于1(步骤S332d),判断是否为角度错误。在是角度错误的场合,携带无标识检出及角度错误的信息返回。
而当不是角度错误时,或者在上述步骤S332Y座标变量h被判断为没被定义时,接着,判断座标变数g或者h是否已被定义(步骤S332e),在已被定义时携带有标识检出的信息返回,在没被定义时则携带无标识检出的信息返回。
这样,在从上述步骤S332S直到S332W,或者步骤S332Y直至S332C中,通过求开始/停止码的倾斜来求全部标识的倾斜,而在步骤S332X或S332d,判断该倾斜的绝对值delta是否超过1,超过1时,则因角度错误而作为无标识检出返回控制。另外,当该倾斜的绝对值delta不超过1时,在步骤S332e判断座标变量g或h是否被定义,被定义时作为标识已被检出返回控制,而没被定义时则作为无标识检出返回控制。
这里之所以在上述步骤S332X及S332d判定角度错误,是根据如下理由。即在本来应该检出的抽取方向发生了“漏掉”,那么在别的方向上被检出则是可能性极小的事。此时,因此后的处理发生错误,所以不能进行这样的检出。还有,角度错误的基准之所以为1,是因为在标识旋转角是45°时delta值为1。
另外,之所以在步骤S332T及S332Z进行座标值的再设定,是因为由于标识的局部异脏或标识印刷精度,或者摄像系统的分解能力等原因,未必一定能准确地检出码座标所致。在上述的错误要因对检出座标(e,g,或f,h)产生影响的场合,也可以通过最小二乘近似,以更高的精度修正其检出座标。
下面,参照图12的流程图说明在上述那样的标识检出指令中步骤S36被调用的开始边缘位置检出指令。
即,首先在ON开始检出标志start-flag之后(步骤S361),定义平行于线段e-g的直线的方程式,例如求线段e-g的方程式y=ax+b(步骤S362)。尔后,如该直线横断开始大条带22A这样地定义截距6(步骤S363)。开始码22的结构,举例如是由由8个条带组成的开始大条带22A和3对白条带和黑条带、3个白条带合计17个条带构成,并设摄像该码的结果是N个象素。另外,用方程式y-ax+b所表示的直线如大家所知通过使截距b变化平行移动。因此,为了得到横断大条带22A的直线,如使上述线段e-g向左移动约{(1-8/2)/17}×N个像素左右取截距6即可。
如果这样做得到了横断开始大条带22A的直线,尔后,分别设该直线和定义画面的方程式的交点为A,A'(参照图8),进而由座标e,g的中点引垂线至线A-A’,并定义其交点为As(步骤S364)。
然后,在该直线A-A'上从点As向点A方向顺序考察数据(步骤S365),检查边缘存在与否(步骤S366)。这个检查可以用如观察辉度变化的强度比较、微分法,二次微分法等手段来进行。若如此检查出了边缘,则把其检出座标存入座标变量i(步骤S367)。此即设检出座标为点i。
接着,在上述直线A-A'上从点As这次向点A'方向顺序地考察数据(步骤S368),检查边缘是否存在(步骤S369)。如果这样做检出了边缘的话,就把其检出座标存入座标变量m(步骤S36A)。此即设检出座标为点m。
进而,在通过用座标变量e,g所表示的点e,g的直线上从用座标变量i所表示的点i引垂线,并将其交点的座标存入座标变量a(步骤S36B)。即,求和通过点i的直线A-A'正交的直线的方程式,及求该直线和通过点e,g的直线的交点,并设该交点为a。
同样地,在过用座标变量e,g所表示的点e,g的直线上从用座标变量m所表示的点m引垂线,并将其交点的座标存入座标变量d(步骤S36C)。即,求与过点m的直线A-A'正交的直线的方程式,及求该直线和过点e,g的直线的交点,并设该交点为点d。
进而,分别把这样求得的座标变量a的值存入座标变量TOP,或把座标变量d的值存入座标变量BOTTOM之后(步骤S36D),将控制返回上层指令。
此外,在上述那样的标识检出指令中步骤S38被调用的停止边缘位置检出指令也与该开始边缘位置检出指令大致同样地进行。图13是停止边缘位置检出指令的流程图。
即,首先ON停止检出标志stop-flag之后(步骤S381),定义平行于线段f-h的直线的方程式,如求线段f-h的方程式y=ax+b(步骤S382)。然后,如该直线横断停止大条带23A这样地定义截距b(步骤S383)。如果这样做可以获得横断停止大条带23A的直线的话,下面就分别设该直线和定义画面的方程式的交点为B,B'(参照图8),进而从座标f,h的中点引垂线到直线B-B’,并将其交点定义为Bs(步骤S384)。
且在该线B-B'上从点Bs向点B方向顺序地观察数据(步骤S385),检查边缘是否存在(步骤S386)。若这样做检出了边缘,便将其检出座标存入座标变量j(步骤S387)。即将检出座标设为点j。
然后这次在直线B-B'上从点Bs向点B'方向顺序地观察数据(步骤S388),检查边缘是否存在(步骤S389)。若这样检出了边缘,便将其检出座标存入座标变量k(步骤S38A)。即将检出座标设为点k。
进而,在过用座标变量f,h所表示的点f,h的直线上从用座标变量j所表示点j引垂线,并将其交点的座标存入座标变量b(步骤S38B)。即,求和过点j的直线B-B'正交的直线的方程式、及求该直线和过点f,h的直线的交点,并将其交点设为点b。
同样地,在过用座标变量f,g所表示的点f、h的直线上从用座标变量k所表示的点k引垂线,并将其交点的座标存入座标变量C(步骤S38C)。即,求和过点k的直线B-B'正交的直线的方程式,及求该直线和过点f、h的直线的交点,并将其交点设为点C。
尔后,在分别把这样求得的座标变量b的值存入座标变量TOP,或把座标变量C的值存入座标变量BOTTOM之后(步骤S38D),返回控制到上层指令。
下面,参照图14的流程图及图9中求行扫描时的标识倾斜的说明图说明在上述那样的标识检出指令中步骤S3E所调用的求标识的倾斜的指令。这里,图9所示为对所示之具有4×1的标识矩阵(故码数是“4”)的条形码标识,在行扫描中开始码22被选择为基准时的例子。
此即,首先判断是否为行扫描(步骤S3E1),若是行扫描则转移控制到步骤S3E2,而当是列扫描时则转移控制到步骤S3E4。
在行扫描时,首先把座标变量BOTTOM的x座标值,除以从座标变量BOTTOM的y座标值与座标变量TOP的y座标值的差,另外,也把座标变量TOP的x座标值除以从座标变量BOTTOM的y座标值与座标变量TOP的y座标值的差,并将这二个商之差存入倾斜变数SLOPE(步骤S3E2)。接着,把座标变量BOTTOM的y座标和座标变量TOP的x座标相乘的结果除以从座标变量BOTTOM的y座标值与座标变量TOP的y座标值的差值,另外,也把座标变量BOTTOM的x座标和座标变量TOP的y座标相乘的结果除以从座标变量BOTTOM的y座标值减去座标变量TOP的y座标值的差值,并把这二个商的差存入截距变量intercetp(步骤S3E3)。这里,图中上附的星花(マスタリスク),*字有示乘法算符“×”之意。
另外,在列扫描时,首先把座标变量BOTTOM的y座标值除以从座标变量BOTTOM的x座标值与座标变量TOP的x座标值的差值,另外也把座标变量TOP的y座标值除以座标变量BOTTOM的x座标值减去座标变量TOP的x座标值的差值,并将这二个商的差存入倾斜变量SLOPE(步骤S3E4)。然后,把座标变量BOTTOM的x座标与座标变量TOP的x座标相乘的结果除以从座标变量BOTTOM的x座标值减去座标变量TOP的x座标值的差值来除、另外也把座标变量BOTTOM的y座标与座标变量TOP的y座标相乘的结果除以从座标变量BOTTOM的x座标值减去座标变量TOP的x座标之值的差值,并将这二个商之差存入截距变量interscept(步骤S3E5)。
下面,参照图15的流程图说明在上述步骤S5被调用的手颤检出指令。
即,这次是把处理对象图像设为帧存储器6的Bank16B(步骤S51),并将手颤检出用标志校验初始化为OFF(步骤S52)。进而,判断开始检出标志start-flag是否为ON(步骤S53),若是ON则调用开始码校验指令(步骤S54),对开始码22进行校验。而若是OFF(无效)时,则调用停止码校验指令(步骤S55),对停止码23进行校验。并且,通过判断手颤检出用标志校验是否为ON(步骤S56)、来判断这个校验结果。如果这个结果、即手颤检出标志校验是ON,则携带无手颤的信息返回,而其若是OFF,则携带有手颤的信息返回。
下面,参照图16A及图16B的流程图说明在上述那样的手颤检出指令中步骤S54被调用的开始码校验指令。这里,图中加“'“所表示的座标表示用图像1(Bank16B)所检出的位置。若假定用在上述步骤S3中被调用的标识检出指令求出了座标e,这是最初找到的在图像O(Bank06A)检查出来的开始码22的座标。则另一方,座标e'便是用与找到上述座标e相同的条件(扫描方向或扫描位置)扫描图像1(Bank16B)所求得的座标。亦即,当在图像0和图像1之间标识没有移动时,这些座标e,e'应该为同一座标。这里,若没手颤误差范围AREA之值,例如为2,那么在图像间若座标e分别在x、y方向偏离±1个象素以内,则即判定为没有图像的移动。
亦即,首先判断是否为行扫描(步骤S541),在是行扫描时,进入步骤S542,而当是列扫描时则转移控制到步骤S548。
在行扫描时,首先从Bank16B取入用在Bank06A检出的座标变量e的y座标值所表示的行的数据(步骤S542),判断开始码22是否被检出步骤S543)。若没被检出,则携带手颤检出标志校验=OFF的信息返回上层的指令。在开始码22已被检出时,在把其检出座标存入座标变量e'之后(步骤S544),这次从Bank16B取入用在Bank06A检出的座标变量g的y座标值所表示的行的数据(步骤S545),判断开始码22被检出与否(步骤S546)。如果没被检出,则携带手颤检出标志校验=OFF的信息返回上层的指令。在开始码22已被检出时,在把其检出座标存入座标变量g'之后(步骤S547),进入步骤S54E。
另一方面,在列扫描时,首先从Bank16B取入用在Bank06A检出的座标变量e的x座标的值所表示行的数据(步骤S548),判断开始码22是否被检出(步骤S549)。如果没被检出,则携带手颤检出标志校验=OFF的信息返回上层的指令。在开始码22被检出时,把其检出座标存入座标变量e'后(步骤S54A),这次从Bank16B取入用Bank06A检出的座标变量g的x座标之值所表示的行的数据(S54B),并判断开始码22是否被检出(步骤S54C)。如果没被检出,则携带手颤检出标志校验=OFF的信息返回上层的指令。在开始码22被检出时,将其检出座标存入座标变量g'(步骤S54D)。
进而,取座标变量e和e'的差值的绝对值及座标变量g和g'的差值的绝对值,判断二者的绝对值是否是在手颤误差范围AREA以内(步骤S54E)。若不是手颤误差范围AREA以内,则携带手颤检出标志校验=OFF的信息返回上层的指令。
这样,在从上述步骤S541到步骤S54E,检出判断相对于在Bank06A检出的座标e,g,,在Bank16B中是否在允许误差之内。
如果判断为在允许误差之内,接着,定义平行于线段e'-g'的直线的方程式,例如求线段e'-g'的方程式y=ax+b(步骤S54F)。然后,如该直线横断开始大条带22A那样地定义截距b(步骤S54G)。如果这样做可以得到横断开始大条带22A的直线,接着,把该直线和定义画面的方程式的交点分别设为A,A',进而从座标e',g'的中点引垂线到直线A-A',并将其交点定义为As(步骤S54H)。
此后,在这个直线A-A'上从点As向上A方向顺序地观餐数据(步骤S54I),检查边缘是否存在(步骤S54J)。若这样做检出了边缘,便把其检出座标存入座标变量i'(步骤S54K)。亦即,将检出座标设为点i'。
接着,这次在该直线A-A'上从点As向点A'方向顺序地观察数据(步骤S54L),检查边缘是否存在(步骤S54M)。如果这样检出了边缘,则把其检出座标存入座标变量m'(步骤S54N)。即将检出座标设为点m'。
进而,取座标变量i和i'之值的差的绝对值及座标变量m和m'之值的差的绝对值,并判断二者的绝对值是否是手颤误差范围AREA以内(步骤S540)如果不是手颤误差范围AREA以内,则携带手颤检出标志校验=OFF的信息返回上层的指令。另一方面若是手颤误差范围AREA以内,则携带手颤检出标志校验=ON的信息返回上层的指令。
如此这样,从上述步骤S54F到步骤S540,检出判断对在Bank06A检出的座标i,m,在Bank16B中是否在允许误差之内。并且,当全部在允许范围时,设手颤检出标志校验为ON并返回控制,但哪怕有一处是在允许范围外时,都设手颤检出标志校验为OFF并返回控制。
下面,参照图17A及图17B的流程图说明在上述那样的手颤检出指令中的步骤S55被调用的停止码校验指令。该停止码校验指令同上述的开始码校验指令大致上是一样的。
即,首先判断是否是行扫描(步骤S551),在行扫描的时候进步骤S552,在列扫描的时候则转移控制到步骤S558。
在行扫描的场合,首先从Bank16B取入用在Bank06A检出的座标变量f的y座标之值所表示的行的数据(步骤S552),并判断停止码23是否被检出(步骤S553)。如果没有被检出,便携带手颤检出标志校验=OFF的信息返回上层的指令。而当停止码23被检出时,在把其检出座标存入座标变量f'之后(步骤S554),这次是从Bank16B取入用在Bank06A检出的座标变量h的y座标值所表示的行的数据(步骤S555),并判断停止码23被检出与否(步骤S556)。如果没有被检出,则携带手颤检出标志校验=OFF的信息返回上层的指令。在停止码23被检出时,将其检出座标存入座标变量h'之后(步骤S557),进入步骤S55E。
另一方面,在列扫描时,首先从Bank16B取入用在Bank06A检出的座标变量f的x座标值表示的行的数据(步骤S558),并判断停止码23被检出与否(步骤S559)。如果没有被检出,便携带手颤检出标志校验=OFF的信息返回上层的指令。在停止码23已被检出时,把其检出座标存入座标变量f'之后(步骤S55A),这次从Bank16B取入用在Bank06A检出的座标变量h的x座标值表示的行的数据(步骤S55B),并判断停止码23被检出与否(步骤S55C)。如果没有被检出,便携带手颤检出标志校验=OFF的信息返回上层的指令。而在停止码23已被检出时,则把其检出座标存入座标变量h'(步骤S55D)。
进而,取座标变量f和f'之值的差的绝对值及座标变量h和h'之值的差的绝对值,并判断二者的绝对值是否是手颤误差范围AREA内(步骤S55E)。如果不是手颤误差范围AREA内,则携带手颤检出标志校验=OFF的信息返回上层的指令。
这样做如果被判断为在允许误差内,则接着定义平行线段f'-h'的直线的方程式,例如,求线段f'-h'的方程式y=ax+b(步骤S55F)。然后,如该直线横断停止大条带23A那样地定义截距b(步骤S55G)。如果这样做可以得到横断停止大条带23A的直线的话,接着,把该直线和定义画面的方程式的交点分别设为B,B',进而从座标f',h'的中点引垂线到直线B-B',并把其交点定义为Bs(步骤S55H)。
然后,在这条直线B-B'上从点Bs向点B方向顺序地观察数据(步骤S55I)检查边缘存在与否(步骤S55J)。这样做如果边缘已被检出,则把其检出座标存入座标变量j'(步骤S55K)。亦即,设检出座标为点j'。
接着,这次是在这条直线B-B'上从点Bs向点B'方向顺序地观察数据(步骤S55L),检查边缘是否存在(步骤S55M)。这样做如果边缘已被检出,则把其检出座标存入座标变量k'(步骤S55N)。亦即,设检出座标为点K'。
进而,取座标变量j和j'之值的差的绝对值及座标变量k和k'之值的差的绝对值,并判断二者的绝对值是否是手颤误差范围AREA内(步骤S550)。若不是手颤误差范围AREA内,便携带手颤检出标志校验=OFF的信息返回上层的指令。另外,若是手颤误差范围AREA内,则携带手颤检出标志校验=ON的信息返回上层的指令。
下面,参照图18的流程图和图19及图20的阀值计算说明图,说明在上述步骤S7被调用的阈值决定指令。
即,首先判断开始检出标志start-flag是否是ON,也就是判断被在上述步骤S3所调用的标识检出指令选择为处理对象是开始码22还是停止码23(步骤S71)。是开始码22时,把点e的值代入点p(步骤S72),是停止码23时,把点f的值代入点p(步骤S73)。亦即把决定阈值所需的数据列的始点座标存入座标变量p。由此,例如在开始码22的时候,如图19中所示的那样,可以决定始点座标。
然后,判断是否是行扫描(步骤S74),在行扫描的场合,转移处理到步骤S75,另外在列扫描的时候,转移处理到步骤S79。即,在步骤S74做行扫描解码,也就是让其判断是否找到了用于寻找座标变量e,f,g,h处理的方向,若是行扫描就进行从步骤S75到步骤S78的处理,若是列扫描则进行从步骤S79到步骤S7C的处理。
即,在行扫描的时候,从帧存储器6的Bank06A取入用座标变量p的y座标之值所表示的行,也就是图19中所示的那样的数据取入行的数据(步骤S75)、并设开始码22或者停止码23的终了x座标为点q的x座标(步骤S76)。进而微分从点p到点q的数据(步骤S77)。由此,如在图19的数据取入行的场合,可求如图20所示那样的开始码22的微分波形。并且把这个微分数据的第三位的峰值的绝对值设为变量MAX(步骤S78)。
另一方面,在列扫描时,从帧存储器6的Bank06A取入用座标变量p的x座标之值所表示的行的数据(步骤S79),并设开始码22或者停止码23的终了y座标为点q的y座标(步骤S7A)。进而,微分从点p至q的数据(步骤S7B)。并且将该微分数据的第三位的峰值的绝对值设为变量MAX(步骤S7C)。
这里,看微分数据的第三位的理由,是因为理论上希望在条形码区域内对比最低(即,边缘的微分峰值最低)的地方决定阈值,故有选择作为标识的条带和空白间隔最狭窄的开始或停止码的第三边缘这样的做法。由此可以实现不由标识尺寸或标识的照明条件和稳定的解码。
进而,把这样求得的变量MAX的值除以相对峰值的比率常数THRESHOLD-RATIO,并将其结果代入阈值变量THRESHOLD(步骤S7D)。即从所求得的数据求假定阈值。这里,所谓常数THRESHOLD-RATIO,是表示选择值的几分之一为阈值好的值,通常被设定为2或者3。
接着,判断这样假定求得的阈值THRESHOLD的值是否是既比最小阈值常数THRESHOLD-SMALL大(步骤S7E),又比最大阈值常数THRESHOLD-BIG小(步骤S7F)。亦即,判断假定所求得的阈值是否是存在于阈值的可取范围内。在超过用常数THRESHOLD-BIG所表示的最大值时,所用常数THRESHOLD-BIG所表示的最大值代入阈值变量THRESHOLD,也就是把阈值设定成最大值(步骤S7H)。另外,在未满用常数THRESHOLD-SMALL所表示的最小值时,把和常数THRESHOLD-SMALL所表示的最小值代入阈值变量THRESHOLD、即把阈值设定成最小值。
下面,参照图21的流程图及图22的向帧存储器6的投影像之图说明在上述步骤S8被调用的指示器信息决定指令。这里图22所示是具有4×1标识矩阵(故码数是“4”)的条形码标识,在行扫描中开始码22被选择成基准时之一例。
亦即,首先作为读取行指示器信息所需的基准座标的始点,把标识的顶座标TOP的值存入座标变量WORK(步骤S81)。然后定义过该座标变量WORK并具有用标识的倾斜变量SLOPE所表示的倾斜的直线1(步骤S82),并定义该直线1与画面框架相交的点WI,W2(步骤S83)。进而取入线段W1-W2上的图像的数据(步骤S84),读取含于其中的行指示器信息(步骤S85)。
在此,行指示器信息的读取,举例如下,从在上述步骤S84被取入的对象行上的图像数据亦即黑白的像素值中检出边缘,变换成宽信息。进而,从该宽信息中检出开始码22,因为已知该开始码22的下一位码就是行指示器21A,所以将其读入。另外同样地,检出停止码23,因为也知道该停止码23的前一位码就是行指示器21A,故亦将之读入。这样一来,如果行指示器21A已被读取,则把它与设图示的条形码表相比较,把一致的部分变换成码,亦即变换成行数,列数,安全水平等信息。这里,向宽信息的变换有种种的手段,例如,通过调用向宽信息变换的指令也可以进行这种变换。
然后,检查是否确定了行指示器信息(步骤S86),如果确定了则把控制转移到步骤S8E。若是没有确定则转移控制到步骤S×7。这里的所谓确定,是指若干次读入行指示器21A,使信息的可靠度充分提高时的情况。例如,如果10次读入了被写在行指示器21A上的信息(行数,列数,安全水平),且10次都获得了同样信息时,则就认为是被确定了。
当行指示器信息没有确定时,接着检查是否是行扫描(步骤S87),是行扫描时转移控制到步骤S88,是列扫描时则转移控制到步骤S8B。
即,在行扫描时,把座标变量WORK的y座标之值加上规定的增量L-INC,并把其结果作为新的座标变量WORK的y座标值代入(步骤S88)。另外,在标识的倾斜变量SLOPE的值上乘以座标变量WORK的y座标之值,并在其结果值上加上标识的截距变量intercept,再把其结果作为新的座标变量WORK的x座标值代入(步骤S89)。这样,把新的扫描所需的基准座标再设定成座标变量WORK。并且判断这个被再设定的座标变数WORK的y座标值是否超过标识的底座标变量BOTTOM的y座标值,也就是是否在标识区域内(步骤S8A),如果是标识区域内就从上述步骤S82开始反复,而在标识区域外时则携带矩阵未定义的信息返回上层的指令。
列扫描时也同样地,在座标变量WORK的x座标之值上加上规定的增量L-INC,把其结果作为新的座标变量WORK的x座标值代入(步骤S8B)。另外用座标变量WORK的x座标之值乘以标识的倾斜变量SLOPE之值,然后在其结果上加上标识的截距变变量intercept,并把这个结果作为新的座标变量WORK的y座标值代入(步骤S8C)。这样,把新的扫描所需的基准座标再设定成座标变量WORK,并判断这个被再设定的座标变量WORK的y座标值是否超过了标识的底座标变量BOTTOM的y座标值,也就是否是在标识区域内(步骤S8D)。如果是标识区域内就从上述步骤S82开始反复处理,如果是标识区域外时则携带矩阵未定义的信息返回上层的指令。
另一方面,在上述步骤S86、当判断行指示器21,A为确定时,根据从行指示器信息所得到的安全水平计算可修复的码数,该数被保存在REST-NUM中(步骤S8E)。进而从行指示器信息得到的标识的行数被保存在标识的行数变量ROW-NUMBER中(步骤S8F)。此外还可以从行指示器信息中抽出标识的列数并保存在标识的列数变量COLUMN-NUMBER中(步骤S8G)。此后,携带矩阵已被定义的信息返回上层的指令。
下面,参照图23A及图23B的流程图及图24的向帧存储器的投影像的图说明在上述步骤SA被调用的扫描方程式决定指令。这里,图24所示为具有4×1标识矩阵(故码数是“4”)的条形码标识在行扫描中开始码22被选择成基准时之一例。
即,首先把变量counter初始化为0(步骤SA1),再将基准座标变量WORK初始化为标识的顶座标变量TOP的值(步骤SA2)。
进而判断是行扫描还是列扫描(步骤SA3),在行扫描的情况,把标识的底座标变量BOTTOM的y座标值与标识的顶座标变数TOP的y座标值之差代入变量count-end(步骤SA4)。此即求必须决定的模式数(在图24中为标识的列方向的像素数),并将之存入变量count-end。就是说,所谓模式数就是为扫描标识的全部所需之数。
同样地,在列扫描的情况,是把标识的底座标变量BOTTOM的x座标值与标识的顶座标变量TOP的x座标值之差代入变量count-end(步骤SA5)。
接着,再次判断是行扫描还是列扫描(步骤SA6)、是行扫描时,在标识的顶座标变量TOP的y座标值上加变量counter的值,并把其结果作为基准座标变量WORK的y座标值代入(步骤SA7)。另外,用基准座标变量WORK的y座标值乘以标识的倾斜变量SLOPE的值,再在其结果上加上标识的截距变量intercept,并把该结果作为新的基准座标变量WORK的x座标值代入(步骤SA8)。如此这样地随着变量counter值的增加再设定基准座标变量WORK。
列扫描时也同样地,在标识的顶座标变量TOP的x座标值上加上变量counter的值,并把其结果作为基准座标变量WORK的x座标值代入(步骤SA9)。另外,用基准座标变量WORK的x座标值乘以标识的倾斜变量SLOPE的值,再在其结果上加上标识的截距变量intercept,并把该结果作为新的基准座标变量WORK的y座标值代入(步骤SAA)。
此后,定义过该被再设定的座标变量WORK,并具有用标识的倾斜变量SLOPE所表示的倾斜的直线1(步骤SAB),求该直线1和画面框架相交的2点,然后将之分别存入座标变量的数值DIM-POINT-P及DIM-POINT-Q的第counter位(变量counter值所表示的数值的序号)(步骤SAC)。
此后,增量变量counter值(步骤SAD),并检查作为该结果的这个被再设定了的变量counter值是否达到了必要数、即达到了变量counter-end(步骤SAE)。在没达到必要数时,把控制返回上述步骤SA6,达到了必要数时,则把控制转移到步骤SAF。通过以上的动作,就可以定义顺序扫描标识时所需的始点和终止的编排。
接着,再次把变量counter初始化为0(步骤SAF)。并且,通过将变量counter值乘以标识的倾斜变量SLOPE的值,计算因被计算的标识的倾斜SLUPE的位置而产生的增量,并将这个计算结果保存在变量数组LINE-INC的规定位置(用变量counter所表示的位置)(步骤SAG)。
再后,增量了变量counter之后(步骤SAH),检查这个被再设定的变量counter是否达到了数组的最大尺寸常数MAX-NUM(步骤SAI)。没有达到时,转移控制到上述步骤SAG,而在达到时则把控制返回上层的指令。
通过从这个步骤SAF到步骤SAI的循环,可以获得取入一行标识信息时和倾斜模式。
这里,上述数组的最大尺寸常数MAX-NUM,表示在编制程序时所确定的变量的尺寸,例如,如果假定帧存储器6的尺寸是640×480像素,则设置为1000左右即可。
下面,参照图25的流程图及图26的四帧存储器的投影像之图说明在上述步骤SB被调用的补充检查指令。这里,图26所示为具有4×3的标识矩阵(故码数为“12”)的条形码标识,在行扫描中开始码22被选择成基准时的例子。另外,将确定标识矩阵的各码的数据之事称为“补充”,所谓“补充检查”,是一边定义补充模式一边检查是否能解码之意。即这个指令是进行标识的各码的座标位置的推定和以该被推定的座标位置的信息为依据判断可修复的个数的码是否超出画面的指令。
即,调用ROW检出指令(步骤SB1)、在扫描了标识时,检出在最初和最后发现的行的各种信息(检出行序号、码的长度,行序号,检出位置),并分别存入变量ROW-FIRST,ROW-LAST。
然后,检查变量ROW-FIRST和ROW-LAST是否都已确定(步骤SB2),如果已确定,则认为解码不可能把其控制移到上层指令。
这样做如果变量ROW-FIRST和ROW-LAST都被判断为确定的话,接着,演算并推定码矩阵的各码的先头位置座标、二维数组变量CODE-POS分别保存着码的行序号、列序号的序位(步骤SB3)。这里,各码先头座标位置可以例如象下面这样被推定。即首先,必须检出各自的行指示器21A的位置。为此,从变量ROW-FIRST的行序号和其检出位置,变量ROW-LAST的行序号和其检出位置,进而从矩阵尺寸中的ROW-NUMBER,通常只用内插来求用在图26中的开始码22方向的行指示器21A的先头记号“0”表示的四点的座标位置。然后,就从其四点向停止码23方向延展的列方向,起点从行指示器21A的位置开始,用标识的倾斜SLOPE和以标识的关系旋转90°的倾斜,并进而以码的长度一倍一倍地计算下去,按CODE-POS
、CODE-POS
[1],CODE-POS(
[2],…这样的顺序求各码先头座标位置。
此外,也可以适当地组合使用标识的倾斜(SLOPE)、在最初和最后发现的行的检出行序号、码长度,行序号,检出位置以至于矩阵尺寸(ROW-NUMBER×COLUMM-NOMBER)的信息内的必要的内容进行推定。
然后,统计在上述步骤被推定的座标中码溢出到画面外的个数,并存入变量error-mum(步骤SB4)。这个溢出,在各码中,相对于解码方向(列方向)用各码本身的先头座标和下一个码的先头座标二者是否都在画面内来判断,溢出到画面外的码恐怕是不能解码的。在图26的例中,(行序号、列序号)=(0,2),(1,2),(2,2),(3,1),(3,2)这5个码被判断为画面外,变量error-mun中存入“5”。
进而,比较上述error-mun和在步骤S8E求得的可修复码数的变量REST-NUM(步骤SB5)、如果error-num是REST-NUM以下,因为通过错误订正可以解码,所以作为解码可能返回控制到上层指令。另一面,在error-num超过REST-NUM时,因为是绝对不可能解码,故作为解码不可能返回控制到上层指令。
通过这个补充指令,可以推定各码的位置,另外,因为可以计数被推定为画面外的码数,故可以在此阶段判断解码可能与否。由此,尽管进行了长时间处理,但还是让不能解码的最坏的模式很快减少下来。
下面,我们边参照图27的流程图及图24的向帧存储器6的投影像之图,边说明在上述步骤SBI所调用的ROW检出指令。这里,图24所示为在行扫描中开始码22被选择成其准时之你。另外,为了简化说明,只对在行扫描的情况说明。因而,在不是行扫描的时候,步骤SB12的处理自然就成了步骤SB13。
即在行扫描的场合(步骤SB11)、计算标识的底座标变量BOTTOM的y座标值和标识的顶座标变量TOP的y座标值之差,也就是计算标识的y方向的象素数,并把其计算结果存入变量POS-num(步骤SB12)。
接着,设变量inc之值为“1”(步骤SB14)、及变量counter之值为“0”(步骤S15),并进一步把变量end之值设为步骤SB12或步骤SB13求得的POS-num(步骤SB16)。
进而用从上述步骤SB14到步骤SB16求得的各变量(初始值counter,增量inc,终了位置end),调用ROW序号检出指令(步骤SB17)。在可以正确地从指示器信息检出行序号的时候,检出行序号、码长度、行序号,检出位置的信息被保存在变量ROW-POS中。
然后,检查在上述指令是否可以正确地从指示器信息检出行序号与否(步骤SB18),在被检出时,把其控制移到步骤SB19,在没能检出时,作为解码不可能将其控制移到上层指令。
接着,在步骤SB19把在上述步骤SB17所求得的数据ROW-POS存入ROW-FIRST。即从步骤SB14开始到SB19,从标识的TOP开始向BOTTOM陆续设定扫描行,最初被检出的指示器位置被保存于ROW-FIRST。
进而,从SB1A到SB1E,将标识从BOTTOM开始向TOP陆续设定扫描行,最初被检出的指示器位置被保存于ROW-LAST。
下面,参照图28的流程图说明在上述步骤SB17被调用的行序号检出指令。为简单起见,只说明是行扫描的情况。故在不是行扫描时,如后述那样的步骤SB172的处理自然也就成了步骤SB173。
即,在行扫描的场合(步骤SB171),从上述座标变量的数组DIM-POINT-P,DIM-POINT-Q求现在的变量counter值中的扫描始点及终点,以x方向增量是“1”且y方向增量是上述倾斜增量数值LINE-INC,从帧存储器6的Bonk06A取出一行图像数据、再将之取入并存入缓冲数组scan-line,同时其数据的个数存入变量num之中(步骤SB172)。
进而,调用变换成宽信息的变换指令(步骤SB174)、把该取出的数据变换成宽信息。然后,以该宽信息为依据,把与未经图示的条形码表一致的部分变换成中间信息,再从该信息中抽取并保存指示器信息(步骤SB175)。在此,判断是否读了指示器信息(步骤SB176),未读时转移控制到步骤SB177,已读时转移控制到步骤SB179。
此后,增量变量counter,即用上述间隔变量inc的值再设定counter(步骤SB177),并检查这个被再设定的变量counter值是否超过上述变量end、即标识范围与否(步骤SB178)。没超过时转移控制到上述步骤SB171,超过时判断为解码不能转移其控制以上层指令。
另一面,在步骤SB176判断为已读时,把此时检出行序号和码长度、行序号及检出位置存入变量ROW-POS(步骤SB179),作为解码可能转移其控制到上层指令。即在进入这个指令后,把最初被检出的指示器信息21A的各种信息存入ROW-POS。这里,被保存在上述变数ROW-POS的信息中,从指示器信息求到的只是行序号,其他的信息,即检出行序号,码长度、以及检出位置是以其指示器信息读的行的帧存储器6上的各座标位置计算出来的。
下面,参照图29的流程图及图30的向帧存储器的投影像的图说明在上述步骤SD被调用的最佳扫描指令。这里,图30所示为具有4×1标识矩阵(故码数是“4”)的条形码标识在行扫描中开始码22被选择成基准时之例。另外,为简单起见,只说明是行扫描的情况。因此,在不是行扫描时,步骤SD2的处理换成SD3,及步骤SD7的处理换成步骤SD8。
即,在行扫描时(步骤SD1),计算标识的指示器信息变量ROW-LAST的检出位置y座标值和ROW-FIRST的检出位置y座标值之差,也就是计算标识的y方向的像素数,并把其计算结果存入变量end(步骤SD2)。然后,通过用标识的行数(即、(变量ROW-LAST的行序号)-(变量ROW-FIRST的行序号)的绝对值)来除以这个变数end之值,计算为只扫描一次如图30所示那样的各行的中心所需的间隔,并将其存入变量inc(步骤SD4)。并且设变量ROW-FIRST的检出行序号为变量counter的初始值(步骤SD5)。
然后,在是行扫描的场合(步骤SD6),从上述座标变量的数组DIM-POINT-P、DIM-POINT-Q求现在的变量counter值中的扫描始点及终点,以x方向增量I且y方向增量是上述倾斜增量数组LINE-INC从帧存储器6的Banko6A取出一行图像数据,再将其保存在取入缓冲数组scan-line中,另外把其数据的个数存入变量num(步骤SD7)。
进而,调用变换详细后述那样的宽信息的变换指令(步骤SB174),把这个取出的数据变换成宽信息。然后,以该宽信息为依据,把和未图示的条形码表一致的部分变换成码,并保存该信息(步骤SD9)。
此后,增量变量counter,即用上述间隔变量inc的值再设定counter(步骤SDA),检查这个被再设定的变量counter值是否超过上述变量end,也就是标识范围与否(步骤SDB)没有超过时转移控制到上述步骤SD6,超过时转移控制到下一个步骤SDC。即,检查被保存的码信息是否可以完全译解标识上所记载的信息(步骤SDC)、解码可能时携带解码可能的信息,或解码不可能时携带解码不可能的信息返回控制到上层的指令。
下面,说明在上述步骤SF被调用的智能扫描指令这个智能扫描指令是只扫描在上述最佳扫描中遗漏了的码位置的指令。以下,参照图31的流程图,说明这个智能扫描指令。
首先,定义用最佳扫描不能补充的码中被认为是画面内的码数为i(步骤SF1)。即,i=(全部码数)-(error-num)-(用最佳扫描补充了的个数)。进而,把各码的行序号和列序号分别存入数组R和C(步骤SF2)。由以上这些,可以求用最佳扫描不能补充的码的个数和其位置(如后述那样,如果知道列序号和行序号,则由在步骤SB求到的CODE-POS可以知道其座标)。
然后,将变量counter和倾斜模式计数n初始化成0(步骤SF3)。
进而,定义通过第counter位的未检出处的座标(CODE-POS[R][counter][c[conuter]]并具有SLOPE+dt[n]的倾斜的直线1(步骤SF4)。定义该直线1与画面框架相交的点w3,w4,取入线段w3-w4上的图像数据(步骤SF5)。
并且,调用变换成宽信息的变换指令(步骤SB174),并把这个取出的数据变换成宽信息。然后,该宽信息为依据,把与对应该条形码的用途,而事先决定的未图示条形码表一致的部分变换成中间信息,并保存该信息(步骤SF6)。进而,判断在从步骤SF4至SF6中作为目标处的码是否补充上了(步骤SF7),补充上的场合,转移向步骤SFA,没补充上的场合转移到SF8。
在上述步骤SF7是判断为没补充上时,增量倾斜模式计数n(步骤SF8),并检查其是否不足倾斜模式数N-PAT(例如在把倾斜的种类准备成10种类预先数组dt时,其值为“10”)(步骤SF9)、不足时,转向步骤SF4,超过时转移控制向步骤SFA。
在上述步骤SF7是判断为已补充了时,或者倾斜模式计数n是倾斜模式数N-PAT以上时,增量变数counter,把倾斜模式计数n再设定成“0”(步骤SFA)。并检查这个被再设定的变数counter值是否超过上述变量i,也就是用最佳扫描不能补充的码中被认为是画面内的码的个数(步骤SFB)。不超过时转移到上述步骤SF4,超过时则转移动到下一步骤SFC。
在上述步骤SFB判断为超过时,检查被保存的码信息是否可以完全译解标识所记载的信息(步骤SFC),可以译解时,携带解码可能的信息向上层的指令返回。另外译解不可能时、携带解码不可能的信息返回到上层的指令。
即,在上述步骤SF4到步骤SFB中,试图对用最佳扫描不能补充的码中被认为是画面内的每一个码,以多个数种类的倾斜取入图像数据,来确定该码。由此一来,因为这成了只取入必要的部分的操作,所以以最小的尝试即可以确定码矩阵。
这里,在上述例中,虽然在码没有补充上时是用改变直线1的倾斜来扫描的作法,但平行移动直线1来扫描也是可以的。另外,倾斜相异的若干个直线1的交点位置也可以像所说的条形码标识的先头位置或中央位置那样地做适当的设定。
下面,参照图32A及图32B的一系列流程图,说明在上述步骤SB174中被调用的变换成宽信息指令。本指令主要的是求标识的条带和空白的宽、通过微分信号求条带和空白的边界,这时通过近似二次曲线来求数据的峰值。进而,求顺次峰值位置,通过求其位置之差,可以求宽。
即、首先,设在上层指令取入的取入缓冲数组scan-line行为数据的数组,定义这个被取入并存储在变量num之值为数据个数(步骤SB1741)。然后,把减量了该变数num之值的结果存入位置标识计数i,并将变量j初始设定成(步骤SB1742)。进而,从取入缓冲数组scan-line的第i位(由位置标识计数i所表示的)的位置值中减去取入缓冲数组scan-line的第i-1位的位置值,并把其解再设定成取入缓冲数组scan-line的第i位的位置(步骤SB1743)。此后,减量位置标识计数i(步骤SB1744),判断其结果是否比O还大与否(步骤SB1745)。如果不大的话,则返回控制到上述步骤SB1743。即,在从这个步骤SB1741到步骤SB1745过程中,一次微分行数据。
接着,将位置标识计数i初始化成2(步骤SB1746)。并且判断取入缓冲数组scan-line的第i位后的位置之值是否即大于阈值变量THRESHOLD值,又大于取入缓冲数组scan-line的第i-1位的位置值,且还在取入缓冲数组scan-line的第i+1位的位置值以上(步骤SB1747),或是如此,则将符号标志flag设为UP(步骤SB1748)。
若不是如此,下面就判断取入缓冲数组scanline的第i位的位置值是否是即比符号为负的阈值变量THRESHOLD值(-THRESHOLD)小,又比取入缓冲数组scan-line的第i-1位的位置值小,且还在取入缓冲数组scan-line的第i+1位的位置之值以下(步骤SB1749,若是如此,则将符号标志flag设成DOWN(步骤SB174A)。
若非如此,下面,增量位置标识计数i(步骤SB174B)、并判断其结果是否比从变量num之值减去1的还小与否(步骤SB174C)。若小的话转移控制向上述步骤SB1747,若不小的话则返回控制向上层的指令。
即,在这个步骤SB1747到步骤SB174C中,检出超过阈值变量THRESHOLD值的最初的峰值,也就是图33的第一位的峰值。并且,在被检出的峰值的符号是正号时,设符号标志flag为UP并转移控制到步骤SB174D,而在被检出的峰值的符号是负号时,则设符号标志flag为DOWN也返回控制到步骤SB174D。此外,在即便扫描行数据也不能检出峰值时,返回控制到上层的指令。
如果这样设定了符号标志flag的话,接着,设位置标识计数i值为x1,及设取入缓冲数组scan-line的第i-1位的位置值为y1,取入缓冲数缓冲数组scan-line的第i位的位置值为y2,取入缓冲数组scan-line的第i+1位的位置之值为y3,并由此,进行将被检出的峰值位置和其两邻数据用二次曲线的连接(步骤SB174D)。产并且进行如下式(0.5(-y1-2x1y1+4x1y2+y3-2x1y3))/(y1-2y2+y3)
这样的计算,求上述二次曲线的峰值位置。进而将之存入变量lastpos(步骤SB174E)。
此后,判断位置标识计数i的值是否比从变量num之值中减去2的数还小与否(步骤SB174F),如果不小则返回控制向上层的指令。
另外,如果小的话,则增量位置标识计数i(步骤SB174G)。进而判断是否符号标志flag是DOWN,而取入缓冲数组scan-line的第i位的位置之值既比阈值变量THRESHOLD的值大、又比取入缓冲数组scan-line的第i-1位的位置值大,且还在取入缓冲数组scan-line的第i+1位的位置之值以上与否(步骤SB174H)、若是如此,便把符号标志flag设为UP(步骤SB174I)。
若非如此,则判断是否符号标志flag是UP,而取入缓冲数组scan-line的第i位的位置值既比符号为负的阈值变量THRESHOLD的值小,又比取入缓冲数组scan-line的第i-1位的位置之值小且还在取入缓冲数组scan-line的第i+1位的位置之值以下与否(步骤SB174J),若非如此便转移控制到上述步骤SB174F,若是如此则设符号标志flag为DOWN(步骤SB174K)。
若如此符号标志flag已被再设定,然后,通过设位置标识计数i的值为x1及设取入缓冲组scan-line的第i-1位的位置之值为y1,取入缓冲数组scan-line的第i位的位置之值为y2,取入缓冲数组scan-line的第i+1位的位置之值为y3、进行将被检出的峰值位置与其两邻数据用二次曲线的连接(步骤SB174L)。并且进行如下这样的计算(0.5(-y1-2x1y1+4x1y2+y3-2x1y3))/(y1-2y2+y3)来求上述二次曲线的峰值位置,并将其存入变量nowpos中(步骤SB174M)。
由此,可以获得如图34所示的一个前峰值位置lastpos和这次求到的峰值位置nowpos。进而通过取这样获得的二峰值位置之差求峰值的间距、并将其存入用宽信息存储数组变量width的变量j所表示的位置(步骤SB174N)。
此后,将峰值位置变量lastpos更新成峰值位置变量nowpos的值(步骤SB1740),另外在增量变量j之后(步骤SB174P),把控制转移到上述步骤SB174F。
这样,在步骤SB174F开始到步骤SB174P中,检出顺序峰值,并把峰值间距离存入到宽信息存储数组变量width中去。这里,同在上述步骤SB1747到步骤SB174C中的最初的峰值检出不同的点在于,举例说在现在的符号标志flag是DOWN时,那么接着必须找出的峰值是正符号的峰值这一点。
如以上所明确地那样,条形码标识2,不管给予怎样的旋转角、或既便一部分溢出到画面外,因为是推定包含于条形码的各自的码位置,并以其信息为依据读取,故没有无用的读取。即,因为是推定包含于条形码的各自的码位置,并以其信息为依据来决定是否进行扫描处理与否,可以防止对读入不充分的条形码图像进行处理而浪费时间的现象。此外,在本实施例中,虽然是用判断结果来分岔开继续处理与否,但在被判断为很难补充的情况,也可以把采用不是通常的扫描处理的装置用于装置选择上。
本第一实施例还进一步具有以下这样的特征。
(1)在检出标识位置时,因为是用最小二乘法来再设定检出位置,所以可以更准确的决定位置。
(2)用最佳扫描指令,通过从标识的画面内可以读取的尺寸(行数,列数)和在画面上的座标,做相对于各行其数据取出数各为一条的扫描,从而在用该最佳扫描达到可以解码时能够缩短标识读取时间。
(3)进一步,因为通过智能扫描,在用最佳扫描不能读且又被推定为画面内的码位置,采用了变换各种角度进行检出处理的做法,所以,可以把标识读取时间的增加控制到最小。
下面,说明本发明的第二实施例。
图35是表示本第二实施例中数据处理装置7的算法的概略之流程图。这里为简化说明,以下做省略如上述第一实施例那样的手颤检出等的说明。
首先、把图像取入帧存储器6(步骤SI)。
然后,调用详细后述那样的标识检出指令(步骤SJ),用这个被取入的图像数据检查标识存在与否,进而若标识存在则检出标识信息。
然后,判断上述步骤SJ中的标识检出处理的结果(步骤SK),在标识不存在时,再次把控制转移到上述步骤SI并把图像取入帧存储器6。
另一面,当标识存在时,调用详细后述那样的扫描指令(步骤SL),利用在上述步骤SJ被定义的各种变量全面扫描标识,读取标识信息。
进而,判断用以上述步骤SL的扫描读取的信息是否可以解码(步骤SM)、解码可能时,转移控制到步骤SN的解码处理。
当解码不能时,再次转移控制到上述步骤SI并把图像取入帧存储器6。
在步骤SN,译解在上述步骤SL的扫描指令中读取的信息,并把其解码结果输出到未图示的主机装置。
以下详细说明前述的各种处理指令。
首先,参照图36的流程图和图9的标识的各信息的说明图(该图所示为具有4×1标识矩阵(故码数是“4”)的条形码标识),说明在上述步骤SJ被调用的标识检出指令。这个标识检出指令包括二种标识检出处理,一种是检查标识有无的处理,另一种是求检出标识的位置信息即为把图像数据与标识平行地从帧存储器6中抽取所需的抽取范围(变量TOP及BOTTOM)和大条带的倾斜(变量SLOPE)及标识的数据方向的倾斜(变量DATA-SLOPE)的处理。这里,变量TOP的值表示标识的顶座标,而变量BOTTOM的内容则表示标识的底座标。还有,变量SLOPE的内容表示存在于开始或者停止22、23中的大条带22A,23A的倾斜。进而变量DATA-SLOPE的内容表示标识的数据方向的倾斜。因此,在原理上SLOPE和DATA-SLOPE存在有正交关系。
在这个标识检出指令中,首先调用详细后述的开始/停止位置检出(步骤SJ1),求标识之有无和为平行于标识地从帧存储器6中抽取图像数据所需的抽出范围(变量TOP及BOTTOM)。
然后判断在上述步骤SJ1的开始/停止位置检出的结果(步骤SJ2),在标识不存在时,作为“无标识”跳出这个处理。亦即携带无标识的信息返回。
另一方,在标识存时,判断是由行扫描确定的还是由列扫描确定的(步骤SJ3)。在行扫描时,用步骤SJ4,SJ5求图9所示的直线的x/y倾斜(SLOPE)和该直线与y=0的画面框相交的截距(intercept)。
同样,在列扫描时,用步骤SJ6,SJ7求y/x倾斜(SLOPE)和x=0的画面框相交的截距(iintercept)。
然后,以在上边求到的数据为依据,用数据倾斜检出指令求标识的数据方向的倾斜(变量DATA-SLOPE)(步骤SJ8),并返回。
下面,参照图8的开始/停止位置检出说明图及图37的流程图,说明在上述步骤SJ1的开始/停止位置检出指令。这个开始/停止位置检出指令包括以下二种标识检出处理一种是检出标识的有无的处理,另一种是求检出标识的位置信息即为从帧存储器6中平行于标识地抽取图像数据所需的抽出范围(变量TOP及BOTTOM)的处理。
在这个开始/停止位置检出指令中,首先初始化标识检出标志((步骤SJ11)。这个标识检出标志由开始检出标志start-flag和停止检出标志stop-flag以及四角检出标志corner-flag组成。这些标识检出标志中的start-flag和stop-flag,在后述的其他处理中,被用于指示应该选择及处理开始码22及停止码23中的哪一个。因为在开始码22和停止码23二者均被检出时,有必要选择可靠性更高的一方。进而,corner-flag表示在后述的其它的处理中算出DATA-SLOPE的一个可能性。
然后,调用详细后述那样的开始/停止码检出指令(步骤SJ12),检查在取入帧存储器6的图像数据中是否存在开始以及/或者停止码22、23与否。也就是检出图8中的e,f,g,h点(但是,并不限于检出这四个构造变量的全部,例如,在图9所示那样的场合中,也许不求构造变量f及h)。通过这个指令,如果开始以及停止码22、23被检出及确定、则在开始码22时可以定义图8的帧存储器6上的构造变量g,在停止码时可以定义构造变量h。这里,构造变量e表示最初找到开始码22的座标和码长,f表示最初找到停止码23的座标和码度、g表示最后找到开始码22的座标和码长,h表示最后找到停止码23的座标和码长。
进而,判断标识是否已被检出(即构造变量g,h之一被定义与否)(步骤SJ13)、在没被定义时,作为“无标识”返回。
另外,在上述步骤SJ13中已被判断为“检出了标识”时,再判断构造变量g是否被定义(步骤SJ14)、如果没被定义则进入步骤SJ16。另一方面,在构造变量g被定义时,调用如参照图12所说明的那样开始边缘位置检出指令(步骤SJ15),进行开始边缘位置的检出。这个开始边缘检出通过构造变量e及g(若构造变量g被定义的话当然构造变量e也被定义了)定义如图8所示的座标变量i及m,进而定义座标变量a及d。另外ONstrt-flag、并定义座标变量TOP以及BOTTOM。这里,座标变量a及d分别表示标识的四个角座标之一。
然后、判断构造变量h是否被定义(步骤SJ16)、若没有被定义,则进入步骤SJ18。另一方面,在构造变量h被定义的时候,调用图13示出的的停止边缘位置检出指令(步骤SJ17)、进行停止边缘位置的检出。这个停止边缘位置检出、通过构造变量f及h(若构造变量h被定义的话当然构造变量f也被定义了)来定义如图8所示那样的座标变量j及k,进而定义座标变量b及c。另外,ONstop-flag,并定义座标变量TOP及BOTTOM。这里,座标变量b及c分别表示标识的四个角座标之一。
接着,判断start-flag、stop-flag是否均ON(步骤SJ18),在二者均没有ON时,作为“有标识”返回。
在两标志均ON的时候,将start-flag,stop-flag二者都一度复位后(步骤SJ19),比较线段(a-d)和(c-d)(步骤SJ1A),选择在开始码22和停止码23中其线段长的一方作为处理对象。这是因为在通常使用时,一方的码相对于他方变短的最大理由是从画面溢出时的情况,所以采用这种把长的一方选为处理基准的做法。
另外,在线段(a-d)方比线段(b-c)更短时,分别把座标变量b的值代入座标变量TOP,或把座标变量c的值代入座标变量BOTTOM,来定义为桷定标识信息的抽出范围所需的数据,进而ONstop-flag和corner-flag(步骤SJIB)。
相反,在线段(a-d)的长度线段(b-c)以上时,分别把座标变量a的值代入座标变量TOP,或把座标变量d的值代入座标变量BOTTOM并定义为确定标识信息的抽出范围所需的数据,进而ONstart-flag和corner-flag(步骤SJ1C)。
并且,作为“有标识”返回。
下面参照图38的流程图,说明开始/停止位置检出指令中的步骤SJ12所调用的开始/停止码检出指令。这个开始/停止码检出指令是如前述那样地试图检出构造变量e及g,或f及h中的至少一方的指令。
亦即,调用详细后述那样的扫描及检出(行)指令(步骤SJ121)、在行方向上扫描帧存储器6的图像数据,进行开始/停止码22、23的检出。这里,所谓的行方向的扫描,是指如图8中作为行扫描所示那样的向帧存储器6的长方向的扫描。
进而,判断上述扫描及检出(行)指令的结果、构造变量g或h被定义与否(即,开始码22或停止码23是否被检出,换言之标识是否被检出)(步骤SJ122)、在标识已被检出时,作为“有标识”返回。
另一方面,在标识没有被检出时,调用扫描及检出(列)指令(步骤SJ123),在列方向上扫描帧存储器6的图像数据,进行开始/停止码22,23的检出。这里,所谓的列方向的扫描,是指如在图八作为列扫描所示那样的向帧存储器6的短边方向的扫描。
然后,判断上述扫描及检出(列)指令的结果,构造变量g或h是否被定义(即,开始码22或停止码23是否被检出、换言之即标识是否被检出)(步骤SJ124),在标识被检出时,作为“有标识”返回。
但是,在标识在这次也没被检出时,则作为“无标识”返回。
这里,参照图39所示的流程图说明在上述步骤SJ121及SJ123被调用的扫描及检出指令。这个指令的处理在于在行方向或列方向由按照所规定的检出间隔扫描帧存储器6的数据、并试图确定构造变量e及g和构造变量f及h的至少一方。至于扫描哪一个方向将在调用这个指令时被决定。在可以确定构造变量e及g,f及h的至少一方时,作为已检出标识返回到上层的指令。在构造变量e及g,f及h的哪一方的编组都没能检出时,作为无标识检出返回上层的指令。
在该扫描及检出指令中,首先初始化码确定标志(步骤SJ1211)。这个码确定标志由开始确定标志start-lock和停止码确定标志stop-lock组成。这些码确定标志被用于认识开始/停止码22,23时的可靠性评价。
初始设定之后,判断是行扫描还是列扫描(步骤SJ1212)、若是行扫描则取入第n行的图像数据(步骤SJ1213),若是列扫描则取入第n列的图像数据(步骤SJ1214)。
然后,判断在上述取入的图像数据中是否存在开始始22(步骤SJ1215),如果不存在则进入步骤SJ121D。在开始码22存在时,判断start-flag是ON否(步骤SJ1216)。在start-flag不是ON时,判断该开始码22是否为开始检出的码(步骤SJ1217)。是开始所检出的码时,把其检出座标和码长存入构造变量e中(步骤SJ1218)。另外,在不是开始所检出的码时,判断现在检出的码长和已经存入到e中的码长的绝对差是否在允许范围之内(步骤SJ1219)。在允许范围外时,把在步骤SJ1218的现在能检出的检出座标和码长存入构造变量e。若是允许范围内的时候,,则使start-lockON(步骤SJ121A)。
此外,在上述步骤SJ1216start-lock是ON的时候,判断现在能检出的码长和已经存入e中的码长的绝对差是否是允许范围之内(步骤SJ121B)。是允许之外时,转移控制到步骤SJ121D。另外在是允许内时,把现在能检出的检出座标和码长存入构造变量g中(步骤SJ121C)。
然后同样地,判断在上述取入的图像数据中是否存在停止码23(步骤SJ121D)、如不存在、便进入步骤SJ121L。在停止码23存在时,判断stop-flag是ON否(步骤SJ121E)。在stop-flag不是ON时,判断该停止码23是否是开始所检出的码(步骤SJ121F)。在是开始能检出的码时,把其检出座标和码长存入构造变量f(步骤SJ121G)。另外,在不是开始所检出的码时,判断现在所检出的码长和已存入f中的码长的绝对差是否是允许范围之内(步骤SJ121H)。是允许外时,将在步骤SJ121G的现在所检出的检出座标和码长存入构造变量e中。另外,在允许内时,将stop-lockON(步骤SJ121I)。
还有,在上述步骤SJ121Estop-lock是ON时,判断现在所检出的码长和已存入在f中的码长的绝对差是否是允许范围之内(步骤SJ121J)。在允许外时,转移控制到步骤SJ121L。另外,在允许内时,把现在所检出的检出座标和码长存入构造变量h中(步骤SJ121K)。
然后,使参数n之值只增加规定的增量值来更新n(步骤SJ121L),决定下次取入的行或列数。并且,因为帧存储器6的纵和横的尺寸是已知的,所以用这个尺寸判断上述被更新的n是画面外与否(步骤SJ121M),是画面内时,转移控制到上述步骤SJ1212。
是画面外时,也就是如果扫描终了则返回。
在把条形码标识2粘贴在大规模集成电路(LSI)元件等上时,在摄像机的视场内存在元件表面。一般地因元件表面具有粒状模式,所以在其粒状模式内发生认错开始/停止码222、23这样的误认识现象已在我们的实验中被证实。在发生了误认识时读取也就困难了。因此,在上述的步骤SJ1215到步骤SJ121C求构造变量e,g,及在步骤SJ121D到步骤SJ121K求构造变量f,h。即,比较最初发现的开始码和接着发现的开始码的码长,如果是允许范围内,则让其正式地承认找到了开始码22。进而,把最后发现的开始码构造变量也和已确定的开始码长相比较,且只保存允许内的码。同样地,比较最初发现的停止码和接着发现的停止码的码长,如果是允许范围内,则正式地承认找到了停止码23。进而,把最后发现的停止码构造变量也和已确定的停止码长相比较,并只保存允许内的码。由此,防止误认识。
下面,参照图40的流程图及图8的开始/停止位置检出说明图和图9的标识的各信息的说明图,说明在标识检出指令中的步骤SJ8所调用的数据倾斜检出指令。在此指令,求图9所示的数据的并列方向的倾斜DATA-SLOPE。如上述那样地,DATA-SLOPE虽然可以从SLOPE来求,但是在标识的列数比行数多的这类构成横长的标识的时候,不能精度良好地推定DATA-SLOPE。其结果发生不能充分读取标识信息的情况。因此,在四角被检出时,做从其中求DATA-SLOPE的偿试、当结果不理想时推定标识的边界,用其边界偿试堆定。如果这样结果还不理想时,则只好从SLOPE来求了。
即,首先判断corner-flag是ON否(步骤SJ81),如果是ON、转移控制向SJ82,另外如果OFF,则转移控制向SJ86。
ON的时候,即标识检出时求出四角的时候,将线段(a-b)的倾斜暂时地设为DATA-SLOPE(步骤SJ82)。然后、评价所求到的DATA-SLOPE是否有高的可靠性(亦即、误差是否在允许范围内)(步骤SJ83)。在此,这个评价装置如图9所示地在原理上SLOPE和DATA-SLOPE有正交关系(但SLOPE是x/y,DATA-SLOPE是y/x)。因而,在两者之间SLOPE=-DATA-SLOPE的关系成立。即,在步骤SJ83评价SLOPE/(-DATA-SLOPE)某程程度地接近于1否,已是评价所求得的DATA-SLOPE的可靠性的主要装置。
在步骤SJ83判断为允许范围的时候,返回到上层指令。另一方,在允许范围外的时候,将线段c-d的倾斜暂时地设为DATA-SLOPE(步骤SJ84)。然后,评价所求到的DATA-SLOPE的可靠性高否(即,误差在允许范围内否)(步骤SJ85)。在步骤SJ85判断为是允许范围时,返回到上层指令。另一方,在允许范围外时,转移控制到步骤SJ86。
然后,调用详细后述那样的倾斜推定检出指令(步骤SJ86),推定标识边界,并用其边界偿试推定。其结果在判断为被检出的时候,返回到上层指令,在评价为没被检出的时候,转移控制以步骤SJ88(步骤SJ87)。在步骤SJ88,利用SLOPE和DATA-SLOPE存在正交关系,把-SLOPE代入DATD-SLOPE。此后,返回到上层指令。
下面,参照图41的流程图和图42A及图42B的倾斜推定检出说明图(用开始码确定标识之例,即,start-flag=ON),说明在上述那样的数据倾斜检出指令中的步骤SJ86被调用的倾斜推定检出指令。这个指令是一个推定标识上端部的边缘,并用这个推定边缘试求标识的数据方向的倾斜(变量DATA-SLOPE)的指令。
即,判断基准是开始码22还是停止码23(步骤SJ861),在把开始码22选择为基准的时候(即start-flag=ON,stop-flag=OFF),把从点a开始用倾斜-SLOPE向停止方向前进了二个码字左右的点设为点S(步骤SJ862)。另一方向,选择停止码23作为基准时(即start-flag=OFF,stop-flag=ON),从点b用倾斜-SLOPE向开始方向前进了二个码字左右的点设为点S(步骤SJ863)。
然后,定义以点S为中心的窗口T(如32×32象素)(步骤SJ864)。进而对窗口T内进行加粗处理(使黑的部分变粗,白的部分变细)(步骤SJ865),获得如图42B所表示那样地包含原图像的黑部分的加粗处理结果。在加粗处理中,使用周知的加粗处理操作既可。
接着,在该场合从窗口T的左上角向右下角方向扫描具有-SLOPE的倾斜的直线、把最初发现“黑”点定义成点u(步骤SJ866)。这里,把基准点设为点a或者点b,右-SLOPE是负则从左上角向右下角方向扫描,若是正的话则从右上角向左下角方向扫描。另一方面,设点c或者点d为基准点,-SLOPE是负则从右下角向左上角扫描,是正则从左下角向右上角方向扫描。
其次,求在距点u最近距离的原因像上的边缘,设为点v(步骤SJ867)。即通过以上的操作,求出标识的上部边界。由此,判断start-flag是ON否(即,是否把基准设置在开始标志22上,换言之即基准点是否是点a)(步骤SJ868)。如果start-flag是ON,便由点a和点v求倾斜DATA-SLOPE(步骤SJ869)。另一方面,如果start-flag是OFF,则由点b和点v求倾斜DATA-SLOPE(步骤SJ86A)。
进而,评价求到的DATA-SLOPE的可靠性是否高(即,误差是否是允许范围内)(步骤SJ86B)。在这个步骤SJ86B判断为是允许范围时,作为倾斜已检出返回到上层指令。另一方面是允许范围外时,作为倾斜没被检出返回到上层指令。
在此,为简单起见,我们只表示了关于点a、b的流程,对在步骤SJ86B中允许范围外的情况,对点c,d也进行同样的处理即可。
下面,参照图43的流程图及图44的向帧存储器6的投影像图说明在上述步骤SL被调用的扫描指令。
这里,图44所示为具有4×1的标识矩阵(故,码数是“4”)的条形码标识,在行扫描时开始码22被选择为基准时的例子。另外,为使说明简单,只关于是行扫描的情况进行说明。所以对不是行扫描的情况,把后述那样的步骤SL4的处理换成步骤SL5,及步骤SL7,SL8的处理换成步骤SL9、SLA即可。
即,首先把变量counter初始化成O(步骤SL1),另外把基准座标变量WORK初始化成标识的顶座标变量TOP的值(步骤SL2)。
然后,判断是行扫描还是列扫描(步骤SL3),是行扫描时,把标识的底座标变量BOTTOM的y座标值和标识的顶座标变量TOP的y座标值之差代入变量count-end(步骤SL4)。即求必须确定的模式数(在图44的场合的标识的列方向的像素数)、并保存于变量count-end中。所谓模式数,就是为扫描标识全部所需之数。
同样地,在列扫描时,把标识的底座标变量BOTTOM的x座标值与标识的顶座标变量TOP的x座标值之差代入变量count-end中(步骤SL5)。
然后,再次判断是行扫描还是列扫描(步骤SL6),在行扫描时,在标识的顶座标变量TOP的y座标值上加上变量counter之值,并把其结果作为基准座标变量WORK的y座标值代入(步骤SL7)。另外,用基准座标变量WORK的y座标之值乘以标识的倾斜变量SLOPE之值,并在其结果上加上标识的截距变量intercept,再把结果作为新的基准座标量WORK的x座标值代入(步骤SL8)。就这样,随着变量counter值的增加再设定基准座标变量WORK。
列扫描的时候,在标识的顶座标变量TOP的x座标值上加上变量counter之值,并把其结果作为基准座标变量WORK的x座标值代入(步骤SL9)。另外,用基准座标变量WORK的x座标之值乘以标识的倾斜变量SLOPE的值,并在其结果上加上标识的截距变量intercept,再把结果作为新的基准座标变量WORK的y座标值代入(步骤SLA)。
接着,定义过这个被再设定的座标变量WORK且具有用数据的倾斜变量DATA-SLOPE所表示的倾斜的直线,求该直线的画面框架相交的二个点,并把它们分别保存于座标变量P及Q(步骤SLB)。
然后,从帧存储器6中取出一行线段P-Q间的图像数据(步骤SLC)。
其次,把这个取出的数据变换成宽信息(步骤SLD)。从原图像求宽信息的装置,可以利用同上述的第一实施例一样的在微分了原图像后求峰值间距离的装置。但是,此外的,如计数进行了二值化后的像素数的装置等也可以考虑,并非因上述内容而限制于前述的微分法。
接着,以该宽信息为依据,把和未图示的条形码表一致的部分变换成中间信息,并保存该信息(步骤SLE)。
此后,增量变量counter值(步骤SLF),检查作为其结果的这个被再设定的变量counter值是否达到了必要数、即变量counter=count-end与否(步骤SLG)。在没达到必要数时把控制返回到上述步骤SL6,而达到必要数时,则转移控制到步骤SLH。即检查被保存的中间信息是否可以完全译解标识所记载的信息(步骤SLH),在译解可能时,携带解码可能的信息返回向上层的指令,而在译解不可能时,则携带解码不可能的信息返向上层的指令。
如以上所述,既便是在条形码标识2被贴在LSI元件表面等粒状性强的表面上时,也可以防止误把其粒状模式当作开始/停止模式来认识的现象。所以其结果,是即便使用二维摄像装置也能消除解码不能的现象,从而没有无效的读取。进而,本发明的第二实施例具有以下特征。
(1)在求标识的数据倾斜(DATA-SLOPE)时,当已求四角的时候,因采用的是使用这些信息检出并进而用开始/停止码的倾斜SLOPE来检查这样的做法,所以可以更准确决定数据倾斜。
(2)在求没求四角时的标识的数据倾斜(DATA-SLOPE)时,因为是采用推定标识的上/下边缘,用边缘位置和基准点推定数据倾斜,进而用开始/停止码的倾斜SLOPE来检查这样的做法,所以可以更准确地决定数据倾斜。
另外,本发明并非是仅限定于上述的第一及第二实施例的,当然可以进行种种的变形实施。
例如,二维摄像装置5,并非只限定于所使用的以二维CCD或摄像管为代表的面积式传感器,象一维摄像元件和一维扫描机构的组合或光电探测器与二维扫描机构的组合都可以。
另外,作为二维摄像装置如果使用采用了可高速读出并且是非破坏读出的电荷调制元件(CMD摄像元件)的固体摄像装置,那么可省略帧存储器6。关于采用了这个CMD摄像元件的固体摄像装置,特开昭61-84059号公报以及在1986年如开的InternatianalElectronDeviceMeeting(IEDM)的征集稿集中第353页到356页的题为《ANEWMOSIMAGESENSOROPERATINGINANON-DESTRUCTIVEREAD-OUTMODE》的论文都公开了关于它的内容。
还有,数据处理装置7,也没有必要包括位置检出部7A,倾斜检出部7B,解码执行决定部7C,解码部7D的全部,如把解码部7D归图未示出的主机装置一侧所有,把包含解码开始指示信号的控制信号输出给主机形式的结构也是可以的。进而,把这个数据处理装置7的全体构成在主机装置内,把帧存储器6的信息,或摄像装置的输出取入主机装置时行处理的机构也是可行的。此外,也可以用适当地选择把各种做成一体,各部独立或一部分独立的种种构成来实施本发明。
另外,在上述说明中,虽然条形码标识用的是PDF-417格式的标识,但并非仅限于此,象Code49等其它的堆积式条形码或JAN等一维条形码都可以。
如以上所述,根据本发明,可以提供能节省在条形码标识的读取过程中的无效的时间的条形码信息读取装置。这是因为本发明采用了根据被记忆在帧存储器上的条形码的信息推定条形码的码位置,以这个推定的码位置为依据推定条形码可以解码与否并只存在这个推定结果是解码可能时进行解码的做法。
进而,本发明可以提供不管条形码标识(特别是堆积式条形码标识)在读取装置的标识检出面上怎样朝向地安放,或是条形码标识的摄取图像有缺损,都能读取其条形码标识的信息的标识信息读取装置。亦即,通过以条形码标识的投影像的四角位置中至少2点为其准推定标识位置,进而推定包含于标识中的码位置,可以有实效地平行于标识且无浪费地抽取数据,提供标识的角度不影响读取性能,并可以高速地读取处理的优异的效果。
权利要求
1.一种记号信息读取装置包括把由条带和空白构成的条形码作为二维像来摄像的摄像装置;存储从该摄像装置获得的信息的存储装置;根据被记存储该存储装置的信息来推定条形码的码位置的位置推定手段;以由该位置推定手段所推定的码位置为依据,推定条形码是否可以解码的解码可能性推定手段。
2.依据权利要求1的装置,其特征在于,还包括前述位置推定手段包含推定前述条形码的码位置是否是在前述摄像装置的摄像视野内之视野内推定手段,前述解码可能性推定手段包含在由前述视野内推定手段推定前述条形码的码位置在前述摄像装置的摄像视野内时,推定条形码是解码可能的手段。
3.依据权利要求1的装置,其特征在于,还包括由前述摄像装置所摄取的条形码包含多数的码、前述位置推定手段包含推定前述条形码的各码位置是否是在前述摄像装置的摄像视野内的视野内推定手段,前述解码可能性推定手段包含在由前述视野内推定手段推定为在前述摄像装置的摄像视野内有规定数以上的前述条形码的码位置时,推定条形码是解码可能的手段。
4.依据权利要求3的装置,其特征在于,还包括用前述摄像装置摄取的条形码包含,应该被合成的多数的码,和由其个数决定前述规定数的错误检出以及修正用的码,和表示前述规定数的码,前述解码可能性推定手段进而包含从被存储于前述存储装置中的信息检出表示前述规定数的码,并决定前述规定数的手段。
5.依据权利要求4的装置,其特征在于,其中用前述摄像装置所摄取的条形码进而包含表示前述应该被合成的码以及错误检出及修正用的码的配置关系的码、前述视野内推定手段包含,从被存储于前述存储装置的信息检出表示前述配置关系的码,根据这个码配置推定前述条形码的各码位置是否是前述摄像装置的摄像视野内的手段。
6.依据权利要求1的装置,其特征在于,进一步包括在前述解码可能性推定手段已推定是解码可能的时候,译解被存储于前述存储装置中的信息的解码装置。
7.依据权利要求1的装置,还包括前述位置推定手段,其特征在于,其中从被存储于前述存储装置的信息检出前述条形码的特征模式的模式检出手段。推定用该模式检出手段所检出的特征模式是否是具有可靠性的特征模式的可靠性推定手段;和利用由该可靠性推定手段推定为可靠性高的前述特征模式,从被存储于前述存储装置的信息推定条形码的码位置的码位置推定手段。
8.依权利要求7的装置,其特征在于,其中前述特征模式包含在前述条形码的前后所配置的开始及停止码、及前述模式检出手段包含检出前述开始码及停止码的至少一方的检出手段。
9.依权利要求8的装置,其特征在于,其中前述可靠性推定手段包含差判定手段,在由前述检出手段进行的模式检出的结果和在前述条形码的条带的延伸方向设置规定量的间隔进行再一次的模式检出的结果之差在所规定以内时,推定该模式为有可靠性的模式。
10.依据权利要求9的装置,其特征在于,其中前述差判定手段包含在由多数次的模式检出所检出的码长的绝对差是允许范围内时,推定该模式为有可靠性的模式的手段。
11.依据权利要求7的装置,其特征在于,其中前述特征模式包含了在前述条形码的前后所配置的开始及停止码;前述模式检出手段包含检出前述开始码及停止码二者的码检出手段、和前述可靠性推定手段包含在用前述码检出手段检出的前述开始及停止码内,选择可靠性更高的码的选择手段。
12.依据权利要求11的装置,其特征在于,其中前述模式检出手段进一步包含检出前述条形码的条带的延伸方向的前述开始码以及停止码的长度的长度检出手段;前述选择手段根据前述长度检出手段的检出结果,在用前述码检出手段所检出的前述开始及停止码内,选择长度大的一方。
全文摘要
由二维摄像装置摄取的条形码记号被存储于帧存储器。数据处理装置以这个被存储的信息为依据,进行被投影在二维摄像装置的光电转换面上的条形码记号的像的各码的位置的推定,进而检查各码字的位置是否在画面内。并且通过判断推定为画面外的码字数是否超过可修复的数来判断解码可能性,且只在判断成解码可能的时候,才从帧存储器顺次读取条形码记号的信息,并译解成原来的信息。
文档编号G06K7/00GK1090407SQ93116919
公开日1994年8月3日 申请日期1993年8月31日 优先权日1992年8月31日
发明者久保允则 申请人:欧林巴斯光学工业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1