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

文档序号:6407064阅读:186来源:国知局
专利名称:符号信息读取装置的制作方法
技术领域
本发明是关于读取条形码等符号信息的符号信息读取装置。
由于最近受人瞩目的POS(Point·of·sales=销售与信息管理系统)的普及,条形码已广泛地为人们所知道了。这里,所谓条形码,是指由大小不同的条带和空白平行地编组模式形成一个条形码符号,如果必要可以把包含校验位的必要的符号群平行地排列,如排成象在前后有开始/停止符号这样特征的指定模式而构成的符号。
作为正被广泛使用于一般消费物品的条形码,在日本已为JAN(JapanArticleNumber=日本物品序号)标准化了。另外,作为条形码的其他应用,有物流符号。这种符号是在上述JAN码的前边追加了一位或二位物流识别码所构成的。
上述的任一种条形码符号都被称为一维条形码,这些码体系可以允许的信息容量至多为数十“二进位组”(byte)。
然而近年来,对条形码的信息量要求的呼声已经越来越高。与之相呼应,各种被称为二维条形码的符号体系已不断地被发表出来。
根据这些符号体系来看,任一个与一维条形码比都是有能把极多的信息编码化的特征。这个体系采用的是通过堆垒一维条形码来使信息量增加的方式。这样方式的符号被称为堆积式条形码,其中之一是被称为PDF-417的码体系。
过去的作为读取这样的堆积式条形码的符号信息读取装置,举例来说,就是大家知道的在特开平2-268382号公报上所揭示的激光扫描式装置。这种装置是以在二维上扫描的激光光束读取及译解条形码符号信息的。
但是,在该公报所揭示的激光式的条形码符号信息读取装置中,为了把扫描信息顺次解析,必须把条形码符号的像区域(以下,在本说明书中将称为标记)上的条形码的排列方向与扫描角度调整到大致平行的程度,否则就存在不能正确地读取条形码符号信息这样的问题点。
当然,在一维条形码符号信息的读取装置上也存在同样的问题点,但特别的是,堆积式条形码符号与一维条形码符号比较,因为没有并排成一列的条形码高度,所以角度调整是特别地重要,堆积式条形码标记与一维条形码标记的情况相比,将较正确方向设定在读取装置的检出面上就变得非常必要。从而,在正确的信息被读取前有必要若干次地做改变标记的方向的操作,这样就抵消了高速信息输入这一条形码的特色。
另外,在特开平2-268383号公报中,揭示了用二维摄像装置摄取条形码并将条形码的图像取入存贮器,然后再把这个数据作为基础译解条形码符号信息的装置。
但是,即使在使用了这样的二维摄像装置型的条形码符号信息读取装置中,也同上述的激光型的装置一样,如果不把标记上的条形码的排列方向和二维摄像装置的XY方向,即图像存贮的地址方向调整为大致平行,就不能够正确地读取条形码符号信息。在上述公报中虽然记载着在与条形码的排列方向不成平行状态时也可以读取,但却没有揭示实际的手法。进一步说,这个公报的装置对条形码标记偏离摄像装置的视场而被摄像的情况也没有考虑。
基于上述情况,本发明的目的在于提供条形码标记,特别是堆积式条形码标记不管在读取装置的标记检出面上怎样朝向地设置,或者即使在条形码标记的摄像图像上有缺损,都能读取其条形码符号信息的符号信息读取装置。
根据本发明的第一形式,本发明可以提供具备如下诸装置的符号信息读取装置;把由条带和空白构成的条形码作为二维像来摄像的摄像装置;从由该摄像装置获得的条形码的二维像检查出由所摄取的条形码种类所规定的指定模式的至少二个部位的位置检出装置;从由该位置检出装置检查出来的这二个部位的位置出发检查条形码的斜率的斜率检出装置;以该斜率检出装置的信息为基础,从前述的摄像装置所获得的条形码的二维像中顺次读取上述条形码的信息的读取装置。
亦即,在由本发明的第一形式构成的符号读取装置中,位置检出装置从用把条形码符号作为二维像摄像的摄像装置获得的条形码的二维像检查出由该条形码种类所规定的所定模式的至少二个部位,如开始码或停止码等的四角的位置信息的至少二个部位的位置信息。然后,斜率检出装置从这被检查出来的二个部位的位置信息,检查出条形码的旋转角。而且以这个信息为基础,就可以通过读取装置把含于条形码的二维像的条形码信息做为可译解状态的数据列抽取出来。
根据本发明之第二形式,本发明可以提供具备以下诸装置的符号信息读取装置摄取由条带和空白构成的条形码并作为二维像记忆于帧存贮器的摄像装置;间隔规定的读取间隔在指定的方向上从上述帧存贮器顺次读取上述条形码的跳越读取装置;根据上述跳越读取装置通过检查由上述该条形码的种类所规定的指定模式,检查出该指定模式的至少二个部位的位置检出装置;从由上述位置检出装置检查出来的这二个部位的位置检查条形码的倾斜的斜率检出装置;以上述斜率检出装置的信息为基础从被记忆于上述帧存贮器的条形码的二维像顺次读取上述条形码的信息的读取装置;作为在上述跳越读取装置中的上述规定的读取间隔,上述跳越读取装置每次在做从上述的帧存贮器的最开始到最后为止的读取时都交互地设定第1值和第2值的读取间隔设定装置。
另外,根据本发明之第3形式,可以提供具备如下诸装置的符号信息读取装置把由条带和空白构成的条形码作为二维像来摄像的摄像装置;从由上述摄像装置获得的条形码的二维像检查出由该条形码种类所规定的指定模式的至少二个部位的位置检出装置;由被上述位置检出装置检查出来的这二个部位的位置检查出条形码的斜率的斜率检出装置;以上述斜率检出装置的信息为基础,从由上述摄像装置获得的条形码的二维像顺次读取上述条形码的信息的读取装置;微分用上述读取装置读取的各行的数据并通过比较阈值将之变换成条带和空白的宽向信息的宽向信息变换装置;从由上述宽向信息变换装置得到的宽向信息,译解成原来的信息的译码装置;决定在上述的宽向信息变换装置中被利用的阈值的阈值决定装置。这里阈值决定装置为两部分,一部分为从由上述摄像装置获得的条形码二维像检查出由该条形码的种类所规定的指定模式,微分此时的行数据,在其微分强度的多数个峰值内把由该条形码种类所规定的条带和空白的间隔最狭窄的指定的峰值作为假定阈值的假定阈值检出装置;另一部分为判定在上述假定阈值检出装置得到的假定阈值是否存在予先给定的阈值的范围内,如果是在其范围内,则把上述的假定阈值作为正式的阈值来决定的阈值决定装置。
根据本发明的第4形式,可以提供具备以下装置的符号信息读取装置把由条带和空白构成的条形码摄像并作为二维像记忆于帧存贮器的摄像装置(上述的条形码包含有表示该条形码的行数及列数的部分);从上述帧存贮器检查出由该条形码的种类所规定的指定模式的至少二个部位的位置检出装置;从上述位置检出装置检查出来的这二个部位的位置检查条形码的倾斜的斜率检出装置;以上述斜率检出装置的信息为基础,从被记忆在上述帧存贮器的条形码的二维像读取表示上述的条形码的行数及列数的部分的信息,从其读取的信息获得上述条形码的行数及列数的行数及位数检出装置;通过用在上述位置检出装置检出的二个部位的位置的上述的帧存贮器上的上述条形码像的大小,用上述斜率检出装置检查出来的条形码的斜率,以及用上述行数及位数检出装置检查出来的条形码的行数,计算出对于上述条形码的各行中读取一行的数据这样的最适读取行的最适读取行算出装置;从用上述最适读取行算出装置算出的行上的、被记忆在上述的帧存贮器的条形码的二维像顺次读取上述的条形码的信息的读取装置。
根据本发明的第5形式,可以提供具有以下诸装置的符号信息读取装置把由条带和空白构成的条形码作为二维像摄像的摄像装置;从由上述摄像装置得到的条形码的二维像中检查出由该条形码种类所规定的指定模式的至少二个部位的位置检出装置;由被上述位置检出装置检查出来的二个部位的位置检查条形码的斜率的斜率检出装置;以上述斜率检出装置的信息为基础,从由上述摄像装置获得的条形码的二维像顺次地读取上述条形码的信息的读取装置;从上述读取装置得到的条形码的信息出发,将之译解成原来的信息的译码装置;根据由上述读取装置得到的条形码信息,判定用上述译码装置是否可以将之译解成原来的信息的判定装置;在被上述判定装置判定为不可译解时,用指定角度修正由上述斜率检出装置检查出来的斜率,并从这个修正了的斜率为基础,使之在上述读取装置中能够顺次地读取条形码的信息的角度修正装置。
根据本发明的第6形式,可以提供具备如下诸装置的符号信息读取装置把由条带和空白构成的条形码作为二维像摄像的摄像装置;从由上述摄像装置获得的条形码的二维像,检查出由该条形码种类所规定的指定模式的至少二个部位的位置检出装置;根据被上述位置检出装置检查出来的二个部位的位置检查条形码的倾斜的斜率检出装置;以上述斜率检出装置的信息为基础,从由上述摄像装置获得的条形码的二维像顺次地读取条形码的信息的读取装置;把用上述读取装置读取的各行的数据变换成条带和空白的宽向信息之宽向信息变换装置(该宽向信息变换装置包括微分用上述读取手段读取的各行数据的微分装置;将用上述微分装置获得的各微分强度与阈值比较,通过用二次曲线连结超过该阈值的微分强度峰值的各位置和各自峰值的位置及其相邻两边的数据,求解各二次曲线的峰值位置的峰值位置算出装置;把由峰值位置算出装置算出来的邻接的各峰值位置间的差作为上述宽向信息输出的宽向信息输出装置);从由上述宽向信息输出装置得到的宽向信息译解成原来的信息的译码装置。
附图的简要说明

图1是表示依照本发明之一实施例的符号信息读取装置的构成图。
图2是作为堆积式条形码的例子表示PDF-417码体系的条形码标记的图。
图3是在假想的帧存贮器的像元排列上投影了PDF-417码体系的条形码标记图像的模式图。
图4是为说明依照本发明的一实施例的符号信息读取装置的概略的动作的流程图。
图5是说明图4中的前处理程序的流程图。
图6是说明图4中的图像读入程序的流程图。
图7是说明图4中的标记检出程序的流程图。
图8是表示在说明标记检出方法过程中当读入所提供的PDF-417码体系的条形码标记的图像时的帧存贮器的内容之图。
图9是表示在说明求解标记的斜率过程中读入所提供的PDF-417码体系的条形码标记的图像时的帧存贮器的内容之图。
图10是为说明图7中的开始/停止码检出程序的流程图。
图11A及图11B是表示为说明图10中的扫描和检出程序的相连的流程图的图。
图12是为说明图7中开始边缘位置检出程序的流程图。
图13是为说明图7中停止边缘位置检出程序的流程图。
图14是为说明求解图7中的标记的斜率的程序的流程图。
图15是为说明图4中手颤动检出程序的流程图。
图16是说明图15中的开始码确定程序的流程图。
图17是说明图15中的停止码确定程序的流程图。
图18是说明图4中的阈值决定程序的流程图。
图19是在说明阈值检出行过程中表示当读入所提供的PDF-417码体系的条形码标记的图像时的帧存贮器的内容之图。
图20是表示开始码的微分波形的图。
图21是说明图4中的行及列序号检出程序的流程图。
图22是在说明行序号及列序号的决定方法过程中表示读入所提供的PDF-417码体系的条形码标记的图像时的帧存贮器的内容之图。
图23A及图23B是表示说明图4中的扫描方程式决定程序的相连的流程图之图。
图24是表示在说明始点列及终点列的算出方法过程中读入所提供的PDF-417码体系的条形码标记的图像时的帧存贮器的内容之图。
图25是说明图4中的最适扫描程序的流程图。
图26是表示在说明最适扫描的方法过程中读入所提供的PDF-417码体系的条形码标记的图像时的帧存贮器的内容之图。
图27是说明图4中的跳越扫描程序的流程图。
图28A及图28B是表示说明图25及图27中的变换成宽向信息程序的相连的流程图之图。
图29是说明为进行宽向信息变换的峰值选择法则的图。
图30是表示为和算出峰值间的距离的二个峰值位置的图。
以下参照附图,说明本发明的一个实施例。
图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开始的。
标记部21是由存在于开始码22及停止码23的旁边的被称为行指示符21A,和用被夹在这些行指示符21A之间的记述着实际的数据的多数的数据列21B形成的标记阵列21C构成的。在行指示符21A上记载着标记的行方向、列方向及保密级等。因而,如果解读了这个行指示符21A的信息,就可以确定标记的信息尺寸等。
而且,该图2还表示着具有4×2标记阵列的条形码标记。
现在,假想在帧存贮器6的象元排列上投影了具有4×1标记阵列的PDF-417的标记图像的模式图如图3所示。而且同图中的众多网格不是表示一个象元,而是n×n个象元的大小。
在数据处理装置7中,根据以下将详细说明那样的算法,进行标记检出,读取标记信息,进行译码并把译码结果输出给没图示的主机装置等。
即图4是表示在这个数据处理装置7实行的算法之概要的流程图。而且,在本说明书中,流程图是按照编程语言C的记述格式书写的。
首先调用将在后面详细叙述那样的前处理的程序(步骤S1),设定变量INC0的参数(实际上是初始设定种种参数)。
然后,调用将在后面详细叙述那样的图像读取程序(步骤S2),把图像连续地装入帧存贮器6二个画面(Bank06A,Bank16B)。在此,所谓的连续地是指首先把一个画面的图像数据存入Bank06A,然后把另一画面的图像数据存入Bank16B。这时,为了在最初的读入程序发出之后把最新的帧的数据取入Bank06A,接着在该读入完成之后,再次发出读入程序把最新的帧的数据取入Bank16B,在二个画面的数据之间存在摄像的时间差(该时间差由(存入Bank06A的时间)+(0~1/30秒)构成)。
其次,调用将在后面详细叙述那样的标记检出程序(步骤S3),利用这个被存入的图像数据的Bank06A,检查标记存在与否,进而若标记存在则检出标记信息。
并且判断在上述步骤S3的标记检出处理的结果(步骤S4),在标记不存在时,再一次转移控制到上述的步骤S1并调用前处理程序。
另一方面,在标记存在时,调用将在后面详细叙述那样的手颤动检出程序(步骤S5),利用在上述步骤S2存入的图象数据的Bank16B进而推定手颤动的影响。这里的所谓手颤动是指在印刷着条形码标记2的印刷物装插在该读取装置时,由较高的频度产生的图像的颤动。
接着,判断上述步骤S5的手颤动检出结果(步骤S6),在发生手颤动的时候,再一次把控制转移到上述的步骤S1并调用前处理程序。
在不发生手颤动时,调用将在后面详细叙述的阈值决定程序(步骤S7),在后面叙述的步骤SB的最适扫描程序以及步骤SD的跳越扫描程序中,求解在为了从作为处理对象的行数据中抽出边缘间的宽向信息的处理时所利用的阈值(变数THRESHOLD)。
其次,调用行序号及列序号决定程序(步骤S8),读取标记2的行指示符21A,决定标记尺寸等。
并且判断在上述步骤S8的决定程序中标记的尺寸等是否被确定了(步骤S9),没被确定时,再一次转移控制到上述步骤S1并调用前处理程序。
另一方面,在标记尺寸等被决定的时候,调用将在后面详细叙述那样的扫描方程式决定程序(步骤SA),定义为全面扫描标记2所用的各种变数。
接着,调用将在后面详细叙述那样的最适扫描程序(步骤SB),利用在上述步骤SA被定义的各种变数,以最适的间隔全面扫描标记,读取标记信息。而且这里,所谓用语“最适扫描”,是指在标记无欠缺的场合用以最少的计算量的全部确定标记信息这样的最适的间隔进行的扫描的情况。
进而,判定用在上述步骤SB的最适扫描读取的信息是否可以译码(步骤SC),译码可能时,转移控制到步骤SF的译码处理部分。
另外,不能译码时,调用将在后面详细叙述那样的跳越扫描程序(步骤SD)。在该跳越扫描程序中,利用在上述步骤SA被定义的各种变数全面扫描标记,读取标记信息。
并且判断用在这个步骤SD读取的信息是否可以译码(步骤SE),可以译码时,转移控制到步骤SF的译码处理部分。
另外,不能译码的场合,再一次转移控制到上述步骤S1并高用前处理程序。
在步骤SF的译码处理中,译解在上述步骤SB的最适扫描程序或上述步骤SD的跳越扫描程序读取的信息,并把其译码结果输出到没图示的主机等。
以下,详细说明以上叙述的各种处理程序。
首先,参照图5的流程图,说明在上述步骤S1被调用后前处理程序。
即,首先判断变数INC0的值与作为予先规定的检出间隔的基准增量是否一样(步骤S11),一样时,再把变数INCD设定成附加了指定的修正增量的值(步骤S12)。不一样时再次设定成上述的基准场量(步骤S13)。由此,该变数INC0的值,以图4的概略流程图中大循环,按通过这个前处理程序的奇数回和偶数回次数变化。进而,图中的符号“==”表示是一样的意思,而符号“=”则表示“代入”。另外,变数INC0的值表示标记未检出时的检出间隔。
其次,参照图6的流程图,说明在上述步骤S2被调用的图像读入程序。
首先,把图像数据从二维摄像装置5取入帧存贮器6的Bank06A(步骤S21),然后,把图像数据从二维摄像装置存入帧存贮器6的Bank16B(步骤S22),由此完成连续地存入二画面的图像数据。
接着,参照图7的流程图及图8的标记投影像的图,说明在上述步骤S3被调用的标记检出程序。这个标记检出程序包括检查有无标记;以及检出标记的位置信息亦即求取与标记平行地把图像信息从帧存贮器6抽出的抽出范围(变数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最后发现的座标。
进而,判断座标变数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及b。另外,把Start-flagON(开),定义座标变数TOP以及BOTTOM。这里,座标变数a以及b分别表示标记的四角座标之一。
其次,判断座标变数h是否已被定义(步骤S37),若没有被定义,则进入步骤S39。但是,在座标变数h被定义了的时候,调用将在后面详细叙述那样的停止边缘位置检出程序(步骤S38),进行停止边缘位置的检出。这个停止边缘的检出由座标变数f及h(若座标变数h已被定义则座标变数f当然也已被定义了)定义如图8所示那样的座标变数j及k,进而定义座标变数b及c。另外,把Stop-flagON(开),定义座标变数TOP以及BOTTOM。这里座标变数b及c分别表示标记的四角座标之一。
接着,判断Start-flag,Stop-flag是否同时ON(步骤S39),在二者均没有ON时,进入步骤S3E。而且此处,图中的符号“&&”表示逻辑积。
当两个标记检出标识同时ON时,将这些Start-flag、Stop-flag双方一度复位之后(步骤S3A),比较线段(a-d)和(c-b)(步骤S3B)、并在开始码22和停止码23中将其线段长者作为处理对象来选择。这是因为,在通常使用时,由于单方的码对于另一方而变短的最大的理由是从画面溢出的场合,所以选择长的一方为处理基准这样的做法。
而且在线段(a-d)方比线段(b-c)还短时,分别把座标变数b的值代入座标变数TOP,再把座标变数c的值代入座标变数BOTTOM,从而定义为决定标记信息的抽出范围所需的数据,进而选择Stop-flag为ON(步骤S3C)。
相反地,在线段(a-d)的长度为线段(b-c)以上时,则分别把座标变数a的值代入座标变数TOP,再把座标变数d的值代入座标变数BOTTOM并定义为决定标记信息的抽出范围所需的数据,进而选择Start-flag为ON(步骤S3D)。
并且调用求解标记的斜率的程序(步骤S3E),由这些座标变数TOP以及BOTTOM求解标记的斜率(变数SLOPE)、与这些获得了的变数同时携带有标记的信息返回。
然后,参照图10的流程图,说明在如上所述的标记检出程序中的步骤S33中被调用的开始/停止码检出程序。这个开始/停止码检出程序是如前所述的那样的检出座标变数e及g,或者f及h的至少一方的程序。
即,首先把标记未检出时的检出间隔变量INC0的值代入标记检出间隔用变数INIT(步骤S331)。其次,调用将在后面详细叙述那样的扫描以及检出(行)程序(步骤S332),在行方向上扫描帧存贮器6的Bank06A的图像数据,进行开始/停止码的检出。这里,所谓行方向的扫描是如在图8中作为行扫描所示的那样向帧存贮器6的长的方向的扫描。
并且,判断上述扫描和检出(行)程序的结果,开始码22或停止码23是否被检查出来了,即判断标记是否已被检出(步骤S333)、在标记被检出的场合,携带具有标记的检出的信息返回。
另一方面,在标记没有被检出的场合,把标记未检出时的检出间隔变量INC0的值代入标记检出间隔用变数INIT之后(步骤S334),调用扫描和检出(列)程序(步骤S332),在列方向上扫描帧存贮器6的Bank06A的图像数据,进行开始/停止码的检出。这里,所谓的列方向的扫描是指如图8中作为列扫描所表示的那样,向帧存贮器6的短的方向的扫描。
并且,判断上述扫描和检出(列)程序的结果,开始码22或停止码23是否已被检查出来,即标记是否被检查出来(步骤S335)、在标记被检查出来时,携带具有标记的检出的信息返回。
但是在标记这次也没有被检查出来时,判断其原因是否是由角度错误造成的(步骤S336),这个标记的角度错误参照在上述步骤S332被调用的扫描和检出程序的返回值进行。即用上述扫描和检出程序,逐次检查是否构成角度错误,如果发生错误,则对返回值设定角度错误标识和标记没检出的标识并在此中断处理返回。在该角度错误的判断的场合,因为此后再次处理的只是行方向,所以通过使用这个步骤S336判断扫描了列方向的返回值,进行是因角度错误做了没标记的检出,还是因没能检查出标记才产生这种结果的判断。
在用该步骤S336判断为不是角度错误的时候,携带无标记的检出的信息返回。
另一方面,在被判断为角度错误的时候,接着,把标记检出时的标记检出间隔INC1代入标记检出间隔用变数INIT(步骤S337)。这里,检出间隔变数INC0和INC1的大小,基本上可以期望二者的最小公倍数超越画面范围,例如INC0=23,INC1=17。
此后,再一次调用扫描和检出(行)程序(步骤S332),在行方向扫描帧存贮器6的Bank06A的图像数据,进行开始/停止码的检出。
进而,判断开始/停止码即标记是否已被检出(步骤S338),在被检查出来的场合,携带有标记检出的信息返回,在标记没有被检查出来的场合则携带无标记的检出的信息返回。
这样,在本开始/停止码检出程序中,其检出,首先由向行方向的扫描进行,用此如果不能求解的话,则由列方向的扫描求解。用此如果也不能求解,则判断是否是角度错误(即标记过于倾斜的情况),如果是错误,则改变标记检出间隔再次做行方向的扫描进行再次检出看看,若这样还不能检查出来的话,则作无标记检出处理。
进而,在角度错误时之所以只做行方向扫描是因为条形码标记2,一般地情况是象用行扫描中所见那样地,列方向作为帧存贮器6的长方向(横方向)那样地放置,从而有如果利用人的因素则可省略列方向这样的理由。当然,做列方向扫描也可以,但此时执行程序则会下降。
这里,参照图11A及图11B中所示的相连的流程图说明在上述步骤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表示实施检出(扫描)处理的行位置。
该初始设定之后,判断所做的是行扫描还是列扫描(步骤S3323),如果是行扫描则读入第n行的图像数据(步骤S3324),或者若是列扫描则读入第n列的图像数据(步骤S3325)。
其次,判断上述被读入的图像数据上是否存在开始码22(步骤S3326),如果不存在则进入步骤S332A。在开始码22存在时,判断这个开始码22是否为开始时被检出的内容(步骤S3327)。如果是开始所检出的内容,则把其检出座标存入座标变数e(步骤S3328)。另外,在不是开始所检出的内容时,则把其检出座标存入座标变数g(步骤S3329)。这里,是否是最初被检查出来的东西,看座标变数e是否被存入值来判断。
下面同样地,判断上述读入的图像数据上是否存在停止码23(步骤S332A),如果不存在则进入步骤S332E。而当停止码23存在时,则判断这个停止码23是否为开始时被检出的内容(步骤S332B)。是开始所检出的内容时,把其检出座标存入座标变量f(步骤S332C)。另外,若不是开始所检出的内容时,则把其检出座标存入座标变数h(步骤S332D)。这里,是在最初被检查出来的内容与否,看座标变数f是否被存入值来判断。
接着,判断座标变数e或者f是否已被定义(存入)(步骤S332E),若已被定义则进入步骤S332F,若没被定义则进入步骤S332G。亦即,若被定义了,则接着判断上述扫描间隔scan-inc是不是标记检出时的检出间隔变数INC1,或者判断座标变数g,h是否都被定义完了(步骤S332F)。在不是INC1的场合或g,h都定义完了的场合,将扫描间隔scan-inc设成上述变数INC1的值(步骤S332H),在与之相反的场合,则把scan-inc设成I(步骤S332I)。另外,在上述步骤S332E座标变数e或f被判断成没被定义的场合,接着将判断上述扫描间隔scan-inc是否是检出间隔用变数INIT(步骤S332G)。是INIT时,把扫描间隔scan-inc设成I(步骤S332J),而不是这样时,则把scan-inc设成INIT的值(步骤S332K)。
如上这样,从上述步骤S332E到步骤S332K记述了使数据读入间隔变化的手法。这个动作在座标变数e,f没被定义过程中,扫描间隔scan-inc交替地在检出间隔用变数INIT和1之间取值。在座标变数e,f已被定义的场合,直到座标变数g,h都被定义为止,扫描间隔scan-inc交替地在标记检出时的检出间隔变数INC1和1之间取值。另外,当座标变数e,f,g,h都已被定义时,扫描间隔scan-inc就成为上述变数INC1。
即,扫描间隔从检出处理的开始到开始/停止码的某一方被检出为止,交替地在INIT(=INCO,如23)和1之间取值,从开始码/停止码的某一方被检出后到画面的最后为止,扫描间隔交替地在INC1(如17)和1之间取值。之所以要这样地使检出行间隔做种种变化,是根据以下理由即现在如果没检出行间隔一定,则有存在用标记的最小线宽,摄像倍率和二维摄像元件间距所决定的构成不能检出的标记角度的情况。为极力避免此事,才使从检出开始到开始/停止码的某一方被检出为止之间的间隔发生变化。即使在这种场合,根据条件,尽管标记正在被摄着像却仍然有找不到(丢失)标记的现象。因此便有了第一次丢失是没有办法但在第二次一定能检查出来,这样使其增量INIT(=INCO)变化的方法。
另外,在座标变数e,f,g,h都被定义了的时候,之所以把扫描间隔scan-inc设成INC1,是根据尽管一次求完全部的座标后不求此后其他的新的g,h也可以,但还有与之相比使该处理高速地终了更为重要这样的理由。还有,全部的座标求出后,如把增量设有INC1,则通常接着求新的g,h。
其次,使参数n的值只增加scan-inc的值来更新n(步骤S332L),决定下次读入行或列数。并且因帧存贮器6的纵和横的尺寸是已知的,所以根据这个尺寸判断上述被更新了的n是否是画面外(步骤S332M),是在画面内时,则把控制转移到上述步骤S3323。
若是画面外即扫描终了,则接着判断座标变数g是否已被定义(步骤S332N),在没被定义时转移控制到步骤S332S。
在该座标变数g被定义的场合,接着,判断是行扫描还是列扫描(步骤S3320)。
进而,在行扫描的场合,把座标变数g的x座标的值与座标变数e的x座标的值之差用座标变数g的y座标的值与座标变数e的y座标的值之差除,并取其结果值的绝对值(把该值记成图中“ABS”),把这个绝对值代入表示斜率的绝对值的变数delta(步骤S332P)。
另外,在列扫描的场合,把座标变数g的y座标的值与座标变数e的y座标的值之差用座标变数g的x座标的值与座标变数e的x座标的值之差除,取其结果值的绝对值,并把该绝对值代入变数delta(步骤S332Q)。
进而,通过判断所获得的斜率的绝对值delta比1大还是小(步骤S332R),判断是否是角度错误。在角度错误的场合,携带无标记检出以及角度错误的信息返回。
在不是角度错误的场合或者在上述步骤S332N座标变数g被判断为没被定义的场合,接着判断座标变数h是否被定义了(步骤S332S),在没被定义的场合转移控制到步骤S332X。
在该座标变数h被定义的场合,接着判断是行扫描还是列扫描(步骤S332T)。
而且,在行扫描的场合,把座标变数h的x座标的值与座标变数f的x的座标的值之差用座标变数h的y座标的值与座标变数f的y座标的值之差除,取其结果值的绝对值并把该绝对值代入斜率的绝对值delta(步骤S332U)。
另外在列扫描的场合,把座标变数h的y座标的值与座标变数f的y座标的值之差用座标变数h的x座标的值与座标变数f的x座标的值之差除,取其结果值的绝对值并把该绝对值代入delta(步骤S332U)。
进而通过判断所获得的斜率的绝对值delta比1大还是比1小(步骤S332W),判断是否是角度错误。当是角度错误时,携带无标记检出及角度错误的信息返回。
而当不是角度错误的场合或在上述步骤S332S被判断成座标变数h没被定义的场合,接着判断座标变数g或h是否已被定义(步骤S332X),在已被定义时,携带有标记的检出的信息返回,否则在没被定义的场合携带无标记的检出的信息返回。
这样,在上述步骤S332N直至S332Q,或在步骤S332S直至S332V,通过求开始/停止码的斜率求解标记全体的斜率,并在步骤S332R或S332W,判断其斜率的绝对值delta是否超过1,当超过1时以角度诸误当作无标记检出返回控制。另外,当其斜率的绝对值delta不超过1时,判断在步骤S332X座标变数g或h是否被定义,被定义时认为标记已被检出返回控制,而没被定义时则作为无标记检出返回控制。
而之所以在上述步骤S332R以及S332W判断角度错误是根据以下的理由。即在本来应该检出的抽出方向发生“丢失”而却在别的地方被检出是极少发生的。因为在该场合,由于在其后的处理中发生错误,故不能进行这样的检出所致。另外,之所以设角度错误的基准为1,是因为在标记旋转角45°时delta是1的缘故。
其次,参照图12的流程图说明在上述那样的标记检出程序中的步骤36中被调用的开始边缘位置检出程序。
即,首先,在开始检出标识Stant-flagON之后(步骤S361),定义平行于线段e-g的直线的方程式,例如求线段e-g的方程式y=ax+b(步骤S362)。然后,如该直线穿越开始大条带22A这样地,定义截距b(步骤S363)。开始码22的构造,举例说,象由8个条带构成开始大条带22A、3对的白条带和黑条带及3条白条带总计共17个条带那样的构成,摄像该构成的结果即成为N个象元。另外,用方程式y=ax+b所表示的直线,通过使截距b变化而平行移动的作法已为众所周知。因此,为了要得到穿越大条带22A的直线,设定使上述线段e-g移动到{(17-8/2)/17}×N象元部分左侧这样的截距b是较好的作法。
如果这样做获得了穿越开始大条带22A的直线的话,其次,把该直线和定义画面的方程式的交点分别设在A,A’(参照图8)(步骤S364)。
并且,从这个线A-A’的中点向点A顺序地观察数据下去(步骤S365),以检查边缘存在与否(步骤S366)。这个检查可以用观察亮度变化的强度比较,微分法,二次微分法等进行。如果这样做检查出了边缘,则把其检出座标存入座标变数i(步骤S367)。亦即设检出座标为点i。
而后,从上述线A-A’的中点这次向点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表示的点拉下垂线,并把其交点的座标存入座标变数d(步骤S36C)。亦即,求通过点m的与线A-A’正交的直线方程式,并求该直线与通过点e,g的直线的交点,及设该交点为点d。
并且在把这样做所求得的座标变数a的值存入座标变数TOP,及把座标变数d的值存入座标变数BOTTOM之后(步骤S36D),把控制返回原先的程序。
另外,在上述那样的标记检出程序中的步骤S38中被调用的停止边缘位置检出程序也以与这个开始边缘位置检出程序大致同样的作法进行。图13是这个停止边缘位置检出程序的流程图。
即,首先,停止检出标识Stop-flagON了之后(步骤S381),定义平行于线段f-h的直线的方程式,例如求线段f-h的方程式y=ax+b(步骤S382)。然后如该直线穿越停止大条带23A这样地定义截距6(步骤S383)。如果这样做可以获得穿越停止大条带23A的直线,而后就分别把该直线和定义画面的方程式的交点设为B,B’(参照图8)(步骤S384)。
并且,从该线B-B’的中点向点B顺序地把数据观察下去(步骤S385)、检查边缘存在与否(步骤S386)。这样一来,如果边缘被检查出来,则把其检出座标存入座标变数j(步骤S387),亦即,把检出座标设为点j。
其次,从该线B-B’的中点这次向点B’顺序地把数据观察下去(步骤S388),检查边缘存在与否(步骤S389)。这样一来,若边缘被检查出来,则把其检出座标存入座标变数k(步骤S38A)。亦即,把检出座标设为点K。
进而,在通过用座标变数f,h表示的点f,h的直线上从用座标变数j表示的点j拉下垂线,并把其交点的座标存入座标变数b(步骤S38B)。亦即求通过点j的和直线B-B’正交的直线方程式,并求其与通过点f,h的直线的交点及把其交点设为点b。
同样地,在通过用座标变数f,h表示的点f,h的直线上从用座标变数k表示的点k拉下垂线,并把其交点的座标存入座标变数c(步骤S38C)。即,求通过点k的和线B-B’正交的直线方程式,并求其与通过点f,h的直线的交点及把该交点设为点c。
并且在分别把这样求得的座标变数b的值存入座标变数TOP及把座标变数c的值存入座标数BOTTOM之后(步骤S38D),把控制返回原先的程序。
然后,参照图14的流程图及为求图9中行扫描时标记的斜率的说明图,说明在上述这样的标记检出程序中的步骤S3E被调用的求标记的斜率的程序。而且在图9中还表示着开始码22用行扫描被选择为基准时的例子。
即,首先判断是否是行扫描(步骤S3E1),如果是行扫描则把控制转向步骤S3E2,如果是列扫描则把控制转向S3E4。
在行扫描的场合,首先用从座标变数BOTTOM的y座标的值减去了座标变数TOP的y座标的值的结果值来除座标变数BOTTOM的x座标的值,再用从座标变数BOTTOM的y座标的值减去了座标变数TOP的y座标的值的结果值来除座标变数TOP的x座标的值;并把这二个商之差存入斜率变数SLOPE(步骤S3E2)。其次,用从座标变数BOTTOM的y座标减去了座标变数TOP的y座标的值的结果值来除把座标变数BOTTOM的y座标与座标变数TOP的x座标相乘的结果,再用从座标变数BOTTOM的y座标的值减去了座标变数TOP的y座标的值的结果值来除座标变数BOTTOM的x座标与座标变数TOP的y座标相乘的结果,并把这二个商之差存入截距变数intersect(步骤S3E3)。而且图中的星花*表示乘法符号“X”的意思。
另外,在列扫描的场合,首先用从座标变数BOTTOM的x座标的值减去了座标变数TOP的x座标的值的结果值来除座标变数BOTTOM的y座标的值,再用从座标变数BOTTOM的x座标的值减去了座标变数TOP的x座标的值的结果值来除座标变数TOP的y座标的值,并把这二个商之差存入斜率变数SLOPE(步骤S3E4)。接着,用从座标变数BOTTOM的x座标的值减去了座标变数TOP的x座标的值的结果值来除座标变数BOTTOM的x座标与座标变数TOP的y座标的相乘的结果,以及用从座标变数BOTTOM的x座标的值减去了座标变数TOP的x座标的值的结果值来除座标变数BOTTOM的y座标与座标变数TOP的x座标相乘的结果,并把这二个商之差存入截距变数intersect(步骤S3E5)。
下面,参照图15的流程图说明在上述的步骤S5被调用的手颤检出程序。
即,这次把处理对象图象设为帧存贮器6的Bank16B(步骤S51),做把手颤检出用标识verifyOFF的初始化(步骤S52)。并且判断开始检出标识Start-flag是ON与否(步骤S53),如果是ON则调用将在后面详细叙述那样的开始校验程序(步骤S54),并对开始码22进行校验。另外如果是OFF,则调用将在后面详细叙述那样的停止码校验程序(步骤S55),并对停止码23进行校验。而且通过判断手颤检出用标识verify是ON与否(步骤S56),判断这个校验结果。对此结果,若手颤检出标识verify是ON,则携带无手颤的信息返回,而若其是OFF,则携带有手颤的信息返回。
然后,参照图16的流程图说明在上述那样的手颤检出程序中的步骤S54中被调用的开始码校验程序。这里图中加’表示的座标,表示在成像1(Bank16B)检出的位置。即用在上记步骤S3中被调用的标记检出程序求座标e。这个座标是最初找出的在成像O(Bank06A)检查出来的座标。另一方面,座标e’是用同发现了上述座标e一样的条件(扫描方向或扫描位置)扫描成像1(Bank16B)所求得的座标。亦即,在成像0,成像1之间标记没有移动的时候,这些座标e,e’应该成为同一座标。这里,如果设定手颤误差范围AREA的值为2,则在图像间座标e分别在x,y方向上是±1个象元以内的偏离,从而判定没有图像的移动。
亦即,首先判断是否为行扫描(步骤S541),在行扫描的场合,进入步骤S542,在列扫描的场合,则把控制转向步骤S548。
在行扫描的场合,首先用在Bank06A检查出来的座标变数e的y座标的值所表示的行的数据从Bank16B读入(步骤S542),判断开始码22被检出来与否(步骤S543)。如果没有被检出来,则携带手颤检出标识verfy=OFF的信息返向原先的程序。在开始码22被检查出来的场合,把其检出座标存入座标变数e’之后(步骤S544),这次,把用在Bank06A检出的座标变数g的y座标的值所表示的行的数据从Bank16B读入(步骤S545),并判断开始码22被检查出来与否(步骤S546)。如果没有被检查出来,则携带手颤检出标识verify=OFF的信息返回原先的程序。而当开始码22被检查出来时,把其检出座标存入座标变数g’之后(步骤S547),进入步骤S54E。
另一方面,在列扫描的场合,首先把用在Bank06A检出的座标变数e的x座标的值的表示的行的数据从Bank16B读入(步骤S548),判断开始码22被检查出来与否(步骤S549)。如果没有被检出,则携带手颤检出标识verify=OFF的信息返回原先的程序。当开始码22被检查出来时,把其检出座标存入座标变数e’之后(步骤S54A),这次,把用在Bank06A检查出来的座标变数g的x座标的值所表示的行的数据从Bank16B读入(步骤S54B),判断开始码22被检出与否(步骤S54C)。如果没有被检查出来,则携带手颤检出标识verify=OFF的信息返回原先的程序。而当开始码22被检查出来时,则把其检出座标存入座标变数g’(步骤S54D)。
而且,取座标变数e和e’的差值的绝对值以及取座标变数g和g’的差值的绝对值,判断二者的绝对值是否是在手颤误差范围AREA之内(步骤S54E)。若不是在手颤误差范围AREA之内,则携带手颤检出标识verify=OFF的信息返回原先的程序。
这样,在上述步骤S541到步骤S54E,检查判断相对于在Bank06A检出的座标e,g,在Bank16B时是否是在允许误差以内。
这样一来,如果被判断为在允许误差以内,接着则定义平行于线段e’-g’的直线的方程式,例如,求线段e’-g’的方程式y=ax+b(步骤S54F)。而后如该直线穿越开始大条带22A这样地定义截距b(步骤S54G)。这样做若可以得到穿越开始大条带22A的直线,随之把该直线与定义画面的方程式的交点分别设成A,A’(步骤S54H)。
并且,从这个直线A-A’的中点向点A顺序地把数据观察下去(步骤S54I)、检查边缘存在与否(步骤S54J)。这样做若边缘被检查出来,就把其检出座标存入座标变数i’(步骤S54K)。亦即将检出座标设成点i’。
接着,这次从直线A-A’的中点向点A’顺序地把数据观察下去(步骤S54L),检查边缘存在与否(步骤S54M)。这样如果边缘被检查出来,就把其检出座标存入座标变数m’(步骤S54N),即将检出座标设成点m’。
进而,取座标变数i和i’的差值的绝对值及座标变数m和m’的差值的绝对值,判断二者的绝对值是否是在手颤误差范围AREA之内(步骤S540)。如果不是在手颤误差范围AREA之内,则携带手颤检出标识verify=OFF的信息返回原先的程序。另外,如果是在手颤误差范围AREA之内,则携带手颤检出标识verify=ON的信息返回原先的程序。
这样地,在上述步骤S54F到步骤S540,检出判断相对于在Bank06A检出的座标i,m,在Bank16B时是否是在允许误差以内。并且,在全部属于允许范围时,设定手颤检出标识verify为ON并返回控制,而当即使有一处是允许范围外时,也将手颤检出标识verify设成OFF并返回控制。
其次,参照图17的流程图,说明在如上述那样的手颤检出程序中的步骤S55中被调用的停止码校验程序。该停止码校验程序和上述开发始码校验程序大致上是一样的。
即,首先判断是否是行扫描(步骤S551),在行扫描时进入步骤S552,在列扫描时则把控制转移到步骤S558。
在行扫描的场合,首先把用在Bank06A检出的座标变数f的y座标的值表示的行的数据从Bank16B读入(步骤S552),判断停止码23是否被检查出来(步骤S553)。如果没有被检查出来,就携带手颤检出标识verify=OFF的信息返回原先的程序。在停止码23被检查出来的场合,把其检出座标存入座标变数f’之后(步骤S554),这次把用在Bank06A检出的座标变数h的y座标的值表示的行的数据从Bank16B读入(步骤S555),判断停止码23被检出与否(步骤S556)。如果没有被检出,就携带手颤检出标识verify=OFF的信息返回原先的程序。而在停止码23被检查出来的场合,则在把其检出座标存入座标变数h’之后(步骤S557),进入步骤S55E。
另一方面,在列扫描的场合,首先把用在Bank06A检出的座标变数f的x座标的值表示的行的数据从Bank16B读入(步骤S558)、判断停止码23是否被检出(步骤S559)。如果是没有被检出,就携带手颤检出标识verify=OFF的信息返回原先的程序。而在停止码23被检出的场合,在将其检出座标存入座标变数f’之后(步骤S55A),这次,把用在Bank06A检出的座标变数h的x座标的值表示的行的数据从Bank16B读入(步骤S55B)、判断停止码23是否被检出(步骤S55C)。如果是没有被检出,就携带手颤检出标识verify=OFF的信息返回原先的程序。而在停止码23被检出的场合,则把其检出座标存入座标变数h’(步骤S55D)。
并且,取座标变数f和f’的差值的绝对值以及座标变数h和h’的差值的绝对值,并判断二者的绝对值是否是在手颤误差范围AREA内(步骤S55E)。如果不是在手颤误差AREA内,就携带手颤检出标识verify=OFF的信息返回原先的程序。
这样地,如果被判断为在允许误差内,接着,定义平行于线段f’-h’的直线的方程式,例如求线段f’-h’的方程式y=ax+b(步骤S55F)。而后如这个直线穿越停止大条带23这样地定义截距6(步骤S55G)。如果这样做获得了穿越停止大条带23A的直线,接着就把该直线和定义画面的方程式的交点分别设成B,B’(步骤S55H)。
而且,从这个直线B-B’的中点向点B顺序地把数据观察下去(步骤S55I)、检查边缘是否存在(步骤S55J)。如果这样做检查出了边缘,就把其检出座标存入座标变数j’(步骤S55K)。亦即设检出座标为点j’。
而后,这次是从上述直线B-B’的中点向点B’顺序地把数据看下去(步骤S55L),检查边缘存在与否(步骤S55M)。如果这样检出了边缘,就把其检出座标存入座标变数k’(步骤S55N)。亦即设检出座标为点k’。
进而,取座标变数j和j’的差值的绝对值及座标变数k和k’的差值的绝对值,并判断二者的绝对值是否是在手颤误差范围AREA内(步骤S550)。如果不在手颤误差范围AREA之内,就携带手颤检出标识verify=OFF的信息返回原先的程序。另外,如果是在手颤误差范围内,则携带手颤检出标识verify=ON的信息返回原先的程序。
下面,参照图18的流程图,说明在上述步骤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的处理。
即,在行扫描的场合,把用座标变数P的y的座标的值所表示的行,也就是把图19中所示那样的数据读入行的数据从帧存贮器6的Bank06A读入(步骤S75),把开始码22或停止码23的结尾的x座标设为点q的x座标(步骤S76)。进而,微分从点p到点q的数据(步骤S77)。由此,例如在图19的数据读入行的场合,就是求如图20所示那样的开始码22的微分波形。并且把这个微分数据的第3位的峰值的绝对值设为变数MAX(步骤S78)。
另一方面,在列扫描时,把用座标变数P的x座标的值表示的行的数据从帧存贮器6的Bank06A读入(步骤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表示的是用行扫描选择开始码22为基准时的例子。
即,首先设为读取行指示符信息的基准座标的始点,把标记的顶座标TOP的值存入座标变数WORK(步骤S81)。然后,通过这个座标变数WORK,定义具有用标记的斜率变数SLOPE表示的斜率的直线1(步骤S82)、及定义该直线1过画面框的点W1,W2(步骤S83)。并且读入线段W1-W2上的图像数据(步骤S84),读取被含于其中的行指示符信息(步骤S85)。
在此,行指示符信息的读取,例如象下面这样进行。即,从在上述步骤S84被读入的对象行上的图像数据、也就是白黑的象素值检出边缘并将之变换成宽向信息。而且从该宽向信息检出开始码22,因为已知该开始码22的下一个码是行指示符21A,故也将之读入。另外,同样地检出停止码23,因为也已知该停止码23的前面的码是行指示符21A,故也将之读入。这样一来,如果行指示符21A被读取了,则将之与没有图示的条形码表比较,把一致的部分变换成码,也就是行数,列数,保密级等信息。这里,向宽向信息的变换有各种各样的方法,举例言之,可以通过调用在后边叙述那样的向宽向信息变换的变换程序来进行。
接着,检查行指示符信息确定了与否(步骤S86),若已确定则把控制转移到步骤S8E。如果没有确定,则把控制转移到步骤S87。这里所谓确定,是指若干次地读入行指示符21A,使信息的可靠性充分提高的情况。例如,如果读了10次被写于行指示符21A上的信息(行数,列数,保密级),即10次都获得了一样信息的场合,既认为是被确定了。
在行指示符信息没有确定的时候,检查接着是否是行扫描(步骤S87),是行扫描时把控制转移到步骤S88,而是列扫描时则把控制转移到步骤S8B。
即,在行扫描时,把所定的增量L-INC加给座标变数WORK的y座标的值,并把其结果作为新的座标变数WORK的y座标值代入(步骤S88)。另外,在标记的斜率变数SLOPE的值上乘以座标变数WORK的y座标的值、并在其结果上加标记的截距变数interseat,然后把其结果作为新的座标变数WORK的x座标值代入(步骤S89)。这样重新地把为扫描所用的基准座标再设定成座标变数WORK。并且判断这个被再设定的座标变数WORK的y座标值是否超过标记的底座标变数BOTTOM的y座标值,也就是判断是否在标记区域内(步骤S8A)、如果是标记区域内,则从上述步骤S82开始重复处理,如果是标记区域外,则携带阵列未定义的信息返回原先的程序。
列扫描的时候也同样地,把指定的增量L-INC加给座标变数WORK的x座标的值,并把其结果作为新的座标变数WORK的x座标值代入(步骤S8B)。另外,在标记的斜率变数SLOPE的值上乘以座标变数WORK的x座标的值,再把标记的截距变数intersect加给这个结果,并把其结果作为新的座标变数WORK的y座标值代入(步骤S8C)。这样重新把为扫描所用的基准座标再设定成座标变数WORK,并判断这个被再设定的座标变数WORK的y座标值是否超过标记的底座标变数BOTTOM的y座标值,也就是判断是否是在标记区域内(步骤S8D)。而且,如果是在标记区域内就从上述步骤S82开始重复处理,而当在标记区域外的场合则携带阵列未定义的信息返回原先的程序。
另一方面,在上述步骤S86,当判断了已确定行指示符21A的时候,从行指示符信息所获得的标记的行数被存入标记的行数变数ROW-NUMBER(步骤S8E)。进而,从行指示符信息抽出标记的列数,并被存入标记的列数变数COLOMN-NUMBER(步骤S8F)。此后,携带阵列已被定义的信息把控制返向原洗的程序。
其次,参照图23A及图23B的相连的流程图以及图24的向帧存贮器的投影象的图,说明在上述步骤SA被调用的扫描方程式决定程序。而且图24表示的是在行扫描中开始码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)。
接着,再一次判断是行扫描还是列扫描(步骤S46),在行扫描的场合,在标记的顶座标变数TOP的y座标值上加上变数counter的值、并把其结果作为基准座标变数WORK的y座标值代入(步骤SA7)。另外,在标记的斜率变数SLOPE的值上乘以基准座标变数WORK的y座标的值,并在其结果上加上标记的截距变数intersect、再把这个结果作为新的基准座标变数WORK的x座标值代入(步骤SA8)。就这样,伴随着变数counter值的增加再设定基准座标变数WORK。
列扫描的场合也同样,在标记的顶座标变数TOP的x座标值上加上变数counter的值,并把其结果作为基准座标变数WORK的x座标值代入(步骤SA9)。另外,在标记的斜率变数SLOPE上乘以基准座标变数WORK的x座标的值,并在该结果上加上标记的截距变数intersect,再把这个结果作为新的基准座标变数WORK的y座标值代入(步骤SAA)。
其次,通过这个被再设定的座标变数WORK,定义具有用标记的斜率变数SLOPE表示的斜率的直线1(步骤SAB),求这个直线1与画面框交叉的2点,并把这二点分别存入座标变数的排列DIN-POINT-P以及DIM-POINT-Q的counter序号(表示变数counter的值的排列的序号)(步骤SAC)。
此后,给变数counter值以增量(步骤SAD),检查其结果的被再设定的变数counter值是否达到了必要数即变数counter-end(步骤SAE)。没有达到必要数时,返回控制到上述步骤SA6,达到了必要数时,转移控制到步骤SAF。通过以上的动作,可以定义顺序扫描标记时的始点和终点的编组。
其次,再次把变数counter初始化为0(步骤SAF)。并且,通过在标记的斜率变数SLOPE的值上乘以变数counter值,用被计算的标记的斜率SLOPE的位置,计算增加量,并把这个计算结果存入变数的二维排列LINE-INC[O]的指定的位置(用变数counter表示的位置)(步骤SAG)。另外,通过在标记的斜率变数SLOPE上加上预先规定好的斜率修正量dt和乘以变数counter值,用在被计算的标记的斜率SLOPE上加上了予先规定好的斜率修正量dt的量的位置计算增加量,并把这个计算结果存入变数的二维排列LINE-INC[O]的指定的位置(步骤SAH)。进而,通过在标记的斜率变数SLOPE的值和上述斜率修正量dt的差上乘以变数counter值,用在被计算的标记的斜率SLOPE减去斜率修正量dt的位置计算增加量,并把这个计算结果存入变数的二维排列LINE-INC[2]的指定的位置(步骤SAI)。
此后,把变数counter增量之后(步骤SAI),检查这个被再设定的变数counter是否达到了排列的最大尺寸常数MAX-NUM(步骤SAK)。没有达到时,转移控制到上述步骤SAG,达到了时,则将控制返回原先的程序。
利用从这个步骤SAF到步骤SAK的循环,可以获得读入一行标记信息时的三种类别的斜率模式。
进而,上述排列的最大尺寸常数MAX-NUM是表示在程序编制时规定的变数的尺寸的量,例如,若假定帧存贮器6的尺寸是640×480象元的话,取1000左右即可。
下面,参照图25的流程图及图26的向帧存贮器的投影像的图,说明在上述步骤S8被调用的最适扫描程序。这里,图26所表示的是用行扫描选择了开始码22为基准时的例子。另外,为了简化说明,只说明关于用行扫描的情况。因此,在不是行扫描的时候,如后述那样的步骤SB2的处理成为步骤SB3,再则步骤SB7的处理成为步骤SB8。
即,在行扫描的场合(步骤SB1),计算标记的底座标变数BOTTOM的y座标值和标记的顶座标变数TOP的y座标值的差,也就是标记的y方向的象素数,并把其计算结果存入变数end(步骤SB2)。其次,通过把这个变数end的值用标记的行数(变数ROW-NUMBER的内容)除,来计算如图26中所示那样地为只一次扫描各行的中心所用的间隔,并将之存入变数inc(步骤SB4)。并且,通过用2除这个间隔变数inc,计算为扫描中心所用的初始偏移,并将之设为变数counter的初始值(步骤SB5)。
其次,在是行扫描的场合(步骤SB6),从上述座标变数的配列DIM-POINT-P,DIM-POINT-Q求现在的变数counter值中扫描始点及终点,以x方向增量为1且y方向增量为上述斜率增量配列LINE-INC[O]从帧存贮器6的Bank06A取出一行图像数据,并将之取入存到缓冲器配列scan-line,以及把其数据的个数存入变数num(步骤SB7)。
并且,调用变换成后面将详细叙述那样的宽向信息的变换程序(步骤SB9),把这个取出的数据变换成宽向信息。其次,以这个宽向信息为基础,把与没有图示的条形码表一致的部分变换成码,并保存其信息(步骤SBA)。
此后,给变数counter以增量,即用上述间隔变数inc的值再设定(步骤SBB),检查这个被再设定的变数countre值是否超过上述变数end,也就是标记范围(步骤SBC)。不超过时,转移控制到上述步骤SB6,超过时则转移到下一步骤SBD。即检查被保存的码信息是否可以将标记所记载的信息完全地译解(步骤SBD),可以译解时,携带可以译码的信息,而不能译解时携带不能译码的信息将控制返回原先的程序。
其次,说明在上述步骤SD被调用的跳越扫描程序。这个跳越扫描程序,除以下诸点外,与上述最适扫描大致一样。
1、上述最适扫描时,对标记的一行只进行一次的扫描,但跳越扫描时,在译码条件没被满足的场合,则是扫描标记区域的全部。也就是把全标记信息设为A码,其中被确定为可靠性高的码的量则设为B,则A-B就为不能被确定的码的量。这个数低于用保密级所定义的可以修复的量,若修复了之后检查是妥善的话,则满足译码条件。
2、进一步,跳越扫描的时候,在取入图像的一行时则连附加了斜率修正量的2个模式也同时做扫描。
以下,参照图27的流程图,说明这个跳越扫描程序。而且为了简化说明,只对关于行扫描的情况说明。因此,在不是行扫描的时候,后述那样的步骤SD2的处理就成为步骤SD3,以及步骤SD7的处理就成为步骤SD8。
亦即,在行扫描时(步骤SD1),计算标记的底座标变数BOTTOM的y座标值和标记的顶座标变数TOP的y座标值之差,也就是标记的y方向的象素数,并把其计算结果存入变数end(步骤SD2)。其次,把变数i及n初始设定为0,进行通过把上述变数end的值用标记的行数(变数ROW-NUMBER的内容)除,来计算如图26所示那样地为只一次扫描各行的中心所用的间隔,并把其存入变数inc(步骤SD4)。并且,把上述变数i的值设成变数counter的设定值(步骤SD5)。
然后,在是行扫描的时候(步骤SD6),从上述座标变数的配列DIM-POINT-P,DIM-POINT-Q求现在的变数counter值中的扫描始点及终点,以x方向增量为1且y方向增量为上述斜率增量配到LINE-INC[O],从帧存贮器6的Bank06A取出一行图像数据,并把其存入取入缓冲器配列scan-line,以及把其数据的个数存入变数num(步骤SD7)。
并且,调用如在后面详细叙述那样的宽向信息变换程序(步骤SB9),并把取出的数据变换成宽向信息。其次,以该宽向信息为基础,把与对应该条形码的用途予先决定的没有图示的条形码表一致的部分变换成码,并保存其信息(步骤SDA)。
此后,给变数counter以增量,即用予先规定的常数SKIP的值再设定(步骤SDA),检查这个被再设定的变数counter值是否超过上述变数end,也就是标记范围(步骤SDB)。在不超过时转移控制到上述步骤SD6,在超过时则将控制转移到下一步骤SDC。
即,检查被存入的码信息是否可以完全地译解标记中所记载着的信息(步骤SDC),在可以译码时,携带可以译码的信息将控制返回原先的程序。
另外,在不能译码时,在增量了变数i之后(步骤SDD),判断这个被再设定的变数i比上述常数SKIP是否还小(步骤SDE)。在小的时候,返回控制到上述步骤S5。另外,在不小的时候,在使变数n增量的同时将变数i复位为0(步骤SDF),并判断被再设定的变数n是否比2还小(步骤SDG)。在小的时候将控制返回到上述步骤SD5,另外在不小的时候,则携带不能译码的信息,将控制返回原先的程序。
进而,在这个跳越扫描中,是分SKIP次让其扫描标记的。即为了满足任何时候都快速处理,SKIP跳越地进行扫描,并直到标记区域外为止地一下子读入标记码,进行译码可能与否的判断。而且,如果判断为可以译码,则无须再扫描帧存贮器6的Bank06A的全部,马上就可以使该程序结束。若SKIP次地反复上述那样的扫描的话,实际上就成了扫描了Bank06A的全部。在此,已经用标记尺寸使上述SKIP发生了变动。这个SKIP本来也可以是常数(例如3或4),但为了哪怕让标记扫描试行次数减少一点及使其高速动作,所以根据标记尺寸等使之发生了变化。
其次,参照图28A及图28B的相连的流程图,说明在上述步骤SB9被调用的宽向信息变换程序。这个程序,关键是求标记的条带与空白的宽,由微分信号求条带和空白的边界再根据此时的近似二次曲线求数据的峰值。而且,顺次求峰值位置,通过求其位置差来求其宽度。这时,也变变厉与开始码22,行指示符21A相关的宽向信息。
即,首先,把在原先的程序读入的读入缓冲器配列scan-line设成行数据的配列,并定义这个被取入并被存贮在变数num的值为数据个数(步骤SB91)。其次,把减量了这个变数num的值的结果存入位置标识计数器i,另外,把变数j初始设定成0(步骤SB92)。并且从读入缓冲器配列scan-line的第i位(由位置标识计数器i所示)的位置的值减去读入缓冲器配列scan-line的第i-l的值、再把该解重设定在读入缓冲器配列scan-line的第i位的位置(步骤SB93)。此后,减量位置标识计数器i(步骤SB94),判断其结果比0大还是小(步骤SB95)。如果不大,则返回控制到上述步骤SB93。即在从步骤SB91到步骤SB95,一次微分行数据。
其次,把位置标识计数器i初始化为2(步骤SB96)。并且判断读入缓冲器配列scan-line的第i位位置的值是否比阈值变数THRESHOLD的值大及是否比读入缓冲器配列scan-line的第i-1位位置的值大,且在读入缓冲器配列scan-line的第i+1位位置的值以上与否(步骤SB97),若是如此,则把符号指标flag设为UP(步骤SB98)。
若非如此,接着,判断读入缓冲器配列scan-line的第i位位置的值是否比符号为负的阈值变数THRESHOLD的值(-THRESOLD)小及是否比读入缓冲器配列scan-line的第i-1位位置的值小,且是在读入缓冲器配列scan-line的第i+1位位置的值以下与否(步骤SB99),若是如此,则将符号指标flag设成DOWN(步骤SB9A)。
若非如此,下面,增量位置标识计数器i(步骤SB9B),判断其结果是否比从变数num的值减去了1的数还小(步骤SB9C)。若是较之还小,则把控制转向上述步骤SB97,若不小则将控制返回原先的程序。
即,在从这个步骤SB97到步骤SB9C,检出超过阈值变数THRESHOLD的值的最初的峰值,也就是图29的第一位的峰值。并且,当被检出的峰值的符号是正时,将符号指标flag设为UP并转移控制到步骤SB9D,当被检出的峰值的符号是负时,将符号指标flag设为DOWN并将控制转移到步骤SB9D。另外,在即使扫描行数据也不能检出峰值时,将控制返回到原先的程序。
这样一来,若符号指标flag已被设定,而后,设位置标识计数器i的值为x1,以及把读入缓冲器配列scan-line的第i-1位位置的值设为y1,读入缓冲器配列scan-line的第i位位置的值设为y2,读入缓冲器配列scan-line第i+1位位置的值设为y3,并由此进行把被检出的峰值位置与其两邻数据用二次曲线的连接(步骤SB9D)。并且进行如式(- 0.5 ( - y1 - 2 x1 y1 + 4 x1 y2 + ya - 2x1ya))/(y1 - 2y2 + ya)的计算,求解上述的二次曲线的峰值位置。而且把其存入变数lastpos(步骤SB9E)。
此后,判断位置标识计数i的值比从变数num的值减去了2的数是否还小(步骤SB9F),若不小的话,将控制返回原先的程序。
另外,若是小的话,则给位置标识计数器i增量(步骤SB9G)。并且判断符号指标flag是否为DOWN,且另外读入缓冲器配列scan-line的第i位置的值是否比阈值变数THRESHOLD的值大及比读入缓冲器配列scan-line的第i-1位置的值大并且是否在读入缓冲器配列scan-line的第i+1位置的值大并且是否在读入缓冲器配列scan-line的第i+1位置的值以上(步骤SB9H)、若是如此,则将符号指标flag设为UP(步骤SB9I)。
若非如此,接着,判断符号指标是否为UP,且另外读入缓冲器配列scan-line的第i位位置的值是否比符号为负的阈值变数THRESHOLD的值还小以及比读入缓冲器配列scan-line的第i-1位置的值还小并且是否在读入缓冲器配列scan-line的第i+1位置的值以下(步骤SB9J)。若非如此,则把控制移到上述步骤SB9F,若是如此则把符号指标flag设为DOWN(步骤SB9K)。
这样做若符号指标flag已被再设定,而后,则通过设位置标识计数器i的值为x1,以及读入缓冲器配列scan-line的第i-1位置的值为y1,读入缓冲器配列scan-line的第i位置的值为y2和读入缓冲器配列scan-line的第i+1位置的值为y3,进行将被检出的峰值位置与其两邻数据用二次曲线的连接(步骤SB9L)。并且进行如下式(- 0.5 ( - y1- 2 x1y1+ 4 x1y2+ ya- 2x1ya))/(y1- 2y2+ ya)的计算,求解上述二次曲线的峰值位置,并将之存入变数nowpos(步骤SB9M)。
由此,可以获得如图30所示那样的前一个峰值位置lastpos和这次求得的峰值位置nowpos。并且通过取这样所获得的两峰值位置之差求解峰值之间的距离,再把它存入用宽向信息存贮配列变数width的变数j来表示的位置(步骤SB9N)。
此后,把峰值位置变数lastpos更新为峰值位置变数nowpos的值(步骤SB9O),另外,增量变数j之后(步骤SB9P),将控制转移到上述步骤SB9F。
这样,在从步骤SB9F到步骤SB9P,顺次检出峰值,并把峰值间距离存入宽向信息存贮配列变数width中去。在此,与从上述步骤SB97到步骤SB9C中的最初的峰值检出的不同之处是,如在当前的符号指标flag为DOWN的时候,接下去必须找到的峰值是作为正符号的峰值。
如以上可明了那样,不论给条形码标记2以怎样的旋转角,读取都是可能的。进而还具有以下这样的特征(1)因为是用开始码22和/或停止码23这样的在自然界中难以存在的模式来求解标记位置,所以,即使有文字等条形码信息以外的信息存在于检出区域内,也可以稳定地只抽出并解读条形码标记2。
(2)在推定标记位置时,由于以开始码22或停止码23的某一方为基准在画面框上取出线的始点、终点,故即使是在画面以外看到标记的一部分的情况,也是可能抽出标记信息的。
(3)如在说明前处理程序、开始/停止码检出程序、扫描和检出程序中所述那样,通过在各种情况下让开始/停止码检出时的增量发生改变,防止了特定的旋转角出现不能检出的情况。
(4)通过把画面分为两画面并连续地存入帧存贮器6、以及比较画面间的标记位置信息,检出手颤的存在并实现了无浪费的扫描。
(5)在抽出标记的条形码信息时,由于是以标记的条带和空白的间隔最狭窄的开始码22或停止码23的第3边缘的值为基础计算出作为重要参数的阈值,故不使用标记尺寸或标记的照明条件也可以稳定地解码。
(6)在进行跳越扫描程序前,由于是通过最适扫描程序从标记的尺寸(行数,列数)和在标记的画面上的尺寸出发,对各行进行数据取出数各为1根的扫描,故在用这个最适扫描到达可以译码的场合,可以缩短标记读取时间。(即,由于是用了这个最适扫描,故可以缩短从扫描到能对扫描得到的信息进行译码的这段时间,因为没有无用的扫描,而其他形式的扫描则可能存在为读取标记的信息要进行重复的扫描等)。
(7)标记一般地是被抛露于或因人的接触等作为在输送过程中操作根源的条件下的,在受到了这样的某种程序损坏的标记中,存在标记的斜率不能正确地求取的可能性。在以这样推定的标记的斜率为基准并读出标记信息也不能达到可以译码的时候,由于是进行了斜率修正之后再读出标记信息的作法,故即使没有严密地决定标记的斜率也可以推定标记的信息。
(8)摄像了标记之后,作为最小线幅的模数(式)尺寸(正好是开始码22的大条带22A的下一个空白间隔)为几个象素与否便成了问题,该问题因标记倾斜而减少(在45°为1/1.414…)。于是,用二次曲线连接,并根据其峰值间距离来求条带及空白的宽度。由此,标记的描绘最小宽度再小也可以确定正确的标记信息。此外,虽然最小宽度的时候即使不用二次曲线也能正确地求得,但做为市场的要求,标记小型化的倾向日益增强,另外,如果考虑标记的印刷,则通常的印刷机械可以考虑空白比条带更细这样的做法,该手法的重要性是非常大的。
此外,本发明并非限定于上述实施例,当然可以有种种的变形实施。
例如,二维摄像装置5并非仅限于使用的以二维CCD或摄像管为代表的面传感器,象一维摄像元件和一维扫描机构的搭配或光电探测器与二维扫描机构的组合也都可以。
另外,在上述说明中虽然使用的是条形码标记中的PDF-417格式的标记,但并非仅限于此,象Code49等,其他的堆积式条形码或JAN之类的一维条形码也都可以。
如以上详细叙述的这样,根据本发明,条形码标记,特别是堆积式条形码标记,不管在读取装置的标记检出面上被怎样朝向地设置(条形码),或者尽管条形码标记的摄像图像上有缺损,都能读取其条形码符号信息。即本发明可以提供上述这样的符号信息读取装置。
亦即,由于以条形码标记的投影像的四个角位置中至少2点为基准推定标记位置而可以实际有效地抽出平行于标记的数据,故可以取得标记的角度不影响到读取性能这样的出色效果。
权利要求
1.符号数据读取装置,其特征是包括以由条带和空白构成的条形码作为二维像摄像的摄像装置;从由前述摄像装置获得的条形码的二维像检查出根据该条形码的种类所规定的指定模式的至少2个部位的位置检出装置;从由前述位置检出装置检查出来的这二个部位的位置检出条形码的斜率的斜率检出装置;以及以前述斜率检出装置的信息为基础,从由前述摄像装置所得到的条形码的二维像中顺序地读取前述条形码的信息的读取装置。
2.依照权利要求1的装置,其特征是前述的至少二个部位的位置是前述指定模式的2个角的位置。
3.依照权利要求2的装置,其特征是前述的摄像装置,包含记忆由摄像获得的条形码的二维像的帧存贮器,以及前述的位置检出装置包括有从前述帧存贮器用指定间隔在指定的方向上顺序读取条形码的信息的跳越读取装置;根据前述跳越读取装置基于按照前述该条形码种类所规定的指定模式最初读取的位置和最后读取的位置,检出前述的二个部位的位置检出装置。
4.依照权利要求3的装置,其特征是所述检出装置包括用由前述跳越读取装置读取的数据检出前述指定模式的指定模式检出装置;定义平行于连结由前述指定模式检出装置最初检出的前述指定模式的位置和最后检出的位置的直线、且横越前述指定模式内的最初的条带这样的直线的方程式的方程式定义手段;获得用由前述方程式定义手段所获得的方程式表示的直线和用定义前述帧存贮器的画面框的各方程式表示的各直线的两交点,并检出连结该两交点的直线的中点和两交点间的各边缘位置的边缘检出装置;以及从用前述边缘检出装置检出的各边缘位置,在连结前述最初检出的位置和最后检出的位置的直线上引下垂线,并把各自的交点作为前述的二个部位的位置检出的指定位置检出装置。
5.符号数据读取装置,其特征是包括摄像由条带和空白构成的条形码,并将之作为二维像记忆于帧存贮器的摄像装置;从前述帧存贮器以指定的读取间隔在指定的方向上,顺序读取前述条形码的信息的跳越读取装置;通过用前述跳越读取装置检出由前述该条形码的种类所规定的指定模式,检出该指定模式的至少二个部位的位置检出装置;从由用前述位置检出装置所检出的这二个部位的位置检出条形码的斜率的斜率检出装置;以前述斜率检出装置的信息为基础,从被记忆于前述帧存贮器的条形码的二维像顺次读取前述条形码的信息的读取装置;以及作为在前述跳越读取装置的前述指定的读取间隔,前述跳越读取装置从前述帧存贮器的最初到最后的每次读取都交互地设定第一值和第二值的读取间隔设定装置。
6.符号数据读取装置,其特征是,包括把由条带和空白构成的条形码作为二维像来摄像的摄像装置;从由前述摄像装置获得的条形码的二维像检出由该条形码的种类所规定的指定模式的至少二个部位的位置检出装置;从由前述位置检出装置检出的这二个部位的位置检出条形码的斜率的斜率检出装置;以前述斜率检出装置的信息为基础,从由前述摄像装置获得的条形码的二维像顺序读取前述条形码的信息的读取装置;微分由前述读取装置读取的各行的数据,通过与阈值比较,将之变换成条带和空白的宽向信息的宽向信息变换装置;从由前述宽向信息变换装置得到的宽向信息,译解成原来的信息的译码装置;以及决定在前述宽向信息变换装置中被利用的阈值的阈值决定装置,该阈值决定装置包括从由前述摄像装置获得的二维像,检出由该条形码种类所规定的指定模式,微分此时的行数据,在其微分强度的多数的峰值内,把由该条形码的种类所规定的条带和空白的间隔最狭窄的指定的峰值设为假定的阈值这样的假定阈值检出装置;以及判定在前述假定阈值检出装置得到的假定的阈值是否是在被予先规定的阈值的范围内,若是在其范围内,则决定前述的假定的阈值为正式的阈值这样的阈值决定装置。
7.符号数据读取装置,其特征是包括摄像由条带和空白构成的条形码,并将之作为二维像记忆在帧存贮器的摄像装置(前述条形码包括表示该条形码的行数及列数的部分);从前述帧存贮器检出由该条形码的种类所规定的指定模式的至少二个部位的位置检出装置;从由前述位置检出装置检出的这二个部位的位置检出条形码的斜率的斜率检出装置;以前述斜率检出装置的信息为基础,从被记忆在帧存贮器的条形码的二维像读取表示前述条形码的行数及列数部分的信息,并从其读取的信息获得前述条形码的行数及列数的行数及位数检出装置;从基于在前述位置检出装置检出的二个部位的位置的前述帧存贮器上的前述条形码像的大小、在前述斜率检出装置检出的条形码的斜率、以及在前述行数及位数检出装置检出的条形码的行数,算出对前述条形码的各行读取一行数据这样的最适读取行的最适读取行算出装置;以及从在前述最适读取行算出装置算出的行上的,顺序读取来自被记忆在帧存贮器的条形码的二维像的前述条形码的信息的读取装置。
8.符号数据读取装置,包括把由条带和空白构成的条形码作为二维摄像的摄像装置;从由上述摄像装置获得的条形码的二维像,检出由该条形码的种类所规定的指定模式的至少二个部位的位置检出装置;从由上述位置检出装置检出的这二个部位的位置检出条形码的斜率的斜率检出装置;以前述倾斜检出装置的信息为基础,从由前述摄像装置获得的条形码的二维像顺序读取前述条形码的信息的读取装置;从由前述读取装置得到的条形码的信息译解成原来的信息的译码装置;判定从由前述读取装置得到的条形码的信息,用上述译码装置是否可译解成原来的信息的判定装置;以及在由上述判定装置被判定为不可译码时,用指定角度修正用前述斜率检出装置检出的斜率,并以这个修正的斜率为基础,使其在前述读取装置顺次读取条形码的信息的角度修正装置。
9.依照权利要求8的装置,其特征是前述斜率检出装置包括通过算出连结在上述位置检出装置检出的二个部位的位置的直线和截距,获得表示该直线的方程式的方程式算出装置,前述读取装置包括在与用在前述方程式算出装置算出的方程式表示的直线一致的方向上,顺序读取前述帧存贮器的数据的装置,以及前述角度修正装置包括算出用在前述方程式算出装置算出的方程式来表示的直线的斜率相对于前述指定角度的角度量、和已修正的直线的方程式的装置。
10.符号数据读取装置,包括把由条带和空白构成的条形码作为二维像来摄像的摄像装置;从由前述摄像装置获得的条形码的二维像,检出由该条形码的种类所规定的指定模式的至少二个部位的位置检出装置;从由前述位置检出装置检出的二个部位的位置检出条形码的斜率的斜率检出装置;以前述斜率检出装置的信息为基础,从由前述摄像装置所获得的条形码的二维像顺序读取前述条形码的信息的读取装置;把用前述读取装置读取的各行的数据变换成条带和空白的宽向信息的宽向信息变换装置,该宽向信息变换装置包括微分用前述读取装置读取的各行的数据的微分装置;把用前述微分装置获得的各微分强度和阈值相比较,通过用二次曲线连结超过这个阈值的微分强度的各峰值位置和各自的峰值位置与其两邻的数据,求解各二次曲线的峰值位置的峰值位置算出装置;以及把上述峰值位置算出装置算出的相邻各位置间的差作为前述宽向信息输出的宽向信息输出装置;以及从由前述宽向信息输出装置获得的宽向信息译解成原来的信息的译码装置。
全文摘要
由二维摄像装置所摄像的条形码符号,被记忆于帧存贮器。数据处理装置的位置检出部,以这个被记忆的信息为基础,检出被投影在二维摄像装置的光电变换面上的条形码符号的像的四个角的位置信息内至少二个部位的位置信息。斜率检出部从这个位置信息推定条形码符号的位置信息。读取部则以这个位置信息为基础,顺序从帧存贮器读取条形码符号的信息。译码部则从这个读取的信息译码解成原来的信息。
文档编号G06K7/10GK1079320SQ93105848
公开日1993年12月8日 申请日期1993年5月26日 优先权日1992年5月26日
发明者久保允则 申请人:欧林巴斯光学工业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1