IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ジック アーゲーの特許一覧

<>
  • 特許-光学コードのモジュールサイズの特定 図1
  • 特許-光学コードのモジュールサイズの特定 図2
  • 特許-光学コードのモジュールサイズの特定 図3
  • 特許-光学コードのモジュールサイズの特定 図4
  • 特許-光学コードのモジュールサイズの特定 図5
  • 特許-光学コードのモジュールサイズの特定 図6
  • 特許-光学コードのモジュールサイズの特定 図7
  • 特許-光学コードのモジュールサイズの特定 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-04-22
(45)【発行日】2022-05-06
(54)【発明の名称】光学コードのモジュールサイズの特定
(51)【国際特許分類】
   G06K 7/14 20060101AFI20220425BHJP
   G06K 7/10 20060101ALI20220425BHJP
   G06T 7/60 20170101ALI20220425BHJP
【FI】
G06K7/14 078
G06K7/14 052
G06K7/10 432
G06K7/10 456
G06T7/60 150Z
【請求項の数】 15
【外国語出願】
(21)【出願番号】P 2020116092
(22)【出願日】2020-07-06
(65)【公開番号】P2021039734
(43)【公開日】2021-03-11
【審査請求日】2020-09-30
(31)【優先権主張番号】19195509.5
(32)【優先日】2019-09-05
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】591005615
【氏名又は名称】ジック アーゲー
(74)【代理人】
【識別番号】110001069
【氏名又は名称】特許業務法人京都国際特許事務所
(72)【発明者】
【氏名】パスカル シューラー
(72)【発明者】
【氏名】マルセル ハンプフ
(72)【発明者】
【氏名】フレドリック オルソン
【審査官】松尾 真人
(56)【参考文献】
【文献】特開平05-128292(JP,A)
【文献】特表2008-535058(JP,A)
【文献】米国特許第05818023(US,A)
【文献】特開2019-049967(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06K 7/00-7/14
G06T 7/00-7/90
(57)【特許請求の範囲】
【請求項1】
コードリーダ(10)により光学コード(20)のモジュールサイズを特定する方法であって、
前記コード(20)の画像データを取得し、
該画像データから、考えられる明度値毎に相対頻度を示す関数である明度分布をめ、
前記明度分布から前記モジュールサイズを特定すること
を特徴とする方法。
【請求項2】
前記明度分布がグレースケールヒストグラムであることを特徴とする請求項1に記載の方法。
【請求項3】
前記モジュールサイズを最も明るい領域及び最も暗い領域を除いた明度分布の中間領域から特定することを特徴とする請求項1又は2に記載の方法。
【請求項4】
前記画像データ中で前記光学コード(20)の各エッジを見つけ出し、前記明度分布を該エッジの周辺における画像データだけに基づいて形成することを特徴とする請求項1~3のいずれかに記載の方法。
【請求項5】
前記明度分布を、ノイズ閾値を超える頻度を示す領域である活動領域に合わせて切断することを特徴とする請求項1~4のいずれかに記載の方法。
【請求項6】
前記モジュールサイズを前記明度分布の幅(B)、積分(A)及び/又は極大値から特定することを特徴とする請求項1~5のいずれかに記載の方法。
【請求項7】
前記モジュールサイズを前記明度分布の積分(A)と幅(B)から成る指数から特定することを特徴とする請求項6に記載の方法。
【請求項8】
前記指数を、前記モジュールサイズを求めるスケーリング関数(F)を用いて、特にモジュール当たりの画素数を単位として表すことを特徴とする請求項7に記載の方法。
【請求項9】
前記明度分布の縮尺を、該明度分布の中央と両側とで異なる重み因子を用いて変更することを特徴とする請求項1~8のいずれかに記載の方法。
【請求項10】
前記明度分布の中央をその両側に比べて引き上げることを特徴とする請求項9に記載の方法。
【請求項11】
前記明度分布を左側、中央及び右側に3分割し、その3つの部分に対してそれぞれ縮尺変更のための1つの重み因子を用いることを特徴とする請求項1~10のいずれかに記載の方法。
【請求項12】
前記光学コード(20)を前記モジュールサイズの特定後に読み取ることを特徴とする請求項1~11のいずれかに記載の方法。
【請求項13】
前記モジュールサイズに基づいて選択された復号法及び/又は前記モジュールサイズをパラメータとする復号法を用いて前記光学コード(20)を読み取ることを特徴とする請求項12に記載の方法。
【請求項14】
特定されたモジュールサイズを境界値と比較し、それを上回るか下回るかに応じて或る復号法又は復号処理の構成要素を使用すること、そしてその境界がモジュール当たり1画素から3画素までというモジュールサイズの範囲内にあることを特徴とする請求項1~13のいずれかに記載の方法。
【請求項15】
光学コード(20)を読み取るためのコードリーダ(10)であって、前記コード(20)を含む画像データを取得するための画像センサ(24)と、前記コード(20)を或る復号法で読み取るように構成された制御及び評価ユニット(26)とを備えるコードリーダ(10)において、
前記制御及び評価ユニット(26)が請求項1~14のいずれかに記載の方法で前記コード(20)のモジュールサイズを特定するように構成されていること
を特徴とするコードリーダ(10)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、請求項1又は14のプレアンブルに記載の光学コードのモジュールサイズの特定及びコードリーダに関する。
【背景技術】
【0002】
コードリーダは、スーパーマーケットのレジ、荷物の自動識別、郵便物の仕分け、空港での手荷物の発送等、物流での利用が知られている。コードスキャナの場合、読み取り光線が回転ミラー又はポリゴンミラーホイールでコードを横切るように案内される。カメラベースのコードリーダは画像センサを用いて物体の画像をその表面のコードとともに撮影し、画像評価ソフトウエアがその画像からコード情報を抽出する。カメラベースのコードリーダは、1次元バーコード以外の種類のコード、例えばマトリックスコードのように2次元的に構成され、より多くの情報を利用できるコードでも問題なく処理できる。
【0003】
ある重要な一群の利用形態では、コードを付した物体がコードリーダの近くを通過するように搬送される。そして、コードスキャナがその読み取り領域内に次々に入ってくるコードをそれぞれ検出する。一方、カメラベースのコードリーダでは、ライン走査カメラがコード情報を持つ物体画像を相対運動に伴って次々に1ラインずつ読み取る。2次元画像センサを用いる場合は、撮像レートと搬送速度に応じて多少重なり合う複数の画像データが規則的に取得される。物体をコンベア上で任意の向きに配置できるようにするため、読み取りトンネルに複数のコードリーダを設け、物体を複数の側又は全ての側から撮影できるようにすることも多い。
【0004】
光学コードの特徴的なサイズの1つはモジュールサイズである。モジュールとはコードの最小要素であり、コード要素又はキャラクタは一又は複数のモジュールから成る。モジュールサイズはモジュールの大きさを表す尺度であり、モジュール当たりの画素数(Pixel pro Modul:ppm)で示される。従って、バーコードの場合、1本のバーはモジュールサイズの1倍又は複数倍に相当する幅を有する。これは、2次元コードにおける暗領域又は明領域の2つの次元についても同様である。モジュールサイズが大きければ、コードが画像データ又はグレースケールプロファイル内において高解像度で捕らえられることになる。従って、モジュールサイズが小さくなるほど復号が難しくなり、特にサイズが2ppm程度以下に達するとそうなる。
【0005】
とりわけモジュールサイズが小さい場合、良い推定値が初めから復号器に分かっていれば有利であろう。そうすれば低い解像度のコードをも読み取るための措置を講じることができる。その一例がいわゆる超解像である。これは計算によって複数の低解像度の画像をより高解像度の画像にする方法のことである。逆に、モジュールサイズが大きく、いずれにせよ高解像度で認識されるコードに対しては高コストの復号処理なしで済ませることも可能である。
【0006】
しかし実のところ、従来の方法では復号処理が成功した後でようやくモジュールサイズが分かる。その後は、コードがどのようなキャラクタを含んでいるかが明らかになり、画像データにおけるコード全体のサイズに基づいてモジュールサイズをより高い精度で計算できる。例えばバーコードの場合、キャラクタに基づいて開始パターンと終了パターンの間のモジュールの総数を求めた後、画素数で表したコードの広さを前記総数で割る。従って、モジュールサイズは復号の結果分かるものであって、復号を支援するものではない。
【0007】
原理的にはモジュールサイズは、取得されたグレースケールプロファイルの2つのエッジ間の最小間隔に他ならない。このようなエッジ、つまり明と暗のコード要素間の移行は、グレースケールプロファイルの導関数の極値を通じて見つけ出すことができる。しかしその結果はエッジの位置がどの程度正確に突き止められるかに高度に依存する。特に、モジュールサイズが非常に小さい場合、それは難しくなる。なぜなら、まずエッジ位置は離散的な値に過ぎず、従ってサブピクセルの精度ではないからである。しかもエッジ位置はノイズに影響されやすい。そもそも、純粋にエッジに基づく方法は基本的に二値化であり、元のグレースケール情報(普通は8ビット又はそれ以上)が僅か1ビットに縮減される。この情報損失もまたモジュールサイズを特定できる精度を制限してしまう。
【0008】
更にまた、コード読み取りの分野において、画像データのグレースケールヒストグラムを生成することが知られている。しかしこれは、例えばより均一な照明の生成又はエミュレートのため、あるいは適切な二値化閾値の算出のため等、全く別の目的で用いられる。
【発明の概要】
【発明が解決しようとする課題】
【0009】
故に、本発明の課題は、モジュールサイズを特定するためのより改善された方法を提供することである。
【課題を解決するための手段】
【0010】
この課題は、請求項1又は14に記載の光学コードのモジュールサイズの測定方法及びコードリーダにより解決される。光学コードはバーコードとすることができるが、公知の様々な標準のいずれかに準拠した2次元コードでもよい。コードを含み、好ましくは少なくとも粗くセグメント化されることでコード領域に合わせて切断された画像データが生成される。画像データは典型的にはカメラベースのコードリーダの画像センサで取得されるが、ここではバーコードスキャナの強度プロファイルも画像データの概念に含まれる。この画像データから強度又は明度分布が生成される。これは一般には、考えられる明度値毎に相対頻度を示す関数であり、特に、離散的な形ではグレースケールヒストグラムである。つまり明度分布は、X軸上に考えられる明度又は強度(例えば8ビットの場合は黒を0、白を255とするグレースケール)をとり、Y軸上にそれらに対応する相対頻度をとることにより描くことができる。グレースケールヒストグラムの場合、グレースケール値はいわゆるビンであり、各ビンの中でそれに対応する明度値を有する画素の数を数える。
【0011】
本発明の出発点となる基本思想は、モジュールサイズを明度分布から特定するということにある。これは、コードの間隔やコード内のエッジの間隔の測定を行わない、間接的なアプローチである。むしろ、特にモジュールサイズが小さい場合、どのグレースケール値が画像データ中に出現するか、あるいはどのようにそれが分布するかということにモジュールサイズが影響を及ぼす、という事実を利用し、明度分布中でそれを調べる。モジュールサイズの特定は、比較的粗めにして、単に該モジュールサイズが特定のクラスに入るか否かを調べるのみとすることができる。もっとも、実際に数値を導き出す方が好ましい。
【0012】
本発明には、一連の画像処理の非常に早い段階で、特に復号の成功を前提とせずに、簡単且つ迅速にモジュールサイズを計算できるという利点がある。また、例えばバーコードなら2.0ppmから0.6ppmまで、2次元コードなら2.5ppmから1.5ppmまでというように、サブピクセル領域にも及ぶ高い精度が達成される。これらは、例えば今日では超解像法で復号が可能となるようなppmの領域である。しかも本方法は、位置が正確な高精度のエッジ検出を前提とせず、しかも単なる局所的な画像情報ではなく、広がりを持つ面から得られる画像情報を利用する。故に、局所的な妨害又はノイズに対する頑強性も明らかに高い。
【0013】
モジュールサイズは最も明るい領域及び最も暗い領域を除いた明度分布の中間領域から特定することが好ましい。高解像度のコードの画像データに対して普通期待するのは、一方の側に明るいコード領域に対応するピークがあり、他方の側に暗いコード領域に対応するピークがあるという、双峰型の明度分布であろう。従来これは、画像データを二値化するため、つまり各画素を明又は暗に分類するために利用される。一方、この実施形態では、明度分布が、最も明確に明るい画素及び暗い画素を除外した移行領域にまさに限定される。従ってここでは、従来なら消されるか明暗のいずれかに割り当てられていた中間の値に重要性がある。モジュールサイズの大きいコードを高解像度で撮影した場合、この中間領域はほぼ平坦になる。本発明では、モジュールサイズが小さい場合、多少なりとも繊維状にほぐれた追加のピークが移行領域に形成され、そのピークの特性からモジュールサイズを再現できることが分かった。
【0014】
画像データ中で光学コードの各エッジを見つけ出し、明度分布をエッジの周辺における画像データだけに基づいて形成することが好ましい。つまり、コードの画像データの全画素から明度分布を求めることも原理的に可能ではあるが、そうではなく特定の画素、つまりエッジの領域にある画素が選択される。そのために、特別に位置を正確に、ましてやサブピクセルの精度でエッジの場所を突き止める必要はない。なぜなら、やや広めの周辺領域から若干の画素が明度分布に寄与したとしても、モジュールサイズの特定においてはせいぜい僅かな誤差しか生じないからである。そこで、例えば序論で触れたようにグレースケールプロファイルの導関数の極値としてエッジの場所を突き止め、そこにある画素及びそこから特定の最大距離の範囲内にある画素を明度分布の特定に利用する。エッジ周辺への限定により、前の段落で議論したように本発明に係るモジュールサイズの推定にほとんど寄与しないであろう真に暗い領域や明るい領域がより多く明度分布から除外される。エッジの周辺を観察することで、どれが明度分布の周縁にある明又は暗に該当し、どれがその間にある主に重要なグレースケールの移行領域であるかという閾を定めなくて済む。
【0015】
明度分布は、ノイズ閾値を超える頻度を示す領域である活動領域に合わせて切断されることが好ましい。このようにすれば、対応するグレースケール値の頻度が単にノイズの作用によりある程度に達しているように見えるに過ぎず、実際にはモジュールサイズの特定に関係する情報を含んでいないような領域が、明度分布から除去される。以下に述べる基準及び評価は、特に改めて言及していなくても、明度分布全体ではなく活動領域に関するものとすることが好ましい。
【0016】
モジュールサイズは明度分布の幅、積分及び/又は極大値から特定することが好ましい。これらの特徴を利用して、明度分布の広がり及び形状、好ましくは明暗間の移行領域の広がり及び形状が、簡単に特定及び処理できる量の形で取得される。幅は、明度分布中に存在する最小及び最大のグレースケール値の差に対応する。明度分布の積分と極大値は明度分布の推移を簡単な方法で描写する。ゼロと僅かしか違わない頻度が結果を歪めることがないように、幅と積分は明度分布のうちノイズ閾値を超える活動領域から算出することが好ましい。前述の諸量からモジュールサイズの推定値を計算することができる。例えば、少なくともモジュールサイズが小さい場合はモジュールサイズが明度分布の幅(特に明度分布の活動領域の幅)に線形的に依存する、と仮定するだけで既に良い結果が得られる。このアプローチでは、あとは幅に一定の倍率を掛けるだけでモジュールサイズを特定できる。
【0017】
モジュールサイズは明度分布の積分と幅から成る指数から特定することが好ましい。これは計算が非常に簡単であり、しかもモジュールサイズの計算にとって非常に好適なベースとなることが判明した。
【0018】
前記指数は、モジュールサイズを求めるスケーリング関数を用いて、特にモジュール当たりの画素数を単位として表すことが好ましい。スケーリング関数はまず、求める単位ppmへの換算、更にはコードが撮影されたときの使用条件への適合化に用いられる。この関数は、例えば既知のモジュールサイズ又は復号後に事後的に特定されたモジュールサイズを持つ既に読み取ったコードから較正又は学習することができる。簡単にするならスケーリング関数として単に倍数を用いる。なぜなら、特に注目すべきモジュールサイズ2.5ppm程度までの領域ではそれで十分に良い結果が出るからである。
【0019】
明度分布の縮尺を、該明度分布の中央と両側とで異なる重み因子を用いて変更することが好ましい。そのためには例えば重み付け関数を点毎に明度分布と掛け合わせたり、数学的に同等の縮尺変更を行ったりする。既に何度か述べたように、明度分布の側部領域はコードの平面領域における明画素と暗画素に由来する一方、モジュールサイズはむしろ明暗の間の移行領域におけるグレースケール値から推定される。故に、重み因子により明度分布を作為的に適合化し、特定の部分により大きい又は小さい重みを与えることは有意義であり得る。明度分布の積分を求める場合はその前に縮尺変更を行うことが好ましい。
【0020】
明度分布の中央はその両側に比べて引き上げられることが好ましい。つまり、両側ではより小さい「1」の重みで、中央ではより大きい「1」の重みで明度分布の縮尺を変更するのである。これにより明度分布の中間領域の影響が増す。既に明度分布がエッジの周辺のみに基づいている場合は、明るい面領域及び暗い面領域を考慮しないことによる望ましい効果が新たな重み付けにより更に強められる。
【0021】
明度分布を左側、中央及び右側に3分割し、その3つの部分に対してそれぞれ縮尺変更のための1つの重み因子を用いることが好ましい。これは明度分布の両側に対して中央とは異なる重み付けを行うための特殊で簡単な実装である。好ましくは3等分する。左側と右側に対する重み因子は互いに等しいことが好ましい。
【0022】
光学コードはモジュールサイズの特定後に読み取ることが好ましい。つまり、モジュールサイズの特定はコードを読み取るための画像処理中の初期のステップで行われるため、復号の結果を利用できない。復号後にモジュールサイズを特定するなら、序論で述べたように非常に正確な従来の方法が代わりに利用できるが、これは明度分布に基づくものではない。
【0023】
むしろ逆に、モジュールサイズに基づいて選択された復号法及び/又はモジュールサイズをパラメータとする復号法を用いてコードを読み取ることが好ましい。つまり、このモジュールサイズは復号の際に利用可能なパラメータであり、場合によってはコード領域の細分化に早くも利用できる。モジュールサイズが事前に分かることにより復号化が助けられ、簡単になり、高速化され、改善され、又はそもそも初めて可能になる。一例として超解像、つまり複数組の低解像度画像データからの高解像度画像データの生成が挙げられる。モジュールサイズはそもそもどのコードに超解像を用いるかを示すヒントになり得る。その上、モジュールサイズは超解像アルゴリズムにとって非常に役に立つパラメータでもある。別の例は、モジュールサイズが現有の復号法には小さすぎるため復号が全く不可能であることの認識である。今日、バーコードに対する事実上の限界は0.6ppm程度である。まずコストをかけて様々な複雑な復号法を試みて失敗する代わりに、モジュールサイズに基づき、コードを読み取り不能と直ちに分類すれば資源の節約になる。
【0024】
特定されたモジュールサイズを境界値と比較し、それを上回るか下回るかに応じて或る復号法又は復号処理の構成要素を使用するようにすることが好ましい。これは、モジュールサイズの数値を用いるのではなく、一種のスイッチのように単純に比較し、モジュールサイズがどの分類に入るか、好ましくは小さいモジュールサイズと大きいモジュールサイズのいずれに入るかを見るものであって、いわば前の段落で述べたような離散的な観察である。その間の境界は1~3ppmの範囲内にあることが好ましく、更に好ましくは1.5と2.5の間とする。特に好適な境界値は、バーコードの場合は2ppm、2次元コードの場合は2.5pmである。例えば小さいモジュールサイズには超解像アルゴリズムを用いる。更に、複数の復号器にコードの読み取りを試行させることが通例であるから、それら復号器の全て又は一部の合成を、モジュールサイズが境界値を上回ったか否かに応じて行うことができる。全ての復号法ではなく、モジュールサイズが境界値を上回るか下回るかに応じてパラメータ設定が変わる又はそもそも参照されたりされなかったりする特定の構成要素だけを対象にすることも考えられる。
【0025】
本発明に係る光学コード読み取り用コードリーダは、コードを含む画像データを取得するための画像センサを備えている。それは、コードスキャナの受光器、1本のラインコード若しくは複数の画像ラインの合成による面的なコード画像を取得するためのラインセンサ、又はマトリックスセンサとすることができる。複数のカメラヘッドを用いてそれらの画像を合成することも考えられる。コードを読み取るための復号処理が制御及び評価ユニットにおいて実行される。このユニットそのものはバーコードスキャナ又はカメラベースのコードリーダの一部でもよいし、それらに接続された制御装置でもよい。復号の枠内で、好ましくは本来の読み取りよりも前の初期のステップとして、制御及び評価ユニットは先に説明した変形のいずれかの形で本発明に係る方法を用いてモジュールサイズを特定する。
【0026】
制御及び評価ユニットのうちモジュールサイズの特定を担う部分は組み込みシステムとして構成することができる。更に、FPGAを画像センサのすぐ傍に(例えばカメラヘッド内に)設け、取得された画像を完全に初期の処理ステップとして本発明に係る方法を用いて解析することでモジュールサイズを特定することも考えられる。カメラがコードの断片しか含まないため全く読み取れないようなタイル(つまり読み取り野の一部領域)しか捕らえていなくても、それは既に機能するであろう。複数のカメラヘッドのタイル又は複数の連続撮影された画像の合成(スティッチング)の後で初めて復号が行われるが、この時点ではモジュールサイズはもう分かっているだろうから、例えばスティッチングの際に既にそれを考慮することもできるだろう。
【0027】
以下、本発明について、更なる特徴及び利点をも考慮しつつ、模範的な実施形態に基づき、添付の図面を参照しながら詳しく説明する。
【図面の簡単な説明】
【0028】
図1】読み取り対象のコードを付した物体を搬送するベルトコンベアの上方にコードリーダを設置した模範例の3次元的な概略全体図。
図2】グレースケールプロファイルの例。
図3図2のグレースケールプロファイルからエッジを見つけ出すための導関数を示す図。
図4】大きなモジュールサイズを持つコードのグレースケールヒストグラムの例。
図5】小さなモジュールサイズを持つコードのグレースケールヒストグラムの例。
図6】ノイズ閾値を上回るグレースケールヒストグラムの活動領域を該活動領域の積分及び幅の実例とともに示す図。
図7】グレースケールヒストグラムからモジュールサイズを特定する模範的なアルゴリズムの流れ図。
図8】(a)~(e)様々なモジュールサイズに対するグレースケールヒストグラムの模範例を示す図。
【発明を実施するための形態】
【0029】
図1はベルトコンベア12の上方に設置された好ましい使用状況にある光電式コードリーダ10を示している。矢印16で示したように、ベルトコンベア12は物体14をコードリーダ10の検出領域18を通過するように搬送する。物体14の表面にはコード領域20があり、これがコードリーダ10により検出され、評価される。このコード領域20がコードリーダ10によって検出され得るのは、それが上面側又は少なくとも上方から見える箇所に付されている場合のみである。そこで、図1の描写から離れて、例えば側面又は下面に付されたコード22を読み取るために複数のコードリーダ10を異なる方向から取り付けて、いわゆる全方向からの多重読み取りを可能にしてもよい。読み取りシステムに対する複数のコードリーダ10の配置は実際には読み取りトンネルの形にすることがほとんどである。このようにベルトコンベアの近くでコードリーダ10を静止状態で用いることは実際に非常に多い。しかし、本発明は何よりコードリーダ10そのものとその内部で実行されるコードの復号法、より具体的にはそのための前処理ステップに関するものであるため、この例が本発明を限定するものと解釈すべきではない。
【0030】
コードリーダ10は搬送される物体14とコード領域20の画像データを画像センサ24で取得する。そのデータは制御及び評価ユニット26により画像解析及び復号法を用いて更に処理される。本発明にとって具体的な画像生成法は特に重要ではないため、コードリーダ10は、それ自体は公知である何らかの原理により構成すればよい。例えばその都度1本のラインのみ捕らえるとすると、それはライン状画像センサ又はスキャン法のいずれを用いてもよく、後者の場合、画像センサ24としてはフォトダイオード等の簡単な受光器で十分である。1本の画像ラインからコードの読み取りを直接試みたり、制御及び評価ユニット26がコンベアの移動中に捕らえられた複数のラインを組み合わせて画像データにしたりすることもできる。マトリックス状の画像センサを用いれば、1回の撮影で既により広い領域を捕らえることができるが、ここでもまた複数の画像を搬送方向及びそれと交差する方向に組み合わせることができる。複数の画像は連続的に及び/又は複数のコードリーダ10で撮影することができる。複数のコードリーダ10は例えば各々の検出領域18を合わせて初めてベルトコンベア12の幅全体をカバーする。この場合、各コードリーダ10は言わば画像全体のうち1枚のタイルのみ撮影し、それらのタイルが画像処理(スティッチング)で結合される。個々のタイル内で断片的な復号のみ行い、後でそれらコードの断片を結合することも考えられる。
【0031】
コードリーダ10の主な役目は、コード領域20を認識し、そこに付されたコードを読み取ることである。一連の処理の部分ステップとして、好ましくはなるべく早い段階で、本来のコード読み取りより前に、モジュールサイズが各コード20の撮影画像の明度分布又はグレースケールヒストグラムから特定される。これについては後で図2~8に基づいて詳しく説明する。
【0032】
インターフェイス28を通じてコードリーダ10は読み取ったコードや画像データ等の情報を出力する。制御及び評価ユニット26を、本来のコードリーダ10、つまり図1に示したカメラの内部に配置するのではなく、独自の制御装置として一又は複数のコードリーダ10と接続することも考えられる。その場合、インターフェイス28は内部と外部の制御及び評価の連携にも用いられる。制御及び評価の機能は実際には内部と外部の構成要素に任意に分配することができ、その際、外部の構成要素はネットワークやクラウドを通じて接続することもできる。ここではこれら全てをもはや区別せず、制御及び評価ユニット26は具体的な実装に拘わらずコードリーダ10の一部であると解釈する。
【0033】
図2はコード20の画像データの例を、該コード20を通り抜ける画像ラインのグレースケールプロファイルの形で示している。このようなグレースケールプロファイルが画像センサ24を用いて得られる出力データとなる。グレースケールプロファイルを例としたのは典型的な限定では全くない。光学コードは2つの様相(多くは黒色と白色)の領域から成り、ときに構造又は模様を持つこともあるが、いずれにせよコード情報はグレースケール画像を通じて取得できる。また、グレースケールプロファイルが、バーコードスキャナのスキャン、ライン状画像センサの画像ライン、又はコード20の平面画像を通り抜けるように引かれた線のいずれとして取得されたかは、本発明を理解する上で重要ではない。
【0034】
以下ではバーコードを例にして説明を行うが、本発明に係るモジュールサイズの特定方法は2次元コードの場合でも全く同様に機能する。バーコードの場合、グレースケールプロファイルをバーと過度に平行に取得してはならない。モジュールサイズを絶対的な長さの単位で特定する必要があるとしたら、グレースケールプロファイルがどの角度でコードを通り抜けているかも知らなければならないだろう。しかし、復号のために注目すべき量は1つのモジュールを表す画素の数(pixel per module:ppm)であり、しかも、コード20内でのその都度の傾き状態も含めて、復号器が受け取るまさにその画像データ内における画素数である。
【0035】
原理的には、求めるモジュールサイズは図2で既に表現されている。グレースケールのハイレベル及びローレベルにある各平坦部がコードのマークに対応しているため、各平坦部の幅を測定し、そのうち最も短いものとしてモジュールサイズを填め込むことができ、そのサイズから各幅を1倍又は複数倍により再現することができる。しかしそれははるかに誤差が大きすぎる。何と言っても多くの平坦部がそのようには認識できないし、しかもその幅が信頼性をもって測定できないからなおさらである。
【0036】
図3図2のグレースケールプロファイルの導関数を示している。ここではコードのエッジ、つまり明暗又はその逆のコード要素の移行部分が極値として現れる。つまり、既に序論でも述べたように、基本的には、図2の平坦部の代わりに、隣接する極値の間隔をモジュールサイズの特定のために援用することができる。その場合に問題となるのは、エッジ位置がノイズで消えていること、またノイズがなくてもせいぜい1ピクセル単位の精度でしかモジュールサイズを特定できず、サブピクセルの精度では特定できないということである。もっとも、このような制限だけで比較的粗めに特定されたエッジ位置を、これから説明する本発明に係るモジュールサイズの特定方法に役立てることができる。
【0037】
即ち、本発明では、モジュールサイズをグレースケールプロファイル又はその導関数から特定するのではなく、グレースケールのヒストグラム、あるいはやや一般的に言えば明度分布を介した間接的なアプローチが選ばれる。
【0038】
図4は2.58ppmのモジュールサイズで良好に解像されて撮影されたバーコードの模範的なグレースケールヒストグラムを示している。右上の小さな挿入画像は説明のために実際の画像の一部を追加で示したものである。グレースケールヒストグラムは、考えられるグレースケール値(ここでは8ビットデータに対応する0~255)をX軸上にビンとして載せることにより得られる。観察されたコードの画像データの画素毎に、その画素のグレースケール値に対応するビンに「1」を加算してゆく。コードのクワイエットゾーンはグレースケールヒストグラムには顧慮しないことが好ましい。最後に、寄与している画素の総数で割ることにより正規化を行うことで、全てのビンの和が1に等しくなるようにしてもよい。グレースケールヒストグラムは明度分布を離散化したものである。それ故、本明細書では、明度分布という、より一般的な概念も用いている。
【0039】
モジュールサイズが十分な場合、グレースケールヒストグラムは、暗いコード要素と明るいコード要素にそれぞれ対応する明瞭な左右のピークとその間の平坦な領域とを有する双峰型となる。
【0040】
図5は別の模範的なグレースケールヒストグラムを示しているが、こちらは0.93ppmというモジュールサイズで低い解像度で撮影されたバーコードのものである。ここでも右上の小さな画像は説明のために実際の画像の一部を追加で示したものであり、これを見れば、なぜこのようなコードの読み取りが特に注意を要するかがおぼろげに分かる。このグレースケールヒストグラムは、少なくとも2ppmというモジュールサイズで良好に解像されて撮影されたコードのものとは明らかに違っている。双峰性はモジュールサイズが減少するにつれてますます失われてゆく。低すぎる解像度によるぼかしにより、中間のグレースケール値においてますます強いピークが形成される。
【0041】
以上により本発明の基本的な考え方が説明された。即ち、明度分布(特にグレースケールヒストグラムとして取得されるもの)からモジュールサイズを逆推論することができる。それはモジュールサイズが大きいか小さいかという定性的な言明に関するものであり、両者の境界値は例えば2ppm程度である。ただし、そのうえにモジュールサイズの具体的な値を推定することも可能である。再度述べると図4及び5は例としてバーコードを示している。低すぎる解像度によるぼかし効果から本発明により最終的にモジュールサイズが特定されるが、この効果は2次元コードの場合も同様に現れる。従って、このバーコードの例が本発明を限定するものと解釈すべきではない。
【0042】
図4及び5を参照して説明したように、大小のモジュールサイズの差は中間のグレースケール値に対応するピークの様々な形状に現れる。つまり、特別にグレースケールヒストグラムの中間領域又は移行領域を観察すれば、モジュールサイズを区別できる可能性が高まる。
【0043】
故に、グレースケールヒストグラムを予めできるだけこの移行領域に当たる画素のみから得るようにすれば非常に有利である。これは特に、グレースケールヒストグラムをコードの画像の全画素からではなく、各エッジ周辺の画素のみから作り上げることにより達成できる。エッジ付近ではサブサンプリング又は低すぎる解像度のためにぼかし効果が特に明瞭に測定可能である。
【0044】
エッジ位置を例えばグレースケールプロファイルの導関数からどのように推定できるかは、図3に基づいて既に説明した。グレースケールヒストグラムはそれらのエッジ位置の画素及び各々の周辺画素から形成される。グレースケールヒストグラムをエッジの周辺に限定するという目的にとって、各エッジ位置を正確に1つの画素だけにすることは重要ではない。なぜなら、サブピクセル領域はいずれにせよグレースケールヒストグラムにおいては考慮されないからである。ノイズの作用により生じ得るエッジ位置の誤差も許容される。それは画素が時折誤って加えられたり除外されたりすることになるに過ぎないからである。いずれにせよそれは全画素を無差別に含めるよりはるかに良い。
【0045】
このようにエッジを中心としたグレースケールヒストグラムを図6に示す。更に補足しておくと、エッジ周辺の画素のみから成るグレースケールヒストグラムを観察することは非常に有利であり、モジュールサイズの特定精度を非常に良くすることができる。もっとも、モジュールサイズはコード又はコード領域の画像の全画素を考慮した単純なグレースケールヒストグラムからでも推定できる。
【0046】
エッジを中心としたグレースケールヒストグラム又は完全なグレースケールヒストグラムからモジュールサイズを特定するために、グレースケールヒストグラムを特徴的な量で記述する。孤立したノイズ事象が評価を歪めないようにするため、グレースケールヒストグラムの活動領域のみを観察することが好ましい。この領域にはノイズ閾値を上回るビンだけが属する。ノイズ閾値はビンに寄与している画素の最小数又は百分率での最小配分により定められる。
【0047】
特徴的な量として特に適すると実証されたのは幅である。それを図6に矢印で例示している。つまり幅とはグレースケールヒストグラムに現れるグレースケールの最大値と最小値の差である。モジュールサイズの算出に利用できる別の特徴的な量はグレースケールヒストグラムの面積又は積分である。これはビンの合計により得ることができる。正規化されたヒストグラムの面積は当然「1」であるから、積分が真に寄与するのはグレースケールヒストグラムが正規化されない場合か、ノイズ閾値を用いた活動領域の特定より前に正規化される場合、あるいは後述のように部分領域の縮尺変更を行う場合である。他に考えられる特徴的な量としては、主たる極大の高さ、副極大の数、又は第1の副極大の高さに対する主たる極大の高さの比率がある。
【0048】
モジュールサイズの計算規則として考えられる具体例の1つは、積分と幅から成る指数を作り、更にその測定値に倍数を掛けることによりppm単位でモジュールサイズを表すというものである。倍数は例えば、較正又は学習工程においてコードを読み取り、そのモジュールサイズを後で非常に精確に特定してから、今度は逆にその後の計算規則において、今や既知であるモジュールサイズを積分と幅から成る指数と比較する、という方法で得ることができる。
【0049】
図7はグレースケールヒストグラムからモジュールサイズを特定するための模範的なアルゴリズムの流れ図である。このアルゴリズムにはいくつか非常に具体的なステップがあるが、それらは模範的な実施形態と理解すべきであって、その他の記載の一般性を制限するものではない。
【0050】
ステップS1では入力データ、つまりコードの画像データが、例えば図2を参照して説明したような一又は複数のグレースケールプロファイルの形で取得される。
【0051】
ステップS2ではコード中のエッジ位置が特定される。そのために、例えば図3を参照して説明したようにグレースケールプロファイルの導関数が援用される。サブピクセルではなくピクセルの精度でしか特定できないことやノイズによる位置誤差があり得ることはモジュールサイズの推定にとって何ら障害とはならない。
【0052】
ステップS3では、考えられるグレースケール値に対応するビンを用意し、各々のカウンタを出力状態「0」に設定することにより、グレースケールヒストグラムが初期化される。
【0053】
ステップS4では、全てのエッジ位置及びその近傍(例えば直前のiピクセルと直後のjピクセル)における各画素のグレースケール値が特定される。
【0054】
ステップS5では、ステップS4で特定されたグレースケール値に属するビンの計数値にそれぞれ1が加算される。ステップS4及びS5は説明のために分けたに過ぎず、むしろ実際には全てのエッジ位置と各エッジ位置の周辺の画素を次々に調べ、関係する各画素について直ちにその画素のグレースケール値に対応するビンに加算する。ステップS2、S4及びS5に従ったエッジベースのグレースケールヒストグラムの代わりに、ステップS1からの出力データの全画素にわたるグレースケールヒストグラムを作ることもできるが、その場合はモジュールサイズの推定がやや不正確になる。
【0055】
ステップS6では、全てのビンの合計が値「1」になるようにグレースケールヒストグラムが正規化される。正規化因子はグレースケールヒストグラムに寄与している画素の数又は正規化前のグレースケールヒストグラムの合計に相当する。正規化は全くの任意であり、代わりにステップS10で導入される倍数Fを通じてそれを表してもよい。
【0056】
ステップS7では、最低でもノイズ閾値を上回る頻度を示すビンのみを観察することにより、グレースケールヒストグラムがいわゆる活動領域に限定される。ノイズ閾値は定数あるいは配分(全頻度の合計のパーミル値等)とすることができ、外れ値を除去する。そして幅Bが活動領域の最大のビンと最小のビンの差として計算される。
【0057】
次のステップS8は全くの任意であり、グレースケールヒストグラムの縮尺変更を全て任意選択で行うことにより、モジュールサイズを特定するための特定の特徴的な特性を一層強調するという例である。この具体的な実装では活動領域が3つの同じ広さの部分領域に分割される。左右の各領域にあるビンには側部用の重みが掛けられ、中間領域にあるビンには中間用の重みが掛けられる。代わりにもっと細分化された重み付け関数を用いることも当然可能である。具体的にどのような構成であっても、この縮尺変更は、側部領域を相対的に抑え、中央の領域を相対的に高めるために利用することが好ましい。なぜなら、図5を参照して説明したように、モジュールサイズの特定にはグレースケールの中間の移行領域が特に関係しており、上記のようにすればそれが一層強調されるからである。
【0058】
ステップS9では活動領域のビンを合計することにより、活動領域の積分又は面積Aが求められる。
【0059】
ステップS10では面積Aと幅Bから指数が作られる。これは既に求めるモジュールサイズの推定値であるが、まだ単位が正しくない。故に、グレースケールヒストグラムからの測定量をppm単位のモジュールサイズに換算する倍数Fを更に導入し、モジュールサイズをF*A/Bと算出する。倍数Fは予め実験的に決めるか学習させておく。
【0060】
図8(a)~(e)は様々なモジュールサイズに対するグレースケールヒストグラムの例を示している。いずれも図6を参照して説明したようにエッジ周辺に限定したものである。いずれも、図7を参照して説明した方法により実際のモジュールサイズを僅かな誤差で再現することができた。詳しく言うと、図8(a)では実際のモジュールサイズが0.8ppmで推定のモジュールサイズが0.79ppm、図8(b)では実際のモジュールサイズが1.0ppmで推定のモジュールサイズが1.06ppm、図8(c)では実際のモジュールサイズが1.2ppmで推定のモジュールサイズが1.23ppm、図8(d)では実際のモジュールサイズが1.4ppmで推定のモジュールサイズが1.19ppm、そして図8(e)では実際のモジュールサイズが1.5ppmで推定のモジュールサイズが1.68ppmであった。
【0061】
実際の使用で撮影された700を超えるコード画像を含むデータ一式において、推定されたモジュールサイズの平均誤差は0.15であった。計算はモジュールサイズが大きくなるほど不正確になる。その主な理由は、倍数Fは本来ならスケーリング関数であり、それは例えば2ppmを超えて増大するモジュールサイズに対しては低減させなければならないということである。原理的にはスケーリング関数を倍数と同様に実験的に算出する又は学習させることができる。ただ、それは実際には絶対必要だというわけではない。なぜなら、モジュールサイズが小さい場合の方がはるかに重大だが、それは一定の倍数Fで十分に推定できるのに対し、モジュールサイズが大きくなった場合の推定誤差はたいてい容認できるからである。
図1
図2
図3
図4
図5
図6
図7
図8