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