JP3233981B2 - シンボル情報読取装置 - Google Patents

シンボル情報読取装置

Info

Publication number
JP3233981B2
JP3233981B2 JP13378392A JP13378392A JP3233981B2 JP 3233981 B2 JP3233981 B2 JP 3233981B2 JP 13378392 A JP13378392 A JP 13378392A JP 13378392 A JP13378392 A JP 13378392A JP 3233981 B2 JP3233981 B2 JP 3233981B2
Authority
JP
Japan
Prior art keywords
label
information
coordinate
variable
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.)
Expired - Fee Related
Application number
JP13378392A
Other languages
English (en)
Other versions
JPH05324887A (ja
Inventor
允則 久保
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 Optic 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 Optic Co Ltd filed Critical Olympus Optic Co Ltd
Priority to JP13378392A priority Critical patent/JP3233981B2/ja
Priority to US08/066,968 priority patent/US5489769A/en
Priority to KR1019930009216A priority patent/KR100309242B1/ko
Priority to CN93105848A priority patent/CN1037380C/zh
Priority to TW082105296A priority patent/TW229297B/zh
Publication of JPH05324887A publication Critical patent/JPH05324887A/ja
Application granted granted Critical
Publication of JP3233981B2 publication Critical patent/JP3233981B2/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
    • 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/1439Methods for optical code recognition including a method step for retrieval of the optical code
    • G06K7/1456Methods for optical code recognition including a method step for retrieval of the optical code determining the orientation of the optical code with respect to the reader and correcting therefore

Landscapes

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、バーコード等のシンボ
ル情報を読み取るシンボル情報読取装置に関する。
【0002】
【従来の技術】最近の目ざましいPOS(ポイント・オ
ブ・セールス=販売時点情報管理システム)の普及によ
って、バーコードは、広く一般に知られるようになって
きた。ここで、バーコードとは、大きさの異なるバーと
スペースの平行な組合せパターンにより1つのバーコー
ドキャラクタを形成し、必要であればチェックデジット
を含む必要なキャラクタ群を平行に配列し、例えば前後
にスタート/ストップキャラクタのような特徴的な所定
パターンを配して構成したシンボルのことである。
【0003】広く一般消費財に使用されているバーコー
ドとしては、JAN(Japan Article Number)が日本で
標準化されている。また、バーコードの他の応用として
は、物流シンボルがある。このシンボルは、上記JAN
コードの前に、1桁又は2桁の物流識別コードが追加さ
れたものである。
【0004】上記いずれのバーコードシンボルも1次元
バーコードと呼ばれるものであり、これらのコード体系
が許容できる情報量はせいぜい数十バイトであった。
【0005】ところが近年、バーコードの情報量に対す
る要求が、声高に叫ばれるようになってきた。それに呼
応するように、各種の2次元バーコードと呼ばれるシン
ボル体系が発表されている。
【0006】それらのシンボル体系によれば、いずれも
1次元バーコードに比べ格段に多い情報をコード化でき
る特徴を持っている。この体系は、1次元のバーコード
を積み重ねることによって、情報量を増加させる方式で
ある。このような方式のシンボルは、スタックドバーコ
ードと呼ばれている。そのひとつに、PDF−417と
呼ばれるコード体系がある。
【0007】従来、このようなスタックドバーコードを
読み取るシンボル情報読取装置としては、例えば特開平
2−268382号公報に開示されているようなレーザ
ースキャンタイプの装置が知られている。この装置に於
いては、レーザー光を2次元にスキャンすることで、バ
ーコードシンボル情報を読み取り、復号している。
【0008】また、特開平2−268383号公報に
は、2次元撮像装置でバーコードを撮像し、バーコード
の画像をメモリに取り込んで、このデータを元にバーコ
ードシンボル情報を復号する装置が開示されている。
【0009】
【発明が解決しようとする課題】しかながら、上記した
従来のスタックドバーコードを読み取るためのレーザー
タイプのバーコードシンボル情報読取装置に於いては、
スキャン情報を順次解析していくため、バーコードシン
ボルの像領域(以下、本明細書中ではこれをラベルと称
する)上のバーコードの並び方向とスキャン角度とをほ
ぼ平行に調整しなければ、バーコードシンボル情報を正
確に読み取ることができないという問題点を有してい
る。
【0010】もちろん、1次元のバーコードシンボル情
報の読取装置についても同様の問題点を有しているが、
スタックドバーコードシンボルは、1次元のバーコード
シンボルに比較して、1列に並んだバーコードの高さが
ないため、特に角度調整が重要であり、スタックドバー
コードラベルは、1次元バーコードラベルの場合に比べ
て、より正確な方向に読取装置のラベル検出面上にセッ
トすることが必要とされる。従って、正確な情報が読み
取れるまで何度もラベルの方向を変える操作が必要とな
り、高速な情報入力というバーコードの特色を相殺して
しまうことになる。
【0011】また、2次元撮像装置を用いたタイプのバ
ーコードシンボル情報読取装置に於いても同様に、ラベ
ル上のバーコードの並び方向と2次元撮像装置のXY方
向、つまり画像メモリのアドレス方向とをほぼ平行に調
整しなければ、バーコードシンボル情報を正確に読み取
ることができない。上記公報には、バーコードの並び方
向が平行状態となっていない場合にも、読み取ることが
できると記されているが、実際の手法は開示されていな
い。さらには、この公報は、バーコードラベルが撮像装
置の視野を外れて撮像された場合についても考慮されて
いない。
【0012】そこで本発明の目的は、バーコードラベ
ル、特にスタックドバーコードラベルが読取装置のラベ
ル検出面上でどのような向きにセットされていても、ま
たバーコードラベルの撮像画像に欠損があっても、その
バーコードシンボル情報を読み取り可能なシンボル情報
読取装置を提供することにある。
【0013】
【課題を解決するための手段】本発明は、上記目的を達
成するために、バーとスペースとからなる2次元バーコ
ードを2次元像として撮像する撮像手段と、前記撮像手
段により得られる2次元バーコードの2次元像を記憶す
る記憶手段と、前記記憶手段に記憶された2次元バーコ
ードの2次元像から、当該2次元バーコードの種類によ
って定められる所定パターンの4角位置のうち少なくと
も2ヶ所の位置を検出する位置検出手段と、前記位置検
出手段により検出されたこの少なくとも2ヶ所の位置情
報からバーコードの傾きを検出する傾き検出手段と、前
記位置検出手段により検出された上記少なくとも2ヶ所
の位置情報を基準に、前記記憶手段上における前記2次
元バーコードの位置を推定する位置推定手段と、前記記
憶手段に記憶された2次元バーコードの2次元像から、
手ぶれの有無を検出する手ぶれ検出手段と、前記手ぶれ
検出手段により手ぶれが無いと検出されたとき、前記位
置推定手段の情報を元に、前記記憶手段に記憶された2
次元バーコードの2次元像から、当該2次元バーコード
の読み取りのための閾値を定義する閾値定義手段と、前
記傾き検出手段の情報と前記位置推定手段の情報とを元
に、前記記憶手段に記憶された2次元バーコードの2次
元像から、前記2次元バーコードの所定位置に設けられ
た当該バーコードのサイズを表す情報を読み取って、当
該2次元バーコードのサイズを決定するサイズ決定手段
と、前記傾き検出手段の情報と前記位置推定手段の情報
とを元に、前記記憶手段に記憶された2次元バーコード
の2次元像から、全面走査のための変数として最適条件
を設定する最適条件設定手段と、前記傾き検出手段
位置推定手段、前記閾値定義手段、前記サイズ決定手
段、及び前記最適条件設定手段の各情報を元に、前記記
憶手段に記憶された2次元バーコードの2次元像が、前
記撮像手段の撮像視野からその一部がはみ出していたと
しても、前記記憶手段に記憶された2次元バーコードの
2次元像から、前記2次元バーコードに対して平行に情
報を順次読み取ることができる読取手段と、前記読取手
段からの2次元バーコードの情報から、2次元バーコー
ドの元の情報に復号する復号手段とを備えるものとし
た。
【0014】
【作用】即ち、本発明によるシンボル情報読取装置で
は、位置検出手段は、2次元バーコードシンボルを2次
元像として撮像する撮像手段により得て記憶手段に記憶
された2次元バーコードの2次元像から、当該2次元バ
ーコードの種類によって定められる所定パターンの少な
くとも2ヶ所、例えばスタートコードやストップコード
等の4角の位置情報のうちの少なくとも2ヶ所の位置情
報を検出する。次に、傾き検出手段は、この検出された
少なくとも2ヶ所の位置情報から、バーコードの回転角
を検出する。また、位置推定手段は、上記検出された少
なくとも2ヶ所の位置情報を基準に前記記憶手段上にお
ける2次元バーコードの位置を推定する。一方、手ぶれ
検出手段によって、前記記憶手段に記憶された2次元バ
ーコードの2次元像から、手ぶれの有無を検出し、手ぶ
れが無いとき、閾値定義手段は、前記位置推定手段の情
報を元に、前記記憶手段に記憶された2次元バーコード
の2次元像から、当該2次元バーコードの読み取りのた
めの閾値を定義する。また、サイズ決定手段は、前記傾
き検出手段の情報と前記位置推定手段の情報とを元に、
前記記憶手段に記憶された2次元バーコードの2次元像
から、前記2次元バーコードの所定位置に設けられた当
該バーコードのサイズを表す情報を読み取って、当該2
次元バーコードのサイズを決定し、最適条件設定手段
は、前記傾き検出手段の情報と前記位置推定手段の情報
とを元に、前記記憶手段に記憶された2次元バーコード
の2次元像から、全面走査のための変数として最適条件
を設定する。そして、読取手段は、前記傾き検出手段
前記位置推定手段、前記閾値定義手段、前記サイズ決定
手段、及び前記最適条件設定手段の各情報を元に、前記
記憶手段に記憶された2次元バーコードの2次元像が、
前記撮像手段の撮像視野からその一部がはみ出していた
としても、前記記憶手段に記憶された2次元バーコード
2次元像から、前記2次元バーコードに対して平行に
情報を順次読み取ることができるようになっている。而
して、復号手段により、この読取手段からの2次元バー
コードの情報から、2次元バーコードの元の情報に復号
することによってシンボル情報を読み取ることができ
る。
【0015】
【実施例】以下、図面を参照して、本発明の一実施例を
説明する。
【0016】図1はその構成を示す図である。本実施例
のシンボル情報読取装置は、結像レンズ3、2次元撮像
装置5、フレームメモリ6、データ処理装置7とからな
る。デー処理装置7は、特に図示はしないが、例えばC
PUとメモリで構成され、バーコード位置情報の推定の
ための位置検出部7A及び傾き検出部7B、バーコード
情報の読み出しを行う読取部7C、復号部7D、等の種
々の機能部の役割を果たす。また、このバーコード処理
装置7内のメモリには、後述するような各種定数及び変
数を格納するための種々のレジスタが構成されている。
【0017】荷物1に印刷されたスタックドバーコード
ラベル、例えばPDF−417フォーマットのバーコー
ドラベル2は、結像レンズ3によって、2次元撮像装置
5に搭載されている光電変換面4に結像される。2次元
撮像装置5によって光電変換されたラベル情報は、映像
信号としてフレームメモリ6に時系列的に2画面(バン
ク0(Bank0),バンク1(Bank1))取り込
まれる。
【0018】図2の(A)は、スタックドバーコードの
例として、PDF−417のラベル構造を示している。
このバーコードラベル2は、バーとスペースの組合せで
なるバーコードキャラクタ群で構成された復号されるべ
き情報成分の領域であるラベル部21と、その前後に配
されたスタート/ストップキャラクタであるスタートコ
ード22及びストップコード23とを有している。そし
て、1コードは、ストップコード23を除いて4つのバ
ーとスペースとからなっている。また、スタート及びス
トップコード22,23は、“ビッグバー”と呼ばれる
大きなバー22A,23Aから始まっている。
【0019】ラベル部21は、スタートコード22及び
ストップコード23の隣に存在するロウインディケータ
21Aと呼ばれるコードと、それらの間に挟まれた実際
のデータが記述されている複数のデータカラム21Bで
なるラベルマトリックス21Cとにより構成される。ロ
ウインディケータ21Aには、ラベルのロウ方向,カラ
ム方向のサイズやセキュリティレベル等が記述されてい
る。従って、このロウインディケータの情報を解読すれ
ば、ラベルの情報サイズ等が決定できる。
【0020】なお、この図2の(A)は、4×2のラベ
ルマトリックス有するバーコードラベルを示している。
今、仮想的に、フレームメモリ6の画素配列に上記のよ
うなPDF−417のラベル画像を投影した模式図を図
2の(B)に示す。
【0021】データ処理装置7では、以下に説明するよ
うなアルゴリズムに基づいて、ラベル検出を行い、ラベ
ル情報を読出し復号を行って、不図示のホスト装置など
に出力する。
【0022】即ち、図3は、このデータ処理装置7でラ
ベル情報を読出すアルゴリズムの概略を示すフローチャ
ートである。なお、本明細書中に於いては、フローチャ
ートは、プログラミング言語Cの記述方式に従って書か
れている。
【0023】まず、詳細は後述するような前処理ルーチ
ンをコールして(ステップS1)、変数INC0のパラ
メータを設定する(実際には種々のパラメータを初期設
定する)。
【0024】その後、詳細は後述するような画像取り込
みルーチンをコールして(ステップS2)、画像をフレ
ームメモリ6に連続的に2画面(Bank0,Bank
1)取り込む。ここで、連続的にとは、まず1画面の画
像データをBank0に格納し、次に、1画面の画像デ
ータをBank1に格納するということである。この
際、最初に取り込み指令を出してから最新のフレームの
データをBank0に取り込み、次にその取り込みが終
了した後、再度取り込み指令を出して最新のフレームの
データをBank1に取り込むため、2画面のデータ間
には、撮像の時間差が存在する(この時間差は、Ban
k0に格納する時間+0〜1/30秒)。
【0025】次に、詳細は後述するようなラベル検出ル
ーチンをコールして(ステップS3)、この取り込まれ
た画像データの内のBank0を用いてラベルが存在す
るかをチェックし、さらにはラベルが存在するならばラ
ベル情報を検出する。
【0026】そして、上記ステップS3に於けるラベル
検出処理の結果を判断し(ステップS4)、ラベルが存
在しない場合には、再度、上記ステップS1に制御を移
して前処理ルーチンをコールする。
【0027】一方、ラベルが存在する場合には、詳細は
後述するような手ぶれ検出ルーチンをコールして(ステ
ップS5)、上記ステップS2で取り込まれた画像デー
タの内のBank1をもさらに用いて手ぶれの影響を推
定する。ここで、手ぶれとは、バーコードラベル2を印
刷してある印刷物を当該読取装置にかざした場合に、高
い頻度で起こる画像のぶれのことを指す。
【0028】次に、上記ステップS5に於ける手ぶれ検
出の結果を判断し(ステップS6)、手ぶれを起こして
いる場合には、再度、上記ステップS1に制御を移して
前処理ルーチンをコールする。
【0029】手ぶれを起こしていない場合には、詳細は
後述するしきい値決定ルーチンをコールして(ステップ
S7)、後述するステップSBの最適スキャンルーチン
及びステップSDのスキップスキャンルーチンに於い
て、処理対象となるラインデータからエッジ間の幅情報
を抽出するための処理に利用されるしきい値(変数TH
RESHOLD)を求める。
【0030】次に、ロウナンバ及びカラムナンバ決定ル
ーチンをコールして(ステップS8)、ラベル2のロウ
インディケータ21Aを読み取り、ラベルサイズ等を決
定する。
【0031】そして、上記ステップS8の決定ルーチン
に於いてラベルサイズ等が決定されたかどうかを判断し
(ステップS9)、決定されていない場合は、再度、上
記ステップS1に制御を移して前処理ルーチンをコール
する。
【0032】一方、ラベルサイズ等が決定された場合に
は、詳細は後述するようなスキャン方程式決定ルーチン
をコールして(ステップSA)、ラベル2を全面走査す
るための各種変数を定義する。
【0033】次に、詳細は後述するような最適スキャン
ルーチンをコールして(ステップSB)、上記ステップ
SAで定義された各種変数を用いてラベルを最適な間隔
で全面走査し、ラベル情報を読み取る。なおここで、最
適スキャンとは、ラベル欠陥がない場合に、最も計算量
が少なくてラベル情報を全て確定できるような最適な間
隔でのスキャンのことをいうものとする。
【0034】そして、上記ステップSBの最適スキャン
で読み取った情報でデコード可能かどうかを判断し(ス
テップSC)、デコード可能の場合は、ステップSFの
デコード処理に制御を移す。
【0035】また、デコード不能の場合は、詳細は後述
するようなスキップスキャンルーチンをコールする(ス
テップSD)。このスキップスキャンルーチンでは、上
記ステップSAで定義された各種変数を用いてラベルを
全面走査し、ラベル情報を読み取る。
【0036】そして、このステップSDで読み取った情
報でデコード可能かどうかを判断し(ステップSE)、
デコード可能の場合は、ステップSFのデコード処理に
制御を移す。
【0037】また、デコード不能の場合は、再度、上記
ステップS1に制御を移して前処理ルーチンをコールす
る。
【0038】ステップSFでは、上記ステップSBの最
適スキャンルーチンもしくは上記ステップSDのスキッ
プスキャンルーチンに於いて読み取った情報を復号し、
その復号結果を不図示のホスト装置などに出力する。
【0039】以上述べてきた各種処理ルーチンを、以下
に詳しく説明する。まず、図4のフローチャートを参照
して、上記ステップS1でコールされる前処理ルーチン
を説明する。
【0040】即ち、まず変数INC0の値が基準増分
(予め定められた検出間隔)と同じであるかを判断する
(ステップS11)。同じである場合は、変数INC0
を所定の補正増分を付加した値に再設定し(ステップS
12)、異なる場合は、上記基準増分に再設定する(ス
テップS13)。これにより、図3の概略フローチャー
トに於ける大きなループで、この前処理ルーチンを通過
する奇数回数目と偶数回数目で変数INC0の値は変化
することになる。なお、図中の記号「==」は同じであ
ることを示し、「=」は代入を表している。また、変数
INC0の値は、ラベル未検出時の検出間隔を示す。
【0041】次に、図5のフローチャートを参照して、
上記ステップS2でコールされる画像取り込みルーチン
を説明する。まず、画像データを、2次元撮像装置5か
らフレームメモリ6のBank0に取り込む(ステップ
S21)。次に、画像データを、2次元撮像装置5から
フレームメモリ6のBank1に取り込む(ステップS
22)。これにより、連続的に2画面の画像データを取
り込むこととなる。
【0042】次に、図6のフローチャート及び図7の
(A)のラベル投影像の図を参照して、上記ステップS
3でコールされるラベル検出ルーチンを説明する。この
ラベル検出ルーチンは、ラベルの有無を検出すること
と、ラベルの位置情報を検出すること即ちラベルに平行
に画像データをフレームメモリ6から抽出するための抽
出範囲(変数TOP及びBOTTOM)とラベルの傾き
(変数SLOPE)を求めることとの2種類のラベル検
出処理を含む。ここで、変数TOPの値はラベルのトッ
プ座標を示し、また変数BOTTOMの内容はラベルの
ボトム座標を示す。また変数SLOPEの内容はラベル
の傾きを示す。
【0043】このラベル検出ルーチンに於いては、ま
ず、処理対象画像をフレームメモリ6のBanK0とす
る(ステップS31)。次に、ラベル検出フラッグを初
期化する(ステップS32)。このラベル検出フラッグ
は、スタート検出フラッグstart_flagとスト
ップ検出フラッグstop_flagからなる。これら
ラベル検出フラッグは、後述する他の処理に於いて、ス
タートコード22及びストップコード23のどちらを選
択して処理すべきかを指し示すために用いられる。なぜ
ならば、スタートコード22とストップコード23の両
方が検出された場合に、より信頼性の高い方を選択する
必要があるからである。
【0044】次に、詳細は後述するようなスタート/ス
トップコード検出ルーチンをコールして(ステップ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を最後に
見つけた座標をそれぞれ示している。
【0045】そして、座標変数g,hの何れか一方が定
義されているかどうかを判断し(ステップS34)、定
義されていない場合は、ラベルなしとしてこの処理を抜
ける。即ち、ラベルなしの情報を持ってリターンする。
なお、本明細書では、C言語の表記方式に従っているた
めこのような図の書き方となるが、FORTRAN等の
表記方式に従えば、ラベルなしのフラッグを立てた後に
リターンという書き方となろう。以上のようにして、ラ
ベルの有無の検出が行われる。
【0046】次に、ラベルの位置情報の検出、即ちラベ
ルに平行に画像データをフレームメモリ6から抽出する
ための抽出範囲(変数TOP及びBOTTOM)とラベ
ルの傾き(変数SLOPE)の算出が行われる。
【0047】即ち、上記ステップ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角座標の内
の一つを示す。
【0048】次に、座標変数hが定義されているのかど
うかを判断し(ステップS37)、定義されていなけれ
ば、ステップS39に進む。しかし、座標変数hが定義
されている場合には、詳細は後述するようなストップエ
ッジ位置検出ルーチンをコールして(ステップS3
8)、ストップエッジ位置の検出を行う。このストップ
エッジ位置検出は、座標変数f及びh(座標変数hが定
義されていれば当然座標変数fも定義されている)より
図7の(A)に示すような座標変数j及びkを定義し、
さらに座標変数b及びcを定義する。また、stop_
flagをONし、座標変数TOP及びBOTTOMを
定義する。ここで、座標変数b及びcはそれぞれラベル
の4角座標の内の一つを示す。
【0049】次に、start_flag,stop_
flag共にONかどうかを判断し(ステップS3
9)、両方がONしていない場合には、ステップS3E
に進む。なおここで、図中の記号&&は論理積を示す。
【0050】両フラッグ共にONの場合は、それらst
art_flag,stop_flagを両方ともいっ
たんリセットしてから(ステップS3A)、線分(a−
d)と(c−d)を比較して(ステップS3B)、スタ
ートコード22とストップコード23でその線分が長い
方を処理対象として選択する。これは、通常使用時に於
いて、片方のコードが他方に対して短くなる最大の理由
は、画面からはみ出す場合であるので、長い方を処理基
準に選ぶようにしているということによる。
【0051】そして、線分(a−d)の方が線分(b−
c)よりも短いときには、座標変数TOPに座標変数b
の値を、また座標変数BOTTOMには座標変数cの値
をそれぞれ代入してラベル情報の抽出範囲を決定するた
めのデータを定義し、さらにstop_flagを選択
してONする(ステップS3C)。
【0052】逆に、線分(a−d)の長さが線分(b−
c)以上のときには、座標変数TOPに座標変数aの値
を、また座標変数BOTTOMには座標変数dの値をそ
れぞれ代入してラベル情報の抽出範囲を決定するための
データを定義し、さらにstart_flagを選択し
てONする(ステップS3D)。
【0053】そして、ラベルの傾きを求めるルーチンを
コールして(ステップS3E)、これら座標変数TOP
及びBOTTOMよりラベルの傾き(変数SLOPE)
を求め、これら得られた変数と共にラベルありの情報を
持ってリターンする。
【0054】次に、上記のようなラベル検出ルーチン中
のステップS33でコールされるスタート/ストップコ
ード検出ルーチンを、図8のフローチャートを参照して
説明する。このスタート/ストップコード検出ルーチン
は、前述したように、座標変数e及びg、又はf及びh
の少なくとも一方を検出するものである。
【0055】即ち、まずラベル検出間隔用変数INIT
にラベル未検出時の検出間隔変数INC0の値を代入す
る(ステップS331)。次に、詳細は後述するような
スキャン及び(&)検出(行)ルーチンをコールして
(ステップS332)、フレームメモリ6のBank0
の画像データを行方向にスキャンし、スタート/ストッ
プコードの検出を行う。ここで、行方向のスキャンと
は、図7の(A)にロウスキャンとして示すような、フ
レームメモリ6の長手方向へのスキャンのことである。
【0056】そして、上記スキャン&検出(行)ルーチ
ンの結果、スタートコード22もしくはストップコード
23が検出されたかどうか、即ちラベルが検出されたか
どうかを判断し(ステップS333)、ラベルが検出さ
れた場合には、ラベルあり検出の情報を持ってリターン
する。
【0057】一方、ラベルが検出されない場合には、ラ
ベル検出間隔用変数INITにラベル未検出時の検出間
隔変数INC0の値を代入した後(ステップS33
4)、スキャン&検出(列)ルーチンをコールして(ス
テップS332)、フレームメモリ6のBank0の画
像データを列方向にスキャンし、スタート/ストップコ
ードの検出を行う。ここで、列方向のスキャンとは、図
7の(A)にカラムスキャンとして示すような、フレー
ムメモリ6の短手方向へのスキャンのことである。
【0058】そして、上記スキャン&検出(列)ルーチ
ンの結果、スタートコード22もしくはストップコード
23が検出されたかどうか、即ちラベルが検出されたか
どうかを判断し(ステップS335)、ラベルが検出さ
れた場合には、ラベルあり検出の情報を持ってリターン
する。
【0059】しかしながら今度もラベルが検出されなか
った場合には、その原因が角度エラーによるものかを判
断する(ステップS336)。このラベルの角度エラー
は、上記ステップS332でコールされるスキャン&検
出ルーチンのリターン値を参照して行われる。即ち、上
記スキャン&検出ルーチンで、角度エラーとなっている
かどうかを逐次チェックし、エラーが発生すれば、リタ
ーン値に角度エラーフラッグとラベル非検出のフラッグ
を立ててそこで処理を中断して戻ってくる。この角度エ
ラーの判断の場合、この後に再度処理するのは行方向だ
けであるので、列方向を走査したリターン値をこのステ
ップS336で判断させることにより、角度エラーのた
めにラベルなし検出としたのかラベルが検出できなかっ
たためにそうしたのかの判断をしている。
【0060】このステップS336で角度エラーでない
と判断された場合には、ラベルなし検出の情報を持って
リターンする。
【0061】一方、角度エラーと判断された場合には、
次に、ラベル検出間隔用変数INITに、ラベル検出時
のラベル検出間隔INC1を代入する(ステップS33
7)。ここで、検出間隔変数INC0とINC1の大き
さは、基本的には両者の最小公倍数が画面範囲を越えて
いるのが望ましく、例えばINC0=23,INC1=
17である。
【0062】その後、再度、スキャン&検出(行)ルー
チンをコールして(ステップS332)、フレームメモ
リ6のBank0の画像データを行方向にスキャンし、
スタート/ストップコードの検出を行う。
【0063】そして、スタート/ストップコード即ちラ
ベルが検出されたかどうか判断し(ステップS33
8)、検出された場合にはラベルあり検出の情報を持っ
てリターンし、ラベルが検出されない場合はラベルなし
検出の情報を持ってリターンする。
【0064】このように、本スタート/ストップコード
検出ルーチンでは、その検出は、まず行方向へのスキャ
ンにより行われ、これで求められなければ、列方向のス
キャンにより求める。これでも求められなければ、角度
エラー(つまりラベルが傾きすぎていること)かどうか
判断し、エラーならラベル検出間隔を変えて再度行方向
のスキャンを行って再度検出してみる。これでも検出さ
れないならば、ラベルなし検出とする。
【0065】なお、角度エラーの時に行方向スキャンし
か行わないのは、バーコードラベル2は、行スキャンで
見つかるように、つまりカラム方向がフレームメモリ6
の長手方向(横方向)となるように置かれるのが一般的
であり、この人間の特性を利用すれば、列方向は省略で
きるという理由による。勿論、列方向スキャンを行って
も良いが、その場合は実行速度が落ちてしまう。
【0066】ここで、上記ステップS332でコールさ
れるスキャン&検出ルーチンを、図9及び図10に示す
一連のフローチャートを参照して説明する。このルーチ
ンの処理は、Bank0のデータを行方向もしくは列方
向に種々の条件で変化する検出間隔に従って走査し、座
標変数e及びgと座標変数f及びhとの少なくとも一方
を決定することにある。どちらの方向に走査するかは、
このルーチンをコールする際に決定される。座標変数e
及びg、f及びhの少なくとも一方を決定でき、且つそ
の際に角度エラーをおこしていない場合は、ラベルを検
出したとして上位のルーチンに戻る。座標変数e及び
g、f及びhのどちらかの組み合わせも検出できなかっ
た場合は、ラベルなし検出として上位のルーチンに戻
る。また、検出はできても、その座標値から計算される
ラベル角度が走査方向に対して45度以上傾いている場
合は、ラベルなし検出且つ角度エラーとして上位のルー
チンに戻る。
【0067】即ち、まずパラメータscan_incを
検出間隔用変数INITに初期設定し(ステップS33
21)、さらにパラメータnを上記scan_incに
初期設定する(ステップS3322)。ここで、パラメ
ータscan_incは本ルーチンで使われるラベル検
出(スキャン)間隔を示し、パラメータnは検出(スキ
ャン)処理を施すライン位置を表す。
【0068】この初期設定の後、行スキャンか列スキャ
ンか判断し(ステップS3323)、行スキャンであれ
ばn行目の画像データを取り込み(ステップS332
4)、また列スキャンであればn列目の画像データを取
り込む(ステップS3325)。
【0069】次に、上記取り込んだ画像データにスター
トコード22が存在するかを判断し(ステップS332
6)、存在しなければステップS332Aへ進む。スタ
ートコード22が存在する場合には、そのスタートコー
ド22が初めて検出されたものか否かを判断する(ステ
ップS3327)。初めて検出されたものである場合
は、その検出座標を座標変数eに格納する(ステップS
3328)。また、初めて検出されたものでない場合
は、その検出座標を座標変数gに格納する(ステップS
3329)。ここで、最初に検出されたものであるかど
うかは、座標変数eに値が格納されているかどうかを見
て判断している。
【0070】次に同様に、上記取り込んだ画像データに
ストップコード23が存在するかを判断し(ステップS
332A)、存在しなければステップS332Eへ進
む。ストップコード23が存在する場合には、そのスト
ップコード23が初めて検出されたものか否かを判断す
る(ステップS332B)。初めて検出されたものであ
る場合は、その検出座標を座標変数fに格納する(ステ
ップS332C)。また、初めて検出されたものでない
場合は、その検出座標を座標変数hに格納する(ステッ
プS332D)。ここで、最初に検出されたものである
かどうかは、座標変数fに値が格納されているかどうか
を見て判断している。
【0071】次に、座標変数eもしくはfが定義(格
納)されたかどうかを判断し(ステップS332E)、
定義されていればステップS332Fへ、定義されてい
なければステップS332Gへ進む。即ち、定義されて
いれば、次に上記スキャン間隔scan_incがラベ
ル検出時の検出間隔変数INC1でないかどうか、もし
くは座標変数g,h共定義済みかどうかを判断する(ス
テップS332F)。INC1でない場合もしくはg,
h共定義済みの場合は、スキャン間隔scan_inc
を上記変数INC1の値とし(ステップS332H)、
そうでない場合は、scan_incを1とする(ステ
ップS332I)。また、上記ステップS332Eで座
標変数eもしくはfが定義されていないと判断された場
合には、次に上記スキャン間隔scan_incが検出
間隔用変数INITであるかどうかを判断する(ステッ
プS332G)。INITである場合は、スキャン間隔
scan_incを1とし(ステップS332J)、そ
うでない場合は、scan_incを上記INITの値
とする(ステップS332K)。
【0072】このように上記ステップS332Eからス
テップS332Kは、データ取り込み間隔を変化させる
手法を記述している。その動作は、座標変数e,fが定
義されない間は、スキャン間隔scan_incは検出
間隔用変数INITと1の間を交互にとる。座標変数
e,fが定義された場合は、座標変数g,h共に定義さ
れるまで、スキャン間隔scan_incはラベル検出
時の検出間隔変数INC1と1の間を交互にとる。ま
た、座標変数e,f,g,h共に定義された場合は、ス
キャン間隔scan_incは上記変数INC1とな
る。
【0073】即ち、スキャン間隔は、検出処理の初めか
らスタート/ストップコードの何れか一方が検出される
までは、INIT(=INC0、例えば、23)と1の
間を交互にとり、スタートコード/ストップコードの何
れか一方が検出されてから画面の最後までは、INC1
(例えば、17)と1の間を交互にとる。このように検
出ライン間隔を種々変化させるのは、次の理由による。
即ち、今、検出ライン間隔を一定にすると、ラベルの最
小線幅と、撮像倍率と、2次元撮像素子ピッチとで決定
される検出不能となるラベル角度が存在する場合があ
る。それを極力避けるために、検出処理の初めからスタ
ート/ストップコードの何れか一方が検出されるまでの
間間隔を変化させている。この場合でも、条件によって
はラベルが撮像されているにもかかわらず、ラベルが見
つからない(すりぬけ)ことがある。そこで、1回のす
りぬけは仕方がないとし、2回目には必ず検出できるよ
うに、その増分INIT(=INC0)を変化させてい
るものである。
【0074】また、座標変数e,f,g,h共に定義さ
れた場合にスキャン間隔scan_incをINC1と
するのは、一応全ての座標が求まった後は、その後別に
新しいg,hが求まらなくても良く、それよりも、この
処理を高速に終了させることが重要であるという理由に
よる。また、全ての座標が求まった後、増分をINC1
にすると、通常は、引き続き新しいg,hが求まる。
【0075】次に、パラメータnの値をscan_in
cの値だけ増加させてnを更新し(ステップS332
L)、次回取り込む行もしくは列数を決定する。そし
て、フレームメモリ6の縦と横のサイズは既知であるた
め、このサイズより上記更新されたnが画面外かどうか
を判断し(ステップS332M)、画面内の場合は、上
記ステップS3323に制御を移す。
【0076】画面外の場合つまりスキャンが終了したな
らば、次に、座標変数gが定義されたかどうかを判断し
(ステップS332N)、定義されていない場合はステ
ップS332Sに制御を移す。
【0077】この座標変数gが定義されている場合に
は、次に、行スキャンか列スキャンかを判断する(ステ
ップS332O)。そして、行スキャンの場合には、座
標変数gのx座標の値と座標変数eのx座標の値との差
を、座標変数gのy座標の値と座標変数eのy座標の値
との差で割り、その結果の値の絶対値をとり(これを図
中ABSと記す)、これを傾きの絶対値を示す変数de
ltaに代入する(ステップS332P)。
【0078】また、列スキャンの場合には、座標変数g
のy座標の値と座標変数eのy座標の値との差を、座標
変数gのx座標の値と座標変数eのx座標の値との差で
割り、その結果の値の絶対値をとり、これを変数del
taに代入する(ステップS332Q)。
【0079】そして、得られた傾きの絶対値delta
が1よりも大きいかどうかを判断することにより(ステ
ップS332R)、角度エラーかどうかを判断する。角
度エラーの場合には、ラベルなし検出及び角度エラーの
情報を持ってリターンする。
【0080】角度エラーでない場合には、もしくは上記
ステップS332Nで座標変数gが定義されていないと
判断された場合には、次に、座標変数hが定義されたか
どうかを判断し(ステップS332S)、定義されてい
ない場合はステップS332Xに制御を移す。
【0081】この座標変数hが定義されている場合に
は、次に、行スキャンか列スキャンかを判断する(ステ
ップS332T)。そして、行スキャンの場合には、座
標変数hのx座標の値と座標変数fのx座標の値との差
を、座標変数hのy座標の値と座標変数fのy座標の値
との差で割り、その結果の値の絶対値をとり、これを傾
きの絶対値deltaに代入する(ステップS332
U)。
【0082】また、列スキャンの場合には、座標変数h
のy座標の値と座標変数fのy座標の値との差を、座標
変数hのx座標の値と座標変数fのx座標の値との差で
割り、その結果の値の絶対値をとり、これをdelta
に代入する(ステップS332V)。
【0083】そして、得られた傾きの絶対値delta
が1よりも大きいかどうかを判断することにより(ステ
ップS332W)、角度エラーかどうかを判断する。角
度エラーの場合には、ラベルなし検出及び角度エラーの
情報を持ってリターンする。
【0084】そして、角度エラーでない場合には、もし
くは上記ステップS332Sで座標変数hが定義されて
いないと判断された場合には、次に、座標変数gもしく
はhが定義されたかどうかを判断し(ステップS332
X)、定義された場合にはラベルあり検出の情報を持っ
てリターンし、定義されていない場合にはラベルなし検
出の情報を持ってリターンする。
【0085】このように上記ステップS332N乃至S
332Q、もしくはステップS332S乃至S332V
で、スタート/ストップコードの傾きを求めることによ
りラベル全体の傾きを求め、ステップS332Rもしく
はS332Wで、その傾きの絶対値deltaが1を越
えるかどうかを判断し、1を越える場合は、角度エラー
でラベルなし検出として制御を戻す。また、その傾きの
絶対値deltaが1を越えない場合は、ステップS3
32Xで座標変数gもしくはhが定義されているかどう
かを判断し、定義されている場合はラベルが検出された
として制御を戻し、定義されていない場合はラベルなし
検出として制御を戻す。
【0086】なお、上記ステップS332R及びS33
2Wで角度エラーを判定するのは、次の理由による。即
ち、本来検出されるべき抽出方向で「すり抜け」が発生
し、他方で検出されることは、希ではあるが発生する。
その場合、その後の処理でエラーが発生するため、この
ような検出がなされないようにするためである。また、
角度エラーの基準が1となるのは、ラベル回転角45度
でdeltaが1となるからである。
【0087】次に、上記のようなラベル検出ルーチン中
のステップS36でコールされるスタートエッジ位置検
出ルーチンを、図11のフローチャートを参照して説明
する。
【0088】即ち、まずスタート検出フラッグ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とすれば良
いことになる。
【0089】こうしてスタートビッグバー22Aをクロ
スする直線が得られたならば、次に、その直線と画面を
定義する方程式との交点をそれぞれA,A’(図7の
(A)参照)とする(ステップS364)。
【0090】そして、このラインA−A’の中点から点
Aに向けてデータを順に見ていき(ステップS36
5)、エッジが存在するかどうかをチェックする(ステ
ップS366)。このチェックは、例えば、輝度変化を
見る強度比較、微分法、2次微分法、等により行なうこ
とができる。こうして、エッジが検出されたならば、そ
の検出座標を座標変数iに格納する(ステップS36
7)。即ち、検出座標を点iとする。
【0091】次に、上記ラインA−A’の中点から今度
は点A’に向けてデータを順に見ていき(ステップS3
68)、エッジが存在するかどうかをチェックする(ス
テップS369)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数mに格納する(ステップS
36A)。即ち、検出座標を点mとする。
【0092】そして、座標変数e,gで示される点e,
gを通る直線に座標変数iで示される点iから垂線を下
ろし、その交点の座標を座標変数aに格納する(ステッ
プS36B)。即ち、点iを通るラインA−A’と直交
する直線の方程式を求めて、それと点e,gを通る直線
の交点を求め、その交点を点aとする。
【0093】同様に、座標変数e,gで示される点e,
gを通る直線に座標変数mで示される点mから垂線を下
ろし、その交点の座標を座標変数dに格納する(ステッ
プS36C)。即ち、点mを通るラインA−A’と直交
する直線の方程式を求めて、それと点e,gを通る直線
の交点を求め、その交点を点dとする。
【0094】そして、こうして求めた座標変数aの値を
座標変数TOPに、また座標変数dの値を座標変数BO
TTOMにそれぞれ格納した後(ステップS36D)、
上位のルーチンへ制御を戻す。
【0095】また、上記のようなラベル検出ルーチン中
のステップS38でコールされるストップエッジ位置検
出ルーチンも、このスタートエッジ位置検出ルーチンと
ほぼ同様にして行われる。図12は、このストップエッ
ジ位置検出ルーチンのフローチャートである。
【0096】即ち、まずストップ検出フラッグstop
_flagをONした後(ステップS381)、線分f
−hに平行な直線の方程式を定義、例えば線分f−hの
方程式y=ax+bを求める(ステップS382)。次
に、この直線がストップビックバー23Aをクロスする
ように、切片bを定義する(ステップS383)。こう
してストップビッグバー23Aをクロスする直線が得ら
れたならば、次に、その直線と画面を定義する方程式と
の交点をそれぞれB,B’(図7の(A)参照)とする
(ステップS384)。
【0097】そして、このラインB−B’の中点から点
Bに向けてデータを順に見ていき(ステップS38
5)、エッジが存在するかどうかをチェックする(ステ
ップS386)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数jに格納する(ステップS
387)。即ち、検出座標を点jとする。
【0098】次に、上記ラインB−B’の中点から今度
は点B’に向けてデータを順に見ていき(ステップS3
88)、エッジが存在するかどうかをチェックする(ス
テップS389)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数kに格納する(ステップS
38A)。即ち、検出座標を点kとする。
【0099】そして、座標変数f,hで示される点f,
hを通る直線に座標変数jで示される点jから垂線を下
ろし、その交点の座標を座標変数bに格納する(ステッ
プS38B)。即ち、点jを通るラインB−B’と直交
する直線の方程式を求めて、それと点f,hを通る直線
の交点を求め、その交点を点bとする。
【0100】同様に、座標変数f,hで示される点f,
hを通る直線に座標変数kで示される点kから垂線を下
ろし、その交点の座標を座標変数cに格納する(ステッ
プS38C)。即ち、点kを通るラインB−B’と直交
する直線の方程式を求めて、それと点f,hを通る直線
の交点を求め、その交点を点cとする。
【0101】そして、こうして求めた座標変数bの値を
座標変数TOPに、また座標変数cの値を座標変数BO
TTOMにそれぞれ格納した後(ステップS38D)、
上位のルーチンへ制御を戻す。
【0102】次に、上記のようなラベル検出ルーチン中
のステップS3Eでコールされるラベルの傾きを求める
ルーチンを、図13のフローチャート及び図7の(B)
の行スキャンの場合のラベルの傾きを求めるため説明図
を参照して説明する。なお、図7の(B)には、行スキ
ャンでスタートコード22が基準に選択された場合の例
を示している。
【0103】即ち、まず行スキャンかどうかを判断し
(ステップS3E1)、行スキャンならばステップS3
E2へ、また列スキャンならばステップS3E4へと制
御を移す。
【0104】行スキャンの場合には、まず座標変数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)。なお、図中のアスタリスク*の上付き
文字は、乗算記号×を意味する。
【0105】また、列スキャンの場合には、まず座標変
数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)。
【0106】次に、上記ステップS5でコールされる手
ぶれ検出ルーチンを、図14のフローチャートを参照し
て説明する。即ち、処理対象画像を今度はフレームメモ
リ6のBank1とし(ステップS51)、手ぶれ検出
用フラグverifyをOFFに初期化する(ステップ
S52)。そして、スタート検出フラッグstart_
flagがONかどうかを判断し(ステップS53)、
ONであれば詳細は後述するようなスタートコードベリ
ファイルルーチンをコールして(ステップS54)、ス
タートコード22に対してベリファイを行う。また、O
FFであれば、詳細は後述するようなストップコードベ
リファイルルーチンをコールして(ステップS55)、
ストップコード23に対してベリファイを行う。そし
て、手ぶれ検出用フラッグverifyがONであるか
どうかを判断する(ステップS56)ことにより、この
ベリファイ結果を判断する。この結果、手ぶれ検出フラ
ッグverifyがONならば、手ぶれなしの情報を持
ってリターンし、またそれがOFFならば手ぶれありの
情報を持ってリターンする。
【0107】次に、上記のような手ぶれ検出ルーチン中
のステップS54でコールされるスタートコードベリフ
ァイルーチンを、図15のフローチャートを参照して説
明する。なお、図中の’を付けて示す座標は、イメージ
1(Bank1)で検出する位置を表している。即ち、
上記ステップS3でコールされるラベル検出ルーチンで
座標eを求めたとする。これはイメージ0(Bank
0)で検出してきたスタートコード22を最初に見つけ
た座標である。一方、座標e’は、上記座標eを見つけ
たのと同じ条件(スキャン方向やスキャン位置)でイメ
ージ1(Bank1)を走査し、求まった座標である。
即ち、イメージ0,イメージ1間でラベルに動きがなか
った場合、これらの座標e,e’は同一座標となるはず
である。ここで、手ぶれ誤差範囲AREAの値を例えば
2と設定すれば、画像間で座標eがそれぞれx,y方向
に±1画素以内のずれであれば、画像の動きはなかった
と判定する。
【0108】即ち、まず行スキャンかどうか判断し(ス
テップS541)、行スキャンの場合にはステップS5
42へ進み、列スキャンの場合にはステップS548へ
制御を移す。
【0109】行スキャンの場合には、まず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へ進む。
【0110】一方、列スキャンの場合には、まず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)。
【0111】そして、座標変数eとe’の値の差の絶対
値及び座標変数gとg’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS54E)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。
【0112】このように、ステップS541からステッ
プS54Eでは、Bank0で検出した座標e,gに対
してBank1で許容誤差内にあるかどうかを検出判断
している。
【0113】こうして、許容誤差内にあると判断された
ならば、次に、線分e’−g’に平行な直線の方程式を
定義、例えば線分e’−g’の方程式y=ax+bを求
める(ステップS54F)。次に、この直線がスタート
ビックバー22Aをクロスするように、切片bを定義す
る(ステップS54G)。こうしてスタートビッグバー
22Aをクロスする直線が得られたならば、次に、その
直線と画面を定義する方程式との交点をそれぞれA,
A’とする(ステップS54H)。
【0114】そして、このラインA−A’の中点から点
Aに向けてデータを順に見ていき(ステップS54
I)、エッジが存在するかどうかをチェックする(ステ
ップS54J)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数i’に格納する(ステップ
S54K)。即ち、検出座標を点i’とする。
【0115】次に、上記ラインA−A’の中点から今度
は点A’に向けてデータを順に見ていき(ステップS5
4L)、エッジが存在するかどうかをチェックする(ス
テップS54M)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数m’に格納する(ステップ
S54N)。即ち、検出座標を点m’とする。
【0116】そして、座標変数iとi’の値の差の絶対
値及び座標変数mとm’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS54O)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ま
た、手ぶれ誤差範囲AREA内であれば、手ぶれ検出フ
ラッグverify=ONの情報を持って上位のルーチ
ンへリターンする。
【0117】このように、ステップS54Fからステッ
プS54Oでは、Bank0で検出した座標i,mに対
してBank1で許容誤差内にあるかどうか検出判断し
ている。そして、すべてが許容範囲にある場合は、手ぶ
れ検出フラッグverifyをONとして制御を戻し、
一ヶ所でも許容範囲外の場合は、手ぶれ検出フラッグv
erifyをOFFとして制御を戻すようにしている。
【0118】次に、上記のような手ぶれ検出ルーチン中
のステップS55でコールされるストップコードベリフ
ァイルーチンを、図16のフローチャートを参照して説
明する。このストップコードベリファイルーチンは、上
記スタートコードベリファイルーチンとほぼ同様であ
る。
【0119】即ち、まず行スキャンかどうか判断し(ス
テップS551)、行スキャンの場合にはステップS5
52へ進み、列スキャンの場合にはステップS558へ
制御を移す。
【0120】行スキャンの場合には、まず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へ進む。
【0121】一方、列スキャンの場合には、まず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)。
【0122】そして、座標変数fとf’の値の差の絶対
値及び座標変数hとh’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS55E)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。
【0123】こうして、許容誤差内にあると判断された
ならば、次に、線分f’−h’に平行な直線の方程式を
定義、例えば線分f’−h’の方程式y=ax+bを求
める(ステップS55F)。次に、この直線がストップ
ビックバー23Aをクロスするように、切片bを定義す
る(ステップS55G)。こうしてストップビッグバー
23Aをクロスする直線が得られたならば、次に、その
直線と画面を定義する方程式との交点をそれぞれB,
B’とする(ステップS55H)。
【0124】そして、このラインB−B’の中点から点
Bに向けてデータを順に見ていき(ステップS55
I)、エッジが存在するかどうかをチェックする(ステ
ップS55J)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数j’に格納する(ステップ
S55K)。即ち、検出座標を点j’とする。
【0125】次に、上記ラインB−B’の中点から今度
は点B’に向けてデータを順に見ていき(ステップS5
5L)、エッジが存在するかどうかをチェックする(ス
テップS55M)。こうして、エッジが検出されたなら
ば、その検出座標を座標変数k’に格納する(ステップ
S55N)。即ち、検出座標を点k’とする。
【0126】そして、座標変数jとj’の値の差の絶対
値及び座標変数kとk’の値の差の絶対値をとり、両方
の絶対値が手ぶれ誤差範囲AREA内であるかどうかを
判断する(ステップS55O)。手ぶれ誤差範囲ARE
A内でなければ、手ぶれ検出フラッグverify=O
FFの情報を持って上位のルーチンへリターンする。ま
た、手ぶれ誤差範囲AREA内であれば、手ぶれ検出フ
ラッグverify=ONの情報を持って上位のルーチ
ンへリターンする。
【0127】次に、上記ステップS7でコールされるし
きい値決定ルーチンを、図17のフローチャートを参照
して説明する。即ち、まずスタート検出フラッグsta
rt_flagがONかどうか、つまり上記ステップS
3でコールされたラベル検出ルーチンで処理対象として
選択されたのがスタートコード22であるのかストップ
コード23であるのかを判断する(ステップS71)。
スタートコード22である場合は、点eの値を点pに代
入し(ステップS72)、ストップコード23の場合は
点fの値を点pに代入する(ステップS73)。即ち、
しきい値を決定するためのデータ列の始点座標を座標変
数pに格納する。これにより、例えばスタートコード2
2の場合には図18の(A)に示すように、始点座標が
決定される。
【0128】次に、行スキャンであるかどうか判断し
(ステップS74)、行スキャンの場合にはステップS
75へ、また列スキャンの場合にはステップS79へ処
理を移す。即ち、ステップS74で行スキャンデコー
ド、つまり座標変数e,f,g,hを見つける処理に用
いた方向を見つけたかどうかを判断させ、行スキャンな
らステップS75からステップS78の処理を行い、列
スキャンならステップS79からステップS7Cの処理
を行う。
【0129】即ち、行スキャンの場合には、座標変数p
のy座標の値で示されるライン、つまり図18の(A)
に示されるようなデータ取り込みラインのデータをフレ
ームメモリ6のBank0から取り込み(ステップS7
5)、スタートコード22もしくはストップコード23
の終わりx座標を点qのx座標とする(ステップS7
6)。そして、点pから点qまでのデータを微分する
(ステップS77)。これにより、例えば図18の
(A)のデータ取り込みラインの場合には、図18の
(B)に示すようなスタートコード22の微分波形が求
まる。そして、この微分データの3番目のピークの絶対
値を変数MAXとする(ステップS78)。
【0130】一方、列スキャンの場合には、座標変数p
のx座標の値で示されるラインのデータをフレームメモ
リ6のBank0から取り込み(ステップS79)、ス
タートコード22もしくはストップコード23の終わり
y座標を点qのy座標とする(ステップS7A)。そし
て、点pから点qまでのデータを微分する(ステップS
7B)。そして、この微分データの3番目のピークの絶
対値を変数MAXとする(ステップS7C)。
【0131】ここで、微分データの3番目を見る理由
は、概念的に、バーコード領域内で最もコントラストが
低くなる(即ち、エッジの微分ピークが最も低い)とこ
ろでしきい閾値を決定したいということから、ラベルの
バーとスペースの間隔が最も狭いところであるスタート
もしくはストップコードの第3エッジを選択するように
しているということによる。これにより、ラベルサイズ
やラベルの照明条件によらず安定的なデコードが可能と
なる。
【0132】そして、こうして求めた変数MAXの値を
ピークに対する比率の定数THRESHOLD_RAT
IOで割り、その結果をしきい値変数THRESHOL
Dに代入する(ステップS7D)。即ち、求められたデ
ータからしきい値をかりに求める。なお、定数THRE
SHOLD_RATIOとは、ピークの何分の一をしき
い値に選ぶかを示す値であり、通常は、2あるいは3に
設定される。
【0133】次に、こうしてかりに求めたしきい値TH
RESHOLDの値が、最小しきい値定数THRESH
OLD_SMALLよりも大きく(ステップS7E)、
且つ最大しきい値定数THRESHOLD_BIGより
も小さいかどうか判断する(ステップS7F)。即ち、
かりに求められたしきい値が、しきい値の取り得る範囲
内に存在するかどうかを判断する。定数THERESH
OLD_BIGで示される最大値を越える場合には、定
数THERESHOLD_BIGで示される最大値をし
きい値変数THRESHOLDに代入、つまりしきい値
を最大値に設定する(ステップS7H)。また、定数T
HRESHOLD_SMALLで示される最小値未満の
場合は、定数THERESHOLD_SMALLで示さ
れる最小値をしきい値変数THRESHOLDに代入、
つまりしきい値を最小値に設定する。
【0134】次に、上記ステップS8でコールされるロ
ウ及びカラムナンバ決定ルーチンを、図19のフローチ
ャート及び図20の(A)のフレームメモリへの投影像
の図を参照して説明する。なお、図20の(A)は、行
スキャンでスタートコード22が基準に選択された場合
の例を示している。
【0135】即ち、まずロウインディケータ情報を読み
取るための基準座標の始点として、ラベルのトップ座標
TOPの値を座標変数WORKに格納する(ステップS
81)。次に、この座標変数WORKを通り、ラベルの
傾き変数SLOPEで示される傾きを持つ直線lを定義
し(ステップS82)、この直線lが画面枠とクロスす
る点W1,W2を定義する(ステップS83)。そし
て、線分W1−W2上の画像データを取り込み(ステッ
プS84)、その中に含まれるロウインディケータ情報
を読み取る(ステップS85)。
【0136】ここで、ロウインディケータ情報の読み取
りは、例えば次のようにして行う。即ち、上記ステップ
S84で取り込まれた対象ライン上の画像データつまり
白黒の画素値からエッジを検出し、幅情報に変換する。
そして、この幅情報からスタートコード22を検出し、
そのスタートコード22の次のコードがロウインディケ
ータ21Aであることがわかっているので、それを読み
込む。また同様に、ストップコード23を検出し、その
ストップコード23の直前のコードがロウインディケー
タ21Aであることもわかっているため、それを読み込
む。こうして、ロウインディケータ21Aが読み取れた
ならば、それを不図示のバーコード表と比較し、一致す
る部分をコードに、つまり行数,列数,セキュリティレ
ベル等の情報に変換する。なお、幅情報への変換は、種
々の手法があるが、例えば後述するような幅情報への変
換ルーチンをコールすることにより行うことかできる。
【0137】次に、ロウインディケータ情報が確定した
か否かをチェックし(ステップS86)、確定したなら
ば制御をステップS8Eに移す。確定しないならば、ス
テップS87に制御を移す。ここで、確定とは、何回か
ロウインディケータ21Aを読み込み、情報の信頼度が
十分上がった場合のことを意味する。例えば、ロウイン
ディケータ21Aに書かれている情報(行数,列数,セ
キュリティレベル)が10回読んだならば、その10回
とも同じ情報が得られた場合、確定されたとする。
【0138】ロウインディケータ情報が確定しない場合
は、次に行スキャンかどうかをチェックし(ステップS
87)、行スキャンの場合はステップS88に、列スキ
ャンの場合はステップS8Bに制御を移す。
【0139】即ち、行スキャンの場合には、座標変数W
ORKのy座標の値に所定の増分L_INCを加えて、
その結果を新たな座標変数WORKのy座標値として代
入する(ステップS88)。また、ラベルの傾き変数S
LOPEの値に座標変数WORKのy座標の値を乗じ、
その結果にラベルの切片変数intersectを加え
て、その結果を新たな座標変数WORKのx座標値とし
て代入する(ステップS89)。こうして新たにスキャ
ンするための基準座標を座標変数WORKに再設定す
る。そして、この再設定された座標変数WORKのy座
標値がラベルのボトム座標変数BOTTOMのy座標値
を越えているかどうか、つまりラベル領域内かどうかを
判断し(ステップS8A)、ラベル領域内であれば上記
ステップS82から繰り返し、ラベル領域外の場合はマ
トリックス未定義の情報を持って上位のルーチンへリタ
ーンする。
【0140】列スキャンの場合も同様に、まず座標変数
WORKのx座標の値に所定の増分L_INCを加え
て、その結果を新たな座標変数WORKのx座標値とし
て代入する(ステップS8B)。また、ラベルの傾き変
数SLOPEの値に座標変数WORKのx座標の値を乗
じ、その結果にラベルの切片変数intersectを
加えて、その結果を新たな座標変数WORKのy座標値
として代入する(ステップS8C)。こうして新たにス
キャンするための基準座標を座標変数WORKに再設定
し、この再設定された座標変数WORKのy座標値がラ
ベルのボトム座標変数BOTTOMのy座標値を越えて
いるかどうか、つまりラベル領域内かどうかを判断する
(ステップS8D)。そして、ラベル領域内であれば上
記ステップS82から処理を繰り返し、ラベル領域外の
場合はマトリックス未定義の情報を持って上位のルーチ
ンへリターンする。
【0141】一方、上記ステップS86で、ロウインデ
ィケータ21Aが確定したと判断した場合は、ロウイン
ディケータ情報から得られたラベルの行数が、ラベルの
ロウ数変数ROW_NUMBERに格納される(ステッ
プS8E)。さらに、ロウインディケータ情報からラベ
ルの列数が抽出され、ラベルのカラム数変数COLUM
N_NUMBERに格納される(ステップS8F)。そ
の後、マトリックスが定義されたという情報を持って上
位のルーチンへ制御を戻す。
【0142】次に、上記ステップSAでコールされるス
キャン方程式決定ルーチンを、図21及び図22の
(A)の一連のフローチャート及び図20の(B)のフ
レームメモリへの投影像の図を参照して説明する。な
お、図20の(B)は、行スキャンでスタートコード2
2が基準に選択された場合の例を示している。
【0143】即ち、まず変数counterを0に初期
化し(ステップSA1)、また基準座標変数WORKを
ラベルのトップ座標変数TOPの値に初期化する(ステ
ップSA2)。
【0144】次に行スキャンか列スキャンか判断し(ス
テップSA3)、行スキャンの場合には、ラベルのボト
ム座標変数BOTTOMのy座標値とラベルのトップ座
標変数TOPのy座標値との差を、変数count_e
ndに代入する(ステップSA4)。即ち、決定しなけ
ればならないパターン数(図20の(B)の場合ではラ
ベルの列方向の画素数)を求め、変数count_en
dに格納する。つまり、パターン数とは、ラベル全面を
走査するための数である。
【0145】同様に、列スキャンの場合には、ラベルの
ボトム座標変数BOTTOMのx座標値とラベルのトッ
プ座標変数TOPのx座標値との差を、変数count
_endに代入する(ステップSA5)。
【0146】次に、再度行スキャンか列スキャンかを判
断し(ステップSA6)、行スキャンの場合には、ラベ
ルのトップ座標変数TOPのy座標値に変数count
erの値を加算し、その結果を基準座標変数WORKの
y座標値として代入する(ステップSA7)。また、ラ
ベルの傾き変数SLOPEの値に基準座標変数WORK
のy座標の値を乗じ、その結果にラベルの切片変数in
tersectを加えて、その結果を新たな基準座標変
数WORKのx座標値として代入する(ステップSA
8)。このように、変数counter値の増加にとも
ない基準座標変数WORKを再設定している。
【0147】列スキャンの場合も同様に、ラベルのトッ
プ座標変数TOPのx座標値に変数counterの値
を加算し、その結果を基準座標変数WORKのx座標値
として代入する(ステップSA9)。また、ラベルの傾
き変数SLOPEの値に基準座標変数WORKのx座標
の値を乗じ、その結果にラベルの切片変数inters
ectを加えて、その結果を新たな基準座標変数WOR
Kのy座標値として代入する(ステップSAA)。
【0148】次に、この再設定された座標変数WORK
を通り、ラベルの傾き変数SLOPEで示される傾きを
持つ直線lを定義し(ステップSAB)、この直線lが
画面枠と交差する2点を求め、それぞれを座標変数の配
列DIM_POINT_P及びDIM_POINT_Q
のcounter番目(変数counterの値が示す
配列の番号)に格納する(ステップSAC)。
【0149】その後、変数counter値をインクリ
メントし(ステップSAD)、その結果の再設定された
変数counter値が必要数、即ち変数counte
r_endに達したかどうかをチェックする(ステップ
SAE)。必要数に達しない場合は制御を上記ステップ
SA6に戻し、必要数に達した場合は制御をステップS
AFに移す。以上の動作によって、ラベルを順次走査す
る場合の始点と終点の組み合わせが定義される。
【0150】次に、再度変数counterを0に初期
化する(ステップSAF)。そして、ラベルの傾き変数
SLOPEの値に変数counter値を乗じることに
より、計算されているラベルの傾きSLOPEの位置に
よる増加分が計算され、この計算結果を変数の2次元配
列LINE_INC[0]の所定の位置(変数coun
terで示される位置)に格納する(ステップSA
G)。また、ラベルの傾き変数SLOPEの値に予め定
めておいた傾き補正量dtを加算した和に変数coun
ter値を乗じることにより、計算されているラベルの
傾きSLOPEに予め定めておいた傾き補正量dtを足
した量の位置による増加分が計算され、この計算結果を
変数の2次元配列LINE_INC[1]の所定の位置
に格納する(ステップSAH)。さらに、ラベルの傾き
変数SLOPEの値と上記傾き補正量dtの差に変数c
ounter値を乗じることにより、計算されているラ
ベルの傾きSLOPEに傾き補正量dtを引いた位置に
よる増加分が計算され、変数の2次元配列LINE_I
NC[2]の所定の位置の格納される(ステップSA
I)。
【0151】その後、変数counterをインクリメ
ントした後(ステップSAJ)、この再設定された変数
counterが配列の最大サイズ定数MAX_NUM
に達したかどうかをチェックする(ステップSAK)。
達していない場合は上記ステップSAGに制御を移し、
達した場合には上位のルーチンへ制御を戻す。
【0152】このステップSAFからステップSAKの
ループによって、ラベル情報を1ライン取り込む場合の
傾きパターンが3種類得られる。
【0153】なお、上記配列の最大サイズ定数MAX_
NUMは、プログラム作成時に定める変数のサイズを示
すもので、例えば、フレームメモリ6のサイズが640
×480画素であると仮定すれば、1000程とってお
けば良い。
【0154】次に、上記ステップSBでコールされる最
適スキャンルーチンを、図23のフローチャート及び図
22の(B)のフレームメモリへの投影像の図を参照し
て説明する。なお、図22の(B)は、行スキャンでス
タートコード22が基準に選択された場合の例を示して
いる。また、説明を簡単にするために、行スキャンでの
場合について説明する。従って、行スキャンでない場合
は、後述するようなステップSB2の処理はステップS
B3、またステップSB7の処理はステップSB8とな
る。
【0155】即ち、行スキャンの場合には(ステップS
B1)、ラベルのボトム座標変数BOTTOMのy座標
値とラベルのトップ座標変数TOPのy座標値との差、
つまりラベルのy方向の画素数を計算し、その計算結果
を変数endに格納する(ステップSB2)。次に、こ
の変数endの値をラベルの行数(変数ROW_NUM
BERの内容)で割ることにより、図22の(B)に示
すように各行の中心を一度だけ走査するための間隔を計
算し、それを変数incに格納する(ステップSB
4)。そして、この間隔変数incを2で割ることによ
り、中心を走査するための初期バイアスを計算し、それ
を変数counterの初期値とする(ステップSB
5)。
【0156】次に、行スキャンの場合には(ステップS
B6)、現在の変数counter値に於ける走査始点
及び終点を上記座標変数の配列DIM_POINT_
P,DIM_POINT_Qから求め、x方向増分をl
且つy方向増分を上記傾き増分配列LINE_INC
[0]で、フレームメモリ6のBank0から画像デー
タを1ライン取出して、それを取り込みバッファ配列s
can_lineに格納し、またそのデータの個数を変
数numに格納する(ステップSB7)。
【0157】そして、詳細は後述するような幅情報に変
換ルーチンをコールして(ステップSB9)、この取り
出したデータを幅情報に変換する。次に、この幅情報を
元に、不図示バーコード表と一致する部分をコードに変
換し、その情報を保存する(ステップSBA)。
【0158】その後、変数counterを増分、即ち
上記間隔変数incの値で再設定し(ステップSB
B)、この再設定された変数counter値が、上記
変数endつまりラベル範囲を越えるかどうかをチェッ
クする(ステップSBC)。越えない場合は上記ステッ
プSB6に制御を移し、越える場合は次のステップSB
Dに制御を移す。即ち、格納されたコード情報がラベル
に記述されている情報を、完全に復号可能か否かをチェ
ックし(ステップSBD)、復号可能の場合はデコード
可能の情報を持って、また復号不可能の場合はデコード
不可能の情報を持って上位のルーチンへ制御を戻す。
【0159】次に、上記ステップSDでコールされるス
キップスキャンルーチンを説明する。このスキップスキ
ャンルーチンは、以下のことを除いては、上記最適スキ
ャンとほぼ同じである。
【0160】1.上記最適スキャンの場合は、ラベルの
1行について1回のスキャンしか行われなかったが、ス
キップスキャンの場合は、デコード条件が満たされない
場合、ラベル領域の全面を走査することとなる。つま
り、全ラベル情報をAコードとし、そのうち信頼性が高
くコードが確定された量をBとすると、A−Bはコード
が確定されていない量となる。この数が、セキュリティ
レベルで定義されている修復可能な量を下回っており、
修復した後チェックして妥当であれば、デコード条件は
満足する。
【0161】2.さらに、スキップスキャンの場合は、
画像の1ラインを取り込む際に傾き補正量を付加した2
パターンでも走査を行う。
【0162】以下、図24のフローチャートを参照し
て、このスキップスキャンルーチンを説明する。なお、
説明を簡単にするために、行スキャンでの場合について
説明する。従って、行スキャンでない場合は、後述する
ようなステップSD2の処理はステップSD3、またス
テップSD7の処理はステップSD8となる。
【0163】即ち、行スキャンの場合には(ステップS
D1)、ラベルのボトム座標変数BOTTOMのy座標
値とラベルのトップ座標変数TOPのy座標値との差、
つまりラベルのy方向の画素数を計算し、その計算結果
を変数endに格納する(ステップSD2)。次に、変
数i及びnを0に初期設定し、さらに上記変数endの
値をラベルの行数(変数ROW_NUMBERの内容)
で割ることにより、図22の(B)に示すように各行の
中心を一度だけ走査するための間隔を計算して、それを
変数incに格納する(ステップSD4)。そして、上
記変数iの値を変数counterの設定値とする(ス
テップSD5)。
【0164】次に、行スキャンの場合には(ステップS
D6)、現在の変数counter値に於ける走査始点
及び終点を上記座標変数の配列DIM_POINT_
P,DIM_POINT_Qから求め、x方向増分をl
且つy方向増分を上記傾き増分配列LINE_INC
[0]で、フレームメモリ6のBank0から画像デー
タを1ライン取出して、それを取り込みバッファ配列s
can_lineに格納し、またそのデータの個数を変
数numに格納する(ステップSD7)。
【0165】そして、詳細は後述するような幅情報に変
換ルーチンをコールして(ステップSB9)、この取り
出したデータを幅情報に変換する。次に、この幅情報を
元に、当該バーコードの用途に応じて予め決められた不
図示バーコード表と一致する部分をコードに変換し、そ
の情報を保存する(ステップSDA)。
【0166】その後、変数counterを増分、即ち
予め定めた定数SKIPの値で再設定し(ステップSD
A)、この再設定された変数counter値が、上記
変数endつまりラベル範囲を越えるかどうかをチェッ
クする(ステップSDB)。越えない場合は上記ステッ
プSD6に制御を移し、越える場合は次のステップSD
Cに制御を移す。
【0167】即ち、格納されたコード情報がラベルに記
述されている情報を、完全に復号可能か否かをチェック
し(ステップSDC)、復号可能の場合はデコード可能
の情報を持って上位のルーチンへ制御を戻す。
【0168】また、復号不可能の場合は、変数iをイン
クリメントした後(ステップSDD)、この再設定され
た変数iが上記定数SKIPよりも小さいかどうか判断
する(ステップSDE)。小さい場合には、上記ステッ
プS5へ制御を戻す。また、小さくない場合には、変数
nをインクリメントすると共に変数iを0にリセットし
(ステップSDF)、再設定された変数nが2よりも小
さいかどうか判断する(ステップSDG)。小さい場合
には上記ステップSD5に制御を戻し、また小さくない
場合には、デコード不可能の情報を持って上位のルーチ
ンへ制御を戻す。
【0169】なお、このスキップスキャンでは、ラベル
をSKIP回に分けて走査させるようにしている。即
ち、あくまでも速い処理が要求されるため、SKIPと
びに走査を行い、ラベル領域外まで一気にラベルコード
を読み込み、デコード可能かの判断を行う。そして、デ
コード可能となれば、まだフレームメモリ6のBank
0を全面をスキャンしておらずとも、直ちにこのルーチ
ンを終わらせるようにしている。上記のような走査をS
KIP回繰り返せば、Bank0の全面をスキャンした
ことになる。ここでは、上記SKIPをラベルサイズで
変動させるようにした。このSKIPは本来、定数(例
えば3や4など)でも良いが、ラベルスキャン試行回数
を少しでも減少させ、高速動作させるために、ラベルサ
イズなどによって変化するようにしている。
【0170】次に、上記ステップSB9でコールされる
幅情報に変換ルーチンを、図25及び図26の一連のフ
ローチャートを参照して説明する。本ルーチンは、要
は、ラベルのバーとスペースとの幅を求めるものであ
り、微分信号によりバーとスペースとの境界を求め、こ
のとき2次曲線に近似することによりデータのピークを
求めている。そして、順次ピーク一を求めて、その位置
の差を求めることにより、幅が求められる。このとき、
スタートコード22、ロウインディケータ21Aについ
ても幅情報に変換する。
【0171】即ち、まず、上位のルーチンで取り込んだ
取り込みバッファ配列scan_lineをラインデー
タの配列とし、この取り込まれて変数numにストアさ
れている値をデータ個数と定義する(ステップSB9
1)。次に、この変数numの値をデクリメントした結
果を位置標識カウンタiに格納し、また変数jを0に初
期設定する(ステップSB92)。そして、取り込みバ
ッファ配列scan_lineのi番目(位置標識カウ
ンタiにより示される)の位置の値から取り込みバッフ
ァ配列scan_lineのi−1番目の位置の値を引
き、その解を取り込みバッファ配列scan_line
のi番目の位置に再設定する(ステップSB93)。こ
の後、位置標識カウンタiをデクリメントし(ステップ
SB94)、その結果が0よりも大きいかどうか判断す
る(ステップSB95)。大きくなければ、上記ステッ
プSB93に制御を戻す。即ち、このステップSB91
からステップSB95で、ラインデータを一次微分す
る。
【0172】次に、位置標識カウンタiを2に初期化す
る(ステップSB96)。そして、取り込みバッファ配
列scan_lineのi番目の位置の値が、しきい値
変数THRESHOLDの値よりも大きく、且つ取り込
みバッファ配列scan_lineのi−1番目の位置
の値よりも大きく、且つ取り込みバッファ配列scan
_lineのi+1番目の位置の値以上かどうかを判断
し(ステップSB97)、そうであれば、符号指標fl
agをUPとする(ステップSB98)。
【0173】そうでなければ、次に、取り込みバッファ
配列scan_lineのi番目の位置の値が、符号を
負としたしきい値変数THRESHOLDの値(−TH
RESHOLD)よりも小さく、且つ取り込みバッファ
配列scan_lineのi−1番目の位置の値よりも
小さく、且つ取り込みバッファ配列scan_line
のi+1番目の位置の値以下かどうかを判断し(ステッ
プSB99)、そうであれば、符号指標flagをDO
WNとする(ステップSB9A)。
【0174】そうでなければ、次に、位置標識カウンタ
iをインクリメントし(ステップSB9B)、その結果
が変数numの値から1引いた数よりも小さいかどうか
判断する(ステップSB9C)。小さければ上記ステッ
プSB97へ制御を移し、小さくなければ上位のルーチ
ンへ制御を戻す。
【0175】即ち、このステップSB97からステップ
SB9Cで、しきい値変数THRESHOLDの値を越
える最初のピーク、つまり図27の(A)の1番目のピ
ークを検出する。そして、検出されたピークの符号が正
の場合は、符号指標flagをUPとしてステップSB
9Dに制御を移し、検出されたピークの符号が負の場合
は、符号指標flagをDOWNとし、ステップSB9
Dに制御を移す。また、ラインデータを走査してもピー
クが検出されない場合には、上位のルーチンに制御を戻
す。
【0176】こうして、符号指標flagが設定された
ならば、次に、位置標識カウンタiの値をx1 とし、ま
た取り込みバッファ配列scan_lineのi−1番
目の位置の値をy1 、取り込みバッファ配列scan_
lineのi番目の位置の値をy2 、取り込みバッファ
配列scan_lineのi+1番目の位置の値をy3
とすることにより、検出されたピーク位置とその両隣デ
ータを2次曲線でフィッティングを行う(ステップSB
9D)。そして、−0.5(−y1 −2x1 1 +4x
1 2 +y3 −2x1 3 )/y1 −2y2 +y3 なる
計算を行って、上記2次曲線のピーク位置を求め、それ
を変数lastposに格納する(ステップSB9
E)。
【0177】その後、位置標識カウンタiの値が変数n
umの値から2引いた数よりも小さいかどうか判断し
(ステップSB9F)、小さくなければ上位のルーチン
へ制御を戻す。
【0178】小さければ、位置標識カウンタiをインク
リメントする(ステップSB9G)。そして、符号指標
flagがDOWNであり、且つまた取り込みバッファ
配列scan_lineのi番目の位置の値が、しきい
値変数THRESHOLDの値よりも大きく且つ取り込
みバッファ配列scan_lineのi−1番目の位置
の値よりも大きく且つ取り込みバッファ配列scan_
lineのi+1番目の位置の値以上であるかどうかを
判断し(ステップSB9H)、そうであれば、符号指標
flagをUPとする(ステップSB9I)。
【0179】そうでなければ、次に、符号指標flag
がUPであり、且つまた取り込みバッファ配列scan
_lineのi番目の位置の値が、符号を負としたしき
い値変数THRESHOLDの値よりも小さく且つ取り
込みバッファ配列scan_lineのi−1番目の位
置の値よりも小さく且つ取り込みバッファ配列scan
_lineのi+1番目の位置の値以下であるかどうか
を判断し(ステップSB9J)、そうでなければ上記ス
テップSB9Fに制御を移し、そうであれば符号指標f
lagをDOWNとする(ステップSB9K)。
【0180】こうして、符号指標flagが再設定され
たならば、次に、位置標識カウンタiの値をx1 とし、
また取り込みバッファ配列scan_lineのi−1
番目の位置の値をy1 、取り込みバッファ配列scan
_lineのi番目の位置の値をy2 、取り込みバッフ
ァ配列scan_lineのi+1番目の位置の値をy
3 とすることにより、検出されたピーク位置とその両隣
データを2次曲線でフィッティングを行う(ステップS
B9L)。そして、−0.5(−y1 −2x11 +4
1 2 +y3 −2x1 3 )/y1 −2y2 +y3
る計算を行って、上記2次曲線のピーク位置を求め、そ
れを変数nowposに格納する(ステップSB9
M)。
【0181】これにより、図27の(B)に示すよう
に、一つ前のピーク位置lastposと今回求めたピ
ーク位置nowposが得られる。そして、こうして得
られた両ピーク位置の差を取ることによりピーク間距離
を求め、それを幅情報格納配列変数widthの変数j
で示される位置に格納する(ステップSB9N)。
【0182】その後、ピーク位置変数lastposを
ピーク位置変数nowposの値に更新し(ステップS
B9O)、また変数jをインクリメントしてから(ステ
ップSB9P)、上記ステップSB9Fに制御を移す。
【0183】このように、ステップSB9Fからステッ
プSB9Pで、順次ピークを検出し、ピーク間距離を幅
情報格納配列変数widthに格納していく。ここで、
上記ステップSB97からステップSB9Cに於ける最
初のピーク検出と異なる点は、例えば現在の符号指標f
lagがDOWNの場合、次に見つけなくては行けない
ピークは正符号のピークとしている点である。
【0184】以上より明らかなように、バーコードラベ
ル2がいかなる回転角を与えられていても読取可能とな
る。さらに、以下のような特徴を有している。
【0185】(1)ラベル位置をスタートコード22及
び/又はストップコード23という自然界では存在しに
くいパターンを用いて求めているため、文字等バーコー
ド情報以外の情報が検出エリア内に存在しても、安定的
にバーコードラベル2のみを抽出し、解読可能である。
【0186】(2)ラベル位置を推定する際に、スター
トコード22もしくはストップコード23のどちらか一
方を基準に用い、取り出しラインの始点,終点を画面枠
上に取ることによって、たとえラベルの一部が画面外に
はみ出していても、ラベル情報を抽出することが可能で
ある。
【0187】(3)前処理ルーチン,スタート/ストッ
プコード検出ルーチン,スキャン&検出ルーチンの説明
で述べたように、スタート/ストップコード検出時の増
分を種々の場合で変化させることによって、特定の回転
角でラベルが検出不能となることを防止している。
【0188】(4)画面を2画面分、連続的にフレーム
メモリ6に格納し、画面間のラベル位置情報を比較する
ことによって、手ぶれの存在を検出し、無駄のないスキ
ャンを実現している。
【0189】(5)ラベルのバーコード情報を抽出する
際に重要なパラメータであるしきい値を、ラベルのバー
とスペースの間隔が最も狭いスタートコード22もしく
はストップコード23の第3エッジの値を元に算出する
ようにしているため、ラベルサイズやラベルの照明条件
によらず安定的なデコードが可能となっている。
【0190】(6)スキップスキャンルーチンを行う前
に、最適スキャンルーチンによって、ラベルのサイズ
(行数,列数)とラベルの画面上でのサイズから、各行
に対してデータ取り出し数を各1本としたスキャンを行
うようにしていることにより、この最適スキャンで復号
可能に至る場合には、ラベル読取時間を短縮することが
可能となる。
【0191】(7)ラベルは一般に、人間が触ったり、
輸送途中では傷害の元になるような条件に晒される。そ
のような何らかのダメージを受けたラベルでは、ラベル
の傾きは正しく求まらない可能性がある。このような推
定したラベルの傾きを基準にラベル情報を読出しても復
号可能に至らない場合は、傾き補正を行った上でラベル
情報を読出すようにしているため、ラベルの傾きが厳密
に決まらなくてもラベル情報が推定できる。
【0192】(8)ラベルを撮像した場合、最小線幅で
あるモジュールサイズ(ちょうどスタートコード22の
ビックバー22Aの次のスペース間隔)が何画素になる
かが問題となり、これはラベルが傾いても減少する(4
5度で1/1.414…)。そこで、2次曲線でフィッ
ティングし、そのピーク間距離によりバー及びスペース
の幅を求めるようにしている。これにより、ラベルの描
画最小幅が小さくなっても正しいラベル情報が確定でき
る。また、最小幅が大きい場合は2次曲線を用いなくと
も正確に求まるが、市場の要求としては、ラベルの小型
化が益々増大していく傾向にあり、また、ラベルの印刷
を考えると、通常の印刷機では、スペースの方がバーよ
り細くなるということを考慮すると、この手法の重要性
は非常に大きなものとなる。
【0193】なお、本発明は上記実施例に限定されるも
のではなく、種々の変形実施が可能なことは勿論であ
る。
【0194】例えば、2次元撮像装置5は、2次元CC
Dや撮像管に代表されるエリアセンサを用いたものに限
定されるものでなく、1次元撮像素子と1次元スキャン
機構の組み合せや、光電検出器と2次元スキャン機構の
組み合せでも良い。
【0195】また、上記説明に於いては、バーコードラ
ベルにPDF−417フォーマットのラベルを用いた
が、これに限定されるものでなく、Code49等、他
のスタックドバーコードや、JAN等の1次元バーコー
ドでも良い。
【0196】
【発明の効果】以上詳述したように、本発明によれば、
バーコードラベル、特にスタックドバーコードラベルが
読取装置のラベル検出面上でどのような向きにセットさ
れていても、またバーコードラベルの撮像画像に欠損が
あっても、そのバーコードシンボル情報を読取可能なシ
ンボル情報読取装置を提供することができる。
【0197】つまり、バーコードラベルの投影像の4角
位置のうち少なくとも2点を基準にラベル位置を推定
し、実効的にラベルに平行にデータを抽出することがで
きるため、ラベルの角度が読み取り性能に影響を及ぼさ
ないという優れた効果を奏することができる。
【図面の簡単な説明】
【図1】本発明の一実施例に係るシンボル情報読取装置
の構成を示す図である。
【図2】(A)はスタックドバーコードの例としてPD
F−417コード体系のバーコードラベルを示す図であ
り、(B)は仮想的にフレームメモリの画素配列に
(A)のバーコードラベル画像を投影した模式図であ
る。
【図3】本発明の一実施例に係るシンボル情報読取装置
の概略的な動作を説明するためのフローチャートであ
る。
【図4】図3中の前処理ルーチンを説明するためのフロ
ーチャートである。
【図5】図3中の画像取り込みルーチンを説明するため
のフローチャートである。
【図6】図3中のラベル検出ルーチンを説明するための
フローチャートである。
【図7】(A)はラベル検出方法を説明するのに供され
る図2の(A)バーコードラベルの画像を取り込んだ時
のフレームメモリの内容を示す図であり、(B)はラベ
ルの傾きを求める方法を説明するのに供される図2の
(A)バーコードラベルの画像を取り込んだ時のフレー
ムメモリの内容を示す図である。
【図8】図6中のスタート/ストップコード検出ルーチ
ンを説明するためのフローチャートである。
【図9】図8中のスキャン&検出ルーチンを説明するた
めの一連のフローチャートの前半部分を示す図である。
【図10】図8中のスキャン&検出ルーチンを説明する
ための一連のフローチャートの後半部分を示す図であ
る。
【図11】図6中のスタートエッジ位置検出ルーチンを
説明するためのフローチャートである。
【図12】図6中のストップエッジ位置検出ルーチンを
説明するためのフローチャートである。
【図13】図6中のラベルの傾きを求めるルーチンを説
明するためのフローチャートである。
【図14】図3中の手ぶれ検出ルーチンを説明するため
のフローチャートである。
【図15】図14中のスタートコードベリファイルーチ
ンを説明するためのフローチャートである。
【図16】図14中のストップコードベリファイルーチ
ンを説明するためのフローチャートである。
【図17】図3中のしきい値決定ルーチンを説明するた
めのフローチャートである。
【図18】(A)はしきい値検出ラインを説明するのに
供される図2の(A)バーコードラベルの画像を取り込
んだ時のフレームメモリの内容を示す図であり、(B)
はスタートコードの微分波形を示す図である。
【図19】図3中のロウ及びカラムナンバ検出ルーチン
を説明するためのフローチャートである。
【図20】(A)はロウナンバ及びカラムナンバの決定
方法を説明するのに供される図2の(A)バーコードラ
ベルの画像を取り込んだ時のフレームメモリの内容を示
す図であり、(B)は始点列及び終点列の算出方法を説
明するのに供される図2の(A)バーコードラベルの画
像を取り込んだ時のフレームメモリの内容を示す図であ
る。
【図21】図3中のスキャン方程式決定ルーチンを説明
するための一連のフローチャートの前半部分を示す図で
ある。
【図22】(A)は図3中のスキャン方程式決定ルーチ
ンを説明するための一連のフローチャートの後半部分を
示す図であり、(B)は最適スキャンの方法を説明する
のに供される図2の(A)バーコードラベルの画像を取
り込んだ時のフレームメモリの内容を示す図である。
【図23】図3中の最適スキャンルーチンを説明するた
めのフローチャートである。
【図24】図3中のスキップスキャンルーチンを説明す
るためのフローチャートである。
【図25】図23及び図24中の幅情報に変換ルーチン
を説明するための一連のフローチャートの前半部分を示
す図である。
【図26】図23及び図24中の幅情報に変換ルーチン
を説明するための一連のフローチャートの後半部分を示
す図である。
【図27】(A)は幅情報変換のためのピークの選択法
則を説明するための図であり、(B)はピーク間距離の
算出のための2つのピーク位置を示す図である。
【符号の説明】
3…レンズ、4…光電変換面、5…2次元撮像装置、6
…フレームメモリ、7…データ処理装置、7A…位置検
出部、7B…傾き検出部、7C…読取部、7D…復号
部、8…バーコードラベル投影像、21…ラベル部、2
1A…ロウインディケータ、21C…ラベルマトリック
ス、22…スタートコード、23…ストップコード。

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】 バーとスペースとからなる2次元バーコ
    ードを2次元像として撮像する撮像手段と、 前記撮像手段により得られる2次元バーコードの2次元
    を記憶する記憶手段と、 前記記憶手段に記憶された 2次元バーコードの2次元像
    から、当該2次元バーコードの種類によって定められる
    所定パターンの4角位置のうち少なくとも2ヶ所の位置
    を検出する位置検出手段と、前記 位置検出手段により検出されたこの少なくとも2ヶ
    所の位置情報からバーコードの傾きを検出する傾き検出
    手段と、 前記位置検出手段により検出された上記少なくとも2ヶ
    所の位置情報を基準に、前記記憶手段上における前記
    次元バーコードの位置を推定する位置推定手段と、前記記憶手段に記憶された2次元バーコードの2次元像
    から、手ぶれの有無を検出する手ぶれ検出手段と、 前記手ぶれ検出手段により手ぶれが無いと検出されたと
    き、前記位置推定手段の情報を元に、前記記憶手段に記
    憶された2次元バーコードの2次元像から、当該2次元
    バーコードの読み取りのための閾値を定義する閾値定義
    手段と、 前記傾き検出手段の情報と前記位置推定手段の情報とを
    元に、前記記憶手段に記憶された2次元バーコードの2
    次元像から、前記2次元バーコードの所定位置に設けら
    れた当該バーコードのサイズを表す情報を読み取って、
    当該2次元バーコードのサイズを決定するサイズ決定手
    段と、 前記傾き検出手段の情報と前記位置推定手段の情報とを
    元に、前記記憶手段に記憶された2次元バーコードの2
    次元像から、全面走査のための変数として最適条件を設
    定する最適条件設定手段と、 前記傾き検出手段前記位置推定手段、前記閾値定義手
    段、前記サイズ決定手段、及び前記最適条件設定手段の
    各情報を元に、前記記憶手段に記憶された2次元バーコ
    ードの2次元像が、前記撮像手段の撮像視野からその一
    部がはみ出していたとしても、前記記憶手段に記憶され
    た2次元バーコードの2次元像から、 2次元バーコ
    ードに対して平行に情報を順次読み取ることができる
    取手段と、前記 読取手段からの2次元バーコードの情報から、2次
    元バーコードの元の情報に復号する復号手段と、 を具備してなることを特徴とするシンボル情報読取装
    置。
JP13378392A 1992-05-26 1992-05-26 シンボル情報読取装置 Expired - Fee Related JP3233981B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP13378392A JP3233981B2 (ja) 1992-05-26 1992-05-26 シンボル情報読取装置
US08/066,968 US5489769A (en) 1992-05-26 1993-05-25 Symbol information reading apparatus
KR1019930009216A KR100309242B1 (ko) 1992-05-26 1993-05-26 심벌정보판독장치
CN93105848A CN1037380C (zh) 1992-05-26 1993-05-26 符号信息读取装置
TW082105296A TW229297B (en) 1992-05-26 1993-07-03 Reading device for symbolic information

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP13378392A JP3233981B2 (ja) 1992-05-26 1992-05-26 シンボル情報読取装置

Publications (2)

Publication Number Publication Date
JPH05324887A JPH05324887A (ja) 1993-12-10
JP3233981B2 true JP3233981B2 (ja) 2001-12-04

Family

ID=15112897

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13378392A Expired - Fee Related JP3233981B2 (ja) 1992-05-26 1992-05-26 シンボル情報読取装置

Country Status (5)

Country Link
US (1) US5489769A (ja)
JP (1) JP3233981B2 (ja)
KR (1) KR100309242B1 (ja)
CN (1) CN1037380C (ja)
TW (1) TW229297B (ja)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5979768A (en) * 1988-01-14 1999-11-09 Intermec I.P. Corp. Enhanced bar code resolution through relative movement of sensor and object
US6688523B1 (en) 1988-08-31 2004-02-10 Intermec Ip Corp. System for reading optical indicia
US6535145B1 (en) * 1991-03-12 2003-03-18 Reynold B. Johnson Ideographic keyboard and method
US7387253B1 (en) * 1996-09-03 2008-06-17 Hand Held Products, Inc. Optical reader system comprising local host processor and optical reader
US5736724A (en) * 1994-06-10 1998-04-07 Metanetics Corporation Oblique access to image data for reading dataforms
US5631457A (en) * 1994-08-17 1997-05-20 Olympus Optical Co., Ltd. Two-dimensional symbol data read apparatus
US6032861A (en) * 1995-01-03 2000-03-07 Lemelson; Jerome H. Method and apparatus for encoding and decoding bar codes with primary and secondary information and method of using such bar codes
US6543691B1 (en) * 1995-01-03 2003-04-08 Jerome H. Lemelson Method and apparatus for encoding and decoding bar codes with primary and secondary information and method of using such bar codes
US5777308A (en) * 1995-08-14 1998-07-07 Intermec Corporation Resolution gain on width modulated bar codes by use of angled sampling in two dimensions
US5742037A (en) * 1996-03-07 1998-04-21 Cognex Corp. Method and apparatus for high speed identification of objects having an identifying feature
US5764798A (en) * 1996-03-18 1998-06-09 Intermec Corporation Prioritized searching methods for finding a coded symbol in a digitized image
US5698833A (en) * 1996-04-15 1997-12-16 United Parcel Service Of America, Inc. Omnidirectional barcode locator
US6672511B1 (en) * 1996-06-03 2004-01-06 Symbol Technologies, Inc. Omnidirectional reading of two-dimensional symbols
US6002844A (en) * 1996-08-09 1999-12-14 Canon Aptex Inc. Barcode printing system and its control method
US7304670B1 (en) 1997-03-28 2007-12-04 Hand Held Products, Inc. Method and apparatus for compensating for fixed pattern noise in an imaging system
DE69838714T2 (de) * 1997-05-05 2008-10-30 Symbol Technologies, Inc. Optische abtastvorrichtung und bildleser zum bildlesen und dekodieren optischer informationen mit ein- und zweidimensionalen symbolen bei veränderlicher tiefenschärfe
JP3548389B2 (ja) * 1997-07-16 2004-07-28 ペンタックス株式会社 画像読取装置
US6264105B1 (en) * 1998-11-05 2001-07-24 Welch Allyn Data Collection, Inc. Bar code reader configured to read fine print barcode symbols
JP4288756B2 (ja) * 1999-04-08 2009-07-01 株式会社デンソー 情報コード概略存在領域推定方法、情報コード読取方法及び装置、記録媒体
US11682027B2 (en) * 1999-07-19 2023-06-20 Expedited Dual Commerce Llc System and method for expediting fulfillments of online ordered deliverables by expedited-service area pickups in specified time-windows and by delivery to specific locations
US7540424B2 (en) * 2000-11-24 2009-06-02 Metrologic Instruments, Inc. Compact bar code symbol reading system employing a complex of coplanar illumination and imaging stations for omni-directional imaging of objects within a 3D imaging volume
US7128266B2 (en) 2003-11-13 2006-10-31 Metrologic Instruments. Inc. Hand-supportable digital imaging-based bar code symbol reader supporting narrow-area and wide-area modes of illumination and image capture
US8042740B2 (en) * 2000-11-24 2011-10-25 Metrologic Instruments, Inc. Method of reading bar code symbols on objects at a point-of-sale station by passing said objects through a complex of stationary coplanar illumination and imaging planes projected into a 3D imaging volume
US7464877B2 (en) * 2003-11-13 2008-12-16 Metrologic Instruments, Inc. Digital imaging-based bar code symbol reading system employing image cropping pattern generator and automatic cropped image processor
US7594609B2 (en) * 2003-11-13 2009-09-29 Metrologic Instruments, Inc. Automatic digital video image capture and processing system supporting image-processing based code symbol reading during a pass-through mode of system operation at a retail point of sale (POS) station
US8682077B1 (en) 2000-11-28 2014-03-25 Hand Held Products, Inc. Method for omnidirectional processing of 2D images including recognizable characters
KR100341601B1 (ko) * 2000-12-01 2002-06-22 김지영 2차원 바코드 정보 인식방법
US7203361B1 (en) 2001-03-16 2007-04-10 Hand Held Products, Inc. Adaptive digitizer for optical reader
US7111787B2 (en) 2001-05-15 2006-09-26 Hand Held Products, Inc. Multimode image capturing and decoding optical reader
US6942151B2 (en) * 2001-05-15 2005-09-13 Welch Allyn Data Collection, Inc. Optical reader having decoding and image capturing functionality
US7331523B2 (en) 2001-07-13 2008-02-19 Hand Held Products, Inc. Adaptive optical image reader
US6834807B2 (en) * 2001-07-13 2004-12-28 Hand Held Products, Inc. Optical reader having a color imager
US6672510B2 (en) * 2001-12-20 2004-01-06 Scannabar (3193519 Canada Inc.) Bar code arrangement for identifying positions along an axis
US6708884B1 (en) * 2002-06-25 2004-03-23 The United States Of America As Represented By The Secretary Of The Army Method and apparatus for rapid and precision detection of omnidirectional postnet barcode location
US6802450B2 (en) * 2002-08-07 2004-10-12 Shenzhen Syscan Technology Co. Ltd Guiding a scanning device to decode 2D symbols
US6904946B2 (en) * 2002-11-05 2005-06-14 Charles James Apparatus and method for bagging ice
US20040134988A1 (en) * 2003-01-09 2004-07-15 Hand Held Products, Inc. Analog-to-digital converter with automatic range and sensitivity adjustment
US7637430B2 (en) * 2003-05-12 2009-12-29 Hand Held Products, Inc. Picture taking optical reader
US7426812B2 (en) * 2006-03-09 2008-09-23 Reddy Ice Corporation Ice bagging apparatus
US8468784B2 (en) 2010-02-02 2013-06-25 Reddy Ice Corporation Ice bagging system including auxiliary source of bags
US8381534B2 (en) 2007-05-31 2013-02-26 Reddy Ice Corporation Ice distribution system and method
US7849660B2 (en) * 2003-11-06 2010-12-14 Reddy Ice Corporation Ice bagging system and method
US7841533B2 (en) 2003-11-13 2010-11-30 Metrologic Instruments, Inc. Method of capturing and processing digital images of an object within the field of view (FOV) of a hand-supportable digitial image capture and processing system
KR100560330B1 (ko) * 2004-04-21 2006-03-30 에이디정보통신 주식회사 색상 보정이 가능한 대용량 2차원 칼라 바코드인코딩/디코딩 시스템 및 그 방법
US7083098B2 (en) * 2004-08-24 2006-08-01 Symbol Technologies, Inc. Motion detection in imaging reader
KR100667778B1 (ko) * 2004-11-20 2007-01-11 삼성전자주식회사 바코드 판독 방법 및 장치
US7380718B2 (en) 2004-12-21 2008-06-03 Nidec Sankyo Corporation Method for reading out symbol information and device for reading out symbol information
JP4254724B2 (ja) * 2005-02-16 2009-04-15 株式会社デンソーウェーブ バーコード読取り方法及びコンピュータプログラム
US7427018B2 (en) * 2005-05-06 2008-09-23 Berkun Kenneth A Systems and methods for generating, reading and transferring identifiers
US7775428B2 (en) * 2005-05-06 2010-08-17 Berkun Kenneth A Systems and methods for generating, reading and transferring identifiers
KR100829108B1 (ko) * 2006-06-27 2008-05-16 (주)코아정보시스템 패턴 기울기 계산 기능을 갖는 2차원 바코드 판독 장치 및방법
US8763352B2 (en) 2006-08-11 2014-07-01 Reddy Ice Corporation Ice bagging system and method
US7852519B2 (en) 2007-02-05 2010-12-14 Hand Held Products, Inc. Dual-tasking decoder for improved symbol reading
US8662396B2 (en) * 2007-03-23 2014-03-04 Labels That Talk, Ltd Method for reproducing and using a bar code symbol
WO2008118419A1 (en) * 2007-03-23 2008-10-02 Ltt, Ltd Method and apparatus for reading a printed indicia with a limited field of view sensor
WO2008118425A1 (en) 2007-03-23 2008-10-02 Ltt, Ltd Method and apparatus for using a limited capacity portable data carrier
JP5233276B2 (ja) * 2007-12-21 2013-07-10 カシオ計算機株式会社 バーコード読取装置及びプログラム
US8366004B2 (en) * 2008-02-22 2013-02-05 Qualcomm Incorporated Barcode detection based on morphological operations
US8596541B2 (en) 2008-02-22 2013-12-03 Qualcomm Incorporated Image capture device with integrated barcode scanning
US8025234B2 (en) * 2008-10-16 2011-09-27 Symbol Technologies, Inc. Arrangement for and method of enhancing performance of an imaging reader
US8628015B2 (en) 2008-10-31 2014-01-14 Hand Held Products, Inc. Indicia reading terminal including frame quality evaluation processing
US8584951B2 (en) 2008-12-11 2013-11-19 Ncr Corporation Apparatus, method and system for extracting pixel data from an image capture device
US8186596B2 (en) * 2008-12-16 2012-05-29 Ncr Corporation Apparatus, method and system for selective reading of pixels from an image capture device
US8587595B2 (en) 2009-10-01 2013-11-19 Hand Held Products, Inc. Low power multi-core decoder system and method
CN101833643B (zh) * 2010-06-01 2012-05-23 福建新大陆电脑股份有限公司 复合码条码解码芯片
EP2393036B1 (en) * 2010-06-01 2016-03-02 Fujian Newland Computer Co., Ltd. Barcode decoding chip
US8333326B2 (en) * 2010-10-07 2012-12-18 Nidec Sankyo Corporation Stacked barcode reader and stacked barcode reading method
US8657200B2 (en) 2011-06-20 2014-02-25 Metrologic Instruments, Inc. Indicia reading terminal with color frame processing
KR101237339B1 (ko) 2011-09-08 2013-02-28 (주)이컴앤드시스템 2차원 바코드 영상의 추출 및 디코딩 장치, 그 방법
US10049429B2 (en) * 2013-07-09 2018-08-14 Jung Ha RYU Device and method for designing using symbolized image, and device and method for analyzing design target to which symbolized image is applied
TWI595426B (zh) * 2016-03-24 2017-08-11 佳世達科技股份有限公司 條碼解碼方法
US11443129B2 (en) * 2019-10-29 2022-09-13 Microsoft Technology Licensing, Llc Glass media unique identification and tracking system

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5063526A (en) * 1987-06-03 1991-11-05 Advanced Micro Devices, Inc. Bit map rotation processor
GB8815490D0 (en) * 1988-06-29 1988-08-03 Key Strip Ltd Swipe reader
US5134272A (en) * 1988-07-13 1992-07-28 Matsushita Electric Industrial Co., Ltd. Image signal processing apparatus for bar code image signal
US4873426A (en) * 1988-08-03 1989-10-10 Image Business Systems Corporation Technique for reading bar codes
JP2829006B2 (ja) * 1988-11-10 1998-11-25 株式会社リコー 画像処理装置
US4948955A (en) * 1988-12-22 1990-08-14 The Boeing Company Barcode location determination
CA1329263C (en) * 1989-03-01 1994-05-03 Mark Krichever Bar code scanner
US5319181A (en) * 1992-03-16 1994-06-07 Symbol Technologies, Inc. Method and apparatus for decoding two-dimensional bar code using CCD/CMD camera
US5245676A (en) * 1989-12-21 1993-09-14 Xerox Corporation Determination of image skew angle from data including data in compressed form
US5155343A (en) * 1990-03-28 1992-10-13 Chandler Donald G Omnidirectional bar code reader with method and apparatus for detecting and scanning a bar code symbol
JPH0415774A (ja) * 1990-05-02 1992-01-21 Eastman Kodak Japan Kk バーコードリーダ
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

Also Published As

Publication number Publication date
KR100309242B1 (ko) 2001-12-28
US5489769A (en) 1996-02-06
CN1037380C (zh) 1998-02-11
TW229297B (en) 1994-09-01
CN1079320A (zh) 1993-12-08
KR930023864A (ko) 1993-12-21
JPH05324887A (ja) 1993-12-10

Similar Documents

Publication Publication Date Title
JP3233981B2 (ja) シンボル情報読取装置
US10331929B2 (en) Imaging terminal, imaging sensor to determine document orientation based on bar code orientation and methods for operating the same
KR100271245B1 (ko) 바코드 판독장치
JP3668275B2 (ja) デジタル情報記録方法、解読方法および解読装置
US5422470A (en) Symbol information reading apparatus
US5635697A (en) Method and apparatus for decoding two-dimensional bar code
US5691773A (en) Anti-hand-jittering dataform readers and methods
US5319181A (en) Method and apparatus for decoding two-dimensional bar code using CCD/CMD camera
JP3154809B2 (ja) バーコードリーダ装置
US7380718B2 (en) Method for reading out symbol information and device for reading out symbol information
US5550363A (en) Optical information reading apparatus
JP4752413B2 (ja) 2次元コード分割表示方法、2次元コード読取方法および2次元コード読取装置
JP2003346105A (ja) 2dバーコードカードとその解読法
JP5187382B2 (ja) 2次元コード分割表示方法、2次元コード読取方法および2次元コード読取装置
JP3191997B2 (ja) シンボル情報読取装置
JP4383961B2 (ja) デジタル情報記録担体
JP3853331B2 (ja) デジタル情報記録方法
JP3580901B2 (ja) シンボル情報読取装置
JPH11316795A (ja) 二次元コードデコード装置、及び記憶媒体
JP3504366B2 (ja) シンボル情報読み取り装置
JP3730716B2 (ja) バーコード読取装置
JP3251089B2 (ja) 2次元シンボル情報読取装置
JP4403063B2 (ja) シンボル情報読取方法及びシンボル情報読取装置
JPH1049622A (ja) バーコード読み取り装置
JP2514660B2 (ja) 光学文字読取装置

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20010417

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20010904

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

Free format text: PAYMENT UNTIL: 20080921

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20080921

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20090921

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees