(58)【調査した分野】(Int.Cl.,DB名)
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するプロセッサを備え、前記プロセッサは二値化処理の対象画素の受光強度が1画素全体がバーコードの白部に相当するときの第1受光強度と黒部に相当するときの第2受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、
前記プロセッサは、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とするバーコード読取装置。
前記プロセッサは、前記対象画素内での白黒順序と前記第1受光強度又は前記第2受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする請求項1又は2に記載のバーコード読取装置。
前記プロセッサは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第1初期条件と黒部から白部に変わる第2初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする請求項1〜3のいずれか1項に記載のバーコード読取装置。
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである請求項4に記載のバーコード読取装置。
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである請求項4に記載のバーコード読取装置。
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するステップを含み、前記ステップにおいて二値化処理の対象画素の受光強度が1画素全体がバーコードの白部に相当するときの第1受光強度と黒部に相当するときの第2受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、
前記ステップにおいて、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とするバーコード読取方法。
コンピュータを、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理する手段として機能させるためのバーコード読取プログラムであって、前記手段により、二値化処理の対象画素の受光強度が1画素全体がバーコードの白部に相当するときの第1受光強度と黒部に相当するときの第2受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、
前記手段は、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とするバーコード読取プログラム。
【背景技術】
【0002】
バーコード読取装置(以下「バーコードスキャナ」ともいう)により、各種の製品や管理の対象物などに印刷されるか又はラベルで貼付されたバーコードが読み取られる。バーコードは、種々の太さの線とその間隔の並びによって数字、文字、記号などを表現した符号である。一般に線の色は黒で、線間の色は白であるが、明暗を識別できる色であれば白と黒に限定されない。以下では、暗部である線の部分を「黒部」といい、明部である線間部分を「白部」という。
【0003】
バーコード読取装置はバーコードの映像を受光するイメージセンサを備える。このバーコード読取装置には、イメージセンサで受けたバーコード画像の白部及び黒部の幅を検出できる限界(最小分解能)が存在する。通常はその限界を超えた細かい白部や黒部を含むバーコードでは、白部と黒部を適切に切り分けられないので、バーコードの読み取りは不可能である。
【0004】
例えば、バーコード読取装置に搭載された1次元イメージセンサの画素が1000ピクセルで、そのバーコード読取装置の読取可能なバーコード幅が60mmとすれば、バーコード読取装置のイメージセンサの1画素あたりに換算すると、見かけの分解能は60mm/1000ピクセル、即ち0.06mm/ピクセルに相当することになる。
【0005】
しかし、バーコードの映像がセンサ画素幅に対して、ちょうど1対1となるようなことは現実的にはあり得ず、白部と黒部の境界部が映像としてイメージセンサの1つの画素に映り込むような状態が発生する。この状態における当該画素での受光強度は、画素全体が白部のときの受光強度と画素全体が白部のときの受光強度との中間の値をとる。一般に、その中間の値が或る閾値より白部の受光強度に近ければ白と、黒部の受光強度に近ければ黒と判断されていた。このような処理の結果、本来のバーコード像(以下「バーコード原像」ともいう)の黒部の幅がバーコード読取装置ではより太く認識されたり、より細く認識されたりするため、バーコード原像に比して二値化後の白部及び黒部の幅に誤差が発生していた。この誤差によって、白部と黒部の適切な幅を検出できず、結果的にバーコードのデコードに失敗することがあった。
【0006】
この様な事情から、一般的にはイメージセンサの3画素分程度の幅、本例では、0.06mm×3=0.18mmが白部と黒部を適切に切り分けられる限界(すなわち最小分解能)とされている。
【0007】
次に、閾値を用いて画素毎に白部と黒部を判定する従来技術の二値化方法について
図13及び
図14を参照して説明する。
【0008】
図13(A)はバーコードラベル11を示す。バーコードラベル11は、黒と白を同じ幅で等間隔に並べたバーコードを模している。
図13(B)はこのバーコードラベル11の一部12を示す。
図13(C)は画素番号0〜7までの画素をもつイメージセンサ13を示す。このイメージセンサ13上にバーコードラベルの像が結像した状態を考える。イメージセンサ13の画素の幅を1とした場合、ラベルの一部12の黒部の幅は4.2である。
図13(C)に示されるように、ラベルの一部12の黒部がイメージセンサ13の画素1〜5にかけて、網掛け部で示したように投影されているとする。このとき、イメージセンサ13の画素1は白部が0.6、画素5は白部が0.2の幅で映る。
【0009】
図13(D)は、画素全体が黒部のときの受光強度を0、画素全体が白部のときの受光強度を1とした場合に、イメージセンサ13の各画素0〜7での受光強度分布を示したグラフ14である。従来技術の二値化方法では、この受光強度分布に対して閾値を設けて、受光強度がその値を超えるものを白、下回るものを黒とする。
図13(D)の例では閾値を0.5と設定して二値化している。
【0010】
図13(E)は、上記の二値化により得られた白・黒のパターン17を示す。イメージセンサ13に映る映像の黒部の幅は4.2であったものが、二値化処理後の白・黒のパターン17では4となっている。この段階で、バーコード原像に対する二値化後の誤差は−5%となる。
図13の例では原像12の黒部の幅が、センサ画素数の4ピクセル分以上あるため、原像12に対する二値化後の黒部の幅の誤差は比較的小さく、閾値0.5によって二値化したこの例の結果は、以後のデコード処理に利用可能なデータになる。
【0011】
一方、次に
図14の場合を考える。
図14(A)はこの例で用いられるバーコードラベル21を示す。バーコードラベル21は、
図13(A)のバーコードラベル11と同様に、黒と白を同じ幅で等間隔に並べたバーコードを模している。
図14(B)はこのバーコードラベル21の一部22を示す。
図14(C)は画素番号0〜7までの画素をもつイメージセンサ23を示す。このイメージセンサ23上にバーコードラベルの像が結像した状態を考える。イメージセンサ23の1画素分の幅を1とした場合、ラベルの一部22の黒部の幅は1.4である。
図14(C)に示されるように、ラベルの一部22の黒部が網掛け部で示したように投影されているとする。
【0012】
図14(D)は、画素全体が黒部のときの受光強度を0、画素全体が白部のときの受光強度を1とした場合に、イメージセンサ23の各画素0〜7での受光強度分布を示したグラフ24である。
図14(D)の例でも閾値を0.5と設定して二値化している。
【0013】
図14(E)は、上記の二値化により得られた白・黒のパターン27を示す。二値化後のパターン27の黒部に注目すると、幅が1のものと2のものが生じているのが分かる。これは、原像22では同じ幅の黒部が、二値化後に同じ幅と識別されずに不均一となっていることを意味している。
図14の例の場合は、同じ幅1.4であるはずの黒部が1又は2の幅となっており、原像に対してはそれぞれ誤差−30%、+43%となる。しかも、二値化後の状態を基準にすると、幅1のものが幅2にもなりうる、つまり誤差100%となる。これでは後段のデコード処理で利用できない(このまま処理をしても確実にデコードに失敗する)。
【0014】
この問題を技術的に解決するためには、バーコード読取装置に搭載するイメージセンサを、より画素数の多いものに変更する、という方法が一般的である。しかし、この方法では、画素数の多いイメージセンサはより高価であり、またそれにより処理すべき画素のデータ量が増加すると、より高性能なプロセッサを必要とするなど、ハードウェアのコストが上昇してしまう点や、画素数の多いイメージセンサ自体に技術的或いは製造上の限界が存在する点などが課題となっていた。
尚、特許文献1には、光学的情報読取装置において、見かけ上の分解能を向上させる一方法が開示されている。
【発明を実施するための形態】
【0022】
以下、本発明を実施するための形態について詳細に説明する。
【0023】
〔バーコード読取装置の構成〕
図1は本発明の実施形態におけるバーコード読取装置の基本構成を示す。バーコード読取装置1は照明光源2と反射ミラー3と集光レンズ4とイメージセンサ5とプロセッサ6とを備える。プロセッサ6は上位装置と通信をするためのラインに接続される。上位装置との通信は無線で行ってもよい。照明光源2はバーコード(又はバーコードラベル)7に光を照射する。反射ミラー3はバーコード7で反射された光を集光レンズ4に向けて反射する。反射ミラー3はバーコード読取装置1の形状によっては省略可能である。集光レンズ4はバーコード7からの反射光をイメージセンサ5上に結像させる。照射光を適切に通す光学フィルタを集光レンズ4と共に設けてもよい。イメージセンサ5はバーコード7を撮像するものであり、バーコード7からの反射光を電気信号に変換する。イメージセンサ5は1次元イメージセンサに限定されず、例えば2次元イメージセンサでもよい。2次元イメージセンサを用いる場合は、適当な1列の画素列を選択的に使用してもよい。プロセッサ6はイメージセンサ5の各画素が示す受光強度からバーコード画像の二値化処理を行う。プロセッサ6は二値化処理で得られた二値化データに対してデコード処理を行ってもよい。デコード処理により、バーコードに符号化されていた原情報が得られる。
【0024】
一般にバーコードは中間色の無い白部と黒部によって構成される。そのため、イメージセンサの一つの画素の受光強度が白と黒の中間の値をとる場合、当該画素にはバーコードの白部と黒部の境界が映り込んでいると想定される。さらに、このような場合に本発明の実施形態では、1画素中における白部と黒部の境界は必ず1箇所であることを前提とする。例えば、
図13の例では、イメージセンサ13の画素番号1及び画素番号5の部分がこれに当たる。
【0025】
一画素での受光強度が1(すなわち画素全体が白)又は0(すなわち画素全体が黒)の場合は、画素中に白・黒の境界が存在しない。ここで、受光強度は1画素全体が白のとき1に、1画素全体が黒のとき0になるように規格化されている(以下の説明でも同様)。例えば、受光強度1なら白1、黒0、受光強度0なら、白0、黒1と記録する。尚、この場合、0となる白又は黒の情報は、記録上省いても良い。0となる白又は黒の情報を省かない場合は、後の幅計算上「1となる黒又は白のみで、0となる白・黒部は存在しない(つまり、白・黒の境界が存在しない)」という扱いとする。
【0026】
ある一つの画素の受光強度が白と黒の中間の値をとる場合、すなわち上記のような規格化がされているとき一画素の受光強度が0より大きくかつ1より小さい場合、「白と黒の中間の値」だけでは、当該画素内における白部と黒部の配置順序(本明細書及び特許請求の範囲では「白黒順序」ともいう)が判断できない。つまり、画素内において同一方向から見て、白部から黒部に変わる境界があるのか、あるいは逆に黒部から白部に変わる境界があるのか判断できない。尚、以下では白部から黒部に変わることを「白→黒」と、黒部から白部に変わることを「黒→白」と略記することもある。
【0027】
本発明の実施形態では一画素の受光強度が白と黒の中間値をとる場合、当該画素中に白と黒の境界が存在すると想定し、当該画素の受光強度を当該画素に隣接する画素の受光強度と比較して、その値が減少しているか、或いは増加しているかによって、当該画素内における白・黒の順番を決定する。以下、当該画素内での白黒順序が白→黒なのか、黒→白なのかを決定する方法を場合分けして説明する。
【0028】
〔ケース(1):バーコードの原像の最小の白幅、黒幅がイメージセンサの画素幅1つ分より広く、かつ、受光強度が白と黒の中間の値をとる状態が2画素以上連続しない場合〕
【0029】
この場合、白と黒の中間の値の受光強度を有する画素内における白黒順序はシンプルに決定できる。例えば、当該画素の受光強度(大きさは中間値)をその一つ前(すなわち一つ左側又は一つ右側)の画素の受光強度と比較して、その値が減少していれば白→黒の順、増加していれば黒→白の順と判定すればよい。
【0030】
「一つ前の画素」とは、受光強度が中間値の画素についての二値化処理よりも時間的に一つ前に行った二値化処理に係る画素を意味する。例えば、1次元イメージセンサの一連の画素列において一方の端部(左側)の画素からもう一方の端部(右側)の画素に向けて順に白黒順序の判定を含めて二値化処理を行っていく場合を考える。この場合、或る画素の受光強度が中間値を有するとき、その「一つ前の画素」とは、一つ左側の画素のことである。左右は便宜的に仮定したものであり、右側の端部の画素から二値化処理を開始した場合には、「一つ前の画素」とは、一つ右側の画素になることは当然である。いずれにしても、受光強度が中間値を有する画素とそれに隣接している画素とで受光強度を比較して増減状況(増減関係ともいう)を調べて白黒順序を判定する。なお、二値化処理は、イメージセンサの一連の画素列の端部の画素から開始することに限定されるものではなく、画素列中の任意の画素から開始してもよい。
【0031】
「一つ前の画素の受光強度と比較して値が減少している」とは、「白と黒の中間の値」をとる画素の一つ前の画素の受光強度が1、つまり、白であることを意味している。「白と黒の中間の値」をとる画素ではその画素中に白から黒に切り替わる境界が映り込んでいると解釈し、その画素は、一つ前の画素から見て白→黒の順番で構成されている、と判断できる。
【0032】
これは、例えば
図13(C)の画素番号0,1,2の部分でバーコード原像が白から黒に変化する部分において、画素番号1で白と黒の中間値をとる状態に相当する。
図13(C)の画素番号0,1,2の部分の例では、画素番号1に着目すると、その一つ前(一つ左側)の画素、即ち画素番号0の受光強度が1であるため(同図(D))、画素番号1は「一つ前の画素の受光強度と比較して値が減少している」に該当する。このため、前述の考え方で、画素番号1の白・黒の順は白→黒と決定することができる。
【0033】
次に、「一つ前の画素の受光強度と比較して値が増加している」とは、「白と黒の中間の値」をとる画素の一つ前の画素の受光強度が0、つまり、黒であることを意味している。「白と黒の中間の値」をとる画素ではその画素中に黒から白に切り替わる境界が映り込んでいると解釈し、その画素は、一つ前の画素から見て黒→白の順番で構成されている、と判断できる。
【0034】
これは、
図13(C)の画素番号4,5,6の部分でバーコード原像が黒から白に変化する部分において、画素番号5で白と黒の中間値をとる状態に相当する。
図13の画素番号4,5,6の部分の例では、画素番号5に着目すると、その一つ前(一つ左側)の画素、即ち画素番号4の受光強度が0であるため(同図(D))、画素番号5は「一つ前の画素の受光強度と比較して値が増加している」に該当する。このため、前述の考え方で、画素番号5の白・黒の順は黒→白と決定することができる。
【0035】
尚、「バーコード原像の最小の白幅、黒幅がイメージセンサ画素幅1つ分より広く、かつ、受光強度が白と黒の中間の値をとる状態が2画素以上連続しない場合」のケース(1)では、文字通り「白と黒の中間の値」をとる画素が2つ以上連続しないため、「白と黒の中間の値」をとる画素において、受光強度の増加または減少のみに着目し、「増減がない」場合は考慮しなくてもよい。「増減がない」場合は処理上、例えば、受光強度が増加又は減少した場合の処理に編入してもよい。
【0036】
表1にケース(1)での白黒順序の決定方法をまとめる。表1では、現在の位置の画素が白と黒の中間の値の受光強度を有する場合に、その受光強度が一つ前の隣接画素の受光強度に対して増加又は減少しているかにより、現在の画素内における白黒順序が一つ前の画素から見てどのような白・黒パターンになるかを示している。
【0038】
〔ケース(2):バーコード原像の最小の白幅、黒幅がイメージセンサの画素幅1つ分程度より広く、かつ、受光強度が白と黒の中間の値をとる状態が2画素以上連続する場合〕
【0039】
この場合、一つ前の画素との受光強度の増減の解析だけでは正しくバーコード原像を再現することができない場合がある。この状態は、例えば
図14(C)の画素番号4、5に相当する。
【0040】
この問題は、一つ前の画素の白・黒順と逆の順番で白・黒の順序を定義することで解決できる。連続二画素の受光強度が中間値の場合における、「一つ前の画素の白・黒順」と現在の位置の画素の白・黒順の関係を表2にまとめる。表2は、一つ前の画素から現在位置の画素に向かう方向における白黒順序を夫々の画素について示している。
【0042】
図14(C)の画素番号3、4、5を例に画素番号5の画素内における白黒順序を決定するプロセスを説明する。
【0043】
まず、
図14(C)の画素番号3の画素は受光強度1であり、白単色とすることができる。次に、画素番号4の画素は受光強度が0.4であるため、前述の表1の受光強度増減の白・黒順対応表により、白→黒と決定することができる。
【0044】
画素番号5の画素は受光強度が0.2である。一つ前の画素(画素番号4)が「白と黒の中間の値をとる状態(受光強度0.4)」であるため、画素番号4と5で、「連続して白と黒の中間の値をとる状態」であるといえる。この時、画素番号4は、「白→黒」という順として決定されているため、画素番号5の白・黒順は画素番号4の白・黒順の逆、つまり、黒→白という順番であると決定することができる。画素番号3〜5について、白・黒順の決定結果は、
図14(B)のバーコードの原像の状態と矛盾しない。
【0045】
尚、前述の「ケース(1):バーコード原像の最小の白幅、黒幅がイメージセンサの画素幅1つ分より広く、かつ、受光強度が白と黒の中間の値をとる状態が2画素以上連続しない場合」では、正しく二値化できる幅が2画素幅程度であるが、ケース(2)では、正しく二値化できる最小幅を1画素幅程度に向上させることができる。
【0046】
〔ケース(3):一つ目の画素が白と黒の中間の値をとる場合〕
【0047】
一つ目の画素が白と黒の中間の値をとる場合は、一つ前の画素が存在しないため、上記の白黒決定方法では白→黒、又は黒→白という順番が確定できない。この場合には、一つ目の画素において白→黒と黒→白の両方のパターンがそれぞれ成立していると仮定する。そして、両方の仮定の下で2画素目以降の二値化処理をそれぞれ実施し、二値化の処理継続中または二値化処理完了後に、より適切な結果が得られた方を採用する。
【0048】
次に、上記ケース(1)〜(3)に示した白黒順序の決定方法に従ってどのように二値化処理を行うかを具体例に基づいて説明する。
【0049】
図2はバーコードの原像が
図13の原像と同じ場合について本発明の実施形態による二値化処理を行った例を示す。
図2(A)のバーコードの原像、
図2(B)のイメージセンサ33の画素0〜7及びイメージセンサ上の結像状態、
図2(C)の受光強度分布は、
図13において対応する図と同一である。
【0050】
図2(D)は各画素の受光強度の値(上段)と、各画素とその一つ前の画素とで受光強度を比較して得られた増減状況(下段)とを示している。増減状況は増加なら“+”、減少なら“−”、変化の無いものは“=”、比較対象のないもの(画素番号0)は“*”と記載している。
【0051】
表3は、
図2の例について上述した白黒順序の決定方法を用いて二値化処理した結果をイメージセンサ33の画素番号0〜7についてまとめたものである。
【0053】
表3の各画素における二値化処理について説明を加える。
・画素番号0:受光強度が1なので、白1、黒0となる(これは画素幅を1と仮定し、白幅が1で黒幅が0という意味である。以下においても同様。)。受光強度が中間値をとらないため、白1、黒0以外の分岐は考慮しない。
・画素番号1:受光強度が0.6で白黒境界が存在する。2画素目なので、一つ前の画素の受光強度との比較のみで考える。画素番号0と受光強度を比較すると、画素1の受光強度は減少している。よって、白黒境界のパターン(白黒順序)は白→黒と決定し、白0.6、黒0.4となる(すなわち白幅0.6、黒幅0.4)。すなわち、バーコードの白部と黒部の境界は画素番号1の画素内において画素番号0側の端部から0.6の位置に存在する。よって「白黒順序」と「境界位置」が確定した。
・画素番号2、3,4:受光強度が0なので、それぞれ白0、黒1となる。
・画素番号5:受光強度が0.2で白黒境界が存在する。一つ前の画素(画素番号4)と現在の画素の受光強度を比較すると増加している。よって、白黒境界のパターンは黒→白の順と決定し、黒0.8、白0.2となる。
・画素番号6,7:受光強度が1なので、それぞれ白1、黒0となる。
【0054】
この結果、黒部に着目すると、画素1〜5にかけて黒部が連続していてその幅は、画素1〜5の黒部の値の合計、つまり、0.4+1.0+1.0+1.0+0.8=4.2とすることができる。この結果は、バーコードの原像32の黒部の幅と一致する。
図2(E)に、この方法によって得られた二値化後のパターン37を示す。この二値化後のパターン37と、従来技術による方法で得られる二値化後のパターン(
図13(E)のパターン17)を比較すると、本発明の実施形態の二値化方法によって得られる二値化後のパターンの方がより原像に近くなる(本例では一致)ことが明らかである。
【0055】
次に、本発明の実施形態におけるバーコード読取の処理フローを具体例を挙げて説明する。
【0056】
〔ハードウェア構成と全体の処理フロー〕
例として
図1のバーコード読取装置のハードウェア構成を考える。このバーコード読取装置は
図3のバーコード読取処理フローを実行できる構成を実装しているものとする。バーコード7の原像は反射ミラー3と集光レンズ4を通してイメージセンサ5に映し出される。
図3のフローでは、イメージセンサ5に結像した状態(S2)からセンサ受光強度出力を取得し(S3)、その値から二値化(S4)する。二値化された情報をデコード処理(S5)してデコードに成功すれば(S6のyes)、デコードデータを出力(S7)して処理を終了し(S8)、デコードに失敗すれば(S6のno)、デコード出力をせずに終了する(S8)。
【0057】
本発明の実施形態による二値化方法は、
図3のステップS4の二値化処理に相当する部分に適用される。
図3のフローの二値化処理(S4)の詳細フローを示したものが
図4と
図5である。
図4、
図5のフローは、本発明の実施形態(表1、表2を含む)に基づくフローである。
【0058】
〔二値化処理の具体例1〕
以下、
図14に示すバーコード原像に対して本発明の実施形態による二値化処理を適用する場合を例にとって説明する。このバーコード原像は、白部の幅1.4で黒部の幅1.4の白黒パターンで構成されている。イメージセンサの各画素の幅は1.0である。
【0059】
図14(D)に示すように、イメージセンサの各画素の受光強度を閾値0.5によって二値化する従来技術の場合、バーコード原像22に対して二値化後のパターン27が大きく異なる結果となることは、前述の通りである。
【0060】
図6は、
図14と同じバーコード原像に対して本発明の実施形態による方法を用いて二値化する場合を示す。
図6(A)はバーコードの原像42を示す。
図6(B)はイメージセンサにおける画素番号0〜7までの8個の画素43を示し、イメージセンサ上の結像状態も示している。
図6(C)は各画素の受光強度図である。
図6(D)は、各画素の受光強度の値(上段)と、各画素とその左隣の画素とで受光強度を比較して得られた増減状況(下段)とを示している。増減状況は増加なら“+”、減少なら“−”、比較対象のない先頭画素(画素番号0)は“*”と記載している。
【0061】
図4は本発明の実施形態における二値化処理(
図3のステップS4)の詳細フローを示す。二値化処理を開始すると(S10)、まず最初に1番目の画素(=画素番号0)の受光強度を取得する(S11)。
図6の例では、イメージセンサの1番目の画素の受光強度は0.8となる。次に、取得した受光強度が0又は1かを判断する(S12)。
図6の例では、取得した受光強度は0.8なので、“no”に分岐し、ステップS13に進む。
【0062】
ステップ13では、1画素目(=画素番号0)の受光強度から白・黒の順番は確定できないため、幅情報群Aと幅情報群Bを設けると共に、それぞれにペンディング値(P)を設定する。幅情報群Aは、1番目の画素における白黒順序が白→黒であると仮定して後続画素から順次得られるバーコードの白部幅と黒部幅に関するデータ群である(
図6(E)参照)。幅情報群Bは、1番目の画素における白黒順序が黒→白であると仮定して後続画素から順次得られるバーコードの白黒パターンと白部幅及び黒部幅とに関するデータ群である(
図6(F)参照)。ペンディング値(P)は上記の仮定から出発して二値化処理を行って得られた結果(二値化データ)の信頼性の程度を示す値であり、値が小さいほど信頼性が高い。なお、幅情報群は「二値化データ群」ともいう。
【0063】
ステップS12において受光強度が0又は1の場合は、1つの幅情報群を設けることになり、受光強度と白黒の別を示す情報を記録する(S14)。
【0064】
図6の例では、ステップS14において、幅情報群Aにはペンディング値(P
A)=0、画素番号0の幅情報として、データ番号00に白:0.8、データ番号01に黒:0.2と記録し、また、幅情報群Bにはペンディング値(P
B)=0、画素番号0の幅情報として、データ番号00に黒:0.2、データ番号01に白:0.8とそれぞれ記録する。
図6(E)と
図6(F)はこのときの二値化をイメージ化したものであり、幅情報群Aを符号46で、幅情報群Bを符号47で示している。ステップS14の段階では、それぞれ画素0の部分のみが記録された状態である。
【0065】
次に、
図4のステップS15に移り、2画素目(=画素1)の受光強度、即ち、
図6(B)のイメージセンサ43の画素番号1の画素の受光強度を取得する。このとき取得される受光強度は0.6となる。ステップS16では、取得した受光強度が0か1かを判断する。
図6の例では、取得した受光強度は0.6であるため、“no”のフローに進み、
図5のステップS21に移る。
【0066】
図5のステップS21は「有効な幅情報群の一つを選ぶ(計算済みを除く)」処理だが、幅情報群A、幅情報群Bともに未計算なので、まずは幅情報群Aを選び、次のステップS22に進む。ステップS22では一つ前の画素、即ち画素番号0の受光強度が、1か0であったかどうかを確認する。
図6の例では、一つ前の画素、即ち画素番号0の受光強度は0.8であるため、ステップ22の“no”のフローに進み、ステップS24に移る。ここまでのステップによって、画素番号0と画素番号1は「受光強度が白と黒の中間の値をとる状態」であることを示している。
【0067】
ステップS24では、一つ前の画素、即ち画素番号0の白・黒の順の決定結果が「黒→白」であるかどうかを確認する。幅情報群Aの画素番号0は白→黒の順であるため、このフローでは”no”となり、ステップS25に進む。ステップS25で、現在処理している画素、即ち画素番号1の白・黒順を「黒→白」と決定し、ステップS27に進む。
【0068】
ステップS27では、現在処理中の画素番号1の画素において「黒→白」という順に(1−受光強度値)の幅の黒部と、受光強度値の幅の白部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号0と画素番号1の境界をまたぐ黒部の幅の合計を計算する。
図6の例では、画素番号0の黒部の幅は0.2、画素番号1の黒部の幅が0.4であるため、合計すると0.6、つまり「黒の連続した幅情報の合計は0.6」となる。次にステップS29に進む。
【0069】
ステップS29では、この計算結果が1以上かどうかを確認する。本例では結果は1以上ではないため、“no”となり、ステップS32に進む。
【0070】
ステップS32では、他に有効な幅情報群があるかどうかを確認する。この時、幅情報群Aの処理のみ行われているが、幅情報群Bは存在するため、「ほかに有効な幅情報群がある」となり、“yes”に分岐してステップS33に進む。
【0071】
ステップS33では、直前まで計算していた幅情報群、即ち、幅情報群Aを不適切だったとして無効化し、再びステップ21に戻る。
【0072】
尚、ステップS32における判断で、隣接画素との境界を跨いでいる部分の幅が1未満の範囲(「破棄範囲」ともいう)にあり、他に有効な情報群が存在しなかった場合、ステップS35に進む。ステップS35では、隣接画素との境界を跨いでいる部分の幅が1未満であっても有効なものとして取り扱い、白・黒の幅情報を記録するが、同時に、ペンディング値(P)を1インクリメントして、データの信憑性レベルが低下していることを記録する。
【0073】
ステップS33からステップS21に戻ると、ステップS21で再び幅情報群を選ぶ。ここでは未計算の幅情報群Bを選ぶことになる。ステップS22では、1つ前の画素(画素番号0)で取得した受光強度は0.8であり、0でも1でもないので、“no”に分岐してステップS24に進む。
【0074】
ステップS24では、一つ前の画素、即ち、幅情報群Bの画素番号0は黒→白の順であるため、このフローでは“yes”となり、ステップS26に進む。ステップS26で、現在処理している画素、即ち画素番号1の白・黒順を「白→黒」と決定し、ステップS28に進む。
【0075】
ステップS28では、現在処理中の画素番号1の画素において「白→黒」という順に受光強度値の幅の白部と、(1−受光強度値)の幅の黒部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号0と画素番号1の境界をまたぐ白部の幅の合計を計算する。
図6の例では、画素番号0の白部の幅は0.8、画素番号1の白部の幅が0.6であるため、合計すると1.4、つまり「白の連続した幅情報の合計は1.4」となる(これを図にしたものが
図6(F)の符号47で示した部分である)。次にステップS30に進む。
【0076】
ステップS30では、この計算結果が1以上かどうかを確認する。結果は1以上のため、“yes”となり、ステップS31に進む。ステップS31では、幅情報群Bの画素番号1の幅情報として白→黒の順に、データ番号02に白:0.6、データ番号03に黒:0.4と記録し、次のステップS34に進む。ステップS34では他に処理すべき有効な幅情報群があるかどうか確認する。本例ではこの段階で有効な情報群が情報群Bのみなので、“no”に進み、
図4のステップS18に移る。
【0077】
ステップS18では、最後に取得した受光強度の画素がイメージセンサの最後の画素かどうかを確認する。この段階ではまだ次の画素が存在するため、“no”に進み、ステップS15に移る。
【0078】
ステップS15では、次の画素、つまり3つ目である画素番号2の受光強度を取得する。
図6の例では、受光強度は“0”となる。ステップS16では、受光強度が0か1かを判断し、本例では受光強度が0のため、“yes”に進み、ステップS17に移る。
【0079】
ステップS17では、画素番号2の受光強度の結果として、データ番号04に黒:1、データ番号05に白:0として記録する。次のステップS18に移り、最後に取得した受光強度の画素が最後の画素かどうかを確認し、ステップS15に戻るか次に進むか判断する。
【0080】
このような処理を画素番号7(イメージセンサの最後の画素)まで行い、ステップS18の判断で最終画素と判断した場合、ステップS19に移る。このとき、有効な幅情報群が複数ある場合は、最もペンディング値が小さいものを結果として選ぶ。本例では、幅情報群Bのみが有効となっているため、幅情報群Bが結果として選ばれることになる。次のステップS20で、選択した幅情報群のデータを整理して、デコードで使用できるデータ(二値化データ)にする、即ち二値化である。
【0081】
ステップS20の処理が終了したら、
図3のデコード処理(S5)に進み、二値化処理で得られた二値化データをデコードする。次のステップS6でデコードが成功したか否かを判断し、デコードに成功したならば(S6で“yes”)、デコードデータを出力(S7)して終了し(S8)、デコードに成功しなければ(S6で“no”)、そのまま終了する(S8)。
【0082】
本例で計算した幅情報群A、幅情報群Bの具体的なデータと幅情報群Bの二値化データ(幅データを整理したもの)を表4にまとめる。
【0084】
結果として、バーコード原像42に対する二値化処理により得られた二値化データは、
図6(F)に示すバーコード像47となり、バーコード原像42と一致した二値化結果を得ることができた。従来の方法で二値化した結果である
図14(E)のパターン27(=
図6(G)のパターン48)と比較すると、本発明の実施形態による二値化処理によって再現したバーコード像の方がより正確である。
【0085】
〔二値化処理の具体例2〕
次に、
図7に示すバーコード原像52に対して本発明の実施形態による二値化処理を適用する場合を例にとって説明する。このバーコード原像52は、白部の幅0.8で黒部の幅0.8の白黒パターンで構成されている。イメージセンサの各画素の幅は1.0である。すなわち、イメージセンサに映るバーコード原像の白・黒の各幅がイメージセンサの各画素幅より狭い状態である。
図7(G)は、閾値0.5による従来の二値化方法で二値化した場合の結果を示す。バーコード原像52の白・黒のパターンと比較すると、バーコード原像52には同じ幅の「黒」が5本存在するが、二値化後のパターン58では黒は3本しか存在しないだけでなく、幅が異なる状態となり、適切に二値化できないといえる。
【0086】
一方、上記の具体例1と同様に、本発明の実施形態の
図3、
図4、
図5のフローに従って二値化処理を行うとどうなるか、以下に示す。
【0087】
図7(A)はバーコード原像52を示す。
図7(B)はイメージセンサにおける画素番号0〜7までの8個の画素53を示す、イメージセンサ上の結像状態も示している。
図7(C)は各画素の受光強度図である。
図7(D)は、各画素の受光強度の値(上段)と、各画素とその左隣の画素とで受光強度を比較して得られた増減状況(下段)とを示している。増減状況は増加なら“+”、減少なら“−”、等しければ“=”を記し、比較対象のない先頭画素(画素番号0)は“*”を記している。
【0088】
図3のフローにおいてバーコード読取装置のイメージセンサに映し出された映像を二値化するステップ(S4)まで来ると、
図4の二値化処理開始のステップ(S10)に移る。次に最初の1画素目(=画素番号0)の受光強度を取得する(S11)。
図7の例では、イメージセンサの1画素目(=画素番号0)の受光強度は0.2である。次に、取得した受光強度が0又は1かを判断する(S12)。
図7の例では、取得した受光強度は0.2なので、“no”に分岐し、ステップS13に進む。
【0089】
ステップ13では、この段階で1画素目(=画素番号0)の白・黒の順番は確定できないため、幅情報群Aと幅情報群Bを設けると共に、それぞれにペンディング値(P)を設定する。幅情報群Aは、1番目の画素における白黒順序が白→黒であると仮定して後続画素から順次得られるバーコードの白部幅と黒部幅に関するデータ群である(
図7(E)参照)。幅情報群Bは、1番目の画素における白黒順序が黒→白であると仮定して後続画素から順次得られるバーコードの白黒パターンと白部幅及び黒部幅とに関するデータ群である(
図7(F)参照)。
【0090】
図7の例では、ステップS14において、幅情報群Aにはペンディング値(P
A)=0、画素番号0の幅情報として、データ番号00に白:0.2、データ番号01に黒:0.8を記録し、また、幅情報群Bにはペンディング値(P
B)=0、画素番号0の幅情報としてデータ番号00に黒:0.2、データ番号01に白:0.2とそれぞれ記録する。
図7(E)と
図7(F)ははこのときの二値化をイメージ化したものであり、幅情報群Aを符号56で、幅情報群Bを符号57で示している。ステップS14の段階では、それぞれ画素0の部分のみが記録された状態である。
【0091】
次に、
図4のステップS15に移り、2画素目(=画素1)の受光強度、即ち、
図7(B)のイメージセンサ53の画素番号1の画素の受光強度を取得する。このとき取得される受光強度は0.6となる。ステップS16では、取得した受光強度が0か1かを判断する。
図7の例では、取得した受光強度は0.6のため、“no”のフローに進み、
図5のステップS21に移る。
【0092】
図5のステップS21は「有効な幅情報群の一つを選ぶ(計算済みを除く)」処理だが、幅情報群A、幅情報群Bともに未計算なので、まずは幅情報群Aを選び、次のステップS22に進む。ステップS22では一つ前の画素、即ち画素番号0の受光強度が、1か0であったかどうかを確認する。
図7の例では、一つ前の画素、即ち画素番号0の受光強度は0.2であるため、ステップ22の“no”のフローに進み、ステップS24に移る。ここまでのステップによって、画素番号0と画素番号1は「受光強度が白と黒の中間の値をとる状態」であることを示している。
【0093】
ステップS24では、一つ前の画素、即ち画素番号0の白・黒の順の決定結果が「黒→白」であるかどうかを確認する。幅情報群Aの画素番号0は白→黒の順であるため、このフローでは“no”となり、ステップS25に進む。ステップS25で、現在処理している画素、即ち画素番号1の白・黒順を「黒→白」と決定し、ステップS27に進む。
【0094】
ステップS27では、現在処理中の画素番号1の画素において「黒→白」という順に(1−受光強度値)の幅の黒部と、受光強度値の幅の白部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号0と画素番号1の境界をまたぐ黒部の幅の合計を計算する。
図7の例では、画素番号0の黒部の幅は0.8、画素番号1の黒部の幅が0.4であるため、合計すると1.2、つまり「黒の連続した幅情報の合計は1.2」となる。次にステップS29に進む。
【0095】
ステップS29では、この計算結果が1以上かどうかを確認する。本例では結果は1以上なので、“yes”となり、ステップS31に進む。ステップS31では、幅情報群Aの画素番号1の幅情報として白→黒の順に、データ番号02に白:0.2、データ番号03に黒:0.8と記録し、次のステップS34に進む。ステップS34では他に処理すべき有効な幅情報群があるかどうか確認する。本例ではこの段階で幅情報群Bが未計算なので、“yes”に進み、ステップS21に戻る。
【0096】
ステップS21では、再び幅情報群を選ぶ。ここでは未計算の幅情報群Bを選ぶことになる。ステップS22では、1つ前の画素(画素番号0)で取得した受光強度は0.2であり、0でも1でもないので、“no”に分岐してステップS24に進む。
【0097】
ステップS24では、一つ前の画素、即ち、幅情報群Bの画素番号0は黒→白の順であるため、このフローでは“yes”となり、ステップS26に進む。ステップS26で、現在処理している画素、即ち画素番号1の白・黒順を「白→黒」と決定し、ステップS28に進む。
【0098】
ステップS28では、現在処理中の画素番号1の画素において「白→黒」という順に受光強度値の幅の白部と、(1−受光強度値)の幅の黒部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号0と画素番号1の境界をまたぐ白部の幅の合計を計算する。
図7の例では、画素番号0の白部の幅は0.2、画素番号1の白部の幅が0.6であるため、合計すると0.8、つまり「白の連続した幅情報の合計は0.8」となる(これを図にしたものが
図7(F)の符号57で示した部分である)。次にステップS30に進む。
【0099】
ステップS30では、ステップS28で算出した「白の連続した幅情報の合計」が1以上かどうかを判断する。この計算結果は0.8であるため、ステップS30は“no”となり、ステップS32に進む。
【0100】
ステップS32では、他に有効な幅情報群があるかどうかを確認する。本例では、幅情報群Aが存在するため、「ほかに有効な幅情報群がある」となり、“yes”に分岐してステップS33に進む。ステップS33では、直前まで計算していた幅情報群、即ち、幅情報群Bを不適切だったとして無効化し、再びステップS21に戻る。
【0101】
ステップS21では、再びで幅情報群を選ぶ。本例ではこの段階で計算すべき幅情報群が残っていないため、
図4のステップS18に移る。
【0102】
ステップS18では、最後に取得した受光強度の画素がイメージセンサの最後の画素かどうかを確認する。この段階ではまだ次の画素が存在するため、“no”に進み、ステップS15に移る。ステップS15で次の画素、つまり3つ目である画素番号2の受光強度を取得する。
図7の例では、受光強度は0.6となる。ステップS16で受光強度が0か1かを判断し、本例では受光強度は0でも1でもないため、“no”に進んでステップS21に移る。
【0103】
このような処理を画素番号7(イメージセンサの最後の画素)まで行い、ステップS18の判断で最終画素と判断した場合、ステップS19に移る。このとき、有効な幅情報群が複数ある場合は、最もペンディング値が小さいものを結果として選ぶ。本例では、幅情報群Aのみが有効となったため、幅情報群Aが結果として選ばれることになる。次のステップS20で、選択した幅情報群のデータを整理して、デコードで使用できるデータ(二値化データ)にする、即ち二値化である。
【0104】
本例で計算した幅情報群A、幅情報群Bの具体的なデータと幅情報群Aの二値化データ(幅データを整理したもの)を表5にまとめる。幅情報群Aはペンディング値Pが3に増加している。幅情報群Bは2画素目(=画素1)の処理の段階で破棄されている。
【0106】
本例において、本発明の実施形態に従って二値化した結果のイメージが
図7(E)のパターン56である。バーコード原像の白幅及び黒幅が画素幅より狭いにもかかわらず、従来の方法で二値化したイメージ58と比較して、画素番号4以降では、0.8の幅を正確に再現しているなど、原像52の再現度が高い。つまり、後段のデコード処理でデコードに成功する可能性が高いことを意味する。
【0107】
このとき、二値化処理中のペンディング値の存在によって再現性が低下していることを後段のデコード処理ブロックに通知することができるため、仮に、デコードできたとしても、その結果の信頼性が低下していること、及びその度合いを数値でアウトプットすることも可能である。
【0108】
〔本発明の実施形態の処理フローの変形例〕
図4及び
図5による二値化方法では、計算する量をできるだけ減らせるよう、早い段階で「不適切」な結果を振るい落とせるように、
図5のステップS29とステップS30で画素境界を跨ぐ白または黒の幅の下限値を1(=画素幅と同じ)として切り分け、ステップS33で他に有効な候補があればもう一方は無効化する、という処理を設けたが、次のような方法でもよい。
【0109】
・
図5のステップS29とステップS30で画素境界を跨ぐ白または黒の幅の下限値を0.5〜1の範囲に設定して、「不適切」と判断される数を敢えて下げ、二値化処理候補(幅情報群)をできるだけ最後まで残す方法。これは原像が画素幅より小さい白又は黒が存在している場合に有効である。
【0110】
・ステップS33で、ある幅情報群を「不適切」と判断した場合でも幅情報群を敢えて無効化せず、全ての画素の処理が完了した段階でペンディング値の総計で比較し、より値の小さい方を「より信頼度の高い結果」として採用する方法。
【0111】
・ステップS33で、ある幅情報群を「不適切」と判断した場合でも幅情報群を敢えて無効化せず、全ての画素の処理を行い、全ての二値化結果でデコードを試み、デコードできた二値化結果の中で、ペンディング値の総計が最も小さいものを「より信頼度の高い結果」として採用する方法。
【0112】
〔読取限界について〕
特殊な例として、
図8(A)と
図8(B)を考える。
図8(A)は、幅1の白と黒が交互に存在するバーコード原像で、それぞれ各画素の中央に、白・黒の境界が映り込むような状態である。一方、
図8(B)は、幅0.5の白と黒が交互に存在するバーコード原像で、それぞれ各画素に白・黒が均等に映り込むような状態である。
図8(A)及び
図8(B)では、どちらも、全てのセンサ画素の受光強度の結果が全く同じとなる。つまり、センサ画素の受光強度の値を用いて始まる二値化処理の結果、原像が
図8(A)だったのか、
図8(B)だったのかは判断できない。具体的には、
図8(A)及び
図8(B)のそれぞれについて、本発明の実施形態である
図4及び
図5のフローで二値化処理を行うと、いずれも
図8(A)の原像と同一の二値化結果となり、必ずしも原像を再現できない。これは、画素幅より小さい白・黒の幅を持つバーコード原像では、二値化処理結果の信頼性が低下することを意味する。
【0113】
もう一つの特殊な例として、
図9(A)と
図9(B)を考える。
図9(A)は、不均一な幅の白と黒のパターンで、一部、0.8幅の白が存在するものである。
図9(B)は
図9(A)のセンサ画素の受光強度の値が全く同じとなるように
図9(A)と異なる原像を想定したものである。
図9(B)の原像には0.4幅の白が含まれている。
【0114】
図9(A)及び
図9(B)のそれぞれについて、本発明の実施形態である
図4及び
図5のフローで二値化処理を行うと、いずれも
図9(A)の原像と同一の二値化結果となる。これは二値化過程において想定しうる原像のなかで、より幅の太い白または黒の幅を持つ原像の方が「より正しいもの」として判断していることを意味する。
図9(A)の原像は一部画素幅を下回る白が含まれていても二値化できるが、
図9(B)の原像は二値化できる限界幅を下回っていて二値化できない(二値化した結果は
図9(A)の原像と同じとなってしまう)。
【0115】
〔センサ受光強度の前処理〕
現実的には、原像に対するセンサ受光強度にはノイズ成分が含まれている。また、バーコードの印刷状態や印刷のインクの状態に依存するため、白部は必ずしもセンサ受光可能値の最大値とはならず、また、黒部も必ずしもセンサ受光可能値の最小値をとはならない。
【0116】
そこで、32個の画素をもつイメージセンサに、ある原像が映っている状態を考える。センサ受光可能最大値を1、センサ受光最小値を0としたときに、横軸にセンサ画素番号、縦軸に受光強度を示した例として
図10のようになったとする。
図10では、白部は受光強度の値で0.6〜0.8の間にノイズ成分を含んだ状態で分布している。また、黒部は受光強度の値で0.0〜0.2の間にノイズ成分を含んだ状態で分布している。
【0117】
この状態では、本発明の実施形態による二値化方法には利用しにくいため、センサ受光強度の最大値を1、最小値を0となるように規格化する。センサ画素番号をx、その受光強度をf(x)とし、その最大値をf(x)
max、最小値をf(x)
minとすると、センサ受光強度の最大値を1、最小値を0となるように規格化した値g(x)は、
【数1】
となる。g(x)を図にしたものが
図11である。これで最大値を1、最小値を0とできるが、ノイズ成分が残っているため、g(x)に対して、15%の幅をノイズと想定し、0.85以上の値であれば1と見なし、また、0.15以下の値であれば0と見なすことによるノイズ除去を行う。その結果が
図12である。
図12は白部が1、黒部が0、その境界は中間値をとるような状態となり、本発明の実施形態による二値化処理に適した状態になる。
【0118】
このように、実際にイメージセンサで取得される受光強度を二値化しやすい状態に前処理してから、本発明の実施形態による二値化を行っても良い。
【0119】
本発明の実施形態における二値化方法では、バーコード読取装置のイメージセンサで撮像されたバーコードの撮像画像について画素毎の受光強度を分析し、対象の画素の受光強度が白部と黒部の中間の値をとる場合に、当該画素内にバーコードの白部と黒部の境界が存在すると判断した上で、当該画素とそれに隣接する画素での受光強度の増減関係と中間の値とに基づいて当該画素内における白黒順序及び境界位置を決定することにより、従来想定されていた最小分解能より小さい幅の二値化が可能となった。
【0120】
従来のバーコード読取装置ではリニアイメージセンサの3画素分程度の幅が検出できる限界であったが、本発明の実施形態によるバーコード読取装置では1画素分程度の幅も検出できるようになった。
【0121】
なお、上記のバーコード読取装置は、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。また、上記のバーコード読取方法も、ハードウェア、ソフトウェア又はこれらに組合せにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。
【0122】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば、光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(random access memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0123】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0124】
(付記1)
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するプロセッサを備え、前記プロセッサは二値化処理の対象画素の受光強度が1画素全体がバーコードの白部に相当するときの第1受光強度と黒部に相当するときの第2受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定することを特徴とするバーコード読取装置。
【0125】
(付記2)
前記プロセッサは、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記1に記載のバーコード読取装置。
【0126】
(付記3)
前記プロセッサは、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記1又は2に記載のバーコード読取装置。
【0127】
(付記4)
前記プロセッサは、前記対象画素内での白黒順序と前記第1受光強度又は前記第2受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする付記1〜3のいずれか1に記載のバーコード読取装置。
【0128】
(付記5)
前記プロセッサは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第1初期条件と黒部から白部に変わる第2初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする付記1〜4のいずれか1に記載のバーコード読取装置。
【0129】
(付記6)
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである付記5に記載のバーコード読取装置。
【0130】
(付記7)
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである付記5に記載のバーコード読取装置。
【0131】
(付記8)
バーコードに光を照射する照射光源と、
前記バーコードからの反射光をイメージセンサ上に結像する集光レンズと、
前記結像されたバーコードの映像に対し画素毎に受光強度を測定するイメージセンサと、
を更に備えことを特徴とする付記1〜7のいずれか1に記載のバーコード読取装置。
【0132】
(付記9)
前記プロセッサは、更に、二値化処理により得られた二値化データに対してデコード処理を行うことを特徴とする付記1〜8のいずれか1に記載のバーコード読取装置。
【0133】
(付記10)
前記プロセッサは、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数の情報に基づいて、前記デコード処理を行って取得できたデコードデータのうち、前記個数が少ない方のデコードデータを選択することを特徴とする付記5を引用する付記9に記載のバーコード読取装置。
【0134】
(付記11)
前記プロセッサは、更に、前記イメージセンサの各画素にて測定された受光強度に対して最大値1及び最小値0となるように規格化し、所定の第1閾値以上であれば1と見なし、所定の第2閾値以下であれば0と見なすノイズ除去処理を行うことを特徴とする付記1〜10のいずれか1に記載のバーコード読取装置。
【0135】
(付記12)
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するステップを含み、前記ステップにおいて二値化処理の対象画素の受光強度が1画素全体がバーコードの白部に相当するときの第1受光強度と黒部に相当するときの第2受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定することを特徴とするバーコード読取方法。
【0136】
(付記13)
前記ステップでは、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記12に記載のバーコード読取方法。
【0137】
(付記14)
前記ステップでは、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記12又は13に記載のバーコード読取方法。
【0138】
(付記15)
前記ステップでは、前記対象画素内での白黒順序と前記第1受光強度又は前記第2受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする付記12〜14のいずれか1に記載のバーコード読取方法。
【0139】
(付記16)
前記ステップでは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第1初期条件と黒部から白部に変わる第2初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする付記12〜15のいずれか1に記載のバーコード読取方法。
【0140】
(付記17)
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである付記16に記載のバーコード読取方法。
【0141】
(付記18)
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである付記16に記載のバーコード読取方法。
【0142】
(付記19)
バーコードに光を照射するステップと、
前記バーコードからの反射光をイメージセンサ上に結像するステップと、
前記結像されたバーコードの映像に対し画素毎に受光強度を測定するステップと、
を更に含むことを特徴とする付記12〜18のいずれか1に記載のバーコード読取方法。
【0143】
(付記20)
前記二値化処理するステップでは、更に、二値化処理により得られた二値化データに対してデコード処理を行うことを特徴とする付記12〜19のいずれか1に記載のバーコード読取方法。
【0144】
(付記21)
前記二値化処理するステップでは、更に、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数の情報に基づいて、前記デコード処理を行って取得できたデコードデータのうち、前記個数が少ない方のデコードデータを選択することを特徴とする付記16を引用する付記20に記載のバーコード読取方法。
【0145】
(付記22)
前記二値化処理するステップでは、更に、前記イメージセンサの各画素にて測定された受光強度に対して最大値1及び最小値0となるように規格化し、所定の第1閾値以上であれば1と見なし、所定の第2閾値以下であれば0と見なすノイズ除去処理を行うことを特徴とする付記12〜21のいずれか1に記載のバーコード読取方法。
【0146】
(付記23)
コンピュータを、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理する手段として機能させるためのバーコード読取プログラムであって、前記手段により、二値化処理の対象画素の受光強度が1画素全体がバーコードの白部に相当するときの第1受光強度と黒部に相当するときの第2受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定することを特徴とするバーコード読取プログラム。
【0147】
(付記24)
前記手段は、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記23に記載のバーコード読取プログラム。
【0148】
(付記25)
前記手段は、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記23又は24に記載のバーコード読取プログラム。
【0149】
(付記26)
前記手段は、前記対象画素内での白黒順序と前記第1受光強度又は前記第2受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする付記23〜25のいずれか1に記載のバーコード読取プログラム。
【0150】
(付記27)
前記手段は、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第1初期条件と黒部から白部に変わる第2初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする付記23〜26のいずれか1に記載のバーコード読取プログラム。
【0151】
(付記28)
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである付記27に記載のバーコード読取プログラム。
【0152】
(付記29)
前記判定基準は、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである付記27に記載のバーコード読取プログラム。
【0153】
(付記30)
前記手段は、更に、二値化処理により得られた二値化データに対してデコード処理を行うことを特徴とする付記23〜29のいずれか1に記載のバーコード読取プログラム。
【0154】
(付記31)
前記手段は、更に、取得された2つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数の情報に基づいて、前記デコード処理を行って取得できたデコードデータのうち、前記個数が少ない方のデコードデータを選択することを特徴とする付記27を引用する付記30に記載のバーコード読取プログラム。
【0155】
(付記32)
前記手段は、更に、前記イメージセンサの各画素にて測定された受光強度に対して最大値1及び最小値0となるように規格化し、所定の第1閾値以上であれば1と見なし、所定の第2閾値以下であれば0と見なすノイズ除去処理を行うことを特徴とする付記23〜31のいずれか1に記載のバーコード読取プログラム。