(58)【調査した分野】(Int.Cl.,DB名)
キャラクタ情報がバーコードに符号化されてバー及びスペースで表示されたスタック型バーコードを撮像して得られた画像データに基づき、前記スタック型バーコードのバーコードをキャラクタ情報に復号する際に、前記画像データを構成する複数の画素の輝度値によって前記スタック型バーコードのバーとスペースとの線幅を計測するための閾値を算出する閾値算出工程と、
前記画像データを構成する複数の画素の輝度値を示す走査反射率波形を微分してn次微分値(nは1又は2)を算出するn次微分値算出工程と、
前記閾値及び前記n次微分値に基づき、前記スタック型バーコードのバー及びスペースの線幅を計測する線幅計測工程と、
この線幅計測工程において計測された前記スタック型バーコードのバー及びスペースの線幅からTシーケンスを計測するTシーケンス計測工程と、
このTシーケンス計測工程において計測されたTシーケンスに対応するコードワードを取得するコードワード取得工程と、
前記コードワードを用いて前記スタック型バーコードをキャラクタ情報に復号する高レベル復号工程と、
復号結果を選択する復号結果選択工程と、を有し、
前記高レベル復号工程は、誤り訂正処理を行う誤り訂正工程を備え、
前記復号結果選択工程は、1コードワード内で誤り訂正された数をカウントして訂正数として記憶するカウンタ工程と、該カウンタ工程で記憶された訂正数を比較して訂正数の少ない復号結果を選択する選択工程と、を備えたことを特徴とするスタック型バーコード読取方法。
【発明を実施するための形態】
【0016】
[発明の実施の形態1]
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
【0017】
(スタック型バーコード読取装置)
図1は、本発明の実施の形態1に係るスタック型バーコード読取装置1の電気的構成を示すブロック図である。
【0018】
図1において、スタック型バーコード読取装置1は、撮像装置11と、画像メモリ12と、データ処理装置13とを備えている。データ処理装置13は、バーコード検出部13aと、構造解析部13cと、復号部13dとを備えている。カード等の記録担体2には、二次元バーコードの一種であるスタック型バーコード21が印刷されている。バーコード検出部13aは、位置検出部13a1と、切り出し部13a2と、傾き補正部13a3とを有している。構造解析部13cは、スタート又はストップのパターン検出部13c1と、カラム解析部13c2と、ロウ解析部13c3とを有している。復号部13dは、低レベル復号部13d1及び高レベル復号部13d2、復号結果選択部(復号判定部)13d3とを有している。なお、スタック型バーコード21の一種であるPDF417では、低レベル復号処理及び高レベル復号処理の2つの復号処理が行なわれる。
【0019】
撮像装置11は、密着型のイメージスキャナ11aと、カード搬送機構11bとを有している。イメージスキャナ11aは、記録担体2に印刷されたスタック型バーコード21に照射した光の反射光を受光し、光電変換によって電気信号に変換してスタック型バーコード21の画像データを得る。イメージスキャナ11aは、例えば、8ビット、256階調の多値画像データを得る。得られたスタック型バーコード21の画像データは、画像メモリ12に記憶される。
【0020】
データ処理装置13は、スタック型バーコード21の画像データを画像メモリ12から取り込み、取り込んだ画像データに対して様々な処理を施す。
低レベル復号部13d1は、
図2に示すように、Xシーケンス計測部14と、Tシーケンス計測部15と、コードワード変換部16とを備えている。
【0021】
Xシーケンス計測部14は、閾値算出手段14a及び線幅計測手段14bを有している。閾値算出手段14aは、固定閾値算出手段14a1と、局所閾値算出手段14a2と、n次微分算出手段14a3とから構成されている。
【0022】
Tシーケンス計測部15は、シーケンス変換手段15a、線幅正規化手段15b及び判定手段15cを有している。シーケンス変換手段15aは、Xシーケンスで算出した線幅配列をTシーケンス用の線幅配列に変換する機能を有している。また、判定手段15cは、後述するクラスタ番号と理論値とを比較する機能を有している。
【0023】
コードワード変換部16は、テーブルメモリ16aを有しており、このテーブルメモリ16aには、Tシーケンスとコードワードとの対応関係を示すコードワード変換テーブルが格納されている。
【0024】
(スタック型バーコード PDF417の構造)
図3は、スタック型バーコード21の一例(PDF417のラベル構造によるスタック型バーコード)を示す図である。
図18は、スタック型バーコード21の一例(PDF417のラベル構造によるスタック型バーコード)の全体構造を示すブロック線図である。
図19は、スタック型バーコード21の一例(PDF417のラベル構造によるスタック型バーコード)の所与の安全保護水準に対する誤り訂正コードワードの数をリストした表である。なお、本明細書では、スタック型バーコード21はPDF417を用いて説明する。
【0025】
スタック型バーコード21は、水平方向(X方向)をカラム方向とし、垂直方向(Y方向)をロウ方向としている。ロウ方向とは、複数のロウが配列されている方向である。カラム方向とは、複数のカラムが配列されている方向であり、本実施形態では、5つに大きく分かれている。すなわち、
図3に示すように、中央にデータカラムが配置され、また、データカラムの左右にはレフトロウインジケータ、ライトロウインジケータ、さらに、その左右にはスタートパターン、ストップパターンが配置されている。また、各カラムを構成するバーコードの構成は、黒い部分のバーと白い部分のスペースとで構成されており、スタートパターン、ストップパターンには、ビッグバーと呼ばれる幅の広いバーがそれぞれ形成されている。ビッグバーは、
図3において、スタートパターン及びストップパターンともに、左側の黒い部分で幅の一番広いバーである。
【0026】
さらに、
図3に示すように、データカラム、レフトロウインジケータ、ライトロウインジケータは各々、ロウ方向に、6行(ロウ1〜ロウ6)から構成されている。各行(ロウ)を構成する3つのカラム(データカラム、レフトロウインジケータ、ライトロウインジケータ)にはそれぞれコードワードが1個ずつ含まれている。例えば、スタック型バーコード21のデータカラムには、1個(データカラム1カラム分)×6行より6個のコードワードが構成されている。なお、コードワードとは、ある数字、文字又はその他のシンボルを表す値、又はこれらに関連づけられた値を符号化するための基本となる単位である。
【0027】
ここで、バーコードは、幅の異なる黒バーと白バーとを交互に並べて構成されているが、そのバーの最小幅を1モジュールと称する。また、バーコードの左右両側には、スタートコードとストップコードが設けられ、これらスタートコードとストップコードとの間に、複数のコードワードからなるデータコードが設けられている。スタートコードとストップコードを構成するバーの本数、およびモジュール数などはバーコードの種類によって異なり、1コードワードを構成するバーの本数、および1コードワードを構成するモジュール数などもバーコードの種類によって異なる。
【0028】
また、ストップパターンを除く各カラムは、バー及びスペースが4個ずつ存在し、各線幅は、モジュール(単位)と称される最小幅の整数倍になっている。また、1コードワードの線幅は17モジュールであり、各々のバー、スペースの最大単位は6となっている。なお、ストップパターンは、バーが5個、スペースが4個ずつ存在し、1コードワードの線幅は18モジュールとなっている。
【0029】
なお、
図3に示すスタック型バーコード21では、1個のデータカラムであるが、これに限定されるものではなく、複数個のデータカラムであってもよい。また、スタック型バーコード21は、ロウ(行)の数及びカラム(データ列)の数は可変である。スタック型バーコード21では少なくとも3つのロウ(行)を有していなければならず、90行までを有することができる。同様に各ロウ(行)内のコードワードの数またはカラム(データ列)の数は3乃至30の範囲で変化できる。
【0030】
スタック型バーコード21は、記号の各行はスタートパターンと、レフトロウインジケータ(コードワード)Liと、データカラム(コードワード)di又は誤り検出/訂正コードワードCiと、と、ストップパターンとからなる。ある行内の最小コードワード数は、レフトロウインジケータ(コードワード)Liと、少なくとも1つのデータコードワードと、ライトロウインジケータ(コードワード)Riとを含む3である。ライトロウインジケータ(コードワード)Ri及びレフトロウインジケータ(コードワード)Liはスタック型バーコード21の構造を同期させるのを援助する(詳細に関しては後述する)。なお、
図18に示す左行標識はレフトロウインジケータ(コードワード)Liを示し、右行標識はライトロウインジケータ(コードワード)Riを示す。
【0031】
スタート(開始)及びストップ(停止)パターンは、スタック型バーコード21の各ロウ(行)が何処で始まり、何処で終るのかを識別する。例えば、スタック型バーコード21としてのPDF417は独特なスタートパターン及びストップパターンを使用する。スタートパターン、即ち各ロウ(行)の左側は"81111113"の独特なパターン、即ちXシーケンスを有している。ストップパターン、即ち各ロウ(行)の右側は"711311121"の独特なXシーケンスを有している。
【0032】
全ての記号は、その記号内のコードワードの合計数を指示する1つのコードワード(行0内の第1データコードワード)と、少なくとも2つの誤り検出コードワードC0及びC1とを含む。これら2つの誤り検出コードワードは一緒になって2コードワード長の検査合計を形成する。スタック型バーコード21(PDF417)は誤り訂正能力を持たせてデータを符号化することもできる。"安全保護水準"と呼ぶ誤り訂正能力の水準は0から8までの範囲で利用者が選択する。これは、例えば水準6においては、合計126のコードワードが失われる、又は駆逐されても記号全体を読み取って解号できることを意味する。
【0033】
図19は、スタック型バーコード21(PDF417)の安全保護水準と誤り訂正コードワードCiの数との間の関係を示す表である。
【0034】
失われた、または駆逐されたデータ("消去"として知られている)の訂正に加えて、スタック型バーコード21(PDF417)はコードワードの誤解号から回復することもできる。誤解号から回復するには2つのコードワードを必要とするから(1つは誤りの検出のために、そして1つはそれを訂正するために)、ある安全保護水準はそれが処理できる未解号コードワードの中の誤解号の数の半分を支援することができる。
【0035】
以下、本発明の実施の形態1に係るスタック型バーコード読取方法について説明する。
【0036】
(スタック型バーコード読取方法)
図5は、この実施の形態1に係るスタック型バーコード読取方法の流れを示すフローチャートである。
図5に基づき、この実施の形態1に係るスタック型バーコード読取方法の流れを概説する。
【0037】
データ処理装置13は、スタック型バーコード21を抽出する。画像メモリ12に記憶された画像データから、バーコード21の位置を検出し、画像データを切り出す。また、必要であれば、傾き補正処理が行われる。なお、本発明は、傾き補正処理が必須の構成ではない。
【0038】
本実施形態では、位置検出処理(
図5のステップS31)、切り出し処理(ステップS32)、傾き補正処理(ステップS33)が行われる。
【0039】
まず、スタック型バーコード21の位置検出が行われる(ステップS31)。具体的には、
図1に示すように、スタック型バーコード読取装置1のイメージスキャナ11aは、カード搬送機構11bに沿って所定位置まで移動した記録担体2のスタック型バーコード21を照射した光の反射光を光電変換によって電気信号に変換して画像データを得る。そして、得られたスタック型バーコード21の画像データは、画像メモリ12に記憶される。画像用メモリ12は2次元的に配列された有限個の画素で構成されている。
【0040】
この実施の形態1では、撮像されたスタック型バーコード21の画像データは、各画素の(画素値である)輝度値を数値で表したものである。この輝度値は、8ビットの256階調の画像データとして、例えば0から255までの整数値として表される。なお、この画像メモリ12は、RAM、SDRAM、DDRSDRAM、RDRAMなど、画像データを記憶しうるものであれば如何なるものであってもよい。
【0041】
その後、データ処理装置13の位置検出部13a1は、画像メモリ12に記憶された画像データを読み込み、その画像データ中のスタック型バーコード21の位置を検出する。
【0042】
このようにして位置検出されたスタック型バーコード21は、データ処理装置13の切り出し部13a2において切り出され(ステップS32)、切り出された画像データが画像メモリ12に記憶される。
【0043】
次に、データ処理装置13において、スタック型バーコード21の傾き補正が行われる(ステップS33)。より具体的には、データ処理装置13の傾き補正部13a3は、ステップS32において切り出された画像データ、すなわち、
図4に示すように傾いた状態で撮像されたスタック型バーコード21の画像データを読み込み、その画像データを
図3に示すような傾斜角度ゼロの補正画像データに変換する。
【0044】
図4は、スタック型バーコード21のうち、スタートパターンにおけるビッグバーの部分及びその周辺を拡大した拡大図である。また、この
図4は、撮像装置11のイメージスキャナ11aによって、スタック型バーコード21が傾いた状態で撮像された様子を示す図である。スタック型バーコード21を撮像装置11でスキャンしたときには、スタック型バーコード21のロウ方向が必ずしもカード搬送機構11bに対して垂直の関係に位置するとは限らない。イメージスキャナ11aによって読み取られた画像データは、例えば
図4に示すように、傾く場合がある。換言すれば、ロウ方向と、画像メモリ12に格納された画像データの垂直方向が一致していない。このような場合に、座標変換に伴い、画素間での画像データの変換となるために発生する量子化誤差に起因するノイズによって、復号の信頼性が損なわれていた。そこで、この実施の形態1では、座標変換後の画像に対して、平滑化を目的とした補間処理や平均処理を行い、かかるノイズの影響を低減している。
【0045】
次いで、データ処理装置13において、構造解析(カラム解析及びロウ解析)が行われる(ステップS34、S35)。より具体的には、データ処理装置13の構造解析部13cは、ステップS33において変換された補正画像データに基づき、スタック型バーコード21の構造を解析する。構造解析部13cは、カラム解析部13c2及びロウ解析部13c3において、カラム解析(ステップS34)及びロウ解析(ステップS35)が行われる。
【0046】
最後に、データ処理装置13の復号部13dにおいて、復号の処理が行われる(ステップS36、S37)。より具体的には、データ処理装置13の復号部13dは、ステップS34、S35において解析されたスタック型バーコード21の構造に基づき、スタック型バーコード21の復号処理を行う。このとき、スタック型バーコード21の一種であるPDF417では、低レベル復号処理及び高レベル復号処理の2つの復号処理が行なわれ、復号部13dの低レベル復号部13d1においては低レベル復号処理を行い(ステップS36)、高レベル復号部13d2においては高レベル復号処理を行う(ステップS37)。低レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に一度変換される処理である。次に、高レベル復号処理は、929個のコードで示される中間情報に一度変換された後、所定ルールに基づいて最終言語にデコード(復号)されるようになっている。この最終言語としては、PDF417では、ASCII文字やバイナリ表現、その他のキャラクタ等がある。
【0047】
以下、
図5に示すフローチャートの各処理(ステップS31〜ステップS37)について、それぞれ詳述する。
【0048】
(スタック型バーコード位置検出)
図6は、
図5に示すフローチャートにおけるスタック型バーコード位置検出(ステップS31)の流れを示すフローチャートである。また、
図4は、スタック型バーコード21のうち、スタートパターンにおけるビッグバーの部分及びその周辺を拡大した拡大図である。
【0049】
図6において、まず、変数i(iは整数)に0を代入して初期化され、所定の原点に復帰する(ステップS61)。具体的には、
図4は画像メモリ12に格納された画像データの中で、スタック型バーコード21の一部を囲む領域で、左上を画素Sが所定の原点位置となっている。そこで、ステップS61により、水平方向(X方向)に1画素分の行を水平ラインHL(0)とし、最初の画素Sの画像データを読み込むようになっている。
【0050】
次いで、水平ラインHL(0)から垂直方向(Y方向)にi番目の画素の列について、Y=iにおける水平ラインHL(i)上で、X方向に画素ごとに画像データを読み込み、最初に画像が「明」から「暗」に変化する点(点P(i)とする。)を検索する。具体的には、各画素の画像データ、すなわち、各画素の輝度値が所定の閾値により高い「明」(白い部分)を示す画素(以下、「スペース」という)と、所定の閾値より低い「暗」(黒い部分)を示す画素(以下、「バー」という)とに分けて、最初にスペースからバーに変化した画素の位置を検出する。この変化した画素の位置がスペースとバーとの境界となる。
【0051】
また、同じ水平ラインHL(i)上で、引き続き、画像が最初に「暗」から「明」に変化する点(点Q(i)とする。)を検索する。具体的には、バー(「暗」を示す画素)からスペース(「明」を示す画素)に変化した画素の位置を検出する(ステップS62)。
【0052】
次に、i=r−1(r:
図4におけるY方向の行数(画素数))が満たされたか否かが判断され(ステップS63)、満たされていないと判定された場合には、iを1、インクリメントして(ステップS64)、再びステップS62の処理が行われる。一方、
図4に示す画素Sから検索が始まり、X方向に各画素の輝度値を検索し、最終行の最後の画素まで検索が終了した場合には、i=r−1が満たされたと判定する。このように、満たされたと判定された場合には、処理を次のステップS65に移す。なお、この段階で、r個の点の組(P(i),Q(i))(i=0,1,・・・,r−2,r−1)を得る。
【0053】
次いで、
図4中の点Aと点Cの座標を求める(ステップS65)。より具体的には、点A、点Cに該当する画素の位置を検出する。X方向において、d(i)=|P(i)−Q(i)|を計算し、d(i)のうちの最小値min(d(i))を求める。このmin(d(i))が、PQ間の距離の最も短くなるビッグバーの点A及び点Cの2点に対応する(
図4参照)。これにより、点A及び点CのY座標(該当する画素のY方向の位置)は、それぞれAy=max(i)及びCy=min(i)となる。また、点A及び点CのX座標(該当する画素のX方向の位置)は、それぞれのiに対する点PのX座標になるので、それぞれAx=P(i=Ay)のX座標及びCx=P(i=Cy)のX座標となる。
【0054】
次に、
図4中の点Bと点Dの座標を求める(ステップS66)。より具体的には、d(i)が一定となるiの範囲を特定する。そして、ビッグバーの点B及び点DのY座標は、その範囲におけるmin(i)及びmax(i)となる。また、点B及び点DのX座標は、それぞれのiに対する点P及び点QのX座標となるので、それぞれBx=P(i=By)のX座標及びDx=Q(i=Dy)のX座標となる。
【0055】
このようにして、ステップS61〜ステップS66の処理を経て、ビッグバーの四隅、すなわち、点A、点B、点C、点Dの座標(該当する画素の位置)が確定したので、傾き角度は、atan((Ay−Dy)/(Ax−Dx))で計算することができる。
【0056】
なお、傾き検出の精度を上げるため、
図4において、XとYの役割を交換して同様の操作を行い、ビッグバーの4隅、すなわち、点A'、点B'、点C'、点D'の座標を求め、上記点A、B、C、Dの座標値との平均をとって最終的な座標値としてもよい。
【0057】
また、
図6では、点A及び点Cの座標を求めるとともに(ステップS65)、点B及び点Dの座標も求めることとしたが(ステップS66)、本発明はこれに限定されず、例えば、点A及び点Cの座標のみを求めることで、傾き検出を行うようにしてもよい。
【0058】
(スタック型バーコード切出し)
テップS61〜ステップS66の処理を経て、ビッグバーの4隅の座標が確定すると、スタック型バーコード21の切出しを行う(ステップS32)。なお、スタック型バーコード21全体よりも少し大きな矩形状に切出しが行われる。
【0059】
(スタック型バーコード傾き補正)
次に、スタック型バーコード21の傾き補正を行う(ステップS33)。
【0060】
図3は、上述した角度(=atan((Ay−Dy)/(Ax−Dx)))で傾いたスタック型バーコード21の画像データを傾斜角度ゼロの補正画像データに変換したときの様子を示す図である。換言すれば、
図3に示すスタック型バーコード21の画像データは、そのカラム方向及びロウ方向が
図4に示す画像メモリ12領域の水平方向(X方向)及び垂直方向(Y方向)に一致するように補正される。
【0061】
図3において、傾斜角度ゼロの補正画像データへの変換は、スタック型バーコード21の傾斜角度を用いて行う。例えば、アフィン変換などの周知の方法によって行うことができるので、ここでの詳細な説明は省略する。
【0062】
そして、この実施の形態1に係るスタック型バーコード読取方法では、座標変換に伴う量子化誤差の影響を緩和するため、座標変換後の画像に対して、平滑化を目的として補間処理又は平均化処理を行う。具体的には、各画素の輝度値は、
図9(b)や
図12に示すように、スペースを示す輝度値(例えば、100)、バーを示す輝度値(例えば、0)としている。なお、補正画像データは、例えば、メディアンフィルタ、エッジ保存フィルタ、適応ウィナーフィルタ、移動平均フィルタなど各種のフィルタにかけることによって平滑化されている。
【0063】
(構造解析)
図7は、
図5に示すフローチャートにおける構造解析(ステップS34、S35)の流れを示すフローチャートである。
【0064】
図7において、まず、水平射影の処理が行われる(ステップS91)。具体的には、
図3に示すスタック型バーコード21の補正画像データに基づいて、水平方向に配列された画素ごとに、各垂直方向に配列された全画素の輝度値の総和を演算し、画像メモリ12に格納する処理である。
【0065】
その後、求めた輝度値の総和について、水平方向に隣接する画素間で差分をとり、その差分値を用いてスタートパターン及びストップパターンの解析が行われる(ステップS92)。
【0066】
図3等に示すように、スタートパターンとストップパターンは、他のデータカラム、レフトロウインジケータ、ライトロウインジケータのコードワードと異なり、すべてのロウ(この実施の形態1では、6行)に共通不変のパターンであることから、水平射影をとることでスタートパターン又はストップパターンが平均化され、輝度むらや汚れ等の影響を受けにくく、安定した検出が可能となる。
【0067】
図8は、補正画像データ(
図3参照)に所定の処理を施して得られた図である。より具体的には、
図8(a)は、補正画像データ(
図3参照)について、垂直方向における画素ごとに射影を計算したものであり、
図3で言えば、スタック型バーコード21のロウ方向に、全画素の輝度値の総和を示す分布である。また、
図8(b)は、
図8(a)のグラフについて差分を計算したものである。具体的には、画像メモリ12に格納された画像データの水平方向において隣接する画素間で、求めた輝度値の総和の差分をとり、その差分値の分布を表したものである。これにより、水平ラインL(i)上で、バー(またはスペース)からスペース(またはバー)に変化した画素の位置を検出することができる。
【0068】
スタートパターンの検出は、
図8(a)又は
図8(b)に示されるグラフを用いて、バーとスペースが変化する点の間隔(ランレングス)(以下、「線幅」という)を計測する。本実施の形態では、水平方向における画素数で計数(カウント)することによって行われる。例えば、スタートパターンの各バーの線幅、各スペースの線幅を計測すると、StartWork=[47,6,5,6,7,6,6,18]に示すような線幅配列が求められる。一方で、スタートパターンのバーとスペースの長さの比は、PDF417の規格より、StartMark=[8,1,1,1,1,1,1,3]に示すような線幅配列となっている。ここで、両者の類似性を調べる指標として、例えば、正規化相関Rを用いることができる。
図8(b)について、正規化相関Rを考えると、R=corrcoef(StartWork,StartMark)=0.9993となり、Rは十分1に近い。したがって、この場合には、適切にスタートパターンが検出されたと判定される。なお、ストップパターンの正規化相関Rについての説明は、スタートパターンと同様であるので、ここでの説明は省略する。
【0069】
なお、この実施の形態1では、類似性の尺度として、正規化相関Rを用いることとしたが、本発明はこれに限られず、例えば差分絶対値和、積和などを適宜用いてもよい。
【0070】
このようにして、スタート/ストップパターンが適切に検出されたか否かが判断された後(ステップS93)、スタート/ストップパターンが適切に検出されたと判定された場合には、処理をステップS95に移す。一方で、スタート/ストップパターンが適切に検出されていないと判定された場合には、デコード不可、すなわち、復号できないとして処理を終了する(ステップS94)。
【0071】
次いで、
図8(b)のグラフに関して、ピーク検出が行われる(ステップS95)。より具体的には、
図3に示すように、スタートパターン、レフトロウインジケータ、データカラム、ライトロウインジケータ、ストップパターンは、各カラムの境界では、すべてのロウにおいてスペースからバーへの遷移が行われるため、水平射影の差分値の分布上、この部分で大きな差分値が現れる(
図8(b)の上向き矢印)。そして、
図8(b)の上向き矢印で示した差分値(ピーク値)を求めるには、適当な閾値を用意して、その閾値を超えたか超えないかでピークの有無を判定することができる。ピークと判断された場合には、ピーク値をもつ画素の位置を画像メモリ12に記憶させる。
【0072】
次いで、カラムの境界の検出が行われる(ステップS96)。より具体的には、ステップS95において記憶されたピーク値をもつ画素の位置に基づき、スタートパターン、レフトロウインジケータ、データカラム、ライトロウインジケータストップパターンの5つのカラムの境界を検出する。また、隣接するピーク値をもつ画素の間隔はカラムの幅を表すものであり、同様に画像メモリ12に記憶しておく。ここで、ある特定のロウにおいてこの境界近傍に汚れがあった場合、各ロウの走査中に各カラムの境界を示す変化点を正しく検出できない場合があるが、この実施の形態1のように、水平射影を用いることで、この汚れの影響が平均化作用によって小さくなり、各カラムの境界の検出への悪影響を抑えることができる。
【0073】
次いで、ロウの境界の検出が行われる(ステップS97)。より具体的には、
図9及び
図10を用いて説明する。
図9は、平均化された補正画像データの水平方向において、各ラインLの輝度値を示す波形図である。
図10は、スタック型バーコード21の各ロウの区切りを特定する様子を説明するための説明図である。なお、この実施の形態1では、1ラインLは、1行×n列の行列である。ここで、nは評価範囲の幅である。
【0074】
図9(a)において、ロウの境界の検出は、まず、補正画像データ上に、連続する複数のラインLからなる組を設定する。例えば、連続する3個のラインL(1)、L(2)およびL(3)(以下、「L1、L2およびL3と略す」)からなる組(ライン組S1)を設定する(
図10参照)。なお、この実施の形態1では、連続する3個のラインLを設定しているが、3個に限定されるものではない。
【0075】
そして、これらの3本のラインLについて任意の2本を選び、それらの正規化相関を求めると、全部で3個(L1とL2、L1とL3、L2とL3)の相関値が得られる。これら3個の相関値のうちの最も小さい値が、予め決められた閾値r0よりも大きければ、L1、L2、L3の(ラインLの各画素の輝度値を示す)波形はお互いに相関していると判断し、このライン組S1に1が与えられる(
図10参照)。これに対し、予め決められた閾値r0よりも小さければ、最も小さい値が得られた2つのラインLの波形は、少なくとも相関していないと判断し、このライン組S1に0が与えられる。
【0076】
例えば、水平方向に形成されたラインL1、L2及びL3からなる組については、
図9(b)に示すように、ラインL1、L2及びL3がすべて同じロウ1(最も上のロウ)に含まれていることから、3個の相関値のうちの最も小さい値は閾値r0よりも大きくなり、1が与えられることになる(
図10において、ライン組S1の判定値は1となっている)。
【0077】
次に、補正画像データに対して、上述した組を相対的にロウ方向(垂直方向)に移動させて(例えばL2、L3およびL4からなるライン組S2を考えて)、相関値列を算出し、算出された相関値列の最小値が閾値r0よりも大きいか否かを判断することによって、そのライン組に0または1の判定値が与えられる。
【0078】
以下同様に、ラインLn−2、Ln−1、Ln(ライン組Sn−2)まで上述した処理(判定値を与える処理)を繰り返し行うと、全部でn−2個の1と0とからなる系列が得られる(
図10の右欄)。
【0079】
ここで、3個のラインLが同一のロウから選ばれている場合は、それら3個のラインLよりなるライン組は1に近い値となり、3個のラインLが隣接するロウをまたいで選ばれている場合は、それら3個のラインLよりなるライン組は比較的小さい値となる。より具体的には、
図9(b)において、ラインL18より上のラインLはロウ1に属し、ラインL18より下のラインLはロウ2に属し、このラインL18は、ロウ1とロウ2の境界に位置するラインLとなっている。
【0080】
したがって、このラインL18を含むライン組S16〜S18では、判定値がほぼ0となり、それ以外のライン組では、判定値は1となる(
図10参照)。判定値が0に近いライン組は、ロウの切り替わり位置を表しているので、判定値の系列を走査して、その判定値が0に近い場所を特定することにより、ロウの切り替わり位置を知ることができる。なお、この実施の形態1では、相関関数によってラインL相互の類似性を評価しているので、
図9(a)に示すように、スタートパターンやストップパターンのような各ロウにおいて共通パターン(バーおよびスペースの線幅が同じ)を除いた範囲を評価範囲とすることで、無駄な演算(計算コスト)を省くことができる。
【0081】
以上説明したように、ライン組の設定→相関値列の算出→相関値列の最小値と閾値との比較→0又は1の判定値付与→判定値の系列の走査という流れによって、ステップS97のロウの境界の検出が行われる。この実施の形態1では、ロウ1からロウ6の最終ラインLまで行なわれる。
【0082】
ロウの境界の検出によって、補正画像データの各ラインLがどのロウに属するかを判定し、復号(デコード)可能として処理を終了する(ステップS98)。
【0083】
また、この実施の形態1では、ロウごとに、それに含まれる複数のラインLの各点の輝度値の平均を計算することによって、ラインLの局所ノイズを低減することができる。さらに、平均した画素の輝度値を用いて、そのロウの特性を代表するものとして、後述する復号処理に用いることができる。これにより、復号(デコード)精度を向上させることができる。
【0084】
(復号)
次に、スタック型バーコード21の復号処理について説明する。
【0085】
(低レベル復号)
図11は、
図5に示すフローチャートにおける低レベル復号(ステップS36)の流れを示すフローチャートである。
【0086】
この低レベル復号は、
図11に示すように、スタック型バーコード21の各ロウの走査反射特性について、カラム解析で決定されたカラムの境界を両端とするセグメント(すなわち、走査反射率波形)を取り出し、1つのカラムを構成するバーの線幅とスペースの線幅との配列によって形成されるXシーケンスと呼ばれる数値列を求めるXシーケンス計測と、Xシーケンスの隣接する2つのバー及びスペースを1つずつシフトさせながら足し合わせてTシーケンスと呼ばれる数値列を求めるTシーケンス計測と、予め用意しておいたコードワード変換テーブルを参照して各Tシーケンスに対応するコードワードを決定するコードワード変換とからなる。
【0087】
(低レベル復号におけるXシーケンス計測)
スタック型バーコード21の一種であるPDF417では、低レベル復号処理および高レベル復号処理の2つの復号処理が行なわれ、低レベル復号処理は、1つのカラムを構成するバーの線幅とスペースの線幅とからなるデータカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に一度変換される処理である。次に、高レベル復号処理は、929個のコードで示される中間情報に一度変換された後、所定ルールに基づいて最終言語に復号(デコード)されるようになっている。この最終言語としては、PDF417では、ASCII文字やバイナリ表現、その他のキャラクタ等がある。
【0088】
図11において、まず、低レベル復号部13d1のXシーケンス計測部14は、Xシーケンス計測処理を行う(ステップS131)。一般的なXシーケンス計測処理においては、Xシーケンス計測部14の線幅計測手段14bは、各ロウにおいて、ロウに含まれる複数のラインLを平均化したライン波形を走査して、バーの線幅及びスペースの線幅を求める線幅計測を行った後に、画素数によって表現されている線幅をモジュール数表現に変換して、Xシーケンスを得る。なお、走査線は、例えば、各ロウにおいて、ロウ方向のほぼ真中に形成された複数のラインLであり、すなわち、複数行で構成された画素の行例である。さらに、複数のラインLを構成する画素の輝度値の平均を計算し、平均した画素の輝度値を用いて、そのロウにおける画素の輝度値を示す走査反射率波形として復号処理に用いる。
【0089】
図12は、あるロウにおいて、ロウに含まれる複数のラインLを平均化したライン波形を走査して得られた、画素の輝度値を示す走査反射率波形の一部を示す波形図である。なお、バーの線幅及びスペースの線幅は、画素の輝度値を示す走査反射率波形の変化点と変化点の間の画素数をカウントしたものである。ここで、変化点は、画素の輝度値を示す走査反射率波形上で、図示しない所定の閾値と交差する点を示している。スタック型バーコード21の符合体系の一種であるPDF417において、
図3等に示すように、スタートパターン、レフトロウインジケータ、データカラム、ライトロウインジケータ、ストップパターンの5つのカラムから構成されている。さらに、ストップパターンを除く各カラムは、4個のバーと4個のスペースで構成されるため、画素の輝度値を示す走査反射率波形に損傷がない場合には、合計8個の線幅が得られる。
【0090】
一方で、画素の輝度値を示す走査反射率波形に異常がある場合には、合計8個以上(9個)の線幅が得られる。かかる場合には、カラムに損傷があることが分かり、このカラムの信頼性が低いことを示すフラグをセットする。かかる操作をあるロウに含まれるカラムすべてについて実行したら、次のロウにおいても同様の処理を実行する。すべてのロウについて、線幅が得られたら、ステップS131(
図11参照)のXシーケンス計測処理を終了する。
【0091】
(低レベル復号におけるTシーケンス計測)
次に、低レベル復号部13d1のTシーケンス計測部15は、Tシーケンス計測処理を行う(ステップS132)。
【0092】
具体的には、Tシーケンス計測部15のシーケンス変換手段15aは、XシーケンスをTシーケンスに変換する。これは、隣接する2個のXiとXi+1を加算したものであり、
図12に示す左側のカラム(データカラム)のXシーケンスをTシーケンスに変換すると、[6(5+1),2(1+1),2(1+1),2(1+1),2(1+1),6(1+5),7(5+2)]に示すような線幅配列となる。
【0093】
次いで、Tシーケンス計測部15の線幅正規化手段15bは、線幅正規化処理を行う。この線幅正規化処理は、計測されたバーの線幅とスペースの線幅とを表す画素数によって表現されている線幅をモジュール数表現に変換する処理をいう。1モジュールは、バー又はスペースの最小幅に対応する。具体的には、スタック型バーコード21の一種であるPDF417において、データカラムを含む1カラムは17モジュールによって構成されている。1カラム内の線幅をW1,W2,W3,W4,W5,W6,W7,W8とし、
Wc=W1+W2+W3+W4+W5+W6+W7+W8とすれば、
正規化線幅は、Xi=Wi*17/Wc(i=1,2,…,7,8)で表されるXシーケンスとなる。例えば、
図12に示す左側のカラム(データカラム)のXシーケンスは、[5,1,1,1,1,1,5,2](これらの総和は17、すなわち、上記した17モジュールを示す)に示すような線幅配列である。
【0094】
次に、Tシーケンス計測部15の判定手段15cは、線幅正規化されたTシーケンスより計算したクラスタ番号が理論値に一致するか否かを判定する。
【0095】
(低レベル復号におけるコードワード変換)
最後に、低レベル復号部13d1のコードワード変換部16は、コードワード変換を行う(ステップS133)。より具体的には、コードワード変換テーブルが格納されているテーブルメモリ16aから読み出し、このテーブルメモリ16aを参照することにより、ステップS132において求められたTシーケンスに対応するコードワードを取得する。すなわち、低レベル復号処理が行なわれ、1つのカラムを構成する4個のバーの線幅と4個のスペースの線幅でなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に一度変換される。
【0096】
ここで、この実施の形態1においては、Xシーケンス計測処理(ステップS131)において、閾値方式及び2次微分方式から得られる複数のXシーケンスから最適なものを選択できるようにしている。
【0097】
(閾値方式について)
図14は、あるロウにおいて、ロウに含まれる複数のラ
インLを平均化したライン波形を走査して得られた、各画素の輝度値を示す走査反射率波形の一部を取り出した図であり、スタック型バーコード21のあるロウとあるカラムに対応している。各画素の輝度値が第1の(固定)閾値AVより高い値か低い値かでバーかスペースかを判定し、具体的には、あるカラムの始点XSから終点XEまでの間に、バーとスペースの合計個数が8個になればXシーケンスは有効である。
図14の例では、第1の(固定)閾値AVに基づいてXシーケンス(バーの線幅とスペースの線幅)を計測し、Xシーケンス[12,6,3,18,3,4,12,11]に示すような線幅配列が得られた。ここで、第1の(固定)閾値AVは、あるロウにおけるあるカラムにおいて、平均化したライン波形を走査して得られたバー及びスペースの線幅からなる全画像データの平均値である。具体的には、
図14に示すロウとカラムにおいて、計測された全画素の輝度値を加算し、その加算値を全画素数で除算した値、すなわち、1画素あたりの平均輝度値を(固定)閾値AVとしている。そのため、第1の(固定)閾値AVは、
図14に示すように、一定の値となっている。このように、第1の(固定)閾値AVは、一度の処理で求めることができるので、処理時間を短縮することが可能となる。
【0098】
(n次微分方式について)
図15は、n次微分方式を説明するための図である。
図15(a)は、あるロウにおいて、ロウに含まれる複数のラインLを平均化したライン波形を走査して得られた、各画素の輝度値を示す走査反射波形の一部を取り出した図である。
図15(b)は、(a)に示す走査反射波形を1次微分した輝度値の差分を示す波形図であり、
図15(c)は、(b)の波形をさらに微分(2次微分)した輝度値の差分を示す波形図である。
【0099】
2次微分方式とは、各画素の輝度値を示す走査反射率波形を2次微分して2次微分値を求め、この2次微分値のゼロクロス点(つまり、元の波形の変曲点)をバーとスペースとの境界とする方式である。この2次微分方式は、閾値方式のように、分解能の影響を受けやすい波形のピークを検出する方法に比べて、波形の変化点を求めることでバーとスペースとの境界を求めるようにしているので、処理が簡単になるという利点がある。なお、
図15(a)に示す走査反射率波形の分解能が、
図14に示す走査反射率波形の分解能に比べて低い場合となっている。
【0100】
(Xシーケンス計測処理について)
図13は、Xシーケンス計測処理(
図11のステップS131)の流れを示すフローチャートである。このXシーケンス計測処理においては、上述したように、あるロウにおいて、ロウに含まれる複数のラインLを平均化したライン波形を走査して、計測された各画素の輝度値が、所定の閾値Thより高い値であれば、スペースと判定するとともに、各画素の輝度値が、閾値Thより低い値であれば、バーと判定することにより、バーかスペースかの判定を行う。さらに、このような判定に基づいて、バーの線幅と、スペースの線幅とを計測し、線幅を作成する。スタック型バーコード21におけるデータカラムは4個のバーと4個のスペースと、バー及びスペースの合計個数は8個であるから、走査反射率波形と固定閾値AVとの隣接する交点間で形成される線幅の合計個数が8個になるまで処理を繰り返し、閾値Thを変動させていく。
【0101】
この実施の形態1では、
図13に示すように、まず、固定閾値算出手段14a1が、(固定)閾値方式によってXシーケンスを求める(ステップS151〜ステップS158)。
【0102】
すなわち、I=1のときに、閾値Thとして第1の固定閾値AVを設定する(ステップS151)。なお、固定閾値AVの説明は後述する。
【0103】
次いで、第1の(固定)閾値Th=AVのときのXシーケンスを計測し(ステップS152)、そのときのバー及びスペースの合計個数が8個か否かを判断する(ステップS153)。ステップS153において、合計個数が8個と判断した場合は、Xシーケンス計測は成功したものとして、このときのXシーケンスを有効化し(ステップS154)、これをXシーケンス1として保存する(ステップS158)。一方、ステップS153において、合計個数が8個でないと判断した場合は、規定回数I(Iは2以上の整数)の処理を繰り返したか否か、例えば、I=3に到達したか否かを判断する(ステップS155)。
【0104】
ステップS155においてI=3でないと判断した場合は、規定回数Iに1をインクリメントし、この実施の形態1では、第1の(固定)閾値ThからAV/4を減じた第2の(固定)閾値Thを設定して(ステップS156)、ステップS152およびステップS153の処理を繰り返す。なお、
図14において、符号L1は第n−1の(固定)閾値ThからAV/4を引いた第nの(固定)閾値Thを示している。また、AV/4は経験則から決めた値であり、これに限定されるものではない。
【0105】
新たに求めた第2の(固定)閾値Thに基づいて、Xシーケンスを再度計測し(ステップS152)、合計個数が8個と判断されればXシーケンスは有効とし(ステップS154)、合計個数が8個と判断されなければ、規定回数I=3でないので(ステップS155)、Iに1をインクリメントし、第2の(固定)閾値Thから、さらにAV/4を減じた新たな第3の(固定)閾値Thを設定して(ステップS156)、第3の(固定)閾値Thに基づいてXシーケンスの再度計測を行う(ステップS152)。この実施の形態1では、規定回数I=3の処理を繰り返しても合計個数が8個と判断されなければ、Xシーケンスは無効とし(ステップS157)、これをXシーケンス1として保存する(ステップS158)。
【0106】
こうして(固定)閾値方式によるXシーケンス計測処理が終わったところで、今度は、n次微分算出手段14a3が、2次微分方式によってXシーケンスを求める(ステップS159〜ステップS166)。
【0107】
すなわち、I=1のときに、ゼロクロス点SLを設定する(ステップS159)。
【0108】
次いで、このときのXシーケンスを計測し(ステップS160)、そのときの合計個数が8個か否かを判断する(ステップS161)。ステップS161において、合計個数が8個と判断した場合は、Xシーケンス計測は成功したものとして、このときのXシーケンスを有効化し(ステップS162)、これをXシーケンス2として保存する(ステップS166)。一方、ステップS161において、合計個数が8個でないと判断した場合は、規定回数I(Iは2以上の整数)の処理を繰り返したか否か、例えば、I=3に到達したか否かを判断する(ステップS163)。
【0109】
ステップS163においてI=3でないと判断した場合は、規定回数Iに1をインクリメントするとともに、ゼロクロス点SLに1をインクリメントして(ステップS164)、ステップS160およびステップS161の処理を繰り返す。
【0110】
新たに求めたゼロクロス点SLに基づいて、Xシーケンスを再度計測し(ステップS160)、合計個数が8個と判断されればXシーケンスは有効とし(ステップS162)、合計個数が8個と判断されなければ、規定回数I=3でないので(ステップS163)、Iに1をインクリメントするとともに、ゼロクロス点(を示すライン)SLに1をインクリメントして(ステップS164)第2のゼロクロス(を示すライン)SL2を算出し、この第2のゼロクロス点(を示すライン)SL2に基づいてXシーケンスの再度計測を行う(ステップS160)。この実施の形態1では、規定回数I=3の処理を繰り返しても合計個数が8個と判断されなければ、Xシーケンスは無効とし(ステップS165)、これをXシーケンス2として保存する(ステップS166)。なお、インクリメントする数は、1としているがこれに限定されるものではない。
【0111】
(Tシーケンス計測処理について)
図16a及び
図16bは、この実施の形態1におけるTシーケンス計測処理(
図11のステップS132)の流れを示すフローチャートである。
図16a及び
図16bに示すように、2次微分方式によるXシーケンス計測処理を終了後、固定閾値方式によるXシーケンス計測処理を実行する。すなわち、本実施の形態では、2つの方式によるXシーケンス計測処理による結果を記憶する。
【0112】
このTシーケンス計測処理においては、Tシーケンス計測部15のシーケンス変換手段15aが、Xシーケンス1(固定閾値方式から得られたXシーケンス)及びXシーケンス2(2次微分方式から得られたXシーケンス)をそれぞれTシーケンスに変換し、Tシーケンス計測部15の線幅正規化手段15bが、これらのTシーケンスの線幅を正規化し、Tシーケンス計測部15の判定手段15cが、それぞれのTシーケンスより計算したクラスタ番号とクラスタの理論値とを比較する。そして、両者が等しければ、そのTシーケンスを有効とし、両者が等しくなければ、そのTシーケンスを無効とする。
【0113】
ここで、クラスタ番号とは、
図3に示すスタック型バーコード21において、誤り発生の確率を最小にするために用意されているもので、スタートパターン及びストップパターン以外のすべてのコードワードに存在している。具体的には、PDF417の規格により、クラスタ番号は3行目ごとに順次繰り返し現れ、ロウ1にはクラスタ番号「0」、ロウ2にはクラスタ番号「3」、ロウ3にはクラスタ番号「6」が使われている。換言すれば、このクラスタ番号「0」、「3」、「6」は、クラスタ番号の理論値となっている。
【0115】
まず、2次微分方式によって得たXシーケンス2を取り出し(ステップS171)、Tシーケンスに変換する(ステップS172)。これは、X=[Xi,Xi+1,Xi+2,・・・]において、隣接する2個のXiとXi+1を加算したものであり、2次微分方式によって得たXシーケンス2、例えば、
図15(c)に示す走査反射率波形より、X=[12,5,5,16,4,4,12,10]を計測し、このXをTシーケンスに変換すると、T=[17,10,21,20,8,16,22]に示すような線幅配列となる。
【0116】
次いで、Tシーケンスより、クラスタ番号を計算する(ステップS173)。クラスタの計算は、まず、TシーケンスをTN(i)=T(i)*17/Wc(i=0,1,・・・,7)で正規化する。上の例では、TN=[4,3,5,5,2、4]に示すような線幅配列となる。次に、クラスタ番号K=(TN(0)−TN(1)+TN(4)−TN(5)+9)mod9(ただし、「mod9」は9で除した後の剰余を意味する。)で表される式により、クラスタ番号Kを計算する。上の例では、K=(4−3+2−4+9)mod9=8となる。
【0117】
次いで、ステップS173において計算されたクラスタ番号は処理中のロウに対応するクラスタ番号の理論値に等しいか否かを判断する(ステップS174)。処理中のロウがスタック型バーコード21の第1行目であるとすると、クラスタの理論値は「0」である。したがって、クラスタ番号「8」は、クラスタ番号の理論値「0」と一致しないため、Tシーケンスを無効とする(ステップS176)。一方、クラスタ番号が理論値と一致していれば、Tシーケンスを有効とし(ステップS175)、これをTシーケンス2として保存する(ステップS177)。
【0118】
こうして、2次微分方式によるXシーケンス計測処理が終わったところで、今度は、(固定)閾値方式によるXシーケンス計測処理を実行する。
【0119】
図16bにおいて、(固定)閾値方式によって得たXシーケンス1を取り出し(ステップS178)、Tシーケンスに変換する(ステップS179)。(固定)閾値方式によって得たXシーケンス1、例えば、
図14に示す走査反射率波形より、X=[12,6,3,18,3,4,12,11]を計測し、そのXを、Tシーケンスに変換すると、T=[18,9,21,21,7,16,23]となる。
【0120】
次いで、Tシーケンスより、クラスタ番号を計算する(ステップS180)。上の例では、TN=[4,2,5,5,2,4]と正規化され、K=(4−2+2−4+9)mod9=0となる。
【0121】
次いで、ステップS173において計算されたクラスタは処理中のロウに対応するクラスタの理論値に等しいか否かを判断する(ステップS181)。上の例では、クラスタ番号「0」とクラスタ番号の理論値「0」が一致しているため、Tシーケンスを有効とする(ステップS182)。一方、クラスタ番号と理論値が一致していない場合は、Tシーケンスを無効とし(ステップS183)、これをTシーケンス1として保存する(ステップS184)。
【0122】
このように、この実施の形態1においては、固定閾値方式及び2次微分方式の2種類の低レベル復号方式を備え、撮像光学系の分解能の高低に応じて、これらを使い分けることにより、たとえスタック型バーコード21の走査反射率波形が変動しても、最適なXシーケンス(Xシーケンス1又はXシーケンス2)及びTシーケンス(Tシーケンス1又はTシーケンス2)を得ることができる。
【0123】
適当なXシーケンス及びTシーケンスが得られると、低レベル復号処理が行なわれ、コードワード変換処理(
図11のステップS133)が行われる。具体的には、保存されたTシーケンス1及びTシーケンス2のそれぞれについて、各Tシーケンスに対応するコードワードを所定の変換テーブルから取得する。すなわち、低レベル復号処理が行なわれ、1つのカラムを構成する4個のバーの線幅と4個のスペースの線幅でなるコードワードは0〜928の番号が付けられた、929個のコードで示される中間情報に一度変換される。
【0124】
(高レベル復号)
コードワード変換が完了すると、一般的な高レベル復号が行われて(
図5のステップS37)、復号処理が完了する。
【0125】
図20は、同実施の形態1に係るスタック型バーコード読取装置の高レベル復号部のブロック図である。
図21は、
図5に示すフローチャートにおける高レベル復号の流れを示すフローチャートである。
【0126】
高レベル復号部13d2は、誤り訂正部17aとデータ復号部17bとを備えている。
[1]まず、2次微分方式で求めたTシーケンス結果に基づいてコードワード変換されたデータについて、誤り訂正処理を実施する(ステップS141)。
[2]この訂正されたデータコードワードをメモリに格納する。
[3]誤り訂正した数(エラー数)をカウントし、エラー数をメモリに格納する。
なお[1]で訂正できなかった場合は、復号不可能として、処理を終了する。
誤り訂正コードを用いた具体的な処理には、PDF417で一般的な処理方法を用いるが、例えば、特開平8−255208号に記載された方法を用いることができる。
【0127】
[4]次に、固定閾値方式で求めたTシーケンス結果に基づいてコードワード変換されたデータについて、誤り訂正処理を実施する。
[5]この訂正されたデータコードワードをメモリに格納する。
[6]誤り訂正した数(エラー数)をカウントし、エラー数をメモリに格納する。
なお、[4]で訂正できなかった場合は、復号不可能として、処理を終了する。
【0128】
そして、データ復号処理を実行する(ステップS142)。
【0129】
なお、上述しているが、スタック型バーコード21、すなわち、本実施の形態ではPDF417は、左右両側のスタートパターン(コードワード)とストップパターン(コードワード)との間に、白のスペースと黒のバーとが並ぶデータコードワードを複数段重ねて構成されている。そして、データコードワードを構成する1コードワードは、PDF417の場合、4つのスペースと4つのバーからなり、これらの合計モジュールは17モジュールである。
【0130】
また、復号処理が完了したデータ訂正されたデータコードワードについては、スタック型バーコード情報などとともに上位制御装置に出力されることになる。具体的には、高レベル復号処理は、0〜928の番号が付けられた、929個のコードで示される中間情報に一度変換された後、所定ルールに基づいて最終言語に復号(デコード)されるようになっている。この最終言語としては、PDF417では、ASCII文字やバイナリ表現、その他のキャラクタ等がある。
データ復号処理については、PDF417で一般的な処理方法を用いるが、例えば、特開平3−204793号公報や特開平5−290204号公報に記載された方法などを用いることができる。
【0131】
なお、より詳細に誤り訂正について説明すると、スタック型バーコード21にはリードソロモン符号による誤り訂正が使用されている。このリードソロモン符号による誤り訂正では、元データにその一部が破損しても復元できるような符号理論を駆使した誤り訂正コードを加えて、データ領域に配置している。これにより、コードの位置が汚れたり欠けたりしても、元のデータを復元できる。
【0132】
本実施の形態に係るスタック型バーコード読取方法では、一般的に知られている誤り訂正アルゴリズムを用いることで、誤り訂正の情報も出力できるようにしている。
[1]スタック型バーコードから得られたデータを元にシンドロームの演算を行なう。ここで、シンドロームとは、誤りの有無を検出する演算子であり、誤りがない場合には全てのシンドローム値が0の値をもつ。
[2]誤り位置多項式用の変数を求める。
[3]誤り位置多項式を解くことにより、誤り位置が検出される。
[4]誤り位置に対応する誤りの値を求める。
[5]誤りの位置からそれに対応する値を差し引くことで誤りが訂正される。
【0133】
さらに、詳細に説明すると、スタック型バーコード21には、スタック型バーコード21の汚れや、破損などにより、不具合(誤り)と判断されたコードワードについて、その誤り訂正データを用いて解読されたデータが書き込まれるようになっている。
【0134】
ここで、スタック型バーコード21の構成、不具合の推定および不具合があった場合の誤り訂正の方式について説明する。まず、スタック型バーコード21は
図3、18に示すように二次元的な広がりを持っている。
【0135】
スタック型バーコード読取装置1では、取り込んだスタック型バーコード21の画像に不具合がある場合には、スタック型バーコード21に含まれる誤り訂正データを用いて誤り訂正を行うことが行われる。ここで、画像の不具合とは、スタック型バーコード21自体の汚れや破損などによってスタック型バーコード21の画像の一部が正しく読み取れなくなっている状態をいう。
【0136】
一般に、スタック型バーコード21には高度な訂正能力を有する誤り訂正符号が用いられている。スタック型バーコード21では、
図18に示すように、データコードワード域と誤り訂正域とに分割され、リードソロモン符号化されている。ここで、誤り訂正ブロックはRS符号化のための冗長データである。なお、データブロックおよび誤り訂正ブロックは、コードワードと呼ばれる、4つのバーと4つのスペースで17モジュールの情報が1単位になって構成されている。また、誤り訂正域には、少なくとも2つの誤り検出コードワードC0及びC1とを含む。これら2つの誤り検出コードワードは一緒になって2コードワード長の検査合計を形成する。スタック型バーコード21(PDF417)は誤り訂正能力を持たせてデータを符号化することもできる。
【0137】
このようなスタック型バーコード21についての一般的な誤り訂正についてより詳細に説明する。誤り訂正には、検出訂正と消失訂正の2種類の方式が存在する。検出訂正は、大きく以下の3つのステップから構成される。
[1]符号からシンドローム多項式を求める。
[2]シンドローム多項式から誤り位置多項式および誤り数値多項式を求める。
[3]誤り位置多項式からチェンサーチ法により誤り位置を求め、その位置に対する誤りの大きさ(誤りパターン)を求めて誤り訂正を行う。
【0138】
スタック型バーコード21の例で言えば、符号化ブロックからシンドローム多項式を求め、シンドローム多項式から誤り位置多項式および誤り数値多項式を求める。そして、誤り位置多項式から誤り位置としてのコードワードを特定し、そのコードワードの誤りの大きさを求めて誤り訂正を行うというものである。
【0139】
一方、消失訂正方式は、誤りである符号の位置(消失位置)、すなわち誤りのあるコードワードが予め分かっていることを前提として、誤りの大きさのみを求めて誤り訂正を行うものである。この消失訂正は、大きくは次の3つのステップから構成される。
[1]符号からシンドローム多項式を求める。
[2]消失位置から得られる消失多項式を用い、シンドローム多項式を修正し、消失数値多項式を求める。
[3]消失位置に対して誤りの大きさを求めて誤り訂正を行う。
【0140】
このように消失訂正では、誤り位置が分かっていることを前提として誤りの大きさのみを求めるため、検出訂正とは異なり、シンドローム多項式から求める多項式は消失数値多項式の1つだけとなる。従って、訂正能力は検出訂正の2倍になる。
【0141】
このように、誤り訂正については、上述したリードソロモン符号による方式が多く用いられているが、パリティ(誤り検出符号)を付加してこのパリティにより誤り位置の検出を行い、消失訂正を行って訂正効率を上げるようにしても良い。また、スタック型バーコード21では、白のスペースと黒のバーが交互に分布する。この前提に立てば、白または黒の一方のスペースまたはバーだけで構成されるコードワードブロックは不具合として推定して検出訂正の処理をすることができる。
【0142】
(復号結果選択)
図22は、同実施の形態1に係るスタック型バーコード読取装置の複合結果選択部のブロック図である。
図23は、復号結果選択の流れを示すフローチャートである。
【0143】
復号結果選択部13d3は、カウンタ18aと選択部18bとを備えている。
【0144】
まず、nに1をセットする(ステップS191)。第n番目の閾値算出手段による低レベル復号を行い、コードワードセットCW(n)を得る(ステップS192)。
【0145】
次に、コードワードセットCW(n)を用いて高レベル復号を行い、誤り訂正済みコードワード数EC(n)を得る(ステップS193)。
【0146】
ステップS194においてn=Nでないと判断した場合は、nに1をインクリメントし(ステップS195)、n=NになるまでステップS192及びステップ193の処理を繰り返す。Nは、閾値算出手段14aの個数である。本実施の形態では、閾値算出手段14aとして、2次微分算出手段と固定閾値算出手段を用いているから、N=2である。
【0147】
ステップS194においてn=Nであると判断した場合は、Min(EC(n))を与えるnに対応する復号結果を最終結果として採用する(ステップS196)。
【0148】
本実施の形態において、復号結果の選択は、上述の高レベル復号における上記[3]及び上記[6]で求めた誤り訂正した数(エラー数)を比較し、少ない数の方式を選択する。すなわち、選択した方式でデータ復号処理を行った結果を最終結果として表示する。
【0149】
なお、上記[3]又は上記[6]どちらか一方が、訂正できなかった場合は、訂正できなかった方式では復号不可能として、処理を終了するので、訂正できた方式をそのまま最終結果として表示する。また、上記[3]及び上記[6]の両者とも、訂正できなかった場合は、復号不可能として、処理を終了する。
【0150】
(実施の形態の主な効果)
本実施の形態によれば、復号部13dが異なる手段によってバーとスペースとの境界を求め、低レベル復号13d1と高レベル復号13d2を実行してスタック型バーコード21をキャラクタ情報に復号し、復号結果選択部13d3が誤り訂正の数が少ない復号結果を選択することができる。復号処理できたものでも、そのデータの信頼度には、ばらつきがあるので、そのばらつきを定量的に判断できるようにして、より精度の高い復号処理を行うことが可能である。
【0151】
また、上記したように、復号結果選択部13d3が誤り訂正の数が少ない復号結果を選択するから、走査反射率波形の分解能にかかわらず、最適な復号結果を最終結果として出力することができ、信頼性の高い復号処理系を実現することができる。
【0152】
また、以上説明したように、この実施の形態においては、スタック型バーコード21の走査反射率波形が変動する場合であっても、このスタック型バーコード21を精度よく読み取ることが可能となる。具体的には、撮像光学系の分解能が一定の水準に達している場合には、スタック型バーコード21の走査反射率波形のピーク値を検出することで閾値を決定する(固定)閾値方式による低レベル復号を採択することができる。一方、撮像光学系の分解能が一定の水準に達していない場合には、スタック型バーコード21の走査反射率波形が変動してしまうため、または、正確なピーク値を検出することが難しくなるが、輝度値の差分をとることで、バーとスペースとのエッジ(境界)部分の出力変化を高精度に抽出可能な2次微分方式による低レベル復号を採択することができる。
【0153】
その結果、スタック型バーコード21の走査反射率波形の変動の影響を受けにくく、スタック型バーコード21を精度よく読み取ることが可能となる。
【0154】
また、媒体搬送速度が撮像中に増減する場合でも、両方式((固定)閾値方式及び2次微分方式)の低レベル復号を併用することにより、速度変動に対処しやすくなる利点がある。
【0155】
バーとスペースとの境界を求める手段として、例えば、走査反射率波形の分解能が比較的高い場合に有効な第一の手段(固定閾値算出手段又は/及び局所閾値算出手段)と、走査反射率波形の分解能が比較的低い場合に有効な第二の手段(n次微分値算出手段)とを含ませることにより、走査反射率特性の変動に強いスタック型バーコード読取装置1を構成することができる。
【0156】
さらに、閾値算出手段14aは、画像データを構成する複数の画素の輝度値によってスタック型バーコード21のバーとスペースとの線幅を計測するための閾値を算出する固定閾値算出手段14a1又は/及び局所閾値算出手段14a2と、画像データを構成する複数の画素の輝度値を示す走査反射率波形を微分してn次微分値(nは1又は2)を算出するn次微分値算出手段14a3と、を有することを特徴とする。
【0157】
本実施の形態によれば、画像データを構成する複数の画素の輝度値を示す走査反射率波形の分解能が比較的高い場合に有効な固定閾値算出手段14a1又は局所閾値算出手段14a2と、走査反射率波形の分解能が比較的低い場合に有効なn次微分値算出手段14a3とを有することにより、走査反射率波形が変動した場合でも、より適切な復号結果を選択することができるから、走査反射率特性の変動に強いスタック型バーコード読取装置1を構成することができる。
【0158】
本実施の形態では、n次微分値は2次微分値であり、この2次微分値のゼロクロス点を前記バーと前記スペースとの境界とすることを特徴とする。これにより、2次微分値のゼロクロス点をバーとスペースとの境界とすることにより、画像データを構成する複数の画素の輝度値を示す走査反射率波形の分解能が比較的低い場合でも、走査反射率波形からバー/スペースパターンを正確に生成することができる。
【0159】
さらに、固定閾値算出手段14a1は画像データの平均値に基づく固定閾値を算出し、局所閾値算出手段14a2は画像データにおいて互いに隣接するバー及びスペースの最大ピーク値と最小ピーク値との平均値に基づく局所閾値を算出することを特徴とする。これにより、画像データの全体的な平均値又は局所的な平均値に基づいて閾値を算出することにより、画像データを構成する複数の画素の輝度値を示す走査反射率波形の分解能が比較的高い場合には、計算負荷を小さくして処理速度を向上することができる。
【0160】
また、本実施の形態では、画像データを構成する複数の画素の輝度値を示す走査反射率波形の分解能が比較的高い場合に有効な閾値算出工程と、走査反射率波形の分解能が比較的低い場合に有効なn次微分値算出工程とを有することにより、走査反射率波形が変動した場合でも、より適切な復号結果を選択することができる。復号処理できたものでも、そのデータの信頼度には、ばらつきがあるので、そのばらつきを定量的に判断できるようにして、より精度の高い復号処理方法を行うことが可能である。
【0161】
また、上記したように、復号結果選択部13d3が誤り訂正の数が少ない復号結果を選択するから、走査反射率波形の分解能にかかわらず、最適な復号結果を最終結果として出力することができ、信頼性の高い復号処理系を実現することができる。
【0162】
[発明のその他の実施の形態]
なお、上述した実施の形態1では、スタック型バーコード読取方法の低レベル復号に際して、
図16a及び
図16bに示すように、2次微分方式によるXシーケンス計測処理に基づく低レベル復号(ステップS171〜ステップS177)を実施した後、(固定)閾値方式によるXシーケンス計測処理に基づく低レベル復号(ステップS178〜ステップS184)を実施する場合について説明した。しかし、必要に応じて、これらの順序を入れ替えて、(固定)閾値方式によるXシーケンス計測処理に基づく低レベル復号を実施した後、2次微分方式によるXシーケンス計測処理に基づく低レベル復号を実施するようにしてもよい。
【0163】
また、上述した実施の形態1では、スタック型バーコード読取方法のXシーケンス計測処理を実行する際に、閾値方式として、走査反射波形を構成する各画素の輝度値の平均を求める固定閾値方式を採用する場合について説明したが、固定閾値方式以外の閾値方式(例えば、局所閾値方式など)を代用または併用することもできる。局所閾値方式を採用する場合は、Xシーケンス計測部14の局所閾値算出手段14a2が局所閾値を算出する。この局所閾値方式は、
図17に示すように、画像データにおいて互いに隣接するバー及びスペースの最大ピーク値と最小ピーク値との平均値に基づく局所閾値をバーとスペースとの境界とする方式である。この局所閾値方式は、補正画像データの輝度むらや汚れなどで、ピーク値のばらつきが生じた場合でも、固定閾値方式に比べて、バーとスペースとの線幅を精度よく検出することができるという利点がある。
【0164】
また、上述した実施の形態1では、スタック型バーコード読取方法のXシーケンス計測処理を実行する際に、n次微分方式として2次微分方式(つまり、n=2)を採用する場合について説明したが、2次微分方式に代えて1次微分方式(つまり、n=1)を代用又は併用することもできる。
【0165】
また、上述した実施の形態1では、スタック型バーコード読取方法のスタック型バーコード傾き補正(ステップS33)において、スタック型バーコード21の画像データを傾斜角度ゼロの補正画像データに変換する場合について説明した。しかし、スタック型バーコード21の画像データが傾いていないことが保証されている場合や、スタック型バーコード21の画像データが傾いていても別の角度補正手段によって対処できる場合には、このスタック型バーコード傾き補正を省くことも可能である。
【0166】
また、上述した実施の形態1では、スタック型バーコード21、つまり二次元バーコードの一種について説明したが、一次元バーコードに本発明を同様に適用することもできる。
【0167】
さらに、上述した実施の形態1では、一次元撮像素子やリニア搬送機構との組み合わせに対して本発明を適用することとしたが、本発明はこれに限られることなく、例えば、二次元CCDやCMOSイメージャなどのエリアセンサと被写体支持機構との組み合わせに対して本発明を適用することとしても構わない。