(57)【特許請求の範囲】
【請求項１】
バーとスペースとから成り、任意のパターンとして表すバーコードを２次元像として撮像する撮像手段と、
この撮像手段により得られた２次元像を一時的に記憶する記憶手段と、
この記憶手段に記憶された２次元像内に於ける上記バーコードの有無及び位置を検出する位置検出部と、上記２次元像内に於ける上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きを検出するもので、上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きを検出する傾き検出部、この傾き検出部によって検出された上端及び下端の傾きが適正か否かを判定する判定部、この判定部の出力に応じて、上記上端及び下端の少なくとも一方の傾きを再設定する再設定部とを備えた上下端傾き検出部とを有し、上記バーコードの撮像状態を検出するラベル検出手段と、
このラベル検出手段により出力されるバーコードの撮像状態に基いて、上記上端の傾きと上記下端の傾きとの傾きの差を上記バーコードを走査しようとする走査線の数で均等に分割するように、該走査線の傾きを演算する傾き演算部と、この傾き演算部の出力に基いた傾きでもって上記バーコードを走査する走査部とを有し、上記２次元像から上記バーコード情報を読出す読出手段と、
この読出手段からのバーコードの情報から上記任意の情報を復号する復号手段と
を具備することを特徴とするバーコード読取装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は２次元バーコード記号を復号するバーコード読取装置に関し、より詳細には、従来の２次元バーコード読取装置よりも更に読取り性能が改善されたバーコードスキャナに関するものである。
【０００２】
【従来の技術】
最近の目ざましいＰＯＳ（ポイント・オブ・セールス＝販売時点情報管理システム）の普及によって、バーコードは、広く一般に知られるようになってきている。ここで、バーコードとは、大きさの異なるバーとスペースの平行な組合せパターンにより１つのバーコードキャラクタを形成し、必要であればチェックデジットを含む必要なキャラクタ群を平行に配列し、例えば前後にスタート／ストップキャラクタのような特徴的な所定パターンを配して構成されたシンボルのことである。
【０００３】
広く一般消費財に使用されているバーコードとしては、ＪＡＮ(Japan Article Number)コードが日本で標準化されている。また、バーコードの他の応用としては、物流シンボルがある。このシンボルは、上記ＪＡＮコードの前に、１桁または２桁の物流識別コードが追加されたものである。
【０００４】
ところで、上記何れのバーコードシンボルも１次元バーコードと称されるものであり、これらのコード体系が許容可能な情報量は、せいぜい数十バイトであった。ところが、近年、バーコードの情報量に対する要求が声高に叫ばれるようになってきた。それに呼応するように、各種の２次元バーコードと称されるシンボル体系が発表されている。
【０００５】
これら２次元バーコードと称されるシンボル体系によれば、何れも１次元バーコードに比べて格段に多い情報をコード化できる特徴を有している。この体系は、１次元のバーコードを積み重ねることによって、情報量を増加させる方式である。このような方式のシンボルは、スタックドバーコードと称されている。
【０００６】
こうしたスタックドバーコードの１つに、周知のＰＤＦ−４１７と称されるコード体系がある。
従来、このようなスタックドバーコードを読取るシンボル情報読取装置としては、例えば特開平２−２６８３８２号公報に開示されているようなレーザスキャンタイプの装置が知られている。この装置に於いては、レーザ光を２次元にスキャンすることで、バーコードシンボル情報を読取り、復号している。
【０００７】
また、特開平２−２６８３８３号公報や特開平６−１２５１５号公報には、２次元撮像装置でバーコードを撮像し、該バーコードの画像をメモリに取込んで、このデータを元にバーコードシンボル情報を復号する装置が開示されている。
【０００８】
【発明が解決しようとする課題】
しかしながら、撮像装置とバーコードの間には相対的な角度（ピッチ角）があるので、バーコードの形状が歪んで撮像されている場合や、更に該バーコードのラベルの一部が欠損しているような場合には、上述した２次元撮像装置を用いた読取装置ではバーコードを正確に復号することができないという課題が生じる。
【０００９】
つまり、上述した公報による２次元撮像装置で読取られるバーコードは、該バーコードの面と２次元読取装置との角度が９０°になっていなければならず、且つ該バーコードのラベルが欠損していない状態でなければ、正確に復号することができないないものであった。
【００１０】
したがってこの発明は、上記課題に鑑みてなされたものであり、読取られるべくバーコードの形状が歪んでいるものや、ラベルが欠損しているようなバーコードでも正確に復号することができるバーコード読取装置を提供することを目的とする。
【００１１】
【課題を解決するための手段】
すなわちこの発明は、バーとスペースとから成り、任意のパターンとして表すバーコードを２次元像として撮像する撮像手段と、この撮像手段により得られた２次元像を一時的に記憶する記憶手段と、この記憶手段に記憶された２次元像内に於ける上記バーコードの有無及び位置を検出する位置検出部と、上記２次元像内に於ける上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きを検出するもので、上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きを検出する傾き検出部、この傾き検出部によって検出された上端及び下端の傾きが適正か否かを判定する判定部、この判定部の出力に応じて、上記上端及び下端の少なくとも一方の傾きを再設定する再設定部とを備えた上下端傾き検出部とを有し、上記バーコードの撮像状態を検出するラベル検出手段と、このラベル検出手段により出力されるバーコードの撮像状態に基いて、上記上端の傾きと上記下端の傾きとの傾きの差を上記バーコードを走査しようとする走査線の数で均等に分割するように、該走査線の傾きを演算する傾き演算部と、この傾き演算部の出力に基いた傾きでもって上記バーコードを走査する走査部とを有し、上記２次元像から上記バーコード情報を読出す読出手段と、この読出手段からのバーコードの情報から上記任意の情報を復号する復号手段とを具備することを特徴とする。
【００１２】
この発明のバーコード読取装置にあっては、バーとスペースとから成り任意のパターンとして表されるバーコードが、撮像手段により２次元像として撮像される。この撮像手段により得られた２次元像は記憶手段に一時的に記憶され、この記憶手段に記憶された２次元像内に於ける上記バーコードの撮像状態がラベル検出手段で検出される。すなわち、ラベル検出手段内の位置検出部にて、上記バーコードの有無及び位置が検出される。また、上記２次元像内に於ける上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きが傾き検出部で検出され、この傾き検出部によって検出された上端及び下端の傾きが適正か否かが判定部で判定される。そして、この判定部の出力に応じて、上記上端及び下端の少なくとも一方の傾きが再設定部にて再設定される。このラベル検出手段により出力されるバーコードの撮像状態に基いて、上記上端の傾きと上記下端の傾きとの傾きの差が上記バーコードを走査しようとする走査線の数で均等に分割されるように、傾き演算部で該走査線の傾きが演算される。そして、上記傾き演算部の出力に基いた傾きでもって、上記バーコードが走査部で走査される。上記バーコード情報は読出手段で読出され、この読出手段からのバーコードの情報から、復号手段で上記任意の情報が復号される。
【００１３】
この発明のバーコード読取装置では、バーコードの撮像形状に則した仮想スキャンラインをとることにより、バーコードの読取りを解決している。ここで、仮想スキャンラインとは、２次元撮像装置に於いて線状に画素情報をピックアップする動作のことである。
【００１４】
【発明の実施の形態】
以下、図面を参照してこの発明の実施の形態を説明する。
図３、この発明のバーコード読取装置に係る一実施の形態であるシンボル読取装置の構成を示した図である。このシンボル読取装置は、物品等に貼付されたバーコードシンボルのシンボル情報を読取るためのものである。
【００１５】
図３に於いて、このシンボル読取装置は、例えば周知のＰＤＦ−４１７フォーマットのスタックドラベル（以下、バーコードラベルと記す）１が貼付された荷物２に対向した結像レンズ３と、この結像レンズ３の後方に配置されて光電変換面４′を有する２次元撮像装置４と、フレームメモリ５及びデータ処理装置６とから構成される。
【００１６】
上記データ処理装置６は、詳細は後述するが、例えばＣＰＵとメモリで構成されるもので、バーコード位置情報の推定や、バーコード情報の読出しを行う等の種々の機能部の役割を果たすものである。
【００１７】
図１は、この発明の一実施の形態によるシンボル読取装置１０の詳細を示すブロック構成図である。
図１に於いて、このシンボル読取装置１０は、バーコードラベル１を光学的に結像する撮像光学系１１と、結像されたバーコードラベル１を光電変換面４′（図３）で読取る２次元撮像部１２を有した２次元撮像装置４と、読取られたラベル画像データ（映像信号）を一時的に記憶するフレームメモリ５と、このフレームメモリ５に記憶されたラベル画像データを元のシンボル情報に復号するデータ処理装置６とから構成されている。
【００１８】
このデータ処理装置６は、フレームメモリ５に記憶された画像データの中のバーコードラベルの撮像状態を検出するラベル検出部１５と、上記フレームメモリ５内のバーコードラベルをスキャンしてバーコード情報として読取る読取部２０と、読取ったバーコード情報がデコード（復号）可能か否かを判定するデコード判定部２３と、デコード可能であると判定されたバーコード情報を元の情報に復号する復号部２４と、これらデータ処理装置６内の各部位を制御する制御部２５と、各種定数及び変数を格納するための種々のレジスタを含むメモリ２６とから構成されている。
【００１９】
また、シンボル読取装置１０の外部には、上記復号部２４から出力されたバーコード情報を処理するためのマイクロコンピュータ等で構成されるホスト装置２７が設けられる。
【００２０】
上記ラベル検出部１５は、フレームメモリ５に記憶された画像データの中にバーコードラベルがあるか否かを、及び該バーコードラベルがある場合にはその位置を検出する位置検出部１６と、フレームメモリ５内のバーコードラベルの傾き具合を検出するバーコード傾き検出部１７と、フレームメモリ５内のバーコードラベルのロウ方向上下端の傾きを検出する上下端傾き検出部１８とを有している。
【００２１】
更に、上記読取部２０は、ラベル検出部１５から出力されるバーコードラベルの撮像状態に基いて、バーコードラベルの上端の傾きと下端の傾きとの差をバーコードラベルをスキャンしようとする走査線（スキャンライン）の数で均等に分割するように、該走査線の傾きを演算する傾き演算部２１と、この傾き演算部２１の出力に基いた傾きでもって上記バーコードをスキャンする走査部２２とから構成されている。
【００２２】
また、上記上下端傾き検出部１８は、図２に示されるように、バーコードラベル１のロウ方向の上下端の傾きを検出する傾き検出部２９と、この傾き検出部２９で検出された傾きが適正か否かを判定する傾き判定部３０と、この傾き判定部３０による判定結果に於いて適正でないと判定された場合に再度傾きを設定する傾き再設定部３１とを有して構成される。
【００２３】
次に、このように構成されたシンボル読取装置１０の動作について説明する。荷物２に貼付された印刷されたスタックドバーコードラベル１は、結像レンズ３によって、２次元撮像装置４に搭載されている光電変換面４′に結像される。２次元撮像装置４によって光電変換されたラベル情報は、映像信号としてフレームメモリ５に取込まれる。
【００２４】
図４は、スタックドバーコードの例として、ＰＤＦ−４１７のラベル構造を示したものである。尚、この図４に於いては、４×２のラベルマトリックスを有するバーコードラベルを示している。
【００２５】
このバーコードラベル１は、複数のバーとスペースの組合せで成るバーコードキャラクタ群で構成された復号されるべき情報成分の領域であるラベル部３３と、このラベル部３３の両端部に配されたスタート／ストップキャラクタであるスタートコード３４及びストップコード３５とを有している。そして、１コードは、ストップコード３５を除いて、４つのバーとスペースとから構成されている。また、スタートコード３４及びストップコード３５は、ビッグバーと称される大きなバー３４ａ、３５ａから始まっている。
【００２６】
上記ラベル部３３は、スタートコード３４及びストップコード３５に隣接して形成されたロウインディケータ３３ａと称されるコードと、これらロウインディケータ３３ａ間に挟まれて、実際のデータが記述されている複数のデータカラム３３ｂで構成されるラベルマトリックス３３ｃとにより構成される。
【００２７】
上記ロウインディケータ３３ａには、ラベルのロウ方向、カラム方向のサイズやセキュリティレベル等が記述されている。したがって、このロウインディケータ３３ａの情報を解読すれば、ラベルの情報サイズや修復可能なコード数等が決定できる。
【００２８】
図５は、仮想的にフレームメモリ５の画素配列に上記のようなＰＤＦ−４１７のラベル画像を投影した模式図である。同図に於いて、３７がバーコードラベル投影像を表している。
【００２９】
次に、図６のフローチャートを参照して、上記データ処理装置６に於いてラベル情報を読出す動作について説明する。データ処理装置６では、以下に説明するようなアルゴリズムに基いてラベル検出を行い、ラベル情報を読出して復号を行って、ホスト装置２７に出力する。
【００３０】
先ず、フレームメモリ５、閾値、各種グローバル変数等の種々のパラメータが初期設定される（ステップＳ１）。次に、画像取込みルーチンがコールされて画像がフレームメモリ５に取込まれる（ステップＳ２）。続いて、詳細は後述するようなスタートコードまたはストップコード（以下、スタート・ストップコードと略記する）検出ルーチンがコールされる（ステップＳ３）。これにより、フレームメモリ５内にＰＤＦ４１７のスタート・ストップコードが存在するか、すなわちＰＤＦ４１７バーコードラベルが存在するか否かがチェックされる。
【００３１】
そして、上記ステップＳ３に於けるスタート・ストップコード検出処理の結果が判定され（ステップＳ４）、スタート・ストップコードが存在しない場合には、再度、上記ステップＳ１に戻って初期設定ルーチンがコールされる。
【００３２】
次に、ラベル情報決定ルーチン（詳細は後述する）がコールされて、フレームメモリ５内に於けるバーコードラベル１に関する種々の幾何学的な情報（ラベルの角度、スキャン範囲等）が決定される（ステップＳ５）。続いて、詳細は後述するようなラベルスキャンルーチンがコールされて、バーコードラベル１が全面スキャンされる（ステップＳ６）。
【００３３】
その後、上記ステップＳ６の全面スキャンの結果により読取られた情報で、デコード可能か否かが判定される（ステップＳ７）。ここで、デコード可能の場合は、デコード処理がなされる（ステップＳ８）。一方、上記ステップＳ７にて、デコード不能の場合は、再度上記ステップＳ１に戻って初期設定ルーチンがコールされる。
【００３４】
次に、上記ステップＳ３のスタート・ストップコード検出の処理動作について、図７のフローチャートと、図８及び図９を参照して説明する。
最初に、フレームメモリ５が、図８に示されるようなバーコードラベル投影像３７ａに対し、ロウ方向に一定の幅を有したスキャンライン３８ａにより、上から順番にスキャンされる（ステップＳ１１）。ここで、スキャンとは、フレームメモリ５の中で指定された１行分の画素（輝度値）をピックアップし、然るべき配列変数の中にその輝度値を格納する作業を意味する。以下、スキャンという単語は、全て同じ意味で用いられる。
【００３５】
次に、スキャンされた画素情報の中で、ＰＤＦ４１７のスタート・ストップコードが存在したかどうかの判定が行われる（ステップＳ１２）。この判定には、パターンマッチング等の様々な手法が用いられるが、詳細は省略する。上記ステップＳ１２にて、スタート・ストップコードが２個以上検出されたならば、検出コード、検出位置の情報が特定の変数に格納され（ステップＳ１３）、ＴＲＵＥ（真）がリターンされて次のステップＳ４に進む。
【００３６】
一方、上記ステップＳ１２に於いて、スタート・ストップコードが２個以上検出されなかった場合には、フレームメモリ５が、図９に示されるようなバーコードラベル等映像３７ｂに対し、カラム方向に一定の幅を有したスキャンライン３８ｂにより左から順番にスキャンされる（ステップＳ１４）。次いで、スキャンされた画素情報の中でＰＤＦ４１７のスタート・ストップコードが存在したかどうかの判定が行われる（ステップＳ１５）。
【００３７】
このステップＳ３５でスタート・ストップコードが２個以上検出されたならば、検出コード、検出位置の情報が特定の変数に格納される（ステップＳ１３）。そして、ＴＲＵＥ（真）がリターンされる。
【００３８】
また、上記ステップＳ１５にて、スタート・ストップコードが２個以上検出されなかった場合には、ＦＡＬＳＥ（偽）がリターンされた後、ステップＳ４へ進む。
【００３９】
次に、図１０のフローチャートと、図１１乃至図１４を参照して、上記ステップＳ５でコールされるラベル情報決定の処理動作を説明する。
先ず、上記ステップＳ３のスタート・ストップコード検出ルーチンの検出コードの結果より、スタートコードがフレームメモリ５内に存在したか否かの判定が行われる（ステップＳ２１）。スタートコードが存在した場合には、バーコードラベル投影像３７のスタートコードの上端下端検出処理が行われる（ステップＳ２２）。
【００４０】
次に、上記ステップＳ３のスタート・ストップコード検出ルーチンの検出コードの結果より、ストップコードがフレームメモリ５内に存在したか否かの判定が行われる（ステップＳ２３）。ストップコードが存在した場合には、バーコードラベル投影像３７のストップコードの上端下端検出処理が行われる（ステップＳ２４）。
【００４１】
ここで、上述したスタート・ストップコードの上端下端検出処理について説明する。
図１１は、スタート・ストップコードの検出結果を表した図である。図１１に於いて、上記ステップＳ３の処理により、最初に検出されたスタートコードの位置４０ａ、最後に検出されたスタートコードの位置４０ｂ、最初に検出されたストップコードの位置４０ｃ、最後に検出されたストップコードの位置４０ｄが示されている。各々のポイントから、図１２に示されるように、バーコードラベル投影像３７の上下方向にエッジ探索が行われる。その結果、図１２に示されるように、スタートコード上端４１ａ、スタートコード下端４１ｂ、ストップコード上端４１ｃ、ストップコード下端４１ｄが検出される。
【００４２】
次に、上記ステップＳ３のスタート・ストップコード検出ルーチンの検出コードの結果より、スタート・ストップコードの両方が存在したか否かの判定が行われる（ステップＳ２５）。スタート・ストップコードの両方が存在した場合には、図１２に示されるバーコードラベル投影像３７の上下の角度、すなわちアップスロープ（up slope）、ダウンスロープ（down slope）が、それぞれ求められる（ステップＳ２６）。
【００４３】
これらの２つの角度を求める手法は、詳細は後述するバーコードリーダとバーコードラベルとの間に相対的な角度（ピッチ角）があった場合（図１４にて図示）に有効である。
【００４４】
尚、上記アップスロープは、スタートコード上端４１ａとストップコード上端４１ｃを結ぶ直線から求めることができる。同様に、ダウンスロープは、スタートコード下端４１ｂとストップコード下端４１ｄを結ぶ直線から求めることができる。
【００４５】
上記ステップＳ２５に於いて、スタート・ストップコードの何れか一方しかないと判定された場合は、続いてそれがスタートコードであるか否かの判定が行われる（ステップＳ２７）。このステップＳ２７での判定の結果、それがスタートコードであれば、上記ステップＳ３のスタート・ストップコード検出ルーチンの結果から得られたスタートコードの位置情報を用いて、バーコードラベルの角度が求められる（ステップＳ２８）。
【００４６】
この場合、先ず、図１３に示されるように、最初に検出されたスタートコードの位置４２ａ、最後に検出されたスタートコードの位置４２ｂを結ぶ直線から傾きslope が求められ、バーコードラベルの角度は−１／slope で決定することができる。この場合には、角度は１つしか求められない。
【００４７】
尚、図１３に示されるように、ＰＤＦ４１７にはストップコードとその隣接するロウインディケータがもともと存在しないTruncated （切詰め型）ＰＤＦというバーコードがあるので、上述したステップＳ２５、Ｓ２７及びＳ２８の処理は、その場合に有効である。
【００４８】
一方、上記ステップＳ２７でストップコードしかないと判定された場合には、特に図示されないが、最初に検出されたストップコードの位置と最後に検出されたストップコードの位置から、スタートコードのみの場合と同様に、バーコードラベルの角度を求めることができる（ステップＳ２９）。
【００４９】
次いで、インディケータ情報決定ルーチンがコールされる（ステップＳ３０）。ここで、バーコードラベルのロウインディケータが読取られ、ラベルサイズ（行数、列数等）が決定される。そして、詳細は後述する角度チェックルーチンがコールされた後（ステップＳ３１）、リターンされる。
【００５０】
次に、図１５乃至図１８のフローチャート及び図１９を参照して、上記ステップＳ３１でコールされる角度チェックルーチンの動作を説明する。尚、図１９は、バーコードラベルに欠損がある場合の例を示したものである。
【００５１】
初めに、スタートコードの長さとストップコードの長さが比較されて、スタートコードの方が長いか否かが判定される（ステップＳ４１）。これは、図１９に示されるスタートコードの上端４３ａとスタートコードの下端４３ｂの距離と、ストップコードの上端４３ｃとストップコードの下端４３ｄの距離が比較される処理である。
【００５２】
上記ステップＳ４１の判定が真であれば、スタートコードの上端（ポイント）４３ａから下側に任意量移動した図示ポイントｘが求められる（ステップＳ４２）。一方、上記ステップＳ４１の判定が偽であれば、ストップコードの上端（ポイント）４３ｃから下側に任意量移動したポイントｘ（図示せず）が求められる（ステップＳ４３）。
【００５３】
次いで、上記ポイントｘを通り、上記ステップＳ２６で求められアップスロープの傾きを有する直線３８Ｌ１が計算され、スキャンされる（ステップＳ４４）。そして、スキャンされた情報から各コード値が求められて、左右両方のインディケータ３３ａ（バーコードラベルの何行目であるかという情報が含まれている）から、それぞれ求められる行番号が一致しているか否かの判定が行われる（ステップＳ４５）。行（ロウ方向）がクロスせずにスキャンされていれば、行番号が一致しているはずである。図１９に示されている例では、スキャンライン３８Ｌ１は、左のインディケータを完全にスキャンできていないので、上記判定は偽となる。
【００５４】
上記ステップＳ４５に於ける判定が真であれば、後述するステップＳ５６へ進む。また、上記ステップＳ４５の判定が偽であれば、上記ステップＳ４４でスキャンされた結果、読取ることができた（コード値に変換できた）コード数が上記ステップＳ３０で決定されたバーコードラベルの列数の半分以上であるか否かの判定が行われる（ステップＳ４６）。図１９に示された例では、スキャンライン３８Ｌ１は、４列中２つのコードを完全にスキャンできているので、この判定は真になる。
【００５５】
尚、ここでは判定の基準を列数の半分としたが、任意の割合を適用することにより、条件をより厳しくしたり緩くしたりすることが可能である。
ステップＳ４６の判定が真であれば、続いて、読取ることができたコードのクラスタ（３行毎に異なる値を有している）が全て同じであるか否かの判定が行われる（ステップＳ４７）。図１９に示された例では、完全にスキャンできた２つのコードのクラスタは異なる（異なる行である）ので、この判定は偽になる。
【００５６】
ここで、図２０を参照して、クラスタについて簡単に説明する。
上述したロウインディケータ３３ａ及びデータ３３ｂの１つのコードワードは、図２０（ａ）に示されるように、４つのバーと４つのスペースとから構成されている。そして、これらのバーとスペースが、図示の如くｘ０，ｘ１，…，ｘ７に対応しており、それぞれ所定の幅値を有している。同図の例では、各幅値はｘ０が２、ｘ１が１、ｘ２が３、ｘ３が２、ｘ４が２、ｘ５が５、ｘ６が１、ｘ７が１である。
【００５７】
クラスタは、このように設定されたコードワードと幅値を用いて、下記式のようにして求められる。すなわち、
0003730716.tif 000002
となり、この場合のクラスタは３と求められる。尚、クラスタは０、３、６の３種類だけである。
【００５８】
また、バーコードを構成する上記コードのクラスタは、隣接する行では必ず異なるように設定されている。例えば、図２０（ｂ）に示されるように、行番号０のクラスタが０であれば、その隣の行番号１のクラスタは３、更にその隣の行番号２のクラスタは６であり、行番号ｎのクラスタは（ｎ  ｍｏｄ  ３）＊３で表される。故に、上述したように、クラスタは３行毎に異なる値を有していることがわかる。
【００５９】
したがって、クラスタが全て同じ値になっていなければ、スキャンラインは同一の行上をスキャンしていない、誤ったライン（直線）であるということになる。
【００６０】
図１５に戻って、上記ステップＳ４６またはステップＳ４７の判定結果が偽であれば、スキャン角度の再設定が行われる（ステップＳ４８）。これは、以上の処理結果から、スキャンライン３８Ｌ１は誤った直線であることが認識されたので、上記ステップＳ３で最初に検出されたスタートコードの位置情報と最後に検出されたスタートコードの位置情報から、新たにバーコードラベル１の傾きを計算するものである（図１３に於いて−１／slope の傾きを有する直線に相当する）。
【００６１】
次に、ポイントｘを通り、上記ステップＳ４８で再設定された傾きを有する直線３８Ｌ２が計算されてスキャンされる（ステップＳ４９）。そして、スキャンされた情報から各コード値が求められて、左右両側のロウインディケータからそれぞれ求められる行番号が一致しているか否かの判定が行われる（ステップＳ５０）。図１９に示される例では、スキャンライン３８Ｌ２は右側のロウのインディケータを認識することができないので、この判定は偽となる。
【００６２】
ステップＳ５０の判定が真であれば、現在の角度が新たにアップスロープとされる（ステップＳ５５）。一方、上記ステップＳ５０の判定が偽であれば、上記ステップＳ４９でスキャンされた結果、読めたコード数が上記ステップＳ３０で決定されたバーコードラベルの列数の半分以上であるか否かの判定が行われる（ステップＳ５１）。図１９に示される例では、スキャンライン３８Ｌ２は、４列中３つのコードを完全にスキャンできているので、この判定は真になる。
【００６３】
ステップＳ５１に於ける判定が真であれば、続いて、読めたコードのクラスタが全て同じであるか否かの判定が行われる（ステップＳ５２）。図１９に示された例では、完全にスキャンできた３つのコードのクラスタは全て同じなので（同じ行であるので）、この判定は真になる。
【００６４】
上記ステップＳ５１またはステップＳ５２に於いて、判定結果が偽であれば、次に、スキャン角度が微小変化される（ステップＳ５３）。これは、ステップＳ５０か、若しくはステップＳ５２の判定が真になるまで、スキャンの角度を少しずつ変えていく処理である。図１９に示された例では、スキャンライン３８Ｌ２′または３８Ｌ２″を計算することがこの処理にあたる。これら角度を変えていく方法には、種々のバリエーションが存在する。
【００６５】
そして、微小に変化した角度が所定の閾値を越えていないかどうかの判定が行われる（ステップＳ５４）。このステップＳ５４の判定の結果が真であれば、上記ステップＳ４９に移行して、再びスキャンが行われる。
【００６６】
一方、ステップＳ５４にて角度が上記閾値を越えた場合、或いは上記ステップＳ５５で角度設定がなされた場合には、次にバーコードラベル下端のスキャンラインの正当性をチェックするため、ステップＳ５６〜Ｓ７０に於いて、ポイントｙ、スキャンライン３８Ｌ３が計算される。これらステップＳ５６〜Ｓ７０の処理については、基本的に上述したステップＳ４１〜Ｓ５５と同様であるので、説明は省略する。
【００６７】
上述した図１５乃至図１８のフローチャートに従って処理動作が行われることにより、図２１に示されるように、バーコードラベルが歪んだ状態でフレームメモリに投影されていて、尚且つ、同ラベルに欠損がある場合でも、正しいスキャンライン４４Ｌ２′を求めることができる。
【００６８】
次に、上記ステップＳ６でコールされるラベルスキャンルーチンについて、図２２のフローチャートと図１４及び図２３を参照して説明する。
いま、図２３に示されるように、２次元撮像装置４ａがこの位置からαだけ傾き、４ｂの位置に移動された場合、バーコードリーダである２次元撮像装置とバーコードラベルの間には、ピッチ角αがあるという。この場合、図１４に示されるように、バーコードラベル投影像３７ｃはフレームメモリ５に歪んで投影される。
【００６９】
先ず、上記ステップＳ５で求められたスタートコード上端４１ａ、スタートコード下端４１ｂ、ストップコード上端４１ｃ、ストップコード下端４１ｄのそれぞれの位置情報から、スタートコード３４の長さがストップコード３５の長さよりも長いか否かの判定が行われる（ステップＳ８１）。図１４に示される例では、スタートコードよりもストップコードの方が長いので、この判定は偽になる。
【００７０】
上記ステップＳ８１の判定の結果が真であれば、スタートコードの上端から下端までの各ポイントstart ［０］〜start [ Ｎ−１] が計算される（ステップＳ８２）。ここで、Ｎはスタートコードの上端から下端までの画素数である。
【００７１】
一方、上記ステップＳ８１の判定の結果が偽であれば、図１４に示されるように、ストップコードの上端から下端までの各ポイントstop［０］〜stop［Ｎ′−１］が計算される（ステップＳ８３）。尚、Ｎ′はストップコードの上端から下端までの画素数である。
【００７２】
上記ステップＳ８２及びＳ８３に於ける処理は、各コードの上端から下端まで１画素毎にポイントを取っていくことを意味している。
以下、図１４に示されるバーコードラベルの例に従って、ストップコードの処理について説明する。尚、スタートコード処理であるステップＳ８４〜Ｓ８８については、後述するストップコードの処理であるステップＳ８９〜Ｓ９３と同様であるので、説明を省略する。
【００７３】
ストップコードの各ポイントが計算されたならば、次に変数ｉが初期化される（ステップＳ８９）。そして、stop［ｉ］を通りup slope＋ｉ＊（down slope−up slope）／Ｎ′で計算される傾きを有する直線が計算される（ステップＳ９０）。この計算の意味は、Ｎ′本のスキャンラインの角度を連続的に変化させることによって、図１４に示されるように、よりバーコードラベルの形状に則したスキャンを行うようにするためのものである。
【００７４】
上記ステップＳ９０で所定の直線が計算されると、実際にスキャンが行われ（ステップＳ９１）、変数ｉがインクリメントされる（ステップＳ９２）。そして、ｉ＝Ｎ′−１、すなわち０〜Ｎ′−１までのＮ′個の画素についてスキャンが終了したか否かの判定が行われる（ステップＳ９３）。ここで、ｉがまだＮ′−１に達していなければ、再度ステップＳ９０に戻って直線の計算とスキャンが繰返される。そして、ｉがＮ′−１に達したならばリターンされる。
【００７５】
以上より明らかなように、バーコードリーダである２次元撮像装置とバーコードラベルとの間に相対的な角度があって、バーコードラベルが歪んで撮像される場合にも該バーコードラベルの内容を正確に復号することが可能となる。加えて、バーコードラベルの歪みとは無関係に、バーコードラベルに欠損がある場合等の種々の悪条件の下に於いても、確実にバーコードラベルの内容を復号することが可能になる。
【００７６】
また、この発明はバーコード読取装置としているが、バーコードに限られずに、例えばマークシート等、光学的に読取可能な情報を読取る装置にも適用可能である。
【００７７】
尚、この発明は上述した実施の形態に限定されるものではない。また、この発明の上記実施態様によれば、以下の如き構成を得ることができる。すなわち、
（１）  バーコードシンボルを含む光学的に読取可能な情報を読取る光学情報読取装置に於いて、
走査方向を順次変化させて正しい走査方向を求める走査方向決定手段を具備することを特徴とする光学情報読装置。
【００７８】
（２）  上記（１）に記載の光学情報読取装置に於いて、
上記走査方向決定手段は上記バーコードシンボルに含まれるバーコードシンボル自体の情報を用いることを特徴とする光学情報読取装置。
【００７９】
（３）  上記（２）に記載の光学情報読取装置に於いて、
上記バーコードシンボル自体の情報は２次元バーコードＰＤＦ４１７の左右に配されたロウインディケータであることを特徴とする光学情報読取装置。
【００８０】
（４）  上記（２）に記載の光学情報読取装置に於いて、
上記走査方向決定手段は、２次元バーコードＰＤＦ４１７の左右に配されたロウインディケータから得られる情報を比較する情報比較手段を有することを特徴とする光学皺読取装置。
【００８１】
（５）  上記（４）に記載の光学情報読取装置に於いて、
上記ロウインディケータから得られる情報は行番号であることを特徴とする光学情報読取装置。
【００８２】
（６）  上記（１）に記載の光学情報読取装置に於いて、
上記走査方向決定手段は上記バーコードシンボルを構成する各行のコードに特有な性質を用いて正しい走査方向を求めることを特徴とする光学情報読取装置。
【００８３】
（７）  上記（６）に記載の光学情報読取装置に於いて、
上記各行のコードに特有な性質は２次元バーコードＰＤＦ４１７のクラスタであることを特徴とする光学情報読取装置。
【００８４】
（８）  上記（６）に記載の光学情報読取装置に於いて、
上記走査方向決定手段は、２次元バーコードＰＤＦ４１７の各コードのクラスタを比較するクラスタ比較手段を有することを特徴とする光学情報読取装置。
【００８５】
（９）  上記（８）に記載の光学情報読取装置に於いて、
上記クラスタ比較手段は、上記２次元バーコードＰＤＦ４１７の列数の任意の割合のクラスタの一致を判定する手段を有することを特徴とする光学情報読取装置。
【００８６】
（１０）  バーコードシンボルを含む光学的に読取り可能な情報を読取る光学情報読取装置に於いて、
上記バーコードシンボルの形状に則した走査を行う走査手段を具備することを特徴とする光学情報読取装置。
【００８７】
（１１）  上記（１０）に記載の光学情報読取装置に於いて、
上記走査手段は走査直線の角度を順次変化させることを特徴とする光学情報読取装置。
【００８８】
（１２）  上記（１１）に記載の光学情報読取装置に於いて、
上記走査手段は上記バーコードシンボルの上端を通る直線の角度と下端を通る直線の角度を検出する検出手段を有することを特徴とする光学情報読取装置。
【００８９】
（１３）  上記（１２）に記載の光学情報読取装置に於いて、
上記走査手段は、上記走査直線の角度を上記バーコードシンボルの上端を通る直線の角度から下端を通る直線の角度まで順次変化させることを特徴とする光学情報読取装置。
【００９０】
（１４）  バーとスペースとから成り、任意のパターンとして表すバーコードを２次元像として撮像する撮像手段と、
この撮像手段により得られた２次元像を一時的に記憶する記憶手段と、
この記憶手段に記憶された２次元像内に於ける上記バーコードの有無及び位置を検出する位置検出部と、上記２次元像内に於ける上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きを検出する上下端傾き検出部とを有し、上記バーコードの撮像状態を検出するラベル検出手段と、
このラベル検出手段により出力されるバーコードの撮像状態に基いて、上記上端の傾きと上記下端の傾きとの傾きの差を上記バーコードを走査しようとする走査線の数で均等に分割するように、該走査線の傾きを演算する傾き演算部と、この傾き演算部の出力に基いた傾きでもって上記バーコードを走査する走査部とを有し、上記２次元像から上記バーコード情報を読出す読出手段と、
この読出手段からのバーコードの情報から上記任意の情報を復号する復号手段と
を具備することを特徴とするバーコード読取装置。
【００９１】
（１５）  上記（１４）に記載のバーコード読取装置に於いて、上記上下端傾き検出部は、
上記バーコードのロウ方向上端の傾き及びロウ方向下端の傾きを検出する傾き検出部と、
この傾き検出部によって検出された上端及び下端の傾きが適正か否かを判定する判定部と、
この判定部の出力に応じて、上記上端及び下端の少なくとも一方の傾きを再設定する再設定部と
を更に具備することを特徴とするバーコード読取装置。
【００９２】
【発明の効果】
以上のようにこの発明によれば、読取られるべくバーコードの形状が歪んでいるものや、ラベルが欠損しているようなバーコードでも正確に復号することができるバーコード読取装置を提供することができる。
【図面の簡単な説明】
【図１】この発明の一実施の形態によるシンボル読取装置の詳細を示すブロック構成図である。
【図２】図１の上下端傾き検出部の詳細を示すブロック構成図である。
【図３】この発明のバーコード読取装置が適用されたシンボル読取装置の構成を示した図である。
【図４】スタックドバーコードの例として、ＰＤＦ−４１７のラベル構造を示した図である。
【図５】仮想的にフレームメモリ５の画素配列にＰＤＦ−４１７のラベル画像を投影した模式図である。
【図６】データ処理装置６に於いてラベル情報を読出す動作について説明するフローチャートである。
【図７】図６のステップＳ３のスタート・ストップコード検出の処理動作の詳細を説明するフローチャートである。
【図８】スタート・ストップコードに対して行（ロウ方向）スキャンで探索する様子を説明した図である。
【図９】スタート・ストップコードに対して列（カラム方向）スキャンで探索する様子を説明した図である。
【図１０】図６のステップＳ５のラベル情報決定の処理動作の詳細を説明するフローチャートである。
【図１１】スタート・ストップコードの検出結果を表した図である
【図１２】バーコードラベルのデコードに必要なラベル情報を決定する方法を説明する図である。
【図１３】  Truncated ラベルに於いてバーコードラベルのデコードに必要なラベル情報を決定する方法を説明する図である。
【図１４】２次元撮像装置とバーコードラベルとの間にピッチ角があって、該バーコードラベルが歪んでフレームメモリに投影された場合の処理を説明する図である。
【図１５】図１０のステップＳ３１の角度チェックの処理動作を説明するフローチャートである。
【図１６】図１０のステップＳ３１の角度チェックの処理動作を説明するフローチャートである。
【図１７】図１０のステップＳ３１の角度チェックの処理動作を説明するフローチャートである。
【図１８】図１０のステップＳ３１の角度チェックの処理動作を説明するフローチャートである。
【図１９】バーコードラベルに欠損がある場合に正しいスキャンラインを求める処理を説明する図である。
【図２０】クラスタについて説明するもので、（ａ）はコードワードとその幅値を表した図、（ｂ）はクラスタによるバーコードの行構成を表した図である。
【図２１】２次元撮像装置とバーコードラベルとの間にピッチ角があって、該バーコードラベルが歪んでフレームメモリに投影され、且つ該バーコードラベルに欠損がある場合の処理を説明する図である。
【図２２】図６のステップＳ６のラベルスキャンの動作を説明するフローチャートである。
【図２３】２次元撮像装置とバーコードラベルとの間のピッチ角を説明する図である。
【符号の説明】
１  バーコードラベル（ＰＤＦ−４１７フォーマットのスタックドラベル）、
２  荷物、
３  結像レンズ、
４、４ａ、４ｂ  ２次元撮像装置、
４′  光電変換面、
５  フレームメモリ、
６  データ処理装置、
１０  シンボル読取装置、
１１  撮像光学系、
１２  ２次元撮像部、
１５  ラベル検出部、
１６  位置検出部、
１７  バーコード傾き検出部、
１８  上下端傾き検出部、
２０  読取部、
２３  デコード判定部、
２４  復号部、
２５  制御部、
２６  メモリ、
２７  ホスト装置、
２９  傾き検出部、
３０  傾き判定部、
３１  傾き再設定部、
３３  ラベル部、
３３ａ  ロウインディケータ、
３３ｂ  データ、
３３ｃ  ラベルマトリックス、
３４  スタートコード、
３５  ストップコード。
【図１】
0003730716.tif 000003
【図２】
0003730716.tif 000004
【図３】
0003730716.tif 000005
【図４】
0003730716.tif 000006
【図５】
0003730716.tif 000007
【図６】
0003730716.tif 000008
【図７】
0003730716.tif 000009
【図８】
0003730716.tif 000010
【図９】
0003730716.tif 000011
【図１０】
0003730716.tif 000012
【図１１】
0003730716.tif 000013
【図１２】
0003730716.tif 000014
【図１３】
0003730716.tif 000015
【図１４】
0003730716.tif 000016
【図１５】
0003730716.tif 000017
【図１６】
0003730716.tif 000018
【図１７】
0003730716.tif 000019
【図１８】
0003730716.tif 000020
【図１９】
0003730716.tif 000021
【図２０】
0003730716.tif 000022
【図２１】
0003730716.tif 000023
【図２２】
0003730716.tif 000024
【図２３】
0003730716.tif 000025