(57)【要約】【課題】読み取られたバーコードの各バーに部分的な太りや細りがある場合にも、できるだけデコードができる可能性を高める。【解決手段】バーコードの二値化画像を投影部２３にてバーの長手方向に投影することで投影分布を求め、その投影分布を分割部２４にてバーコードを構成するキャラクタ単位に分割する。デコード部２５は、キャラクタごとに、当該キャラクタの投影分布に対し、投影画素数の閾値を仮決めして解析することで、各バーが太いバーか細いバーかを判別し、その判別結果に基づき、そのキャラクタがデコードできるか否かを判定する。デコードできれば、そのデコード結果を採用する。この装置では、キャラクタごとに、閾値を調節してデコードが行われる。【選択図】図６
2008009907.tif 000002
【特許請求の範囲】
【請求項１】
複数のキャラクタを含んだバーコードの画像をバーの長手方向に沿って投影することで投影分布を生成する投影部、
前記投影分布をキャラクタごとに分割する分割部と、
前記分割部で分割されたキャラクタごとの投影分布について、投影画素数についての１以上の閾値のそれぞれについて、その閾値での各バーの太さ判定結果に基づきデコードを試行し、デコードが成功した閾値についてのデコード結果に基づきそのキャラクタのデコード結果を決定し、各キャラクタのデコード結果に基づき前記バーコードのデコード結果を求めるデコード部と、
を備えるバーコード認識装置。
【請求項２】
前記デコード部は、デコードが成功した複数の閾値についてのデコード結果の多数決に基づき、前記キャラクタのデコード結果を求める、
ことを特徴とする請求項１記載のバーコード認識装置。
【請求項３】
複数のキャラクタを含んだバーコードの画像をバーの長手方向に沿って投影することで投影分布を生成し、
前記投影分布をキャラクタごとに分割し、
前記分割部で分割されたキャラクタごとの投影分布について、投影画素数についての１以上の閾値のそれぞれについて、その閾値での各バーの太さ判定結果に基づきデコードを試行し、デコードが成功した閾値についてのデコード結果に基づきそのキャラクタのデコード結果を決定し、
決定された各キャラクタのデコード結果に基づき前記バーコードのデコード結果を求める、
バーコード認識方法。
【請求項４】
複数のキャラクタを含んだバーコードの画像をバーの長手方向に沿って投影することで投影分布を生成し、
前記投影分布をキャラクタごとに分割し、
前記分割部で分割されたキャラクタごとの投影分布について、投影画素数についての１以上の閾値のそれぞれについて、その閾値での各バーの太さ判定結果に基づきデコードを試行し、デコードが成功した閾値についてのデコード結果に基づきそのキャラクタのデコード結果を決定し、
決定された各キャラクタのデコード結果に基づき前記バーコードのデコード結果を求める、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１次元バーコードの認識のための装置に関する。
【背景技術】
【０００２】
１次元バーコード（以下、単に「バーコード」と呼ぶ）を認識しやすくするため、バーコード読取結果を最適な閾値で二値化する手法は数多く提案されている（例えば特許文献１）。しかし近年、大量の紙文書の電子化が進むにつれ、データ量を小さくするために、帳票などの画像は二値・低解像度でスキャンされる場合が多い。このように二値化されて入ってくる画像の場合、文字や写真などに最適化される場合が多く、バーコードに適した閾値で二値化をされているとは限らない。その場合、個々のバーが部分的に太ったり細ったりしていることが多い。
【０００３】
バーコード認識では、バーの配列方向に延びる読取ラインを１つ取り、その読取ラインに沿って黒バー、白バーの幅を求めることで、各黒バー、各白バーがそれぞれ太いバーなのか細いバーなのかを判定し、その判定結果に基づきデコードを行う。しかし、上述のように個々のバーが部分的に太ったり細ったりしていると、ある１つの読取ラインをとってデコードを行おうとしても、デコードが不可になっている場合が多い。
【０００４】
これを解決する手段として、複数ラインのデータを用いてバーの太り細りの影響を吸収して認識するという手法が提案されている。例えば特許文献２の技術では、二値で入力されたバーコード画像において、バー長さ方向の各ラインを、それぞれそのライン上の所定画素数のうち予め設定した割合以上の画素が黒画素なら黒ラインとし、それに満たない場合は白ラインとしている。黒ラインがバー配列方向に連続する数によりその黒バーの太さが判定され、同様にして白バーの太さが判定される。また、特許文献３には、バーコードを縦方向（バー長さ方向にほぼ等しい）に投影分布を取り、浮動スライスにより二値化する方法が提案されている。
【０００５】
【特許文献１】特開平０５−０１０２１１号公報
【特許文献２】特開２００５−１６５９４８号公報
【特許文献３】特開平０６−１０３３９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
二値で入力されるバーコード画像の場合、1つのバーがバー長さ方向に沿ったほとんどの範囲で太ったり細ったりする場合がある。例えば、図１の(a)に示されるバーコードを二値画像として読み取った結果が図１の(b)であったとする。図１の(a)に示されるもとのバーコードでは、３番のバーは太い黒バー、９番のバーは細い黒バーである。これに対し図１の(b)に示される読取結果の画像では、３番のバーと８番のバーは、バー長さ範囲のどの位置にバー配列方向の読取ラインをとっても、ほとんどのライン上で同じ太さになってしまっている。この場合において、特許文献２の手法を用いると、バー長さ範囲の過半数の位置の読取ラインにおいて、３番と９番のバーは同じ太さになるため、それら２つのバーは同じ太さと認識されてしまい、正しくデコードできない。
【０００７】
また特許文献３の手法を用いた場合も、図１の(b)の読取結果を正しくデコードすることはできない。このことを以下に説明する。図１の(b)の読取結果の縦方向投影分布を取ったものが図２である。図２において、横軸はバー配列方向における画素位置の番号であり、縦軸は、その画素位置における縦方向のラインに沿った黒画素数の累積値である。この投影分布において、各バーの太さを決めるための閾値を(a)のライン（黒画素数３５）とすると、３番のバーと９番のバーは同じ太さと認識されてしまい、正しくデコードできなくなる。なお、閾値を(b)のライン（黒画素数０）に設定すると、３番は太いバー、９番は細いバーと認識されるので正しくデコードすることができるが、元々同じ太さのバーが読取によって様々な態様で太ったり細ったりするので、バーコード全体にわたって通用する適切な閾値を定めることは非常に困難である。また、浮動閾値でバーの白黒を決定する場合も、バーが長さ方向1ラインのほとんどの範囲で太っている場合（あるいは細っている場合）は正しくないほうの値に引きずられてしまうため、正しくデコードすることができない。
【０００８】
本発明は、バーコード全体にわたって適切な閾値が定められないような場合でも、キャラクタごとで閾値を定めることで、正しくデコードできる可能性を高めることができるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
（１）本発明の１つの側面では、複数のキャラクタを含んだバーコードの画像をバーの長手方向に沿って投影することで投影分布を生成する投影部、前記投影分布をキャラクタごとに分割する分割部と、前記分割部で分割されたキャラクタごとの投影分布について、投影画素数についての１以上の閾値のそれぞれについて、その閾値での各バーの太さ判定結果に基づきデコードを試行し、デコードが成功した閾値についてのデコード結果に基づき、そのキャラクタのデコード結果を決定し、各キャラクタのデコード結果に基づき前記バーコードのデコード結果を求めるデコード部と、を備えるバーコード認識装置、を提供する。
【００１０】
（２）１つの態様では、上記構成（１）において、前記デコード部は、デコードが成功した複数の閾値についてのデコード結果の多数決に基づき、前記キャラクタのデコード結果を求める。
【００１１】
（３）本発明の別の側面では、複数のキャラクタを含んだバーコードの画像をバーの長手方向に沿って投影することで投影分布を生成し、前記投影分布をキャラクタごとに分割し、前記分割部で分割されたキャラクタごとの投影分布について、投影画素数についての１以上の閾値のそれぞれについて、その閾値での各バーの太さ判定結果に基づきデコードを試行し、試行に置いてデコードが成功した閾値についてのデコード結果に基づき、そのキャラクタのデコード結果を決定し、決定された各キャラクタのデコード結果に基づき前記バーコードのデコード結果を求めるバーコード認識方法、を提供する。
【００１２】
（４）本発明の別の側面では、複数のキャラクタを含んだバーコードの画像をバーの長手方向に沿って投影することで投影分布を生成し、前記投影分布をキャラクタごとに分割し、前記分割部で分割されたキャラクタごとの投影分布について、投影画素数についての１以上の閾値のそれぞれについて、その閾値での各バーの太さ判定結果に基づきデコードを試行し、試行においてデコードが成功した閾値についてのデコード結果に基づき、そのキャラクタのデコード結果を決定し、決定された各キャラクタのデコード結果に基づき前記バーコードのデコード結果を求める、処理をコンピュータに実行させるためのプログラムを提供する。
【発明の効果】
【００１３】
上記構成（１）、（３）及び（４）によれば、バーコード全体にわたって適切な閾値が定められないような場合でも、キャラクタごとで閾値を定めることで、正しくデコードできる可能性を高めることができる。
【００１４】
上記構成（２）によれば、ある閾値で誤ってデコードが成功する場合でも、正しいデコード結果が得られる確率を高めることができる。
【発明を実施するための最良の形態】
【００１５】
以下、バーコード認識のための本実施形態の処理手順を、図３を参照して説明する。
【００１６】
まず、本実施形態のバーコード認識装置に対してバーコードを含む画像が入力される（Ｓ１）。この画像は、例えば二値化された画像である。バーコード認識装置は、バーコードを含む領域を切り出す（Ｓ２）。バーコードを含む領域の切り出しは、公知の手法を含む様々な手法を用いて行うことができる。例えば、画像全体の中でバーコードを含む領域をユーザがあらかじめ指定しておいてもよい。また、一方向に白黒が所定の周波数範囲で繰り返されている領域を、バーコードを含む領域として切り出してもよい。ここで、一例として、図４の(a)のような二値化されたバーコード画像が切り出されたとする。
【００１７】
次に、バーコード認識装置は、バーコードの縦方向投影分布を求める（Ｓ３）。ここでの「縦」方向は、バーコードの長手方向のことであり、言い換えれば、バーコードにおけるバーの配列方向に垂直な方向である。縦方向投影分布は、例えば、バーコード画像におけるバー配列方向の画素位置ごとに、バーコード画像においてその画素位置から縦方向に延びる画素列の中で黒画素の数を累計することにより求めることができる。
【００１８】
次にバーコード認識装置は、縦方向投影分布（以下単に「投影分布」と呼ぶ）を、バーコードを構成するキャラクタ単位に分割する（Ｓ４）。バーコードには様々なコード種類があるが、個々のコード種類ごとにみれば、そのコード種類に属するバーコードの１キャラクタが含むバーの本数は決まっている。そこで、投影分布における黒画素部分の柱（例えば図２の例では、１８，１９番の２つの画素位置が合わさって１つの柱となっている）の数をバー配列方向に左から右へ計数していき、当該バーコードのコード種類における１キャラクタのバーの本数ごとに区切ることで、１キャラクタごとの分割ができる。
【００１９】
ここで、バーの部分的な太りや細りにより、隣接する黒バー同士又は白バー同士が部分的に連結してしまう場合があるが、このような場合でも、バーの長手方向全域にわたって連結することはまれなので、投影分布における黒画素累積値の中間値（図２の例では、例えば３０〜４０のあたり）のラインで投影分布を切断すれば、適切に黒バー（又は白バー）の数を計数できる可能性が高い。なお、万が一、隣接する黒バー同士又は白バー同士がバー長手方向の広い範囲にわたって連結してしまった場合は、投影分布において黒バー又は白バーの太さが他の黒バー又は白バーに比べて著しく太くなる。したがって、投影分布をある黒画素累積値のラインで切断して黒バー、白バーの数を計数する際に、各バーの太さ（例えば、黒バーの場合、ラインに沿って連続する黒画素の数）を求め、そのバーの太さを統計処理し、その結果他より著しく太いバーが存在すれば、隣接する黒バー同士又は白バー同士が連結してしまっていると判定できる。この場合、投影分布を切断するラインの高さ（黒画素累積値）を変更して再度バーを計数し直せばよい。また、その代わりに、ユーザに対し、バーコードを含んだ原稿の再読み取りを促すメッセージを、バーコード認識装置のユーザインタフェースから表示又は音声で出力してもよい。
【００２０】
以上では投影分布のデータに基づき、投影分布をキャラクタ毎に分割したが、これは一例である。この代わりに、バーコード画像をバー配列方向のラインで切断して黒バー又は白バーの数を計数することで、バーコードをキャラクタごとに分割し、その分割結果に応じて投影分布をキャラクタごとに分割してもよい。
【００２１】
なお、コード種類は、例えば、あらかじめユーザがバーコード認識装置に対して指定しておけばよい。
【００２２】
図４の(b)は、図４の(a)のバーコード画像をキャラクタごとに分解した状態を示す図である。
【００２３】
次にバーコード認識装置は、バーコードの開始端（左端）から順に１キャラクタごとにデコードを行う（Ｓ５〜Ｓ１０）。
【００２４】
このキャラクタごとのデコードでは、まず、開始端から見て最初のキャラクタを取り出す。そして、投影分布を切断するバー配列方向のラインを規定する閾値をまず０に設定する（Ｓ５）。この閾値は、投影方向についての画素数の累積値についての閾値である。
【００２５】
そして、バーコード認識装置は、投影分布において、この閾値で規定されるラインに沿って黒バー及び白バーを判定し、この判定結果に基づきデコードを試行する（Ｓ６）。
【００２６】
このＳ６では、まず、そのラインに沿って各画素位置が黒なのか白なのかを判定し、黒の連続する部分を黒バーとし、その連続数をその黒バーの太さ（すなわちバーの幅）とする。白バーについても同様にその太さを求める。
【００２７】
ここで、図４の(a)に示すバーコードの最初のキャラクタの投影分布は図４の(c)に示すようなものとなる。今、閾値は０なので、黒バーの太さは左か順に４，４，１０，８，４であり、白バーの太さは左から順に８，４，４，４である。黒バー、白バーのそれぞれにつき、例えば太さの最小値と最大値の平均を太バーとバーとを判別する判別閾値とすれば、黒バーの太細判別閾値は（４＋１０）／２＝７となり、白バーの太細判別閾値は（８＋４）／２＝６となる。バーコード認識装置は、これら太細判別閾値を用いて、各黒バー、白バーの太細を判別する。なお、バーの太さの最小値と最大値の平均を太細判別閾値とする方式は、あくまで一例にすぎない。太細判別閾値は、各バーの太さの分布から、他の統計的な手法により求めてもよい。ただし、以下では、太さの最大値、最小値の平均を太細判別閾値として用いる方式を一例として用いる。
【００２８】
ここで、細バーを１、太バーを２と表すと、図４の(c)に対応するキャラクタでは、黒バーの太さは左から順に１，１，２，２，１となり、白バーの太さは左から順に２，１，１，１となる。これはスタートコード（すなわち"*"）のパターンに一致するので、最初のキャラクタは閾値０でデコード可能である。
【００２９】
したがって、この例では、開始端から見て最初のキャラクタについてはＳ７でデコード可と判定される。この場合、バーコード認識装置は、このキャラクタのデコード結果（"*"）を記憶する。
【００３０】
バーコード認識装置は、次に、バーコードを構成する最後のキャラクタまでデコードが終了したかどうかを判定する（Ｓ８）。この段階では、残りのキャラクタがあるので、閾値を０に再設定し、次のキャラクタのデコードを試行する（Ｓ５）。
【００３１】
このように１キャラクタずつデコードしていくと、図４の(a)のバーコードは、図４の(d)にその投影分布を示すキャラクタの前までは閾値０でデコードすることができる。これに対し、(d)に示されるキャラクタは、閾値を０とすると、黒バーの太さは左から順に６，６，６，１０，８となり、白バーの太さは２，６，２，４となる。この場合、黒バーの太細判別閾値は（６＋１０）／２＝８となり、白バーの太細判別閾値は（２＋６）／２＝４となる。これら太細判別閾値を用いて各バーの太さを判別すると、黒バーが左から１，１，１，２，２となり、白バーは１，２，１，２となる。このようなパターンに一致するコードは、デコードテーブルに存在しないので、デコードすることができない。ここで、デコードテーブルは、キャラクタのコード値ごとに、そのコード値の黒バー、白バーの太細の配列パターンを記憶したテーブルであり、このようなテーブルは、例えばコード種別ごとにあらかじめ決まっている。
【００３２】
この場合はＳ７の判定でデコード不可と判定されるので、バーコード認識装置は、閾値を１インクリメントしてＳ６に戻り、再び同じキャラクタのデコードを試みる。閾値をインクリメントしながらＳ６及びＳ７を繰り返していくと、この例では閾値が８０になったときに、黒バーの太さが左から順に４，６，４，１０，８、白バーの太さが左から順に４，６，４，４となる。したがって、黒バー、白バーの太細判定閾値はそれぞれ（４＋１０）／２＝７、（４＋６）／２＝５となり、これらを用いてバー太さを決定すると、黒バーが左から順に１，１，１，２，２、白バーが左から順に１，２，１，１となり、デコードテーブルの「７」と一致するのでデコード可となる。したがって、バーコード認識装置は、図４の(c)のキャラクタについては、デコード結果「７」を記憶し、Ｓ８の判定に進む。以上の処理を繰り返し、バーコードの最後のキャラクタまで（又はストップコードに一致するキャラクタまで）デコードが終わると、処理が終了となる。
【００３３】
以上の処理では、バーコードの開始端から順に１キャラクタずつデコードを行ったが、各キャラクタのデコードを並列的に実行してももちろんよい。
【００３４】
また、正しいバーコードの開始端よりも左側に、バーとほぼ平行な線分がノイズとして存在する場合、その線分も含んだ領域がバーコード領域として切り出される場合がある。しかし、その場合、開始端から見て最初のキャラクタは、ノイズを含んでいるので、閾値０から最大値（バー長手方向に沿った画素数）まで変えても、スタートコードとして認識される可能性は極めて低い。最初のキャラクタが閾値をどのように変えてもスタートコードとして認識できなかった場合は、最初（左端）の黒バーを除いてキャラクタの再分割を行い、閾値を変えながら最初のキャラクタがスタートコードとして認識できるか否かを判定する。以上のようにして、最初のキャラクタがスタートコードとして認識できるまで、左端の黒バーを除いてキャラクタの再分割し、デコードの試行を繰り返すことで、ノイズを含む場合にも、デコードが可能となる。
【００３５】
以上のように、本実施形態では、キャラクタごとにデコードできる閾値を見つけ出すので、バーコードの全幅にわたって同一の閾値を用いる場合よりも、適切にデコードできる可能性が高い。
【００３６】
以上の例では、デコードが失敗した場合、閾値を１ずつインクリメントしたが、閾値の変更規則はこれに限られるものではない。
【００３７】
以上の例では、閾値０（黒画素数０）から処理を始め、閾値を１ずつインクリメントしてデコードが成功した時点でそのデコードの結果を採用したが、これでは、偶然に誤ってデコード成功と判定された場合でも、そのデコード結果が採用されてしまう可能性がある。そのようなことを避けるには、例えば、デコードが成功しても、更に閾値を変えてデコードを試行し、デコードが成功した閾値が複数あれば、それら各閾値のデコード結果の多数決で当該キャラクタの最終的なデコード結果を決定してもよい。この場合、デコードが成功したときに閾値を１インクリメントしたのでは、同じデコード結果が得られる可能性が高いので、閾値をある程度大きく変える（例えば例えば投影分布の縦軸方向最大値の１／４、又は１／２等と言った所定割合だけ閾値を増やすなど）ことで、局所的な状況に作用されにくくしてもよい。
【００３８】
また、投影分布の縦軸方向に沿って偏りなく設定した複数の閾値について並列的にデコードを試行し、その中でデコードが成功したもののデコード結果の中で、多数決により当該キャラクタの最終的なデコード結果を決定してもよい。
【００３９】
また、以上の例では、投影分布をキャラクタごとに分割した後でキャラクタごとにデコードを行ったが、処理手順はこれに限るものではない。この代わりに、例えば図５のような処理手順を採用してもよい。図５の手順では、バーコード画像の投影分布を求めた後、閾値を所定値（例えば０）に設定し（Ｓ１０）、その閾値のラインに沿って投影分布を解析することで、バーコードの開始端側から１キャラクタ分の投影分布を切り出す（Ｓ１１）。そして、図３の手順と同様にしてその１キャラクタ内の各バーが太いか、細いかを判定し、デコードを試みる（Ｓ６）。ここで、デコードが成功しなければ、閾値を例えば１だけインクリメントしてＳ１１に戻り、先頭キャラクタを切り出して、デコードを試みる（Ｓ１１，Ｓ６）。Ｓ６でデコードが成功したと判定されれば、ストップコードに達しているか、又はバーコード画像中の最後のバーまで処理が終わっているかを調べ（Ｓ８）、そのどちらでもなければ、閾値を所定値に戻し、投影分布における残りのバー群を処理する。
【００４０】
以上に説明したバーコード認識の処理は、典型的には、コンピュータにて上述の各ステップの処理内容を記述したプログラムを実行することにより実現される。コンピュータは、例えば、ハードウエアとして、ＣＰＵ（中央演算装置）、メモリ（一次記憶）、各種Ｉ／Ｏ（入出力）インタフェース等がバスを介して接続された回路構成を有する。また、そのバスに対し、例えばＩ／Ｏインタフェース経由で、ハードディスクドライブや、ＣＤやＤＶＤ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブが接続される。このようなドライブは、メモリに対する外部記憶装置として機能する。実施形態の処理内容が記述されたプログラムがＣＤやＤＶＤ等の記録媒体を経由して、又はネットワーク経由で、ハードディスクドライブ又は他の方式の不揮発性記憶装置などの固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがメモリに読み出されＣＰＵにより実行されることにより、上記実施形態の処理が実現される。
【００４１】
本実施形態のバーコード認識装置は、例えば、そのようなプログラムがインストールされたコンピュータとして実現することができる。この装置は、スキャナから例えば二値で読み取られた画像を受け取り、この画像に対して図３に示したような処理を行えばよい。また、デジタル複写機又はデジタル複合機等のように、スキャナ機能とプリンタ機能とを兼ね備えた装置に対し、上述のようなプログラムをインストールして実行させてもよい。
【００４２】
実施形態のバーコード認識装置の機能ブロック図は、例えば、図６に示すようなものとなる。このバーコード認識装置２０は、スキャナ１０が読み取った画像を受け取り、これを二値化部２１により二値画像に変換する。バーコード切り出し部２２は、この二値画像に対しＳ２の切り出し処理を施す。投影部２３は、切り出されたバーコード領域に対し、Ｓ３の投影処理を施す。分割部２４は、Ｓ４に示されるように、投影分布をキャラクタ単位に分割する処理を行う。デコード部２５は、Ｓ５〜Ｓ８までの処理を行う。バーコード認識装置２０の各部は、プログラムにより実現することができる。なお、画像の二値化処理はハードウエア回路又はデジタル・シグナル・プロセッサにて行ってもよく、スキャナ１０が二値化を行ってもよい。
【図面の簡単な説明】
【００４３】
【図１】バーコードの二値化による部分的な太り、細りを説明するための図である。
【図２】部分的な太り、細りのあるバーコードを縦方向に投影した投影分布の例を示す図である。
【図３】実施形態のバーコード認識の処理手順の一例を示すフローチャートである。
【図４】バーコードの読み取り結果に対するキャラクタ分割と、各キャラクタの投影分布を説明するための図である。
【図５】バーコード認識の処理手順の変形例を示すフローチャートである。
【図６】バーコード認識装置の機能ブロック図である。
【符号の説明】
【００４４】
１０  スキャナ、２０  バーコード認識装置、２１  二値化部、２２  バーコード切り出し部、２３  投影部、２４  分割部、２５  デコード部。
【図１】
2008009907.tif 000003
【図２】
2008009907.tif 000004
【図３】
2008009907.tif 000005
【図４】
2008009907.tif 000006
【図５】
2008009907.tif 000007
【図６】
2008009907.tif 000008