【課題】事前に検出可能な誤りの発生を抑止でき、誤り訂正処理の処理負荷を軽減することが可能なスタック型バーコード読取装置およびスタック型バーコード読取方法を提供する。
【解決手段】復号部133は、スタック型バーコードのバーおよびスペースの線幅を計測するXシーケンス計測部13311と、計測されたスタック型バーコードのバーおよびスペースの線幅から数値列であるTシーケンスを計測するTシーケンス計測部13312と、Tシーケンス計測部13312によって計測されたまたは修正されたTシーケンスに対応するコードワードを取得するコードワード取得部13313と、Tシーケンス計測部によるTシーケンスから得られるクラスタ値CTと理論クラスタ値CRとを比較し、差異が生じた場合に理論クラスタ値とTシーケンスとコードワードとの変換テーブルを用いてTシーケンスを修正するTシーケンス修正部13314と、を有する。
【発明を実施するための形態】
【0017】
以下、本発明の実施形態を図面に関連付けて説明する。
【0018】
図1は、本発明の実施形態に係るスタック型バーコード読取装置の構成例を示す図である。
【0019】
本実施形態に係るスタック型バーコード読取装置10は、カード等の記録媒体20上に固有の情報として付与されたスタック型バーコード(本実施形態ではPDF417)を撮像して得られた画像データを処理することによって、画像データからスタック型バーコード全体を正確に読み取ることが可能に構成されている。
【0020】
スタック型バーコード読取装置10は、
図1に示すように、撮像装置11、記憶部としての画像メモリ12、データ処理部13、および表示部14を主構成要素として有している。
【0021】
撮像装置11は、密着型の一次元撮像素子111、およびカード等の記録媒体20を搬送する搬送機構(搬送ガイドを含む)112を含んで構成されている。撮像装置11の撮像素子111で撮像される記録媒体20には、
図1では、スタック型バーコードの一例としてPDF417のバーコード21が印刷(記録)されている。
【0022】
本実施形態に係るスタック型バーコード読取装置10は、
図1に示すように、スタック型バーコード21が印刷(記録)されている記録媒体20を読取可能である。
なお、
図1において、符号Dは記録媒体20の搬送方向を示している。また、説明を簡単にするために、本実施形態では、搬送方向DはX軸方向としている。また、搬送方向Dに直交する方向をY軸方向としている。
【0023】
撮像素子111として密着型一次元撮像素子を採用して装置の小型化等を図っているが、撮像素子111としては、読み取り対象の記録媒体20のスタック型バーコードを読み取り対象とする二次元のエリアセンサ等を採用することも可能である。また、搬送機構として定速の搬送機構を採用しているが、手動によるものも採用可能である。撮像素子111は、たとえばCCDやCMOSセンサにより形成される。
【0024】
画像メモリ12は、撮像素子111で撮像されたスタック型バーコード21を含む記録媒体20の画像データを記憶(格納)する。なお、この画像メモリ12は、RAM,SDRAM,DDRSDRAM,RDRAMなど、画像データを記憶しうるものであれば如何なるものであってもよい。
【0025】
データ処理部13は、位置検出処理部131、構造解析部132、および復号部133を主構成要素として有している。
【0026】
データ処理部13を構成する各要素は、CPUやROM,RAMといったハードウェアにより実現することができる。また、本実施形態では、データ処理部13は、位置検出処理部131、構造解析部132、および復号部133の3つの主要構成要素を含む形態で構成されているが、たとえば位置検出処理部131を前処理部とし、構造解析部132および復号部133を本処理部として構成することも可能である。
【0027】
位置検出処理部131は、画像メモリ12に格納された画像データを読み込み、その画像データにおけるスタック型バーコード21の位置を検出し、切り出す。
【0028】
本実施形態の位置検出処理部131は、シンボル位置検出部1311、およびシンボル切出部1312を有する。
【0029】
シンボル位置検出部1311は、記録媒体20のデジタル画像を画像メモリ12から読み出して(入力して)スタック型バーコード21の位置を検出する。シンボル位置検出部1311は、位置検出結果をシンボル切出部1312に供給する。
【0030】
シンボル切出部1312は、シンボル位置情報に基づいてスタック型バーコード21のイメージ(像)を切り出す。シンボル切出部1312は、切り出したスタック型バーコード21のイメージ情報を構造解析部132に供給する。
【0031】
構造解析部132は、切り出したスタック型バーコード21の画像データのカラムおよびロウの構造解析を行い、各カラムおよび各ロウの境界位置を特定する。
本実施形態の構造解析部132は、カラム解析部1321およびロウ解析部1322を有する。
カラム解析部1321は、スタック型バーコード21のカラム構造を解析して各カラムの境界位置を特定する。
ロウ解析部1322は、スタック型バーコード21のロウ構造を解析して各ロウの境界位置を特定する。
構造解析部132は、カラム解析部1321の解析結果およびロウ解析部1322の解析結果を復号部133に供給する。
【0032】
復号部133は、構造解析結果に基づき、スタック型バーコードのコード化情報を、たとえばキャラクタ情報に復号する。復号部133の復号結果はたとえば表示部14に表示される。
【0033】
本実施形態では、復号部133においては、低レベル復号処理および高レベル復号処理が行われる。具体的には、PDF417の場合において、低レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に変換される処理である。
次に行われる高レベル復号処理は、929個のコードで示される中間情報に変換された後、所定ルールに基づいて最終言語にデコード(復号)される処理である。この最終言語としては、PDF417では、ASCII文字やバイナリ表現、その他のキャラクタ等がある。
【0034】
本実施形態の復号部133は、低レベル復号部1331および高レベル復号部1332を有する。
低レベル復号部1331は、構造解析部132の解析結果に基づいてコードワードごとにその走査反射率特性(波形)よりバーおよびスペースパターンを生成し、そのパターンからコードワードを特定して、コードワードマトリクスを、高レベル復号部1332に出力する。なお、走査反射率特性(波形)は、たとえば、特開2014−191755号公報に説明されているので、ここでの説明は省略する。
【0035】
より具体的には、本実施形態の低レベル復号部1331は、走査反射率特性(波形)から線幅(エレメント幅)の配列によって形成されるXシーケンスと呼ばれる数値列であるバーおよびスペースパターンを生成し、このXシーケンスを線幅(エレメント幅)の配列によって形成されるバーおよびスペースのTシーケンスに変換する変換機能を有する。
低レベル復号部1331は、変換されたバーおよびスペースのTシーケンスから計算されるクラスタ値CTを、ロウ番号から決まる理論クラスタ値CRと比較するクラスタ比較機能を有する。
低レベル復号部1331は、さらにクラスタ値CTとCRに差異がある場合はその差異の程度に応じてその差異がゼロとなるようにバーおよびスペースシーケンスを修正する線幅(エレメント幅)修正機能を有している。
【0036】
図2は、本実施形態に係る低レベル復号部の要部の構成例を示すブロック図である。
【0037】
図2に示す低レベル復号部1331は、線幅計測部としてのXシーケンス計測部13311、Tシーケンス計測部13312、コードワード取得部13313、およびTシーケンス修正部13314を有している。
図2に示す低レベル復号部1331において、上記変換機能は、Xシーケンス計測部13311およびTシーケンス計測部13312により実現され、クラスタ比較機能および線幅(エレメント幅)修正機能は、Tシーケンス修正部13314により実現される。
【0038】
Xシーケンス計測部13311は、基本的に、画像データを形成する複数の画素値に基づき、スタック型バーコード21のバーおよびスペースの線幅を計測する。
具体的には、Xシーケンス計測部13311は、スタック型バーコード21の各ロウの走査反射特性について、カラム解析部1321で決定されたカラム境界を両端とするセグメント(すなわち部分走査反射特性)を取り出し、このセグメントについてバー(黒色で示す)とスペース(白色で示す)からなる線幅(エレメント幅)の配列によって形成されるXシーケンスと呼ばれる数値列を求める。
【0039】
また、Xシーケンス計測部13311は、測定した線幅を正規化する。
ここでいう正規化とは、画素数によって表現されている線幅(エレメント幅)データをモジュール数表現に変換する処理のことをいう。PDF417ではモジュールは1〜6の値をとる。1モジュールはバーまたはスペースの最小幅に対応する。1カラムは17モジュールによって構成される。
【0040】
Tシーケンス計測部13312は、線幅計測部としてのXシーケンス計測部13311によって計測されたスタック型バーコード21のバーおよびスペースの線幅からTシーケンスを計測する。
具体的には、Tシーケンス計測部13312は、Xシーケンスの隣接する2つのエレメントを1つずつシフトさせながら足し合わせてTシーケンスと呼ばれる数値列を求める。
【0041】
コードワード取得部13313は、Tシーケンス計測部13312によって計測されたTシーケンスまたはTシーケンス修正部13314で修正された修正Tシーケンスに対応するコードワードを取得する。
コードワード取得部13313は、テーブルメモリ133131を有しており、テーブルメモリ133131には、Tシーケンスとコードワードとの対応関係を示すコードワード変換(参照)テーブルが格納されている。
コードワード取得部13313は、テーブルメモリ133131にあらかじめ用意しておいたコードワード変換(参照)テーブルを参照して各Tシーケンスに対応するコードワードを決定する。
また、本実施形態によれば、コードワード取得部13313は、Tシーケンス修正部13314で修正されたTシーケンスに対応するコードワードを参照し、該当するコードワードを取得する。
【0042】
Tシーケンス修正部13314は、Tシーケンス計測部13312によるTシーケンスから算出したクラスタ値CTと理論クラスタ値CRとを比較し、その差異が生じた場合に、理論クラスタ値CRと、Tシーケンスとコードワードとの変換テーブルを用いてTシーケンスを修正する。
また、Tシーケンス修正部13314は、Tシーケンスから得られるクラスタ値CTが理論クラスタ値CRに一致するように、Tシーケンスを修正する。
また、Tシーケンス修正部13314は、異なる数値列となるように修正した複数のTシーケンスからコードワード参照を行う少なくとも一つの有効なTシーケンスを取得する。
また、Tシーケンス修正部13314は、Tシーケンスから得られるクラスタ値CTと理論クラスタ値CRとの差異が±1のときにTシーケンスの修正を行う。
【0043】
図3は、
図2のTシーケンス修正部の構成例を示すブロック図である。
このTシーケンス修正部13314は、比較部133141および修正部133142を有する。
【0044】
比較部133141は、Tシーケンス計測部13312によるTシーケンスから算出したクラスタ値CTと理論クラスタ値CRとを比較し、その結果を修正部133142に出力する。
【0045】
修正部133142は、比較部133141の比較の結果、クラスタ値CTと理論クラスタ値CRとの間に、差異が生じた場合に、理論クラスタ値CRと、Tシーケンスとコードワードとの変換テーブルを用いてTシーケンスを修正する。
【0046】
本実施形態では、クラスタ値CTと理論クラスタ値CRとの差(コードワード差)が±1である場合にTシーケンスに修正をかけるようにしている。
【0047】
ここで、クラスタ値CTと理論クラスタ値CRとの差(コードワード差)がある場合にTシーケンスに修正をかけるようにした構成について述べる。
【0048】
PDF417等のスタック型バーコードは誤り訂正機能を持っている。誤り訂正能力は、スタック型バーコードに組み込まれている誤り訂正コードワードの数が多いほど、より多くの誤りを訂正することができる。誤りの数が誤り訂正能力を超えると誤り訂正できなくなるので、誤りの数は事前にできるだけ少なくしておく必要がある。
【0049】
誤りには、「事前に把握できる誤り」と、「誤り訂正処理の過程で検出できる誤り」とがある。
「事前に把握できる誤り」とは、バーおよびスペース判定の結果得られるXシーケンスまたはTシーケンスに対して、Tシーケンスから計算されるクラスタ値CTに対するコードワードテーブル内を検索したとき、該当するコードワードが存在しないことから顕在化する誤りを指し、PDF417規格では「erasure」と呼ばれる。これは、スタック型バーコードの擦れや、印刷不良により、バーおよびスペースパターンが損傷を受けた場合に生じることが多い。
【0050】
これに対して「事前に把握できない誤り」は、「substitution」と呼ばれ、線幅(エレメント幅)や総モジュール数の条件を満たしていて、コードワードテーブル参照でも該当するコードワードが存在した場合、このコードワードが誤っているかどうかは、わからない。
【0051】
本実施形態においては、事前に把握できる誤りを小さくする構成を採用する。
いま、あるスタック型バーコードを読み取って、1または複数の誤り(Erasure)を含む結果が得られたとする。
上述したように、クラスタ値CTはPDF417規格に基づいて、Tシーケンスから計算されるクラスタ値である。一方、理論クラスタ値CRはコードワードのロウ番号から決定されるクラスタ値である。
【0052】
ここで両クラスタ値に着目する。いまTシーケンスの要素をT[0:5]とすると、クラスタ値CTは次のように定義される。
CT=(T[0]−T[1]+T[4]−T[5]+9)mod 9
【0053】
クラスタ値CTは、走査反射率特性のゆらぎによって線幅(エレメント幅)T[0:5]が変化すると、値が変わってしまう。一方、理論クラスタ値CRはコードワードが存在するロウ番号から決まるので、ロウ番号が正しければ変化することはない。
理論上、クラスタ値CTと理論クラスタ値CRは一致する。しかしクラスタ値CTが「0」,「3」,「6」以外の値の場合、コードワード参照を行うことができなくなるため、この時点で「Erasure」エラーが確定する。
しかし、クラスタ値CTと理論クラスタ値CRの差異が小さければ、クラスタ値CTが理論クラスタ値CRに一致するように、Tシーケンスの線幅(エレメント幅)の要素T[0:5]を調整することにより、コードワード参照を実行できるようにすることができる。
上述したように、本実施形態では、クラスタ値CTと理論クラスタ値CRの差異(コードワード差)が±1である場合にTシーケンスに修正(補正)をかけるようにしている。
【0054】
高レベル復号部1332は、コードワードマトリクスに基づいてエラー訂正を行い、訂正後のコードワードマトリクスよりデータを復号する。
高レベル復号部1332の復号結果はたとえば表示部14に表示される。
【0055】
次に、スタック型バーコード21の一例であるPDF417の構造について説明した後、スタック型バーコード21の具体的な読み取り処理である位置検出処理、傾き補正処理、構造解析処理、および復号処理について説明する。
【0056】
(スタック型バーコード PDF417の構造)
図4は、スタック型バーコード21であるPDF417のラベル構造の画像データの一例を示す図である。なお、このスタック型バーコードPDF417は、ISO/IEC15438として国際規格化されている。
【0057】
図4において、スタック型バーコード21は、図中のY軸方向(垂直方向)をロウ方向(複数のロウが配列されている方向)DR、X軸方向(水平方向)をカラム方向(複数のカラムが配列されている方向)DCとし、カラム方向DCにおいて、5つに大きく分かれている。
すなわち、
図4に示すように、スタック型バーコード21は、5カラムに分かれており、中央にデータカラム211が配置され、また、データカラム211の左右にはレフトロウインジケータ212、ライトロウインジケータ213、さらに、その左右にはスタートパターン214、ストップパターン215が配置されている。
【0058】
また、各カラムを形成するバーコードは、黒い部分のバーBRと白い部分のスペースSPとで構成されており、スタートパターン214、ストップパターン215には、ビッグバーと呼ばれる幅の広いバーがそれぞれ形成されている。ビッグバーBBRは、
図4において、スタートパターン214およびストップパターン215ともに、左側の黒い部分で幅の一番広いバーである。
【0059】
さらに、
図4に示すように、データカラム211、レフトロウインジケータ212、ライトロウインジケータ213は各々、ロウ方向DRに、6行(ロウ1〜ロウ6)から構成されている。各ロウ(行)を構成する3つのカラム(データカラム211、レフトロウインジケータ212、ライトロウインジケータ213)にはそれぞれコードワードが1個ずつ含まれている。
たとえば、スタック型バーコード21のデータカラム211には、1個(データカラム1カラム分)×6行より6個のコードワードが構成されている。
【0060】
なお、コードワードとは、ある数字、文字またはその他のシンボルを表す値、またはこれらに関連付けられた値を符号化するための基本となる単位である。
【0061】
また、ストップパターン215を除く各カラムは、バーBRおよびスペースSPが4個ずつ存在し、各線幅は、モジュール(単位)と称される最小幅の整数倍になっている。また、1コードワードの線幅は17モジュールであり、各々のバーBR、スペースSPの最大単位は6となっている。なお、ストップパターン215は、バーBRが5個、スペースSPが4個ずつ存在し、1コードワードの線幅は18モジュールとなっている。
【0062】
なお、
図4に示すスタック型バーコード21では、1個のデータカラムであるが、これに限定されるものではなく、複数個のデータカラムであってもよい。
【0063】
(スタック型バーコードの読取方法)
次に、本実施形態に係るスタック型バーコードであるPDF417の読取方法について説明する。
【0064】
図5は、本実施形態に係るスタック型バーコードの読取方法の流れを示すフローチャートである。
図5に関連付けて、本実施形態に係るスタック型バーコードの読取方法の流れを概説する。そして概説した後、各処理(ステップST1〜ステップST6)について、それぞれ詳述する。
【0065】
まず、スタック型バーコード21の位置検出が行われる(ステップST1)。具体的には、
図1に示すように、スタック型バーコード読取装置10の撮像素子111は、媒体搬送機構112に沿って所定位置まで移動した記録媒体20のスタック型バーコード21を照射した光の反射光を光電変換によって電気信号に変換して画像データを得る。
そして、得られたスタック型バーコード21の画像データは、画像メモリ12に記憶される。画像メモリ12は二次元的に配列された有限個の画素で構成されている。
本実施形態では、撮像されたスタック型バーコード21の画像データは、各画素の(画素値である)輝度値を数値で表したものである。この輝度値は、たとえば0〜255までの整数値として表される。
【0066】
その後、データ処理部13の位置検出処理部131は、画像メモリ12に記憶された画像データを読み込み、その画像データ中のスタック型バーコード21の位置を検出する。
【0067】
このようにして位置検出されたスタック型バーコード21は、たとえばデータ処理部13において切り出され(ステップST2)、切り出された画像データがたとえば画像メモリ12に記憶される。なお、スタック型バーコード21全体よりも少し大きな矩形状に切出しが行われる。
【0068】
次に、データ処理部13において、構造解析(カラム解析およびロウ解析)が行われる(ステップST3、ST4)。
より具体的には、データ処理部13の構造解析部132は、ステップST2において切出された画像データに基づき、スタック型バーコード21の構造を解析する。構造解析部13においては、カラム解析(ステップST3)およびロウ解析(ステップST4)が行われる。
【0069】
最後に、データ処理部13の復号部133において、復号処理が行われる(ステップST5、ST6)。
より具体的には、データ処理部13の復号部133は、ステップST3、ST4において解析されたスタック型バーコード21の構造に基づき、スタック型バーコード21の復号処理を行う。
【0070】
このとき、スタック型バーコード21の一種であるPDF417では、低レベル復号処理および高レベル復号処理の2つの復号処理が行われ、復号部133の低レベル復号部1331においては低レベル復号処理が行われ(ステップST5)、高レベル復号部1332においては高レベル復号処理が行われる(ステップST6)。
【0071】
低レベル復号処理では、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に変換される。
次に行われる高レベル復号処理では、929個のコードで示される中間情報に変換された後、所定ルールに基づいて最終言語にデコード(復号)される。
【0072】
次に、
図5に示すフローチャートの所要の処理について、それぞれ詳述する。
【0073】
(構造解析)
図5のステップST3、ST4の構造解析処理について説明する。
図6は、
図5に示すフローチャートにおける構造解析処理(ステップST3、ST4)の流れを示すフローチャートである。
【0074】
図6において、構造解析部132では、まず、水平射影の処理が行われる(ステップST21)。
具体的には、スタック型バーコード21の画像データに基づいて、X軸方向(水平方向)に配列された画素ごとに、各Y軸方向(垂直方向)に配列された全画素の輝度値の総和を演算し、画像メモリ12に格納する処理である。
【0075】
その後、求めた輝度値の総和について、X軸方向(水平方向)に隣接する画素間で差分をとり、その差分値を用いてスタートパターン214およびストップパターン215の解析が行われる(ステップST22)。
【0076】
図4等に示すように、スタートパターン214とストップパターン215は、他のデータカラム211、レフトロウインジケータ212、ライトロウインジケータ213のコードワードと異なり、すべてのロウ(本実施形態では、6行)に共通不変のパターンであることから、X軸への射影(水平射影)をとることでスタートパターン214またはストップパターン215が平均化され、輝度むらや汚れ等の影響を受けにくく、安定した検出が可能となる。
【0077】
そして、スタートパターン214およびストップパターン215が適切に検出されたか否かが判断された後(ステップST23)、スタートパターン214およびストップパターン215が適切に検出されたと判定された場合には、処理をステップST25に移行する。
一方、ステップST23において、スタートパターン214およびストップパターン215が適切に検出されていないと判定された場合には、デコード不可、すなわち、復号できないとして処理を終了する(ステップST24)。
【0078】
次いで、ピーク検出が行われる(ステップST25)。
ピークと判断された場合には、ピーク値をもつ画素の位置を画像メモリ12に記憶させる。
【0079】
次いで、カラムの境界の検出が行われる(ステップST26)。
より具体的には、ステップST25において記憶されたピーク値をもつ画素の位置に基づき、スタートパターン214、レフトロウインジケータ212、データカラム211、ライトロウインジケータ213、ストップパターン215の5つのカラムの境界を検出する。
【0080】
次いで、ロウの境界の検出が行われる(ステップST27)。
そして、ロウの境界の検出によって、画像データの各ラインLがどのロウに属するかを判定し、デコード(復号)可能として処理を終了する(ステップST28)。
【0081】
(低レベル復号)
次に、
図5のステップST5の低レベル復号処理について説明する。
図7は、
図5に示すフローチャートにおける低レベル復号処理(ステップST5)の流れを示すフローチャートである。
【0082】
この低レベル復号処理は、
図7に示すように、スタック型バーコード21の各ロウの走査反射特性について、カラム解析で決定されたカラムの境界を両端とするセグメント(すなわち、走査反射率波形)を取り出し、1つのカラムを構成するバーの線幅とスペースの線幅との配列によって形成されるXシーケンスと呼ばれる数値列を求めるXシーケンス計測処理(ステップST31)と、Xシーケンスの隣接する2つのバーおよびスペースを1つずつシフトさせながら足し合わせてTシーケンスと呼ばれる数値列を求めるTシーケンス計測処理(ステップST32)と、予め用意しておいたコードワード変換(参照)テーブルを参照して各Tシーケンスに対応するコードワードを取得(決定)するコードワード取得処理(ステップST33)と、Tシーケンス計測部13312によるTシーケンスから算出したクラスタ値CTと理論クラスタ値CRとを比較し、その差異が生じた場合に、理論クラスタ値CRと、Tシーケンスとコードワードとの変換テーブルを用いてTシーケンスを修正するTシーケンス修正処理(ステップST34)と、を含む。
【0083】
スタック型バーコード21の一種であるPDF417では、低レベル復号処理および高レベル復号処理の2つの復号処理が行われる。具体的には、PDF417の場合において、低レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に変換される処理である。
次に行われる高レベル復号処理は、929個のコードで示される中間情報に変換された後、所定ルールに基づいて最終言語にデコード(復号)される処理である。この最終言語としては、PDF417では、ASCII文字やバイナリ表現、その他のキャラクタ等がある。
【0084】
(低レベル復号におけるXシーケンス計測)
Xシーケンス計測処理においては、各ロウにおいて、ロウに含まれる複数のラインLを平均化したライン波形を走査して、バーの線幅およびスペースの線幅を求める線幅計測を行った後に、画素数によって表現されている線幅をモジュール数表現に変換して、Xシーケンスを得る。
なお、走査線は、たとえば、各ロウにおいて、ロウ方向のほぼ真中に形成された複数のラインLであり、すなわち、複数行で構成された画素の行列である。さらに、複数のラインLを構成する画素の輝度値の平均を計算し、平均した画素の輝度値を用いて、そのロウにおける画素の輝度値を示す走査反射率波形として復号処理に用いる。
【0085】
このように、Xシーケンス計測処理においては、線幅計測が行われる。より具体的には、線幅計測とは、各ロウの画素パターンをスキャンして、バーとスペースの長さ、すなわち線幅を求める処理をいう。
【0086】
(低レベル復号におけるTシーケンス計測)
Xシーケンス計測処理の次に、Tシーケンス計測処理を行う(
図7のステップST32)。
【0087】
具体的には、Tシーケンス計測処理では、XシーケンスX[0:7]をTシーケンスT[0:5]に変換する。これは、隣接する2個のXiとXi+1を加算したものである。
たとえば、XシーケンスX[0:7]=[2,1,1,1,1,3,2,6]がTシーケンスT[0:5]=[3,2,2,2,4,5]の線幅配列に変換される。
【0088】
(低レベル復号におけるコードワード取得)
次に、コードワード取得処理を行う(
図7のステップST33)。
具体的には、テーブルメモリ133131に予め用意しておいたコードワード変換テーブルを参照して各Tシーケンスに対応するコードワードを取得(決定)する。
すなわち、低レベル復号処理が行われ、1つのカラムを構成する4個のバーの線幅と4個のスペースの線幅でなるコードワードが0〜928の番号が付けられた、929個のコードで示される中間情報に変換される。
【0089】
(低レベル復号におけるTシーケンス修正処理)
本実施形態では、コードワード取得処理(ステップST33)を行った後、直ちに高レベル復号処理に移行せずに、Tシーケンス修正処理を行う(ステップST34)。
より具体的には、Tシーケンスから算出したクラスタ値CTと理論クラスタ値CRとを比較し、その差異が生じた場合に、理論クラスタ値CRと、Tシーケンスとコードワードとの変換テーブルを用いてTシーケンスを修正する。
【0090】
すなわち、本実施形態では、クラスタ値CTと理論クラスタ値CRとの差(コードワード差)がある場合にTシーケンスに修正をかけるようにしている。
【0091】
既に述べたように、PDF417等のスタック型バーコードは誤り訂正機能を持っている。誤り訂正能力は、スタック型バーコードに組み込まれている誤り訂正コードワードの数が多いほど、より多くの誤りを訂正することができる。誤りの数が誤り訂正能力を超えると誤り訂正できなくなるので、誤りの数は事前にできるだけ少なくしておく必要がある。
【0092】
誤りには、「事前に把握できる誤り」と、「誤り訂正処理の過程で検出できる誤り」とがある。
「事前に把握できる誤り」とは、バーおよびスペース判定の結果得られるXシーケンスまたはTシーケンスに対して、Tシーケンスから計算されるクラスタ値CTに対するコードワードテーブル内を検索したとき、該当するコードワードが存在しないことから顕在化する誤りを指し、PDF417規格では「erasure」と呼ばれる。これは、スタック型バーコードの擦れや、印刷不良により、バーおよびスペースパターンが損傷を受けた場合に生じることが多い。
【0093】
これに対して「事前に把握できない誤り」は、「substitution」と呼ばれ、線幅(エレメント幅)や総モジュール数の条件を満たしていて、コードワードテーブル参照でも該当したコードワードが存在した場合、このコードワードが誤っているかどうかは、わからない。
【0094】
本実施形態においては、事前に把握できる誤りを小さくする構成を採用している。
図8は、本実施形態においてスタック型バーコードとしてのPDF417を読み取って得られた結果の一例を示す図である。
【0095】
図8の読み取り結果においては、5個の誤り(Erasure)の結果#1〜#5を含んでおり、ロウ(ROW)とカラム(COL)は各コードワードのマトリクス上の位置を、クラスタ値CTはPDF417規格に基づいて、Tシーケンスから計算されるクラスタ値である。一方、理論クラスタ値CRはコードワードのロウ番号から決定されるクラスタ値である。
【0096】
なお、前述したように、レベル復号処理は、データカラムを構成するバーの線幅とスペースの線幅とからなるコードワードが「0〜928」の番号が付けられた、929個のコードで示される中間情報に変換される。
図8における最終結果において、誤りがなく正常に変換が行われた場合は「0〜928」の番号が提示され、正常に変換が行われなかった場合には「0〜928」の番号以外の番号たとえば「999」が提示される。そして、最終結果の番号「999」はTシーケンス修正が可能であるが正しくなかった場合やTシーケンス修正ができない場合の結果を示す番号となっている。以下では番号「999」を修正不調番号という。
また、以下に示す
図8の説明において、Tシーケンス修正が可能であるが修正が正しくない場合のTシーケンス(TSEQ)修正の結果は「NG」で表し、Tシーケンス修正が正しい場合のTシーケンス修正の結果は「OK」で表し、クラスタ値CTと理論クラスタ値CRとの差が±1より大きい場合はTシーケンス修正をしないことを「−」で表している。
【0097】
ここで両クラスタ値に着目する。いまTシーケンスの要素をT[0:5]とすると、クラスタ値CTは次のように定義される。
CT=(T[0]−T[1]+T[4]−T[5]+9)mod 9
【0098】
クラスタ値CTは、走査反射率特性のゆらぎによって線幅(エレメント幅)T[0:5]が変化すると、値が変わってしまう。一方、理論クラスタ値CRはコードワードが存在するロウ番号から決まるので、ロウ番号が正しければ変化することはない。
理論上、クラスタ値CTと理論クラスタ値CRは一致する。しかし、クラスタ値CTが「0」,「3」,「6」以外の値の場合、コードワード参照を行うことができなくなるため、この時点でErasureエラーが確定する。
しかし、クラスタ値CTと理論クラスタ値CRの差異が小さければ、クラスタ値CTが理論クラスタ値CRに一致するように、Tシーケンスの線幅(エレメント幅)T[0:5]を調整することにより、コードワード参照を実行できるようにすることができる。
上述したように、本実施形態では、クラスタ値CTと理論クラスタ値CRの差異(コードワード差)が±1である場合にTシーケンスに修正(補正)をかけるようにしている。
【0099】
図8の読み取り結果は、以下の通りである。
結果#1では、Tシーケンスは「233223」、クラスタ値CTが「7」、ロウ番号ROW#は「3」、カラム番号COL#は「11」、理論クラスタ値CRは「6」、クラスタ値CTと理論クラスタ値CRとの差異は「1」でTシーケンス(TSEQ)修正可能であり、これによりTシーケンス(TSEQ)修正の可否は「する(可)」であり、Tシーケンス(TSEQ)修正候補は「243223」と「233224」であるが、Tシーケンス(TSEQ)修正結果は「NG」であり、以上から最終結果は修正不調番号「999」が提示されている。
【0100】
結果#2では、Tシーケンスは「868972」、クラスタ値CTが「7」、ロウ番号ROW#は「5」、カラム番号COL#は「4」、理論クラスタ値CRは「3」、クラスタ値CTと理論クラスタ値CRとの差異は「4」であり、その結果Tシーケンス(TSEQ)修正の可否は「しない(否)」であり、以上から最終結果は修正不調番号「999」が提示されている。
【0101】
結果#3では、Tシーケンスは「562233」、クラスタ値CTが「8」、ロウ番号ROW#は「13」、カラム番号COL#は「11」、理論クラスタ値CRは「0」、クラスタ値CTと理論クラスタ値CRとの差異は「1」でTシーケンス(TSEQ)修正可能であり、これによりTシーケンス(TSEQ)修正の可否は「する(可)」であり、Tシーケンス(TSEQ)修正候補は「662233」と「552233」であり、Tシーケンス(TSEQ)修正結果は「OK」であり、以上からTシーケンス(TSEQ)修正後のクラスタ値CTは「0」となり、最終結果は正常な番号「806」が提示されている。
【0102】
結果#4では、Tシーケンスは「445645」、クラスタ値CTが「8」、ロウ番号ROW#は「15」、カラム番号COL#は「12」、理論クラスタ値CRは「6」、クラスタ値CTと理論クラスタ値CRとの差異は「2」であり、その結果Tシーケンス(TSEQ)修正の可否は「しない(否)」であり、以上から最終結果は修正不調番号「999」が提示されている。
【0103】
結果#5では、Tシーケンスは「345566」、クラスタ値CTが「8」、ロウ番号ROW#は「40」、カラム番号COL#は「5」、理論クラスタ値CRは「0」、クラスタ値CTと理論クラスタ値CRとの差異は「1」でTシーケンス(TSEQ)修正可能であり、これによりTシーケンス(TSEQ)修正の可否は「する(可)」であり、Tシーケンス(TSEQ修正候補は「445566」と「335566」と「345576」と「345565」、Tシーケンス(TSEQ)修正結果は「OK」であり、Tシーケンス(TSEQ)修正後のクラスタ値CTは「0」となり、最終結果は正常な番号「806」が提示されている。
【0104】
このように、
図8の例では、5個の誤りのうち3個がTシーケンス修正の対象になる。実際、クラスタ値CTが理論クラスタ値CRに一致するように修正をかけると、3個のうち、2個についてコードワード参照で該当するコードワードが存在する結果となった。この処理によって「Erasure」を当初の5個から3個に減らすことができた。
【0105】
なお、クラスタ値CTと理論クラスタ値CRとの差(コードワード差)が±1より大きい場合についても、同様の修正を行うことは理論的には可能であるが、修正の候補の数が多くなって処理時間を増大させるおそれがあるため、この場合、製品コストに応じた構成をとるようにすればよい。
【0106】
(Tシーケンス修正の具体的な処理フロー)
図9および
図10は、本実施形態に係るTシーケンス修正の具体的な処理フローを示すフローチャートである。
ここで、本実施形態に係るTシーケンス修正部13314におけるTシーケンス修正の具体的な処理フローについて
図9および
図10に関連付けて説明する。
【0107】
Tシーケンス修正部13314においては、まず、Tシーケンスから算出したクラスタ値CTと理論クラスタ値CRとが比較され、両クラスタ値が等しいか否かが判定される(ステップST61)。
ステップST61において、クラスタ値CTと理論クラスタ値CRが等しいと判定されると、Tシーケンス修正は不要として通常の処理が行われる(ステップST62)。
【0108】
ステップST61において、クラスタ値CTと理論クラスタ値CRが等しくないと判定されると、Tシーケンス修正を行うべく、まず、クラスタ値CTが理論クラスタ値CRより大きいか否かが判定される(ステップST63)。
ステップST63において、クラスタ値CTが理論クラスタ値CRより大きいと判定された場合にはステップST64の処理に移行し、大きくない(小さい)と判定された場合には
図10のステップST83の処理に移行する。
【0109】
クラスタ値CTが理論クラスタ値CRより大きい場合は、Tシーケンスの最上位(第1位)T[0]の値をマイナス1(−1)し、Tシーケンスの最上位側から第2位T[1]の値をプラス1(+1)し、Tシーケンスの最上位側から第5位T[4]の値をマイナス1(−1)し、Tシーケンスの最上位側から第6位T[5]の値をプラス1(+1)して、候補となる修正TシーケンスTlを生成する処理を行う。
クラスタ値CTが理論クラスタ値CRより小さい場合は、Tシーケンスの最上位(第1位)T[0]の値をプラス1(+1)し、Tシーケンスの最上位側から第2位T[1]の値をマイナス1(−1)し、Tシーケンスの最上位側から第5位T[4]の値をプラス1(+1)し、Tシーケンスの最上位側から第6位T[5]の値をマイナス1(−1)して、候補となる修正TシーケンスTlを生成する処理を行う。
すなわち、本実施形態では、クラスタ値CTが理論クラスタ値CRより大きいか否かで、クラスタ値CTの各要素にプラス1するかマイナス1するかを切り替えて、幅広く候補となる修正TシーケンスTlを生成するようにしている。
【0110】
また、
図9および
図10の処理では、候補となる生成した修正TシーケンスTlが確度の高い候補として選択できるように、その修正TシーケンスTlに対応するXシーケンスが存在するか否かを判別し、条件を満たすXシーケンスが存在する場合に修正TシーケンスTlを候補Tシーケンスとして採用するようにしている。
ここで、Xシーケンスを生成して候補条件に採用しているのは、基本的に、Xシーケンスからシフト演算によりTシーケンスが求められることから、条件を満たすXシーケンスが存在するということは、修正Tシーケンス自体も実存するものに即している可能性が高いとみなすことが可能となるからである。
【0111】
ステップST64においては、Tシーケンスの最上位(第1位)T[0]の値をマイナス1(−1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST65)。そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST66)。
ステップST66において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST67)。ステップST67の処理後またはステップST66において条件を満たさないと判定された場合にはステップST68の処理に移行する。
【0112】
ステップST68においては、Tシーケンスの最上位側から第2位T[1]の値をプラス1(+1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST69)。そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST70)。
ステップST70において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST71)。ステップST71の処理後またはステップST70において条件を満たさないと判定された場合にはステップST72の処理に移行する。
【0113】
ステップST72においては、Tシーケンスの最上位側から第2位T[1]の値をプラス1(+1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST73)。そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST74)。
ステップST74において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST75)。ステップST75の処理後またはステップST74において条件を満たさないと判定された場合にはステップST76の処理に移行する。
【0114】
ステップST76においては、Tシーケンスの最上位側から第6位T[5]の値をプラス1(+1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST77)。そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST78)。
ステップST78において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST79)。ステップST79の処理後またはステップST78において、条件を満たさないと判定された場合にはステップST80の処理に移行する。
ステップST80においては、候補Tシーケンスバッファに追加した修正TシーケンスTlに有効Tシーケンスが最低1個存在するか否かが判定される。
ステップST80において有効Tシーケンスが存在すると判定された場合にはTシーケンス修正の結果が真(正しい、OK)であると判定される(ステップST81)。一方、有効Tシーケンスが存在しないと判定された場合にはTシーケンス修正の結果が偽(正しくない、NG)であると判定される(ステップST82)。
【0115】
ステップST63において、クラスタ値CTが理論クラスタ値CRより大きくない(小さい)と判定された場合には
図10のステップST83の処理に移行し、以下の処理が行われる。
【0116】
ステップST83においては、Tシーケンスの最上位(第1位)T[0]の値をプラス1(+1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST84)。
ここで生成される修正TシーケンスTlは、
図8の例を参照すると、結果#5のTシーケンス「345566」の最上位(第1位)T[0]の値をプラス1(+1)して候補Tシーケンスとして「445566」が生成される。
そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST85)。
ステップST85において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST86)。ステップST86の処理後またはステップST85において条件を満たさないと判定された場合にはステップST87の処理に移行する。
【0117】
ステップST87においては、Tシーケンスの最上位側から第2位T[1]の値をマイナス1(−1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST88)。
ここで生成される修正TシーケンスTlは、
図8の例を参照すると、結果#5のTシーケンス「345566」の第2位T[1]の値をマイナス1(−1)して候補Tシーケンスとして「335566」が生成される。
そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST89)。
ステップST89において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST90)。ステップST90の処理後またはステップST89において条件を満たさないと判定された場合にはステップST91の処理に移行する。
【0118】
ステップST91においては、Tシーケンスの最上位側から第5位T[4]の値をプラス1(+1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST92)。
ここで生成される修正TシーケンスTlは、
図8の例を参照すると、結果#5のTシーケンス「345566」の第5位T[4]の値をプラス1(+1)して候補Tシーケンスとして「345576」が生成される。
そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST93)。
ステップST93において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST94)。ステップST94の処理後またはステップST93において条件を満たさないと判定された場合にはステップST95の処理に移行する。
【0119】
ステップST95においては、Tシーケンスの最上位側から第6位T[5]の値をマイナス1(−1)して修正TシーケンスTlを生成し、この修正TシーケンスTlに対応するXシーケンスXseqを生成する(ステップST96)。
ここで生成される修正TシーケンスTlは、
図8の例を参照すると、結果#5のTシーケンス「345566」の第6位T[5]の値をマイナス1(−1)して候補Tシーケンスとして「345565」が生成される。
そして、生成したXシーケンスXseqが条件を満たす最低1個のXシーケンスとして存在するか否かが判定される(ステップST97)。
ステップST97において、条件を満たすと判定された場合には、修正TシーケンスTlを候補Tシーケンスバッファに追加(格納)する(ステップST98)。ステップST98の処理後またはステップST97において、条件を満たさないと判定された場合にはステップST99の処理に移行する。
ステップST99においては、候補Tシーケンスバッファに追加した修正TシーケンスTlに有効Tシーケンスが最低1個存在するか否かが判定される。
ステップST99において、有効Tシーケンスが存在すると判定された場合にはTシーケンス修正の結果が真(正しい、OK)であると判定される(ステップST100)。一方、有効Tシーケンスが存在しないと判定された場合にはTシーケンス修正の結果が偽(正しくない、NG)であると判定される(ステップST101)。
【0120】
[実施形態の主な効果]
以上説明したように、本実施形態に係るスタック型バーコード読取装置10によれば、復号部133の低レベル復号部1331は、画像データを形成する複数の画素値に基づき、スタック型バーコード(PDF417)のバーおよびスペースの線幅を計測する線幅計測部としてのXシーケンス計測部13311と、Xシーケンス計測部によって計測されたスタック型バーコード(PDF417)のバーおよびスペースの線幅から数値列であるTシーケンスを計測するTシーケンス計測部13312と、Tシーケンス計測部13312によって計測されたTシーケンスまたは修正されたTシーケンスに対応するコードワードを取得するコードワード取得部13313と、Tシーケンス計測部によるTシーケンスから得られるクラスタ値CTと理論クラスタ値CRとを比較し、両クラスタ値に差異が生じた場合に、理論クラスタ値CRと、Tシーケンスとコードワードとの変換テーブルを用いてTシーケンスを修正するTシーケンス修正部13314と、を有する。
【0121】
より具体的には、本実施形態の低レベル復号部1331は、走査反射率特性(波形)から線幅(エレメント幅)の配列によって形成されるXシーケンスと呼ばれる数値列であるバーおよびスペースパターンを生成し、このXシーケンスを線幅(エレメント幅)の配列によって形成されるバーおよびスペースのTシーケンスに変換する変換機能を有する。
低レベル復号部1331は、変換されたバーおよびスペースのTシーケンスから計算されるクラスタ値CTを、ロウ番号から決まる理論クラスタ値CRと比較するクラスタ比較機能を有する。
低レベル復号部1331は、さらにクラスタ値CTと理論クラスタ値CRに差異がある場合はその差異の程度に応じてその差異がゼロとなるようにTシーケンスを修正する線幅(エレメント幅)修正機能を有している。
【0122】
したがって、本実施形態によれば、以下の効果を得ることができる。
本実施形態においては、たとえば事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能である。そして、エラー数が誤り訂正限界を超える場合であっても、スタック型バーコード(PDF417)の復号を行うことが可能となる。
【0123】
また、本実施形態よれば、Tシーケンス修正部13314は、Tシーケンスから得られるクラスタ値CTが理論クラスタ値CRに一致するように、Tシーケンスを修正する。
このように、本実施形態においては、Tシーケンスから得られるクラスタ値CTが理論クラスタ値CRに一致するように、Tシーケンスを修正することにより、誤りがあった場合にもコードワード参照を実行できるようにすることができる。
【0124】
また、本実施形態によれば、Tシーケンス修正部13314は、
図9および
図10に関連付けて説明したように、異なる数値列となるように修正した複数のTシーケンスからコードワード参照を行う少なくとも一つの有効なTシーケンスを取得する。
このように、本実施形態においては、異なる数値列となるように修正した複数のTシーケンスからコードワード参照を行う少なくとも一つの有効なTシーケンスを取得することにより、たとえば事前に把握できる誤りを可能な限り削減することが可能となる。
【0125】
また、本実施形態によれば、Tシーケンス修正部13314は、Tシーケンスから得られるクラスタ値CTと理論クラスタ値CRとの差異が±1のときにTシーケンスの修正を行う。
このように、本実施形態においては、Tシーケンスから得られるクラスタ値CRと理論クラスタ値CRとの差異が±1のときにTシーケンスの修正を行うことにより、修正の候補の数を適正化でき、処理時間の増大を抑止することが可能となる。
【0126】
また、本実施形態によれば、コードワード取得部13313は、Tシーケンス修正部13314で修正されたTシーケンスに対応するコードワードを参照し、該当するコードワードを取得する。
このように、本実施形態においては、Tシーケンス修正部13314で修正されたTシーケンスに対応するコードワードを参照し、該当するコードワードを取得することにより、たとえば事前に把握できる誤りを可能な限り削減することが可能となる。
【0127】
結果として、本実施形態によれば、スタック型バーコード(PDF417)を読み取る場合において、事前に検出可能な誤りの発生を抑止することができ、誤り訂正処理の処理負荷を軽減することが可能である。そして、エラー数が誤り訂正限界を超える場合であっても、スタック型バーコード(PDF417)の復号を行うことが可能となる。
【0128】
[他の実施形態]
上述した実施形態では、位置検出処理部131のシンボル切出し部1312の出力側に構造解析部132を配置したが、シンボル切出し部1312の出力と構造解析部132の入力との間に、切り出したバーコード21の傾斜角を検出して傾斜角を補正し、補正後のバーコード21の画像データを構造解析部132に供給する傾き補正部を設けても良い。この傾き補正部は、たとえば特開2014−191755号に開示されているものである。
【0129】
スタック型バーコード21を撮像装置11でスキャンしたときには、スタック型バーコード21のロウ方向DR(Y軸方向)が必ずしも媒体搬送機構112に対して垂直の関係に位置するとは限らない。
撮像素子111によって読み取られたスタック型バーコードの画像データは、傾く場合がある。換言すれば、ロウ方向DRと画像メモリ12に格納された画像データの垂直方向が一致していない場合がある。
そのため、スタック型バーコード21の読み取り処理において、傾き補正を行うように構成しても良い。
【0130】
[変形例]
上述した実施形態では、クラスタ値CTと理論クラスタ値CRの差異(コードワード差)が±1である場合にTシーケンスに修正(補正)をかけるようにしているが、差が±1より大きい場合についても、同様の修正を行うことは可能である。この場合、修正の候補の数が多くなって処理時間を増大させることもあるため、製品コストに応じた構成をとるようにすればよい。
【0131】
なお、以上詳細に説明した方法は、上記手順に応じたプログラムとして形成し、CPU等のコンピュータで実行するように構成することも可能である。
また、このようなプログラムは、半導体メモリ、磁気ディスク、光ディスク、フロッピー(登録商標)ディスク等の記録媒体、この記録媒体をセットしたコンピュータによりアクセスし上記プログラムを実行するように構成可能である。