(57)【特許請求の範囲】
【請求項１】
情報がコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像する撮像部と、
前記撮像部が撮像した前記スタック型バーコードの画像データを記憶する画像メモリと、
前記画像データに基づき、前記スタック型バーコードで表示されたコード化情報を復号する復号部を有するデータ処理部と、を備え、
前記復号部は、
前記画像データを形成する複数の画素値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する線幅計測手段と、
前記線幅計測手段によって計測された前記スタック型バーコードのバーおよびスペースの線幅から数値列であるＴシーケンスを計測するＴシーケンス計測手段と、
少なくとも前記Ｔシーケンス計測手段によって計測されたＴシーケンスに対応するコードワードを取得するコードワード取得手段と、
前記Ｔシーケンス計測手段によるＴシーケンスから得られるクラスタ値と理論クラスタ値とを比較し、両クラスタ値に差異が生じた場合に、理論クラスタ値と、Ｔシーケンスと前記コードワードとの変換テーブルを用いてＴシーケンスを修正するＴシーケンス修正手段と、を有することを特徴とするスタック型バーコード読取装置。
【請求項２】
前記Ｔシーケンス修正手段は、
前記Ｔシーケンスから得られるクラスタ値が前記理論クラスタ値に一致するように、Ｔシーケンスを修正することを特徴とする請求項１に記載のスタック型バーコード読取装置。
【請求項３】
情報がコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像する撮像部と、
前記撮像部が撮像した前記スタック型バーコードの画像データを記憶する画像メモリと、
前記画像データに基づき、前記スタック型バーコードで表示されたコード化情報を復号する復号部を有するデータ処理部と、を備えたスタック型バーコード読取装置で使用されるスタック型バーコード読取方法であって、
前記復号部において、
前記画像データを形成する複数の画素値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する第１ステップと、
前記第１ステップによって計測された前記スタック型バーコードのバーおよびスペースの線幅から数値列であるＴシーケンスを計測する第２ステップと、
少なくとも前記第２ステップによって計測されたＴシーケンスに対応するコードワードを取得する第３ステップと、
前記第２ステップによるＴシーケンスから得られるクラスタ値と理論クラスタ値とを比較し、両クラスタ値に差異が生じた場合に、理論クラスタ値と、Ｔシーケンスと前記コードワードとの変換テーブルを用いてＴシーケンスを修正する第４ステップと、を有することを特徴とするスタック型バーコード読取方法。
【請求項４】
前記第４ステップにおいては、
前記Ｔシーケンスから得られるクラスタ値が前記理論クラスタ値に一致するように、Ｔシーケンスを修正することを特徴とする請求項３に記載のスタック型バーコード読取方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スタック型バーコードを光学的に読み取るスタック型バーコード読取装置およびスタック型バーコード読取方法に関するものである。
【背景技術】
【０００２】
スタック型バーコードは、一次元バーコードを積み重ねることによって情報量を増加させる方式のものであり、代表的なものにＰＤＦ４１７がある。
【０００３】
このスタック型バーコードを光学的な手法でデジタル画像化し、画像内のスタック型バーコードを画像処理の手法によって解析し、記録されているデータを読み出す読取装置が種々提案されている（たとえば特許文献１参照）。
【０００４】
特許文献１に示すＰＤＦ４１７（スタック型バーコード）は誤り訂正機能を持っている。誤り訂正能力は、ＰＤＦ４１７に組み込まれている誤り訂正コードワードの数が多いほど、より多くの誤りを訂正することができる。
【０００５】
そこで、特許文献１に示すスタック型バーコード読取装置は、復号結果選択部を設けて誤り訂正の数が少ない復号結果を選択している。すなわち、復号処理できたものでも、そのバーおよびスペースを計測した幅の信頼度にはばらつきがあるので、このスタック型バーコード読取装置は、そのばらつきを定量的に判断できるようにして、より精度の高い復号処理を行っている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−１９１７５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載されたスタック型バーコード読取装置は、バーやスペースの配列に対応したコードワードがコードワード参照テーブルに存在しないことによる誤りについては対策を取っていない。そのため、このような明示的な誤り数が誤り訂正限界を超える場合には、復号ができないという問題があった。
【０００８】
そこで、本発明の課題は、事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能なスタック型バーコード読取装置およびスタック型バーコード読取方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記の課題を解決するため、本発明のスタック型バーコード読取装置は、情報がコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像する撮像部と、前記撮像部が撮像した前記スタック型バーコードの画像データを記憶する画像メモリと、前記画像データに基づき、前記スタック型バーコードで表示されたコード化情報を復号する復号部を有するデータ処理部と、を備え、前記復号部は、前記画像データを形成する複数の画素値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する線幅計測手段と、前記線幅計測手段によって計測された前記スタック型バーコードのバーおよびスペースの線幅から数値列であるＴシーケンスを計測するＴシーケンス計測手段と、少なくとも前記Ｔシーケンス計測手段によって計測されたＴシーケンスに対応するコードワードを取得するコードワード取得手段と、前記Ｔシーケンス計測手段によるＴシーケンスから得られるクラスタ値と理論クラスタ値とを比較し、両クラスタ値に差異が生じた場合に、理論クラスタ値と、Ｔシーケンスと前記コードワードとの変換テーブルを用いてＴシーケンスを修正するＴシーケンス修正手段と、を有することを特徴とする。
【００１０】
本発明のスタック型バーコード読取装置では、復号部が、変換されたバーおよびスペースのＴシーケンスから得られるクラスタ値を、理論クラスタ値と比較するクラスタ比較機能と、両クラスタ値に差異がある場合はその差異の程度に応じてＴシーメンス（バーおよびスペースシーケンス）を修正する修正機能を有していることから、たとえば事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能である。
【００１１】
また、本発明において、スタック型バーコード読取装置は、前記Ｔシーケンス修正手段は、前記Ｔシーケンスから得られるクラスタ値が前記理論クラスタ値に一致するように、Ｔシーケンスを修正することが好ましい。このように構成すると、Ｔシーケンスから得られるクラスタ値が前記理論クラスタ値に一致するように、Ｔシーケンスを修正することにより、誤りがあった場合にもコードワード参照を実行できるようにすることができる。
【００１２】
本発明のスタック型バーコード読取方法は、情報がコード化されてバーおよびスペースで表示されたスタック型バーコードを撮像する撮像部と、前記撮像部が撮像した前記スタック型バーコードの画像データを記憶する画像メモリと、前記画像データに基づき、前記スタック型バーコードで表示されたコード化情報を復号する復号部を有するデータ処理部と、を備えたスタック型バーコード読取装置で使用されるスタック型バーコード読取方法であって、前記復号部において、前記画像データを形成する複数の画素値に基づき、前記スタック型バーコードのバーおよびスペースの線幅を計測する第１ステップと、前記第１ステップによって計測された前記スタック型バーコードのバーおよびスペースの線幅から数値列であるＴシーケンスを計測する第２ステップと、少なくとも前記第２ステップによって計測されたＴシーケンスに対応するコードワードを取得する第３ステップと、前記第２ステップによるＴシーケンスから得られるクラスタ値と理論クラスタ値とを比較し、両クラスタ値に差異が生じた場合に、理論クラスタ値と、Ｔシーケンスと前記コードワードとの変換テーブルを用いてＴシーケンスを修正する第４ステップと、を有することを特徴とする。
【００１３】
本発明スタック型バーコード読取方法では、変換されたバーおよびスペースのＴシーケンスから得られるクラスタ値を、理論クラスタ値と比較するクラスタ比較機能と、両クラスタ値に差異がある場合はその差異の程度に応じてＴシーメンス（バーおよびスペースシーケンス）を修正する修正機能を有していることから、たとえば事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能である。
【００１４】
また、本発明において、前記第４ステップにおいては、前記Ｔシーケンスから得られるクラスタ値が前記理論クラスタ値に一致するように、Ｔシーケンスを修正することが好ましい。このように構成すると、Ｔシーケンスから得られるクラスタ値が前記理論クラスタ値に一致するように、Ｔシーケンスを修正することにより、誤りがあった場合にもコードワード参照を実行できるようにすることができる。
【発明の効果】
【００１５】
本発明によれば、事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態に係るスタック型バーコード読取装置の構成例を示す図である。
【図２】本実施形態に係る低レベル復号部の要部の構成例を示すブロック図である。
【図３】図２のＴシーケンス修正部の構成例を示すブロック図である。
【図４】スタック型バーコードであるＰＤＦ４１７のラベル構造の画像データの一例を示す図である。
【図５】本実施形態に係るスタック型バーコードの読取方法の流れを示すフローチャートである。
【図６】図５に示すフローチャートにおける構造解析処理（ステップＳＴ４、ＳＴ５）の流れを示すフローチャートである。
【図７】図５に示すフローチャートにおける低レベル復号処理（ステップＳＴ６）の流れを示すフローチャートである。
【図８】本実施形態においてスタック型バーコードを読み取って得られた結果の一例を示す図である。
【図９】本実施形態に係るＴシーケンス修正の具体的な処理フローを示す第１のフローチャートである。
【図１０】本実施形態に係るＴシーケンス修正の具体的な処理フローを示す第２のフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態を図面に関連付けて説明する。
【００１８】
図１は、本発明の実施形態に係るスタック型バーコード読取装置の構成例を示す図である。
【００１９】
本実施形態に係るスタック型バーコード読取装置１０は、カード等の記録媒体２０上に固有の情報として付与されたスタック型バーコード（本実施形態ではＰＤＦ４１７）を撮像して得られた画像データを処理することによって、画像データからスタック型バーコード全体を正確に読み取ることが可能に構成されている。
【００２０】
スタック型バーコード読取装置１０は、図１に示すように、撮像装置１１、記憶部としての画像メモリ１２、データ処理部１３、および表示部１４を主構成要素として有している。
【００２１】
撮像装置１１は、密着型の一次元撮像素子１１１、およびカード等の記録媒体２０を搬送する搬送機構（搬送ガイドを含む）１１２を含んで構成されている。撮像装置１１の撮像素子１１１で撮像される記録媒体２０には、図１では、スタック型バーコードの一例としてＰＤＦ４１７のバーコード２１が印刷（記録）されている。
【００２２】
本実施形態に係るスタック型バーコード読取装置１０は、図１に示すように、スタック型バーコード２１が印刷（記録）されている記録媒体２０を読取可能である。
なお、図１において、符号Ｄは記録媒体２０の搬送方向を示している。また、説明を簡単にするために、本実施形態では、搬送方向ＤはＸ軸方向としている。また、搬送方向Ｄに直交する方向をＹ軸方向としている。
【００２３】
撮像素子１１１として密着型一次元撮像素子を採用して装置の小型化等を図っているが、撮像素子１１１としては、読み取り対象の記録媒体２０のスタック型バーコードを読み取り対象とする二次元のエリアセンサ等を採用することも可能である。また、搬送機構として定速の搬送機構を採用しているが、手動によるものも採用可能である。撮像素子１１１は、たとえばＣＣＤやＣＭＯＳセンサにより形成される。
【００２４】
画像メモリ１２は、撮像素子１１１で撮像されたスタック型バーコード２１を含む記録媒体２０の画像データを記憶（格納）する。なお、この画像メモリ１２は、ＲＡＭ，ＳＤＲＡＭ，ＤＤＲＳＤＲＡＭ，ＲＤＲＡＭなど、画像データを記憶しうるものであれば如何なるものであってもよい。
【００２５】
データ処理部１３は、位置検出処理部１３１、構造解析部１３２、および復号部１３３を主構成要素として有している。
【００２６】
データ処理部１３を構成する各要素は、ＣＰＵやＲＯＭ，ＲＡＭといったハードウェアにより実現することができる。また、本実施形態では、データ処理部１３は、位置検出処理部１３１、構造解析部１３２、および復号部１３３の３つの主要構成要素を含む形態で構成されているが、たとえば位置検出処理部１３１を前処理部とし、構造解析部１３２および復号部１３３を本処理部として構成することも可能である。
【００２７】
位置検出処理部１３１は、画像メモリ１２に格納された画像データを読み込み、その画像データにおけるスタック型バーコード２１の位置を検出し、切り出す。
【００２８】
本実施形態の位置検出処理部１３１は、シンボル位置検出部１３１１、およびシンボル切出部１３１２を有する。
【００２９】
シンボル位置検出部１３１１は、記録媒体２０のデジタル画像を画像メモリ１２から読み出して（入力して）スタック型バーコード２１の位置を検出する。シンボル位置検出部１３１１は、位置検出結果をシンボル切出部１３１２に供給する。
【００３０】
シンボル切出部１３１２は、シンボル位置情報に基づいてスタック型バーコード２１のイメージ（像）を切り出す。シンボル切出部１３１２は、切り出したスタック型バーコード２１のイメージ情報を構造解析部１３２に供給する。
【００３１】
構造解析部１３２は、切り出したスタック型バーコード２１の画像データのカラムおよびロウの構造解析を行い、各カラムおよび各ロウの境界位置を特定する。
本実施形態の構造解析部１３２は、カラム解析部１３２１およびロウ解析部１３２２を有する。
カラム解析部１３２１は、スタック型バーコード２１のカラム構造を解析して各カラムの境界位置を特定する。
ロウ解析部１３２２は、スタック型バーコード２１のロウ構造を解析して各ロウの境界位置を特定する。
構造解析部１３２は、カラム解析部１３２１の解析結果およびロウ解析部１３２２の解析結果を復号部１３３に供給する。
【００３２】
復号部１３３は、構造解析結果に基づき、スタック型バーコードのコード化情報を、たとえばキャラクタ情報に復号する。復号部１３３の復号結果はたとえば表示部１４に表示される。
【００３３】
本実施形態では、復号部１３３においては、低レベル復号処理および高レベル復号処理が行われる。具体的には、ＰＤＦ４１７の場合において、低レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に変換される処理である。
次に行われる高レベル復号処理は、９２９個のコードで示される中間情報に変換された後、所定ルールに基づいて最終言語にデコード（復号）される処理である。この最終言語としては、ＰＤＦ４１７では、ＡＳＣＩＩ文字やバイナリ表現、その他のキャラクタ等がある。
【００３４】
本実施形態の復号部１３３は、低レベル復号部１３３１および高レベル復号部１３３２を有する。
低レベル復号部１３３１は、構造解析部１３２の解析結果に基づいてコードワードごとにその走査反射率特性（波形）よりバーおよびスペースパターンを生成し、そのパターンからコードワードを特定して、コードワードマトリクスを、高レベル復号部１３３２に出力する。なお、走査反射率特性（波形）は、たとえば、特開２０１４−１９１７５５号公報に説明されているので、ここでの説明は省略する。
【００３５】
より具体的には、本実施形態の低レベル復号部１３３１は、走査反射率特性（波形）から線幅（エレメント幅）の配列によって形成されるＸシーケンスと呼ばれる数値列であるバーおよびスペースパターンを生成し、このＸシーケンスを線幅（エレメント幅）の配列によって形成されるバーおよびスペースのＴシーケンスに変換する変換機能を有する。
低レベル復号部１３３１は、変換されたバーおよびスペースのＴシーケンスから計算されるクラスタ値ＣＴを、ロウ番号から決まる理論クラスタ値ＣＲと比較するクラスタ比較機能を有する。
低レベル復号部１３３１は、さらにクラスタ値ＣＴとＣＲに差異がある場合はその差異の程度に応じてその差異がゼロとなるようにバーおよびスペースシーケンスを修正する線幅（エレメント幅）修正機能を有している。
【００３６】
図２は、本実施形態に係る低レベル復号部の要部の構成例を示すブロック図である。
【００３７】
図２に示す低レベル復号部１３３１は、線幅計測部としてのＸシーケンス計測部１３３１１、Ｔシーケンス計測部１３３１２、コードワード取得部１３３１３、およびＴシーケンス修正部１３３１４を有している。
図２に示す低レベル復号部１３３１において、上記変換機能は、Ｘシーケンス計測部１３３１１およびＴシーケンス計測部１３３１２により実現され、クラスタ比較機能および線幅（エレメント幅）修正機能は、Ｔシーケンス修正部１３３１４により実現される。
【００３８】
Ｘシーケンス計測部１３３１１は、基本的に、画像データを形成する複数の画素値に基づき、スタック型バーコード２１のバーおよびスペースの線幅を計測する。
具体的には、Ｘシーケンス計測部１３３１１は、スタック型バーコード２１の各ロウの走査反射特性について、カラム解析部１３２１で決定されたカラム境界を両端とするセグメント（すなわち部分走査反射特性）を取り出し、このセグメントについてバー（黒色で示す）とスペース（白色で示す）からなる線幅（エレメント幅）の配列によって形成されるＸシーケンスと呼ばれる数値列を求める。
【００３９】
また、Ｘシーケンス計測部１３３１１は、測定した線幅を正規化する。
ここでいう正規化とは、画素数によって表現されている線幅（エレメント幅）データをモジュール数表現に変換する処理のことをいう。ＰＤＦ４１７ではモジュールは１〜６の値をとる。１モジュールはバーまたはスペースの最小幅に対応する。１カラムは１７モジュールによって構成される。
【００４０】
Ｔシーケンス計測部１３３１２は、線幅計測部としてのＸシーケンス計測部１３３１１によって計測されたスタック型バーコード２１のバーおよびスペースの線幅からＴシーケンスを計測する。
具体的には、Ｔシーケンス計測部１３３１２は、Ｘシーケンスの隣接する２つのエレメントを１つずつシフトさせながら足し合わせてＴシーケンスと呼ばれる数値列を求める。
【００４１】
コードワード取得部１３３１３は、Ｔシーケンス計測部１３３１２によって計測されたＴシーケンスまたはＴシーケンス修正部１３３１４で修正された修正Ｔシーケンスに対応するコードワードを取得する。
コードワード取得部１３３１３は、テーブルメモリ１３３１３１を有しており、テーブルメモリ１３３１３１には、Ｔシーケンスとコードワードとの対応関係を示すコードワード変換（参照）テーブルが格納されている。
コードワード取得部１３３１３は、テーブルメモリ１３３１３１にあらかじめ用意しておいたコードワード変換（参照）テーブルを参照して各Ｔシーケンスに対応するコードワードを決定する。
また、本実施形態によれば、コードワード取得部１３３１３は、Ｔシーケンス修正部１３３１４で修正されたＴシーケンスに対応するコードワードを参照し、該当するコードワードを取得する。
【００４２】
Ｔシーケンス修正部１３３１４は、Ｔシーケンス計測部１３３１２によるＴシーケンスから算出したクラスタ値ＣＴと理論クラスタ値ＣＲとを比較し、その差異が生じた場合に、理論クラスタ値ＣＲと、Ｔシーケンスとコードワードとの変換テーブルを用いてＴシーケンスを修正する。
また、Ｔシーケンス修正部１３３１４は、Ｔシーケンスから得られるクラスタ値ＣＴが理論クラスタ値ＣＲに一致するように、Ｔシーケンスを修正する。
また、Ｔシーケンス修正部１３３１４は、異なる数値列となるように修正した複数のＴシーケンスからコードワード参照を行う少なくとも一つの有効なＴシーケンスを取得する。
また、Ｔシーケンス修正部１３３１４は、Ｔシーケンスから得られるクラスタ値ＣＴと理論クラスタ値ＣＲとの差異が±１のときにＴシーケンスの修正を行う。
【００４３】
図３は、図２のＴシーケンス修正部の構成例を示すブロック図である。
このＴシーケンス修正部１３３１４は、比較部１３３１４１および修正部１３３１４２を有する。
【００４４】
比較部１３３１４１は、Ｔシーケンス計測部１３３１２によるＴシーケンスから算出したクラスタ値ＣＴと理論クラスタ値ＣＲとを比較し、その結果を修正部１３３１４２に出力する。
【００４５】
修正部１３３１４２は、比較部１３３１４１の比較の結果、クラスタ値ＣＴと理論クラスタ値ＣＲとの間に、差異が生じた場合に、理論クラスタ値ＣＲと、Ｔシーケンスとコードワードとの変換テーブルを用いてＴシーケンスを修正する。
【００４６】
本実施形態では、クラスタ値ＣＴと理論クラスタ値ＣＲとの差（コードワード差）が±１である場合にＴシーケンスに修正をかけるようにしている。
【００４７】
ここで、クラスタ値ＣＴと理論クラスタ値ＣＲとの差（コードワード差）がある場合にＴシーケンスに修正をかけるようにした構成について述べる。
【００４８】
ＰＤＦ４１７等のスタック型バーコードは誤り訂正機能を持っている。誤り訂正能力は、スタック型バーコードに組み込まれている誤り訂正コードワードの数が多いほど、より多くの誤りを訂正することができる。誤りの数が誤り訂正能力を超えると誤り訂正できなくなるので、誤りの数は事前にできるだけ少なくしておく必要がある。
【００４９】
誤りには、「事前に把握できる誤り」と、「誤り訂正処理の過程で検出できる誤り」とがある。
「事前に把握できる誤り」とは、バーおよびスペース判定の結果得られるＸシーケンスまたはＴシーケンスに対して、Ｔシーケンスから計算されるクラスタ値ＣＴに対するコードワードテーブル内を検索したとき、該当するコードワードが存在しないことから顕在化する誤りを指し、ＰＤＦ４１７規格では「erasure」と呼ばれる。これは、スタック型バーコードの擦れや、印刷不良により、バーおよびスペースパターンが損傷を受けた場合に生じることが多い。
【００５０】
これに対して「事前に把握できない誤り」は、「substitution」と呼ばれ、線幅（エレメント幅）や総モジュール数の条件を満たしていて、コードワードテーブル参照でも該当するコードワードが存在した場合、このコードワードが誤っているかどうかは、わからない。
【００５１】
本実施形態においては、事前に把握できる誤りを小さくする構成を採用する。
いま、あるスタック型バーコードを読み取って、１または複数の誤り（Erasure）を含む結果が得られたとする。
上述したように、クラスタ値ＣＴはＰＤＦ４１７規格に基づいて、Ｔシーケンスから計算されるクラスタ値である。一方、理論クラスタ値ＣＲはコードワードのロウ番号から決定されるクラスタ値である。
【００５２】
ここで両クラスタ値に着目する。いまＴシーケンスの要素をＴ［０:５］とすると、クラスタ値ＣＴは次のように定義される。
ＣＴ＝（Ｔ［０］−Ｔ［１］＋Ｔ［４］−Ｔ［５］＋９）ｍｏｄ ９
【００５３】
クラスタ値ＣＴは、走査反射率特性のゆらぎによって線幅（エレメント幅）Ｔ［０：５］が変化すると、値が変わってしまう。一方、理論クラスタ値ＣＲはコードワードが存在するロウ番号から決まるので、ロウ番号が正しければ変化することはない。
理論上、クラスタ値ＣＴと理論クラスタ値ＣＲは一致する。しかしクラスタ値ＣＴが「０」，「３」，「６」以外の値の場合、コードワード参照を行うことができなくなるため、この時点で「Erasure」エラーが確定する。
しかし、クラスタ値ＣＴと理論クラスタ値ＣＲの差異が小さければ、クラスタ値ＣＴが理論クラスタ値ＣＲに一致するように、Ｔシーケンスの線幅（エレメント幅）の要素Ｔ［０：５］を調整することにより、コードワード参照を実行できるようにすることができる。
上述したように、本実施形態では、クラスタ値ＣＴと理論クラスタ値ＣＲの差異（コードワード差）が±１である場合にＴシーケンスに修正（補正）をかけるようにしている。
【００５４】
高レベル復号部１３３２は、コードワードマトリクスに基づいてエラー訂正を行い、訂正後のコードワードマトリクスよりデータを復号する。
高レベル復号部１３３２の復号結果はたとえば表示部１４に表示される。
【００５５】
次に、スタック型バーコード２１の一例であるＰＤＦ４１７の構造について説明した後、スタック型バーコード２１の具体的な読み取り処理である位置検出処理、傾き補正処理、構造解析処理、および復号処理について説明する。
【００５６】
（スタック型バーコード ＰＤＦ４１７の構造）
図４は、スタック型バーコード２１であるＰＤＦ４１７のラベル構造の画像データの一例を示す図である。なお、このスタック型バーコードＰＤＦ４１７は、ＩＳＯ／ＩＥＣ１５４３８として国際規格化されている。
【００５７】
図４において、スタック型バーコード２１は、図中のＹ軸方向（垂直方向）をロウ方向（複数のロウが配列されている方向）ＤＲ、Ｘ軸方向（水平方向）をカラム方向（複数のカラムが配列されている方向）ＤＣとし、カラム方向ＤＣにおいて、５つに大きく分かれている。
すなわち、図４に示すように、スタック型バーコード２１は、５カラムに分かれており、中央にデータカラム２１１が配置され、また、データカラム２１１の左右にはレフトロウインジケータ２１２、ライトロウインジケータ２１３、さらに、その左右にはスタートパターン２１４、ストップパターン２１５が配置されている。
【００５８】
また、各カラムを形成するバーコードは、黒い部分のバーＢＲと白い部分のスペースＳＰとで構成されており、スタートパターン２１４、ストップパターン２１５には、ビッグバーと呼ばれる幅の広いバーがそれぞれ形成されている。ビッグバーＢＢＲは、図４において、スタートパターン２１４およびストップパターン２１５ともに、左側の黒い部分で幅の一番広いバーである。
【００５９】
さらに、図４に示すように、データカラム２１１、レフトロウインジケータ２１２、ライトロウインジケータ２１３は各々、ロウ方向ＤＲに、６行（ロウ１〜ロウ６）から構成されている。各ロウ（行）を構成する３つのカラム（データカラム２１１、レフトロウインジケータ２１２、ライトロウインジケータ２１３）にはそれぞれコードワードが１個ずつ含まれている。
たとえば、スタック型バーコード２１のデータカラム２１１には、１個（データカラム１カラム分）×６行より６個のコードワードが構成されている。
【００６０】
なお、コードワードとは、ある数字、文字またはその他のシンボルを表す値、またはこれらに関連付けられた値を符号化するための基本となる単位である。
【００６１】
また、ストップパターン２１５を除く各カラムは、バーＢＲおよびスペースＳＰが４個ずつ存在し、各線幅は、モジュール（単位）と称される最小幅の整数倍になっている。また、１コードワードの線幅は１７モジュールであり、各々のバーＢＲ、スペースＳＰの最大単位は６となっている。なお、ストップパターン２１５は、バーＢＲが５個、スペースＳＰが４個ずつ存在し、１コードワードの線幅は１８モジュールとなっている。
【００６２】
なお、図４に示すスタック型バーコード２１では、１個のデータカラムであるが、これに限定されるものではなく、複数個のデータカラムであってもよい。
【００６３】
（スタック型バーコードの読取方法）
次に、本実施形態に係るスタック型バーコードであるＰＤＦ４１７の読取方法について説明する。
【００６４】
図５は、本実施形態に係るスタック型バーコードの読取方法の流れを示すフローチャートである。図５に関連付けて、本実施形態に係るスタック型バーコードの読取方法の流れを概説する。そして概説した後、各処理（ステップＳＴ１〜ステップＳＴ６）について、それぞれ詳述する。
【００６５】
まず、スタック型バーコード２１の位置検出が行われる（ステップＳＴ１）。具体的には、図１に示すように、スタック型バーコード読取装置１０の撮像素子１１１は、媒体搬送機構１１２に沿って所定位置まで移動した記録媒体２０のスタック型バーコード２１を照射した光の反射光を光電変換によって電気信号に変換して画像データを得る。
そして、得られたスタック型バーコード２１の画像データは、画像メモリ１２に記憶される。画像メモリ１２は二次元的に配列された有限個の画素で構成されている。
本実施形態では、撮像されたスタック型バーコード２１の画像データは、各画素の（画素値である）輝度値を数値で表したものである。この輝度値は、たとえば０〜２５５までの整数値として表される。
【００６６】
その後、データ処理部１３の位置検出処理部１３１は、画像メモリ１２に記憶された画像データを読み込み、その画像データ中のスタック型バーコード２１の位置を検出する。
【００６７】
このようにして位置検出されたスタック型バーコード２１は、たとえばデータ処理部１３において切り出され（ステップＳＴ２）、切り出された画像データがたとえば画像メモリ１２に記憶される。なお、スタック型バーコード２１全体よりも少し大きな矩形状に切出しが行われる。
【００６８】
次に、データ処理部１３において、構造解析（カラム解析およびロウ解析）が行われる（ステップＳＴ３、ＳＴ４）。
より具体的には、データ処理部１３の構造解析部１３２は、ステップＳＴ２において切出された画像データに基づき、スタック型バーコード２１の構造を解析する。構造解析部１３においては、カラム解析（ステップＳＴ３）およびロウ解析（ステップＳＴ４）が行われる。
【００６９】
最後に、データ処理部１３の復号部１３３において、復号処理が行われる（ステップＳＴ５、ＳＴ６）。
より具体的には、データ処理部１３の復号部１３３は、ステップＳＴ３、ＳＴ４において解析されたスタック型バーコード２１の構造に基づき、スタック型バーコード２１の復号処理を行う。
【００７０】
このとき、スタック型バーコード２１の一種であるＰＤＦ４１７では、低レベル復号処理および高レベル復号処理の２つの復号処理が行われ、復号部１３３の低レベル復号部１３３１においては低レベル復号処理が行われ（ステップＳＴ５）、高レベル復号部１３３２においては高レベル復号処理が行われる（ステップＳＴ６）。
【００７１】
低レベル復号処理では、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に変換される。
次に行われる高レベル復号処理では、９２９個のコードで示される中間情報に変換された後、所定ルールに基づいて最終言語にデコード（復号）される。
【００７２】
次に、図５に示すフローチャートの所要の処理について、それぞれ詳述する。
【００７３】
（構造解析）
図５のステップＳＴ３、ＳＴ４の構造解析処理について説明する。
図６は、図５に示すフローチャートにおける構造解析処理（ステップＳＴ３、ＳＴ４）の流れを示すフローチャートである。
【００７４】
図６において、構造解析部１３２では、まず、水平射影の処理が行われる（ステップＳＴ２１）。
具体的には、スタック型バーコード２１の画像データに基づいて、Ｘ軸方向（水平方向）に配列された画素ごとに、各Ｙ軸方向（垂直方向）に配列された全画素の輝度値の総和を演算し、画像メモリ１２に格納する処理である。
【００７５】
その後、求めた輝度値の総和について、Ｘ軸方向（水平方向）に隣接する画素間で差分をとり、その差分値を用いてスタートパターン２１４およびストップパターン２１５の解析が行われる（ステップＳＴ２２）。
【００７６】
図４等に示すように、スタートパターン２１４とストップパターン２１５は、他のデータカラム２１１、レフトロウインジケータ２１２、ライトロウインジケータ２１３のコードワードと異なり、すべてのロウ（本実施形態では、６行）に共通不変のパターンであることから、Ｘ軸への射影（水平射影）をとることでスタートパターン２１４またはストップパターン２１５が平均化され、輝度むらや汚れ等の影響を受けにくく、安定した検出が可能となる。
【００７７】
そして、スタートパターン２１４およびストップパターン２１５が適切に検出されたか否かが判断された後（ステップＳＴ２３）、スタートパターン２１４およびストップパターン２１５が適切に検出されたと判定された場合には、処理をステップＳＴ２５に移行する。
一方、ステップＳＴ２３において、スタートパターン２１４およびストップパターン２１５が適切に検出されていないと判定された場合には、デコード不可、すなわち、復号できないとして処理を終了する（ステップＳＴ２４）。
【００７８】
次いで、ピーク検出が行われる（ステップＳＴ２５）。
ピークと判断された場合には、ピーク値をもつ画素の位置を画像メモリ１２に記憶させる。
【００７９】
次いで、カラムの境界の検出が行われる（ステップＳＴ２６）。
より具体的には、ステップＳＴ２５において記憶されたピーク値をもつ画素の位置に基づき、スタートパターン２１４、レフトロウインジケータ２１２、データカラム２１１、ライトロウインジケータ２１３、ストップパターン２１５の５つのカラムの境界を検出する。
【００８０】
次いで、ロウの境界の検出が行われる（ステップＳＴ２７）。
そして、ロウの境界の検出によって、画像データの各ラインＬがどのロウに属するかを判定し、デコード（復号）可能として処理を終了する（ステップＳＴ２８）。
【００８１】
（低レベル復号）
次に、図５のステップＳＴ５の低レベル復号処理について説明する。
図７は、図５に示すフローチャートにおける低レベル復号処理（ステップＳＴ５）の流れを示すフローチャートである。
【００８２】
この低レベル復号処理は、図７に示すように、スタック型バーコード２１の各ロウの走査反射特性について、カラム解析で決定されたカラムの境界を両端とするセグメント（すなわち、走査反射率波形）を取り出し、１つのカラムを構成するバーの線幅とスペースの線幅との配列によって形成されるＸシーケンスと呼ばれる数値列を求めるＸシーケンス計測処理（ステップＳＴ３１）と、Ｘシーケンスの隣接する２つのバーおよびスペースを１つずつシフトさせながら足し合わせてＴシーケンスと呼ばれる数値列を求めるＴシーケンス計測処理（ステップＳＴ３２）と、予め用意しておいたコードワード変換（参照）テーブルを参照して各Ｔシーケンスに対応するコードワードを取得（決定）するコードワード取得処理（ステップＳＴ３３）と、Ｔシーケンス計測部１３３１２によるＴシーケンスから算出したクラスタ値ＣＴと理論クラスタ値ＣＲとを比較し、その差異が生じた場合に、理論クラスタ値ＣＲと、Ｔシーケンスとコードワードとの変換テーブルを用いてＴシーケンスを修正するＴシーケンス修正処理（ステップＳＴ３４）と、を含む。
【００８３】
スタック型バーコード２１の一種であるＰＤＦ４１７では、低レベル復号処理および高レベル復号処理の２つの復号処理が行われる。具体的には、ＰＤＦ４１７の場合において、低レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に変換される処理である。
次に行われる高レベル復号処理は、９２９個のコードで示される中間情報に変換された後、所定ルールに基づいて最終言語にデコード（復号）される処理である。この最終言語としては、ＰＤＦ４１７では、ＡＳＣＩＩ文字やバイナリ表現、その他のキャラクタ等がある。
【００８４】
（低レベル復号におけるＸシーケンス計測）
Ｘシーケンス計測処理においては、各ロウにおいて、ロウに含まれる複数のラインＬを平均化したライン波形を走査して、バーの線幅およびスペースの線幅を求める線幅計測を行った後に、画素数によって表現されている線幅をモジュール数表現に変換して、Ｘシーケンスを得る。
なお、走査線は、たとえば、各ロウにおいて、ロウ方向のほぼ真中に形成された複数のラインＬであり、すなわち、複数行で構成された画素の行列である。さらに、複数のラインＬを構成する画素の輝度値の平均を計算し、平均した画素の輝度値を用いて、そのロウにおける画素の輝度値を示す走査反射率波形として復号処理に用いる。
【００８５】
このように、Ｘシーケンス計測処理においては、線幅計測が行われる。より具体的には、線幅計測とは、各ロウの画素パターンをスキャンして、バーとスペースの長さ、すなわち線幅を求める処理をいう。
【００８６】
（低レベル復号におけるＴシーケンス計測）
Ｘシーケンス計測処理の次に、Ｔシーケンス計測処理を行う（図７のステップＳＴ３２）。
【００８７】
具体的には、Ｔシーケンス計測処理では、ＸシーケンスＸ［０：７］をＴシーケンスＴ［０：５］に変換する。これは、隣接する２個のＸｉとＸｉ＋１を加算したものである。
たとえば、ＸシーケンスＸ［０：７］＝［２，１，１，１，１，３，２，６］がＴシーケンスＴ［０：５］＝［３，２，２，２，４，５］の線幅配列に変換される。
【００８８】
（低レベル復号におけるコードワード取得）
次に、コードワード取得処理を行う（図７のステップＳＴ３３）。
具体的には、テーブルメモリ１３３１３１に予め用意しておいたコードワード変換テーブルを参照して各Ｔシーケンスに対応するコードワードを取得（決定）する。
すなわち、低レベル復号処理が行われ、１つのカラムを構成する４個のバーの線幅と４個のスペースの線幅でなるコードワードが０〜９２８の番号が付けられた、９２９個のコードで示される中間情報に変換される。
【００８９】
（低レベル復号におけるＴシーケンス修正処理）
本実施形態では、コードワード取得処理（ステップＳＴ３３）を行った後、直ちに高レベル復号処理に移行せずに、Ｔシーケンス修正処理を行う（ステップＳＴ３４）。
より具体的には、Ｔシーケンスから算出したクラスタ値ＣＴと理論クラスタ値ＣＲとを比較し、その差異が生じた場合に、理論クラスタ値ＣＲと、Ｔシーケンスとコードワードとの変換テーブルを用いてＴシーケンスを修正する。
【００９０】
すなわち、本実施形態では、クラスタ値ＣＴと理論クラスタ値ＣＲとの差（コードワード差）がある場合にＴシーケンスに修正をかけるようにしている。
【００９１】
既に述べたように、ＰＤＦ４１７等のスタック型バーコードは誤り訂正機能を持っている。誤り訂正能力は、スタック型バーコードに組み込まれている誤り訂正コードワードの数が多いほど、より多くの誤りを訂正することができる。誤りの数が誤り訂正能力を超えると誤り訂正できなくなるので、誤りの数は事前にできるだけ少なくしておく必要がある。
【００９２】
誤りには、「事前に把握できる誤り」と、「誤り訂正処理の過程で検出できる誤り」とがある。
「事前に把握できる誤り」とは、バーおよびスペース判定の結果得られるＸシーケンスまたはＴシーケンスに対して、Ｔシーケンスから計算されるクラスタ値ＣＴに対するコードワードテーブル内を検索したとき、該当するコードワードが存在しないことから顕在化する誤りを指し、ＰＤＦ４１７規格では「erasure」と呼ばれる。これは、スタック型バーコードの擦れや、印刷不良により、バーおよびスペースパターンが損傷を受けた場合に生じることが多い。
【００９３】
これに対して「事前に把握できない誤り」は、「substitution」と呼ばれ、線幅（エレメント幅）や総モジュール数の条件を満たしていて、コードワードテーブル参照でも該当したコードワードが存在した場合、このコードワードが誤っているかどうかは、わからない。
【００９４】
本実施形態においては、事前に把握できる誤りを小さくする構成を採用している。
図８は、本実施形態においてスタック型バーコードとしてのＰＤＦ４１７を読み取って得られた結果の一例を示す図である。
【００９５】
図８の読み取り結果においては、５個の誤り（Erasure）の結果＃１〜＃５を含んでおり、ロウ（ＲＯＷ）とカラム（ＣＯＬ）は各コードワードのマトリクス上の位置を、クラスタ値ＣＴはＰＤＦ４１７規格に基づいて、Ｔシーケンスから計算されるクラスタ値である。一方、理論クラスタ値ＣＲはコードワードのロウ番号から決定されるクラスタ値である。
【００９６】
なお、前述したように、レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが「０〜９２８」の番号が付けられた、９２９個のコードで示される中間情報に変換される。図８における最終結果において、誤りがなく正常に変換が行われた場合は「０〜９２８」の番号が提示され、正常に変換が行われなかった場合には「０〜９２８」の番号以外の番号たとえば「９９９」が提示される。そして、最終結果の番号「９９９」はＴシーケンス修正が可能であるが正しくなかった場合やＴシーケンス修正ができない場合の結果を示す番号となっている。以下では番号「９９９」を修正不調番号という。
また、以下に示す図８の説明において、Ｔシーケンス修正が可能であるが修正が正しくない場合のＴシーケンス（ＴＳＥＱ）修正の結果は「ＮＧ」で表し、Ｔシーケンス修正が正しい場合のＴシーケンス修正の結果は「ＯＫ」で表し、クラスタ値ＣＴと理論クラスタ値ＣＲとの差が±１より大きい場合はＴシーケンス修正をしないことを「−」で表している。
【００９７】
ここで両クラスタ値に着目する。いまＴシーケンスの要素をＴ［０：５］とすると、クラスタ値ＣＴは次のように定義される。
ＣＴ＝（Ｔ［０］−Ｔ［１］＋Ｔ［４］−Ｔ［５］＋９）ｍｏｄ ９
【００９８】
クラスタ値ＣＴは、走査反射率特性のゆらぎによって線幅（エレメント幅）Ｔ［０：５］が変化すると、値が変わってしまう。一方、理論クラスタ値ＣＲはコードワードが存在するロウ番号から決まるので、ロウ番号が正しければ変化することはない。
理論上、クラスタ値ＣＴと理論クラスタ値ＣＲは一致する。しかし、クラスタ値ＣＴが「０」，「３」，「６」以外の値の場合、コードワード参照を行うことができなくなるため、この時点でErasureエラーが確定する。
しかし、クラスタ値ＣＴと理論クラスタ値ＣＲの差異が小さければ、クラスタ値ＣＴが理論クラスタ値ＣＲに一致するように、Ｔシーケンスの線幅（エレメント幅）Ｔ［０：５］を調整することにより、コードワード参照を実行できるようにすることができる。
上述したように、本実施形態では、クラスタ値ＣＴと理論クラスタ値ＣＲの差異（コードワード差）が±１である場合にＴシーケンスに修正（補正）をかけるようにしている。
【００９９】
図８の読み取り結果は、以下の通りである。
結果＃１では、Ｔシーケンスは「２３３２２３」、クラスタ値ＣＴが「７」、ロウ番号ＲＯＷ＃は「３」、カラム番号ＣＯＬ＃は「１１」、理論クラスタ値ＣＲは「６」、クラスタ値ＣＴと理論クラスタ値ＣＲとの差異は「１」でＴシーケンス（ＴＳＥＱ）修正可能であり、これによりＴシーケンス（ＴＳＥＱ）修正の可否は「する（可）」であり、Ｔシーケンス（ＴＳＥＱ）修正候補は「２４３２２３」と「２３３２２４」であるが、Ｔシーケンス（ＴＳＥＱ）修正結果は「ＮＧ」であり、以上から最終結果は修正不調番号「９９９」が提示されている。
【０１００】
結果＃２では、Ｔシーケンスは「８６８９７２」、クラスタ値ＣＴが「７」、ロウ番号ＲＯＷ＃は「５」、カラム番号ＣＯＬ＃は「４」、理論クラスタ値ＣＲは「３」、クラスタ値ＣＴと理論クラスタ値ＣＲとの差異は「４」であり、その結果Ｔシーケンス（ＴＳＥＱ）修正の可否は「しない（否）」であり、以上から最終結果は修正不調番号「９９９」が提示されている。
【０１０１】
結果＃３では、Ｔシーケンスは「５６２２３３」、クラスタ値ＣＴが「８」、ロウ番号ＲＯＷ＃は「１３」、カラム番号ＣＯＬ＃は「１１」、理論クラスタ値ＣＲは「０」、クラスタ値ＣＴと理論クラスタ値ＣＲとの差異は「１」でＴシーケンス（ＴＳＥＱ）修正可能であり、これによりＴシーケンス（ＴＳＥＱ）修正の可否は「する（可）」であり、Ｔシーケンス（ＴＳＥＱ）修正候補は「６６２２３３」と「５５２２３３」であり、Ｔシーケンス（ＴＳＥＱ）修正結果は「ＯＫ」であり、以上からＴシーケンス（ＴＳＥＱ）修正後のクラスタ値ＣＴは「０」となり、最終結果は正常な番号「８０６」が提示されている。
【０１０２】
結果＃４では、Ｔシーケンスは「４４５６４５」、クラスタ値ＣＴが「８」、ロウ番号ＲＯＷ＃は「１５」、カラム番号ＣＯＬ＃は「１２」、理論クラスタ値ＣＲは「６」、クラスタ値ＣＴと理論クラスタ値ＣＲとの差異は「２」であり、その結果Ｔシーケンス（ＴＳＥＱ）修正の可否は「しない（否）」であり、以上から最終結果は修正不調番号「９９９」が提示されている。
【０１０３】
結果＃５では、Ｔシーケンスは「３４５５６６」、クラスタ値ＣＴが「８」、ロウ番号ＲＯＷ＃は「４０」、カラム番号ＣＯＬ＃は「５」、理論クラスタ値ＣＲは「０」、クラスタ値ＣＴと理論クラスタ値ＣＲとの差異は「１」でＴシーケンス（ＴＳＥＱ）修正可能であり、これによりＴシーケンス（ＴＳＥＱ）修正の可否は「する（可）」であり、Ｔシーケンス（ＴＳＥＱ修正候補は「４４５５６６」と「３３５５６６」と「３４５５７６」と「３４５５６５」、Ｔシーケンス（ＴＳＥＱ）修正結果は「ＯＫ」であり、Ｔシーケンス（ＴＳＥＱ）修正後のクラスタ値ＣＴは「０」となり、最終結果は正常な番号「８０６」が提示されている。
【０１０４】
このように、図８の例では、５個の誤りのうち３個がＴシーケンス修正の対象になる。実際、クラスタ値ＣＴが理論クラスタ値ＣＲに一致するように修正をかけると、３個のうち、２個についてコードワード参照で該当するコードワードが存在する結果となった。この処理によって「Erasure」を当初の５個から３個に減らすことができた。
【０１０５】
なお、クラスタ値ＣＴと理論クラスタ値ＣＲとの差（コードワード差）が±１より大きい場合についても、同様の修正を行うことは理論的には可能であるが、修正の候補の数が多くなって処理時間を増大させるおそれがあるため、この場合、製品コストに応じた構成をとるようにすればよい。
【０１０６】
（Ｔシーケンス修正の具体的な処理フロー）
図９および図１０は、本実施形態に係るＴシーケンス修正の具体的な処理フローを示すフローチャートである。
ここで、本実施形態に係るＴシーケンス修正部１３３１４におけるＴシーケンス修正の具体的な処理フローについて図９および図１０に関連付けて説明する。
【０１０７】
Ｔシーケンス修正部１３３１４においては、まず、Ｔシーケンスから算出したクラスタ値ＣＴと理論クラスタ値ＣＲとが比較され、両クラスタ値が等しいか否かが判定される（ステップＳＴ６１）。
ステップＳＴ６１において、クラスタ値ＣＴと理論クラスタ値ＣＲが等しいと判定されると、Ｔシーケンス修正は不要として通常の処理が行われる（ステップＳＴ６２）。
【０１０８】
ステップＳＴ６１において、クラスタ値ＣＴと理論クラスタ値ＣＲが等しくないと判定されると、Ｔシーケンス修正を行うべく、まず、クラスタ値ＣＴが理論クラスタ値ＣＲより大きいか否かが判定される（ステップＳＴ６３）。
ステップＳＴ６３において、クラスタ値ＣＴが理論クラスタ値ＣＲより大きいと判定された場合にはステップＳＴ６４の処理に移行し、大きくない（小さい）と判定された場合には図１０のステップＳＴ８３の処理に移行する。
【０１０９】
クラスタ値ＣＴが理論クラスタ値ＣＲより大きい場合は、Ｔシーケンスの最上位（第１位）Ｔ［０］の値をマイナス１（−１）し、Ｔシーケンスの最上位側から第２位Ｔ［１］の値をプラス１（＋１）し、Ｔシーケンスの最上位側から第５位Ｔ［４］の値をマイナス１（−１）し、Ｔシーケンスの最上位側から第６位Ｔ［５］の値をプラス１（＋１）して、候補となる修正ＴシーケンスＴｌを生成する処理を行う。
クラスタ値ＣＴが理論クラスタ値ＣＲより小さい場合は、Ｔシーケンスの最上位（第１位）Ｔ［０］の値をプラス１（＋１）し、Ｔシーケンスの最上位側から第２位Ｔ［１］の値をマイナス１（−１）し、Ｔシーケンスの最上位側から第５位Ｔ［４］の値をプラス１（＋１）し、Ｔシーケンスの最上位側から第６位Ｔ［５］の値をマイナス１（−１）して、候補となる修正ＴシーケンスＴｌを生成する処理を行う。
すなわち、本実施形態では、クラスタ値ＣＴが理論クラスタ値ＣＲより大きいか否かで、クラスタ値ＣＴの各要素にプラス１するかマイナス１するかを切り替えて、幅広く候補となる修正ＴシーケンスＴｌを生成するようにしている。
【０１１０】
また、図９および図１０の処理では、候補となる生成した修正ＴシーケンスＴｌが確度の高い候補として選択できるように、その修正ＴシーケンスＴｌに対応するＸシーケンスが存在するか否かを判別し、条件を満たすＸシーケンスが存在する場合に修正ＴシーケンスＴｌを候補Ｔシーケンスとして採用するようにしている。
ここで、Ｘシーケンスを生成して候補条件に採用しているのは、基本的に、Ｘシーケンスからシフト演算によりＴシーケンスが求められることから、条件を満たすＸシーケンスが存在するということは、修正Ｔシーケンス自体も実存するものに即している可能性が高いとみなすことが可能となるからである。
【０１１１】
ステップＳＴ６４においては、Ｔシーケンスの最上位（第１位）Ｔ［０］の値をマイナス１（−１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ６５）。そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ６６）。
ステップＳＴ６６において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ６７）。ステップＳＴ６７の処理後またはステップＳＴ６６において条件を満たさないと判定された場合にはステップＳＴ６８の処理に移行する。
【０１１２】
ステップＳＴ６８においては、Ｔシーケンスの最上位側から第２位Ｔ［１］の値をプラス１（＋１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ６９）。そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ７０）。
ステップＳＴ７０において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ７１）。ステップＳＴ７１の処理後またはステップＳＴ７０において条件を満たさないと判定された場合にはステップＳＴ７２の処理に移行する。
【０１１３】
ステップＳＴ７２においては、Ｔシーケンスの最上位側から第２位Ｔ［１］の値をプラス１（＋１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ７３）。そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ７４）。
ステップＳＴ７４において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ７５）。ステップＳＴ７５の処理後またはステップＳＴ７４において条件を満たさないと判定された場合にはステップＳＴ７６の処理に移行する。
【０１１４】
ステップＳＴ７６においては、Ｔシーケンスの最上位側から第６位Ｔ［５］の値をプラス１（＋１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ７７）。そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ７８）。
ステップＳＴ７８において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ７９）。ステップＳＴ７９の処理後またはステップＳＴ７８において、条件を満たさないと判定された場合にはステップＳＴ８０の処理に移行する。
ステップＳＴ８０においては、候補Ｔシーケンスバッファに追加した修正ＴシーケンスＴｌに有効Ｔシーケンスが最低１個存在するか否かが判定される。
ステップＳＴ８０において有効Ｔシーケンスが存在すると判定された場合にはＴシーケンス修正の結果が真（正しい、ＯＫ）であると判定される（ステップＳＴ８１）。一方、有効Ｔシーケンスが存在しないと判定された場合にはＴシーケンス修正の結果が偽（正しくない、ＮＧ）であると判定される（ステップＳＴ８２）。
【０１１５】
ステップＳＴ６３において、クラスタ値ＣＴが理論クラスタ値ＣＲより大きくない（小さい）と判定された場合には図１０のステップＳＴ８３の処理に移行し、以下の処理が行われる。
【０１１６】
ステップＳＴ８３においては、Ｔシーケンスの最上位（第１位）Ｔ［０］の値をプラス１（＋１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ８４）。
ここで生成される修正ＴシーケンスＴｌは、図８の例を参照すると、結果＃５のＴシーケンス「３４５５６６」の最上位（第１位）Ｔ［０］の値をプラス１（＋１）して候補Ｔシーケンスとして「４４５５６６」が生成される。
そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ８５）。
ステップＳＴ８５において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ８６）。ステップＳＴ８６の処理後またはステップＳＴ８５において条件を満たさないと判定された場合にはステップＳＴ８７の処理に移行する。
【０１１７】
ステップＳＴ８７においては、Ｔシーケンスの最上位側から第２位Ｔ［１］の値をマイナス１（−１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ８８）。
ここで生成される修正ＴシーケンスＴｌは、図８の例を参照すると、結果＃５のＴシーケンス「３４５５６６」の第２位Ｔ［１］の値をマイナス１（−１）して候補Ｔシーケンスとして「３３５５６６」が生成される。
そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ８９）。
ステップＳＴ８９において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ９０）。ステップＳＴ９０の処理後またはステップＳＴ８９において条件を満たさないと判定された場合にはステップＳＴ９１の処理に移行する。
【０１１８】
ステップＳＴ９１においては、Ｔシーケンスの最上位側から第５位Ｔ［４］の値をプラス１（＋１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ９２）。
ここで生成される修正ＴシーケンスＴｌは、図８の例を参照すると、結果＃５のＴシーケンス「３４５５６６」の第５位Ｔ［４］の値をプラス１（＋１）して候補Ｔシーケンスとして「３４５５７６」が生成される。
そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ９３）。
ステップＳＴ９３において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ９４）。ステップＳＴ９４の処理後またはステップＳＴ９３において条件を満たさないと判定された場合にはステップＳＴ９５の処理に移行する。
【０１１９】
ステップＳＴ９５においては、Ｔシーケンスの最上位側から第６位Ｔ［５］の値をマイナス１（−１）して修正ＴシーケンスＴｌを生成し、この修正ＴシーケンスＴｌに対応するＸシーケンスＸｓｅｑを生成する（ステップＳＴ９６）。
ここで生成される修正ＴシーケンスＴｌは、図８の例を参照すると、結果＃５のＴシーケンス「３４５５６６」の第６位Ｔ［５］の値をマイナス１（−１）して候補Ｔシーケンスとして「３４５５６５」が生成される。
そして、生成したＸシーケンスＸｓｅｑが条件を満たす最低１個のＸシーケンスとして存在するか否かが判定される（ステップＳＴ９７）。
ステップＳＴ９７において、条件を満たすと判定された場合には、修正ＴシーケンスＴｌを候補Ｔシーケンスバッファに追加（格納）する（ステップＳＴ９８）。ステップＳＴ９８の処理後またはステップＳＴ９７において、条件を満たさないと判定された場合にはステップＳＴ９９の処理に移行する。
ステップＳＴ９９においては、候補Ｔシーケンスバッファに追加した修正ＴシーケンスＴｌに有効Ｔシーケンスが最低１個存在するか否かが判定される。
ステップＳＴ９９において、有効Ｔシーケンスが存在すると判定された場合にはＴシーケンス修正の結果が真（正しい、ＯＫ）であると判定される（ステップＳＴ１００）。一方、有効Ｔシーケンスが存在しないと判定された場合にはＴシーケンス修正の結果が偽（正しくない、ＮＧ）であると判定される（ステップＳＴ１０１）。
【０１２０】
［実施形態の主な効果］
以上説明したように、本実施形態に係るスタック型バーコード読取装置１０によれば、復号部１３３の低レベル復号部１３３１は、画像データを形成する複数の画素値に基づき、スタック型バーコード（ＰＤＦ４１７）のバーおよびスペースの線幅を計測する線幅計測部としてのＸシーケンス計測部１３３１１と、Ｘシーケンス計測部によって計測されたスタック型バーコード（ＰＤＦ４１７）のバーおよびスペースの線幅から数値列であるＴシーケンスを計測するＴシーケンス計測部１３３１２と、Ｔシーケンス計測部１３３１２によって計測されたＴシーケンスまたは修正されたＴシーケンスに対応するコードワードを取得するコードワード取得部１３３１３と、Ｔシーケンス計測部によるＴシーケンスから得られるクラスタ値ＣＴと理論クラスタ値ＣＲとを比較し、両クラスタ値に差異が生じた場合に、理論クラスタ値ＣＲと、Ｔシーケンスとコードワードとの変換テーブルを用いてＴシーケンスを修正するＴシーケンス修正部１３３１４と、を有する。
【０１２１】
より具体的には、本実施形態の低レベル復号部１３３１は、走査反射率特性（波形）から線幅（エレメント幅）の配列によって形成されるＸシーケンスと呼ばれる数値列であるバーおよびスペースパターンを生成し、このＸシーケンスを線幅（エレメント幅）の配列によって形成されるバーおよびスペースのＴシーケンスに変換する変換機能を有する。
低レベル復号部１３３１は、変換されたバーおよびスペースのＴシーケンスから計算されるクラスタ値ＣＴを、ロウ番号から決まる理論クラスタ値ＣＲと比較するクラスタ比較機能を有する。
低レベル復号部１３３１は、さらにクラスタ値ＣＴと理論クラスタ値ＣＲに差異がある場合はその差異の程度に応じてその差異がゼロとなるようにＴシーケンスを修正する線幅（エレメント幅）修正機能を有している。
【０１２２】
したがって、本実施形態によれば、以下の効果を得ることができる。
本実施形態においては、たとえば事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能である。そして、エラー数が誤り訂正限界を超える場合であっても、スタック型バーコード（ＰＤＦ４１７）の復号を行うことが可能となる。
【０１２３】
また、本実施形態よれば、Ｔシーケンス修正部１３３１４は、Ｔシーケンスから得られるクラスタ値ＣＴが理論クラスタ値ＣＲに一致するように、Ｔシーケンスを修正する。
このように、本実施形態においては、Ｔシーケンスから得られるクラスタ値ＣＴが理論クラスタ値ＣＲに一致するように、Ｔシーケンスを修正することにより、誤りがあった場合にもコードワード参照を実行できるようにすることができる。
【０１２４】
また、本実施形態によれば、Ｔシーケンス修正部１３３１４は、図９および図１０に関連付けて説明したように、異なる数値列となるように修正した複数のＴシーケンスからコードワード参照を行う少なくとも一つの有効なＴシーケンスを取得する。
このように、本実施形態においては、異なる数値列となるように修正した複数のＴシーケンスからコードワード参照を行う少なくとも一つの有効なＴシーケンスを取得することにより、たとえば事前に把握できる誤りを可能な限り削減することが可能となる。
【０１２５】
また、本実施形態によれば、Ｔシーケンス修正部１３３１４は、Ｔシーケンスから得られるクラスタ値ＣＴと理論クラスタ値ＣＲとの差異が±１のときにＴシーケンスの修正を行う。
このように、本実施形態においては、Ｔシーケンスから得られるクラスタ値ＣＲと理論クラスタ値ＣＲとの差異が±１のときにＴシーケンスの修正を行うことにより、修正の候補の数を適正化でき、処理時間の増大を抑止することが可能となる。
【０１２６】
また、本実施形態によれば、コードワード取得部１３３１３は、Ｔシーケンス修正部１３３１４で修正されたＴシーケンスに対応するコードワードを参照し、該当するコードワードを取得する。
このように、本実施形態においては、Ｔシーケンス修正部１３３１４で修正されたＴシーケンスに対応するコードワードを参照し、該当するコードワードを取得することにより、たとえば事前に把握できる誤りを可能な限り削減することが可能となる。
【０１２７】
結果として、本実施形態によれば、スタック型バーコード（ＰＤＦ４１７）を読み取る場合において、事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能である。そして、エラー数が誤り訂正限界を超える場合であっても、スタック型バーコード（ＰＤＦ４１７）の復号を行うことが可能となる。
【０１２８】
［他の実施形態］
上述した実施形態では、位置検出処理部１３１のシンボル切出し部１３１２の出力側に構造解析部１３２を配置したが、シンボル切出し部１３１２の出力と構造解析部１３２の入力との間に、切り出したバーコード２１の傾斜角を検出して傾斜角を補正し、補正後のバーコード２１の画像データを構造解析部１３２に供給する傾き補正部を設けても良い。この傾き補正部は、たとえば特開２０１４−１９１７５５号に開示されているものである。
【０１２９】
スタック型バーコード２１を撮像装置１１でスキャンしたときには、スタック型バーコード２１のロウ方向ＤＲ（Ｙ軸方向）が必ずしも媒体搬送機構１１２に対して垂直の関係に位置するとは限らない。
撮像素子１１１によって読み取られたスタック型バーコードの画像データは、傾く場合がある。換言すれば、ロウ方向ＤＲと画像メモリ１２に格納された画像データの垂直方向が一致していない場合がある。
そのため、スタック型バーコード２１の読み取り処理において、傾き補正を行うように構成しても良い。
【０１３０】
［変形例］
上述した実施形態では、クラスタ値ＣＴと理論クラスタ値ＣＲの差異（コードワード差）が±１である場合にＴシーケンスに修正（補正）をかけるようにしているが、差が±１より大きい場合についても、同様の修正を行うことは可能である。この場合、修正の候補の数が多くなって処理時間を増大させることもあるため、製品コストに応じた構成をとるようにすればよい。
【０１３１】
なお、以上詳細に説明した方法は、上記手順に応じたプログラムとして形成し、ＣＰＵ等のコンピュータで実行するように構成することも可能である。
また、このようなプログラムは、半導体メモリ、磁気ディスク、光ディスク、フロッピー（登録商標）ディスク等の記録媒体、この記録媒体をセットしたコンピュータによりアクセスし上記プログラムを実行するように構成可能である。
【符号の説明】
【０１３２】
１０・・・スタック型バーコード読取装置、１１・・・撮像装置、１１１・・・撮像素子、１１２・・・搬送機構、１２・・・画像メモリ、１３・・・データ処理部、１３１・・・位置検出処理部、１３１１・・・シンボル位置検出部、１３１２・・・シンボル切り出部、１３２・・・構造解析部、１３２１・・・カラム解析部、１３２２・・・ロウ解析部、１３３・・・復号部、１３３１・・・低レベル復号部、１３３１１・・・Ｘシーケンス計測部（線幅計測部）、１３３１２・・・Ｔシーケンス計測部、１３３１３・・・コードワード取得部、１３３１４・・・Ｔシーケンス修正部、１３３２・・・高レベル復号部、１４・・・表示部。
【図１】
0006393226.tif 000002
【図２】
0006393226.tif 000003
【図３】
0006393226.tif 000004
【図４】
0006393226.tif 000005
【図５】
0006393226.tif 000006
【図６】
0006393226.tif 000007
【図７】
0006393226.tif 000008
【図８】
0006393226.tif 000009
【図９】
0006393226.tif 000010
【図１０】
0006393226.tif 000011