JPH0683996A - Symbol information reader - Google Patents
Symbol information readerInfo
- Publication number
- JPH0683996A JPH0683996A JP4232499A JP23249992A JPH0683996A JP H0683996 A JPH0683996 A JP H0683996A JP 4232499 A JP4232499 A JP 4232499A JP 23249992 A JP23249992 A JP 23249992A JP H0683996 A JPH0683996 A JP H0683996A
- Authority
- JP
- Japan
- Prior art keywords
- coordinate
- variable
- label
- code
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/01—Details
- G06K7/015—Aligning or centering of the sensing device with respect to the record carrier
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Electromagnetism (AREA)
- General Health & Medical Sciences (AREA)
- Toxicology (AREA)
- Image Processing (AREA)
- Character Input (AREA)
- Character Discrimination (AREA)
- Editing Of Facsimile Originals (AREA)
Abstract
Description
【0001】[0001]
【産業上の利用分野】本発明は、バーコード等のシンボ
ル情報を読み取るシンボル情報読取装置に関する。BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to a symbol information reader for reading symbol information such as bar codes.
【0002】[0002]
【従来の技術】最近の目ざましいPOS(ポイント・オ
ブ・セールス=販売時点情報管理システム)の普及によ
って、バーコードは、広く一般に知られるようになって
きた。ここで、バーコードとは、大きさの異なるバーと
スペースの平行な組合せパターンにより1つのバーコー
ドキャラクタを形成し、必要であればチェックデジット
を含む必要なキャラクタ群を平行に配列し、例えば前後
にスタート/ストップキャラクタのような特徴的な所定
パターンを配して構成したシンボルのことである。2. Description of the Related Art With the recent remarkable spread of POS (Point of Sales = Point of Sale Information Management System), bar codes have become widely known. Here, a barcode means that one barcode character is formed by a parallel combination pattern of a bar and a space having different sizes, and a necessary character group including a check digit is arranged in parallel if necessary, for example, front and rear. Is a symbol formed by arranging a characteristic predetermined pattern such as a start / stop character.
【0003】広く一般消費財に使用されているバーコー
ドとしては、JAN(Japan Article Number)が日本で
標準化されている。また、バーコードの他の応用として
は、物流シンボルがある。このシンボルは、上記JAN
コードの前に、1桁又は2桁の物流識別コードが追加さ
れたものである。As a bar code widely used for general consumer goods, JAN (Japan Article Number) is standardized in Japan. Another application of barcodes is in logistics symbols. This symbol is the above JAN
A one-digit or two-digit physical distribution identification code is added before the code.
【0004】上記いずれのバーコードシンボルも1次元
バーコードと呼ばれるものであり、これらのコード体系
が許容できる情報量はせいぜい数十バイトであった。All of the above bar code symbols are called one-dimensional bar codes, and the amount of information that these code systems can tolerate is at most several tens of bytes.
【0005】ところが近年、バーコードの情報量に対す
る要求が、声高に叫ばれるようになってきた。それに呼
応するように、各種の2次元バーコードと呼ばれるシン
ボル体系が発表されている。However, in recent years, a demand for the amount of information of a bar code has come to be shouted out loud. In response to this, various symbol systems called 2D barcodes have been announced.
【0006】それらのシンボル体系によれば、いずれも
1次元バーコードに比べ格段に多い情報をコード化でき
る特徴を持っている。この体系は、1次元のバーコード
を積み重ねることによって、情報量を増加させる方式で
ある。このような方式のシンボルは、スタックドバーコ
ードと呼ばれている。そのひとつに、PDF−417と
呼ばれるコード体系がある。Each of these symbol systems has a feature that much more information can be coded than a one-dimensional bar code. This system is a method of increasing the amount of information by stacking one-dimensional barcodes. Symbols of this type are called stacked barcodes. One of them is a code system called PDF-417.
【0007】従来、このようなスタックドバーコードを
読み取るシンボル情報読取装置としては、例えば特開平
2−268382号公報に開示されているようなレーザ
ースキャンタイプの装置が知られている。この装置に於
いては、レーザー光を2次元にスキャンすることで、バ
ーコードシンボル情報を読み取り、復号している。Conventionally, as a symbol information reading device for reading such a stacked bar code, there is known a laser scan type device as disclosed in, for example, Japanese Patent Laid-Open No. 2-268382. In this apparatus, the barcode symbol information is read and decoded by scanning the laser beam two-dimensionally.
【0008】また、特開平2−268383号公報に
は、2次元撮像装置でバーコードを撮像し、バーコード
の画像をメモリに取り込んで、このデータを元にバーコ
ードシンボル情報を復号する装置が開示されている。Further, Japanese Laid-Open Patent Publication No. 2-268383 discloses an apparatus for picking up a barcode with a two-dimensional image pickup apparatus, loading the image of the barcode into a memory, and decoding the barcode symbol information based on this data. It is disclosed.
【0009】[0009]
【発明が解決しようとする課題】しかながら、上記した
従来のバーコードシンボル情報読取装置に於いては、ス
キャンもしくは撮像して得たバーコードシンボル情報
を、デコード可能なだけの情報が得られなくとも、即ち
デコードしても所望の結果が得られないにもかかわらず
常時デコード処理するようになっていたため、処理に時
間がかかるという問題点があった。即ち、デコードでき
ない場合には、再びその読み取ろうとしているバーコー
ドをスキャンもしくは撮像してバーコードシンボル情報
を得なければならないが、デコードできようとできまい
と必ずデコード処理に進んでしまうため、バーコードを
スキャンもしくは撮像したときにデコードできるのかど
うかが直ちにわからず、無駄な待ち時間が必要となって
いた。However, in the above-mentioned conventional bar code symbol information reading apparatus, the bar code symbol information obtained by scanning or imaging cannot obtain information sufficient for decoding. In other words, there is a problem in that it takes a long time because the decoding process is always performed even if the desired result is not obtained even if the decoding is performed. That is, if the barcode cannot be decoded, the barcode to be read must be scanned or imaged again to obtain the barcode symbol information, but if the barcode cannot be decoded, the decoding process always proceeds. It was not immediately known whether or not the code could be decoded when scanned or imaged, and a useless waiting time was required.
【0010】本発明は上記の点に鑑みてなされたもの
で、その目的とするところは、バーコードラベル、特に
スタックドバーコードラベルの読み取りに於ける無駄な
時間を省くことができるシンボル情報読取装置を提供す
ることにある。The present invention has been made in view of the above points, and an object thereof is to provide a symbol information reading apparatus which can save a wasteful time in reading a bar code label, particularly a stacked bar code label. To provide.
【0011】[0011]
【課題を解決するための手段】本発明は、上記目的を達
成するために、バーとスペースとからなるバーコードを
2次元像として撮像する撮像手段と、該撮像手段からの
情報を記憶する記憶手段と、該記憶手段に記憶された情
報に基づいて、バーコードのコード位置を推定する位置
推定手段と、該位置推定手段により推定されたコード位
置をもとに、バーコードがデコード可能かどうか推定す
るデコード可能性推定手段と、該デコード可能性推定手
段がデコード可能であると推定したときに、前記記憶手
段に記憶された情報を復号する復号手段とを備えるもの
とした。In order to achieve the above object, the present invention provides an image pickup means for picking up a two-dimensional image of a bar code consisting of a bar and a space, and a memory for storing information from the image pickup means. Means and a position estimating means for estimating the code position of the barcode based on the information stored in the storing means, and whether the barcode can be decoded based on the code position estimated by the position estimating means. The decoding possibility estimating means for estimating and the decoding means for decoding the information stored in the storage means when the decoding possibility estimating means estimates that the decoding is possible.
【0012】[0012]
【作用】即ち、本発明によるシンボル情報読取装置で
は、記憶手段にバーとスペースとからなるバーコードを
2次元像として撮像する撮像手段からの情報を記憶して
おき、位置推定手段によって前記記憶手段に記憶された
情報に基づいて推定されたバーコードのコード位置をも
とに、デコード可能性推定手段はバーコードがデコード
可能かどうか推定し、この推定結果がデコード可能であ
るというときにだけ、復号手段によって前記記憶手段に
記憶された情報を復号する。That is, in the symbol information reading device according to the present invention, the information from the image pickup means for picking up a two-dimensional image of a bar code consisting of a bar and a space is stored in the storage means, and the position estimation means stores the information. Based on the code position of the barcode estimated based on the information stored in, the decode possibility estimation means estimates whether the barcode can be decoded, and only when this estimation result is decodeable, The decoding means decodes the information stored in the storage means.
【0013】[0013]
【実施例】以下、図面を参照して、本発明の一実施例を
説明する。DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS An embodiment of the present invention will be described below with reference to the drawings.
【0014】図1はその構成を示す図である。本実施例
のシンボル情報読取装置は、結像レンズ3、2次元撮像
装置5、フレームメモリ6、データ処理装置7とからな
る。データ処理装置7は、特に図示はしないが、例えば
CPUとメモリで構成され、バーコードのコード配置の
推定のための位置検出部7A及び傾き検出部7B、推定
されたコード配置をもとにデコード処理を行うかどうか
を決定するデコード実行決定部7C、上記決定結果に従
ってバーコードの復号を行う復号部7D、等の種々の機
能部の役割を果たす。また、このバーコード処理装置7
内のメモリには、後述するような各種定数及び変数を格
納するための種々のレジスタが構成されている。FIG. 1 is a diagram showing the configuration. The symbol information reading device of this embodiment includes an imaging lens 3, a two-dimensional image pickup device 5, a frame memory 6, and a data processing device 7. Although not shown in the drawing, the data processing device 7 is composed of, for example, a CPU and a memory, and detects a position detection unit 7A and an inclination detection unit 7B for estimating the code arrangement of a barcode, and decodes based on the estimated code arrangement. It plays the role of various functional units such as a decoding execution determination unit 7C that determines whether or not to perform processing, a decoding unit 7D that decodes the barcode according to the determination result. In addition, this bar code processing device 7
The internal memory is configured with various registers for storing various constants and variables as described later.
【0015】荷物1に印刷されたスタックドバーコード
ラベル、例えばPDF−417フォーマットのバーコー
ドラベル2は、結像レンズ3によって、2次元撮像装置
5に搭載されている光電変換面4に結像される。2次元
撮像装置5によって光電変換されたラベル情報は、映像
信号としてフレームメモリ6に時系列的に2画面(バン
ク0(Bank0),バンク1(Bank1))取り込
まれる。The stacked bar code label printed on the baggage 1, for example, the bar code label 2 in the PDF-417 format, is imaged by the imaging lens 3 on the photoelectric conversion surface 4 mounted on the two-dimensional image pickup device 5. It The label information photoelectrically converted by the two-dimensional imaging device 5 is captured as a video signal in the frame memory 6 in two screens (bank 0 (Bank 0), bank 1 (Bank 1)) in time series.
【0016】図2の(A)は、スタックドバーコードの
例として、PDF−417のラベル構造を示している。
このバーコードラベル2は、バーとスペースの組合せで
なるバーコードキャラクタ群で構成された復号されるべ
き情報成分の領域であるラベル部21と、その前後に配
されたスタート/ストップキャラクタであるスタートコ
ード22及びストップコード23とを有している。そし
て、1つの情報単位は、ストップコード23を除いて4
つのバーとスペースとからなっている。また、スタート
及びストップコード22,23は、“ビッグバー”と呼
ばれる大きなバー22A,23Aから始まっている。FIG. 2A shows a label structure of PDF-417 as an example of a stacked bar code.
The bar code label 2 is a label portion 21 which is an area of an information component to be decoded which is composed of a bar code character group consisting of a combination of a bar and a space, and a start / stop character which is arranged before and after the label part 21. It has a code 22 and a stop code 23. And one information unit is 4 excluding the stop code 23.
It consists of one bar and a space. The start and stop codes 22 and 23 start from large bars 22A and 23A called "big bars".
【0017】なお、“情報単位”とは、JANコード等
ではキャラクタと称されるものであり、PDF−417
ではコードワードと称されているものを指す(以下、単
にコードと省略する)。特に、PDF−417では、バ
ーとスペースのパターンでなるこの情報単位は「0」〜
「928」で示される中間情報に一度変換された後、所
定ルールに基づいて最終言語に翻訳(デコード)される
ようになっている。この最終言語としては、PDF−4
17では、ASCII文字やバイナリ表現、その他をサ
ポートしている。The "information unit" is referred to as a character in JAN code or the like, and is referred to as PDF-417.
In refers to what is called a codeword (hereinafter simply referred to as code). Particularly, in PDF-417, this information unit consisting of a pattern of bars and spaces is "0"-
After being converted into the intermediate information indicated by “928” once, it is translated (decoded) into the final language based on a predetermined rule. The final language is PDF-4
17 supports ASCII characters, binary expressions, and others.
【0018】ラベル部21は、スタートコード22及び
ストップコード23の隣に存在するロウインディケータ
21Aと呼ばれるコードと、それらの間に挟まれた実際
のデータが記述されている複数のデータカラム21Bで
なるラベルマトリックス21Cとにより構成される。ロ
ウインディケータ21Aには、ラベルのロウ方向,カラ
ム方向のサイズやセキュリティレベル等が記述されてい
る。従って、このロウインディケータの情報を解読すれ
ば、ラベルの情報サイズや修復可能なコード数等が決定
できる。The label part 21 is composed of a code called a row indicator 21A existing next to the start code 22 and the stop code 23, and a plurality of data columns 21B in which actual data sandwiched between them is described. And a label matrix 21C. The row indicator 21A describes the label size in the row and column directions, the security level, and the like. Therefore, by decoding the information of this row indicator, the information size of the label, the number of recoverable codes, etc. can be determined.
【0019】ここで、“セキュリティレベル”とは、デ
ータ修復(エラー訂正)能力のレベルを指し、セキュリ
ティレベルをnとすると、修復可能なコード数は「2
n+1 −2」個となる。この式に於いて減算される「2」
個はエラー検出のために使われている。つまり、ラベル
マトリックス21Cにはエラー検出のためのコードが常
に2個含まれており、例えば、周知のリードソロモン符
号が用いられる。デコードする際に、このエラー検出/
修復コードを利用することにより、誤って検出された実
際の情報データを修復することができる。Here, the "security level" refers to the level of data recovery (error correction) capability, and assuming that the security level is n, the number of recoverable codes is "2."
n + 1 −2 ”. "2" subtracted in this formula
Are used for error detection. That is, the label matrix 21C always includes two codes for error detection, and for example, the well-known Reed-Solomon code is used. This error is detected when decoding
By utilizing the repair code, it is possible to repair the erroneously detected actual information data.
【0020】なお、この図2の(A)は、4×2のラベ
ルマトリックスを有する(従って、コード数は「8」で
ある)バーコードラベルを示している。2A shows a bar code label having a 4 × 2 label matrix (therefore, the number of codes is "8").
【0021】今、仮想的に、フレームメモリ6の画素配
列に、上記のようなPDF−417のラベル画像を投影
した模式図を図2の(B)に示す(この図は、4×1の
ラベルマトリックスを有する(従って、コード数は
「4」である)バーコードラベルを示している)。Now, FIG. 2B is a schematic diagram in which the label image of the above PDF-417 is virtually projected on the pixel array of the frame memory 6 (this figure shows 4 × 1). It has a label matrix (hence the number of codes is "4") indicating a bar code label).
【0022】データ処理装置7では、以下に説明するよ
うなアルゴリズムに基づいて、ラベル検出を行い、ラベ
ル情報を読出し復号を行って、不図示のホスト装置など
に出力する。The data processing device 7 detects a label based on an algorithm described below, reads the label information, decodes it, and outputs it to a host device (not shown) or the like.
【0023】即ち、図3は、このデータ処理装置7でラ
ベル情報を読出すアルゴリズムの概略を示すフローチャ
ートである。なお、本明細書中に於いては、フローチャ
ートは、プログラミング言語Cの記述方式に従って書か
れている。That is, FIG. 3 is a flow chart showing an outline of an algorithm for reading label information by the data processing device 7. In the present specification, the flowchart is written according to the description method of the programming language C.
【0024】まず、詳細は後述するような前処理ルーチ
ンをコールして(ステップS1)、変数INC0のパラ
メータを設定する(実際には種々のパラメータを初期設
定する)。First, a preprocessing routine, which will be described in detail later, is called (step S1) to set the parameter of the variable INC0 (actually, various parameters are initialized).
【0025】その後、詳細は後述するような画像取り込
みルーチンをコールして(ステップS2)、画像をフレ
ームメモリ6に連続的に2画面(Bank0,Bank
1)取り込む。ここで、連続的にとは、まず1画面の画
像データをBank0に格納し、次に、1画面の画像デ
ータをBank1に格納するということである。この
際、最初に取り込み指令を出してから最新のフレームの
データをBank0に取り込み、次にその取り込みが終
了した後、再度取り込み指令を出して最新のフレームの
データをBank1に取り込むため、2画面のデータ間
には、撮像の時間差が存在する(この時間差は、Ban
k0に格納する時間+0〜1/30秒)。After that, an image fetching routine, which will be described in detail later, is called (step S2), and the images are continuously displayed on the frame memory 6 in two screens (Bank0, Bank).
1) Capture. Here, “continuously” means that the image data of one screen is first stored in Bank0, and then the image data of one screen is stored in Bank1. At this time, since the latest frame data is first fetched into Bank0 after the fetch command is issued, and after the fetch is completed, the fetch command is issued again and the latest frame data is fetched into Bank1. There is an imaging time difference between the data (this time difference is equal to Ban
Time to store in k0 + 0 to 1/30 seconds).
【0026】次に、詳細は後述するようなラベル検出ル
ーチンをコールして(ステップS3)、この取り込まれ
た画像データの内のBank0を用いてラベルが存在す
るかをチェックし、さらにはラベルが存在するならばラ
ベル情報を検出する。Next, a label detection routine, which will be described in detail later, is called (step S3), and it is checked whether or not the label exists by using Bank0 in the captured image data. If present, the label information is detected.
【0027】そして、上記ステップS3に於けるラベル
検出処理の結果を判断し(ステップS4)、ラベルが存
在しない場合には、再度、上記ステップS1に制御を移
して前処理ルーチンをコールする。Then, the result of the label detecting process in the above step S3 is judged (step S4), and if there is no label, the control is again transferred to the above step S1 to call the preprocessing routine.
【0028】一方、ラベルが存在する場合には、詳細は
後述するような手ぶれ検出ルーチンをコールして(ステ
ップS5)、上記ステップS2で取り込まれた画像デー
タの内のBank1をもさらに用いて手ぶれの影響を推
定する。ここで、手ぶれとは、バーコードラベル2を印
刷してある印刷物を当該読取装置にかざした場合に、高
い頻度で起こる画像のぶれのことを指す。On the other hand, if a label is present, a camera shake detection routine, which will be described in detail later, is called (step S5), and the camera shake is further made by using Bank1 in the image data captured in step S2. Estimate the effect of. Here, the camera shake refers to a camera shake that frequently occurs when a printed matter on which the barcode label 2 is printed is held over the reading device.
【0029】次に、上記ステップS5に於ける手ぶれ検
出の結果を判断し(ステップS6)、手ぶれを起こして
いる場合には、再度、上記ステップS1に制御を移して
前処理ルーチンをコールする。Next, the result of the camera shake detection in the above step S5 is judged (step S6). If the camera shake occurs, the control is transferred to the above step S1 again to call the preprocessing routine.
【0030】手ぶれを起こしていない場合には、詳細は
後述するしきい値決定ルーチンをコールして(ステップ
S7)、後述するステップSBの埋め込チェック及びス
テップSDの最適スキャンルーチン及びステップSFの
インテリジェントスキャンルーチンに於いて、処理対象
となるラインデータからエッジ間の幅情報を抽出するた
めの処理に利用されるしきい値(変数THRESHOL
D)を求める。If the camera shake has not occurred, a threshold value determination routine, which will be described in detail later, is called (step S7), and an embedding check in step SB, an optimum scan routine in step SD, and an intelligent scan in step SF, which will be described later, are performed. In the scan routine, a threshold value (variable THRESHOL) used for processing for extracting width information between edges from line data to be processed.
D) is calculated.
【0031】次に、インディケータ情報決定ルーチンを
コールして(ステップS8)、ラベル2のロウインディ
ケータ21Aを読み取り、ラベルサイズ等を決定する。Next, the indicator information determination routine is called (step S8), the row indicator 21A of the label 2 is read, and the label size and the like are determined.
【0032】そして、上記ステップS8の決定ルーチン
に於いてラベルサイズ等が決定されたかどうかを判断し
(ステップS9)、決定されていない場合は、再度、上
記ステップS1に制御を移して前処理ルーチンをコール
する。Then, it is judged whether or not the label size or the like has been decided in the decision routine of the step S8 (step S9), and if it has not been decided, the control is returned to the step S1 again and the preprocessing routine is executed. To call.
【0033】一方、ラベルサイズ等が決定された場合に
は、詳細は後述するようなスキャン方程式決定ルーチン
をコールして(ステップSA)、ラベル2を全面走査す
るための各種変数を定義する。On the other hand, when the label size and the like are determined, a scan equation determination routine, which will be described in detail later, is called (step SA) to define various variables for scanning the entire label 2.
【0034】次に、詳細は後述するような埋め込チェッ
クルーチンをコールして(ステップSB)、各コードワ
ードの位置の推定を行い、更に各コードワードの位置が
画面内かどうかをチェックしている。Next, an embedding check routine, which will be described in detail later, is called (step SB), the position of each codeword is estimated, and it is further checked whether the position of each codeword is within the screen. There is.
【0035】そして、上記ステップSBにて画面外つま
り読取不能と推定されたコードの数が、修復可能な数を
上回ったかどうかを判断することにより、デコード可能
かどうを判断し(ステップSC)、上回った場合はデコ
ード不能として、再度、上記ステップS1に制御を移し
て前処理ルーチンをコールする。Then, it is determined whether or not decoding is possible by determining whether or not the number of codes estimated to be out of the screen, that is, unreadable in step SB, exceeds the recoverable number (step SC). If it exceeds, it is determined that decoding is not possible, and the control is transferred again to step S1 to call the preprocessing routine.
【0036】一方、下回った場合、即ちデコード可能と
判断した場合は、詳細は後述するような最適スキャンル
ーチンをコールして(ステップSD)、上記ステップS
Aで定義された各種変数を用いてラベルを最適な間隔で
全面走査し、ラベル情報を読み取る。なおここで、最適
スキャンとは、最も計算量が少なくてラベル情報を全て
確定できるような最適な間隔でのスキャンのことをいう
ものとする。On the other hand, if it is below the lower limit, that is, if it is judged that the decoding is possible, an optimum scan routine which will be described in detail later is called (step SD), and the above step S is executed.
Using the various variables defined in A, the label is scanned over the entire surface at optimum intervals and the label information is read. Here, the optimum scan refers to a scan at an optimum interval that requires the least amount of calculation and allows all label information to be determined.
【0037】そして、上記ステップSDの最適スキャン
で読み取った情報でデコード可能かどうかを判断し(ス
テップSE)、デコード可能の場合は、ステップSHの
デコード処理に制御を移す。Then, it is judged whether or not the information read by the optimum scan in the above step SD can be decoded (step SE). If the information can be decoded, the control is transferred to the decoding processing in step SH.
【0038】また、デコード不能の場合は、詳細は後述
するようなインテリジェントスキャンルーチンをコール
する(ステップSF)。このインテリジェントスキャン
ルーチンでは、上記ステップSBで定義された各種変数
とを用いて上記ステップSDで読み取れなかったコード
位置を走査し、ラベル情報を読み取る。If decoding is not possible, an intelligent scan routine, which will be described in detail later, is called (step SF). In this intelligent scan routine, the code position that could not be read in step SD is scanned using the various variables defined in step SB, and the label information is read.
【0039】そして、このステップSFとステップSD
で読み取った情報でデコード可能かどうかを判断し(ス
テップSG)、デコード可能の場合は、ステップSHの
デコード処理に制御を移す。Then, this step SF and step SD
It is determined whether or not the information read in step 3 is decodable (step SG), and if it is decodable, control is passed to the decoding process in step SH.
【0040】また、デコード不能の場合は、再度、上記
ステップS1に制御を移して前処理ルーチンをコールす
る。If the decoding is impossible, the control is transferred to the step S1 again to call the preprocessing routine.
【0041】ステップSHでは、上記ステップSBの最
適スキャンルーチンと上記ステップSFのインテリジェ
ントスキャンルーチンに於いて読み取った情報を復号
し、その復号結果を不図示のホスト装置などに出力す
る。At step SH, the information read by the optimum scan routine at step SB and the intelligent scan routine at step SF is decoded, and the decoding result is output to a host device (not shown) or the like.
【0042】以上述べてきた各種処理ルーチンを、以下
に詳しく説明する。The various processing routines described above will be described in detail below.
【0043】まず、図4の(A)のフローチャートを参
照して、上記ステップS1でコールされる前処理ルーチ
ンを説明する。First, the preprocessing routine called in step S1 will be described with reference to the flow chart of FIG.
【0044】即ち、まず変数INC0の値が基準増分
(予め定められた検出間隔)と同じであるかを判断する
(ステップS11)。同じである場合は、変数INC0
を所定の補正増分を付加した値に再設定し(ステップS
12)、異なる場合は、上記基準増分に再設定する(ス
テップS13)。これにより、図3の概略フローチャー
トに於ける大きなループで、この前処理ルーチンを通過
する奇数回数目と偶数回数目で変数INC0の値は変化
することになる。なお、図中の記号「==」は同じであ
ることを示し、「=」は代入を表している。また、変数
INC0の値は、ラベル未検出時の検出間隔を示す。That is, first, it is determined whether the value of the variable INC0 is the same as the reference increment (predetermined detection interval) (step S11). If they are the same, the variable INC0
Is reset to a value to which a predetermined correction increment is added (step S
12) If different, reset to the reference increment (step S13). As a result, in a large loop in the schematic flow chart of FIG. 3, the value of the variable INC0 changes at the odd number of times and the even number of times of passing through this preprocessing routine. The symbol “==” in the figure indicates the same, and “=” indicates substitution. The value of the variable INC0 indicates the detection interval when no label is detected.
【0045】次に、図5のフローチャートを参照して、
上記ステップS2でコールされる画像取り込みルーチン
を説明する。Next, referring to the flowchart of FIG.
The image capturing routine called in step S2 will be described.
【0046】まず、画像データを、2次元撮像装置5か
らフレームメモリ6のBank0に取り込む(ステップ
S21)。次に、画像データを、2次元撮像装置5から
フレームメモリ6のBank1に取り込む(ステップS
22)。これにより、連続的に2画面の画像データを取
り込むこととなる。First, the image data is fetched from the two-dimensional image pickup device 5 into Bank0 of the frame memory 6 (step S21). Next, the image data is loaded from the two-dimensional imaging device 5 into Bank1 of the frame memory 6 (step S
22). As a result, two screens of image data are continuously captured.
【0047】次に、図6のフローチャート及び図7の
(A)のラベル投影像の図(この図は、4×1のラベル
マトリックスを有する(従って、コード数は「4」であ
る)バーコードラベルを示している)を参照して、上記
ステップS3でコールされるラベル検出ルーチンを説明
する。このラベル検出ルーチンは、ラベルの有無を検出
することと、ラベルの位置情報を検出すること即ちラベ
ルに平行に画像データをフレームメモリ6から抽出する
ための抽出範囲(変数TOP及びBOTTOM)とラベ
ルの傾き(変数SLOPE)を求めることとの2種類の
ラベル検出処理を含む。ここで、変数TOPの値はラベ
ルのトップ座標を示し、また変数BOTTOMの内容は
ラベルのボトム座標を示す。また変数SLOPEの内容
はラベルの傾きを示す。Next, the flowchart of FIG. 6 and the label projection image of FIG. 7A (this figure has a 4 × 1 label matrix (therefore, the number of codes is “4”)) The label detection routine called in step S3 will be described with reference to FIG. This label detection routine detects the presence or absence of the label, detects the position information of the label, that is, the extraction range (variables TOP and BOTTOM) for extracting the image data from the frame memory 6 in parallel with the label and the label. It includes two types of label detection processing of obtaining the slope (variable SLOPE). Here, the value of the variable TOP indicates the top coordinate of the label, and the content of the variable BOTTOM indicates the bottom coordinate of the label. The content of the variable SLOPE indicates the inclination of the label.
【0048】このラベル検出ルーチンに於いては、ま
ず、処理対象画像をフレームメモリ6のBanK0とす
る(ステップS31)。次に、ラベル検出フラッグを初
期化する(ステップS32)。このラベル検出フラッグ
は、スタート検出フラッグstart_flagとスト
ップ検出フラッグstop_flagからなる。これら
ラベル検出フラッグは、後述する他の処理に於いて、ス
タートコード22及びストップコード23のどちらを選
択して処理すべきかを指し示すために用いられる。なぜ
ならば、スタートコード22とストップコード23の両
方が検出された場合に、より信頼性の高い方を選択する
必要があるからである。In this label detection routine, the image to be processed is first set to BanK0 in the frame memory 6 (step S31). Next, the label detection flag is initialized (step S32). The label detection flag includes a start detection flag start_flag and a stop detection flag stop_flag. These label detection flags are used to indicate which of the start code 22 and the stop code 23 should be selected and processed in the other processing described later. This is because, when both the start code 22 and the stop code 23 are detected, it is necessary to select the one with higher reliability.
【0049】次に、詳細は後述するようなスタート/ス
トップコード検出ルーチンをコールして(ステップS3
3)、フレームメモリ6のBank0に取り込んだ画像
データにスタート及び/又はストップコードが存在する
かどうかを検出する。つまり、図7の(A)に於ける座
標e,f,g,hを検出する(但し、これら4個の座標
変数の全てが検出されるとは限らず、例えば、図7の
(B)に示すような場合では、座標変数f及びhが求ま
らないかもしれない)。このルーチンにより、スタート
及びストップコードが検出されて確定されれば、スター
トコード22の場合は図7の(A)のフレームメモリ6
上の座標変数gが、またストップコード23の場合は座
標変数hが定義される。ここで、座標変数eはスタート
コード22を最初に見つけた座標、fはストップコード
23を最初に見つけた座標、gはスタートコード22を
最後に見つけた座標、hはストップコード23を最後に
見つけた座標をそれぞれ示している。Next, a start / stop code detection routine, which will be described in detail later, is called (step S3).
3) It is detected whether or not a start and / or stop code exists in the image data taken into Bank0 of the frame memory 6. That is, the coordinates e, f, g, and h in FIG. 7A are detected (however, not all of these four coordinate variables are detected, and, for example, FIG. 7B). In such a case, the coordinate variables f and h may not be obtained). If the start and stop codes are detected and confirmed by this routine, in the case of the start code 22, the frame memory 6 of FIG.
The coordinate variable g above is defined, and in the case of the stop code 23, the coordinate variable h is defined. Here, the coordinate variable e is the coordinate at which the start code 22 is found first, f is the coordinate at which the stop code 23 is found first, g is the coordinate at which the start code 22 is found last, and h is the stop code 23 at the end. The respective coordinates are shown.
【0050】そして、座標変数g,hの何れか一方が定
義されているかどうかを判断し(ステップS34)、定
義されていない場合は、ラベルなしとしてこの処理を抜
ける。即ち、ラベルなしの情報を持ってリターンする。
なお、本明細書では、C言語の表記方式に従っているた
めこのような図の書き方となるが、FORTRAN等の
表記方式に従えば、ラベルなしのフラッグを立てた後に
リターンという書き方となろう。Then, it is judged whether or not any one of the coordinate variables g and h is defined (step S34), and if not defined, the processing is terminated with no label. That is, it returns with information without a label.
In this specification, such a diagram is written because it follows the C language notation, but according to the FORTRAN or the like notation, a flag without a label is set and then return is used.
【0051】以上のようにして、ラベルの有無の検出が
行われる。The presence or absence of the label is detected as described above.
【0052】次に、ラベルの位置情報の検出、即ちラベ
ルに平行に画像データをフレームメモリ6から抽出する
ための抽出範囲(変数TOP及びBOTTOM)とラベ
ルの傾き(変数SLOPE)の算出が行われる。Next, the label position information is detected, that is, the extraction range (variables TOP and BOTTOM) for extracting the image data from the frame memory 6 in parallel with the label and the inclination of the label (variable SLOPE) are calculated. .
【0053】即ち、上記ステップS34に於いて、座標
変数g,hの何れか一方が定義されていると判断された
場合は、座標変数gが定義されているのかどうかを判断
し(ステップS35)、定義されていなければ、ステッ
プS37に進む。しかし、座標変数gが定義されている
場合には、詳細は後述するようなスタートエッジ位置検
出ルーチンをコールして(ステップS36)、スタート
エッジ位置の検出を行う。このスタートエッジ検出は、
座標変数e及びg(座標変数gが定義されていれば当然
座標変数eも定義されている)より図7の(A)に示す
ような座標変数i及びmを定義し、さらに座標変数a及
びdを定義する。また、start_flagをON
し、座標変数TOP及びBOTTOMを定義する。ここ
で、座標変数a及びdはそれぞれラベルの4角座標の内
の一つを示す。That is, when it is determined in step S34 that one of the coordinate variables g and h is defined, it is determined whether the coordinate variable g is defined (step S35). If not defined, the process proceeds to step S37. However, when the coordinate variable g is defined, a start edge position detection routine, which will be described in detail later, is called (step S36) to detect the start edge position. This start edge detection is
From coordinate variables e and g (coordinate variable e is also defined if coordinate variable g is defined), coordinate variables i and m as shown in FIG. 7A are defined, and coordinate variables a and Define d. Also, turn on start_flag.
Then, coordinate variables TOP and BOTTOM are defined. Here, the coordinate variables a and d each represent one of the four-sided coordinates of the label.
【0054】次に、座標変数hが定義されているのかど
うかを判断し(ステップS37)、定義されていなけれ
ば、ステップS39に進む。しかし、座標変数hが定義
されている場合には、詳細は後述するようなストップエ
ッジ位置検出ルーチンをコールして(ステップS3
8)、ストップエッジ位置の検出を行う。このストップ
エッジ位置検出は、座標変数f及びh(座標変数hが定
義されていれば当然座標変数fも定義されている)より
図4に示すような座標変数j及びkを定義し、さらに座
標変数b及びcを定義する。また、stop_flag
をONし、座標変数TOP及びBOTTOMを定義す
る。ここで、座標変数b及びcはそれぞれラベルの4角
座標の内の一つを示す。Next, it is judged whether or not the coordinate variable h is defined (step S37). If not defined, the process proceeds to step S39. However, if the coordinate variable h is defined, a stop edge position detection routine, which will be described in detail later, is called (step S3).
8) The stop edge position is detected. This stop edge position detection defines coordinate variables j and k as shown in FIG. 4 from coordinate variables f and h (coordinate variable f is also defined if coordinate variable h is defined), and further coordinates Define variables b and c. Also, stop_flag
Is turned on and the coordinate variables TOP and BOTTOM are defined. Here, the coordinate variables b and c each indicate one of the four-sided coordinates of the label.
【0055】次に、start_flag,stop_
flag共にONかどうかを判断し(ステップS3
9)、両方がONしていない場合には、ステップS3E
に進む。なおここで、図中の記号&&は論理積を示す。Next, start_flag, stop_
It is determined whether both flags are ON (step S3
9), if both are not turned on, step S3E
Proceed to. Here, the symbol && in the figure indicates a logical product.
【0056】両フラッグ共にONの場合は、それらst
art_flag,stop_flagを両方ともいっ
たんリセットしてから(ステップS3A)、線分(a−
d)と(c−d)を比較して(ステップS3B)、スタ
ートコード22とストップコード23でその線分が長い
方を処理対象として選択する。これは、通常使用時に於
いて、片方のコードが他方に対して短くなる最大の理由
は、画面からはみ出す場合であるので、長い方を処理基
準に選ぶようにしているということによる。When both flags are ON, those st
Both art_flag and stop_flag are reset once (step S3A), and then the line segment (a-
d) and (cd) are compared (step S3B), and one of the start code 22 and the stop code 23 having the longer line segment is selected as a processing target. This is because, in normal use, one code is shorter than the other code because it is out of the screen. Therefore, the longer code is selected as the processing standard.
【0057】そして、線分(a−d)の方が線分(b−
c)よりも短いときには、座標変数TOPに座標変数b
の値を、また座標変数BOTTOMには座標変数cの値
をそれぞれ代入してラベル情報の抽出範囲を決定するた
めのデータを定義し、さらにstop_flagを選択
してONする(ステップS3C)。The line segment (a-d) is better than the line segment (b-
When it is shorter than c), the coordinate variable TOP is added to the coordinate variable b.
And the value of the coordinate variable c are substituted into the coordinate variable BOTTOM to define data for determining the extraction range of the label information, and stop_flag is selected and turned on (step S3C).
【0058】逆に、線分(a−d)の長さが線分(b−
c)以上のときには、座標変数TOPに座標変数aの値
を、また座標変数BOTTOMには座標変数dの値をそ
れぞれ代入してラベル情報の抽出範囲を決定するための
データを定義し、さらにstart_flagを選択し
てONする(ステップS3D)。On the contrary, if the length of the line segment (ad) is equal to the line segment (b-
c) In the above cases, the value of the coordinate variable a is assigned to the coordinate variable TOP and the value of the coordinate variable d is assigned to the coordinate variable BOTTOM, and data for determining the extraction range of the label information is defined, and further start_flag is set. Is selected and turned on (step S3D).
【0059】そして、ラベルの傾きを求めるルーチンを
コールして(ステップS3E)、これら座標変数TOP
及びBOTTOMよりラベルの傾き(変数SLOPE)
を求め、これら得られた変数と共にラベルありの情報を
持ってリターンする。Then, a routine for obtaining the inclination of the label is called (step S3E), and these coordinate variables TOP
And the slope of the label from BOTTOM (variable SLOPE)
And returns with the information with a label along with these obtained variables.
【0060】次に、上記のようなラベル検出ルーチン中
のステップS33でコールされるスタート/ストップコ
ード検出ルーチンを、図8のフローチャートを参照して
説明する。このスタート/ストップコード検出ルーチン
は、前述したように、座標変数e及びg、又はf及びh
の少なくとも一方を検出するものである。Next, the start / stop code detection routine called in step S33 in the above label detection routine will be described with reference to the flowchart of FIG. This start / stop code detection routine, as described above, uses the coordinate variables e and g or f and h.
Of at least one of the above.
【0061】即ち、まずラベル検出間隔用変数INIT
にラベル未検出時の検出間隔変数INC0の値を代入す
る(ステップS331)。次に、詳細は後述するような
スキャン及び(&)検出(行)ルーチンをコールして
(ステップS332)、フレームメモリ6のBank0
の画像データを行方向にスキャンし、スタート/ストッ
プコードの検出を行う。ここで、行方向のスキャンと
は、図7の(A)にロウスキャンとして示すような、フ
レームメモリ6の長手方向へのスキャンのことである。That is, first, the label detection interval variable INIT
The value of the detection interval variable INC0 when no label is detected is substituted into (step S331). Next, a scan and (&) detection (row) routine, which will be described in detail later, is called (step S332), and Bank0 of the frame memory 6 is called.
The image data of is scanned in the row direction and the start / stop code is detected. Here, the scan in the row direction is a scan in the longitudinal direction of the frame memory 6, as shown as a row scan in FIG.
【0062】そして、上記スキャン&検出(行)ルーチ
ンの結果、スタートコード22もしくはストップコード
23が検出されたかどうか、即ちラベルが検出されたか
どうかを判断し(ステップS333)、ラベルが検出さ
れた場合には、ラベルあり検出の情報を持ってリターン
する。Then, as a result of the scan & detection (row) routine, it is judged whether the start code 22 or the stop code 23 is detected, that is, the label is detected (step S333), and the label is detected. Returns with the information of detection with a label.
【0063】一方、ラベルが検出されない場合には、ラ
ベル検出間隔用変数INITにラベル未検出時の検出間
隔変数INC0の値を代入した後(ステップS33
4)、スキャン&検出(列)ルーチンをコールして(ス
テップS332)、フレームメモリ6のBank0の画
像データを列方向にスキャンし、スタート/ストップコ
ードの検出を行う。ここで、列方向のスキャンとは、図
7の(A)にカラムスキャンとして示すような、フレー
ムメモリ6の短手方向へのスキャンのことである。On the other hand, when the label is not detected, the value of the detection interval variable INC0 when the label is not detected is assigned to the label detection interval variable INIT (step S33).
4) The scan & detection (column) routine is called (step S332), the image data of Bank0 of the frame memory 6 is scanned in the column direction, and the start / stop code is detected. Here, the scan in the column direction is a scan in the lateral direction of the frame memory 6, as shown as a column scan in FIG.
【0064】そして、上記スキャン&検出(列)ルーチ
ンの結果、スタートコード22もしくはストップコード
23が検出されたかどうか、即ちラベルが検出されたか
どうかを判断し(ステップS335)、ラベルが検出さ
れた場合には、ラベルあり検出の情報を持ってリターン
する。Then, as a result of the scan & detection (column) routine, it is judged whether the start code 22 or the stop code 23 is detected, that is, the label is detected (step S335), and when the label is detected. Returns with the information of detection with a label.
【0065】しかしながら今度もラベルが検出されなか
った場合には、その原因が角度エラーによるものかを判
断する(ステップS336)。このラベルの角度エラー
は、上記ステップS332でコールされるスキャン&検
出ルーチンのリターン値を参照して行われる。即ち、上
記スキャン&検出ルーチンで、角度エラーとなっている
かどうかを逐次チェックし、エラーが発生すれば、リタ
ーン値に角度エラーフラッグとラベル非検出のフラッグ
を立ててそこで処理を中断して戻ってくる。この角度エ
ラーの判断の場合、この後に再度処理するのは行方向だ
けであるので、列方向を走査したリターン値をこのステ
ップS336で判断させることにより、角度エラーのた
めにラベルなし検出としたのかラベルが検出できなかっ
たためにそうしたのかの判断をしている。However, if the label is not detected again, it is determined whether the cause is an angle error (step S336). The angle error of this label is performed by referring to the return value of the scan & detection routine called in step S332. That is, in the above scan & detection routine, it is sequentially checked whether or not an angle error has occurred, and if an error occurs, an angle error flag and a label non-detection flag are set in the return value and the processing is interrupted and returned. come. In the case of this angle error determination, since only the row direction is processed again after this, is it determined that no label is detected due to the angle error by determining the return value obtained by scanning the column direction in step S336? I'm deciding if I did that because the label couldn't be found.
【0066】このステップS336で角度エラーでない
と判断された場合には、ラベルなし検出の情報を持って
リターンする。If it is determined in step S336 that the error is not an angle error, the process returns with the information of label-free detection.
【0067】一方、角度エラーと判断された場合には、
次に、ラベル検出間隔用変数INITに、ラベル検出時
のラベル検出間隔INC1を代入する(ステップS33
7)。ここで、検出間隔変数INC0とINC1の大き
さは、基本的には両者の最小公倍数が画面範囲を越えて
いるのが望ましく、例えばINC0=23,INC1=
17である。On the other hand, if it is determined that the angle error has occurred,
Next, the label detection interval INC1 at the time of label detection is substituted into the label detection interval variable INIT (step S33).
7). Here, as for the magnitudes of the detection interval variables INC0 and INC1, it is basically desirable that the least common multiple of them exceeds the screen range. For example, INC0 = 23, INC1 =
Seventeen.
【0068】その後、再度、スキャン&検出(行)ルー
チンをコールして(ステップS332)、フレームメモ
リ6のBank0の画像データを行方向にスキャンし、
スタート/ストップコードの検出を行う。Thereafter, the scan & detection (row) routine is called again (step S332) to scan the image data of Bank0 of the frame memory 6 in the row direction,
Detects start / stop codes.
【0069】そして、スタート/ストップコード即ちラ
ベルが検出されたかどうか判断し(ステップS33
8)、検出された場合にはラベルあり検出の情報を持っ
てリターンし、ラベルが検出されない場合はラベルなし
検出の情報を持ってリターンする。Then, it is judged whether or not the start / stop code, that is, the label is detected (step S33).
8) If it is detected, it returns with the information of the detection with the label, and if the label is not detected, it returns with the information of the detection without the label.
【0070】このように、本スタート/ストップコード
検出ルーチンでは、その検出は、まず行方向へのスキャ
ンにより行われ、これで求められなければ、列方向のス
キャンにより求める。これでも求められなければ、角度
エラー(つまりラベルが傾きすぎていること)かどうか
判断し、エラーならラベル検出間隔を変えて再度行方向
のスキャンを行って再度検出してみる。これでも検出さ
れないならば、ラベルなし検出とする。As described above, in this start / stop code detection routine, the detection is first performed by scanning in the row direction, and if not detected by this, it is obtained by scanning in the column direction. If this is not the case, it is determined whether the error is an angle error (that is, the label is tilted too much), and if it is an error, the label detection interval is changed, scanning is performed again in the row direction, and detection is performed again. If it is still not detected, it is assumed that no label is detected.
【0071】なお、角度エラーの時に行方向スキャンし
か行わないのは、バーコードラベル2は、行スキャンで
見つかるように、つまりカラム方向がフレームメモリ6
の長手方向(横方向)となるように置かれるのが一般的
であり、この人間の特性を利用すれば、列方向は省略で
きるという理由による。勿論、列方向スキャンを行って
も良いが、その場合は実行速度が落ちてしまう。It is to be noted that only the row-direction scanning is performed at the time of the angle error, because the bar code label 2 can be found by the row scanning, that is, the column direction is the frame memory 6.
It is generally placed in the longitudinal direction (horizontal direction), and if this human characteristic is utilized, the column direction can be omitted. Of course, column-direction scanning may be performed, but in that case, the execution speed will decrease.
【0072】ここで、上記ステップS332でコールさ
れるスキャン&検出ルーチンを、図9乃至図11に示す
一連のフローチャートを参照して説明する。このルーチ
ンの処理は、Bank0のデータを行方向もしくは列方
向に種々の条件で変化する検出間隔に従って走査し、座
標変数e及びgと座標変数f及びhとの少なくとも一方
を決定することにある。どちらの方向に走査するかは、
このルーチンをコールする際に決定される。座標変数e
及びg、f及びhの少なくとも一方を決定でき、且つそ
の際に角度エラーをおこしていない場合は、ラベルを検
出したとして上位のルーチンに戻る。座標変数e及び
g、f及びhのどちらかの組み合わせも検出できなかっ
た場合は、ラベルなし検出として上位のルーチンに戻
る。また、検出はできても、その座標値から計算される
ラベル角度が走査方向に対して45度以上傾いている場
合は、ラベルなし検出且つ角度エラーとして上位のルー
チンに戻る。Now, the scan & detection routine called in step S332 will be described with reference to a series of flowcharts shown in FIGS. The processing of this routine is to scan the data of Bank0 in the row direction or the column direction according to the detection intervals that change under various conditions, and determine at least one of the coordinate variables e and g and the coordinate variables f and h. Which direction to scan
Determined when calling this routine. Coordinate variable e
And at least one of g, f, and h can be determined, and if no angle error occurs at that time, it is determined that a label has been detected, and the process returns to the upper routine. If neither combination of the coordinate variables e and g and f and h could be detected, then the process returns to the upper routine as unlabeled detection. Further, if the label angle calculated from the coordinate values is inclined by 45 degrees or more with respect to the scanning direction even if detection is possible, no label is detected and an angle error is returned to the upper routine.
【0073】即ち、まずパラメータscan_incを
検出間隔用変数INITに初期設定し(ステップS33
21)、さらにパラメータnを上記scan_incに
初期設定する(ステップS3322)。ここで、パラメ
ータscan_incは本ルーチンで使われるラベル検
出(スキャン)間隔を示し、パラメータnは検出(スキ
ャン)処理を施すライン位置を表す。次に、スタートコ
ード検出個数変数start_num及びストップコー
ド検出個数変数stop_numをそれぞれ「0」に初
期設定する(ステップS3323)。That is, first, the parameter scan_inc is initialized to the detection interval variable INIT (step S33).
21), and further, the parameter n is initialized to the scan_inc (step S3322). Here, the parameter scan_inc indicates the label detection (scan) interval used in this routine, and the parameter n indicates the line position on which the detection (scan) processing is performed. Next, the start code detection number variable start_num and the stop code detection number variable stop_num are each initialized to "0" (step S3323).
【0074】この初期設定の後、行スキャンか列スキャ
ンか判断し(ステップS3324)、行スキャンであれ
ばn行目の画像データを取り込み(ステップS332
5)、また列スキャンであればn列目の画像データを取
り込む(ステップS3326)。After this initial setting, it is determined whether it is a row scan or a column scan (step S3324), and if it is a row scan, the image data of the nth row is fetched (step S332).
5) If it is a column scan, the image data of the nth column is fetched (step S3326).
【0075】次に、上記取り込んだ画像データにスター
トコード22が存在するかを判断し(ステップS332
7)、存在しなければステップS332Dへ進む。スタ
ートコード22が存在する場合には、そのスタートコー
ド22が初めて検出されたものか否かを判断する(ステ
ップS3328)。初めて検出されたものである場合
は、その検出座標を座標変数eに格納する(ステップS
3329)。また、初めて検出されたものでない場合
は、その検出座標を座標変数gに格納する(ステップS
332A)。ここで、最初に検出されたものであるかど
うかは、座標変数eに値が格納されているかどうかを見
て判断している。次に、そのスタートコード検出座標を
スタートコード検出座標配列start_pos[ ]
のstart_num番目(変数start_numの
値が示す配列の番号)に格納する(ステップS332
B)。更に、スタートコード検出変数start_nu
mをインクリメントする(ステップS332C)。これ
によって、次々検出されるスタートコードの位置座標は
全てスタートコード検出座標配列start_po
s[]に格納され、その個数は、スタートコード検出変
数start_numに保存される。Next, it is judged whether or not the start code 22 exists in the above-mentioned captured image data (step S332).
7) If it does not exist, the process proceeds to step S332D. If the start code 22 exists, it is determined whether or not the start code 22 is detected for the first time (step S3328). If it is detected for the first time, the detected coordinates are stored in the coordinate variable e (step S
3329). If not detected for the first time, the detected coordinates are stored in the coordinate variable g (step S
332A). Here, whether or not it is the one detected first is determined by checking whether or not a value is stored in the coordinate variable e. Next, the start code detection coordinates are set to the start code detection coordinate array start_pos [].
Stored in the start_num-th position (the array element number indicated by the value of the variable start_num) (step S332).
B). Furthermore, the start code detection variable start_nu
Increment m (step S332C). As a result, the position coordinates of the start codes detected one after another are all start code detection coordinate array start_po.
It is stored in s [], and the number is stored in the start code detection variable start_num.
【0076】次に同様に、上記取り込んだ画像データに
ストップコード23が存在するかを判断し(ステップS
332D)、存在しなければステップS332Jへ進
む。ストップコード23が存在する場合には、そのスト
ップコード23が初めて検出されたものか否かを判断す
る(ステップS332E)。初めて検出されたものであ
る場合は、その検出座標を座標変数fに格納する(ステ
ップS332F)。また、初めて検出されたものでない
場合は、その検出座標を座標変数hに格納する(ステッ
プS332G)。ここで、最初に検出されたものである
かどうかは、座標変数fに値が格納されているかどうか
を見て判断している。次に、そのストップコード検出座
標をストップコード検出座標配列stop_pos
[ ]のstop_num番目(変数stop_num
の値が示す配列の番号)に格納する(ステップS332
H)。更に、ストップコード検出変数stop_num
をインクリメントする(ステップS332I)。これに
よって、次々検出されるストップコードの位置座標は全
てストップコード検出座標配列stop_pos[ ]
に格納され、その個数は、ストップコード検出変数st
op_numに保存される。Next, similarly, it is judged whether or not the stop code 23 exists in the image data taken in (step S
332D), if not present, the process proceeds to step S332J. When the stop code 23 is present, it is determined whether or not the stop code 23 is detected for the first time (step S332E). If it is the first detected coordinate, the detected coordinate is stored in the coordinate variable f (step S332F). If not detected for the first time, the detected coordinates are stored in the coordinate variable h (step S332G). Here, whether or not it is the one detected first is determined by checking whether or not a value is stored in the coordinate variable f. Next, the stop code detection coordinates are stored in the stop code detection coordinate array stop_pos.
[] Stop_num th (variable stop_num
Is stored in the array number indicated by the value of (step S332).
H). Furthermore, stop code detection variable stop_num
Is incremented (step S332I). As a result, the position coordinates of the stop codes detected one after another are all stop code detection coordinate array stop_pos [].
Stored in the stop code detection variable st
It is stored in op_num.
【0077】次に、座標変数eもしくはfが定義(格
納)されたかどうかを判断し(ステップS332J)、
定義されていればステップS332Kへ、定義されてい
なければステップS332Lへ進む。即ち、定義されて
いれば、次に上記スキャン間隔scan_incがラベ
ル検出時の検出間隔変数INC1でないかどうか、もし
くは座標変数g,h共定義済みかどうかを判断する(ス
テップS332K)。INC1でない場合もしくはg,
h共定義済みの場合は、スキャン間隔scan_inc
を上記変数INC1の値とし(ステップS332M)、
そうでない場合は、scan_incを「1」とする
(ステップS332N)。また、上記ステップS332
Jで座標変数eもしくはfが定義されていないと判断さ
れた場合には、次に上記スキャン間隔scan_inc
が検出間隔用変数INITであるかどうかを判断する
(ステップS332L)。INITである場合は、スキ
ャン間隔scan_incを「1」とし(ステップS3
32O)、そうでない場合は、scan_incを上記
INITの値とする(ステップS332P)。Next, it is judged whether the coordinate variable e or f is defined (stored) (step S332J),
If it is defined, the process proceeds to step S332K, and if not defined, the process proceeds to step S332L. That is, if defined, it is then determined whether the scan interval scan_inc is not the detection interval variable INC1 at the time of label detection, or whether the coordinate variables g and h have already been defined (step S332K). If not INC1 or g,
h If co-defined, scan interval scan_inc
Be the value of the variable INC1 (step S332M),
Otherwise, scan_inc is set to "1" (step S332N). In addition, the above step S332
If it is determined that the coordinate variable e or f is not defined in J, then the above scan interval scan_inc
Is a detection interval variable INIT (step S332L). If it is INIT, the scan interval scan_inc is set to "1" (step S3
32O), otherwise, scan_inc is set to the value of INIT (step S332P).
【0078】このように上記ステップS332Jからス
テップS332Qは、データ取り込み間隔を変化させる
手法を記述している。その動作は、座標変数e,fが定
義されない間は、スキャン間隔scan_incは検出
間隔用変数INITと1の間を交互にとる。座標変数
e,fが定義された場合は、座標変数g,h共に定義さ
れるまで、スキャン間隔scan_incはラベル検出
時の検出間隔変数INC1と「1」の間を交互にとる。
また、座標変数e,f,g,h共に定義された場合は、
スキャン間隔scan_incは上記変数INC1とな
る。As described above, steps S332J to S332Q describe a method of changing the data fetching interval. In the operation, the scan interval scan_inc alternates between the detection interval variable INIT and 1 while the coordinate variables e and f are not defined. When the coordinate variables e and f are defined, the scan interval scan_inc alternates between the detection interval variable INC1 and "1" at the time of label detection until both the coordinate variables g and h are defined.
If coordinate variables e, f, g and h are defined,
The scan interval scan_inc becomes the variable INC1.
【0079】即ち、スキャン間隔は、検出処理の初めか
らスタート/ストップコードの何れか一方が検出される
までは、INIT(=INC0、例えば、23)と
「1」の間を交互にとり、スタートコード/ストップコ
ードの何れか一方が検出されてから画面の最後までは、
INC1(例えば、「17」)と「1」の間を交互にと
る。このように検出ライン間隔を種々変化させるのは、
次の理由による。即ち、今、検出ライン間隔を一定にす
ると、ラベルの最小線幅と、撮像倍率と、2次元撮像素
子ピッチとで決定される検出不能となるラベル角度が存
在する場合がある。それを極力避けるために、検出処理
の初めからスタート/ストップコードの何れか一方が検
出されるまでの間間隔を変化させている。この場合で
も、条件によってはラベルが撮像されているにもかかわ
らず、ラベルが見つからない(すりぬけ)ことがある。
そこで、1回のすりぬけは仕方がないとし、2回目には
必ず検出できるように、その増分INIT(=INC
0)を変化させているものである。That is, the scan interval is alternately set between INIT (= INC0, eg, 23) and “1” from the beginning of the detection process until either one of the start / stop codes is detected, and the start code is changed. / From either one of the stop code is detected to the end of the screen,
Alternate between INC1 (for example, "17") and "1". Changing the detection line interval in this way is
For the following reasons. That is, when the detection line interval is constant, there may be a label angle that cannot be detected and is determined by the minimum line width of the label, the image pickup magnification, and the two-dimensional image pickup element pitch. In order to avoid it as much as possible, the interval is changed from the beginning of the detection process to the detection of either the start / stop code. Even in this case, depending on the conditions, the label may not be found (blank) even though the label is imaged.
Therefore, it is unavoidable to slip through once, and the increment INIT (= INC
0) is changed.
【0080】また、座標変数e,f,g,h共に定義さ
れた場合にスキャン間隔scan_incをINC1と
するのは、一応全ての座標が求まった後は、その後別に
新しいg,hが求まらなくても良く、それよりも、この
処理を高速に終了させることが重要であるという理由に
よる。また、全ての座標が求まった後、増分をINC1
にすると、通常は、引き続き新しいg,hが求まる。When the coordinate variables e, f, g, and h are all defined, the scan interval scan_inc is set to INC1. After all the coordinates are found, new g and h are found separately. It may not be necessary, and rather, it is important to finish this processing at high speed. Also, after all the coordinates are obtained, the increment is INC1.
If it is set, normally, new g and h are continuously obtained.
【0081】次に、パラメータnの値をscan_in
cの値だけ増加させてnを更新し(ステップS332
Q)、次回取り込む行もしくは列数を決定する。そし
て、フレームメモリ6の縦と横のサイズは既知であるた
め、このサイズより上記更新されたnが画面外かどうか
を判断し(ステップS332R)、画面内の場合は、上
記ステップS3324に制御を移す。Next, the value of parameter n is set to scan_in
The value of c is increased and n is updated (step S332
Q) Determine the number of rows or columns to be fetched next time. Then, since the vertical and horizontal sizes of the frame memory 6 are known, it is determined from this size whether the updated n is outside the screen (step S332R). If it is within the screen, control is performed to step S3324. Transfer.
【0082】画面外の場合つまりスキャンが終了したな
らば、次に、座標変数gが定義されたかどうかを判断し
(ステップS332S)、定義されていない場合はステ
ップS332Yに制御を移す。If it is outside the screen, that is, if the scan is completed, it is next determined whether or not the coordinate variable g is defined (step S332S). If it is not defined, the control is shifted to step S332Y.
【0083】この座標変数gが定義されている場合に
は、次に、既に格納されたスタートコード検出座標配列
start_pos[ ]を用いて、スタートコード開
始位置を直線近似(最小2乗近似)し、その近似直線を
用いてe,gを再設定する(ステップS332T)。す
なわち、多数のスタートコード開始位置を用いてe,g
を再設定するということは、スタートコードの推定がよ
り正確になるわけである。If this coordinate variable g is defined, then the start code start position is linearly approximated (least squares approximation) using the start code detection coordinate array start_pos [] already stored, E and g are reset using the approximate straight line (step S332T). That is, using a large number of start code start positions, e, g
Resetting means that the start code estimation is more accurate.
【0084】次に,行スキャンか列スキャンかを判断す
る(ステップS332U)。そして、行スキャンの場合
には、座標変数gのx座標の値と座標変数eのx座標の
値との差を、座標変数gのy座標の値と座標変数eのy
座標の値との差で割り、その結果の値の絶対値をとり
(これを図中「ABS」と記す)、これを傾きの絶対値
を示す変数deltaに代入する(ステップS332
V)。Next, it is determined whether it is a row scan or a column scan (step S332U). Then, in the case of row scanning, the difference between the value of the x coordinate of the coordinate variable g and the value of the x coordinate of the coordinate variable e is calculated as the value of the y coordinate of the coordinate variable g and the y of the coordinate variable e.
It is divided by the difference from the coordinate value, the absolute value of the resulting value is obtained (this is referred to as "ABS" in the figure), and this is substituted into the variable delta indicating the absolute value of the slope (step S332).
V).
【0085】また、列スキャンの場合には、座標変数g
のy座標の値と座標変数eのy座標の値との差を、座標
変数gのx座標の値と座標変数eのx座標の値との差で
割り、その結果の値の絶対値をとり、これを変数del
taに代入する(ステップS332W)。In the case of column scanning, coordinate variable g
The difference between the y coordinate value of and the y coordinate value of the coordinate variable e is divided by the difference between the x coordinate value of the coordinate variable g and the x coordinate value of the coordinate variable e, and the absolute value of the result is calculated. Take this as the variable del
Substitute for ta (step S332W).
【0086】そして、得られた傾きの絶対値delta
が「1」よりも大きいかどうかを判断することにより
(ステップS332X)、角度エラーかどうかを判断す
る。角度エラーの場合には、ラベルなし検出及び角度エ
ラーの情報を持ってリターンする。Then, the absolute value of the obtained slope delta
Is greater than "1" (step S332X) to determine whether the angle error. In the case of an angle error, it returns with the information of the detection without label and the angle error.
【0087】角度エラーでない場合には、もしくは上記
ステップS332Sで座標変数gが定義されていないと
判断された場合には、次に、座標変数hが定義されたか
どうかを判断し(ステップS332Y)、定義されてい
ない場合はステップS332eに制御を移す。If the angle error is not detected, or if it is determined in step S332S that the coordinate variable g is not defined, then it is determined whether the coordinate variable h is defined (step S332Y). If it is not defined, control is transferred to step S332e.
【0088】この座標変数hが定義されている場合に
は、次に、既に格納されたストップコード検出座標配列
stop_pos[ ]を用いて、ストップコード開始
位置を直線近似し、その近似直線を用いてf,hを再設
定する(ステップS332Z)。すなわち、多数のスト
ップコード開始位置を用いてf,hを再設定するという
ことは、ストップコードの推定がより正確になるわけで
ある。If this coordinate variable h is defined, then the stop code start position is linearly approximated using the already stored stop code detection coordinate array stop_pos [], and the approximated straight line is used. f and h are reset (step S332Z). That is, resetting f and h using a large number of start positions of the stop code makes the estimation of the stop code more accurate.
【0089】次に、行スキャンか列スキャンかを判断す
る(ステップS332a)。そして、行スキャンの場合
には、座標変数hのx座標の値と座標変数fのx座標の
値との差を、座標変数hのy座標の値と座標変数fのy
座標の値との差で割り、その結果の値の絶対値をとり、
これを傾きの絶対値deltaに代入する(ステップS
332b)。Next, it is determined whether it is a row scan or a column scan (step S332a). Then, in the case of row scanning, the difference between the value of the x coordinate of the coordinate variable h and the value of the x coordinate of the coordinate variable f is calculated as the value of the y coordinate of the coordinate variable h and the y of the coordinate variable f.
Divide by the difference with the coordinate value, take the absolute value of the resulting value,
This is substituted for the absolute value of the slope delta (step S
332b).
【0090】また、列スキャンの場合には、座標変数h
のy座標の値と座標変数fのy座標の値との差を、座標
変数hのx座標の値と座標変数fのx座標の値との差で
割り、その結果の値の絶対値をとり、これをdelta
に代入する(ステップS332c)。In the case of column scanning, coordinate variable h
The difference between the y coordinate value of x and the y coordinate value of the coordinate variable f is divided by the difference between the x coordinate value of the coordinate variable h and the x coordinate value of the coordinate variable f, and the absolute value of the resulting value is calculated. Take this and delta
To (step S332c).
【0091】そして、得られた傾きの絶対値delta
が「1」よりも大きいかどうかを判断することにより
(ステップS332d)、角度エラーかどうかを判断す
る。角度エラーの場合には、ラベルなし検出及び角度エ
ラーの情報を持ってリターンする。Then, the absolute value delta of the obtained slope
Is greater than "1" (step S332d), it is determined whether the angle error. In the case of an angle error, it returns with the information of the detection without label and the angle error.
【0092】そして、角度エラーでない場合には、もし
くは上記ステップS332Yで座標変数hが定義されて
いないと判断された場合には、次に、座標変数gもしく
はhが定義されたかどうかを判断し(ステップS332
e)、定義された場合にはラベルあり検出の情報を持っ
てリターンし、定義されていない場合にはラベルなし検
出の情報を持ってリターンする。If it is not an angle error, or if it is determined in step S332Y that the coordinate variable h is not defined, then it is determined whether the coordinate variable g or h is defined ( Step S332
e) If defined, return with label detection information, and if not defined, return labelless information.
【0093】このように上記ステップS332S乃至S
332W、もしくはステップS332Y乃至S332c
で、スタート/ストップコードの傾きを求めることによ
りラベル全体の傾きを求め、ステップS332Xもしく
はS332dで、その傾きの絶対値deltaが「1」
を越えるかどうかを判断し、「1」を越える場合は、角
度エラーでラベルなし検出として制御を戻す。また、そ
の傾きの絶対値deltaが「1」を越えない場合は、
ステップS332eで座標変数gもしくはhが定義され
ているかどうかを判断し、定義されている場合はラベル
が検出されたとして制御を戻し、定義されていない場合
はラベルなし検出として制御を戻す。As described above, the steps S332S through S are executed.
332W, or steps S332Y to S332c
Then, the inclination of the entire label is obtained by obtaining the inclination of the start / stop code, and in step S332X or S332d, the absolute value delta of the inclination is "1".
If it exceeds "1", the control returns as an unlabeled detection due to an angle error. If the absolute value delta of the inclination does not exceed "1",
In step S332e, it is determined whether the coordinate variable g or h is defined. If it is defined, the control is returned as if a label was detected, and if it is not defined, the control is returned as no label detection.
【0094】なお、上記ステップS332X及びS33
2dで角度エラーを判定するのは、次の理由による。即
ち、本来検出されるべき抽出方向で「すり抜け」が発生
し、他方で検出されることは、希ではあるが発生する。
その場合、その後の処理でエラーが発生するため、この
ような検出がなされないようにするためである。また、
角度エラーの基準が「1」となるのは、ラベル回転角4
5度でdeltaが「1」となるからである。Incidentally, the above steps S332X and S33.
The reason why the angle error is determined in 2d is as follows. That is, “slip through” occurs in the extraction direction that should be originally detected, and it is rare that it is detected in the other direction.
In that case, an error occurs in the subsequent processing, so that such detection is not performed. Also,
The standard of the angle error is "1" because the label rotation angle is 4
This is because the delta becomes “1” at 5 degrees.
【0095】また、S332T,S332Zで座標値の
再設定を行うのは、ラベルの局所的な汚れやラベル印刷
精度或は、撮像系の分解能等により必ずしもコード座標
を正確に検出されるとは限らないためである。上記のエ
ラー要因が検出座標(e,gh或はf,h)に影響を与
えた場合も、最小2乗近似により、より高い精度でその
検出座標が修正される。The resetting of the coordinate values in S332T and S332Z does not always ensure that the code coordinates are accurately detected due to local stains on the label, the label printing accuracy, the resolution of the image pickup system, or the like. Because there is no. Even when the above-mentioned error factor affects the detected coordinates (e, gh or f, h), the detected coordinates are corrected with higher accuracy by the least-squares approximation.
【0096】次に、上記のようなラベル検出ルーチン中
のステップS36でコールされるスタートエッジ位置検
出ルーチンを、図12のフローチャートを参照して説明
する。Next, the start edge position detection routine called in step S36 in the above label detection routine will be described with reference to the flowchart of FIG.
【0097】即ち、まずスタート検出フラッグstar
t_flagをONした後(ステップ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)/1
7}×N画素分左に移動させるような切片bとすれば良
いことになる。That is, first, the start detection flag star
After turning on t_flag (step S361), an equation of a straight line parallel to the line segment e-g is defined, for example, the line segment e-g.
The equation y = ax + b is calculated (step S362).
Next, the intercept b is defined so that this straight line crosses the start big bar 22A (step S363). The structure of the start code 22 is, for example, a start big bar 22A composed of eight bars, three pairs of white bars and black bars, and three white bars, for a total of 17 bars. It is assumed that the imaged result is N pixels. It is known that the straight line represented by the equation y = ax + b moves in parallel by changing the intercept b. Therefore, in order to obtain a straight line that crosses the big bar 22A, the line segment eg is set to {(17-8 / 2) / 1.
7} × N pixels may be moved to the left by an intercept b.
【0098】こうしてスタートビッグバー22Aをクロ
スする直線が得られたならば、次に、その直線と画面を
定義する方程式との交点をそれぞれA,A’(図7の
(A)参照)とし、さらに座標e,gの中点からライン
A−A’に垂線を下ろし、その交点をAS と定義する
(ステップS364)。When a straight line crossing the start big bar 22A is obtained in this way, next, the intersections of the straight line and the equations defining the screen are set to A and A '(see FIG. 7A), respectively. Further, a perpendicular is drawn from the midpoint of the coordinates e and g to the line AA ', and the intersection is defined as A S (step S364).
【0099】そして、このラインA−A’上を点AS か
ら点Aに向けてデータを順に見ていき(ステップS36
5)、エッジが存在するかどうかをチェックする(ステ
ップS366)。このチェックは、例えば、輝度変化を
見る強度比較、微分法、2次微分法、等により行なうこ
とができる。こうして、エッジが検出されたならば、そ
の検出座標を座標変数iに格納する(ステップS36
7)。即ち、検出座標を点iとする。Then, the data is sequentially viewed from the point A S to the point A on the line AA ′ (step S36).
5) It is checked whether an edge exists (step S366). This check can be performed by, for example, an intensity comparison for observing a change in luminance, a differential method, a second differential method, or the like. In this way, when the edge is detected, the detected coordinates are stored in the coordinate variable i (step S36).
7). That is, the detected coordinate is set to point i.
【0100】次に、上記ラインA−A’上を点AS から
今度は点A’に向けてデータを順に見ていき(ステップ
S368)、エッジが存在するかどうかをチェックする
(ステップS369)。こうして、エッジが検出された
ならば、その検出座標を座標変数mに格納する(ステッ
プS36A)。即ち、検出座標を点mとする。Next, the data is sequentially examined on the line AA ′ from the point A S to the point A ′ this time (step S368), and it is checked whether an edge exists (step S369). . In this way, when the edge is detected, the detected coordinates are stored in the coordinate variable m (step S36A). That is, the detected coordinate is set to the point m.
【0101】そして、座標変数e,gで示される点e,
gを通る直線に座標変数iで示される点iから垂線を下
ろし、その交点の座標を座標変数aに格納する(ステッ
プS36B)。即ち、点iを通るラインA−A’と直交
する直線の方程式を求めて、それと点e,gを通る直線
の交点を求め、その交点を点aとする。Then, the points e, which are indicated by the coordinate variables e, g,
A perpendicular line is drawn from the point i indicated by the coordinate variable i on a straight line passing through g, and the coordinates of the intersection are stored in the coordinate variable a (step S36B). That is, the equation of a straight line orthogonal to the line AA ′ passing through the point i is obtained, the intersection of the line passing through the points e and g is obtained, and the intersection is defined as the point a.
【0102】同様に、座標変数e,gで示される点e,
gを通る直線に座標変数mで示される点mから垂線を下
ろし、その交点の座標を座標変数dに格納する(ステッ
プS36C)。即ち、点mを通るラインA−A’と直交
する直線の方程式を求めて、それと点e,gを通る直線
の交点を求め、その交点を点dとする。Similarly, the points e and g indicated by the coordinate variables e and g are
A perpendicular line is drawn from the point m indicated by the coordinate variable m on a straight line passing through g, and the coordinates of the intersection are stored in the coordinate variable d (step S36C). That is, the equation of a straight line orthogonal to the line AA ′ passing through the point m is obtained, the intersection of the straight line passing through the points e and g is obtained, and the intersection is defined as the point d.
【0103】そして、こうして求めた座標変数aの値を
座標変数TOPに、また座標変数dの値を座標変数BO
TTOMにそれぞれ格納した後(ステップS36D)、
上位のルーチンへ制御を戻す。The value of the coordinate variable a thus obtained is used as the coordinate variable TOP, and the value of the coordinate variable d is used as the coordinate variable BO.
After storing each in TTOM (step S36D),
Return control to the upper routine.
【0104】また、上記のようなラベル検出ルーチン中
のステップS38でコールされるストップエッジ位置検
出ルーチンも、このスタートエッジ位置検出ルーチンと
ほぼ同様にして行われる。図13は、このストップエッ
ジ位置検出ルーチンのフローチャートである。The stop edge position detection routine called in step S38 in the label detection routine as described above is also performed in substantially the same manner as this start edge position detection routine. FIG. 13 is a flowchart of this stop edge position detection routine.
【0105】即ち、まずストップ検出フラッグstop
_flagをONした後(ステップS381)、線分f
−hに平行な直線の方程式を定義、例えば線分f−hの
方程式y=ax+bを求める(ステップS382)。次
に、この直線がストップビックバー23Aをクロスする
ように、切片bを定義する(ステップS383)。こう
してストップビッグバー23Aをクロスする直線が得ら
れたならば、次に、その直線と画面を定義する方程式と
の交点をそれぞれB,B’(図7の(A)参照)とし、
さらに座標f,hの中点からラインB−B’に垂線を下
ろし、その交点をBS と定義する(ステップS38
4)。That is, first, the stop detection flag stop
After turning on _flag (step S381), the line segment f
An equation of a straight line parallel to −h is defined, for example, an equation y = ax + b of the line segment f−h is obtained (step S382). Next, the intercept b is defined so that this straight line crosses the stop big bar 23A (step S383). If a straight line crossing the stop big bar 23A is obtained in this way, next, the intersections of the straight line and the equations defining the screen are taken as B and B ′ (see (A) of FIG. 7), respectively.
Further, a perpendicular is drawn from the midpoint of the coordinates f and h to the line BB ', and the intersection is defined as B S (step S38).
4).
【0106】そして、このラインB−B’上を点BS か
ら点Bに向けてデータを順に見ていき(ステップS38
5)、エッジが存在するかどうかをチェックする(ステ
ップS386)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数jに格納する(ステップS
387)。即ち、検出座標を点jとする。Then, the data is sequentially viewed from the point B S to the point B on this line BB ′ (step S38).
5) Then, it is checked whether an edge exists (step S386). In this way, when the edge is detected, the detected coordinate is stored in the coordinate variable j (step S
387). That is, the detected coordinate is set to point j.
【0107】次に、上記ラインB−B’上を点BS から
今度は点B’に向けてデータを順に見ていき(ステップ
S388)、エッジが存在するかどうかをチェックする
(ステップS389)。こうして、エッジが検出された
ならば、その検出座標を座標変数kに格納する(ステッ
プS38A)。即ち、検出座標を点kとする。Next, the data is sequentially examined on the line BB ′ from the point B S to the point B ′ this time (step S388), and it is checked whether an edge exists (step S389). . In this way, when the edge is detected, the detected coordinates are stored in the coordinate variable k (step S38A). That is, the detected coordinate is set to the point k.
【0108】そして、座標変数f,hで示される点f,
hを通る直線に座標変数jで示される点jから垂線を下
ろし、その交点の座標を座標変数bに格納する(ステッ
プS38B)。即ち、点jを通るラインB−B’と直交
する直線の方程式を求めて、それと点f,hを通る直線
の交点を求め、その交点を点bとする。Then, the point f, which is indicated by the coordinate variables f, h,
A perpendicular line is drawn from the point j indicated by the coordinate variable j on a straight line passing through h, and the coordinates of the intersection are stored in the coordinate variable b (step S38B). That is, the equation of a straight line orthogonal to the line BB ′ passing through the point j is obtained, the intersection of the straight line passing through the points f and h is obtained, and the intersection is defined as the point b.
【0109】同様に、座標変数f,hで示される点f,
hを通る直線に座標変数kで示される点kから垂線を下
ろし、その交点の座標を座標変数cに格納する(ステッ
プS38C)。即ち、点kを通るラインB−B’と直交
する直線の方程式を求めて、それと点f,hを通る直線
の交点を求め、その交点を点cとする。Similarly, the points f and h indicated by the coordinate variables f and h are
A perpendicular line is drawn from the point k indicated by the coordinate variable k on a straight line passing through h, and the coordinates of the intersection are stored in the coordinate variable c (step S38C). That is, the equation of a straight line orthogonal to the line BB ′ passing through the point k is obtained, the intersection of the line passing through the points f and h is obtained, and the intersection is defined as the point c.
【0110】そして、こうして求めた座標変数bの値を
座標変数TOPに、また座標変数cの値を座標変数BO
TTOMにそれぞれ格納した後(ステップS38D)、
上位のルーチンへ制御を戻す。The value of the coordinate variable b thus obtained is used as the coordinate variable TOP, and the value of the coordinate variable c is used as the coordinate variable BO.
After storing each in TTOM (step S38D),
Return control to the upper routine.
【0111】次に、上記のようなラベル検出ルーチン中
のステップS3Eでコールされるラベルの傾きを求める
ルーチンを、図14のフローチャート及び図7の(B)
の行スキャンの場合のラベルの傾きを求めるため説明図
を参照して説明する。なお、図7の(B)は、4×1の
ラベルマトリックスを有する(従って、コード数は
「4」である)バーコードラベルを示しており、行スキ
ャンでスタートコード22が基準に選択された場合の例
を示しているものである。Next, a routine for obtaining the inclination of the label called in step S3E in the above label detection routine will be described with reference to the flowchart of FIG. 14 and FIG.
In order to obtain the inclination of the label in the case of the line scan, description will be made with reference to the explanatory diagram. It should be noted that FIG. 7B shows a bar code label having a 4 × 1 label matrix (therefore, the number of codes is “4”), and the start code 22 is selected on the basis of line scanning. It shows an example of the case.
【0112】即ち、まず行スキャンかどうかを判断し
(ステップS3E1)、行スキャンならばステップS3
E2へ、また列スキャンならばステップS3E4へと制
御を移す。That is, first, it is judged whether or not it is a row scan (step S3E1), and if it is a row scan, step S3.
Control is passed to E2, and if it is a column scan, control is passed to step S3E4.
【0113】行スキャンの場合には、まず座標変数BO
TTOMのx座標の値を、座標変数BOTTOMのy座
標の値から座標変数TOPのy座標の値を差し引いた結
果の値で割り、また座標変数TOPのx座標の値を、座
標変数BOTTOMのy座標の値から座標変数TOPの
y座標の値を差し引いた結果の値で割り、これら2つの
商の差を傾き変数SLOPEに格納する(ステップS3
E2)。次に、座標変数BOTTOMのy座標と座標変
数TOPのx座標とを乗じた結果を、座標変数BOTT
OMのy座標の値から座標変数TOPのy座標の値を差
し引いた結果の値で割り、また座標変数BOTTOMの
x座標と座標変数TOPのy座標とを乗じた結果を、座
標変数BOTTOMのy座標の値から座標変数TOPの
y座標の値を差し引いた結果の値で割り、これら2つの
商の差を切片変数intersectに格納する(ステ
ップS3E3)。なお、図中のアスタリスク*の上付き
文字は、乗算記号×を意味する。In the case of line scanning, first the coordinate variable BO
The x coordinate value of TTOM is divided by the value obtained by subtracting the y coordinate value of the coordinate variable TOP from the y coordinate value of the coordinate variable BOTTOM, and the x coordinate value of the coordinate variable TOP is y of the coordinate variable BOTTOM. It is divided by the value obtained by subtracting the value of the y coordinate of the coordinate variable TOP from the value of the coordinate, and the difference between these two quotients is stored in the slope variable SLOPE (step S3
E2). Next, the result of multiplying the y coordinate of the coordinate variable BOTTOM by the x coordinate of the coordinate variable TOP is the coordinate variable BOTT.
The result of subtracting the value of the y coordinate of the coordinate variable TOP from the value of the y coordinate of the OM is divided, and the result of multiplying the x coordinate of the coordinate variable BOTTOM and the y coordinate of the coordinate variable TOP is the y of the coordinate variable BOTTOM. It is divided by the value obtained by subtracting the y coordinate value of the coordinate variable TOP from the coordinate value, and the difference between these two quotients is stored in the intercept variable intersect (step S3E3). The superscript of asterisk * in the figure means the multiplication symbol x.
【0114】また、列スキャンの場合には、まず座標変
数BOTTOMのy座標の値を、座標変数BOTTOM
のx座標の値から座標変数TOPのx座標の値を差し引
いた結果の値で割り、また座標変数TOPのy座標の値
を、座標変数BOTTOMのx座標の値から座標変数T
OPのx座標の値を差し引いた結果の値で割り、これら
2つの商の差を傾き変数SLOPEに格納する(ステッ
プS3E4)。次に、座標変数BOTTOMのx座標と
座標変数TOPのy座標とを乗じた結果を、座標変数B
OTTOMのx座標の値から座標変数TOPのx座標の
値を差し引いた結果の値で割り、また座標変数BOTT
OMのy座標と座標変数TOPのx座標とを乗じた結果
を、座標変数BOTTOMのx座標の値から座標変数T
OPのx座標の値を差し引いた結果の値で割り、これら
2つの商の差を切片変数intersectに格納する
(ステップS3E5)。In the case of column scanning, first, the y coordinate value of the coordinate variable BOTTOM is set to the coordinate variable BOTTOM.
The value of the x coordinate of the coordinate variable TOP is divided by the value of the result of subtracting the value of the x coordinate of the coordinate variable TOP, and the value of the y coordinate of the coordinate variable TOP is converted from the value of the x coordinate of the coordinate variable BOTTOM to the coordinate variable T.
It is divided by the value obtained by subtracting the value of the x coordinate of OP, and the difference between these two quotients is stored in the slope variable SLOPE (step S3E4). Next, the result of multiplying the x coordinate of the coordinate variable BOTTOM by the y coordinate of the coordinate variable TOP is the coordinate variable B.
It is divided by the value obtained by subtracting the value of the x coordinate of the coordinate variable TOP from the value of the x coordinate of OTTOM, and the coordinate variable BOTT
The result of multiplying the y coordinate of OM and the x coordinate of coordinate variable TOP is the coordinate variable T from the value of the x coordinate of coordinate variable BOTTOM.
It is divided by the value obtained by subtracting the value of the x coordinate of OP, and the difference between these two quotients is stored in the intercept variable intersect (step S3E5).
【0115】次に、上記ステップS5でコールされる手
ぶれ検出ルーチンを、図15のフローチャートを参照し
て説明する。Next, the camera shake detection routine called in step S5 will be described with reference to the flowchart of FIG.
【0116】即ち、処理対象画像を今度はフレームメモ
リ6のBank1とし(ステップS51)、手ぶれ検出
用フラグverifyをOFFに初期化する(ステップ
S52)。そして、スタート検出フラッグstart_
flagがONかどうかを判断し(ステップS53)、
ONであれば詳細は後述するようなスタートコードベリ
ファイルルーチンをコールして(ステップS54)、ス
タートコード22に対してベリファイを行う。また、O
FFであれば、詳細は後述するようなストップコードベ
リファイルルーチンをコールして(ステップS55)、
ストップコード23に対してベリファイを行う。そし
て、手ぶれ検出用フラッグverifyがONであるか
どうかを判断する(ステップS56)ことにより、この
ベリファイ結果を判断する。この結果、手ぶれ検出フラ
ッグverifyがONならば、手ぶれなしの情報を持
ってリターンし、またそれがOFFならば手ぶれありの
情報を持ってリターンする。That is, the image to be processed is set to Bank1 of the frame memory 6 this time (step S51), and the camera shake detection flag verify is initialized to OFF (step S52). Then, the start detection flag start_
It is determined whether the flag is ON (step S53),
If it is ON, a start code verify file routine, which will be described in detail later, is called (step S54) to verify the start code 22. Also, O
If it is FF, a stop code verify file routine, which will be described in detail later, is called (step S55),
The stop code 23 is verified. Then, the verification result is determined by determining whether or not the camera shake detection flag verify is ON (step S56). As a result, if the camera shake detection flag verify is ON, it returns with information without camera shake, and if it is OFF, it returns with information with camera shake.
【0117】次に、上記のような手ぶれ検出ルーチン中
のステップS54でコールされるスタートコードベリフ
ァイルーチンを、図16のフローチャートを参照して説
明する。なお、図中の’を付けて示す座標は、イメージ
1(Bank1)で検出する位置を表している。即ち、
上記ステップS3でコールされるラベル検出ルーチンで
座標eを求めたとする。これはイメージ0(Bank
0)で検出してきたスタートコード22を最初に見つけ
た座標である。一方、座標e’は、上記座標eを見つけ
たのと同じ条件(スキャン方向やスキャン位置)でイメ
ージ1(Bank1)を走査し、求まった座標である。
即ち、イメージ0,イメージ1間でラベルに動きがなか
った場合、これらの座標e,e’は同一座標となるはず
である。ここで、手ぶれ誤差範囲AREAの値を例えば
2と設定すれば、画像間で座標eがそれぞれx,y方向
に±1画素以内のずれであれば、画像の動きはなかった
と判定する。Next, the start code verify routine called in step S54 in the above-mentioned camera shake detection routine will be described with reference to the flowchart of FIG. In addition, the coordinate shown by adding "in the figure" represents the position detected in the image 1 (Bank1). That is,
It is assumed that the coordinate e is obtained by the label detection routine called in step S3. This is image 0 (Bank
This is the coordinate at which the start code 22 detected in 0) is first found. On the other hand, the coordinate e ′ is the coordinate obtained by scanning the image 1 (Bank1) under the same conditions (scan direction and scan position) as when the coordinate e was found.
That is, when the label does not move between the image 0 and the image 1, the coordinates e and e'should be the same coordinates. Here, if the value of the camera shake error range AREA is set to 2, for example, it is determined that the image has not moved if the coordinates e are shifted within ± 1 pixel in the x and y directions.
【0118】即ち、まず行スキャンかどうか判断し(ス
テップS541)、行スキャンの場合にはステップS5
42へ進み、列スキャンの場合にはステップS548へ
制御を移す。That is, first, it is judged whether or not it is a row scan (step S541), and if it is a row scan, step S5.
In step 42, in the case of column scanning, control is transferred to step S548.
【0119】行スキャンの場合には、まずBank0で
検出した座標変数eのy座標の値で示されるラインのデ
ータをBank1から取り込み(ステップS542)、
スタートコード22が検出されるかどうか判断する(ス
テップS543)。検出されなかったならば、手ぶれ検
出フラッグverify=OFFの情報を持って上位の
ルーチンへリターンする。スタートコード22が検出さ
れた場合には、その検出座標を座標変数e’に格納した
後(ステップS544)、今度はBank0で検出した
座標変数gのy座標の値で示されるラインのデータをB
ank1から取り込み(ステップS545)、スタート
コード22が検出されるかどうか判断する(ステップS
546)。検出されなかったならば、手ぶれ検出フラッ
グverify=OFFの情報を持って上位のルーチン
へリターンする。スタートコード22が検出された場合
には、その検出座標を座標変数g’に格納した後(ステ
ップS547)、ステップS54Eへ進む。In the case of row scanning, first, the data of the line indicated by the y coordinate value of the coordinate variable e detected in Bank0 is fetched from Bank1 (step S542),
It is determined whether the start code 22 is detected (step S543). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the start code 22 is detected, the detected coordinates are stored in the coordinate variable e ′ (step S544), and then the data of the line indicated by the y coordinate value of the coordinate variable g detected by Bank0 is set to B.
It is fetched from ank1 (step S545), and it is determined whether the start code 22 is detected (step S545).
546). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the start code 22 is detected, the detected coordinates are stored in the coordinate variable g '(step S547), and the process proceeds to step S54E.
【0120】一方、列スキャンの場合には、まずBan
k0で検出した座標変数eのx座標の値で示されるライ
ンのデータをBank1から取り込み(ステップS54
8)、スタートコード22が検出されるかどうか判断す
る(ステップS549)。検出されなかったならば、手
ぶれ検出フラッグverify=OFFの情報を持って
上位のルーチンへリターンする。スタートコード22が
検出された場合には、その検出座標を座標変数e’に格
納した後(ステップS54A)、今度はBank0で検
出した座標変数gのx座標の値で示されるラインのデー
タをBank1から取り込み(ステップS54B)、ス
タートコード22が検出されるかどうか判断する(ステ
ップS54C)。検出されなかったならば、手ぶれ検出
フラッグverify=OFFの情報を持って上位のル
ーチンへリターンする。スタートコード22が検出され
た場合には、その検出座標を座標変数g’に格納する
(ステップS54D)。On the other hand, in the case of column scanning, first, Ban
The data of the line indicated by the value of the x coordinate of the coordinate variable e detected at k0 is fetched from Bank1 (step S54
8) It is determined whether the start code 22 is detected (step S549). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the start code 22 is detected, the detected coordinates are stored in the coordinate variable e ′ (step S54A), and then the data of the line indicated by the x coordinate value of the coordinate variable g detected by Bank0 is transferred to Bank1. Is taken in (step S54B), and it is determined whether the start code 22 is detected (step S54C). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the start code 22 is detected, the detected coordinates are stored in the coordinate variable g '(step S54D).
【0121】そして、座標変数eとe’の値の差の絶対
値及び座標変数gとg’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS54E)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。Then, the absolute value of the difference between the values of the coordinate variables e and e ′ and the absolute value of the difference between the values of the coordinate variables g and g ′ are taken to determine whether or not both absolute values are within the camera shake error range AREA. It is determined (step S54E). Shake error range ARE
If it is not within A, the camera shake detection flag verify = O
It returns to the upper routine with the information of FF.
【0122】このように、ステップS541からステッ
プS54Eでは、Bank0で検出した座標e,gに対
してBank1で許容誤差内にあるかどうかを検出判断
している。As described above, in steps S541 to S54E, it is determined whether or not the coordinates e and g detected in Bank0 are within the allowable error in Bank1.
【0123】こうして、許容誤差内にあると判断された
ならば、次に、線分e’−g’に平行な直線の方程式を
定義、例えば線分e’−g’の方程式y=ax+bを求
める(ステップS54F)。次に、この直線がスタート
ビックバー22Aをクロスするように、切片bを定義す
る(ステップS54G)。こうしてスタートビッグバー
22Aをクロスする直線が得られたならば、次に、その
直線と画面を定義する方程式との交点をそれぞれA,
A’、さらに座標e’,g’の中点からラインA−A’
に垂線を下ろし、その交点をAS と定義する(ステップ
S54H)。In this way, if it is judged to be within the tolerance, then the equation of a straight line parallel to the line segment e'-g 'is defined, for example, the equation y = ax + b of the line segment e'-g' is defined. Obtained (step S54F). Next, the intercept b is defined so that this straight line crosses the start big bar 22A (step S54G). If a straight line that crosses the start big bar 22A is obtained in this way, then the intersections of the straight line and the equations that define the screen are A, respectively.
A'and the line AA 'from the midpoint of the coordinates e', g '
, And define the intersection as A S (step S54H).
【0124】そして、このラインA−A’上を点AS か
ら点Aに向けてデータを順に見ていき(ステップS54
I)、エッジが存在するかどうかをチェックする(ステ
ップS54J)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数i’に格納する(ステップ
S54K)。即ち、検出座標を点i’とする。Then, the data is sequentially examined on this line AA 'from point A S to point A (step S54).
I), it is checked whether an edge exists (step S54J). In this way, when the edge is detected, the detected coordinate is stored in the coordinate variable i '(step S54K). That is, the detected coordinate is set to the point i '.
【0125】次に、上記ラインA−A’上を点AS から
今度は点A’に向けてデータを順に見ていき(ステップ
S54L)、エッジが存在するかどうかをチェックする
(ステップS54M)。こうして、エッジが検出された
ならば、その検出座標を座標変数m’に格納する(ステ
ップS54N)。即ち、検出座標を点m’とする。Next, the data is sequentially examined on the line AA ′ from the point A S to the point A ′ this time (step S54L), and it is checked whether an edge exists (step S54M). . In this way, when the edge is detected, the detected coordinate is stored in the coordinate variable m ′ (step S54N). That is, the detected coordinate is set to the point m '.
【0126】そして、座標変数iとi’の値の差の絶対
値及び座標変数mとm’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS54O)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ま
た、手ぶれ誤差範囲AREA内であれば、手ぶれ検出フ
ラッグverify=ONの情報を持って上位のルーチ
ンへリターンする。Then, the absolute value of the difference between the values of the coordinate variables i and i ′ and the absolute value of the difference between the values of the coordinate variables m and m ′ are taken to determine whether or not both absolute values are within the camera shake error range AREA. It is determined (step S54O). Shake error range ARE
If it is not within A, the camera shake detection flag verify = O
It returns to the upper routine with the information of FF. If it is within the camera shake error range AREA, the process returns to the upper routine with the information of camera shake detection flag verify = ON.
【0127】このように、ステップS54Fからステッ
プS54Oでは、Bank0で検出した座標i,mに対
してBank1で許容誤差内にあるかどうか検出判断し
ている。そして、すべてが許容範囲にある場合は、手ぶ
れ検出フラッグverifyをONとして制御を戻し、
一ヶ所でも許容範囲外の場合は、手ぶれ検出フラッグv
erifyをOFFとして制御を戻すようにしている。In this way, in steps S54F to S54O, it is determined whether or not the coordinates i, m detected in Bank0 are within the allowable error in Bank1. If all are within the allowable range, the camera shake detection flag verify is turned on and control is returned to
If even one place is outside the allowable range, the camera shake detection flag v
The control is returned by turning off erify.
【0128】次に、上記のような手ぶれ検出ルーチン中
のステップS55でコールされるストップコードベリフ
ァイルーチンを、図17のフローチャートを参照して説
明する。このストップコードベリファイルーチンは、上
記スタートコードベリファイルーチンとほぼ同様であ
る。Next, the stop code verify routine called in step S55 in the above-mentioned camera shake detection routine will be described with reference to the flowchart of FIG. This stop code verify routine is almost the same as the above start code verify routine.
【0129】即ち、まず行スキャンかどうか判断し(ス
テップS551)、行スキャンの場合にはステップS5
52へ進み、列スキャンの場合にはステップS558へ
制御を移す。That is, first, it is judged whether or not it is a row scan (step S551), and if it is a row scan, step S5.
In step 52, in the case of column scanning, control is transferred to step S558.
【0130】行スキャンの場合には、まずBank0で
検出した座標変数fのy座標の値で示されるラインのデ
ータをBank1から取り込み(ステップS552)、
ストップコード23が検出されるかどうか判断する(ス
テップS553)。検出されなかったならば、手ぶれ検
出フラッグverify=OFFの情報を持って上位の
ルーチンへリターンする。ストップコード23が検出さ
れた場合には、その検出座標を座標変数f’に格納した
後(ステップS554)、今度はBank0で検出した
座標変数hのy座標の値で示されるラインのデータをB
ank1から取り込み(ステップS555)、ストップ
コード23が検出されるかどうか判断する(ステップS
556)。検出されなかったならば、手ぶれ検出フラッ
グverify=OFFの情報を持って上位のルーチン
へリターンする。ストップコード23が検出された場合
には、その検出座標を座標変数h’に格納した後(ステ
ップS557)、ステップS55Eへ進む。In the case of row scanning, first, the data of the line indicated by the y-coordinate value of the coordinate variable f detected in Bank0 is fetched from Bank1 (step S552),
It is determined whether the stop code 23 is detected (step S553). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. If the stop code 23 is detected, the detected coordinates are stored in the coordinate variable f ′ (step S554), and then the data of the line indicated by the value of the y coordinate of the coordinate variable h detected by Bank0 is set to B.
It is read from ank1 (step S555), and it is determined whether the stop code 23 is detected (step S555).
556). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the stop code 23 is detected, the detected coordinates are stored in the coordinate variable h ′ (step S557), and the process proceeds to step S55E.
【0131】一方、列スキャンの場合には、まずBan
k0で検出した座標変数fのx座標の値で示されるライ
ンのデータをBank1から取り込み(ステップS55
8)、ストップコード23が検出されるかどうか判断す
る(ステップS559)。検出されなかったならば、手
ぶれ検出フラッグverify=OFFの情報を持って
上位のルーチンへリターンする。ストップコード23が
検出された場合には、その検出座標を座標変数f’に格
納した後(ステップS55A)、今度はBank0で検
出した座標変数hのx座標の値で示されるラインのデー
タをBank1から取り込み(ステップS55B)、ス
トップコード23が検出されるかどうか判断する(ステ
ップS55C)。検出されなかったならば、手ぶれ検出
フラッグverify=OFFの情報を持って上位のル
ーチンへリターンする。ストップコード23が検出され
た場合には、その検出座標を座標変数h’に格納する
(ステップS55D)。On the other hand, in the case of column scanning, first, Ban
The data of the line indicated by the value of the x coordinate of the coordinate variable f detected at k0 is fetched from Bank1 (step S55
8) It is determined whether the stop code 23 is detected (step S559). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the stop code 23 is detected, the detected coordinates are stored in the coordinate variable f ′ (step S55A), and then the data of the line indicated by the value of the x coordinate of the coordinate variable h detected by Bank0 is changed to Bank1. Is read (step S55B), and it is determined whether the stop code 23 is detected (step S55C). If it is not detected, the process returns to the higher-level routine with the information of camera shake detection flag verify = OFF. When the stop code 23 is detected, the detected coordinates are stored in the coordinate variable h '(step S55D).
【0132】そして、座標変数fとf’の値の差の絶対
値及び座標変数hとh’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS55E)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。Then, the absolute value of the difference between the values of the coordinate variables f and f ′ and the absolute value of the difference between the values of the coordinate variables h and h ′ are taken to determine whether or not both absolute values are within the camera shake error range AREA. It is determined (step S55E). Shake error range ARE
If it is not within A, the camera shake detection flag verify = O
It returns to the upper routine with the information of FF.
【0133】こうして、許容誤差内にあると判断された
ならば、次に、線分f’−h’に平行な直線の方程式を
定義、例えば線分f’−h’の方程式y=ax+bを求
める(ステップS55F)。次に、この直線がストップ
ビックバー23Aをクロスするように、切片bを定義す
る(ステップS55G)。こうしてストップビッグバー
23Aをクロスする直線が得られたならば、次に、その
直線と画面を定義する方程式との交点をそれぞれB,
B’、さらに座標f’,h’の中点からラインB−B’
に垂線を下ろし、その交点をBS と定義する(ステップ
S55H)。In this way, if it is judged to be within the tolerance, then the equation of a straight line parallel to the line segment f'-h 'is defined, for example, the equation y = ax + b of the line segment f'-h' is defined. Obtain (step S55F). Next, the intercept b is defined so that this straight line crosses the stop big bar 23A (step S55G). In this way, if a straight line crossing the stop big bar 23A is obtained, then the intersections of the straight line and the equations defining the screen are respectively B,
B'and the line BB 'from the midpoint of the coordinates f', h '
And the intersection is defined as B S (step S55H).
【0134】そして、このラインB−B’上を点BS か
ら点Bに向けてデータを順に見ていき(ステップS55
I)、エッジが存在するかどうかをチェックする(ステ
ップS55J)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数j’に格納する(ステップ
S55K)。即ち、検出座標を点j’とする。Then, the data is sequentially examined on this line BB ′ from the point B S to the point B (step S55).
I), it is checked whether an edge exists (step S55J). In this way, when the edge is detected, the detected coordinates are stored in the coordinate variable j '(step S55K). That is, the detected coordinate is set to point j '.
【0135】次に、上記ラインB−B’上を点BS から
今度は点B’に向けてデータを順に見ていき(ステップ
S55L)、エッジが存在するかどうかをチェックする
(ステップS55M)。こうして、エッジが検出された
ならば、その検出座標を座標変数k’に格納する(ステ
ップS55N)。即ち、検出座標を点k’とする。Next, the data is sequentially examined on the line BB ′ from the point B S to the point B ′ this time (step S55L), and it is checked whether an edge exists (step S55M). . In this way, when the edge is detected, the detected coordinates are stored in the coordinate variable k '(step S55N). That is, the detected coordinate is set to the point k '.
【0136】そして、座標変数jとj’の値の差の絶対
値及び座標変数kとk’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS55O)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ま
た、手ぶれ誤差範囲AREA内であれば、手ぶれ検出フ
ラッグverify=ONの情報を持って上位のルーチ
ンへリターンする。Then, the absolute value of the difference between the values of the coordinate variables j and j ′ and the absolute value of the difference between the values of the coordinate variables k and k ′ are taken to determine whether or not both absolute values are within the camera shake error range AREA. It is determined (step S55O). Shake error range ARE
If it is not within A, the camera shake detection flag verify = O
It returns to the upper routine with the information of FF. If it is within the camera shake error range AREA, the process returns to the upper routine with the information of camera shake detection flag verify = ON.
【0137】次に、上記ステップS7でコールされるし
きい値決定ルーチンを、図18のフローチャートと図1
9の(A)及び(B)のしきい値算出説明図を参照して
説明する。Next, the threshold value determination routine called in step S7 will be described with reference to the flowchart of FIG.
This will be described with reference to FIGS. 9A and 9B which are explanatory diagrams of threshold calculation.
【0138】即ち、まずスタート検出フラッグstar
t_flagがONかどうか、つまり上記ステップS3
でコールされたラベル検出ルーチンで処理対象として選
択されたのがスタートコード22であるのかストップコ
ード23であるのかを判断する(ステップS71)。ス
タートコード22である場合は、点eの値を点pに代入
し(ステップS72)、ストップコード23の場合は点
fの値を点pに代入する(ステップS73)。即ち、し
きい値を決定するためのデータ列の始点座標を座標変数
pに格納する。これにより、例えばスタートコード22
の場合には図19の(A)に示すように、始点座標が決
定される。That is, first, the start detection flag star
Whether t_flag is ON, that is, the above step S3
It is determined whether the start code 22 or the stop code 23 is selected as the processing target in the label detection routine called in step S71. If it is the start code 22, the value of the point e is substituted for the point p (step S72), and if it is the stop code 23, the value of the point f is substituted for the point p (step S73). That is, the starting point coordinates of the data string for determining the threshold value are stored in the coordinate variable p. This allows, for example, start code 22
In this case, the starting point coordinates are determined as shown in FIG.
【0139】次に、行スキャンであるかどうか判断し
(ステップS74)、行スキャンの場合にはステップS
75へ、また列スキャンの場合にはステップS79へ処
理を移す。即ち、ステップS74で行スキャンデコー
ド、つまり座標変数e,f,g,hを見つける処理に用
いた方向を見つけたかどうかを判断させ、行スキャンな
らステップS75からステップS78の処理を行い、列
スキャンならステップS79からステップS7Cの処理
を行う。Next, it is judged whether or not it is a row scan (step S74), and if it is a row scan, step S74.
75, and in the case of column scanning, the process proceeds to step S79. That is, in step S74, it is determined whether or not the direction used for the row scan decoding, that is, the processing for finding the coordinate variables e, f, g, and h is found. If the row scan, the processing from step S75 to step S78 is performed, and if the column scan, The processing from step S79 to step S7C is performed.
【0140】即ち、行スキャンの場合には、座標変数p
のy座標の値で示されるライン、つまり図19の(A)
に示されるようなデータ取り込みラインのデータをフレ
ームメモリ6のBank0から取り込み(ステップS7
5)、スタートコード22もしくはストップコード23
の終わりx座標を点qのx座標とする(ステップS7
6)。そして、点pから点qまでのデータを微分する
(ステップS77)。これにより、例えば図19の
(A)のデータ取り込みラインの場合には、図19の
(B)に示すようなスタートコード22の微分波形が求
まる。そして、この微分データの3番目のピークの絶対
値を変数MAXとする(ステップS78)。That is, in the case of row scanning, the coordinate variable p
The line indicated by the y-coordinate value of, that is, (A) in FIG.
The data of the data capture line as shown in (4) is captured from Bank0 of the frame memory 6 (step S7
5), start code 22 or stop code 23
The x coordinate of the end of is set to the x coordinate of the point q (step S7).
6). Then, the data from the point p to the point q is differentiated (step S77). As a result, for example, in the case of the data capture line of FIG. 19A, the differential waveform of the start code 22 as shown in FIG. 19B is obtained. Then, the absolute value of the third peak of this differential data is set as the variable MAX (step S78).
【0141】一方、列スキャンの場合には、座標変数p
のx座標の値で示されるラインのデータをフレームメモ
リ6のBank0から取り込み(ステップS79)、ス
タートコード22もしくはストップコード23の終わり
y座標を点qのy座標とする(ステップS7A)。そし
て、点pから点qまでのデータを微分する(ステップS
7B)。そして、この微分データの3番目のピークの絶
対値を変数MAXとする(ステップS7C)。On the other hand, in the case of column scanning, the coordinate variable p
The data of the line indicated by the value of the x coordinate of is fetched from Bank0 of the frame memory 6 (step S79), and the end y coordinate of the start code 22 or the stop code 23 is set as the y coordinate of the point q (step S7A). Then, the data from the point p to the point q is differentiated (step S
7B). Then, the absolute value of the third peak of this differential data is set as the variable MAX (step S7C).
【0142】ここで、微分データの3番目を見る理由
は、概念的に、バーコード領域内で最もコントラストが
低くなる(即ち、エッジの微分ピークが最も低い)とこ
ろでしきい閾値を決定したいということから、ラベルの
バーとスペースの間隔が最も狭いところであるスタート
もしくはストップコードの第3エッジを選択するように
しているということによる。これにより、ラベルサイズ
やラベルの照明条件によらず安定的なデコードが可能と
なる。Here, the reason for looking at the third differential data is that, conceptually, we want to determine the threshold threshold value where the contrast becomes the lowest in the barcode area (that is, the edge differential peak is the lowest). Therefore, the third edge of the start or stop code, which is the place where the space between the label bar and the space is the smallest, is selected. This enables stable decoding regardless of label size and label illumination conditions.
【0143】そして、こうして求めた変数MAXの値を
ピークに対する比率の定数THRESHOLD_RAT
IOで割り、その結果をしきい値変数THRESHOL
Dに代入する(ステップS7D)。即ち、求められたデ
ータからしきい値をかりに求める。なお、定数THRE
SHOLD_RATIOとは、ピークの何分の一をしき
い値に選ぶかを示す値であり、通常は、「2」あるいは
「3」に設定される。Then, the value of the variable MAX thus obtained is set as a constant THRESHOLD_RAT of the ratio to the peak.
Divide by IO and divide the result by the threshold variable THRESHOL
Substitute for D (step S7D). That is, the threshold value is obtained from the obtained data. The constant THRE
SHOLD_RATIO is a value indicating which fraction of the peak is selected as the threshold value, and is normally set to "2" or "3".
【0144】次に、こうしてかりに求めたしきい値TH
RESHOLDの値が、最小しきい値定数THRESH
OLD_SMALLよりも大きく(ステップS7E)、
且つ最大しきい値定数THRESHOLD_BIGより
も小さいかどうか判断する(ステップS7F)。即ち、
かりに求められたしきい値が、しきい値の取り得る範囲
内に存在するかどうかを判断する。定数THERESH
OLD_BIGで示される最大値を越える場合には、定
数THERESHOLD_BIGで示される最大値をし
きい値変数THRESHOLDに代入、つまりしきい値
を最大値に設定する(ステップS7H)。また、定数T
HRESHOLD_SMALLで示される最小値未満の
場合は、定数THERESHOLD_SMALLで示さ
れる最小値をしきい値変数THRESHOLDに代入、
つまりしきい値を最小値に設定する。Next, the threshold value TH thus obtained is obtained.
The value of RESHOLD is the minimum threshold constant THRESH
Greater than OLD_SMALL (step S7E),
Further, it is determined whether or not it is smaller than the maximum threshold constant THRESHOLD_BIG (step S7F). That is,
It is determined whether or not the threshold value obtained in the above step is within the range of the threshold value. Constant THERESH
If the maximum value indicated by OLD_BIG is exceeded, the maximum value indicated by the constant THERESHOLD_BIG is substituted into the threshold variable THRESHOLD, that is, the threshold value is set to the maximum value (step S7H). Also, the constant T
When it is less than the minimum value indicated by HRESHOLD_SMALL, the minimum value indicated by the constant THERESHOLD_SMALL is assigned to the threshold variable THRESHOLD,
That is, the threshold is set to the minimum value.
【0145】次に、上記ステップS8でコールされるイ
ンディケータ情報決定ルーチンを、図20のフローチャ
ート及び図21の(A)のフレームメモリへの投影像の
図を参照して説明する。なお、図21の(A)は、4×
1のラベルマトリックスを有する(従って、コード数は
「4」である)バーコードラベルを示しており、行スキ
ャンでスタートコード22が基準に選択された場合の例
を示している。Next, the indicator information determination routine called in step S8 will be described with reference to the flow chart of FIG. 20 and the projection image onto the frame memory of FIG. Note that FIG. 21A shows 4 ×
A bar code label having a label matrix of 1 (therefore, the number of codes is "4") is shown, and an example in the case where the start code 22 is selected as a reference in the row scanning is shown.
【0146】即ち、まずロウインディケータ情報を読み
取るための基準座標の始点として、ラベルのトップ座標
TOPの値を座標変数WORKに格納する(ステップS
81)。次に、この座標変数WORKを通り、ラベルの
傾き変数SLOPEで示される傾きを持つ直線lを定義
し(ステップS82)、この直線lが画面枠とクロスす
る点W1,W2を定義する(ステップS83)。そし
て、線分W1−W2上の画像データを取り込み(ステッ
プS84)、その中に含まれるロウインディケータ情報
を読み取る(ステップS85)。That is, first, the value of the top coordinate TOP of the label is stored in the coordinate variable WORK as the starting point of the reference coordinate for reading the row indicator information (step S).
81). Next, a straight line 1 passing through this coordinate variable WORK and having a slope indicated by the slope variable SLOPE of the label is defined (step S82), and points W1 and W2 at which this straight line 1 crosses the screen frame are defined (step S83). ). Then, the image data on the line segment W1-W2 is fetched (step S84), and the row indicator information contained therein is read (step S85).
【0147】ここで、ロウインディケータ情報の読み取
りは、例えば次のようにして行う。即ち、上記ステップ
S84で取り込まれた対象ライン上の画像データつまり
白黒の画素値からエッジを検出し、幅情報に変換する。
そして、この幅情報からスタートコード22を検出し、
そのスタートコード22の次のコードがロウインディケ
ータ21Aであることがわかっているので、それを読み
込む。また同様に、ストップコード23を検出し、その
ストップコード23の直前のコードがロウインディケー
タ21Aであることもわかっているため、それを読み込
む。こうして、ロウインディケータ21Aが読み取れた
ならば、それを不図示のバーコード表と比較し、一致す
る部分をコードに、つまり行数,列数,セキュリティレ
ベル等の情報に変換する。なお、幅情報への変換は、種
々の手法があるが、例えば後述するような幅情報への変
換ルーチンをコールすることにより行うことかできる。Here, the reading of the row indicator information is performed as follows, for example. That is, an edge is detected from the image data on the target line captured in step S84, that is, a black and white pixel value, and converted into width information.
Then, the start code 22 is detected from this width information,
Since it is known that the code next to the start code 22 is the row indicator 21A, it is read. Similarly, the stop code 23 is detected, and it is also known that the code immediately before the stop code 23 is the row indicator 21A, so that it is read. In this way, when the row indicator 21A is read, it is compared with a bar code table (not shown), and the matching portion is converted into a code, that is, information such as the number of rows, the number of columns, and the security level. There are various methods for conversion into the width information, but it can be performed by calling a width information conversion routine as described later.
【0148】次に、ロウインディケータ情報が確定した
か否かをチェックし(ステップS86)、確定したなら
ば制御をステップS8Eに移す。確定しないならば、ス
テップS87に制御を移す。ここで、確定とは、何回か
ロウインディケータ21Aを読み込み、情報の信頼度が
十分上がった場合のことを意味する。例えば、ロウイン
ディケータ21Aに書かれている情報(行数,列数,セ
キュリティレベル)が10回読んだならば、その10回
とも同じ情報が得られた場合、確定されたとする。Next, it is checked whether or not the row indicator information has been decided (step S86), and if it has been decided, the control moves to step S8E. If not confirmed, the control is transferred to step S87. Here, “determined” means that the row indicator 21A is read several times and the reliability of the information is sufficiently improved. For example, if the information (the number of rows, the number of columns, and the security level) written in the row indicator 21A is read 10 times, and if the same information is obtained 10 times, it is assumed that it has been confirmed.
【0149】ロウインディケータ情報が確定しない場合
は、次に行スキャンかどうかをチェックし(ステップS
87)、行スキャンの場合はステップS88に、列スキ
ャンの場合はステップS8Bに制御を移す。If the row indicator information is not confirmed, then it is checked whether or not it is a row scan (step S
87), in the case of row scanning, control is transferred to step S88, and in the case of column scanning, control is transferred to step S8B.
【0150】即ち、行スキャンの場合には、座標変数W
ORKのy座標の値に所定の増分L_INCを加えて、
その結果を新たな座標変数WORKのy座標値として代
入する(ステップS88)。また、ラベルの傾き変数S
LOPEの値に座標変数WORKのy座標の値を乗じ、
その結果にラベルの切片変数intersectを加え
て、その結果を新たな座標変数WORKのx座標値とし
て代入する(ステップS89)。こうして新たにスキャ
ンするための基準座標を座標変数WORKに再設定す
る。そして、この再設定された座標変数WORKのy座
標値がラベルのボトム座標変数BOTTOMのy座標値
を越えているかどうか、つまりラベル領域内かどうかを
判断し(ステップS8A)、ラベル領域内であれば上記
ステップS82から繰り返し、ラベル領域外の場合はマ
トリックス未定義の情報を持って上位のルーチンへリタ
ーンする。That is, in the case of row scanning, the coordinate variable W
Add a predetermined increment L_INC to the value of the y coordinate of ORK,
The result is substituted as the y coordinate value of the new coordinate variable WORK (step S88). Also, the label tilt variable S
Multiply the LOPE value by the y-coordinate value of the coordinate variable WORK,
The intercept variable intersect of the label is added to the result, and the result is substituted as the x coordinate value of a new coordinate variable WORK (step S89). In this way, the reference coordinate for newly scanning is reset to the coordinate variable WORK. Then, it is judged whether or not the y coordinate value of the reset coordinate variable WORK exceeds the y coordinate value of the bottom coordinate variable BOTTOM of the label, that is, whether it is within the label area (step S8A), and if it is within the label area. For example, the process is repeated from step S82, and if it is outside the label area, it returns to the upper routine with the matrix undefined information.
【0151】列スキャンの場合も同様に、まず座標変数
WORKのx座標の値に所定の増分L_INCを加え
て、その結果を新たな座標変数WORKのx座標値とし
て代入する(ステップS8B)。また、ラベルの傾き変
数SLOPEの値に座標変数WORKのx座標の値を乗
じ、その結果にラベルの切片変数intersectを
加えて、その結果を新たな座標変数WORKのy座標値
として代入する(ステップS8C)。こうして新たにス
キャンするための基準座標を座標変数WORKに再設定
し、この再設定された座標変数WORKのy座標値がラ
ベルのボトム座標変数BOTTOMのy座標値を越えて
いるかどうか、つまりラベル領域内かどうかを判断する
(ステップS8D)。そして、ラベル領域内であれば上
記ステップS82から処理を繰り返し、ラベル領域外の
場合はマトリックス未定義の情報を持って上位のルーチ
ンへリターンする。Similarly in the case of the column scan, first, a predetermined increment L_INC is added to the value of the x coordinate of the coordinate variable WORK, and the result is substituted as the x coordinate value of the new coordinate variable WORK (step S8B). Also, the value of the label slope variable SLOPE is multiplied by the value of the x coordinate of the coordinate variable WORK, the label intercept variable intersect is added to the result, and the result is substituted as the y coordinate value of the new coordinate variable WORK (step S8C). In this way, the reference coordinates for newly scanning are reset to the coordinate variable WORK, and whether the y coordinate value of the reset coordinate variable WORK exceeds the y coordinate value of the bottom coordinate variable BOTTOM of the label, that is, the label area It is determined whether it is within the range (step S8D). If it is within the label area, the process is repeated from step S82, and if it is outside the label area, it returns to the upper routine with the matrix undefined information.
【0152】一方、上記ステップS86で、ロウインデ
ィケータ21Aが確定したと判断した場合は、ロウイン
ディケータ情報から得られたセキュリティレベルから修
復可能なコード数を算出し、それがREST_NUMに
格納される(ステップS8E)。さらに、ロウインディ
ケータ情報から得られたラベルの行数が、ラベルのロウ
数変数ROW_NUMBERに格納される(ステップS
8F)。また、ロウインディケータ情報からラベルの列
数が抽出され、ラベルのカラム数変数COLUMN_N
UMBERに格納される(ステップS8G)。その後、
マトリックスが定義されたという情報を持って上位のル
ーチンへ制御を戻す。On the other hand, when it is determined in step S86 that the row indicator 21A has been confirmed, the number of recoverable codes is calculated from the security level obtained from the row indicator information and stored in REST_NUM (step S8E). Further, the number of rows of the label obtained from the row indicator information is stored in the row number variable ROW_NUMBER of the label (step S
8F). Further, the number of label columns is extracted from the row indicator information, and the label column number variable COLUMN_N
It is stored in UMBER (step S8G). afterwards,
Return control to the higher level routine with the information that the matrix has been defined.
【0153】次に、上記ステップSAでコールされるス
キャン方程式決定ルーチンを、図22及び図23の
(A)の一連のフローチャート及び図21の(B)のフ
レームメモリへの投影像の図を参照して説明する。な
お、図21の(B)は、4×1のラベルマトリックスを
有する(従って、コード数は「4」である)バーコード
ラベルを示しており、行スキャンでスタートコード22
が基準に選択された場合の例を示している。Next, the scan equation determination routine called in the above step SA will be referred to with reference to a series of flowcharts of FIGS. 22 and 23 and a diagram of a projected image on the frame memory of FIG. 21B. And explain. 21B shows a bar code label having a 4 × 1 label matrix (therefore, the number of codes is “4”).
An example in which is selected as a reference is shown.
【0154】即ち、まず変数counterを0に初期
化し(ステップSA1)、また基準座標変数WORKを
ラベルのトップ座標変数TOPの値に初期化する(ステ
ップSA2)。That is, first, the variable counter is initialized to 0 (step SA1), and the reference coordinate variable WORK is initialized to the value of the top coordinate variable TOP of the label (step SA2).
【0155】次に行スキャンか列スキャンか判断し(ス
テップSA3)、行スキャンの場合には、ラベルのボト
ム座標変数BOTTOMのy座標値とラベルのトップ座
標変数TOPのy座標値との差を、変数count_e
ndに代入する(ステップSA4)。即ち、決定しなけ
ればならないパターン数(図21の(B)の場合ではラ
ベルの列方向の画素数)を求め、変数count_en
dに格納する。つまり、パターン数とは、ラベル全面を
走査するための数である。Next, it is judged whether it is a row scan or a column scan (step SA3). In the case of a row scan, the difference between the y coordinate value of the label bottom coordinate variable BOTTOM and the y coordinate value of the label top coordinate variable TOP is determined. , Variable count_e
Substitute for nd (step SA4). That is, the number of patterns to be determined (the number of pixels in the label column direction in the case of FIG. 21B) is calculated, and the variable count_en
Store in d. That is, the number of patterns is a number for scanning the entire label surface.
【0156】同様に、列スキャンの場合には、ラベルの
ボトム座標変数BOTTOMのx座標値とラベルのトッ
プ座標変数TOPのx座標値との差を、変数count
_endに代入する(ステップSA5)。Similarly, in the case of column scanning, the difference between the x coordinate value of the bottom coordinate variable BOTTOM of the label and the x coordinate value of the top coordinate variable TOP of the label is calculated as the variable count.
Substitute for _end (step SA5).
【0157】次に、再度行スキャンか列スキャンかを判
断し(ステップSA6)、行スキャンの場合には、ラベ
ルのトップ座標変数TOPのy座標値に変数count
erの値を加算し、その結果を基準座標変数WORKの
y座標値として代入する(ステップSA7)。また、ラ
ベルの傾き変数SLOPEの値に基準座標変数WORK
のy座標の値を乗じ、その結果にラベルの切片変数in
tersectを加えて、その結果を新たな基準座標変
数WORKのx座標値として代入する(ステップSA
8)。このように、変数counter値の増加にとも
ない基準座標変数WORKを再設定している。Next, it is judged again whether it is a row scan or a column scan (step SA6). In the case of a row scan, the variable count is set as the y coordinate value of the top coordinate variable TOP of the label.
The value of er is added, and the result is substituted as the y coordinate value of the reference coordinate variable WORK (step SA7). Also, the value of the slope variable SLOPE of the label is set to the reference coordinate variable WORK
Multiply the value of y-coordinate of
tersct is added, and the result is substituted as the x coordinate value of the new reference coordinate variable WORK (step SA
8). In this way, the reference coordinate variable WORK is reset with the increase of the variable counter value.
【0158】列スキャンの場合も同様に、ラベルのトッ
プ座標変数TOPのx座標値に変数counterの値
を加算し、その結果を基準座標変数WORKのx座標値
として代入する(ステップSA9)。また、ラベルの傾
き変数SLOPEの値に基準座標変数WORKのx座標
の値を乗じ、その結果にラベルの切片変数inters
ectを加えて、その結果を新たな基準座標変数WOR
Kのy座標値として代入する(ステップSAA)。Similarly in the case of column scanning, the value of the variable counter is added to the x coordinate value of the label top coordinate variable TOP, and the result is substituted as the x coordinate value of the reference coordinate variable WORK (step SA9). Also, the value of the label tilt variable SLOPE is multiplied by the value of the x coordinate of the reference coordinate variable WORK, and the result is the label intercept variable inters.
ect, and the result is a new reference coordinate variable WOR.
It is substituted as the y coordinate value of K (step SAA).
【0159】次に、この再設定された座標変数WORK
を通り、ラベルの傾き変数SLOPEで示される傾きを
持つ直線lを定義し(ステップSAB)、この直線lが
画面枠と交差する2点を求め、それぞれを座標変数の配
列DIM_POINT_P及びDIM_POINT_Q
のcounter番目(変数counterの値が示す
配列の番号)に格納する(ステップSAC)。Next, this reset coordinate variable WORK
, A straight line 1 having a slope indicated by the slope variable SLOPE of the label is defined (step SAB), two points at which this straight line l intersects the screen frame are obtained, and the respective points are arranged as coordinate variable arrays DIM_POINT_P and DIM_POINT_Q.
In the counter (the number of the array indicated by the value of the variable counter) (step SAC).
【0160】その後、変数counter値をインクリ
メントし(ステップSAD)、その結果の再設定された
変数counter値が必要数、即ち変数counte
r_endに達したかどうかをチェックする(ステップ
SAE)。必要数に達しない場合は制御を上記ステップ
SA6に戻し、必要数に達した場合は制御をステップS
AFに移す。以上の動作によって、ラベルを順次走査す
る場合の始点と終点の組み合わせが定義される。Then, the variable counter value is incremented (step SAD), and the resulting reset variable counter value is the required number, that is, variable count.
It is checked whether r_end has been reached (step SAE). If the required number is not reached, the control is returned to step SA6, and if the required number is reached, the control is performed in step S6.
Move to AF. By the above operation, the combination of the start point and the end point when the labels are sequentially scanned is defined.
【0161】次に、再度変数counterを0に初期
化する(ステップSAF)。そして、ラベルの傾き変数
SLOPEの値に変数counter値を乗じることに
より、計算されているラベルの傾きSLOPEの位置に
よる増加分が計算され、この計算結果を変数の配列LI
NE_INCの所定の位置(変数counterで示さ
れる位置)に格納する(ステップSAG)。Next, the variable counter is initialized to 0 again (step SAF). Then, by multiplying the value of the label slope variable SLOPE by the variable counter value, the increment due to the position of the calculated label slope SLOPE is calculated, and this calculation result is used as the variable array LI.
The data is stored in a predetermined position of NE_INC (position indicated by the variable counter) (step SAG).
【0162】その後、変数counterをインクリメ
ントした後(ステップSAH)、この再設定された変数
counterが配列の最大サイズ定数MAX_NUM
に達したかどうかをチェックする(ステップSAI)。
達していない場合は上記ステップSAGに制御を移し、
達した場合には上位のルーチンへ制御を戻す。Then, after incrementing the variable counter (step SAH), the reset variable counter is the maximum size constant MAX_NUM of the array.
(Step SAI).
If not reached, the control is transferred to the above step SAG,
When it reaches, control is returned to the upper routine.
【0163】このステップSAFからステップSAIの
ループによって、ラベル情報を1ライン取り込む場合の
傾きパターンが得られる。By the loop from step SAF to step SAI, an inclination pattern when one line of label information is taken in can be obtained.
【0164】なお、上記配列の最大サイズ定数MAX_
NUMは、プログラム作成時に定める変数のサイズを示
すもので、例えば、フレームメモリ6のサイズが640
×480画素であると仮定すれば、1000程とってお
けば良い。The maximum size constant MAX_ of the above array
NUM indicates the size of the variable determined when the program is created. For example, the size of the frame memory 6 is 640.
Assuming x480 pixels, about 1000 should be set.
【0165】次に、図6のフローチャート及び図7の
(A)のラベル投影像の図(この図に、4×1のラベル
マトリックスを有する(従って、コード数は「4」であ
る)バーコードラベルを示している)を参照して、上記
ステップS3でコールされるラベル検出ルーチンを説明
する。このラベル検出ルーチンは、ラベルの有無を検出
することと、ラベルの位置情報を検出すること即ちラベ
ルに平行に画像データをフレームメモリ6から抽出する
ための抽出範囲(変数TOP及びBOTTOM)とラベ
ルの傾き(変数SLOPE)を求めることとの2種類の
ラベル検出処理を含む。ここで、変数TOPの値はラベ
ルのトップ座標を示し、また変数BOTTOMの内容は
ラベルのボトム座標を示す。また変数SLOPEの内容
はラベルの傾きを示す。Next, the flowchart of FIG. 6 and the label projection image of FIG. 7A (the bar code having a 4 × 1 label matrix in this figure (therefore, the number of codes is “4”)) The label detection routine called in step S3 will be described with reference to FIG. This label detection routine detects the presence or absence of the label, detects the position information of the label, that is, the extraction range (variables TOP and BOTTOM) for extracting the image data from the frame memory 6 in parallel with the label and the label. It includes two types of label detection processing of obtaining the slope (variable SLOPE). Here, the value of the variable TOP indicates the top coordinate of the label, and the content of the variable BOTTOM indicates the bottom coordinate of the label. The content of the variable SLOPE indicates the inclination of the label.
【0166】次に、上記ステップSBでコールされる埋
め込チェックルーチンを図24のフローチャート及び図
25のフレームメモリへの投影像の図を参照にして説明
する。なお、図25は、4×3のラベルマトリックスを
有する(従って、コード数は「12」である)バーコー
ドラベルを示しており、行スキャンでスタートコード2
2が基準に選択された場合の例を示している。またここ
で、ラベルマトリックスの各コードのデータを確定する
ことを“埋め込”と称し、“埋め込チェック”とは、埋
め込パターンを定義しつつデコードできるかをチェック
するという意味である。つまりこのルーチンは、ラベル
の各コードの座標位置の推定と、その推定された座標位
置の情報をもとに修復可能な個数のコードが画面内にで
ているかどうかの判断を行うものである。Next, the embedding check routine called in step SB will be described with reference to the flowchart of FIG. 24 and the diagram of the projected image on the frame memory of FIG. Note that FIG. 25 shows a bar code label having a 4 × 3 label matrix (therefore, the number of codes is “12”).
2 shows an example in which 2 is selected as a reference. In addition, fixing the data of each code of the label matrix is referred to as "embedding", and "embedding check" means checking whether decoding is possible while defining an embedding pattern. That is, this routine estimates the coordinate position of each code on the label and determines whether or not the number of recoverable codes is present on the screen based on the information on the estimated coordinate position.
【0167】即ち、詳細は後述するようなROW検出ル
ーチンをコールして(ステップSB1)、ラベルをスキ
ャンした場合、最初と最後に見つかるロウの各種情報
(検出ライン番号,コードの長さ,ロウ番号,検出位
置)を検出し、それぞれ変数ROW_FIRST,RO
W_LASTに格納する。More specifically, when a ROW detection routine, which will be described in detail later, is called (step SB1) and the label is scanned, various information of the first and last rows found (detection line number, code length, row number). , Detecting position) and detecting variables ROW_FIRST and RO, respectively.
Store in W_LAST.
【0168】次に、変数ROW_FIRSTとROW_
LASTとも確定したか否かをチェックし(ステップS
B2)、確定したならば制御をステップSB3に移す。
確定しないならば、デコード不可能として上位ルーチン
にその制御を移す。Next, the variables ROW_FIRST and ROW_
It is checked whether or not the LAST is also confirmed (step S
B2), if confirmed, shifts the control to step SB3.
If it is not confirmed, it is determined that decoding is not possible and the control is transferred to the upper routine.
【0169】こうして、変数ROW_FIRSTとRO
W_LASTとも確定していると判断されたならば、次
に、コードマトリックスの各コードの先頭位置座標を演
算して推定し、2次元配列変数CODE_POSのそれ
ぞれのコードのロウ番号,カラム番号番目に格納する
(ステップSB3)。ここで、各コード先頭座標位置
は、例えば、次のようにして推定されることができる。
即ち、まず、それぞれのロウインディケータ21Aの位
置を検出しなければならない。そのためには、変数RO
W_FIRSTのロウ番号ととその検出位置、変数RO
W_LASTのロウ番号とその検出位置、さらにはマト
リックスサイズ中のROW_NUMBERから、通常の
場合は内挿だけで、図25に於けるスタートコード22
方向のロウインジケータ21Aの先頭の記号“○”で示
される4点の座標位置が求まってくる。次に、その4点
からストップコード23方向に広がるカラム方向につい
て、起点はロウインディケータ21Aの位置から、ラベ
ルの傾きslopeとラベルの関係で90°回転してい
るという傾きで、さらにコードの長さで倍々で演算して
行けば、CODE_POS[0][0],CODE_P
OS[0][1],CODE_POS[0][2],…
という順番で各コード先頭座標位置(図25中、記号
“○”で示す)は求まっていく。Thus, the variables ROW_FIRST and RO
If it is determined that W_LAST is also determined, then the start position coordinates of each code in the code matrix are calculated and estimated, and stored in the row number and column number th of each code of the two-dimensional array variable CODE_POS. Yes (step SB3). Here, each code head coordinate position can be estimated as follows, for example.
That is, first, the position of each row indicator 21A must be detected. For that, the variable RO
Row number of W_FIRST and its detection position, variable RO
From the row number of W_LAST and its detection position, and ROW_NUMBER in the matrix size, in the normal case, only interpolation is used, and the start code 22 in FIG.
The coordinate positions of the four points indicated by the symbol “◯” at the head of the row indicator 21A in the direction are obtained. Next, with respect to the column direction extending from the four points in the direction of the stop code 23, the starting point is the inclination of 90 ° from the position of the row indicator 21A due to the relationship between the label slope slope and the label, and the length of the code is further increased. If it is calculated by doubling, then CODE_POS [0] [0], CODE_P
OS [0] [1], CODE_POS [0] [2], ...
In this order, the coordinate position of each code head (indicated by the symbol “◯” in FIG. 25) is obtained.
【0170】その他、ラベルの傾き(slope)と、
最初と最後に見つかるロウの検出ライン番号,コードの
長さ,ロウ番号,検出位置、更にマトリックスサイズ
(ROW_NUMBER×COLUMN_NUMBE
R)の情報の内の必要なものを適宜組み合わせ使用して
推定することができる。In addition, the slope of the label,
The detection line number of the row found at the beginning and the end, the code length, the row number, the detection position, and the matrix size (ROW_NUMBER × COLUMN_NUMBE
It can be estimated by appropriately combining and using the necessary information of R).
【0171】次に、上記ステップで推定された座標のう
ち画面外にコードがはみ出してしまうものの個数を集計
し、変数error_numに格納する(ステップSB
4)。このはみ出しは、各コードに於いて、デコード方
向(カラム方向)に対して自分自身の先頭座標と次のコ
ードの先頭座標が両方とも画面内かどうかで判断する。
画面外にはみ出ているものは、デコード不能の恐れがあ
る。図25の例では、(ロウ番号,カラム番号)=
(0,2),(1,2),(2,2),(3,1),
(3,2)の5個のコードが画面外と判断され、変数e
rror_numに「5」が格納される。Next, of the coordinates estimated in the above step, the number of codes that are out of the screen is totaled and stored in the variable error_num (step SB).
4). This protrusion is determined by whether or not the start coordinates of itself and the start coordinates of the next code are both within the screen in the decoding direction (column direction) in each code.
If it is outside the screen, it may not be decoded. In the example of FIG. 25, (row number, column number) =
(0,2), (1,2), (2,2), (3,1),
The five codes of (3, 2) are judged to be outside the screen, and the variable e
“5” is stored in error_num.
【0172】更に、上記error_numがステップ
S8Eで求めた修復可能コード数の変数REST_NU
Mと比較し(ステップSB5)、error_numが
REST_NUM以下であれば、エラー訂正によりデコ
ードすることができるので、デコード可能として上位ル
ーチンに制御を戻す。一方、error_numがRE
ST_NUMを越えている場合には、デコードは絶対不
可能であるので、デコード不可能として上位ルーチンに
制御を戻す。Furthermore, the error_num variable REST_NU of the number of recoverable codes obtained in step S8E
If it is compared with M (step SB5) and error_num is equal to or less than REST_NUM, decoding can be performed by error correction, so that decoding is possible and control is returned to the upper routine. On the other hand, error_num is RE
If ST_NUM is exceeded, decoding is absolutely impossible, so decoding is not possible and control is returned to the upper routine.
【0173】この埋め込ルーチンにより、各コードの位
置を推定することができ、また画面外と推定されるコー
ド数をカウントできるため、デコード可能か否かをこの
段階で判断することができる。これにより、長い時間処
理を行ったにも係わらず、デコードされないという最悪
のパターンは激減する。With this embedding routine, the position of each code can be estimated, and the number of codes estimated to be outside the screen can be counted, so that it is possible to determine at this stage whether decoding is possible. This drastically reduces the worst pattern of not being decoded despite having been processed for a long time.
【0174】次に、上記ステップSB1でコールされる
ROW検出ルーチンを、図26のフローチャート及び図
21の(B)のフレームメモリ6への投影像の図を参照
にしながら説明する。なお、図21の(B)は、行スキ
ャンでスタートコード22が基準に選択された場合の例
を示している。また、説明を簡単にするために、行スキ
ャンでの場合について説明する。従って、行スキャンで
ない場合は、後述するようなステップSB12の処理は
ステップSB13となる。Next, the ROW detection routine called in step SB1 will be described with reference to the flowchart of FIG. 26 and the diagram of the projected image on the frame memory 6 of FIG. Note that FIG. 21B shows an example in which the start code 22 is selected as a reference in the row scan. Further, in order to simplify the description, a case of row scanning will be described. Therefore, if it is not a row scan, the process of step SB12, which will be described later, is step SB13.
【0175】即ち、行スキャンの場合には(ステップS
B11)、ラベルのボトム座標変数BOTTOMのy座
標値とラベルのトップ座標変数TOPのy座標値との
差、つまりラベルのy方向の画素数を計算し、その計算
結果を変数pos_numに格納する(ステップSB1
2)。That is, in the case of row scanning (step S
B11), the difference between the y coordinate value of the bottom coordinate variable BOTTOM of the label and the y coordinate value of the top coordinate variable TOP of the label, that is, the number of pixels in the y direction of the label is calculated, and the calculation result is stored in the variable pos_num ( Step SB1
2).
【0176】次に、変数incの値を「1」に(ステッ
プSB14)、変数counterの値を「0」に、変
数endの値を上記ステップSB12もしくはSB13
で求めたpos_numとする(ステップSB16)。Next, the value of the variable inc is set to "1" (step SB14), the value of the variable counter is set to "0", and the value of the variable end is set to the above step SB12 or SB13.
It is set to pos_num obtained in (step SB16).
【0177】そして、上記ステップSB14からSB1
6で求めた各変数(初期値counter,増分in
c,終了位置end)を用いて、詳細は後述するROW
番号検出ルーチンをコールする(ステップSB17)。
正しくインディケータ情報からロウ番号を検出できた場
合は、変数ROW_POSに検出ライン番号,コード長
さ,ロウ番号,検出位置の情報が格納される。Then, from steps SB14 to SB1 above.
Each variable (initial value counter, increment in
c, end position end), the details will be described later in ROW.
The number detection routine is called (step SB17).
When the row number can be correctly detected from the indicator information, the detection line number, the code length, the row number, and the detection position information are stored in the variable ROW_POS.
【0178】即ち、上記ルーチンで正しくインディケー
タ情報からロウ番号を検出できたか否かをチェックし
(ステップSB18)、検出された場合はステップSB
19へ、検出できなかった場合は、デコード不可能とし
て上位ルーチンにその制御が移される。That is, it is checked in the above routine whether or not the row number has been correctly detected from the indicator information (step SB18), and if it has been detected, the step SB is executed.
If it cannot be detected, the control is transferred to the upper routine as undecodable.
【0179】次に、ステップSB19では上記ステップ
SB17で求められたデータROW_POSをROW_
FIRSTに格納する。即ち、ステップSB14からS
B19でラベルのTOPからBOTTOMに向かってス
キャンラインを次々設定し、最初に検出されたインディ
ケータ位置がROW_FIRSTに格納される。Next, at step SB19, the data ROW_POS obtained at step SB17 is converted to ROW_
Store in FIRST. That is, steps SB14 to S
In B19, scan lines are sequentially set from the label TOP to BOTTOM, and the first detected indicator position is stored in ROW_FIRST.
【0180】更に、SB1AからSB1Eまではラベル
をBOTTOMからTOPに向かってスキャンラインを
次々設定し、最初に検出されたインディケータ位置がR
OW_LASTに格納される。Further, from SB1A to SB1E, labels are set one after another from BOTTOM to TOP, and the first detected indicator position is R.
Stored in OW_LAST.
【0181】次に、上記ステップSB17でコールされ
るROW番号検出ルーチンを、図27のフローチャート
を参照して説明する。説明を簡単にするために、行スキ
ャンでの場合について説明する。従って、行スキャンで
ない場合は、後述するようなステップSB172の処理
はステップSB173となる。Next, the ROW number detection routine called in step SB17 will be described with reference to the flowchart of FIG. To simplify the description, the case of row scanning will be described. Therefore, if it is not a row scan, the process of step SB172, which will be described later, is step SB173.
【0182】即ち、行スキャンの場合には(ステップS
B171)、現在の変数counter値に於ける走査
始点及び終点を上記座標変数の配列DIM_POINT
_P,DIM_POINT_Qから求め、x方向増分を
「1」且つy方向増分を上記傾き増分配列LINE_I
NCで、フレームメモリ6のBank0から画像データ
を1ライン取出して、それを取り込みバッファ配列sc
an_lineに格納し、またそのデータの個数を変数
numに格納する(ステップSB172)。That is, in the case of row scanning (step S
B171), the scanning start point and end point in the current variable counter value are set to the above array of coordinate variables DIM_POINT.
_P, DIM_POINT_Q, the x-direction increment is "1" and the y-direction increment is the tilt increment array LINE_I.
The NC fetches one line of image data from Bank0 of the frame memory 6 and fetches it into the buffer array sc
It is stored in an_line, and the number of the data is stored in the variable num (step SB172).
【0183】そして、詳細は後述するような幅情報に変
換ルーチンをコールして(ステップSB174)、この
取り出したデータを幅情報に変換する。次に、この幅情
報を元に、不図示バーコード表と一致する部分を中間情
報に変換し、その情報の中からインディケータ情報を抽
出し保存する(ステップSB175)。ここで、インデ
ィケータ情報が読めたか否かを判断し(ステップSB1
76)、読めなかった場合はステップSB177に、読
めた場合はステップSB179に制御を移す。Then, the conversion routine is called for the width information, which will be described in detail later (step SB174), and the extracted data is converted into the width information. Next, based on this width information, the part that matches the bar code table (not shown) is converted into intermediate information, and the indicator information is extracted from that information and saved (step SB175). Here, it is judged whether or not the indicator information can be read (step SB1
76), if it cannot be read, control is passed to step SB177, and if it is read, control is passed to step SB179.
【0184】その後、変数counterを増分、即ち
上記間隔変数incの値で再設定し(ステップSB17
7)、この再設定された変数counter値が、上記
変数endつまりラベル範囲を越えるかどうかをチェッ
クする(ステップSB178)。越えない場合は上記ス
テップSB171に制御を移し、越える場合はデコード
不能と判断し上位ルーチンにその制御を移す。Thereafter, the variable counter is incremented, that is, reset with the value of the interval variable inc (step SB17).
7) It is checked whether or not the reset variable counter value exceeds the variable end, that is, the label range (step SB178). If it does not exceed the threshold, control is passed to step SB171. If it is exceeded, it is determined that decoding is not possible and control is passed to the upper routine.
【0185】一方、ステップSB176で読めたと判断
した場合は、その時の検出ライン番号とコード長さとロ
ウ番号と検出位置を変数ROW_POSに格納し(ステ
ップSB179)、デコード可能として上位ルーチンに
その制御を移す。即ち、このルーチンに入ってから最初
に検出されたインディケータ21Aの各種情報をROW
_POSに格納することとなる。なお、上記変数ROW
_POSに格納される情報の内、インディケータ情報か
ら求まるのはロウ番号のみであり、その他の情報、つま
り検出ライン番号,コード長さ,及び検出位置は、その
インディケータ情報が読めたラインのフレームメモリ6
上の各座標位置から算出されるものである。On the other hand, if it is determined in step SB176 that the data can be read, the detection line number, code length, row number and detection position at that time are stored in the variable ROW_POS (step SB179) and the control is transferred to the upper routine as decodable. . That is, the various information of the indicator 21A detected first after entering this routine is sent to the ROW.
It will be stored in _POS. The variable ROW
Of the information stored in the _POS, only the row number can be obtained from the indicator information, and other information, that is, the detection line number, the code length, and the detection position are the frame memory 6 of the line from which the indicator information can be read.
It is calculated from each coordinate position above.
【0186】次に、上記ステップSDでコールされる最
適スキャンルーチンを、図28のフローチャート及び図
23の(B)のフレームメモリ6への投影像の図を参照
して説明する。なお、図23の(B)は、4×1のラベ
ルマトリックスを有する(従って、コード数は「4」で
ある)バーコードラベルを示しており、行スキャンでス
タートコード22が基準に選択された場合の例を示して
いる。また、説明を簡単にするために、行スキャンでの
場合について説明する。従って、行スキャンでない場合
は、後述するようなステップSD2の処理はステップS
D3、またステップSD7の処理はステップSD8とな
る。Next, the optimum scan routine called in the above step SD will be described with reference to the flowchart of FIG. 28 and the diagram of the projected image on the frame memory 6 of FIG. Note that FIG. 23B shows a bar code label having a 4 × 1 label matrix (therefore, the number of codes is “4”), and the start code 22 was selected by line scanning as a reference. An example of the case is shown. Further, in order to simplify the description, a case of row scanning will be described. Therefore, if it is not a row scan, the process of step SD2 described later is performed in step S
The processing of D3 and step SD7 is step SD8.
【0187】即ち、行スキャンの場合には(ステップS
D1)、ラベルのインディケータ情報変数ROW_LA
STの検出位置y座標値とROW_FIRSTの検出位
置y座標値との差、つまりラベルのy方向の画素数を計
算し、その計算結果を変数endに格納する(ステップ
SD2)。次に、この変数endの値を、ラベルの行数
(即ち、(変数ROW_LASTのロウ番号)−(変数
ROW_FIRSTのロウ番号)の絶対値)で割ること
により、図23の(B)に示すように各行の中心を一度
だけ走査するための間隔を計算し、それを変数incに
格納する(ステップSD4)。そして、変数ROW_F
IRSTの検出ライン番号を変数counterの初期
値とする(ステップSD5)。That is, in the case of row scanning (step S
D1), indicator information variable ROW_LA of label
The difference between the y coordinate value of the detected position of ST and the y coordinate value of the detected position of ROW_FIRST, that is, the number of pixels in the y direction of the label is calculated, and the calculation result is stored in the variable end (step SD2). Next, by dividing the value of this variable end by the number of lines of the label (that is, the absolute value of (row number of variable ROW_LAST)-(row number of variable ROW_FIRST)), as shown in FIG. Then, the interval for scanning the center of each row only once is calculated and stored in the variable inc (step SD4). And the variable ROW_F
The detection line number of IRST is set as the initial value of the variable counter (step SD5).
【0188】次に、行スキャンの場合には(ステップS
D6)、現在の変数counter値に於ける走査始点
及び終点を上記座標変数の配列DIM_POINT_
P,DIM_POINT_Qから求め、x方向増分を
「1」且つy方向増分を上記傾き増分配列LINE_I
NCで、フレームメモリ6のBank0から画像データ
を1ライン取出して、それを取り込みバッファ配列sc
an_lineに格納し、またそのデータの個数を変数
numに格納する(ステップSD7)。Next, in the case of row scanning (step S
D6), the scanning start point and the end point in the current variable counter value are set to the array DIM_POINT_ of the coordinate variables.
P and DIM_POINT_Q, the x-direction increment is "1", and the y-direction increment is the above-described slope increment array LINE_I.
The NC fetches one line of image data from Bank0 of the frame memory 6 and fetches it into the buffer array sc
It is stored in an_line, and the number of the data is stored in the variable num (step SD7).
【0189】そして、詳細は後述するような幅情報に変
換ルーチンをコールして(ステップSB174)、この
取り出したデータを幅情報に変換する。次に、この幅情
報を元に、不図示バーコード表と一致する部分を中間情
報に変換し、その情報を保存する(ステップSD9)。Then, the conversion routine is called for the width information as will be described later in detail (step SB174), and the fetched data is converted into the width information. Next, based on this width information, the part that matches the bar code table (not shown) is converted into intermediate information and that information is saved (step SD9).
【0190】その後、変数counterを増分、即ち
上記間隔変数incの値で再設定し(ステップSD
A)、この再設定された変数counter値が、上記
変数endつまりラベル範囲を越えるかどうかをチェッ
クする(ステップSDB)。越えない場合は上記ステッ
プSD6に制御を移し、越える場合は次のステップSD
Cに制御を移す。即ち、格納された中間情報がラベルに
記述されている情報を、完全に復号可能か否かをチェッ
クし(ステップSDC)、復号可能の場合はデコード可
能の情報を持って、また復号不可能の場合はデコード不
可能の情報を持って上位のルーチンへ制御を戻す。Thereafter, the variable counter is incremented, that is, reset with the value of the interval variable inc (step SD
A) It is checked whether or not the reset variable counter value exceeds the variable end, that is, the label range (step SDB). If it does not exceed, control is transferred to the above step SD6, and if it exceeds, next step SD6
Transfer control to C. That is, it is checked whether or not the stored intermediate information is completely decodable in the information described in the label (step SDC), and if it is decodable, it has decodable information and is indecipherable. In the case, the control is returned to the upper routine with the information that cannot be decoded.
【0191】次に、上記ステップSFでコールされるイ
ンテリジェントスキャンルーチンを説明する。このイン
テリジェントスキャンルーチンは、上記最適スキャンで
取りこぼしたコード位置のみをスキャンするルーチンで
ある。以下、図29のフローチャートを参照して、この
インテリジェントスキャンルーチンを説明する。Next, the intelligent scan routine called in step SF will be described. This intelligent scan routine is a routine for scanning only the code positions missed by the optimum scan. The intelligent scan routine will be described below with reference to the flowchart of FIG.
【0192】まず、最適スキャンで埋め込むことのでき
なかったコードのうち、画面内と思われるコード数をi
と定義する(ステップSF1)。即ち、i=(全コード
数)−(error_num)−(最適スキャンで埋め
込めた個数)である。さらに、その各コードのロウ番号
とカラム番号をそれぞれ配列RとCに格納する(ステッ
プSF2)。以上より、最適スキャンで埋め込むことの
できなかったコードの個数とその位置(後述のように、
カラム番号とロウ番号が分かれば、ステップSBで求め
たCODE_POSよりその座標が分かる。)が求めら
れる。First, among the codes that could not be embedded in the optimum scan, the number of codes considered to be in the screen is i
(Step SF1). That is, i = (total number of codes)-(error_num)-(number embedded in optimum scan). Further, the row number and column number of each code are stored in arrays R and C, respectively (step SF2). From the above, the number of codes that could not be embedded in the optimum scan and their positions (as described below,
If the column number and the row number are known, the coordinates can be known from the CODE_POS obtained in step SB. ) Is required.
【0193】次に、変数counterと傾きパターン
カウンタnを「0」に初期化する(ステップSF3)。Next, the variable counter and the inclination pattern counter n are initialized to "0" (step SF3).
【0194】そして、counter番目の未検出場所
の座標CODE_POS[[R[counter]]
[C[counter]]を通りslope+dt
[n]の傾きを持つ直線lを定義する(ステップSF
4)。この直線lが画面枠とクロスする点W3,W4を
定義し、線分W3−W4上の画像データを取り込む(ス
テップSF5)。Then, the coordinates CODE_POS [[R [counter]] of the counter-th undetected place
Through [C [counter]], slope + dt
A straight line 1 having a slope of [n] is defined (step SF
4). Points W3 and W4 where this straight line 1 crosses the screen frame are defined, and the image data on the line segment W3-W4 is taken in (step SF5).
【0195】そして、詳細は後述するような幅情報に変
換ルーチンをコールして(ステップSB174)、この
取り出したデータを幅情報に変換する。次に、この幅情
報を元に、当該バーコードの用途に応じて予め決められ
た不図示バーコード表と一致する部分を中間情報に変換
し、その情報を保存する(ステップSF6)。そして、
ステップSF4からSF6で狙った場所のコードが埋め
込めたかどうかを判断し(ステップSF7)、埋めこめ
た場合はSFAへ、埋め込めなかった場合はステップS
F8にその制御を移す。Then, the conversion routine is called for the width information as will be described later in detail (step SB174), and the fetched data is converted into the width information. Next, based on this width information, a portion corresponding to a bar code table (not shown) predetermined according to the use of the bar code is converted into intermediate information and the information is stored (step SF6). And
In steps SF4 to SF6, it is determined whether the code at the target location has been embedded (step SF7). If embedded, the SFA is performed. If not, step S7 is performed.
Transfer the control to F8.
【0196】上記ステップSF7で埋め込めなかったと
判断した場合は、傾きパターンカウンタnをインクリメ
ントし(ステップSF8)、それが傾きパターン数N_
PAT(例えば傾きの種類を10種類予め配列dtに用
意しておく場合は「10」)未満かどうかをチェックし
(ステップSF9)、未満の場合はステップSF4へ、
以上の場合はステップSFAへ制御を移す。When it is determined in step SF7 that the embedding cannot be performed, the inclination pattern counter n is incremented (step SF8), and the inclination pattern number N_
It is checked whether or not it is less than PAT (for example, "10" when 10 types of inclination are prepared in the array dt in advance) (step SF9), and if less, to step SF4.
In the above case, control is transferred to step SFA.
【0197】上記ステップSF7で埋め込めたと判断し
た場合、あるいは傾きパターンカウンタnが傾きパター
ン数N_PAT以上の場合は、変数counterをイ
ンクリメントし、傾きパターンカウンタnを「0」に再
設定する(ステップSFA)。この再設定された変数c
ounter値が、上記変数iつまり最適スキャンで埋
め込むことのできなかったコードのうち、画面内と思わ
れるコード数を越えるかどうかをチェックする(ステッ
プSFB)。越えない場合は上記ステップSF4に制御
を移し、越える場合は次のステップSFCに制御を移
す。When it is determined that the data is embedded in step SF7, or when the inclination pattern counter n is equal to or more than the inclination pattern number N_PAT, the variable counter is incremented and the inclination pattern counter n is reset to "0" (step SFA). . This reset variable c
It is checked whether the outer value exceeds the variable i, that is, the number of codes that could not be embedded in the optimum scan, which are considered to be within the screen (step SFB). If it does not exceed, the control is moved to the above step SF4, and if it exceeds, the control is moved to the next step SFC.
【0198】上記ステップSFBで越えると判断した場
合は、格納されたコード情報がラベルに記述されている
情報を、完全に復号可能か否かをチェックし(ステップ
SFC)、復号可能の場合はデコード可能の情報を持っ
て上位のルーチンへ制御を戻す。また、復号不可能の場
合は、デコード不可能の情報を持って上位のルーチンへ
制御を戻す。If it is determined in step SFB that the code information is exceeded, it is checked whether the stored code information is completely decodable (step SFC), and if it is decodable, it is decoded. Return control to upper routine with possible information. If it cannot be decoded, the control returns to the upper routine with the information that it cannot be decoded.
【0199】即ち、上記ステップSF4からSFBで、
最適スキャンで埋め込むことのできなかったコードのう
ち、画面内と思われるコード毎に、複数種類の傾きで画
像データを取り込み、そのコードを確定しようとしてい
る。これにより、必要な部分のみを取り込む操作となる
ため、最小のトライ数でコードマトリックスが確定され
る。That is, in steps SF4 to SFB,
Among the codes that could not be embedded in the optimum scan, the image data is fetched at a plurality of types of inclination for each code that seems to be in the screen, and the code is being decided. As a result, only the necessary part is fetched, and the code matrix is determined with the minimum number of tries.
【0200】なお、上記例では、コードを埋め込めなか
った時に直線lの傾きを変えてスキャンするようにして
いるが、直線lを平行移動してスキャンするようにして
も良い。また、傾きの異なるいくつかの直線lの交点位
置も、バーコードラベルの先頭位置や中央位置といった
ように適宜設定可能である。In the above example, when the code cannot be embedded, the inclination of the straight line l is changed and scanning is performed. However, the straight line l may be translated and scanned. Further, the positions of the intersections of several straight lines 1 having different inclinations can be appropriately set such as the head position and the central position of the barcode label.
【0201】次に、上記ステップSB174でコールさ
れる幅情報に変換ルーチンを、図30及び図31の一連
のフローチャートを参照して説明する。本ルーチンは、
要は、ラベルのバーとスペースとの幅を求めるものであ
り、微分信号によりバーとスペースとの境界を求め、こ
のとき2次曲線に近似することによりデータのピークを
求めている。そして、順次ピーク一を求めて、その位置
の差を求めることにより、幅が求められる。このとき、
スタートコード22、ロウインディケータ21Aについ
ても幅情報に変換する。Next, the width information conversion routine called in step SB174 will be described with reference to a series of flowcharts in FIGS. 30 and 31. This routine is
In short, the width between the bar and the space of the label is obtained, the boundary between the bar and the space is obtained by the differential signal, and at this time, the peak of the data is obtained by approximating the quadratic curve. Then, the width is obtained by sequentially obtaining the peak 1 and obtaining the difference between the positions. At this time,
The start code 22 and the row indicator 21A are also converted into width information.
【0202】即ち、まず、上位のルーチンで取り込んだ
取り込みバッファ配列scan_lineをラインデー
タの配列とし、この取り込まれて変数numにストアさ
れている値をデータ個数と定義する(ステップSB17
41)。次に、この変数numの値をデクリメントした
結果を位置標識カウンタiに格納し、また変数jを
「0」に初期設定する(ステップSB1742)。そし
て、取り込みバッファ配列scan_lineのi番目
(位置標識カウンタiにより示される)の位置の値から
取り込みバッファ配列scan_lineのi−1番目
の位置の値を引き、その解を取り込みバッファ配列sc
an_lineのi番目の位置に再設定する(ステップ
SB1743)。この後、位置標識カウンタiをデクリ
メントし(ステップSB1744)、その結果が「0」
よりも大きいかどうか判断する(ステップSB174
5)。大きくなければ、上記ステップSB1743に制
御を戻す。即ち、このステップSB1741からステッ
プSB1745で、ラインデータを一次微分する。That is, first, the fetch buffer array scan_line fetched by the upper routine is set as an array of line data, and the value fetched and stored in the variable num is defined as the number of data (step SB17).
41). Next, the result of decrementing the value of this variable num is stored in the position indicator counter i, and the variable j is initialized to "0" (step SB1742). Then, the value of the (i-1) th position of the fetch buffer array scan_line is subtracted from the value of the i-th position (indicated by the position indicator counter i) of the fetch buffer array scan_line, and the solution is obtained.
It is reset to the i-th position of an_line (step SB1743). After this, the position indicator counter i is decremented (step SB1744), and the result is "0".
Is greater than (step SB174
5). If not larger, control is returned to step SB1743. That is, in steps SB1741 to SB1745, the line data is first differentiated.
【0203】次に、位置標識カウンタiを「2」に初期
化する(ステップSB1746)。そして、取り込みバ
ッファ配列scan_lineのi番目の位置の値が、
しきい値変数THRESHOLDの値よりも大きく、且
つ取り込みバッファ配列scan_lineのi−1番
目の位置の値よりも大きく、且つ取り込みバッファ配列
scan_lineのi+1番目の位置の値以上かどう
かを判断し(ステップSB1747)、そうであれば、
符号指標flagをUPとする(ステップSB174
8)。Next, the position indicator counter i is initialized to "2" (step SB1746). Then, the value at the i-th position of the capture buffer array scan_line is
It is determined whether the value is larger than the value of the threshold variable THRESHOLD and larger than the value at the (i-1) th position of the fetch buffer array scan_line, and is greater than or equal to the value at the (i + 1) th position of the fetch buffer array scan_line (step SB1747). ),in that case,
The code index flag is set to UP (step SB174
8).
【0204】そうでなければ、次に、取り込みバッファ
配列scan_lineのi番目の位置の値が、符号を
負としたしきい値変数THRESHOLDの値(−TH
RESHOLD)よりも小さく、且つ取り込みバッファ
配列scan_lineのi−1番目の位置の値よりも
小さく、且つ取り込みバッファ配列scan_line
のi+1番目の位置の値以下かどうかを判断し(ステッ
プSB1749)、そうであれば、符号指標flagを
DOWNとする(ステップSB174A)。Otherwise, the value at the i-th position of the fetch buffer array scan_line is then the value of the threshold variable THRESHOLD (-TH
RESHOLD) and smaller than the value at the (i-1) th position of the fetch buffer array scan_line, and the fetch buffer array scan_line
It is determined whether or not it is less than or equal to the value of the i + 1-th position of (step SB1749), and if so, the code index flag is set to DOWN (step SB174A).
【0205】そうでなければ、次に、位置標識カウンタ
iをインクリメントし(ステップSB174B)、その
結果が変数numの値から1引いた数よりも小さいかど
うか判断する(ステップSB174C)。小さければ上
記ステップSB1747へ制御を移し、小さくなければ
上位のルーチンへ制御を戻す。If not, next, the position indicator counter i is incremented (step SB174B), and it is determined whether the result is smaller than the number obtained by subtracting 1 from the value of the variable num (step SB174C). If it is smaller, control is passed to step SB1747, and if it is not smaller, control is returned to the upper routine.
【0206】即ち、このステップSB1747からステ
ップSB174Cで、しきい値変数THRESHOLD
の値を越える最初のピーク、つまり図32の(A)の1
番目のピークを検出する。そして、検出されたピークの
符号が正の場合は、符号指標flagをUPとしてステ
ップSB174Dに制御を移し、検出されたピークの符
号が負の場合は、符号指標flagをDOWNとし、ス
テップSB174Dに制御を移す。また、ラインデータ
を走査してもピークが検出されない場合には、上位のル
ーチンに制御を戻す。That is, in steps SB1747 to SB174C, the threshold variable THRESHOLD
The first peak that exceeds the value of, that is, 1 in (A) of FIG.
Find the second peak. If the detected peak has a positive sign, the code index flag is set to UP and control is transferred to step SB174D. If the detected peak has a negative sign, the code index flag is set to DOWN and control is performed to step SB174D. Transfer. If no peak is detected even after scanning the line data, the control is returned to the upper routine.
【0207】こうして、符号指標flagが設定された
ならば、次に、位置標識カウンタiの値をx1 とし、ま
た取り込みバッファ配列scan_lineのi−1番
目の位置の値をy1 、取り込みバッファ配列scan_
lineのi番目の位置の値をy2 、取り込みバッファ
配列scan_lineのi+1番目の位置の値をy3
とすることにより、検出されたピーク位置とその両隣デ
ータを2次曲線でフィッティングを行う(ステップSB
174D)。そして、−0.5(−y1 −2x1 y1 +
4x1 y2 +y3 −2x1 y3 )/y1 −2y2 +y3
なる計算を行って、上記2次曲線のピーク位置を求め、
それを変数lastposに格納する(ステップSB1
74E)。If the code index flag is set in this way, next, the value of the position indicator counter i is set to x 1, and the value at the (i-1) th position of the fetch buffer array scan_line is set to y 1 , the fetch buffer array. scan_
The value at the i-th position of the line is y 2 , and the value at the i + 1-th position of the capture buffer array scan_line is y 3.
Then, the detected peak position and the data on both sides of the detected peak position are fitted with a quadratic curve (step SB).
174D). And -0.5 (-y 1 -2x 1 y 1 +
4x 1 y 2 + y 3 -2x 1 y 3) / y 1 -2y 2 + y 3
Is calculated to find the peak position of the quadratic curve,
It is stored in the variable lastpos (step SB1
74E).
【0208】その後、位置標識カウンタiの値が変数n
umの値から「2」引いた数よりも小さいかどうか判断
し(ステップSB174F)、小さくなければ上位のル
ーチンへ制御を戻す。After that, the value of the position indicator counter i is changed to the variable n.
It is determined whether it is smaller than the number obtained by subtracting "2" from the value of um (step SB174F), and if not smaller, the control is returned to the upper routine.
【0209】小さければ、位置標識カウンタiをインク
リメントする(ステップSB174G)。そして、符号
指標flagがDOWNであり、且つまた取り込みバッ
ファ配列scan_lineのi番目の位置の値が、し
きい値変数THRESHOLDの値よりも大きく且つ取
り込みバッファ配列scan_lineのi−1番目の
位置の値よりも大きく且つ取り込みバッファ配列sca
n_lineのi+1番目の位置の値以上であるかどう
かを判断し(ステップSB174H)、そうであれば、
符号指標flagをUPとする(ステップSB174
I)。If it is smaller, the position indicator counter i is incremented (step SB174G). The code index flag is DOWN, and the value at the i-th position of the capture buffer array scan_line is larger than the value of the threshold variable THRESHOLD and is greater than the value at the i-1th position of the capture buffer array scan_line. Is also large and capture buffer array sca
It is determined whether or not it is greater than or equal to the value at the (i + 1) th position of n_line (step SB174H), and if so,
The code index flag is set to UP (step SB174
I).
【0210】そうでなければ、次に、符号指標flag
がUPであり、且つまた取り込みバッファ配列scan
_lineのi番目の位置の値が、符号を負としたしき
い値変数THRESHOLDの値よりも小さく且つ取り
込みバッファ配列scan_lineのi−1番目の位
置の値よりも小さく且つ取り込みバッファ配列scan
_lineのi+1番目の位置の値以下であるかどうか
を判断し(ステップSB174J)、そうでなければ上
記ステップSB174Fに制御を移し、そうであれば符
号指標flagをDOWNとする(ステップSB174
K)。If not, then the code index flag
Is UP, and also the capture buffer array scan
The value of the i-th position of _line is smaller than the value of the threshold variable THRESHOLD having a negative sign and smaller than the value of the i-1th position of _line and the acquisition buffer array scan.
It is determined whether or not the value at the i + 1th position of _line is less than or equal to the value (step SB174J), and if not, the control is transferred to the above step SB174F, and if so, the code index flag is set to DOWN (step SB174).
K).
【0211】こうして、符号指標flagが再設定され
たならば、次に、位置標識カウンタiの値をx1 とし、
また取り込みバッファ配列scan_lineのi−1
番目の位置の値をy1 、取り込みバッファ配列scan
_lineのi番目の位置の値をy2 、取り込みバッフ
ァ配列scan_lineのi+1番目の位置の値をy
3 とすることにより、検出されたピーク位置とその両隣
データを2次曲線でフィッティングを行う(ステップS
B174L)。そして、−0.5(−y1 −2x1 y1
+4x1 y2 +y3 −2x1 y3 )/y1 −2y2 +y
3 なる計算を行って、上記2次曲線のピーク位置を求
め、それを変数nowposに格納する(ステップSB
174M)。When the code index flag is reset in this way, next, the value of the position indicator counter i is set to x 1, and
Also, i-1 of the capture buffer array scan_line
The value at the th position is y 1 , the fetch buffer array scan
The value at the i-th position of _line is y 2 , and the value at the i + 1-th position of the capture buffer array scan_line is y.
By setting 3 , the detected peak position and the data on both sides of the detected peak are fitted with a quadratic curve (step S
B174L). And -0.5 (-y 1 -2x 1 y 1
+ 4x 1 y 2 + y 3 -2x 1 y 3) / y 1 -2y 2 + y
3 is calculated to find the peak position of the quadratic curve and stored in the variable nowpos (step SB
174M).
【0212】これにより、図32の(B)に示すよう
に、一つ前のピーク位置lastposと今回求めたピ
ーク位置nowposが得られる。そして、こうして得
られた両ピーク位置の差を取ることによりピーク間距離
を求め、それを幅情報格納配列変数widthの変数j
で示される位置に格納する(ステップSB174N)。As a result, as shown in FIG. 32B, the previous peak position lastpos and the peak position nowpos obtained this time are obtained. Then, the peak-to-peak distance is obtained by taking the difference between the two peak positions thus obtained, and the obtained peak-to-peak distance is used as the variable j of the width information storage array variable width.
It is stored in the position indicated by (step SB174N).
【0213】その後、ピーク位置変数lastposを
ピーク位置変数nowposの値に更新し(ステップS
B174O)、また変数jをインクリメントしてから
(ステップSB174P)、上記ステップSB174F
に制御を移す。Thereafter, the peak position variable lastpos is updated to the value of the peak position variable nowpos (step S
B174O) and after incrementing the variable j (step SB174P), the above step SB174F
Transfer control to.
【0214】このように、ステップSB174Fからス
テップSB174Pで、順次ピークを検出し、ピーク間
距離を幅情報格納配列変数widthに格納していく。
ここで、上記ステップSB1747からステップSB1
74Cに於ける最初のピーク検出と異なる点は、例えば
現在の符号指標flagがDOWNの場合、次に見つけ
なくては行けないピークは正符号のピークとしている点
である。As described above, in steps SB174F to SB174P, the peaks are sequentially detected and the peak-to-peak distance is stored in the width information storage array variable width.
Here, from step SB1747 to step SB1
The difference from the first peak detection in 74C is that, for example, when the current code index flag is DOWN, the peak that must be found next is a peak with a positive sign.
【0215】以上より明らかなように、バーコードラベ
ル2がいかなる回転角を与えられていてもまた、一部画
面外にはみ出していても、バーコードに含まれる各々の
コード位置を推定し、その情報を基に読取するため、無
駄のない読取が可能となる。さらに、以下のような特徴
を有している。As is clear from the above, even if the bar code label 2 is given any rotation angle or is partly outside the screen, each code position included in the bar code is estimated and Since information is read based on information, it is possible to read without waste. Furthermore, it has the following features.
【0216】(1)ラベル位置を検出する際、最小2乗
法を用いて検出位置を再設定するようにしたので、より
正確な位置決定が可能である。(1) When the label position is detected, the detected position is reset by using the least square method, so that more accurate position determination is possible.
【0217】(2)バーコードに含まれる各々のコード
位置を推定し、その情報を基に、スキャン処理を行うか
否かを決定しているため、読み込みの不十分なバーコー
ド画像に対して処理を行い無駄な時間となることが防止
できる。また、本実施例では、判断結果で処理の続行か
否かを分岐させているが、埋め込みが困難であると判断
された場合に通常のスキャン処理ではない手法の採用を
行うというような、手法選択に用いても良い。(2) Since each code position included in the bar code is estimated and whether or not the scanning process is performed is determined based on the information, it is possible to read the bar code image which is insufficiently read. It is possible to prevent wasteful time by performing processing. Further, in the present embodiment, whether or not to continue the process is branched depending on the determination result, but when it is determined that the embedding is difficult, a method other than the normal scan processing is adopted. It may be used for selection.
【0218】(3)最適スキャンルーチンによって、ラ
ベルの画面内で読取可能なサイズ(行数,列数)と画面
上での座標から、各行に対してデータ取り出し数を各1
本としたスキャンを行うようにしていることにより、こ
の最適スキャンで復号可能に至る場合には、ラベル読取
時間を短縮することが可能となる。(3) Based on the size (the number of rows and the number of columns) of the label that can be read in the screen and the coordinates on the screen, the number of data fetched is 1 for each row by the optimum scan routine.
By performing the main scan, the label reading time can be shortened when the optimum scan can be decoded.
【0219】(4)更に、インテリジェントスキャンに
より、最適スキャンで読めず且画面内と推定されるコー
ド位置でそれぞれ角度を代えて検出処理を行うようにし
たため、ラベル読取時間の増加を最小に押えられる。(4) Further, the intelligent scanning is performed by changing the angle at each code position which cannot be read by the optimum scan and is estimated to be within the screen, so that the increase in the label reading time can be suppressed to the minimum. .
【0220】なお、本発明は上記実施例に限定されるも
のではなく、種々の変形実施が可能なことは勿論であ
る。The present invention is not limited to the above embodiment, and it is needless to say that various modifications can be made.
【0221】例えば、2次元撮像装置5は、2次元CC
Dや撮像管に代表されるエリアセンサを用いたものに限
定されるものでなく、1次元撮像素子と1次元スキャン
機構の組み合せや、光電検出器と2次元スキャン機構の
組み合せでも良い。For example, the two-dimensional image pickup device 5 is a two-dimensional CC.
The present invention is not limited to the one using an area sensor represented by D or an image pickup tube, and may be a combination of a one-dimensional image sensor and a one-dimensional scanning mechanism or a combination of a photoelectric detector and a two-dimensional scanning mechanism.
【0222】また、2次元撮像装置5として高速読み出
し並びに非破壊読み出しが可能な電荷変調素子(CMD
撮像素子)を用いた固体撮像装置を用いれば、フレーム
メモリ6を省略することができる。このCMD撮像素子
を用いた個体撮像装置については、特開昭61−840
59号公報及び1986年に開催されたInternational
Electron Device Meeting (IEDM)の予稿集の第3
53頁乃至第356頁の“A NEW MOS IMAGE SENSOR OPE
RATING IN A NON-DESTRUCTIVE READOUTMODE ”という題
名の論文でその内容について開示がなされている。Further, as the two-dimensional image pickup device 5, a charge modulation device (CMD) capable of high-speed reading and non-destructive reading
The frame memory 6 can be omitted by using a solid-state image pickup device using an image pickup element. A solid-state image pickup device using this CMD image pickup device is disclosed in JP-A-61-840.
59 publication and International held in 1986
Third Proceeding Book of Electron Device Meeting (IEDM)
"A NEW MOS IMAGE SENSOR OPE" on pages 53 to 356
A paper titled RATING IN A NON-DESTRUCTIVE READOUTMODE "discloses its contents.
【0223】また、データ処理装置7は、位置検出部7
A,傾き検出部7B,デコード実行決定部7C,復号部
7Dのすべてを含む必要はなく、復号部7Dを不図示ホ
スト装置側に持たせ、デコード開始指示信号を含む制御
信号をホスト装置に出力する形のものでも良い。さらに
は、このデータ処理装置7全体を、不図示ホスト装置内
に構成し、フレームメモリ6の情報、あるいは撮像装置
の出力をホスト装置に取り込んで処理を行う構成とする
ことも可能である。その他、各部を一体、別体、一部別
体と適宜選択して、種々の構成で実施できる。Further, the data processing device 7 includes the position detector 7
It is not necessary to include all of A, the inclination detection unit 7B, the decoding execution determination unit 7C, and the decoding unit 7D. The decoding unit 7D is provided on the host device side (not shown), and the control signal including the decoding start instruction signal is output to the host device. It may be in the form of a circle. Further, the entire data processing device 7 may be configured in a host device (not shown), and the information in the frame memory 6 or the output of the image pickup device may be fetched into the host device for processing. In addition, it is possible to implement various configurations by appropriately selecting each unit as one body, separate body, or partially separate body.
【0224】また、上記説明に於いては、バーコードラ
ベルにPDF−417フォーマットのラベルを用いた
が、これに限定されるものでなく、Code49等、他
のスタックドバーコードや、JAN等の1次元バーコー
ドでも良い。Further, in the above description, the label of the PDF-417 format is used as the bar code label, but the bar code label is not limited to this, and other stacked bar codes such as Code 49 and 1 of JAN and the like are used. Dimensional barcodes are also acceptable.
【0225】[0225]
【発明の効果】以上詳述したように、本発明によれば、
フレームメモリに記憶されたバーコードの情報に基づい
てバーコードのコード位置を推定し、この推定したコー
ド位置もとにバーコードがデコード可能かどうか推定し
て、この推定結果がデコード可能であるというときにだ
け復号するようにしたため、バーコードラベルの読み取
りに於ける無駄な時間を省くことができるシンボル情報
読取装置を提供することができる。As described in detail above, according to the present invention,
It is said that the bar code position is estimated based on the bar code information stored in the frame memory, the bar code is decodable based on this bar code position, and the estimation result is decodable. Since the decoding is performed only at the time, it is possible to provide the symbol information reading device which can save the unnecessary time in reading the barcode label.
【0226】さらに、バーコードラベル、特にスタック
ドバーコードラベルが読取装置のラベル検出面上でどの
ような向きにセットされていても、またバーコードラベ
ルの撮像画像に欠損があっても、そのバーコードシンボ
ルの情報を読取可能なシンボル情報読取装置を提供する
ことができる。つまり、バーコードラベルの投影像の4
角位置のうち少なくとも2点を基準にラベル位置を推定
し、更にラベルに含まれるコード位置を推定することに
より、実効的にラベルに平行にかつ無駄のないデータ抽
出が可能となり、ラベルの角度が読み取り性能に影響を
及ぼさず、高速な読取処理が可能となるという優れた効
果を奏することができる。Further, even if the bar code label, particularly the stacked bar code label is set in any direction on the label detection surface of the reading device, and the captured image of the bar code label is defective, the bar code label is lost. It is possible to provide a symbol information reading device capable of reading code symbol information. In other words, 4 of the projected image of the barcode label
By estimating the label position with reference to at least two of the angular positions and further estimating the code position included in the label, it is possible to effectively extract data in parallel with the label and to reduce the label angle. It is possible to achieve an excellent effect that high-speed reading processing is possible without affecting reading performance.
【図面の簡単な説明】[Brief description of drawings]
【図1】本発明の一実施例に係るシンボル情報読取装置
の構成を示す図である。FIG. 1 is a diagram showing a configuration of a symbol information reading device according to an embodiment of the present invention.
【図2】(A)はスタックドバーコードの例としてPD
F−417コード体系のバーコードラベルを示す図であ
り、(B)は仮想的にフレームメモリの画素配列に
(A)のバーコードラベル画像を投影した模式図であ
る。FIG. 2A is a PD as an example of a stacked barcode.
It is a figure which shows the barcode label of F-417 code system, (B) is a schematic diagram which projected the barcode label image of (A) on the pixel array of a frame memory virtually.
【図3】本発明の一実施例に係るシンボル情報読取装置
の概略的な動作を説明するためのフローチャートであ
る。FIG. 3 is a flowchart for explaining a schematic operation of the symbol information reading device according to the embodiment of the present invention.
【図4】図3中の前処理ルーチンを説明するためのフロ
ーチャートである。FIG. 4 is a flowchart for explaining a pre-processing routine in FIG.
【図5】図3中の画像取り込みルーチンを説明するため
のフローチャートである。FIG. 5 is a flowchart for explaining an image capturing routine in FIG.
【図6】図3中のラベル検出ルーチンを説明するための
フローチャートである。FIG. 6 is a flowchart for explaining a label detection routine in FIG.
【図7】(A)はラベル検出方法を説明するのに供され
るバーコードラベルの画像を取り込んだ時のフレームメ
モリの内容を示す図であり、(B)はラベルの傾きを求
める方法を説明するのに供されるバーコードラベルの画
像を取り込んだ時のフレームメモリの内容を示す図であ
る。FIG. 7A is a diagram showing the contents of a frame memory when a barcode label image used for explaining a label detection method is taken in, and FIG. 7B is a method for obtaining a label inclination. It is a figure which shows the content of the frame memory at the time of taking in the image of the barcode label used for description.
【図8】図6中のスタート/ストップコード検出ルーチ
ンを説明するためのフローチャートである。FIG. 8 is a flowchart for explaining a start / stop code detection routine in FIG.
【図9】図8中のスキャン&検出ルーチンを説明するた
めの一連のフローチャートの最初の部分を示す図であ
る。9 is a diagram showing the first part of a series of flowcharts for explaining the scan & detection routine in FIG. 8. FIG.
【図10】図8中のスキャン&検出ルーチンを説明する
ための一連のフローチャートの真ん中の部分を示す図で
ある。FIG. 10 is a diagram showing the middle part of a series of flowcharts for explaining the scan & detection routine in FIG.
【図11】図8中のスキャン&検出ルーチンを説明する
ための一連のフローチャートの最後の部分を示す図であ
る。FIG. 11 is a diagram showing the final part of a series of flowcharts for explaining the scan & detection routine in FIG.
【図12】図6中のスタートエッジ位置検出ルーチンを
説明するためのフローチャートである。FIG. 12 is a flowchart for explaining a start edge position detection routine in FIG.
【図13】図6中のストップエッジ位置検出ルーチンを
説明するためのフローチャートである。FIG. 13 is a flowchart for explaining a stop edge position detection routine in FIG.
【図14】図6中のラベルの傾きを求めるルーチンを説
明するためのフローチャートである。14 is a flow chart for explaining a routine for obtaining the inclination of the label in FIG.
【図15】図3中の手ぶれ検出ルーチンを説明するため
のフローチャートである。FIG. 15 is a flowchart for explaining a camera shake detection routine in FIG.
【図16】図15中のスタートコードベリファイルーチ
ンを説明するためのフローチャートである。16 is a flowchart illustrating a start code verify routine in FIG.
【図17】図15中のストップコードベリファイルーチ
ンを説明するためのフローチャートである。FIG. 17 is a flow chart for explaining a stop code verify routine in FIG.
【図18】図3中のしきい値決定ルーチンを説明するた
めのフローチャートである。FIG. 18 is a flow chart for explaining a threshold value determination routine in FIG.
【図19】(A)はしきい値検出ラインを説明するのに
供されるバーコードラベルの画像を取り込んだ時のフレ
ームメモリの内容を示す図であり、(B)はスタートコ
ードの微分波形を示す図である。FIG. 19A is a diagram showing the contents of the frame memory when the image of the bar code label used for explaining the threshold detection line is captured, and FIG. 19B is the differential waveform of the start code. FIG.
【図20】図3中のロウ及びカラムナンバ検出ルーチン
を説明するためのフローチャートである。20 is a flow chart for explaining a row and column number detection routine in FIG.
【図21】(A)はロウナンバ及びカラムナンバの決定
方法を説明するのに供されるバーコードラベルの画像を
取り込んだ時のフレームメモリの内容を示す図であり、
(B)は始点列及び終点列の算出方法を説明するのに供
されるバーコードラベルの画像を取り込んだ時のフレー
ムメモリの内容を示す図である。FIG. 21A is a diagram showing the contents of the frame memory when the image of the bar code label used for explaining the method of determining the row number and the column number is taken in;
FIG. 9B is a diagram showing the contents of the frame memory when the image of the barcode label is used to explain the method of calculating the starting point sequence and the ending point sequence.
【図22】図3中のスキャン方程式決定ルーチンを説明
するための一連のフローチャートの前半部分を示す図で
ある。22 is a diagram showing the first half of a series of flowcharts for explaining the scan equation determination routine in FIG. 3. FIG.
【図23】(A)は図3中のスキャン方程式決定ルーチ
ンを説明するための一連のフローチャートの後半部分を
示す図であり、(B)は最適スキャンの方法を説明する
のに供されるバーコードラベルの画像を取り込んだ時の
フレームメモリの内容を示す図である。23 (A) is a diagram showing a latter half of a series of flowcharts for explaining the scan equation determination routine in FIG. 3, and FIG. 23 (B) is a bar used for explaining an optimum scanning method. It is a figure which shows the content of the frame memory at the time of taking in the image of a code label.
【図24】図3中の埋め込チェックルーチンを説明する
ためのフローチャートである。FIG. 24 is a flowchart for explaining the embedding check routine in FIG.
【図25】埋め込チェックルーチンを説明するのに供さ
れるフレームメモリへのバーコードラベル投影像を示す
図である。FIG. 25 is a view showing a bar code label projected image on a frame memory used for explaining an embedding check routine.
【図26】図24中のROW検出ルーチンを説明するた
めのフローチャートである。FIG. 26 is a flowchart for explaining the ROW detection routine in FIG.
【図27】図26中のROW番号検出ルーチンを説明す
るためのフローチャートである。FIG. 27 is a flow chart for explaining a ROW number detection routine in FIG.
【図28】図3中の最適スキャンルーチンを説明するた
めのフローチャートである。FIG. 28 is a flow chart for explaining the optimum scanning routine in FIG.
【図29】図3中のインテリジェントスキャンルーチン
を説明するためのフローチャートである。FIG. 29 is a flow chart for explaining the intelligent scan routine in FIG.
【図30】図27,図28,及び図29中の幅情報に変
換ルーチンを説明するための一連のフローチャートの前
半部分を示す図である。FIG. 30 is a diagram showing the first half of a series of flowcharts for explaining the conversion routine to the width information in FIGS. 27, 28, and 29.
【図31】図27,図28,及び図29中の幅情報に変
換ルーチンを説明するための一連のフローチャートの後
半部分を示す図である。FIG. 31 is a diagram showing the latter half of a series of flowcharts for explaining the conversion routine to the width information in FIGS. 27, 28, and 29.
【図32】(A)は幅情報変換のためのピークの選択法
則を説明するための図であり、(B)はピーク間距離の
算出のための2つのピーク位置を示す図である。FIG. 32 (A) is a diagram for explaining a peak selection rule for width information conversion, and FIG. 32 (B) is a diagram showing two peak positions for calculating a peak-to-peak distance.
3…レンズ、4…光電変換面、5…2次元撮像装置、6
…フレームメモリ、7…データ処理装置、7A…位置検
出部、7B…傾き検出部、7C…デコード実行決定部、
7D…復号部、8…バーコードラベル投影像、21…ラ
ベル部、21A…ロウインディケータ、21C…ラベル
マトリックス、22…スタートコード、23…ストップ
コード。3 ... Lens, 4 ... Photoelectric conversion surface, 5 ... Two-dimensional imaging device, 6
... Frame memory, 7 ... Data processing device, 7A ... Position detecting section, 7B ... Tilt detecting section, 7C ... Decode execution determining section,
7D ... Decoding section, 8 ... Bar code label projected image, 21 ... Label section, 21A ... Row indicator, 21C ... Label matrix, 22 ... Start code, 23 ... Stop code.
Claims (1)
2次元像として撮像する撮像手段と、 該撮像手段からの情報を記憶する記憶手段と、 該記憶手段に記憶された情報に基づいて、バーコードの
コード位置を推定する位置推定手段と、 該位置推定手段により推定されたコード位置をもとに、
バーコードがデコード可能かどうか推定するデコード可
能性推定手段と、 該デコード可能性推定手段がデコード可能であると推定
したときに、前記記憶手段に記憶された情報を復号する
復号手段と、 を具備してなることを特徴とするシンボル情報読取装
置。1. An image pickup means for picking up a bar code consisting of a bar and a space as a two-dimensional image, a storage means for storing information from the image pickup means, and a bar based on the information stored in the storage means. Based on the position estimating means for estimating the code position of the code and the code position estimated by the position estimating means,
A decoding possibility estimating means for estimating whether or not the barcode can be decoded; and a decoding means for decoding the information stored in the storage means when the decoding possibility estimating means estimates that the decoding is possible. A symbol information reading device characterized by the following.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23249992A JP3191997B2 (en) | 1992-08-31 | 1992-08-31 | Symbol information reader |
US08/111,670 US5422470A (en) | 1992-08-31 | 1993-08-25 | Symbol information reading apparatus |
KR1019930016903A KR100309243B1 (en) | 1992-08-31 | 1993-08-28 | Symbol information reading device |
CN93116919A CN1043933C (en) | 1992-08-31 | 1993-08-31 | Apparatus for reading of signal information |
TW082108292A TW320710B (en) | 1992-08-31 | 1993-10-07 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23249992A JP3191997B2 (en) | 1992-08-31 | 1992-08-31 | Symbol information reader |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0683996A true JPH0683996A (en) | 1994-03-25 |
JP3191997B2 JP3191997B2 (en) | 2001-07-23 |
Family
ID=16940288
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP23249992A Expired - Fee Related JP3191997B2 (en) | 1992-08-31 | 1992-08-31 | Symbol information reader |
Country Status (4)
Country | Link |
---|---|
JP (1) | JP3191997B2 (en) |
KR (1) | KR100309243B1 (en) |
CN (1) | CN1043933C (en) |
TW (1) | TW320710B (en) |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4035396A1 (en) * | 1990-11-07 | 1992-05-14 | F & O Elektronic Systems Gmbh | METHOD AND DEVICE FOR READING AND IDENTIFYING THE INFORMATION OF A CHARACTER TEMPLATE, IN PARTICULAR BARCODE, WITHIN A TWO OR THREE-DIMENSIONAL FIELD BY MEANS OF A VIDEO CAMERA THAT GENERATES A BINARY VIDEO SIGNAL OF THE IMAGE |
-
1992
- 1992-08-31 JP JP23249992A patent/JP3191997B2/en not_active Expired - Fee Related
-
1993
- 1993-08-28 KR KR1019930016903A patent/KR100309243B1/en not_active IP Right Cessation
- 1993-08-31 CN CN93116919A patent/CN1043933C/en not_active Expired - Fee Related
- 1993-10-07 TW TW082108292A patent/TW320710B/zh active
Also Published As
Publication number | Publication date |
---|---|
KR940004481A (en) | 1994-03-15 |
TW320710B (en) | 1997-11-21 |
KR100309243B1 (en) | 2001-12-28 |
JP3191997B2 (en) | 2001-07-23 |
CN1090407A (en) | 1994-08-03 |
CN1043933C (en) | 1999-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3233981B2 (en) | Symbol information reader | |
US5422470A (en) | Symbol information reading apparatus | |
JP4557433B2 (en) | Imaging engine and technology for zip code reading | |
ES2328192T3 (en) | SYSTEM AND PROCEDURE TO DECODE BAR CODS ASSISTED WITH OCR. | |
KR100271245B1 (en) | Bar code reading apparatus | |
US5471549A (en) | Method of detecting and correcting a direction of image data and document image filing system employing the same | |
EP0669593B1 (en) | Two-dimensional code recognition method | |
US6575367B1 (en) | Image data binarization methods enabling optical reader to read fine print indicia | |
JP3668275B2 (en) | Digital information recording method, decoding method and decoding device | |
US5153418A (en) | Multiple resolution machine readable symbols | |
EP0484132B1 (en) | Multiple resolution machine readable symbols | |
EP1383071A2 (en) | Anti-hand-jittering dataform readers and methods | |
US5442164A (en) | Bar code reader for reading two-dimensional bar codes by using length information derived from a sensed signal | |
US5550363A (en) | Optical information reading apparatus | |
JP5676183B2 (en) | Bar code reading apparatus and bar code reading method | |
US5949053A (en) | Optimized technique for decoding a bar code from an image of an array of pixels | |
JP2003346105A (en) | Two-dimensional bar code and method for recording the same | |
US5038391A (en) | Optical character reader | |
JP3191997B2 (en) | Symbol information reader | |
JPS5841542B2 (en) | optical character reader | |
JP3853331B2 (en) | Digital information recording method | |
JP3580901B2 (en) | Symbol information reader | |
JP3504366B2 (en) | Symbol information reading device | |
JP3730716B2 (en) | Bar code reader | |
JP3251089B2 (en) | 2D symbol information reader |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20010501 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080525 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090525 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |