JPH05324898A - バーコードリーダ装置 - Google Patents

バーコードリーダ装置

Info

Publication number
JPH05324898A
JPH05324898A JP4133688A JP13368892A JPH05324898A JP H05324898 A JPH05324898 A JP H05324898A JP 4133688 A JP4133688 A JP 4133688A JP 13368892 A JP13368892 A JP 13368892A JP H05324898 A JPH05324898 A JP H05324898A
Authority
JP
Japan
Prior art keywords
coordinate
label
detected
detection
variable
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
Application number
JP4133688A
Other languages
English (en)
Other versions
JP3154809B2 (ja
Inventor
Yutaka Adachi
豊 安達
Masanori Kubo
允則 久保
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Olympus Corp
Original Assignee
Olympus Optical Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Olympus Optical Co Ltd filed Critical Olympus Optical Co Ltd
Priority to JP13368892A priority Critical patent/JP3154809B2/ja
Priority to US08/066,478 priority patent/US5369265A/en
Priority to CN93105846A priority patent/CN1036807C/zh
Priority to KR1019930009215A priority patent/KR100275006B1/ko
Priority to TW082105062A priority patent/TW259858B/zh
Publication of JPH05324898A publication Critical patent/JPH05324898A/ja
Application granted granted Critical
Publication of JP3154809B2 publication Critical patent/JP3154809B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/10544Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum
    • G06K7/10821Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum further details of bar or optical code scanning devices
    • G06K7/1093Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum further details of bar or optical code scanning devices sensing, after transfer of the image of the data-field to an intermediate store, e.g. storage with cathode ray tube
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/06009Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
    • G06K19/06037Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking multi-dimensional coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods 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/1404Methods for optical code recognition
    • G06K7/1408Methods for optical code recognition the method being specifically adapted for the type of code
    • G06K7/14172D bar codes

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Electromagnetism (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Toxicology (AREA)
  • Health & Medical Sciences (AREA)
  • Character Input (AREA)
  • Image Input (AREA)
  • Image Analysis (AREA)

Abstract

(57)【要約】 【目的】バーコードが適性位置に停止したときにのみ自
動的にデコードが行われるようにすること。 【構成】停止検出部40は、信号処理部20からのバー
コードのディジタル映像信号の内、同じ場所(ライン)
の時間間隔をおいた2ラインのデータを比較判断するこ
とによりブレを検出し、ブレがないときにデコードスタ
ートトリガ信号をデコーダ部30へ出力する。デコーダ
部30のCPU32は、このデコードスタートトリガ信
号が入力したときに、バーコードが適正位置に停止した
として、そのときフレームメモリ31に格納されている
バーコードの映像を読出して、デコード処理を行う。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、バーコードを読み取る
バーコードリーダ装置に係り、特に、バーコードのデコ
ード開始タイミングの制御に関する。
【0002】
【従来の技術】最近の目ざましいPOS(ポイント・オ
ブ・セールス=販売時点情報管理システム)の普及によ
って、バーコードは、広く一般に知られるようになって
きた。ここで、バーコードとは、大きさの異なるバーと
スペースの平行な組合せパターンにより1つのバーコー
ドキャラクタを形成し、必要であればチェックデジット
を含む必要なキャラクタ群を平行に配列し、例えば前後
にスタート/ストップキャラクタのような特徴的な所定
パターンを配して構成したシンボルのことである。
【0003】広く一般消費財に使用されているバーコー
ドとしては、JAN(Japan Article Number)が日本で
標準化されている。また、バーコードの他の応用として
は、物流シンボルがある。このシンボルは、上記JAN
コードの前に、1桁又は2桁の物流識別コードが追加さ
れたものである。上記いずれのバーコードシンボルも1
次元バーコードと呼ばれるものであり、これらのコード
体系が許容できる情報量はせいぜい数十バイトであっ
た。
【0004】ところが近年、バーコードの情報量に対す
る要求が、声高に叫ばれるようになってきた。それに呼
応するように、各種の2次元バーコードと呼ばれるシン
ボル体系が発表されている。
【0005】それらのシンボル体系によれば、いずれも
1次元バーコードに比べ格段に多い情報をコード化でき
る特徴を持っている。この体系には、1次元のバーコー
ドを積み重ねることによって、情報量を増加させる方式
がある。このような方式のシンボルは、スタックドバー
コードと呼ばれている。この種のスタックドバーコード
には、「PDF−417」と呼ばれるコード体系や「C
ODE 49」と呼ばれるコード体系がある。
【0006】このような2次元バーコードを読み取るた
めのバーコードリーダの一つとして、照明,レンズ,及
びCCD等の2次元イメージセンサによる結像光学系に
よって構成されたものが挙げられる。このようなバーコ
ードリーダでバーコードを読み取る場合は、まず、2次
元バーコードを2次元イメージセンサの撮像エリア内に
配置する。その結果、バーコードの像が2次元イメージ
センサ上に結像し、像情報が映像信号となってデコーダ
に入力する。そして、デコーダ内でバー,スペースの黒
白の映像情報を数値情報に変換し、デコード結果として
外部に出力するものである。
【0007】ところで、このようなデコード作業のスタ
ート方法としては、バーコードの有無にかかわらず常に
繰り返しデコードをしているものや、バーコードが適正
位置に有り、撮像できるとセンサ又は操作者などが判断
したら、スタートするものなどがある。
【0008】
【発明が解決しようとする課題】上記のように、2次元
バーコードを読ませるときには、2次元バーコードは撮
像エリア外から撮像エリア内に移動して入れられる。
【0009】しかし、従来のように、常に繰り返しデコ
ードをしているものでは、2次元バーコードが撮像エリ
ア内のほぼ中心の適性位置に移動する過程でバーコード
を読み始めてしまう。このようにバーコード全体を全て
撮像できない状態のとき、「PDF417」や「DAT
D CODE」のようなエラー訂正機能のあるバーコー
ドでは読める場合もあるが、エラー訂正機能のないバー
コードでは全く読めない。また、エラー訂正機能のある
バーコードに於いても、エラー訂正処理に時間を要する
ので、バーコード全体を撮像した場合よりもデコード時
間が長くなるという不具合が生ずる。
【0010】また、センサや操作者によって適正位置に
バーコードが停止したかどうかの判断をするものでは、
センサ装置が必要になったり、操作者に余分な作業を強
いることになり、適当でないし、誤りも多い。
【0011】本発明は上記の点に鑑みてなされたもの
で、バーコードシンボルの像領域(以下、本明細書中で
はこれをラベルと称する)の移動の停止を検出すること
によって、ラベルの移動中にデコードを開始することな
く、適性位置にラベルが停止したときにデコードを開始
できるバーコードリーダ装置を提供することを目的とす
る。
【0012】
【課題を解決するための手段】上記の目的を達成するた
めに、本発明によるバーコードリーダ装置は、バーとス
ペースとからなるバーコードを撮像する撮像手段と、該
撮像手段により撮像した映像のブレを検出する検出手段
と、該検出手段の検出信号にもとづいて、前記撮像手段
により撮像したバーコードの映像のデコード処理の開始
を制御する制御手段とを備えることを特徴としている。
【0013】
【作用】即ち、本発明のバーコードリーダ装置によれ
ば、検出手段により撮像手段で撮像したバーコードの映
像のブレを検出し、制御手段は、この検出手段の検出信
号にもとづいて、前記撮像手段により撮像したバーコー
ドの映像のデコード処理の開始を制御する。つまり、検
出手段により映像にブレがないことを検出したとき、デ
コード処理を開始させる。
【0014】
【実施例】本発明の実施例を説明する前に、本発明の理
解を助けるために、まず本発明の第1及び第2の実施例
の概念につき説明する。即ち、2次元バーコードが撮像
エリア内の所定位置に移動する過程ではバーコードの読
み取りを開始せず、バーコードが停止したことを検知し
た後、始めて読み(デコードし)始める。このバーコー
ド停止の検知方法は、例えば、図2の(A)に示すよう
なバーコード像1の特定の少なくとも1ライン分の映像
信号を用いる。この同じ場所(ライン)の時間間隔をお
いた2ラインのデータを用いて判断をする。原理的に
は、同じ映像ライン2の時間間隔をおいた2ラインのデ
ータが同じデータであるならば、そのラインの画像デー
タは動いていないと判断でき、従って、そのデータを含
む画面全体も動いていないと言える。もちろん、このラ
インの数は、1ラインである必要はなく、複数本を用い
た方がより正確な検出ができることは言うまでもない。
【0015】このライン2の設定方向は、一般的に用い
られる映像信号、例えばNTSCの走査線方向に設定す
るのが適当である。NTSCでは、1画面が約1/30
秒で送られてくるので、例えば10画面おきの特定の走
査線の出力は、この箇所の約1/3秒おきの時間間隔を
おいたラインのデータとなる。このライン2の適当と思
われる設定位置は、図2の(B)に示すような上端部、
中央部、下端部の3ラインである。または、システムの
構成は若干複雑になるが、図2の(C)に示すような画
面の4辺に接した4ラインを用いれば、さらに停止検知
能力を上げることができる。
【0016】以下、図面を参照して、本発明の実施例を
説明する。図1の(A)は、本発明のバーコードリーダ
装置の第1の実施例の構成を示すブロック図である。カ
メラ10で撮像されたバーコード1の像は、一般的に用
いられるNTSC等の映像信号となって信号処理部20
に送られる。信号処理部20ではゲイン調整,A/D変
換,等を行って、ディジタル映像(画像)データを出力
する。このディジタル情報は2系統に分けられ、一方は
デコーダ部30へ、他方は停止検知部40に送られる。
【0017】デコーダ部30は、フレームメモリ31と
CPU32、及びワークエリアとして用いられる不図示
メモリで構成されている。信号処理部20からのディジ
タル情報は、CPU32の制御によりフレームメモリ3
1に取り込まれる。
【0018】また、停止検知部40には、上記ディジタ
ル画像情報に加えて、上記信号処理部20より制御信号
も送られる。この制御信号は、ラベルの停止検知に用い
る映像信号のラインの位置を決定するのに用いられる。
この制御信号として、本実施例では、水平同期信号と垂
直同期信号を用いる。また、この停止検知部40には、
上記CPU32から画面上のどのラインをどれくらいの
時間間隔で選択するかの選定値入力信号も供給される。
そして、この停止検知部40は、ラベルの移動停止を検
知して、デコーダ部30にデコードスタートトリガを入
力する。
【0019】デコーダ部30のCPU32では、このデ
コードスタートトリガ信号を受けて、フレームメモリ3
1に取り込んだディジタル画像情報に対してデコード処
理を行う。このデコーダ処理は、フレームメモリ31に
取り込まれたディジタル画像情報を読出すことにより得
られるバー,スペースを表す明暗の映像情報を数値情報
に変換し、デコード結果として外部に出力する。通常、
このデコード結果は、ホストコンピュータ等50に送ら
れ、操作者に示される。
【0020】図1の(B)は、図1の(A)に於ける停
止検知部40の詳細を示す図である。以下、図2の
(B)に於けるようなラインのうち1本を用いて検出す
る場合を例にとって説明する。
【0021】即ち、信号処理部20から制御信号とし
て、水平同期信号及び垂直同期信号がカウンタ部41に
入力される。カウンタ部41には、この他に、画面上の
どのラインをどれくらいの時間間隔で選択するかの選定
値入力信号がCPU32より与えられる。
【0022】このカウンタ部41は、図3に示すよう
に、2つのカウンタ41A,41BとAND回路41C
で構成されている。第1のカウンタ41Aは、垂直同期
信号に応答してCPU32からのどのラインを選択する
かの選定値Aを初期値としてセットした後、信号処理部
20からの水平同期信号をカウントし、選定値Aまでカ
ウントすると、ハイレベルの出力をAND回路41Cへ
入力する。また、第2のカウンタ41Bは、自身のハイ
レベルの出力に応答してCPU32からのどれくらいの
時間間隔で選択するかの選定値Bを初期値としてセット
した後、信号処理部20からの垂直同期信号をカウント
し、選定値Bまでカウントすると、ハイレベルの出力を
AND回路41Cへ入力する。AND回路41Cは、両
方のカウンタ41A,41Bの出力がハイレベルとなっ
た時に、コントロール信号(ハイレベル)を出力する。
即ち、この カウンタ部41では、水平同期信号をカウ
ントし、選定値A及びBにより選択された選定ライン部
分に達するとコントロール信号を出力する。つまり、垂
直同期信号は水平同期信号のカウンタへの選定値Aのセ
ットと、フィールド数を計測することによる時間間隔の
計測に使われている。なお、時間間隔の計測は、信号処
理部20からのフィールド判別信号を用いるものとし、
フィールド数を計測することによって行うようにしても
良い。
【0023】カウンタ部41から出力されたコントロー
ル信号は、ディジタル映像信号の通過及び遮断を行うた
めのスイッチ部42に送られる。このスイッチ部42
は、上記カウンタ部41からコントロール信号が入力さ
れたときだけ閉じて、ディジタル映像信号を通すものと
なっている。即ち、選択されたラインの信号のみが通さ
れる。また、このスイッチ部42は、メカスイッチ,3
ステート素子などを用いて構成することもできる。
【0024】上記信号処理部20の出力の内の選択され
たラインの信号は、スイッチ部42を通った後、2系統
に分けられる。一方はFIFOメモリ(First In First
Outメモリ)43に一担保持された後に減算器44に入
力され、他方は直接、減算器44に入力される。FIF
Oメモリ43は1ラインの映像信号が記憶できるような
容量を持っており、後から入ってきたデータによって先
に入ったデータは押し出されるような構造となってい
る。
【0025】前述したように、スイッチ部42は同じフ
ィールドの同じラインの映像信号の時に閉じるようにな
っているので、結果として、減算器44では、設定され
た時間間隔をあけた同じ位置(同じライン上)の各画素
の明暗データが順番に減算される。ここで、撮像された
絵が動いていなければ、設定された時間間隔をあけた同
じライン上の各画素の明暗データは同じものとなるの
で、減算器44の出力はほぼゼロになる。
【0026】減算器44の出力は、1ライン分データ加
算器45に送られ、1ライン分の各画素の明暗データの
差を合算していく。そして、この結果は比較器46に送
られ、設定値と比較される。この比較演算は減算器44
の出力がゼロと見なして良いかどうかの判断を行ってい
るものである。よって、この設定値は、ゼロと見なして
良い上限値を示している。
【0027】そして、比較器46によって減算器44の
出力がゼロと見なされた場合には、この比較器46より
上記デコードスタートトリガ信号がデコーダ部30のC
PU32に送られる。CPU32は、このデコードスタ
ートトリガ信号に応答して、デコード処理を開始する。
【0028】即ち、停止検知部40で、設定された時間
間隔をあけた同じライン上のデータを比較することによ
りラベルの停止を検出し、ラベルが停止したことが検出
されたときに始めてCPU32でデコード処理を開始す
るようにしているので、ラベルの移動中にデコードを開
始することなく、適性位置にラベルが停止したときにデ
コードを開始できるようになる。以上のような本実施例
の構成を用いれば、ハンディスキャナーを用いた場合の
手振れ検出にも応用することができる。
【0029】また、上記のような第1の実施例は、バー
コード像の特定の1ライン分の映像信号を用いた場合で
あるが、複数本用いる場合、例えば図2の(B)のよう
に3ラインを用いる場合には、そのライン数に応じて図
4のように停止検知部40を増やせば良い。但し、AN
D回路60によって、第1乃至第3の停止検知部40
A,40B,40Cのすべてが、デコードスタートトリ
ガ信号を出力した時にだけ、デコーダ部30のCPU3
2に最終デコードスタートトリガ信号を出力するような
構成とする必要がある。
【0030】なお、図2の(C)のようなライン2を用
いて検出する場合は、縦方向のライン上の映像データも
格納できるような回路構成にした停止検知部40が必要
である。また、画面上のどのラインをどれくらいの時間
間隔で用いるかの選択は、ソフトウェアで行って最適な
ラインを選択してもよい。
【0031】さらに、上記のように停止検知部40の機
能をソフトウェアで実現するようにしても良い。以下、
そのようなソフトウェアによる手法を説明する。まずそ
の概念につき説明する。即ち、上記第1の実施例では、
バーコード像1の特定の場所(ライン)の時間間隔をお
いた2ラインのデータを用いて像の停止を判断している
が、本実施例では、バーコード像1のエッジの2ヶ所を
検出し、この2ヶ所の位置が時間間隔をおいても同じ位
置であるれば、バーコード像1が動いていないと判断し
て、デコードのスタートをかけるものである。
【0032】図5はその構成を示す図である。本実施例
に於いては、停止検知部を廃し、フレームメモリ31と
して2画面(バンク0(Bank“0”),バンク1
(Bank“1”))分の容量を有するものを用いてい
る。
【0033】図6の(A)は、2次元スタックドバーコ
ードの例として、「PDF−417」のラベル構造を示
している。このバーコードラベルは、バーとスペースの
組合せでなるバーコードキャラクタ群で構成されたデコ
ードされるべき情報成分の領域であるラベル部71と、
その前後に配されたスタート/ストップキャラクタであ
るスタートコード72及びストップコード73とを有し
ている。そして、1コードは、ストップコード73を除
いて4つのバーとスペースとからなっている。また、ス
タート及びストップコード72,73は、“ビッグバ
ー”と呼ばれる大きなバー72A,73Aから始まって
いる。
【0034】ラベル部71は、スタートコード72及び
ストップコード73の隣に存在するロウインディケータ
71Aと呼ばれるコードと、それらの間に挟まれた実際
のデータが記述されている複数のデータカラム71Bで
なるラベルマトリックス71Cとにより構成される。ロ
ウインディケータ71Aには、ラベルのロウ方向,カラ
ム方向のサイズやセキュリティレベル等が記述されてい
る。従って、このロウインディケータの情報を解読すれ
ば、ラベルの情報サイズ等が決定できる。
【0035】なお、この図6の(A)は、4×2のラベ
ルマトリックスを有するバーコードラベルを示してい
る。今、仮想的に、フレームメモリ31の画素配列に上
記のような「PDF−417」のラベル画像を投影した
模式図を図6の(B)に示す。
【0036】CPU32では、以下に説明するようなア
ルゴリズムに基づいて、ラベル検出を行い、ラベル情報
を読出しデコードを行って、ホストコンピュータ等50
に出力する。
【0037】即ち、図7は、このCPU32でラベル情
報を読出すアルゴリズムの概略を示すフローチャートで
ある。なお、本明細書中に於いては、フローチャート
は、プログラミング言語Cの記述方式に従って書かれて
いる。
【0038】まず、詳細は後述するような画像取り込み
ルーチンをコールして(ステップS1)、画像をフレー
ムメモリ31に連続的に2画面(Bank“0”31
A,Bank“1”31B)取り込む。ここで、連続的
にとは、まず1画面の画像データをBank“0”31
Aに格納し、次に、1画面の画像データをBank
“1”31Bに格納するということである。この際、最
初に取り込み指令を出してから最新のフレームのデータ
をBank“0”31Aに取り込み、次にその取り込み
が終了した後、再度取り込み指令を出して最新のフレー
ムのデータをBank“1”31Bに取り込むため、2
画面のデータ間には、撮像の時間差が存在する(この時
間差は、Bank“0”31Aに格納する時間+0〜1
/30秒)。
【0039】次に、詳細は後述するようなラベル検出ル
ーチンをコールして(ステップS2)、この取り込まれ
た画像データの内のBank“0”31Aを用いてラベ
ルが存在するかをチェック、さらにはラベルが存在する
ならばラベル情報を検出する。
【0040】そして、上記ステップS2に於けるラベル
検出処理の結果を判断し(ステップS3)、ラベルが存
在しない場合には、再度、上記ステップS1に制御を移
して画像取り込みルーチンをコールする。
【0041】一方、ラベルが存在する場合には、詳細は
後述するようなブレ検出ルーチンをコールして(ステッ
プS4)、上記ステップS1で取り込まれた画像データ
の内のBank“1”31Bをもさらに用いて像ブレの
影響を推定する。ここで、像ブレとは、バーコードラベ
ルを印刷してある印刷物を当該バーコードリーダ装置に
かざした場合に、高い頻度で起こる画像のブレのことを
指す。
【0042】次に、上記ステップS4に於けるブレ検出
の結果を判断し(ステップS5)、像ブレを起こしてい
る場合には、再度、上記ステップS1に制御を移して画
像取り込みルーチンをコールする。像ブレを起こしてい
ない場合には、デコード処理を行い(ステップS6)、
その結果をホストコンピュータ等50に出力する。
【0043】以上述べてきた各種処理ルーチンを、以下
に詳しく説明する。まず、図8のフローチャートを参照
して、上記ステップS1でコールされる画像取り込みル
ーチンを説明する。ディジタル画像データを、信号処理
部20からフレームメモリ31のBank“0”31A
に取り込む(ステップS11)。次に、画像データを、
2次元撮像装置5からフレームメモリ6のBank
“1”31Bに取り込む(ステップS12)。これによ
り、連続的に2画面の画像データを取り込むこととな
る。
【0044】次に、図9のフローチャート及び図10の
(A)のラベル投影像80の図を参照して、上記ステッ
プS2でコールされるラベル検出ルーチンを説明する。
このラベル検出ルーチンは、ラベルの有無を検出するこ
とと、ラベルの位置情報を検出すること即ちラベルに平
行に画像データをフレームメモリ31から抽出するため
の抽出範囲(変数TOP及びBOTTOM)とラベルの
傾き(変数SLOPE)を求めることとの2種類のラベ
ル検出処理を含む。ここで、変数TOPの値はラベルの
トップ座標を示し、また変数BOTTOMの内容はラベ
ルのボトム座標を示す。また変数SLOPEの内容はラ
ベルの傾きを示す。
【0045】このラベル検出ルーチンに於いては、ま
ず、処理対象画像をフレームメモリ31のBank
“0”31Aとする(ステップS21)。次に、ラベル
検出フラッグを初期化する(ステップS22)。このラ
ベル検出フラッグは、スタート検出フラッグstart
_flagとストップ検出フラッグstop_flag
からなる。これらラベル検出フラッグは、後述する他の
処理に於いて、スタートコード72及びストップコード
73のどちらを選択して処理すべきかを指し示すために
用いられる。なぜならば、スタートコード72とストッ
プコード73の両方が検出された場合に、より信頼性の
高い方を選択する必要があるからである。
【0046】次に、詳細は後述するようなスタート/ス
トップコード検出ルーチンをコールして(ステップS2
3)、フレームメモリ31のBank“0”31Aに取
り込んだ画像データにスタート及び/又はストップコー
ドが存在するかどうかを検出する。つまり、図10の
(A)に於ける座標e,f,g,hを検出する(但し、
これら4個の座標変数の全てが検出されるとは限らず、
例えば、図10の(B)に示すような場合では、座標変
数f及びhが求まらないかもしれない)。このルーチン
により、スタート及びストップコードが検出されて確定
されれば、スタートコード72の場合は図10の(A)
のフレームメモリ31上の座標変数gが、またストップ
コード73の場合は座標変数hが定義される。ここで、
座標変数eはスタートコード72を最初に見つけた座
標、fはストップコード73を最初に見つけた座標、g
はスタートコード72を最後に見つけた座標、hはスト
ップコード73を最後に見つけた座標をそれぞれ示して
いる。
【0047】そして、座標変数g,hの何れか一方が定
義されているかどうかを判断し(ステップS24)、定
義されていない場合は、ラベルなしとしてこの処理を抜
ける。即ち、ラベルなしの情報を持ってリターンする。
なお、本明細書では、C言語の表記方式に従っているた
めこのような図の書き方となるが、FORTRAN等の
表記方式に従えば、ラベルなしのフラッグを立てた後に
リターンという書き方となろう。以上のようにして、ラ
ベルの有無の検出が行われる。
【0048】次に、ラベルの位置情報の検出、即ちラベ
ルに平行に画像データをフレームメモリ31から抽出す
るための抽出範囲(変数TOP及びBOTTOM)とラ
ベルの傾き(変数SLOPE)の算出が行われる。
【0049】即ち、上記ステップS24に於いて、座標
変数g,hの何れか一方が定義されていると判断された
場合は、座標変数gが定義されているのかどうかを判断
し(ステップS25)、定義されていなければ、ステッ
プS27に進む。しかし、座標変数gが定義されている
場合には、詳細は後述するようなスタートエッジ位置検
出ルーチンをコールして(ステップS26)、スタート
エッジ位置の検出を行う。このスタートエッジ検出は、
座標変数e及びg(座標変数gが定義されていれば当然
座標変数eも定義されている)より図10の(A)に示
すような座標変数i及びmを定義し、さらに座標変数a
及びdを定義する。また、start_flagをON
し、座標変数TOP及びBOTTOMを定義する。ここ
で、座標変数a及びdはそれぞれラベルの4角座標の内
の一つを示す。
【0050】次に、座標変数hが定義されているのかど
うかを判断し(ステップS27)、定義されていなけれ
ば、ステップS29に進む。しかし、座標変数hが定義
されている場合には、詳細は後述するようなストップエ
ッジ位置検出ルーチンをコールして(ステップS2
8)、ストップエッジ位置の検出を行う。このストップ
エッジ位置検出は、座標変数f及びh(座標変数hが定
義されていれば当然座標変数fも定義されている)より
図10の(A)に示すような座標変数j及びkを定義
し、さらに座標変数b及びcを定義する。また、sto
p_flagをONし、座標変数TOP及びBOTTO
Mを定義する。ここで、座標変数b及びcはそれぞれラ
ベルの4角座標の内の一つを示す。
【0051】次に、start_flag,stop_
flag共にONかどうかを判断し(ステップS2
9)、両方がONしていない場合には、ステップS2E
に進む。なおここで、図中の記号&&は論理積を示す。
【0052】両フラッグ共にONの場合は、それらst
art_flag,stop_flagを両方ともいっ
たんリセットしてから(ステップS2A)、線分(a−
d)と(c−d)を比較して(ステップS2B)、スタ
ートコード72とストップコード73でその線分が長い
方を処理対象として選択する。これは、通常使用時に於
いて、片方のコードが他方に対して短くなる最大の理由
は、画面からはみ出す場合であるので、長い方を処理基
準に選ぶようにしているということによる。
【0053】そして、線分(a−d)の方が線分(b−
c)よりも短いときには、座標変数TOPに座標変数b
の値を、また座標変数BOTTOMには座標変数cの値
をそれぞれ代入してラベル情報の抽出範囲を決定するた
めのデータを定義し、さらにstop_flagを選択
してONする(ステップS2C)。
【0054】逆に、線分(a−d)の長さが線分(b−
c)以上のときには、座標変数TOPに座標変数aの値
を、また座標変数BOTTOMには座標変数dの値をそ
れぞれ代入してラベル情報の抽出範囲を決定するための
データを定義し、さらにstart_flagを選択し
てONする(ステップS2D)。
【0055】そして、ラベルの傾きを求めるルーチンを
コールして(ステップS2E)、これら座標変数TOP
及びBOTTOMよりラベルの傾き(変数SLOPE)
を求め、これら得られた変数と共にラベルありの情報を
持ってリターンする。
【0056】次に、上記のようなラベル検出ルーチン中
のステップS23でコールされるスタート/ストップコ
ード検出ルーチンを、図11のフローチャートを参照し
て説明する。このスタート/ストップコード検出ルーチ
ンは、前述したように、座標変数e及びg、又はf及び
hの少なくとも一方を検出するものである。
【0057】即ち、まずラベル検出間隔用変数INIT
にラベル未検出時の検出間隔変数INC0の値を代入す
る(ステップS231)。次に、詳細は後述するような
スキャン及び(&)検出(行)ルーチンをコールして
(ステップS232)、フレームメモリ31のBank
“0”31Aの画像データを行方向にスキャンし、スタ
ート/ストップコードの検出を行う。ここで、行方向の
スキャンとは、図10の(A)にロウスキャンとして示
すような、フレームメモリ31の長手方向へのスキャン
のことである。
【0058】そして、上記スキャン&検出(行)ルーチ
ンの結果、スタートコード72もしくはストップコード
73が検出されたかどうか、即ちラベルが検出されたか
どうかを判断し(ステップS233)、ラベルが検出さ
れた場合には、ラベルあり検出の情報を持ってリターン
する。
【0059】一方、ラベルが検出されない場合には、ラ
ベル検出間隔用変数INITにラベル未検出時の検出間
隔変数INC0の値を代入した後(ステップS23
4)、スキャン&検出(列)ルーチンをコールして(ス
テップS232)、フレームメモリ31のBank
“0”31Aの画像データを列方向にスキャンし、スタ
ート/ストップコードの検出を行う。ここで、列方向の
スキャンとは、図10の(A)にカラムスキャンとして
示すような、フレームメモリ31の短手方向へのスキャ
ンのことである。
【0060】そして、上記スキャン&検出(列)ルーチ
ンの結果、スタートコード72もしくはストップコード
73が検出されたかどうか、即ちラベルが検出されたか
どうかを判断し(ステップS235)、ラベルが検出さ
れた場合には、ラベルあり検出の情報を持ってリターン
する。
【0061】しかしながら今度もラベルが検出されなか
った場合には、その原因が角度エラーによるものかを判
断する(ステップS236)。このラベルの角度エラー
は、上記ステップS232でコールされるスキャン&検
出ルーチンのリターン値を参照して行われる。即ち、上
記スキャン&検出ルーチンで、角度エラーとなっている
かどうかを逐次チェックし、エラーが発生すれば、リタ
ーン値に角度エラーフラッグとラベル非検出のフラッグ
を立ててそこで処理を中断して戻ってくる。この角度エ
ラーの判断の場合、この後に再度処理するのは行方向だ
けであるので、列方向を走査したリターン値をこのステ
ップS236で判断させることにより、角度エラーのた
めにラベルなし検出としたのかラベルが検出できなかっ
たためにそうしたのかの判断をしている。このステップ
S236で角度エラーでないと判断された場合には、ラ
ベルなし検出の情報を持ってリターンする。
【0062】一方、角度エラーと判断された場合には、
次に、ラベル検出間隔用変数INITに、ラベル検出時
のラベル検出間隔INC1を代入する(ステップS23
7)。ここで、検出間隔変数INC0とINC1の大き
さは、基本的には両者の最小公倍数が画面範囲を越えて
いるのが望ましく、例えばINC0=23,INC1=
17である。
【0063】その後、再度、スキャン&検出(行)ルー
チンをコールして(ステップS232)、フレームメモ
リ31のBank“0”31Aの画像データを行方向に
スキャンし、スタート/ストップコードの検出を行う。
【0064】そして、スタート/ストップコード即ちラ
ベルが検出されたかどうか判断し(ステップS23
8)、検出された場合にはラベルあり検出の情報を持っ
てリターンし、ラベルが検出されない場合はラベルなし
検出の情報を持ってリターンする。
【0065】このように、本スタート/ストップコード
検出ルーチンでは、その検出は、まず行方向へのスキャ
ンにより行われ、これで求められなければ、列方向のス
キャンにより求める。これでも求められなければ、角度
エラー(つまりラベルが傾きすぎていること)かどうか
判断し、エラーならラベル検出間隔を変えて再度行方向
のスキャンを行って再度検出してみる。これでも検出さ
れないならば、ラベルなし検出とする。
【0066】なお、角度エラーの時に行方向スキャンし
か行わないのは、バーコードラベルは、行スキャンで見
つかるように、つまりカラム方向がフレームメモリ31
の長手方向(横方向)となるように置かれるのが一般的
であり、この人間の特性を利用すれば、列方向は省略で
きるという理由による。勿論、列方向スキャンを行って
も良いが、その場合は実行速度が落ちてしまう。
【0067】ここで、上記ステップS232でコールさ
れるスキャン&検出ルーチンを、図12及び図13に示
す一連のフローチャートを参照して説明する。このルー
チンの処理は、Bank“0”31Aのデータを行方向
もしくは列方向に所定の検出間隔に従って走査し、座標
変数e及びgと座標変数f及びhとの少なくとも一方を
決定することにある。どちらの方向に走査するかは、こ
のルーチンをコールする際に決定される。座標変数e及
びg、f及びhの少なくとも一方を決定でき、且つその
際に角度エラーをおこしていない場合は、ラベルを検出
したとして上位のルーチンに戻る。座標変数e及びg、
f及びhのどちらかの組み合わせも検出できなかった場
合は、ラベルなし検出として上位のルーチンに戻る。ま
た、検出はできても、その座標値から計算されるラベル
角度が走査方向に対して45度以上傾いている場合は、
ラベルなし検出且つ角度エラーとして上位のルーチンに
戻る。
【0068】即ち、まずパラメータscan_incを
検出間隔用変数INITに初期設定し(ステップS23
21)、さらにパラメータnを上記scan_incに
初期設定する(ステップS2322)。ここで、パラメ
ータscan_incは本ルーチンで使われるラベル検
出(スキャン)間隔を示し、パラメータnは検出(スキ
ャン)処理を施すライン位置を表す。
【0069】この初期設定の後、行スキャンか列スキャ
ンか判断し(ステップS2323)、行スキャンであれ
ばn行目の画像データを取り込み(ステップS232
4)、また列スキャンであればn列目の画像データを取
り込む(ステップS2325)。
【0070】次に、上記取り込んだ画像データにスター
トコード72が存在するかを判断し(ステップS232
6)、存在しなければステップS232Aへ進む。スタ
ートコード72が存在する場合には、そのスタートコー
ド72が初めて検出されたものか否かを判断する(ステ
ップS2327)。初めて検出されたものである場合
は、その検出座標を座標変数eに格納する(ステップS
2328)。また、初めて検出されたものでない場合
は、その検出座標を座標変数gに格納する(ステップS
2329)。ここで、最初に検出されたものであるかど
うかは、座標変数eに値が格納されているかどうかを見
て判断している。
【0071】次に同様に、上記取り込んだ画像データに
ストップコード73が存在するかを判断し(ステップS
232A)、存在しなければステップS232Eへ進
む。ストップコード73が存在する場合には、そのスト
ップコード73が初めて検出されたものか否かを判断す
る(ステップS232B)。初めて検出されたものであ
る場合は、その検出座標を座標変数fに格納する(ステ
ップS232C)。また、初めて検出されたものでない
場合は、その検出座標を座標変数hに格納する(ステッ
プS232D)。ここで、最初に検出されたものである
かどうかは、座標変数fに値が格納されているかどうか
を見て判断している。
【0072】次に、パラメータnの値をscan_in
cの値だけ増加させてnを更新し(ステップS232
E)、次回取り込む行もしくは列数を決定する。そし
て、フレームメモリ31の縦と横のサイズは既知である
ため、このサイズより上記更新されたnが画面外かどう
かを判断し(ステップS232F)、画面内の場合は、
上記ステップS2323に制御を移す。
【0073】画面外の場合つまりスキャンが終了したな
らば、次に、座標変数gが定義されたかどうかを判断し
(ステップS232G)、定義されていない場合はステ
ップS232Lに制御を移す。
【0074】この座標変数gが定義されている場合に
は、次に、行スキャンか列スキャンかを判断する(ステ
ップS232H)。そして、行スキャンの場合には、座
標変数gのx座標の値と座標変数eのx座標の値との差
を、座標変数gのy座標の値と座標変数eのy座標の値
との差で割り、その結果の値の絶対値をとり(これを図
中ABSと記す)、これを傾きの絶対値を示す変数de
ltaに代入する(ステップS232I)。
【0075】また、列スキャンの場合には、座標変数g
のy座標の値と座標変数eのy座標の値との差を、座標
変数gのx座標の値と座標変数eのx座標の値との差で
割り、その結果の値の絶対値をとり、これを変数del
taに代入する(ステップS232J)。
【0076】そして、得られた傾きの絶対値delta
が1よりも大きいかどうかを判断することにより(ステ
ップS232K)、角度エラーかどうかを判断する。角
度エラーの場合には、ラベルなし検出及び角度エラーの
情報を持ってリターンする。
【0077】角度エラーでない場合には、もしくは上記
ステップS232Gで座標変数gが定義されていないと
判断された場合には、次に、座標変数hが定義されたか
どうかを判断し(ステップS232L)、定義されてい
ない場合はステップS232Qに制御を移す。
【0078】この座標変数hが定義されている場合に
は、次に、行スキャンか列スキャンかを判断する(ステ
ップS232M)。そして、行スキャンの場合には、座
標変数hのx座標の値と座標変数fのx座標の値との差
を、座標変数hのy座標の値と座標変数fのy座標の値
との差で割り、その結果の値の絶対値をとり、これを傾
きの絶対値deltaに代入する(ステップS232
N)。
【0079】また、列スキャンの場合には、座標変数h
のy座標の値と座標変数fのy座標の値との差を、座標
変数hのx座標の値と座標変数fのx座標の値との差で
割り、その結果の値の絶対値をとり、これをdelta
に代入する(ステップS232O)。
【0080】そして、得られた傾きの絶対値delta
が1よりも大きいかどうかを判断することにより(ステ
ップS232P)、角度エラーかどうかを判断する。角
度エラーの場合には、ラベルなし検出及び角度エラーの
情報を持ってリターンする。
【0081】そして、角度エラーでない場合には、もし
くは上記ステップS232Lで座標変数hが定義されて
いないと判断された場合には、次に、座標変数gもしく
はhが定義されたかどうかを判断し(ステップS232
Q)、定義された場合にはラベルあり検出の情報を持っ
てリターンし、定義されていない場合にはラベルなし検
出の情報を持ってリターンする。
【0082】このように上記ステップS232G乃至S
232J、もしくはステップS232L乃至S232O
で、スタート/ストップコードの傾きを求めることによ
りラベル全体の傾きを求め、ステップS232Kもしく
はS232Pで、その傾きの絶対値deltaが1を越
えるかどうかを判断し、1を越える場合は、角度エラー
でラベルなし検出として制御を戻す。また、その傾きの
絶対値deltaが1を越えない場合は、ステップS2
32Qで座標変数gもしくはhが定義されているかどう
かを判断し、定義されている場合はラベルが検出された
として制御を戻し、定義されていない場合はラベルなし
検出として制御を戻す。
【0083】なお、上記ステップS232K及びS23
2Pで角度エラーを判定するのは、次の理由による。即
ち、本来検出されるべき抽出方向で「すり抜け」が発生
し、他方で検出されることは、希ではあるが発生する。
その場合、その後の処理でエラーが発生するため、この
ような検出がなされないようにするためである。また、
角度エラーの基準が1となるのは、ラベル回転角45度
でdeltaが1となるからである。
【0084】次に、上記のようなラベル検出ルーチン中
のステップS26でコールされるスタートエッジ位置検
出ルーチンを、図14のフローチャートを参照して説明
する。
【0085】即ち、まずスタート検出フラッグstar
t_flagをONした後(ステップS261)、線分
e−gに平行な直線の方程式を定義、例えば線分e−g
の方程式y=ax+bを求める(ステップS262)。
次に、この直線がスタートビックバー72Aをクロスす
るように、切片bを定義する(ステップS263)。ス
タートコード72の構造は、例えば、8個のバーでなる
スタートビッグバー72Aと、3対の白バーと黒バー
と、3個の白バーの合計17個のバーで構成されてお
り、これを撮像した結果がN画素であったとする。ま
た、方程式y=ax+bで表わされる直線は、切片bを
変化させることにより並行移動することが知られてい
る。従って、ビックバー72Aをクロスする直線を得る
ためには、上記線分e−gを{(17−8/2)/1
7}×N画素分左に移動させるような切片bとすれば良
いことになる。
【0086】こうしてスタートビッグバー72Aをクロ
スする直線が得られたならば、次に、その直線と画面を
定義する方程式との交点をそれぞれA,A’(図10の
(A)参照)とする(ステップS264)。
【0087】そして、このラインA−A’の中点から点
Aに向けてデータを順に見ていき(ステップS26
5)、エッジが存在するかどうかをチェックする(ステ
ップS266)。このチェックは、例えば、輝度変化を
見る強度比較、微分法、2次微分法、等により行なうこ
とができる。こうして、エッジが検出されたならば、そ
の検出座標を座標変数iに格納する(ステップS26
7)。即ち、検出座標を点iとする。
【0088】次に、上記ラインA−A’の中点から今度
は点A’に向けてデータを順に見ていき(ステップS2
68)、エッジが存在するかどうかをチェックする(ス
テップS269)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数mに格納する(ステップS
26A)。即ち、検出座標を点mとする。
【0089】そして、座標変数e,gで示される点e,
gを通る直線に座標変数iで示される点iから垂線を下
ろし、その交点の座標を座標変数aに格納する(ステッ
プS26B)。即ち、点iを通るラインA−A’と直交
する直線の方程式を求めて、それと点e,gを通る直線
の交点を求め、その交点を点aとする。
【0090】同様に、座標変数e,gで示される点e,
gを通る直線に座標変数mで示される点mから垂線を下
ろし、その交点の座標を座標変数dに格納する(ステッ
プS26C)。即ち、点mを通るラインA−A’と直交
する直線の方程式を求めて、それと点e,gを通る直線
の交点を求め、その交点を点dとする。
【0091】そして、こうして求めた座標変数aの値を
座標変数TOPに、また座標変数dの値を座標変数BO
TTOMにそれぞれ格納した後(ステップS26D)、
上位のルーチンへ制御を戻す。
【0092】また、上記のようなラベル検出ルーチン中
のステップS28でコールされるストップエッジ位置検
出ルーチンも、このスタートエッジ位置検出ルーチンと
ほぼ同様にして行われる。図15は、このストップエッ
ジ位置検出ルーチンのフローチャートである。
【0093】即ち、まずストップ検出フラッグstop
_flagをONした後(ステップS281)、線分f
−hに平行な直線の方程式を定義、例えば線分f−hの
方程式y=ax+bを求める(ステップS282)。次
に、この直線がストップビックバー73Aをクロスする
ように、切片bを定義する(ステップS283)。こう
してストップビッグバー73Aをクロスする直線が得ら
れたならば、次に、その直線と画面を定義する方程式と
の交点をそれぞれB,B’(図10の(A)参照)とす
る(ステップS284)。
【0094】そして、このラインB−B’の中点から点
Bに向けてデータを順に見ていき(ステップS28
5)、エッジが存在するかどうかをチェックする(ステ
ップS286)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数jに格納する(ステップS
287)。即ち、検出座標を点jとする。
【0095】次に、上記ラインB−B’の中点から今度
は点B’に向けてデータを順に見ていき(ステップS2
88)、エッジが存在するかどうかをチェックする(ス
テップS289)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数kに格納する(ステップS
28A)。即ち、検出座標を点kとする。
【0096】そして、座標変数f,hで示される点f,
hを通る直線に座標変数jで示される点jから垂線を下
ろし、その交点の座標を座標変数bに格納する(ステッ
プS28B)。即ち、点jを通るラインB−B’と直交
する直線の方程式を求めて、それと点f,hを通る直線
の交点を求め、その交点を点bとする。
【0097】同様に、座標変数f,hで示される点f,
hを通る直線に座標変数kで示される点kから垂線を下
ろし、その交点の座標を座標変数cに格納する(ステッ
プS28C)。即ち、点kを通るラインB−B’と直交
する直線の方程式を求めて、それと点f,hを通る直線
の交点を求め、その交点を点cとする。
【0098】そして、こうして求めた座標変数bの値を
座標変数TOPに、また座標変数cの値を座標変数BO
TTOMにそれぞれ格納した後(ステップS28D)、
上位のルーチンへ制御を戻す。
【0099】次に、上記のようなラベル検出ルーチン中
のステップS2Eでコールされるラベルの傾きを求める
ルーチンを、図16のフローチャート及び図10の
(B)の行スキャンの場合のラベルの傾きを求めるため
説明図を参照して説明する。なお、図10の(B)に
は、行スキャンでスタートコード72が基準に選択され
た場合の例を示している。
【0100】即ち、まず行スキャンかどうかを判断し
(ステップS2E1)、行スキャンならばステップS2
E2へ、また列スキャンならばステップS2E4へと制
御を移す。
【0101】行スキャンの場合には、まず座標変数BO
TTOMのx座標の値を、座標変数BOTTOMのy座
標の値から座標変数TOPのy座標の値を差し引いた結
果の値で割り、また座標変数TOPのx座標の値を、座
標変数BOTTOMのy座標の値から座標変数TOPの
y座標の値を差し引いた結果の値で割り、これら2つの
商の差を傾き変数SLOPEに格納する(ステップS2
E2)。次に、座標変数BOTTOMのy座標と座標変
数TOPのx座標とを乗じた結果を、座標変数BOTT
OMのy座標の値から座標変数TOPのy座標の値を差
し引いた結果の値で割り、また座標変数BOTTOMの
x座標と座標変数TOPのy座標とを乗じた結果を、座
標変数BOTTOMのy座標の値から座標変数TOPの
y座標の値を差し引いた結果の値で割り、これら2つの
商の差を切片変数intersectに格納する(ステ
ップS2E3)。なお、図中のアスタリスク*の上付き
文字は、乗算記号×を意味する。
【0102】また、列スキャンの場合には、まず座標変
数BOTTOMのy座標の値を、座標変数BOTTOM
のx座標の値から座標変数TOPのx座標の値を差し引
いた結果の値で割り、また座標変数TOPのy座標の値
を、座標変数BOTTOMのx座標の値から座標変数T
OPのx座標の値を差し引いた結果の値で割り、これら
2つの商の差を傾き変数SLOPEに格納する(ステッ
プS2E4)。次に、座標変数BOTTOMのx座標と
座標変数TOPのy座標とを乗じた結果を、座標変数B
OTTOMのx座標の値から座標変数TOPのx座標の
値を差し引いた結果の値で割り、また座標変数BOTT
OMのy座標と座標変数TOPのx座標とを乗じた結果
を、座標変数BOTTOMのx座標の値から座標変数T
OPのx座標の値を差し引いた結果の値で割り、これら
2つの商の差を切片変数intersectに格納する
(ステップS2E5)。
【0103】次に、上記ステップS4でコールされるブ
レ検出ルーチンを、図17のフローチャートを参照して
説明する。即ち、処理対象画像を今度はフレームメモリ
31のBank“1”31Bとし(ステップS41)、
像ブレ検出用フラグverifyをOFFに初期化する
(ステップS42)。そして、スタート検出フラッグs
tart_flagがONかどうかを判断し(ステップ
S43)、ONであれば詳細は後述するようなスタート
コードベリファイルルーチンをコールして(ステップS
44)、スタートコード72に対してベリファイを行
う。また、OFFであれば、詳細は後述するようなスト
ップコードベリファイルルーチンをコールして(ステッ
プS45)、ストップコード73に対してベリファイを
行う。そして、像ブレ検出用フラッグverifyがO
Nであるかどうかを判断する(ステップS46)ことに
より、このベリファイ結果を判断する。この結果、像ブ
レ検出フラッグverifyがONならば、像ブレなし
の情報を持ってリターンし、またそれがOFFならば像
ブレありの情報を持ってリターンする。
【0104】次に、上記のようなブレ検出ルーチン中の
ステップS44でコールされるスタートコードベリファ
イルーチンを、図18のフローチャートを参照して説明
する。なお、図中の’を付けて示す座標は、イメージ1
(Bank“1”31B)で検出する位置を表してい
る。即ち、上記ステップS2でコールされるラベル検出
ルーチンで座標eを求めたとする。これはイメージ0
(Bank“0”31A)で検出してきたスタートコー
ド72を最初に見つけた座標である。一方、座標e’
は、上記座標eを見つけたのと同じ条件(スキャン方向
やスキャン位置)でイメージ1(Bank“1”31
B)を走査し、求まった座標である。即ち、イメージ
0,イメージ1間でラベルに動きがなかった場合、これ
らの座標e,e’は同一座標となるはずである。ここ
で、像ブレ誤差範囲AREAの値を例えば2と設定すれ
ば、画像間で座標eがそれぞれx,y方向に±1画素以
内のずれであれば、画像の動きはなかったと判定する。
【0105】即ち、まず行スキャンかどうか判断し(ス
テップS441)、行スキャンの場合にはステップS4
42へ進み、列スキャンの場合にはステップS448へ
制御を移す。
【0106】行スキャンの場合には、まずBank
“0”31Aで検出した座標変数eのy座標の値で示さ
れるラインのデータをBank“1”31Bから取り込
み(ステップS442)、スタートコード72が検出さ
れるかどうか判断する(ステップS443)。検出され
なかったならば、像ブレ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ス
タートコード72が検出された場合には、その検出座標
を座標変数e’に格納した後(ステップS444)、今
度はBank“0”31Aで検出した座標変数gのy座
標の値で示されるラインのデータをBank“1”31
Bから取り込み(ステップS445)、スタートコード
72が検出されるかどうか判断する(ステップS44
6)。検出されなかったならば、像ブレ検出フラッグv
erify=OFFの情報を持って上位のルーチンへリ
ターンする。スタートコード72が検出された場合に
は、その検出座標を座標変数g’に格納した後(ステッ
プS447)、ステップS44Eへ進む。
【0107】一方、列スキャンの場合には、まずBan
k“0”31Aで検出した座標変数eのx座標の値で示
されるラインのデータをBank“1”31Bから取り
込み(ステップS448)、スタートコード72が検出
されるかどうか判断する(ステップS449)。検出さ
れなかったならば、像ブレ検出フラッグverify=
OFFの情報を持って上位のルーチンへリターンする。
スタートコード72が検出された場合には、その検出座
標を座標変数e’に格納した後(ステップS44A)、
今度はBank“0”31Aで検出した座標変数gのx
座標の値で示されるラインのデータをBank“1”3
1Bから取り込み(ステップS44B)、スタートコー
ド72が検出されるかどうか判断する(ステップS44
C)。検出されなかったならば、像ブレ検出フラッグv
erify=OFFの情報を持って上位のルーチンへリ
ターンする。スタートコード72が検出された場合に
は、その検出座標を座標変数g’に格納する(ステップ
S44D)。
【0108】そして、座標変数eとe’の値の差の絶対
値及び座標変数gとg’の値の差の絶対値をとり、両方
の絶対値が像ブレ誤差範囲AREA内であるかどうかを
判断する(ステップS44E)。像ブレ誤差範囲ARE
A内でなければ、像ブレ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。
【0109】このように、ステップS441からステッ
プS44Eでは、Bank“0”31Aで検出した座標
e,gに対してBank“1”31Bで許容誤差内にあ
るかどうかを検出判断している。
【0110】こうして、許容誤差内にあると判断された
ならば、次に、線分e’−g’に平行な直線の方程式を
定義、例えば線分e’−g’の方程式y=ax+bを求
める(ステップS44F)。次に、この直線がスタート
ビックバー72Aをクロスするように、切片bを定義す
る(ステップS44G)。こうしてスタートビッグバー
32Aをクロスする直線が得られたならば、次に、その
直線と画面を定義する方程式との交点をそれぞれA,
A’とする(ステップS44H)。
【0111】そして、このラインA−A’の中点から点
Aに向けてデータを順に見ていき(ステップS44
I)、エッジが存在するかどうかをチェックする(ステ
ップS44J)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数i’に格納する(ステップ
S44K)。即ち、検出座標を点i’とする。
【0112】次に、上記ラインA−A’の中点から今度
は点A’に向けてデータを順に見ていき(ステップS4
4L)、エッジが存在するかどうかをチェックする(ス
テップS44M)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数m’に格納する(ステップ
S44N)。即ち、検出座標を点m’とする。
【0113】そして、座標変数iとi’の値の差の絶対
値及び座標変数mとm’の値の差の絶対値をとり、両方
の絶対値が像ブレ誤差範囲AREA内であるかどうかを
判断する(ステップS44O)。像ブレ誤差範囲ARE
A内でなければ、像ブレ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ま
た、像ブレ誤差範囲AREA内であれば、像ブレ検出フ
ラッグverify=ONの情報を持って上位のルーチ
ンへリターンする。
【0114】このように、ステップS44Fからステッ
プS44Oでは、Bank“0”31Aで検出した座標
i,mに対してBank“1”31Bで許容誤差内にあ
るかどうか検出判断している。そして、すべてが許容範
囲にある場合は、像ブレ検出フラッグverifyをO
Nとして制御を戻し、一ヶ所でも許容範囲外の場合は、
像ブレ検出フラッグverifyをOFFとして制御を
戻すようにしている。
【0115】次に、上記のようなブレ検出ルーチン中の
ステップS45でコールされるストップコードベリファ
イルーチンを、図19のフローチャートを参照して説明
する。このストップコードベリファイルーチンは、上記
スタートコードベリファイルーチンとほぼ同様である。
【0116】即ち、まず行スキャンかどうか判断し(ス
テップS451)、行スキャンの場合にはステップS4
52へ進み、列スキャンの場合にはステップS458へ
制御を移す。
【0117】行スキャンの場合には、まずBank
“0”31Aで検出した座標変数fのy座標の値で示さ
れるラインのデータをBank“1”31Bから取り込
み(ステップS452)、ストップコード73が検出さ
れるかどうか判断する(ステップS453)。検出され
なかったならば、像ブレ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ス
トップコード73が検出された場合には、その検出座標
を座標変数f’に格納した後(ステップS454)、今
度はBank“0”31Aで検出した座標変数hのy座
標の値で示されるラインのデータをBank“1”31
Bから取り込み(ステップS455)、ストップコード
73が検出されるかどうか判断する(ステップS45
6)。検出されなかったならば、像ブレ検出フラッグv
erify=OFFの情報を持って上位のルーチンへリ
ターンする。ストップコード73が検出された場合に
は、その検出座標を座標変数h’に格納した後(ステッ
プS457)、ステップS45Eへ進む。
【0118】一方、列スキャンの場合には、まずBan
k“0”31Aで検出した座標変数fのx座標の値で示
されるラインのデータをBank“1”31Bから取り
込み(ステップS458)、ストップコード73が検出
されるかどうか判断する(ステップS459)。検出さ
れなかったならば、像ブレ検出フラッグverify=
OFFの情報を持って上位のルーチンへリターンする。
ストップコード73が検出された場合には、その検出座
標を座標変数f’に格納した後(ステップS45A)、
今度はBank“0”31Aで検出した座標変数hのx
座標の値で示されるラインのデータをBank“1”3
1Bから取り込み(ステップS45B)、ストップコー
ド73が検出されるかどうか判断する(ステップS45
C)。検出されなかったならば、像ブレ検出フラッグv
erify=OFFの情報を持って上位のルーチンへリ
ターンする。ストップコード73が検出された場合に
は、その検出座標を座標変数h’に格納する(ステップ
S45D)。
【0119】そして、座標変数fとf’の値の差の絶対
値及び座標変数hとh’の値の差の絶対値をとり、両方
の絶対値が像ブレ誤差範囲AREA内であるかどうかを
判断する(ステップS45E)。像ブレ誤差範囲ARE
A内でなければ、像ブレ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。
【0120】こうして、許容誤差内にあると判断された
ならば、次に、線分f’−h’に平行な直線の方程式を
定義、例えば線分f’−h’の方程式y=ax+bを求
める(ステップS45F)。次に、この直線がストップ
ビックバー73Aをクロスするように、切片bを定義す
る(ステップS45G)。こうしてストップビッグバー
73Aをクロスする直線が得られたならば、次に、その
直線と画面を定義する方程式との交点をそれぞれB,
B’とする(ステップS45H)。
【0121】そして、このラインB−B’の中点から点
Bに向けてデータを順に見ていき(ステップS45
I)、エッジが存在するかどうかをチェックする(ステ
ップS45J)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数j’に格納する(ステップ
S45K)。即ち、検出座標を点j’とする。
【0122】次に、上記ラインB−B’の中点から今度
は点B’に向けてデータを順に見ていき(ステップS4
5L)、エッジが存在するかどうかをチェックする(ス
テップS45M)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数k’に格納する(ステップ
S45N)。即ち、検出座標を点k’とする。
【0123】そして、座標変数jとj’の値の差の絶対
値及び座標変数kとk’の値の差の絶対値をとり、両方
の絶対値が像ブレ誤差範囲AREA内であるかどうかを
判断する(ステップS45O)。像ブレ誤差範囲ARE
A内でなければ、像ブレ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ま
た、像ブレ誤差範囲AREA内であれば、像ブレ検出フ
ラッグverify=ONの情報を持って上位のルーチ
ンへリターンする。
【0124】以上のように、Bank“0”31Aの画
像に於ける座標点iとBank“1”32Bの画像に於
ける座標点i’及び同様の座標点mとm’、あるいは座
標点jとj’及びkとk’とを比較し、それらが所定の
像ブレ誤差範囲内であるときにのみ、像ブレがないとし
てデコード処理を開始するようにしているため、ラベル
の移動中にデコードを開始することなく、適性位置にラ
ベルが停止したときにデコードを開始できるようにな
る。なお、別の点、例えば点a,b,c,dやe,f,
g,h等を比較するようにしても、同様の効果を奏する
ことができる。以上、2次元バーコードに関して詳述し
てきたが、本発明は、1次元バーコードに関しても同様
に適用できることは勿論である。
【0125】
【発明の効果】以上詳述したように、本発明によれば、
ラベルの移動中にデコードを開始することなく、適性位
置にラベルが停止したときにデコードを開始できるバー
コードリーダ装置を提供することができる。
【図面の簡単な説明】
【図1】(A)は本発明のバーコードリーダ装置の第1
の実施例のブロック構成図であり、(B)は(A)中の
停止検知部の詳細な構成を示す図である。
【図2】(A)乃至(C)はそれぞれバーコードの停止
検知を行うために利用される映像ラインを示す図であ
る。
【図3】図1の(B)中のカウンタ部の詳細な構成を示
す図である。
【図4】本発明のバーコードリーダ装置の第2の実施例
のブロック構成図である。
【図5】本発明のバーコードリーダ装置の第3の実施例
のブロック構成図である。
【図6】(A)はスタックドバーコードの例としてPD
F−417コード体系のバーコードラベルを示す図であ
り、(B)は仮想的にフレームメモリの画素配列に
(A)のバーコードラベル画像を投影した模式図であ
る。
【図7】第3の実施例の概略的な動作を説明するための
フローチャートである。
【図8】図7中の画像取り込みルーチンを説明するため
のフローチャートである。
【図9】図7中のラベル検出ルーチンを説明するための
フローチャートである。
【図10】(A)はラベル検出方法を説明するのに供さ
れる図6の(A)バーコードラベルの画像を取り込んだ
時のフレームメモリの内容を示す図であり、(B)はラ
ベルの傾きを求める方法を説明するのに供される図6の
(A)バーコードラベルの画像を取り込んだ時のフレー
ムメモリの内容を示す図である。
【図11】図9中のスタート/ストップコード検出ルー
チンを説明するためのフローチャートである。
【図12】図11中のスキャン&検出ルーチンを説明す
るための一連のフローチャートの前半部分を示す図であ
る。
【図13】図11中のスキャン&検出ルーチンを説明す
るための一連のフローチャートの後半部分を示す図であ
る。
【図14】図9中のスタートエッジ位置検出ルーチンを
説明するためのフローチャートである。
【図15】図9中のストップエッジ位置検出ルーチンを
説明するためのフローチャートである。
【図16】図9中のラベルの傾きを求めるルーチンを説
明するためのフローチャートである。
【図17】図7中のブレ検出ルーチンを説明するための
フローチャートである。
【図18】図17中のスタートコードベリファイルーチ
ンを説明するためのフローチャートである。
【図19】図17中のストップコードベリファイルーチ
ンを説明するためのフローチャートである。
【符号の説明】 10…カメラ、20…信号処理装置、30…デコーダ
部、31…フレームメモリ、32…CPU、40…停止
検知部、50…ホストコンピュータ等。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 バーとスペースとからなるバーコードを
    撮像する撮像手段と、 該撮像手段により撮像した映像のブレを検出する検出手
    段と、 該検出手段の検出信号にもとづいて、前記撮像手段によ
    り撮像したバーコードの映像のデコード処理の開始を制
    御する制御手段と、 を具備してなることを特徴とするバーコードリーダ装
    置。
JP13368892A 1992-05-26 1992-05-26 バーコードリーダ装置 Expired - Fee Related JP3154809B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP13368892A JP3154809B2 (ja) 1992-05-26 1992-05-26 バーコードリーダ装置
US08/066,478 US5369265A (en) 1992-05-26 1993-05-24 Bar-code reader apparatus with an automatic read starting function
CN93105846A CN1036807C (zh) 1992-05-26 1993-05-26 带自动阅读开始功能的条形码阅读装置
KR1019930009215A KR100275006B1 (ko) 1992-05-26 1993-05-26 자동판독개시기능이 달린 바코드 판독장치
TW082105062A TW259858B (ja) 1992-05-26 1993-06-25

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP13368892A JP3154809B2 (ja) 1992-05-26 1992-05-26 バーコードリーダ装置

Publications (2)

Publication Number Publication Date
JPH05324898A true JPH05324898A (ja) 1993-12-10
JP3154809B2 JP3154809B2 (ja) 2001-04-09

Family

ID=15110557

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13368892A Expired - Fee Related JP3154809B2 (ja) 1992-05-26 1992-05-26 バーコードリーダ装置

Country Status (5)

Country Link
US (1) US5369265A (ja)
JP (1) JP3154809B2 (ja)
KR (1) KR100275006B1 (ja)
CN (1) CN1036807C (ja)
TW (1) TW259858B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008508609A (ja) * 2004-07-29 2008-03-21 シンボル テクノロジーズ インコーポレイテッド 撮像装置ベースの光符号読取機によって読取った光符号を復号化するシステム及び方法

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3077616B2 (ja) * 1997-01-31 2000-08-14 富士通株式会社 バーコード読取方法
US5699442A (en) * 1992-04-10 1997-12-16 Andrew Welch System for detecting the location of a reflective object within a video field
JP2993833B2 (ja) * 1993-11-29 1999-12-27 富士通株式会社 Posシステム
US5523552A (en) * 1994-10-19 1996-06-04 Symbol Technologies, Inc. Method and apparatus to scan randomly oriented two-dimensional bar code symbols
US6672511B1 (en) * 1996-06-03 2004-01-06 Symbol Technologies, Inc. Omnidirectional reading of two-dimensional symbols
US5988505A (en) * 1996-06-03 1999-11-23 Symbol Technologies, Inc. Omnidirectional reading of two-dimensional symbols
JP3591184B2 (ja) * 1997-01-14 2004-11-17 松下電器産業株式会社 バーコード読み取り装置
US5984186A (en) 1997-10-29 1999-11-16 Psc Inc. CCD-base bar code scanner
US6126074A (en) * 1998-01-28 2000-10-03 Symbol Technologies, Inc. Error correction in macro bar code symbols
JP3612422B2 (ja) * 1998-06-01 2005-01-19 株式会社アマダ 板金の図形作成プログラムを記録したコンピュータ読み取り可能な記録媒体
US6296187B1 (en) 1999-11-12 2001-10-02 Psc Inc. CCD-based bar code scanner
US6802450B2 (en) * 2002-08-07 2004-10-12 Shenzhen Syscan Technology Co. Ltd Guiding a scanning device to decode 2D symbols
EP1975849B1 (en) * 2007-03-27 2011-04-27 Casio Computer Co., Ltd. Bar-code reading apparatus and computer-readable medium
DE102007018901A1 (de) * 2007-04-19 2008-10-23 Deutsche Post Ag Verfahren zum Erfassen eines auf einer Postsendung aufgebrachten Codes, Vorrichtung zur Durchführung des Verfahrens und Verfahren zum Versehen der Postsendung mit dem maschinenlesbaren Code
JP5300598B2 (ja) * 2009-05-29 2013-09-25 株式会社東芝 バーコード処理装置及びバーコード処理方法
CN102096797A (zh) * 2011-01-18 2011-06-15 深圳市民德电子科技有限公司 一种被识读条码的位置提示装置、方法及条码识读设备
CN104008360B (zh) * 2014-05-16 2019-06-14 北京致胜宏达科技有限公司 一种自动感应条码阅读方法及自动感应条码阅读器
KR101633455B1 (ko) * 2015-04-15 2016-06-24 한국정보통신주식회사 코드 이미지 스캔 장치 및 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2631476B1 (fr) * 1988-05-10 1992-01-03 Bertin & Cie Procede et dispositif de lecture d'un code barres sur un support sensiblement immobile
JP2971493B2 (ja) * 1990-01-10 1999-11-08 富士通株式会社 バーコード読み取り装置
JPH0464187A (ja) * 1990-07-02 1992-02-28 Sumitomo Electric Ind Ltd バーコード読取装置
DE4035396A1 (de) * 1990-11-07 1992-05-14 F & O Elektronic Systems Gmbh Verfahren und vorrichtung zum lesen und identifizieren der information einer zeichen-vorlage, insbesondere barcode, innerhalb eines zwei- oder dreidimensionalen feldes mittels einer videokamera, die ein binaeres videosignal des bildes erzeugt

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008508609A (ja) * 2004-07-29 2008-03-21 シンボル テクノロジーズ インコーポレイテッド 撮像装置ベースの光符号読取機によって読取った光符号を復号化するシステム及び方法
JP4795345B2 (ja) * 2004-07-29 2011-10-19 シンボル テクノロジーズ, インコーポレイテッド 撮像装置ベースの光符号読取機によって読取った光符号を復号化するシステム及び方法

Also Published As

Publication number Publication date
US5369265A (en) 1994-11-29
JP3154809B2 (ja) 2001-04-09
TW259858B (ja) 1995-10-11
KR100275006B1 (ko) 2000-12-15
CN1079319A (zh) 1993-12-08
CN1036807C (zh) 1997-12-24
KR930023863A (ko) 1993-12-21

Similar Documents

Publication Publication Date Title
JP3154809B2 (ja) バーコードリーダ装置
KR100271245B1 (ko) 바코드 판독장치
EP0791204B1 (en) Anti-hand-jittering dataform readers and methods
US5635697A (en) Method and apparatus for decoding two-dimensional bar code
JP3191999B2 (ja) バーコードシンボル読取装置
US5550363A (en) Optical information reading apparatus
US9779326B2 (en) Moving image recognition apparatus and moving image recognition method
KR100257128B1 (ko) 심볼정보판독장치
US5054104A (en) Optical character reader
TW211614B (en) A bar code signal read-in device with the mechanism of preventing second read-in
CN107609448B (zh) 条码解码方法以及条码解码装置
JP3302057B2 (ja) シンボル情報読取装置
JP3580901B2 (ja) シンボル情報読取装置
US8967473B2 (en) Scanner, method and system for processing images in an imaging based optical code scanner
JP2001167225A (ja) Ccdカメラを用いたバーコード認識装置
JP3730716B2 (ja) バーコード読取装置
JPH05242278A (ja) シンボル情報読取装置
JPH06231297A (ja) バーコードシンボル読取装置
JPH1049622A (ja) バーコード読み取り装置
KR101198591B1 (ko) 임의의 회전각을 갖는 데이터 매트릭스 영상의 정치 및 디코딩 장치
JP2567852B2 (ja) 光学文字読取装置
JPH0916708A (ja) シンボル情報読取り装置
JPH0799531B2 (ja) 光学的文字読取装置
JPS61234480A (ja) デイジタル画像の形状認識方法
JPH0217585A (ja) 光学文字読取装置

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: 20010116

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090202

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090202

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100202

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees