(57)【特許請求の範囲】
【請求項１】
キャラクタ情報がバーコードにコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像する撮像部と、
この撮像部が撮像した前記スタック型バーコードの画像データを記憶する画像メモリと、
前記画像データに基づき、前記スタック型バーコードのバーコードをキャラクタ情報に復号する復号部を有するデータ処理部と
を備え、
前記復号部は、
前記画像データを構成する複数の画素の輝度値によって前記スタック型バーコードのバーとスペースとの線幅を計測するための閾値を算出する閾値算出手段と、
前記画像データを構成する複数の画素の輝度値を示す走査反射率波形を微分してｎ次微分値（ｎは１または２）を算出するｎ次微分算出手段と、
前記閾値または前記ｎ次微分値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する線幅計測手段と、
この線幅計測手段によって計測された前記スタック型バーコードのバーおよびスペースの線幅からＴシーケンスを計測するＴシーケンス計測手段と、
このＴシーケンス計測手段によって計測されたＴシーケンスに対応するコードワードを取得するコードワード取得手段と
を有するスタック型バーコード読取装置であって、
前記Ｔシーケンス計測手段は、前記閾値と前記ｎ次微分値のいずれか一方に基づいて計測されたＴシーケンスの有効性を判定し、このＴシーケンスが有効でない場合には、前記閾値と前記ｎ次微分値の他方に基づいて計測されたＴシーケンスの有効性を判定することを特徴とするスタック型バーコード読取装置。
【請求項２】
前記ｎ次微分値は２次微分値であり、この２次微分値のゼロクロス点を前記バーと前記スペースとの境界とすることを特徴とする請求項１に記載のスタック型バーコード読取装置。
【請求項３】
前記閾値は、前記画像データの平均値に基づく固定閾値と、前記画像データにおいて互いに隣接する前記バーおよび前記スペースの最大ピーク値と最小ピーク値との平均値に基づく局所閾値とのいずれか一方であることを特徴とする請求項１または２に記載のスタック型バーコード読取装置。
【請求項４】
キャラクタ情報がバーコードにコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像して得られた画像データに基づき、前記スタック型バーコードのバーコードをキャラクタ情報に復号する際に、
前記画像データを構成する複数の画素の輝度値によって前記スタック型バーコードのバーとスペースとの線幅を計測するための閾値を算出する閾値算出工程と、
前記画像データを構成する複数の画素の輝度値を示す走査反射率波形を微分してｎ次微分値（ｎは１または２）を算出するｎ次微分算出工程と、
前記閾値または前記ｎ次微分値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する線幅計測工程と、
この線幅計測工程において計測された前記スタック型バーコードのバーおよびスペースの線幅からＴシーケンスを計測するＴシーケンス計測工程と、
このＴシーケンス計測工程において計測されたＴシーケンスに対応するコードワードを取得するコードワード取得工程と
を含むスタック型バーコード読取方法であって、
前記Ｔシーケンス計測工程において、前記閾値と前記ｎ次微分値のいずれか一方に基づいて計測されたＴシーケンスの有効性を判定し、このＴシーケンスが有効でない場合には、前記閾値と前記ｎ次微分値の他方に基づいて計測されたＴシーケンスの有効性を判定することを特徴とするスタック型バーコード読取方法。
【請求項５】
前記Ｔシーケンス計測工程において計測されたＴシーケンスから計算されたクラスタ番号が理論値に等しいか否かにより、このＴシーケンスの有効性を判定することを特徴とする請求項４に記載のスタック型バーコード読取方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スタック型バーコードを光学的に読み取るためのスタック型バーコード読取装置およびスタック型バーコード読取方法に関するものである。
【背景技術】
【０００２】
従来より、紙やプラスチック等の媒体に固有の情報を付与し、これを自動認識するための手段として、キャラクタ情報がバーコードにコード化されてバーおよびスペースで表示されたバーコードなるものが普及している。例えば、一般消費財には、一次元バーコードが使用されている。近年、バーコードの情報量の増大に対する要求が強まり、一次元バーコードよりも格段に容量（情報密度）を高めた二次元バーコードが登場している。そして、この二次元バーコードに対応した読取装置も次第に普及してきている。
【０００３】
この二次元バーコードの中には、一次元バーコードを積み重ねることによって情報量を増加させる方式のものがあり、これは、スタック型バーコードと呼ばれる。その代表的なものに、ＰＤＦ４１７と呼ばれる符合体系のスタック型バーコードがある。なお、この符号体系ＰＤＦ４１７は、ＩＳＯ／ＩＥＣ１５４３８として国際規格化されている。
【０００４】
こうしたスタック型バーコードを読み取る読取装置としては、例えば、特許文献１に開示されたシンボル情報読み取り装置がある。この特許文献１に開示されたシンボル情報読み取り装置は、二次元撮像装置でスタック型バーコードを撮像し、スタック型バーコードの品質状態を数値で表し、スタック型バーコードの劣化状態を把握できるようにしたものである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−２４１３６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、スタック型バーコードを撮像する撮像光学系の分解能が一定の水準に達していない場合には、スタック型バーコードの走査反射率波形が変動してしまう。このため、特許文献１に開示されたシンボル情報読み取り装置においても、走査反射率波形が変動することで、バー及びスペースとの境界を正確に検出することができないという問題がある。その結果、スタック型バーコードの読み取り精度が低下する恐れがある。
【０００７】
本発明は、このような事情に鑑み、スタック型バーコードの走査反射率波形の変動の影響を受けにくく、このスタック型バーコードを精度よく読み取ることが可能なスタック型バーコード読取装置およびスタック型バーコード読取方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
かかる目的を達成するため、本発明に係るスタック型バーコード読取装置は、キャラクタ情報がバーコードにコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像する撮像部と、この撮像部が撮像した前記スタック型バーコードの画像データを記憶する画像メモリと、前記画像データに基づき、前記スタック型バーコードのバーコードをキャラクタ情報に復号する復号部を有するデータ処理部とを備え、前記復号部は、前記画像データを構成する複数の画素の輝度値によって前記スタック型バーコードのバーとスペースとの線幅を計測するための閾値を算出する閾値算出手段と、前記画像データを構成する複数の画素の輝度値を示す走査反射率波形を微分してｎ次微分値（ｎは１または２）を算出するｎ次微分算出手段と、前記閾値または前記ｎ次微分値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する線幅計測手段と、この線幅計測手段によって計測された前記スタック型バーコードのバーおよびスペースの線幅からＴシーケンスを計測するＴシーケンス計測手段と、このＴシーケンス計測手段によって計測されたＴシーケンスに対応するコードワードを取得するコードワード取得手段とを有するスタック型バーコード読取装置であって、前記Ｔシーケンス計測手段は、前記閾値と前記ｎ次微分値のいずれか一方に基づいて計測されたＴシーケンスの有効性を判定し、このＴシーケンスが有効でない場合には、前記閾値と前記ｎ次微分値の他方に基づいて計測されたＴシーケンスの有効性を判定するスタック型バーコード読取装置としたことを特徴とする。
【０００９】
さらに、本発明に係るスタック型バーコード読取装置は、前記ｎ次微分値は２次微分値であり、この２次微分値のゼロクロス点を前記バーと前記スペースとの境界とすることを特徴とする。
【００１０】
本発明に係るスタック型バーコード読取装置は、さらに、前記閾値は、前記画像データの平均値に基づく固定閾値と、前記画像データにおいて互いに隣接する前記バーおよび前記スペースの最大ピーク値と最小ピーク値との平均値に基づく局所閾値とのいずれか一方であることを特徴とする。
【００１１】
また、本発明に係るスタック型バーコード読取方法は、キャラクタ情報がバーコードにコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像して得られた画像データに基づき、前記スタック型バーコードのバーコードをキャラクタ情報に復号する際に、前記画像データを構成する複数の画素の輝度値によって前記スタック型バーコードのバーとスペースとの線幅を計測するための閾値を算出する閾値算出工程と、前記画像データを構成する複数の画素の輝度値を示す走査反射率波形を微分してｎ次微分値（ｎは１または２）を算出するｎ次微分算出工程と、前記閾値または前記ｎ次微分値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する線幅計測工程と、この線幅計測工程において計測された前記スタック型バーコードのバーおよびスペースの線幅からＴシーケンスを計測するＴシーケンス計測工程と、このＴシーケンス計測工程において計測されたＴシーケンスに対応するコードワードを取得するコードワード取得工程とを含むスタック型バーコード読取方法であって、前記Ｔシーケンス計測工程において、前記閾値と前記ｎ次微分値のいずれか一方に基づいて計測されたＴシーケンスの有効性を判定し、このＴシーケンスが有効でない場合には、前記閾値と前記ｎ次微分値の他方に基づいて計測されたＴシーケンスの有効性を判定するスタック型バーコード読取方法としたことを特徴とする。
【００１２】
本発明に係るスタック型バーコード読取方法は、さらに、前記Ｔシーケンス計測工程において計測されたＴシーケンスから計算されたクラスタ番号が理論値に等しいか否かにより、このＴシーケンスの有効性を判定することを特徴とする。
【発明の効果】
【００１３】
本発明に係るスタック型バーコード読取装置およびスタック型バーコード読取方法によれば、閾値方式およびｎ次微分方式の２種類の低レベル復号方式を備え、撮像光学系の分解能の高低などに応じて、これらを使い分けることにより、スタック型バーコードの走査反射率波形の変動の影響を受けにくく、このスタック型バーコードを精度よく読み取ることが可能となる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態１に係るスタック型バーコード読取装置の電気的構成を示すブロック図である。
【図２】同実施の形態１に係るスタック型バーコード読取装置の低レベル復号部のブロック図である。
【図３】スタック型バーコードの一例を示す図である。
【図４】スタック型バーコードのうちスタートパターンにおけるビッグバーの部分およびその周辺を拡大した拡大図である。
【図５】本発明の実施の形態１に係るスタック型バーコード読取方法の流れを示すフローチャートである。
【図６】図５に示すフローチャートにおけるスタック型バーコード位置検出の流れを示すフローチャートである。
【図７】図５に示すフローチャートにおける構造解析（カラム解析およびロウ解析）の流れを示すフローチャートである。
【図８】補正画像データ（図３参照）に所定の処理を施して算出されたグラフである。
【図９】補正画像データの水平方向において各ラインの画素値を示す波形図である。
【図１０】スタック型バーコードのロウの区切りを特定する様子を説明するための説明図である。
【図１１】図５に示すフローチャートにおける低レベル復号の流れを示すフローチャートである。
【図１２】スタック型バーコードのロウを構成する各画素の輝度値を示す走査反射率波形の一部を示す波形図である。
【図１３】Ｘシーケンス計測処理の流れを示すフローチャートである。
【図１４】スタック型バーコードのロウの輝度値を示す走査反射率波形の一部を取り出した図である。
【図１５】ｎ次微分方式を説明するための図である。
【図１６】Ｔシーケンス計測処理の流れを示すフローチャートである。
【図１７】本発明の実施の形態１の変形例に係るスタック型バーコード読取方法において、スタック型バーコードのロウの輝度値を示す走査反射率波形の一部を取り出した図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について説明する。
［発明の実施の形態１］
【００１６】
図１乃至図１７には、本発明の実施の形態１を示す。
（スタック型バーコード読取装置）
【００１７】
図１は、本発明の実施の形態１に係るスタック型バーコード読取装置１の電気的構成を示すブロック図である。図２は、同実施の形態１に係るスタック型バーコード読取装置の低レベル復号部のブロック図である。
【００１８】
図１において、スタック型バーコード読取装置１は、密着型のイメージスキャナ１１ａおよびカード搬送機構１１ｂを有する撮像装置１１と、画像メモリ１２と、データ処理装置１３とを備えている。データ処理装置１３は、位置検出部１３ａと、傾き補正部１３ｂと、構造解析部１３ｃと、復号部１３ｄとを備えている。また、カード等の記録担体２には、二次元バーコードの一種であるスタック型バーコード２１が印刷されている。また、復号部１３ｄは、低レベル復号部１３ｄ１および高レベル復号部１３ｄ２を有している。
【００１９】
撮像装置１１のイメージスキャナ１１ａは、記録担体２に印刷されたスタック型バーコード２１を照射した光の反射光を光電変換によって電気信号に変換して画像データを得る。得られたスタック型バーコード２１の画像データは画像メモリ１２に記憶される。データ処理装置１３は、スタック型バーコード２１の画像データを画像メモリ１２から取り込み、取り込んだ画像データに対して様々な処理を施す。
【００２０】
低レベル復号部１３ｄ１は、図２に示すように、Ｘシーケンス計測部１４と、Ｔシーケンス計測部１５と、コードワード変換部１６とを備えている。
【００２１】
Ｘシーケンス計測部１４は、閾値算出手段１４ａおよび線幅計測手段１４ｂを有している。閾値算出手段１４ａは、固定閾値算出手段１４ａ１と、局所閾値算出手段１４ａ２と、ｎ次微分算出手段１４ａ３とから構成されている。
【００２２】
Ｔシーケンス計測部１５は、シーケンス変換手段１５ａ、線幅正規化手段１５ｂおよび判定手段１５ｃを有している。シーケンス変換手段１５ａは、Ｘシーケンスで算出した線幅配列をＴシーケンス用の線幅配列に変換する機能を有している。また、判定手段１５ｃは、後述するクラスタ番号と理論値とを比較する機能を有している。
【００２３】
コードワード変換部１６は、テーブルメモリ１６ａを有しており、テーブルメモリ１６ａには、Ｔシーケンスとコードワードとの対応関係を示すコードワード変換テーブルが格納されている。
（スタック型バーコード  ＰＤＦ４１７の構造）
【００２４】
図３は、スタック型バーコード２１の一例（ＰＤＦ４１７のラベル構造によるスタック型バーコード）を示す図である。
【００２５】
図３において、スタック型バーコード２１は、図中の垂直方向（Ｙ方向）をロウ方向（複数のロウが配列されている方向）、水平方向（Ｘ方向）をカラム方向（複数のカラムが配列されている方向）とし、カラム方向において、５つに大きく分かれている。すなわち、図３に示すように、５カラムに分かれており、中央にデータカラムが配置され、また、データカラムの左右にはレフトロウインジケータ、ライトロウインジケータ、さらに、その左右にはスタートパターン、ストップパターンが配置されている。また、各カラムを構成するバーコードの構成は、黒い部分のバーと白い部分のスペースとで構成されており、スタートパターン、ストップパターンには、ビッグバーと呼ばれる幅の広いバーがそれぞれ形成されている。ビッグバーは、図３において、スタートパターンおよびストップパターンともに、左側の黒い部分で幅の一番広いバーである。
【００２６】
さらに、図３に示すように、データカラム、レフトロウインジケータ、ライトロウインジケータは各々、ロウ方向に、６行（ロウ１〜ロウ６）から構成されている。各行（ロウ）を構成する３つのカラム（データカラム、レフトロウインジケータ、ライトロウインジケータ）にはそれぞれコードワードが１個ずつ含まれている。例えば、スタック型バーコード２１のデータカラムには、１個（データカラム１カラム分）×６行より６個のコードワードが構成されている。なお、コードワードとは、ある数字、文字またはその他のシンボルを表す値、またはこれらに関連づけられた値を符号化するための基本となる単位である。
【００２７】
また、ストップパターンを除く各カラムは、バー及びスペースが４個ずつ存在し、各線幅は、モジュール（単位）と称される最小幅の整数倍になっている。また、１コードワードの線幅は１７モジュールであり、各々のバー、スペースの最大単位は６となっている。なお、ストップパターンは、バーが５個、スペースが４個ずつ存在し、１コードワードの線幅は１８モジュールとなっている。
【００２８】
なお、図３に示すスタック型バーコード２１では、１個のデータカラムであるが、これに限定されるものではなく、複数個のデータカラムであってもよい。
【００２９】
以下、本発明の実施の形態１に係るスタック型バーコード読取方法について説明する。
（スタック型バーコード読取方法）
【００３０】
図５は、この実施の形態１に係るスタック型バーコード読取方法の流れを示すフローチャートである。図５に基づき、この実施の形態１に係るスタック型バーコード読取方法の流れを概説する。
【００３１】
まず、スタック型バーコード２１の位置検出が行われる（ステップＳ３１）。具体的には、図１に示すように、スタック型バーコード読取装置１のイメージスキャナ１１ａは、カード搬送機構１１ｂに沿って所定位置まで移動した記録担体２のスタック型バーコード２１を照射した光の反射光を光電変換によって電気信号に変換して画像データを得る。そして、得られたスタック型バーコード２１の画像データは、画像メモリ１２に記憶される。画像用メモリ１２は２次元的に配列された有限個の画素で構成されている。
この実施の形態１では、撮像されたスタック型バーコード２１の画像データは、各画素の（画素値である）輝度値を数値で表したものである。この輝度値は、例えば０から２５５までの整数値として表される。なお、この画像メモリ１２は、ＲＡＭ、ＳＤＲＡＭ、ＤＤＲＳＤＲＡＭ、ＲＤＲＡＭなど、画像データを記憶しうるものであれば如何なるものであってもよい。
【００３２】
その後、データ処理装置１３の位置検出部１３ａは、画像メモリ１２に記憶された画像データを読み込み、その画像データ中のスタック型バーコード２１の位置を検出する。
【００３３】
このようにして位置検出されたスタック型バーコード２１は、データ処理装置１３において切り出され（ステップＳ３２）、切り出された画像データが画像メモリ１２に記憶される。
【００３４】
次に、データ処理装置１３において、スタック型バーコード２１の傾き補正が行われる（ステップＳ３３）。より具体的には、データ処理装置１３の傾き補正部１３ｂは、ステップＳ３２において切り出された画像データ、すなわち、図４に示すように傾いた状態で撮像されたスタック型バーコード２１の画像データを読み込み、その画像データを、図３に示すような傾斜角度ゼロの補正画像データに変換する。
【００３５】
図４は、スタック型バーコード２１のうち、スタートパターンにおけるビッグバーの部分およびその周辺を拡大した拡大図である。また、この図４は、撮像装置１１のイメージスキャナ１１ａによって、スタック型バーコード２１が傾いた状態で撮像された様子を示す図である。スタック型バーコード２１を撮像装置１１でスキャンしたときには、スタック型バーコード２１のロウ方向が必ずしもカード搬送機構１１ｂに対して垂直の関係に位置するとは限らない。イメージスキャナ１１ａによって読み取られた画像データは、例えば図４に示すように、傾く場合がある。換言すれば、ロウ方向と、画像メモリ１２に格納された画像データの垂直方向が一致していない。このような場合に、座標変換に伴い、画素間での画像データの変換となるために発生する量子化誤差に起因するノイズによって、復号の信頼性が損なわれていた。そこで、この実施の形態１では、座標変換後の画像に対して、平滑化を目的とした補間処理や平均処理を行い、かかるノイズの影響を低減している。
【００３６】
次いで、データ処理装置１３において、構造解析（カラム解析およびロウ解析）が行われる（ステップＳ３４、Ｓ３５）。より具体的には、データ処理装置１３の構造解析部１３ｃは、ステップＳ３３において変換された補正画像データに基づき、スタック型バーコード２１の構造を解析する。構造解析部１３ｃにおいては、カラム解析（ステップＳ３４）およびロウ解析（ステップＳ３５）が行われる。
【００３７】
最後に、データ処理装置１３の復号部１３ｄにおいて、復号の処理が行われる（ステップＳ３６、Ｓ３７）。より具体的には、データ処理装置１３の復号部１３ｄは、ステップＳ３４、Ｓ３５において解析されたスタック型バーコード２１の構造に基づき、スタック型バーコード２１の復号処理を行う。このとき、スタック型バーコード２１の一種であるＰＤＦ４１７では、低レベル復号処理および高レベル復号処理の２つの復号処理が行なわれ、復号部１３ｄの低レベル復号部１３ｄ１においては低レベル復号処理を行い（ステップＳ３６）、高レベル復号部１３ｄ２においては高レベル復号処理を行う（ステップＳ３７）。低レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に一度変換される処理である。次に、高レベル復号処理は、９２９個のコードで示される中間情報に一度変換された後、所定ルールに基づいて最終言語にデコード（復号）されるようになっている。この最終言語としては、ＰＤＦ４１７では、ＡＳＣＩＩ文字やバイナリ表現、その他のキャラクタ等がある。
【００３８】
以下、図５に示すフローチャートの各処理（ステップＳ３１〜ステップＳ３７）について、それぞれ詳述する。
（スタック型バーコード位置検出）
【００３９】
図６は、図５に示すフローチャートにおけるスタック型バーコード位置検出（ステップＳ３１）の流れを示すフローチャートである。また、図４は、スタック型バーコード２１のうち、スタートパターンにおけるビッグバーの部分およびその周辺を拡大した拡大図である。
【００４０】
図６において、まず、変数ｉ（ｉは整数）に０を代入して初期化され、所定の原点に復帰する（ステップＳ６１）。具体的には、図４は画像メモリ１２に格納された画像データの中で、スタック型バーコード２１の一部を囲む領域で、左上を画素Ｓが所定の原点位置となっている。そこで、ステップＳ６１により、水平方向（Ｘ方向）に１画素分の行を水平ラインＨＬ（０）とし、最初の画素Ｓの画像データを読み込むようになっている。
【００４１】
次いで、水平ラインＨＬ（０）から垂直方向（Ｙ方向）にｉ番目の画素の列について、Ｙ＝ｉにおける水平ラインＨＬ（ｉ）上で、Ｘ方向に画素ごとに画像データを読み込み、最初に画像が「明」から「暗」に変化する点（点Ｐ（ｉ）とする。）を検索する。具体的には、各画素の画像データ、すなわち、各画素の輝度値が所定の閾値により高い「明」（白い部分）を示す画素（以下、「スペース」という）と、所定の閾値より低い「暗」（黒い部分）を示す画素（以下、「バー」という）とに分けて、最初にスペースからバーに変化した画素の位置を検出する。この変化した画素の位置がスペースとバーとの境界となる。
【００４２】
また、同じ水平ラインＨＬ（ｉ）上で、引き続き、画像が最初に「暗」から「明」に変化する点（点Ｑ（ｉ）とする。）を検索する。具体的には、バー（「暗」を示す画素）からスペース（「明」を示す画素）に変化した画素の位置を検出する（ステップＳ６２）。
【００４３】
次に、ｉ＝ｒ−１（ｒ：図４におけるＹ方向の行数（画素数））が満たされたか否かが判断され（ステップＳ６３）、満たされていないと判定された場合には、ｉを１、インクリメントして（ステップＳ６４）、再びステップＳ６２の処理が行われる。一方、図４に示す画素Ｓから検索が始まり、Ｘ方向に各画素の輝度値を検索し、最終行の最後の画素まで検索が終了した場合には、ｉ＝ｒ−１が満たされたと判定する。このように、満たされたと判定された場合には、処理を次のステップＳ６５に移す。なお、この段階で、ｒ個の点の組（Ｐ（ｉ），Ｑ（ｉ））（ｉ＝０，１，・・・，ｒ−２，ｒ−１）を得る。
【００４４】
次いで、図４中の点Ａと点Ｃの座標を求める（ステップＳ６５）。より具体的には、点Ａ、点Ｃに該当する画素の位置を検出する。Ｘ方向において、ｄ（ｉ）＝｜Ｐ（ｉ）−Ｑ（ｉ）｜を計算し、ｄ（ｉ）のうちの最小値ｍｉｎ（ｄ（ｉ））を求める。このｍｉｎ（ｄ（ｉ））が、ＰＱ間の距離の最も短くなるビッグバーの点Ａおよび点Ｃの２点に対応する（図４参照）。これにより、点Ａおよび点ＣのＹ座標（該当する画素のＹ方向の位置）は、それぞれＡｙ＝ｍａｘ（ｉ）およびＣｙ＝ｍｉｎ（ｉ）となる。また、点Ａおよび点ＣのＸ座標（該当する画素のＸ方向の位置）は、それぞれのｉに対する点ＰのＸ座標になるので、それぞれＡｘ＝Ｐ（ｉ＝Ａｙ）のＸ座標およびＣｘ＝Ｐ（ｉ＝Ｃｙ）のＸ座標となる。
【００４５】
次に、図４中の点Ｂと点Ｄの座標を求める（ステップＳ６６）。より具体的には、ｄ（ｉ）が一定となるｉの範囲を特定する。そして、ビッグバーの点Ｂおよび点ＤのＹ座標は、その範囲におけるｍｉｎ（ｉ）およびｍａｘ（ｉ）となる。また、点Ｂおよび点ＤのＸ座標は、それぞれのｉに対する点Ｐおよび点ＱのＸ座標となるので、それぞれＢｘ＝Ｐ（ｉ＝Ｂｙ）のＸ座標およびＤｘ＝Ｑ（ｉ＝Ｄｙ）のＸ座標となる。
【００４６】
このようにして、ステップＳ６１〜ステップＳ６６の処理を経て、ビッグバーの４隅、すなわち、点Ａ、点Ｂ、点Ｃ、点Ｄの座標（該当する画素の位置）が確定したので、傾き角度は、ａｔａｎ（（Ａｙ−Ｄｙ）／（Ａｘ−Ｄｘ））で計算することができる。
【００４７】
なお、傾き検出の精度を上げるため、図４において、ＸとＹの役割を交換して同様の操作を行い、ビッグバーの４隅、すなわち、点Ａ’、点Ｂ’、点Ｃ’、点Ｄ’の座標を求め、上記点Ａ、Ｂ、Ｃ、Ｄの座標値との平均をとって最終的な座標値としてもよい。
【００４８】
また、図６では、点Ａおよび点Ｃの座標を求めるとともに（ステップＳ６５）、点Ｂおよび点Ｄの座標も求めることとしたが（ステップＳ６６）、本発明はこれに限定されず、例えば、点Ａおよび点Ｃの座標のみを求めることで、傾き検出を行うようにしてもよい。
（スタック型バーコード切出し）
【００４９】
ステップＳ６１〜ステップＳ６６の処理を経て、ビッグバーの４隅の座標が確定すると、スタック型バーコード２１の切出しを行う（ステップＳ３２）。なお、スタック型バーコード２１全体よりも少し大きな矩形状に切出しが行われる。
（スタック型バーコード傾き補正）
【００５０】
次に、スタック型バーコード２１の傾き補正を行う（ステップＳ３３）。
【００５１】
図３は、上述した角度（＝ａｔａｎ（（Ａｙ−Ｄｙ）／（Ａｘ−Ｄｘ）））で傾いたスタック型バーコード２１の画像データを傾斜角度ゼロの補正画像データに変換したときの様子を示す図である。換言すれば、図３に示すスタック型バーコード２１の画像データは、そのカラム方向およびロウ方向が図４に示す画像メモリ１２領域の水平方向（Ｘ方向）および垂直方向（Ｙ方向）に一致するように補正される。
【００５２】
図３において、傾斜角度ゼロの補正画像データへの変換は、スタック型バーコード２１の傾斜角度を用いて行う。例えば、アフィン変換などの周知の方法によって行うことができるので、ここでの詳細な説明は省略する。
【００５３】
そして、この実施の形態１に係るスタック型バーコード読取方法では、座標変換に伴う量子化誤差の影響を緩和するため、座標変換後の画像に対して、平滑化を目的として補間処理または平均化処理を行う。具体的には、各画素の輝度値は、図９（ｂ）や図１２に示すように、スペースを示す輝度値（例えば、１００）、バーを示す輝度値（例えば、０）としている。なお、補正画像データは、例えば、メディアンフィルタ、エッジ保存フィルタ、適応ウィナーフィルタ、移動平均フィルタなど各種のフィルタにかけることによって平滑化されている。
（構造解析）
【００５４】
図７は、図５に示すフローチャートにおける構造解析（ステップＳ３４、Ｓ３５）の流れを示すフローチャートである。
【００５５】
図７において、まず、水平射影の処理が行われる（ステップＳ９１）。具体的には、図３に示すスタック型バーコード２１の補正画像データに基づいて、水平方向に配列された画素ごとに、各垂直方向に配列された全画素の輝度値の総和を演算し、画像メモリ１２に格納する処理である。
【００５６】
その後、求めた輝度値の総和について、水平方向に隣接する画素間で差分をとり、その差分値を用いてスタートパターンおよびストップパターンの解析が行われる（ステップＳ９２）。
【００５７】
図３等に示すように、スタートパターンとストップパターンは、他のデータカラム、レフトロウインジケータ、ライトロウインジケータのコードワードと異なり、すべてのロウ（この実施の形態１では、６行）に共通不変のパターンであることから、水平射影をとることでスタートパターンまたはストップパターンが平均化され、輝度むらや汚れ等の影響を受けにくく、安定した検出が可能となる。
【００５８】
図８は、補正画像データ（図３参照）に所定の処理を施して得られた図である。より具体的には、図８（ａ）は、補正画像データ（図３参照）について、垂直方向における画素ごとに射影を計算したものであり、図３で言えば、スタック型バーコード２１のロウ方向に、全画素の輝度値の総和を示す分布である。また、図８（ｂ）は、図８（ａ）のグラフについて差分を計算したものである。具体的には、画像メモリ１２に格納された画像データの水平方向において隣接する画素間で、求めた輝度値の総和の差分をとり、その差分値の分布を表したものである。これにより、水平ラインＬ（ｉ）上で、バー（またはスペース）からスペース（またはバー）に変化した画素の位置を検出することができる。
【００５９】
スタートパターンの検出は、図８（ａ）または図８（ｂ）に示されるグラフを用いて、バーとスペースが変化する点の間隔（ランレングス）（以下、「線幅」という）を計測する。本実施の形態では、水平方向における画素数で計数（カウント）することによって行われる。例えば、スタートパターンの各バーの線幅、各スペースの線幅を計測すると、ＳｔａｒｔＷｏｒｋ＝［４７，６，５，６，７，６，６，１８］に示すような線幅配列が求められる。一方で、スタートパターンのバーとスペースの長さの比は、ＰＤＦ４１７の規格より、ＳｔａｒｔＭａｒｋ＝［８，１，１，１，１，１，１，３］に示すような線幅配列となっている。ここで、両者の類似性を調べる指標として、例えば、正規化相関Ｒを用いることができる。図８（ｂ）について、正規化相関Ｒを考えると、Ｒ＝ｃｏｒｒｃｏｅｆ（ＳｔａｒｔＷｏｒｋ，ＳｔａｒｔＭａｒｋ）＝０．９９９３となり、Ｒは十分１に近い。したがって、この場合には、適切にスタートパターンが検出されたと判定される。なお、ストップパターンの正規化相関Ｒについての説明は、スタートパターンと同様であるので、ここでの説明は省略する。
【００６０】
なお、この実施の形態１では、類似性の尺度として、正規化相関Ｒを用いることとしたが、本発明はこれに限られず、例えば差分絶対値和、積和などを適宜用いてもよい。
【００６１】
このようにして、スタート／ストップパターンが適切に検出されたか否かが判断された後（ステップＳ９３）、スタート／ストップパターンが適切に検出されたと判定された場合には、処理をステップＳ９５に移す。一方で、スタート／ストップパターンが適切に検出されていないと判定された場合には、デコード不可、すなわち、復号できないとして処理を終了する（ステップＳ９４）。
【００６２】
次いで、図８（ｂ）のグラフに関して、ピーク検出が行われる（ステップＳ９５）。より具体的には、図３に示すように、スタートパターン、レフトロウインジケータ、データカラム、ライトロウインジケータ、ストップパターンは、各カラムの境界では、すべてのロウにおいてスペースからバーへの遷移が行われるため、水平射影の差分値の分布上、この部分で大きな差分値が現れる（図８（ｂ）の上向き矢印）。そして、図８（ｂ）の上向き矢印で示した差分値（ピーク値）を求めるには、適当な閾値を用意して、その閾値を超えたか超えないかでピークの有無を判定することができる。ピークと判断された場合には、ピーク値をもつ画素の位置を画像メモリ１２に記憶させる。
【００６３】
次いで、カラムの境界の検出が行われる（ステップＳ９６）。より具体的には、ステップＳ９５において記憶されたピーク値をもつ画素の位置に基づき、スタートパターン、レフトロウインジケータ、データカラム、ライトロウインジケータストップパターンの５つのカラムの境界を検出する。また、隣接するピーク値をもつ画素の間隔はカラムの幅を表すものであり、同様に画像メモリ１２に記憶しておく。ここで、ある特定のロウにおいてこの境界近傍に汚れがあった場合、各ロウの走査中に各カラムの境界を示す変化点を正しく検出できない場合があるが、この実施の形態１のように、水平射影を用いることで、この汚れの影響が平均化作用によって小さくなり、各カラムの境界の検出への悪影響を抑えることができる。
【００６４】
次いで、ロウの境界の検出が行われる（ステップＳ９７）。より具体的には、図９および図１０を用いて説明する。図９は、平均化された補正画像データの水平方向において、各ラインＬの輝度値を示す波形図である。図１０は、スタック型バーコード２１の各ロウの区切りを特定する様子を説明するための説明図である。なお、この実施の形態１では、１ラインＬは、１行×ｎ列の行列である。ここで、ｎは評価範囲の幅である。
【００６５】
図９（ａ）において、ロウの境界の検出は、まず、補正画像データ上に、連続する複数のラインＬからなる組を設定する。例えば、連続する３個のラインＬ（１）、Ｌ（２）およびＬ（３）（以下、「Ｌ１、Ｌ２およびＬ３と略す」）からなる組（ライン組Ｓ１）を設定する（図１０参照）。なお、この実施の形態１では、連続する３個のラインＬを設定しているが、３個に限定されるものではない。
【００６６】
そして、これらの３本のラインＬについて任意の２本を選び、それらの正規化相関を求めると、全部で３個（Ｌ１とＬ２、Ｌ１とＬ３、Ｌ２とＬ３）の相関値が得られる。これら３個の相関値のうちの最も小さい値が、予め決められた閾値ｒ０よりも大きければ、Ｌ１、Ｌ２、Ｌ３の（ラインＬの各画素の輝度値を示す）波形はお互いに相関していると判断し、このライン組Ｓ１に１が与えられる（図１０参照）。これに対し、予め決められた閾値ｒ０よりも小さければ、最も小さい値が得られた２つのラインＬの波形は、少なくとも相関していないと判断し、このライン組Ｓ１に０が与えられる。
【００６７】
例えば、水平方向に形成されたラインＬ１、Ｌ２およびＬ３からなる組については、図９（ｂ）に示すように、ラインＬ１、Ｌ２およびＬ３がすべて同じロウ１（最も上のロウ）に含まれていることから、３個の相関値のうちの最も小さい値は閾値ｒ０よりも大きくなり、１が与えられることになる（図１０において、ライン組Ｓ１の判定値は１となっている）。
【００６８】
次に、補正画像データに対して、上述した組を相対的にロウ方向（垂直方向）に移動させて（例えばＬ２、Ｌ３およびＬ４からなるライン組Ｓ２を考えて）、相関値列を算出し、算出された相関値列の最小値が閾値ｒ０よりも大きいか否かを判断することによって、そのライン組に０または１の判定値が与えられる。
【００６９】
以下同様に、ラインＬｎ−２、Ｌｎ−１、Ｌｎ（ライン組Ｓｎ−２）まで上述した処理（判定値を与える処理）を繰り返し行うと、全部でｎ−２個の１と０とからなる系列が得られる（図１０の右欄）。
【００７０】
ここで、３個のラインＬが同一のロウから選ばれている場合は、それら３個のラインＬよりなるライン組は１に近い値となり、３個のラインＬが隣接するロウをまたいで選ばれている場合は、それら３個のラインＬよりなるライン組は比較的小さい値となる。より具体的には、図９（ｂ）において、ラインＬ１８より上のラインＬはロウ１に属し、ラインＬ１８より下のラインＬはロウ２に属し、このラインＬ１８は、ロウ１とロウ２の境界に位置するラインＬとなっている。
【００７１】
したがって、このラインＬ１８を含むライン組Ｓ１６〜Ｓ１８では、判定値がほぼ０となり、それ以外のライン組では、判定値は１となる（図１０参照）。判定値が０に近いライン組は、ロウの切り替わり位置を表しているので、判定値の系列を走査して、その判定値が０に近い場所を特定することにより、ロウの切り替わり位置を知ることができる。なお、この実施の形態１では、相関関数によってラインＬ相互の類似性を評価しているので、図９（ａ）に示すように、スタートパターンやストップパターンのような各ロウにおいて共通パターン（バーおよびスペースの線幅が同じ）を除いた範囲を評価範囲とすることで、無駄な演算（計算コスト）を省くことができる。
【００７２】
以上説明したように、ライン組の設定→相関値列の算出→相関値列の最小値と閾値との比較→０または１の判定値付与→判定値の系列の走査、という流れによって、ステップＳ９７のロウの境界の検出が行われる。この実施の形態１では、ロウ１からロウ６の最終ラインＬまで行なわれる。
【００７３】
ロウの境界の検出によって、補正画像データの各ラインＬがどのロウに属するかを判定し、デコード（復号）可能として処理を終了する（ステップＳ９８）。
【００７４】
また、この実施の形態１では、ロウごとに、それに含まれる複数のラインＬの各点の輝度値の平均を計算することによって、ラインＬの局所ノイズを低減することができる。さらに、平均した画素の輝度値を用いて、そのロウの特性を代表するものとして、後述する復号処理に用いることができる。これにより、デコード（復号）精度を向上させることができる。
（低レベル復号）
【００７５】
図１１は、図５に示すフローチャートにおける低レベル復号（ステップＳ３６）の流れを示すフローチャートである。
【００７６】
この低レベル復号は、図１１に示すように、スタック型バーコード２１の各ロウの走査反射特性について、カラム解析で決定されたカラムの境界を両端とするセグメント（すなわち、走査反射率波形）を取り出し、１つのカラムを構成するバーの線幅とスペースの線幅との配列によって形成されるＸシーケンスと呼ばれる数値列を求めるＸシーケンス計測と、Ｘシーケンスの隣接する２つのバー及びスペースを１つずつシフトさせながら足し合わせてＴシーケンスと呼ばれる数値列を求めるＴシーケンス計測と、予め用意しておいたコードワード変換テーブルを参照して各Ｔシーケンスに対応するコードワードを決定するコードワード変換とからなる。
（低レベル復号におけるＸシーケンス計測）
【００７７】
スタック型バーコード２１の一種であるＰＤＦ４１７では、低レベル復号処理および高レベル復号処理の２つの復号処理が行なわれ、低レベル復号処理は、１つのカラムを構成するバーの線幅とスペースの線幅とからなるデータカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に一度変換される処理である。次に、高レベル復号処理は、９２９個のコードで示される中間情報に一度変換された後、所定ルールに基づいて最終言語にデコード（復号）されるようになっている。この最終言語としては、ＰＤＦ４１７では、ＡＳＣＩＩ文字やバイナリ表現、その他のキャラクタ等がある。
【００７８】
図１１において、まず、低レベル復号部１３ｄ１のＸシーケンス計測部１４は、Ｘシーケンス計測処理を行う（ステップＳ１３１）。一般的なＸシーケンス計測処理においては、Ｘシーケンス計測部１４の線幅計測手段１４ｂは、各ロウにおいて、ロウに含まれる複数のラインＬを平均化したライン波形を走査して、バーの線幅およびスペースの線幅を求める線幅計測を行った後に、画素数によって表現されている線幅をモジュール数表現に変換して、Ｘシーケンスを得る。なお、走査線は、例えば、各ロウにおいて、ロウ方向のほぼ真中に形成された複数のラインＬであり、すなわち、複数行で構成された画素の行例である。さらに、複数のラインＬを構成する画素の輝度値の平均を計算し、平均した画素の輝度値を用いて、そのロウにおける画素の輝度値を示す走査反射率波形として復号処理に用いる。
【００７９】
図１２は、あるロウにおいて、ロウに含まれる複数のラインＬを平均化したライン波形を走査して得られた、画素の輝度値を示す走査反射率波形の一部を示す波形図である。なお、バーの線幅およびスペースの線幅は、画素の輝度値を示す走査反射率波形の変化点と変化点の間の画素数をカウントしたものである。ここで、変化点は、画素の輝度値を示す走査反射率波形上で、図示しない所定の閾値と交差する点を示している。スタック型バーコード２１の符合体系の一種であるＰＤＦ４１７において、図３等に示すように、スタートパターン、レフトロウインジケータ、データカラム、ライトロウインジケータ、ストップパターンの５つのカラムから構成されている。さらに、ストップパターンを除く各カラムは、４個のバーと４個のスペースで構成されるため、画素の輝度値を示す走査反射率波形に損傷がない場合には、合計８個の線幅が得られる。
【００８０】
一方で、画素の輝度値を示す走査反射率波形に異常がある場合には、合計８個以上（９個）の線幅が得られる。かかる場合には、カラムに損傷があることが分かり、このカラムの信頼性が低いことを示すフラグをセットする。かかる操作をあるロウに含まれるカラムすべてについて実行したら、次のロウにおいても同様の処理を実行する。すべてのロウについて、線幅が得られたら、ステップＳ１３１（図１１参照）のＸシーケンス計測処理を終了する。
（低レベル復号におけるＴシーケンス計測）
【００８１】
次に、低レベル復号部１３ｄ１のＴシーケンス計測部１５は、Ｔシーケンス計測処理を行う（ステップＳ１３２）。
【００８２】
具体的には、Ｔシーケンス計測部１５のシーケンス変換手段１５ａは、ＸシーケンスをＴシーケンスに変換する。これは、隣接する２個のＸｉとＸｉ＋１を加算したものであり、図１２に示す左側のカラム（データカラム）のＸシーケンスをＴシーケンスに変換すると、［６（５＋１），２（１＋１），２（１＋１），２（１＋１），２（１＋１），６（１＋５），７（５＋２）］に示すような線幅配列となる。
【００８３】
次いで、Ｔシーケンス計測部１５の線幅正規化手段１５ｂは、線幅正規化処理を行う。この線幅正規化処理は、計測されたバーの線幅とスペースの線幅とを表す画素数によって表現されている線幅をモジュール数表現に変換する処理をいう。１モジュールは、バーまたはスペースの最小幅に対応する。具体的には、スタック型バーコード２１の一種であるＰＤＦ４１７において、データカラムを含む１カラムは１７モジュールによって構成されている。１カラム内の線幅をＷ１，Ｗ２，Ｗ３，Ｗ４，Ｗ５，Ｗ６，Ｗ７，Ｗ８とし、Ｗｃ＝Ｗ１＋Ｗ２＋Ｗ３＋Ｗ４＋Ｗ５＋Ｗ６＋Ｗ７＋Ｗ８とすれば、正規化線幅は、Ｘｉ＝Ｗｉ＊１７／Ｗｃ（ｉ＝１，２，…，７，８）で表されるＸシーケンスとなる。例えば、図１２に示す左側のカラム（データカラム）のＸシーケンスは、［５，１，１，１，１，１，５，２］（これらの総和は１７、すなわち、上記した１７モジュールを示す）に示すような線幅配列である。
【００８４】
次に、Ｔシーケンス計測部１５の判定手段１５ｃは、線幅正規化されたＴシーケンスより計算したクラスタ番号が理論値に一致するか否かを判定する。
（低レベル復号におけるコードワード変換）
【００８５】
最後に、低レベル復号部１３ｄ１のコードワード変換部１６は、コードワード変換を行う（ステップＳ１３３）。より具体的には、コードワード変換テーブルが格納されているテーブルメモリ１６ａから読み出し、このテーブルメモリ１６ａを参照することにより、ステップＳ１３２において求められたＴシーケンスに対応するコードワードを取得する。すなわち、低レベル復号処理が行なわれ、１つのカラムを構成する４個のバーの線幅と４個のスペースの線幅でなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に一度変換される。
【００８６】
ここで、この実施の形態１においては、Ｘシーケンス計測処理（ステップＳ１３１）において、閾値方式および２次微分方式から得られる複数のＸシーケンスから最適なものを選択できるようにしている。
（閾値方式について）
【００８７】
図１４は、あるロウにおいて、ロウに含まれる複数のラインＬを平均化したライン波形を走査して得られた、各画素の輝度値を示す走査反射率波形の一部を取り出した図であり、スタック型バーコード２１のあるロウとあるカラムに対応している。各画素の輝度値が第１の（固定）閾値ＡＶより高い値か低い値かでバーかスペースかを判定し、具体的には、あるカラムの始点ＸＳから終点ＸＥまでの間に、バーとスペースの合計個数が８個になればＸシーケンスは有効である。図１４の例では、第１の（固定）閾値ＡＶに基づいてＸシーケンス（バーの線幅とスペースの線幅）を計測し、Ｘシーケンス［１２，６，３，１８，３，４，１２，１１］に示すような線幅配列が得られた。ここで、第１の（固定）閾値ＡＶは、あるロウにおけるあるカラムにおいて、平均化したライン波形を走査して得られたバーおよびスペースの線幅からなる全画像データの平均値である。具体的には、図１４に示すロウとカラムにおいて、計測された全画素の輝度値を加算し、その加算値を全画素数で除算した値、すなわち、１画素あたりの平均輝度値を（固定）閾値ＡＶとしている。そのため、第１の（固定）閾値ＡＶは、図１４に示すように、一定の値となっている。このように、第１の（固定）閾値ＡＶは、一度の処理で求めることができるので、処理時間を短縮することが可能となる。
（ｎ次微分方式について）
【００８８】
図１５は、ｎ次微分方式を説明するための図である。図１５（ａ）は、あるロウにおいて、ロウに含まれる複数のラインＬを平均化したライン波形を走査して得られた、各画素の輝度値を示す走査反射波形の一部を取り出した図である。図１５（ｂ）は、（ａ）に示す走査反射波形を１次微分した輝度値の差分を示す波形図であり、図１５（ｃ）は、（ｂ）の波形をさらに微分（２次微分）した輝度値の差分を示す波形図である。
【００８９】
２次微分方式とは、各画素の輝度値を示す走査反射率波形を２次微分して２次微分値を求め、この２次微分値のゼロクロス点（つまり、元の波形の変曲点）をバーとスペースとの境界とする方式である。この２次微分方式は、閾値方式のように、分解能の影響を受けやすい波形のピークを検出する方法に比べて、波形の変化点を求めることでバーとスペースとの境界を求めるようにしているので、処理が簡単になるという利点がある。なお、図１５（ａ）に示す走査反射率波形の分解能が、図１４に示す走査反射率波形の分解能に比べて低い場合となっている。
（Ｘシーケンス計測処理について）
【００９０】
図１３は、Ｘシーケンス計測処理（ステップＳ１３１）の流れを示すフローチャートである。このＸシーケンス計測処理においては、上述したように、あるロウにおいて、ロウに含まれる複数のラインＬを平均化したライン波形を走査して、計測された各画素の輝度値が、所定の閾値Ｔｈより高い値であれば、スペースと判定するとともに、各画素の輝度値が、閾値Ｔｈより低い値であれば、バーと判定することにより、バーかスペースかの判定を行う。さらに、このような判定に基づいて、バーの線幅と、スペースの線幅とを計測し、線幅を作成する。スタック型バーコード２１におけるデータカラムは４個のバーと４個のスペースと、バー及びスペースの合計個数は８個であるから、走査反射率波形と固定閾値ＡＶとの隣接する交点間で形成される線幅の合計個数が８個になるまで処理を繰り返し、閾値Ｔｈを変動させていく。
【００９１】
この実施の形態１では、図１３に示すように、まず、固定閾値算出手段１４ａ１が、（固定）閾値方式によってＸシーケンスを求める（ステップＳ１５１〜ステップＳ１５８）。
【００９２】
すなわち、Ｉ＝１のときに、閾値Ｔｈとして第１の固定閾値ＡＶを設定する（ステップＳ１５１）。なお、固定閾値ＡＶの説明は後述する。
【００９３】
次いで、第１の（固定）閾値Ｔｈ＝ＡＶのときのＸシーケンスを計測し（ステップＳ１５２）、そのときのバー及びスペースの合計個数が８個か否かを判断する（ステップＳ１５３）。ステップＳ１５３において、合計個数が８個と判断した場合は、Ｘシーケンス計測は成功したものとして、このときのＸシーケンスを有効化し（ステップＳ１５４）、これをＸシーケンス１として保存する（ステップＳ１５８）。一方、ステップＳ１５３において、合計個数が８個でないと判断した場合は、規定回数Ｉ（Ｉは２以上の整数）の処理を繰り返したか否か、例えば、Ｉ＝３に到達したか否かを判断する（ステップＳ１５５）。
【００９４】
ステップＳ１５５においてＩ＝３でないと判断した場合は、規定回数Ｉに１をインクリメントし、この実施の形態１では、第１の（固定）閾値ＴｈからＡＶ／４を減じた第２の（固定）閾値Ｔｈを設定して（ステップＳ１５６）、ステップＳ１５２およびステップＳ１５３の処理を繰り返す。なお、図１４において、符号Ｌ１は第ｎ−１の（固定）閾値ＴｈからＡＶ／４を引いた第ｎの（固定）閾値Ｔｈを示している。また、ＡＶ／４は経験則から決めた値であり、これに限定されるものではない。
【００９５】
新たに求めた第２の（固定）閾値Ｔｈに基づいて、Ｘシーケンスを再度計測し（ステップＳ１５２）、合計個数が８個と判断されればＸシーケンスは有効とし（ステップＳ１５４）、合計個数が８個と判断されなければ、規定回数Ｉ＝３でないので（ステップＳ１５５）、Ｉに１をインクリメントし、第２の（固定）閾値Ｔｈから、さらにＡＶ／４を減じた新たな第３の（固定）閾値Ｔｈを設定して（ステップＳ１５６）、第３の（固定）閾値Ｔｈに基づいてＸシーケンスの再度計測を行う（ステップＳ１５２）。この実施の形態１では、規定回数Ｉ＝３の処理を繰り返しても合計個数が８個と判断されなければ、Ｘシーケンスは無効とし（ステップＳ１５７）、これをＸシーケンス１として保存する（ステップＳ１５８）。
【００９６】
こうして（固定）閾値方式によるＸシーケンス計測処理が終わったところで、今度は、ｎ次微分算出手段１４ａ３が、２次微分方式によってＸシーケンスを求める（ステップＳ１５９〜ステップＳ１６６）。
【００９７】
すなわち、Ｉ＝１のときに、ゼロクロス点ＳＬを設定する（ステップＳ１５９）。
【００９８】
次いで、このときのＸシーケンスを計測し（ステップＳ１６０）、そのときの合計個数が８個か否かを判断する（ステップＳ１６１）。ステップＳ１６１において、合計個数が８個と判断した場合は、Ｘシーケンス計測は成功したものとして、このときのＸシーケンスを有効化し（ステップＳ１６２）、これをＸシーケンス２として保存する（ステップＳ１６６）。一方、ステップＳ１６１において、合計個数が８個でないと判断した場合は、規定回数Ｉ（Ｉは２以上の整数）の処理を繰り返したか否か、例えば、Ｉ＝３に到達したか否かを判断する（ステップＳ１６３）。
【００９９】
ステップＳ１６３においてＩ＝３でないと判断した場合は、規定回数Ｉに１をインクリメントするとともに、ゼロクロス点ＳＬに１をインクリメントして（ステップＳ１６４）、ステップＳ１６０およびステップＳ１６１の処理を繰り返す。
【０１００】
新たに求めたゼロクロス点ＳＬに基づいて、Ｘシーケンスを再度計測し（ステップＳ１６０）、合計個数が８個と判断されればＸシーケンスは有効とし（ステップＳ１６２）、合計個数が８個と判断されなければ、規定回数Ｉ＝３でないので（ステップＳ１６３）、Ｉに１をインクリメントするとともに、ゼロクロス点（を示すライン）ＳＬに１をインクリメントして（ステップＳ１６４）第２のゼロクロス（を示すライン）ＳＬ２を算出し、この第２のゼロクロス点（を示すライン）ＳＬ２に基づいてＸシーケンスの再度計測を行う（ステップＳ１６０）。この実施の形態１では、規定回数Ｉ＝３の処理を繰り返しても合計個数が８個と判断されなければ、Ｘシーケンスは無効とし（ステップＳ１６５）、これをＸシーケンス２として保存する（ステップＳ１６６）。なお、インクリメントする数は、１としているがこれに限定されるものではない。
【０１０１】
図１６は、この実施の形態１におけるＴシーケンス計測処理（ステップＳ１３２）の流れを示すフローチャートである。このＴシーケンス計測処理においては、Ｔシーケンス計測部１５のシーケンス変換手段１５ａが、Ｘシーケンス１（固定閾値方式から得られたＸシーケンス）およびＸシーケンス２（２次微分方式から得られたＸシーケンス）をそれぞれＴシーケンスに変換し、Ｔシーケンス計測部１５の線幅正規化手段１５ｂが、これらのＴシーケンスの線幅を正規化し、Ｔシーケンス計測部１５の判定手段１５ｃが、それぞれのＴシーケンスより計算したクラスタ番号とクラスタの理論値とを比較する。そして、両者が等しければ、そのＴシーケンスを有効とし、両者が等しくなければ、そのＴシーケンスを無効とする。
【０１０２】
ここで、クラスタ番号とは、図３に示すスタック型バーコード２１において、誤り発生の確率を最小にするために用意されているもので、スタートパターンおよびストップパターン以外のすべてのコードワードに存在している。具体的には、ＰＤＦ４１７の規格により、クラスタ番号は３行目ごとに順次繰り返し現れ、ロウ１にはクラスタ番号「０」、ロウ２にはクラスタ番号「３」、ロウ３にはクラスタ番号「６」が使われている。換言すれば、このクラスタ番号「０」、「３」、「６」は、クラスタ番号の理論値となっている。
【０１０３】
次に、具体的な数値で説明する。
【０１０４】
まず、２次微分方式によって得たＸシーケンス２を取り出し（ステップＳ１７１）、Ｔシーケンスに変換する（ステップＳ１７２）。これは、Ｘ＝［Ｘｉ，Ｘｉ＋１，Ｘｉ＋２，・・・］において、隣接する２個のＸｉとＸｉ＋１を加算したものであり、２次微分方式によって得たＸシーケンス２、例えば、図１５（ｃ）に示す走査反射率波形より、Ｘ＝［１２，５，５，１６，４，４，１２，１０］を計測し、このＸをＴシーケンスに変換すると、Ｔ＝［１７，１０，２１，２０，８，１６，２２］に示すような線幅配列となる。
【０１０５】
次いで、Ｔシーケンスより、クラスタ番号を計算する（ステップＳ１７３）。クラスタの計算は、まず、ＴシーケンスをＴＮ（ｉ）＝Ｔ（ｉ）＊１７／Ｗｃ（ｉ＝０，１，・・・，７）で正規化する。上の例では、ＴＮ＝［４，３，５，５，２、４］に示すような線幅配列となる。次に、クラスタ番号Ｋ＝（ＴＮ（０）−ＴＮ（１）＋ＴＮ（４）−ＴＮ（５）＋９）ｍｏｄ９（ただし、「ｍｏｄ９」は９で除した後の剰余を意味する。）で表される式により、クラスタ番号Ｋを計算する。上の例では、Ｋ＝（４−３＋２−４＋９）ｍｏｄ９＝８となる。
【０１０６】
次いで、ステップＳ１７３において計算されたクラスタ番号は処理中のロウに対応するクラスタ番号の理論値に等しいか否かを判断する（ステップＳ１７４）。処理中のロウがスタック型バーコード２１の第１行目であるとすると、クラスタの理論値は「０」である。したがって、クラスタ番号「８」は、クラスタ番号の理論値「０」と一致しないため、Ｔシーケンスを無効として処理をステップＳ１７６に進める。一方、クラスタ番号が理論値と一致していれば、Ｔシーケンスを有効とする（ステップＳ１７５）。
【０１０７】
ステップＳ１７４においてクラスタ番号が理論値と一致しないときは、固定閾値方式によって得たＸシーケンス１を取り出し（ステップＳ１７６）、Ｔシーケンスに変換する（ステップＳ１７７）。（固定）閾値方式によって得たＸシーケンス１、例えば、図１４に示す走査反射率波形より、Ｘ＝［１２，６，３，１８，３，４，１２，１１］を計測し、そのＸを、Ｔシーケンスに変換すると、Ｔ＝［１８，９，２１，２１，７，１６，２３］となる。
【０１０８】
次いで、Ｔシーケンスより、クラスタ番号を計算する（ステップＳ１７８）。上の例では、ＴＮ＝［４，２，５，５，２，４］と正規化され、Ｋ＝（４−２＋２−４＋９）ｍｏｄ９＝０となる。
【０１０９】
次いで、ステップＳ１７３において計算されたクラスタは処理中のロウに対応するクラスタの理論値に等しいか否かを判断する（ステップＳ１７９）。上の例では、クラスタ番号「０」とクラスタ番号の理論値「０」が一致しているため、Ｔシーケンスを有効とする（ステップＳ１７５）。一方、クラスタ番号と理論値が一致していない場合は、Ｔシーケンスを無効とする（ステップＳ１８０）。
【０１１０】
このように、この実施の形態１においては、固定閾値方式および２次微分方式の２種類の低レベル復号方式を備え、撮像光学系の分解能の高低に応じて、これらを使い分けることにより、たとえスタック型バーコード２１の走査反射率波形が変動しても、最適なＸシーケンス（Ｘシーケンス１またはＸシーケンス２）を得ることができる。
【０１１１】
最適なＸシーケンスが得られると、低レベル復号処理が行なわれ、コードワード変換処理（ステップＳ１３３）が行われる。具体的には、有効とされたＴシーケンスに対応するコードワードを所定の変換テーブルから取得する。すなわち、低レベル復号処理が行なわれ、１つのカラムを構成する４個のバーの線幅と４個のスペースの線幅でなるコードワードは０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に一度変換される。
（高レベル復号）
【０１１２】
コードワード変換が完了すると、一般的な高レベル復号が行われ（ステップＳ３７）、復号処理が完了する。また、復号処理が完了したデータについては、スタック型バーコード情報などとともに上位制御装置に出力されることになる。具体的には、高レベル復号処理は、０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に一度変換された後、所定ルールに基づいて最終言語にデコード（復号）されるようになっている。この最終言語としては、ＰＤＦ４１７では、ＡＳＣＩＩ文字やバイナリ表現、その他のキャラクタ等がある。
（実施の形態の主な効果）
【０１１３】
以上説明したように、この実施の形態においては、スタック型バーコード２１の走査反射率波形が変動する場合であっても、このスタック型バーコード２１を精度よく読み取ることが可能となる。具体的には、撮像光学系の分解能が一定の水準に達している場合には、スタック型バーコード２１の走査反射率波形のピーク値を検出することで閾値を決定する（固定）閾値方式による低レベル復号を採択することができる。一方、撮像光学系の分解能が一定の水準に達していない場合には、スタック型バーコード２１の走査反射率波形が変動してしまうため、または、正確なピーク値を検出することが難しくなるが、輝度値の差分をとることで、バーとスペースとのエッジ（境界）部分の出力変化を高精度に抽出可能な２次微分方式による低レベル復号を採択することができる。
【０１１４】
その結果、スタック型バーコード２１の走査反射率波形の変動の影響を受けにくく、スタック型バーコード２１を精度よく読み取ることが可能となる。
【０１１５】
また、媒体搬送速度が撮像中に増減する場合でも、両方式（（固定）閾値方式および２次微分方式）の低レベル復号を併用することにより、速度変動に対処しやすくなる利点がある。
［発明のその他の実施の形態］
【０１１６】
なお、上述した実施の形態１では、スタック型バーコード読取方法の低レベル復号に際して、図１６に示すように、２次微分方式によるＸシーケンス計測処理に基づく低レベル復号（ステップＳ１７１〜ステップＳ１７４）を実施した後、（固定）閾値方式によるＸシーケンス計測処理に基づく低レベル復号（ステップＳ１７６〜ステップＳ１７９）を実施する場合について説明した。しかし、必要に応じて、これらの順序を入れ替えて、（固定）閾値方式によるＸシーケンス計測処理に基づく低レベル復号を実施した後、２次微分方式によるＸシーケンス計測処理に基づく低レベル復号を実施するようにしてもよい。
【０１１７】
また、上述した実施の形態１では、スタック型バーコード読取方法のＸシーケンス計測処理を実行する際に、閾値方式として、走査反射波形を構成する各画素の輝度値の平均を求める固定閾値方式を採用する場合について説明したが、固定閾値方式以外の閾値方式（例えば、局所閾値方式など）を代用または併用することもできる。局所閾値方式を採用する場合は、Ｘシーケンス計測部１４の局所閾値算出手段１４ａ２が局所閾値を算出する。この局所閾値方式は、図１７に示すように、画像データにおいて互いに隣接するバーおよびスペースの最大ピーク値と最小ピーク値との平均値に基づく局所閾値をバーとスペースとの境界とする方式である。この局所閾値方式は、補正画像データの輝度むらや汚れなどで、ピーク値のばらつきが生じた場合でも、固定閾値方式に比べて、バーとスペースとの線幅を精度よく検出することができるという利点がある。
【０１１８】
また、上述した実施の形態１では、スタック型バーコード読取方法のＸシーケンス計測処理を実行する際に、ｎ次微分方式として２次微分方式（つまり、ｎ＝２）を採用する場合について説明したが、２次微分方式に代えて１次微分方式（つまり、ｎ＝１）を代用または併用することもできる。
【０１１９】
また、上述した実施の形態１では、スタック型バーコード読取方法のスタック型バーコード傾き補正（ステップＳ３３）において、スタック型バーコード２１の画像データを傾斜角度ゼロの補正画像データに変換する場合について説明した。しかし、スタック型バーコード２１の画像データが傾いていないことが保証されている場合や、スタック型バーコード２１の画像データが傾いていても別の角度補正手段によって対処できる場合には、このスタック型バーコード傾き補正を省くことも可能である。
【０１２０】
また、上述した実施の形態１では、スタック型バーコード２１、つまり二次元バーコードの一種について説明したが、一次元バーコードに本発明を同様に適用することもできる。
【０１２１】
さらに、上述した実施の形態１では、一次元撮像素子やリニア搬送機構との組み合わせに対して本発明を適用することとしたが、本発明はこれに限られることなく、例えば、二次元ＣＣＤやＣＭＯＳイメージャなどのエリアセンサと被写体支持機構との組み合わせに対して本発明を適用することとしても構わない。
【産業上の利用可能性】
【０１２２】
本発明は、撮像光学系の分解能の高低に起因してスタック型バーコードの走査反射率波形が変動する恐れがあるスタック型バーコード読取装置に好適に適用することができる。
【符号の説明】
【０１２３】
１……スタック型バーコード読取装置
２……記録担体
１１……撮像装置（撮像部）
１１ａ……イメージスキャナ
１１ｂ……カード搬送機構
１２……画像メモリ
１３……データ処理装置（データ処理部）
１３ａ……位置検出部
１３ｂ……傾き補正部
１３ｃ……構造解析部
１３ｄ……復号部
１３ｄ１……低レベル復号部
１３ｄ２……高レベル復号部
１４……Ｘシーケンス計測部
１４ａ……閾値算出手段
１４ａ１……固定閾値算出手段
１４ａ２……局所閾値算出手段
１４ａ３……ｎ次微分算出手段
１４ｂ……線幅計測手段
１５……Ｔシーケンス計測部（Ｔシーケンス計測手段）
１５ａ……シーケンス変換手段
１５ｂ……線幅正規化手段
１５ｃ……判定手段
１６……コードワード変換部（コードワード取得手段）
１６ａ……テーブルメモリ
２１……スタック型バーコード
【図１】
0005683891.tif 000002
【図２】
0005683891.tif 000003
【図３】
0005683891.tif 000004
【図５】
0005683891.tif 000005
【図６】
0005683891.tif 000006
【図７】
0005683891.tif 000007
【図８】
0005683891.tif 000008
【図１０】
0005683891.tif 000009
【図１１】
0005683891.tif 000010
【図１２】
0005683891.tif 000011
【図１３】
0005683891.tif 000012
【図１４】
0005683891.tif 000013
【図１５】
0005683891.tif 000014
【図１６】
0005683891.tif 000015
【図１７】
0005683891.tif 000016
【図４】
0005683891.tif 000017
【図９】
0005683891.tif 000018