(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-26
(45)【発行日】2024-02-05
(54)【発明の名称】解像度不足のシンボルをデコードするための方法と装置
(51)【国際特許分類】
G06K 7/14 20060101AFI20240129BHJP
【FI】
G06K7/14 060
G06K7/14 069
【外国語出願】
(21)【出願番号】P 2019205716
(22)【出願日】2019-11-13
【審査請求日】2020-03-11
【審判番号】
【審判請求日】2022-11-06
(32)【優先日】2018-11-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】504382671
【氏名又は名称】コグネックス・コーポレイション
(74)【代理人】
【識別番号】100119378
【氏名又は名称】栗原 弘幸
(72)【発明者】
【氏名】バチェルダー,アイヴァン
(72)【発明者】
【氏名】ネグロ,ジェイムズ エイ.
【合議体】
【審判長】林 毅
【審判官】脇岡 剛
【審判官】吉田 美彦
(56)【参考文献】
【文献】米国特許第6102292号明細書(US,A)
【文献】米国特許出願公開第2003/0066891号明細書(US,A1)
【文献】米国特許出願公開第2006/0266836号明細書(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06K 7/14
(57)【特許請求の範囲】
【請求項1】
デジタル画像内のシンボルをデコードするためのコンピュータ化された方法であって:
当該方法はシンボルの部分のデジタル画像を受け取ることを有し、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含んでおり、
当該方法は前記モジュールの格子内のモジュールの連続サブセットと前記ピクセルの格子との間の空間マッピングを決定することを有し、
当該方法は、(i)モジュールの第1のセットの各々と前記ピクセルの格子における各ピクセルとのオーバーラップの程度、及び/又は、(ii)前記モジュールの第1セットの少なくとも一つにマップされたそれぞれのピクセルとオーバーラップする隣接するモジュールに対して予め決定された値、に部分的に基づいて前記空間マッピングを用いて第1のモジュールの前記連続サブセットにおけるモジュールの前記第1のセットのための値の第1のセットを決定することを有し、
当該方法は、前記空間マッピングを使用して、モジュールの前記連続サブセット内の各モジュールと前記ピクセルの格子との間の因果関係を決定することを有し、ここで、前記因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わしており、
当該方法は、モジュールの前記連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットを決定することを有し、ここで、前記有効な組み合わせのセットにおける有効な組み合わせの各々は、
第1の値と、第1の有効な値又は第2の有効な値とを有しており:
前記第1の値は、前記2個以上の隣接するモジュールのうちの第1のモジュールのために前記決定された値の第1のセットからのものあって、前記第1のモジュールは前記モジュールの第1セットからのものであり;
前記第1の有効な値は、前記2個以上の隣接するモジュールのうちの第2のモジュールのためのものであって、前記第1の有効な値は、前記値の有効な組み合わせのセットのうちの値の異なる有効な組み合わせに含まれる場合の前記第2のモジュールのための第2の有効な値とは異なっており;
当該方法は、前記因果関係を用いて、モジュールの前記連続サブセット内の前記2個以上の隣接するモジュールの値の前記有効な組み合わせのセットを前記ピクセルの格子に照らしてテストすることを有し、
当該方法は、前記テストされた有効な組み合わせのセットに基づいて、前記2個以上の隣接するモジュールのうちの前記第2のモジュールの最終値を決定することを有し、かつ
当該方法は、前記少なくとも1個のモジュールの決定された値に基づいて、シンボルをデコードすることを有する、
上記方法。
【請求項2】
モジュールの格子内のモジュールの連続サブセット内の前記2個以上の隣接するモジュールは、前記モジュールの格子の3×3サブ格子を含む、請求項1に記載の方法。
【請求項3】
前記2個以上の隣接するモジュールのうちの前記第2のモジュールは、前記3×3サブ格子の中心モジュールである、請求項2に記載の方法。
【請求項4】
前記隣接するモジュールは、シンボルのファインダパターン又はタイミングパターン内部のモジュールである、請求項1に記載の方法。
【請求項5】
前記隣接するモジュールに対する前記既知の値は、単一のピクセルがピクセルの前記サブセット内の他のピクセルと前記隣接するモジュールとの間の因果関係と比較して、前記隣接するモジュールと優勢な因果関係を有するため、前記ピクセルの格子における前記単一のピクセルの値のみに基づいて推定される、請求項1に記載の方法。
【請求項6】
前記因果関係を決定することは、モジュールの前記連続サブセット内の各モジュールが前記ピクセルの格子内の各ピクセルとオーバーラップする程度を、前記空間マッピングを用いて特定して、オーバーラップの程度のセットを生成する、請求項1に記載の方法。
【請求項7】
モジュールの前記連続サブセット内の各モジュールがピクセルの格子内の各ピクセルとオーバーラップする前記程度は、サンプリング係数のセットによって、及びサンプリングマトリックスの一部として表される、請求項6に記載の方法。
【請求項8】
前記ピクセルの格子と前記モジュールの格子はいずれも2次元である、請求項1に記載の方法。
【請求項9】
前記ピクセルの格子は2次元画像を通過する1次元スキャンからのサンプルの1次元格子であり、前記モジュールの格子はモジュールの1次元格子である、請求項1に記載の方法。
【請求項10】
前記シンボルは1次元(1D)バーコードと2次元(2D)バーコードからなる群から選択される、請求項1に記載の方法。
【請求項11】
メモリと通信するプロセッサを備えた、デジタル画像内のシンボルをデコードするための装置であって、前記プロセッサはメモリに格納されている命令を実行するように構成されており、前記命令は:
前記プロセッサにシンボルの部分のデジタル画像を受け取らせ、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含んでおり、
前記プロセッサに前記モジュールの格子内のモジュールの連続サブセットと前記ピクセルの格子との間の空間マッピングを決定させ、
前記プロセッサに、(i)モジュールの第1のセットの各々と前記ピクセルの格子における各ピクセルとのオーバーラップの程度、及び/又は、(ii)前記モジュールの第1セットの少なくとも一つにマップされたそれぞれのピクセルとオーバーラップする隣接するモジュールに対して予め決定された値、に部分的に基づいて前記空間マッピングを用いて第1のモジュールの前記連続サブセットにおけるモジュールの前記第1のセットのための値の第1のセットを決定させ、
前記プロセッサに、前記空間マッピングを使用して、モジュールの前記連続サブセット内の各モジュールと前記ピクセルの格子との間の因果関係を決定させ、ここで、前記因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わしており、
前記プロセッサに、モジュールの前記連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットを決定させ、ここで、前記有効な組み合わせのセットにおける有効な組み合わせの各々は、
第1の値と、第1の有効な値又は第2の有効な値とを有しており:
前記第1の値は、前記2個以上の隣接するモジュールのうちの第1のモジュールのために前記決定された値の第1のセットからのものあって、前記第1のモジュールは前記モジュールの第1セットからのものであり;
前記第1の有効な値は、前記2個以上の隣接するモジュールのうちの第2のモジュールのためのものであって、前記第1の有効な値は、前記値の有効な組み合わせのセットのうちの値の異なる有効な組み合わせに含まれる場合の前記第2のモジュールのための第2の有効な値とは異なっており;
前記プロセッサに、前記因果関係を用いて、モジュールの前記連続サブセット内の前記2個以上の隣接するモジュールの値の前記有効な組み合わせのセットを前記ピクセルの格子に照らしてテストさせ、
前記プロセッサに、前記テストされた有効な組み合わせのセットに基づいて、前記2個以上の隣接するモジュールのうちの前記第2のモジュールの最終値を決定させ、かつ
前記プロセッサに、前記少なくとも1個のモジュールの決定された値に基づいて、シンボルをデコードさせ、るものである、
上記装置。
【請求項12】
モジュールの格子内のモジュールの連続サブセット内の前記2個以上の隣接するモジュールは、前記モジュールの格子の3×3サブ格子を含む、請求項11に記載の装置。
【請求項13】
前記因果関係を決定することは、モジュールの前記連続サブセット内の各モジュールが前記ピクセルの格子内の各ピクセルとオーバーラップする程度を、前記空間マッピングを用いて特定して、オーバーラップの程度のセットを生成することを含む、請求項11に記載の装置。
【請求項14】
前記ピクセルの格子と前記モジュールの格子はいずれも2次元である、請求項11に記載の装置。
【請求項15】
前記ピクセルの格子は2次元画像を通過する1次元スキャンからのサンプルの1次元格子であり、前記モジュールの格子はモジュールの1次元格子である、請求項11に記載の装置。
【請求項16】
前記シンボルは1次元(1D)バーコードと2次元(2D)バーコードからなる群から選択される、請求項11に記載の装置。
【請求項17】
プロセッサ実行可能命令を格納している少なくとも1つの非一時的コンピュータ可読記憶媒体であって、前記命令は少なくとも1つのコンピュータハードウェアプロセッサによって実行されると:
前記少なくとも1つのコンピュータハードウェアプロセッサにシンボルの部分のデジタル画像を受け取らせ、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含んでおり、
前記少なくとも1つのコンピュータハードウェアプロセッサに前記モジュールの格子内のモジュールの連続サブセットと前記ピクセルの格子との間の空間マッピングを決定させ、
前記少なくとも1つのコンピュータハードウェアプロセッサに、(i)モジュールの第1のセットの各々と前記ピクセルの格子における各ピクセルとのオーバーラップの程度、及び/又は、(ii)前記モジュールの第1セットの少なくとも一つにマップされたそれぞれのピクセルとオーバーラップする隣接するモジュールに対して予め決定された値、に部分的に基づいて前記空間マッピングを用いて第1のモジュールの前記連続サブセットにおけるモジュールの前記第1のセットのための値の第1のセットを決定させ、
前記少なくとも1つのコンピュータハードウェアプロセッサに、前記空間マッピングを使用して、モジュールの前記連続サブセット内の各モジュールと前記ピクセルの格子との間の因果関係を決定させ、ここで、前記因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わしており、
前記少なくとも1つのコンピュータハードウェアプロセッサに、モジュールの前記連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットを決定させ、ここで、前記有効な組み合わせのセットにおける有効な組み合わせの各々は、
第1の値と、第1の有効な値又は第2の有効な値とを有しており:
前記第1の値は、前記2個以上の隣接するモジュールのうちの第1のモジュールのために前記決定された値の第1のセットからのものあって、前記第1のモジュールは前記モジュールの第1セットからのものであり;
前記第1の有効な値は、前記2個以上の隣接するモジュールのうちの第2のモジュールのためのものであって、前記第1の有効な値は、前記値の有効な組み合わせのセットのうちの値の異なる有効な組み合わせに含まれる場合の前記第2のモジュールのための第2の有効な値とは異なっており;
前記少なくとも1つのコンピュータハードウェアプロセッサに、前記因果関係を用いて、モジュールの前記連続サブセット内の前記2個以上の隣接するモジュールの値の前記有効な組み合わせのセットを前記ピクセルの格子に照らしてテストさせ、
前記少なくとも1つのコンピュータハードウェアプロセッサに、前記テストされた有効な組み合わせのセットに基づいて、前記2個以上の隣接するモジュールのうちの前記第2のモジュールの最終値を決定させ、かつ
前記少なくとも1つのコンピュータハードウェアプロセッサに、前記少なくとも1個のモジュールの決定された値に基づいて、シンボルをデコードさせ、るものである、
上記非一時的コンピュータ可読記憶媒体。
【請求項18】
コンピュータ化された方法であって:
当該方法はシンボルの部分のデジタル画像及び空間マッピングを受け取ることを有し、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含み、前記空間マッピングは前記モジュールの格子内のモジュールの連続サブセットを前記ピクセルの格子に関連付けるものであり、
当該方法は、前記モジュールの連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットを決定することを有し、ここで、前記有効な組み合わせのセットにおける有効な組み合わせの各々は、前記2個以上の隣接するモジュールのうちの第1のモジュールのための値
と、第1の有効な値又は第2の有効な値とを有しており:
前記第1のモジュールのための値は、モジュールの前記連続サブセットにおけるモジュールの第1のセットのために下記(i)及び/又は(ii)に部分的に基づく前記空間マッピングを用いて決定された値の第1のセットからのものであって、前記(i)はモジュールの第1のセットの各々と前記ピクセルの格子における各ピクセルとのオーバーラップの程度であり、前記(ii)は前記モジュールの第1セットの少なくとも一つにマップされたそれぞれのピクセルとオーバーラップする隣接するモジュールに対して予め決定された値であり、
前記第1の有効な値は、前記2個以上の隣接するモジュールのうちの第2のモジュールのためのものであって、前記第1の有効な値は、前記値の有効な組み合わせのセットのうちの値の異なる有効な組み合わせに含まれる場合の前記第2のモジュールのための第2の有効な値とは異なっており;
当該方法は、モジュールの前記連続サブセット内の各モジュールと前記ピクセルの格子との間の因果関係を用いて、モジュールの前記連続サブセット内の前記2個以上の隣接するモジュールの値の前記有効な組み合わせのセットを前記ピクセルの格子に照らしてテストすることを有し、ここで、前記因果関係は、モジュール内の前記連続サブセットにおけるモジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わしており、
当該方法は、少なくとも1つのテストされた値の有効な組み合わせに基づいて、前記2個以上の隣接するモジュールの値の前記有効な組み合わせからシンボルをデコードすることを有し、ここで、前記少なくとも1つのテストされた値の有効な組み合わせは、前記2個以上の隣接するモジュールのうちの前記第2のモジュールの最終値を含む、
上記方法。
【請求項19】
メモリと通信するプロセッサを備えた装置であって、前記プロセッサはメモリに格納されている命令を実行するように構成されており、前記命令は:
前記プロセッサにシンボルの部分のデジタル画像及び空間マッピングを受け取らせ、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含み、前記空間マッピングは前記モジュールの格子内のモジュールの連続サブセットを前記ピクセルの格子に関連付けるものであり、
前記プロセッサに、前記モジュールの連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットを決定させ、ここで、前記有効な組み合わせのセットにおける有効な組み合わせの各々は、前記2個以上の隣接するモジュールのうちの第1のモジュールのための値
と、第1の有効な値又は第2の有効な値とを有しており:
前記第1のモジュールのための値は、モジュールの前記連続サブセットにおけるモジュールの第1のセットのために下記(i)及び/又は(ii)に部分的に基づく前記空間マッピングを用いて決定された値の第1のセットからのものであって、前記(i)はモジュールの第1のセットの各々と前記ピクセルの格子における各ピクセルとのオーバーラップの程度であり、前記(ii)は前記モジュールの第1セットの少なくとも一つにマップされたそれぞれのピクセルとオーバーラップする隣接するモジュールに対して予め決定された値であり、
前記第1の有効な値は、前記2個以上の隣接するモジュールのうちの第2のモジュールのためのものであって、前記第1の有効な値は、前記値の有効な組み合わせのセットのうちの値の異なる有効な組み合わせに含まれる場合の前記第2のモジュールのための第2の有効な値とは異なっており;
前記プロセッサに、モジュールの前記連続サブセット内の各モジュールと前記ピクセルの格子との間の因果関係を用いて、モジュールの前記連続サブセット内の前記2個以上の隣接するモジュールの値の前記有効な組み合わせのセットを前記ピクセルの格子に照らしてテストさせ、ここで、前記因果関係は、モジュール内の前記連続サブセットにおけるモジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わしており、
前記プロセッサに、少なくとも1つのテストされた値の有効な組み合わせに基づいて、前記2個以上の隣接するモジュールの値の前記有効な組み合わせからシンボルをデコードさせ、ここで、前記少なくとも1つのテストされた値の有効な組み合わせは、前記2個以上の隣接するモジュールのうちの前記第2のモジュールの最終値を含む、
上記装置。
【請求項20】
プロセッサ実行可能命令を格納している少なくとも1つの非一時的コンピュータ可読記憶媒体であって、前記命令は少なくとも1つのコンピュータハードウェアプロセッサによって実行されると:
前記少なくとも1つのコンピュータハードウェアプロセッサにシンボルの部分のデジタル画像及び空間マッピングを受け取らせ、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含み、前記空間マッピングは前記モジュールの格子内のモジュールの連続サブセットを前記ピクセルの格子に関連付けるものであり、
前記少なくとも1つのコンピュータハードウェアプロセッサに、前記モジュールの連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットを決定させ、ここで、前記有効な組み合わせのセットにおける有効な組み合わせの各々は、前記2個以上の隣接するモジュールのうちの第1のモジュールのための値
と、第1の有効な値又は第2の有効な値とを有しており:
前記第1のモジュールのための値は、モジュールの前記連続サブセットにおけるモジュールの第1のセットのために下記(i)及び/又は(ii)に部分的に基づく前記空間マッピングを用いて決定された値の第1のセットからのものであって、前記(i)はモジュールの第1のセットの各々と前記ピクセルの格子における各ピクセルとのオーバーラップの程度であり、前記(ii)は前記モジュールの第1セットの少なくとも一つにマップされたそれぞれのピクセルとオーバーラップする隣接するモジュールに対して予め決定された値であり、
前記第1の有効な値は、前記2個以上の隣接するモジュールのうちの第2のモジュールのためのものであって、前記第1の有効な値は、前記値の有効な組み合わせのセットのうちの値の異なる有効な組み合わせに含まれる場合の前記第2のモジュールのための第2の有効な値とは異なっており;
前記少なくとも1つのコンピュータハードウェアプロセッサに、モジュールの前記連続サブセット内の各モジュールと前記ピクセルの格子との間の因果関係を用いて、モジュールの前記連続サブセット内の前記2個以上の隣接するモジュールの値の前記有効な組み合わせのセットを前記ピクセルの格子に照らしてテストさせ、ここで、前記因果関係は、モジュール内の前記連続サブセットにおけるモジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わしており、
前記少なくとも1つのコンピュータハードウェアプロセッサに、少なくとも1つのテストされた値の有効な組み合わせに基づいて、前記2個以上の隣接するモジュールの値の前記有効な組み合わせからシンボルをデコードさせ、ここで、前記少なくとも1つのテストされた値の有効な組み合わせは、前記2個以上の隣接するモジュールのうちの前記第2のモジュールの最終値を含む、
上記非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
この出願は、2018年7月23日に提出された「バーコードのデコード」と題する米国特許出願第16/043029号の米国特許法第120条下での利益を主張する部分継続出願であり、同出願は2017年3月27日に提出された「バーコードのデコード」と題する米国特許出願第10032058号の米国特許法第120条下での利益を主張する部分継続出願であり、同出願は2014年10月9日に提出された「バーコードのデコード」と題する米国特許出願第14/510710号(現在米国特許第9607200号として発行)の米国特許法第120条下での利益を主張する部分継続出願であり、その全開示内容は参照により本明細書に組み込まれる。
【0002】
技術分野
本明細書に記載する技術は、概略、2次元バーコードなどの解像度不足の2次元シンボルのデコードに関する。
【背景技術】
【0003】
自動化された部品識別など様々な目的のために情報をエンコードするために、様々なタイプのシンボルを使用できる。バーコードは、通常は長方形のバイナリ空間パターンを使用して情報をエンコードするシンボルの一種である。1次元バーコードは情報を、幅が変化する平行なバーとスペース(例えばエレメント)が交互するする1つ以上の空間的に連続する配列でエンコードする。特定のタイプの1次元バーコード(例えばしばしば多値幅バーコードと呼ばれる)の場合、各エレメントの幅はモジュールの整数倍である。2次元バーコードは通常、情報をモジュールエレメントの均一な格子としてエンコードし、各々のエレメントは黒又は白であることができる。
【0004】
通常、バーコードは、均一な反射基材(紙や金属など)にバー又はモジュールエレメントを印刷(インクなど)又はマーキング(エッチングなど)することによって作成される。バー又は暗いモジュールは、通常基材よりも反射率が低く、したがってそれらの間のスペースよりも暗く見える(白い紙に黒インクを使ってバーコードを印刷する場合など)。しかしバーコードは、黒い物体の上に白い塗料を使って印刷する場合など、別のやり方で印刷できる。バーコードを背景からより簡単に区別するために、シンボルは通常他の印刷又は目に見える構造から比較的離れて配置される。そのような距離は、最初のバーの前と最後のバーの後の両方に(例えば1次元バーコードの場合)、又はモジュールのエレメントの格子の周りに(例えば2次元バーコードの場合)しばしばクワイエットゾーンと呼ばれる余白を生み出す。代替として、スペースとクワイエットゾーンを印刷又はマークすることができ、バーは暗黙的に基材によって形成される。
【0005】
しかしながら、バーコードリーダにとってしばしば(例えば低サンプリングレート又は解像度が足りないセンサによる)サンプリング不足のバーコードや、(例えばリーダーの焦点が合っていない、動きの影響などのために)ぼやけたバーコードなど、解像度不足のバーコードをデコードするのが困難な場合がある。
【発明の概要】
【0006】
開示された主題によれば、1次元(1D)多値幅シンボル体系及び2次元(2D)シンボルなど解像度不足のシンボルをデコードするための装置、システム及び方法が提供される。本発明者らは、2Dシンボルをデコードする既存の技術は、解像度不足の2Dシンボルを十分にデコードできないことを認識した。さらに、本発明者らは解像度不足の1Dシンボルのデコードに使用される既存の技術は、解像度不足の2Dシンボルをデコードするために(例えば1次元シンボルの文字などの部分と比べて2次元シンボルに対する解集合は指数関数的に大きくなる可能性があるため)、又は多値幅1Dシンボルの大部分を別個の文字に分割することなくデコードするために、単純に拡張できないことを認識した。本発明者らは、シンボルの既知の態様及び/又はピクセルの格子のピクセルと画像のピクセルの格子内のピクセルとの間で決定される数学的関係に基づいて、多値幅1Dシンボル又は2Dシンボルのモジュールの初期セットを決定する代替技術を開発した。最初に決定されたモジュールのセットは、残りの十分な数のモジュール値を決定して、システムがシンボルをデコードできるように活用される。一部の実施形態では、この技術は、最初にシンボルの既知の態様を活用してシンボルのモジュールの第1のセットを決定し、次にこのモジュールの第1のセット及び/又は画像内のピクセルとシンボルに対するモジュールとの間の数学的な関係に基づいてシンボルの第2のモジュールのセットを(例えば反復法で)決定し、次にまだ推定されていないモジュールの残りのサブセットのみに対して(例えば以前に決定されたモジュール値を活用して)有効な組み合わせを試して、モジュールの格子に対するモジュールの第3のセットを決定することを含む。そのような技術はシンボルに対する十分な数のモジュールをデコードして、システムが全シンボルをデコードできるようにする。
【0007】
幾つかの態様は、デジタル画像内のシンボルをデコードするためのコンピュータ化された方法に関する。この方法は、以下を含む:シンボルの部分のデジタル画像を受け取ること、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含む;モジュールの格子内のモジュールの連続サブセットとピクセルの格子との間の空間マッピングを決定すること;空間マッピングを使用して、モジュールの連続サブセット内の各モジュールとピクセルの格子との間の因果関係を決定すること、ここで、各因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わす;因果関係を用いて、モジュールの連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットをピクセルの格子に照らしてテストすること;有効な組み合わせのセットに基づいて、2個以上の隣接するモジュールの少なくとも1個のモジュールの値を決定すること;及び少なくとも1個のモジュールの決定された値に基づいてシンボルをデコードすること。
【0008】
幾つかの例では、モジュールの格子内のモジュールの連続サブセット内の2個以上の隣接するモジュールは、モジュールの格子の3×3サブ格子を含む。2個以上のモジュールの少なくとも1個のモジュールは、3×3サブ格子の中心モジュールになることができる。
【0009】
幾つかの例では、モジュールの連続サブセットには、既知の値を有する少なくとも1つの所定のモジュールを含み、2個以上の隣接するモジュールの値の有効な組み合わせのセットは、少なくとも1つの所定のモジュールに対して既知の値を有する組み合わせのみを含む。所定のモジュールは、シンボルのファインダパターン又はタイミングパターン内部のモジュールであることができる。所定のモジュールの既知の値は、単一のピクセルがピクセルのサブセット内の他のピクセルと所定のモジュールとの間の因果関係と比較して、所定のモジュールと優勢な因果関係を有するため、ピクセルの格子における単一のピクセルの値のみに基づいて推定することができる。所定のモジュールには、以前に決定された値を有する任意のモジュールを含むことができる。
【0010】
幾つかの例では、因果関係を決定することは、モジュールの連続サブセット内の各モジュールがピクセルの格子内の各ピクセルとオーバーラップする程度を、空間関係を用いて特定して、オーバーラップの程度のセットを生成することを含む。モジュールの連続サブセット内の各モジュールがピクセルの格子内の各ピクセルとオーバーラップする程度は、サンプリング係数のセットによって、及びサンプリングマトリックスの一部として表すことができる。
【0011】
幾つかの例では、ピクセルの格子とモジュールの格子は、いずれも2次元である。
【0012】
幾つかの例では、ピクセルの格子は、2次元画像を通過する1次元スキャンからのサンプルの1次元格子であり、モジュールの格子は、モジュールの1次元格子である。
【0013】
幾つかの例では、シンボルは、1次元(1D)バーコードと2次元(2D)バーコードからなるグループから選択される。
【0014】
幾つかの態様は、デジタル画像内のシンボルをデコードするための装置に関する。この装置は、メモリと通信するプロセッサを備えている。プロセッサは、メモリに格納されていてプロセッサに以下のことをさせる命令を実行するように構成されている:シンボルの部分のデジタル画像を受け取ること、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含む;モジュールの格子内のモジュールの連続サブセットとピクセルの格子との間の空間マッピングを決定すること;空間マッピングを使用して、モジュールの連続サブセット内の各モジュールとピクセルの格子との間の因果関係を決定すること、ここで、各因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わす;因果関係を用いて、モジュールの連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットをピクセルの格子に照らしてテストすること;テストされた有効な組み合わせのセットに基づいて、2個以上の隣接するモジュールの少なくとも1個のモジュールの値を決定すること;及び少なくとも1個のモジュールの決定された値に基づいてシンボルをデコードすること。
【0015】
幾つかの例では、モジュールの格子内のモジュールの連続サブセット内の2個以上の隣接するモジュールは、モジュールの格子の3×3サブ格子を含む。
【0016】
幾つかの例では、モジュールの連続サブセットは、既知の値を有する少なくとも1つの所定のモジュールを含み、2個以上の隣接するモジュールの値の有効な組み合わせのセットは、少なくとも1つの所定のモジュールに対して既知の値を有する組み合わせのみを含む。
【0017】
幾つかの例では、因果関係を決定することは、モジュールの連続サブセット内の各モジュールがピクセルの格子内の各ピクセルとオーバーラップする程度を、空間的関係を用いて特定して、オーバーラップの程度のセットを生成することを含む。
【0018】
幾つかの例では、ピクセルの格子とモジュールの格子は、いずれも2次元である。
【0019】
幾つかの例では、ピクセルの格子は、2次元画像を通過する1次元スキャンからのサンプルの1次元格子であり、モジュールの格子はモジュールの1次元格子である。
【0020】
幾つかの例では、シンボルは、1次元(1D)バーコードと2次元(2D)バーコードからなるグループから選択される。
【0021】
一部の実施形態は、少なくとも1つの非一時的コンピュータ可読記憶媒体に関する。非一時的コンピュータ可読媒体は、プロセッサ実行可能命令を格納しており、これらの命令は少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに以下の動作を実行させる:シンボルの部分のデジタル画像を受け取ること、ここで、デジタル画像はピクセルの格子を含み、シンボルはモジュールの格子を含む;モジュールの格子内のモジュールの連続サブセットとピクセルの格子との間の空間マッピングを決定すること;空間マッピングを使用して、モジュールの連続サブセット内の各モジュールとピクセルの格子との間の因果関係を決定すること、ここで、各因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表わす;因果関係を用いて、モジュールの連続サブセット内の2個以上の隣接するモジュールの値の有効な組み合わせのセットをピクセルの格子に照らしてテストすること、テストされた有効な組み合わせのセットに基づいて、2個以上の隣接するモジュールの少なくとも1個のモジュールの値を決定すること、少なくとも1個のモジュールの決定された値に基づいてシンボルをデコードすること。
【0022】
以上、開示の主題の特徴をやや大まかに述べたのは、以下に続く詳細な説明においてそれらがより良く理解されるように、また本発明の技術への寄与がより適切に評価されるようにするためである。言うまでもなく開示された主題の追加の特徴があり、それらは以下に説明されるとともに、本明細書に付属する特許請求の範囲の主題をなす。本明細書で用いられる表現及び用語は説明を目的としたものと理解すべきであり、制限するものと見なされてはならない。
【0023】
図面において、様々な図に示されている同一又はほぼ同一の各構成要素は同じ参照符号で表されている。見やすさのため、各図面にはすべての構成要素が表示されているわけではない。図面は必ずしも縮尺通りではなく、代わりに本明細書に記載する技術及び装置の種々の態様を示すことに重点が置かれている。
【図面の簡単な説明】
【0024】
【
図1A】2値幅シンボル体系を用いて生成されたバーコードを示す。
【
図2】多値幅シンボル体系を用いて生成されたバーコードを示す。
【
図4】一部の実施形態による、バーコードをデコードするための1SPM及び0位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
【
図5】一部の実施形態による、バーコードをデコードするための1SPM及び0位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
【
図6】一部の実施形態による、バーコードをデコードするための1SPM及び0.5位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
【
図7】一部の実施形態による、バーコードをデコードするための1SPM及び-0.25位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
【
図8】一部の実施形態による、バーコードをデコードするための1.33SPM及び0.33位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数のパーセンテージを示す。
【
図9】一部の実施形態による、バーコードをデコードするための0.75SPM及び-0.25位相での多値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
【
図10】一部の実施形態による、バーコードをデコードするための0.84SPM、2.1幅(W)及び-0.16位相での2値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
【
図11】一部の実施形態による、バーコードをデコードするための一般的な画像ベースのデコードアルゴリズムの例示的なコンピュータ化された方法を示す。
【
図12】一部の実施形態による、バーコードをデコードするためのレーザスキャナデコードアルゴリズムの例示的なコンピュータ化された方法を示す。
【
図13A】一部の実施形態による、スキャン信号からバーコードをデコードするための例示的なコンピュータ化された方法を示す。
【
図13B】一部の実施形態による、スキャン信号からバーコードをデコードするための例示的なコンピュータ化された方法を示す。
【
図14A】一部の実施形態による、バーコードをデコードするための第1の区切り文字の位置を特定してデコードするための例示的なコンピュータ化された方法を示す。
【
図14B】一部の実施形態による、バーコードをデコードするための第1の区切り文字の位置を特定してデコードするための例示的なコンピュータ化された方法を示す。
【
図14C】一部の実施形態による、バーコードをデコードするための第1の区切り文字の位置を特定してデコードするための例示的なコンピュータ化された方法を示す。
【
図15】一部の実施形態による、バーコードをデコードするための単位サンプリング係数を決定するための例示的なコンピュータ化された方法を示す。
【
図16】一部の実施形態による、バーコードをデコードするためにスキャン信号から文字をスコアリングするための例示的なコンピュータ化された方法を示す。
【
図17】一部の実施形態による、バーコードをデコードするための多値幅バーコードのスキャン信号から文字をデコードするためのコンピュータ化された方法を示す。
【
図18】一部の実施形態による、バーコードをデコードするための2値幅又は多値幅バーコードのスキャン信号から文字をデコードするための例示的なコンピュータ化された方法を示す。
【
図19A】幾つかの例による、例示的なデータマトリックス2Dシンボルを示す。
【
図19B】幾つかの例による、例示的なQRコードシンボルを示す。
【
図20】一部の実施形態による、解像度不足の2Dシンボルをデコードするための例示的なコンピュータ化された方法を示す。
【
図21】一部の実施形態による、2Dシンボルの例示的な画像を示す。
【
図22A】一部の実施形態による、
図21の画像の上部に重ねた2Dシンボルに対する例示的なモジュールの格子を示す。
【
図22B】一部の実施形態による、ピクセルの格子におけるピクセルがモジュールの格子の例示的なモジュールとオーバーラップするパーセンテージを示すサンプリングマトリックス部分の例を示す。
【
図23】一部の実施形態による、2Dシンボルの既知の構造値で埋められている、
図22における例示的なモジュールの格子を示す。
【
図24】一部の実施形態による、モジュールとピクセルとの間の関係に基づいて推定された例示的なピクセルの格子のピクセルを示す。
【
図25A】一部の実施形態による、既知のモジュールに基づいて決定された新しい白と黒のモジュール値を示す。
【
図25B】一部の実施形態による、
図25Aで決定された新しいモジュールに基づいて決定された追加のモジュール値を示す。
【
図26】一部の実施形態による、多値幅1Dシンボルの例示的な画像を示す。
【
図27】一部の実施形態による、
図26の画像の上部に重ねた1D多値幅シンボル体系に対する例示的なモジュールの格子を示す。
【
図28】一部の実施形態による、ピクセルの格子のピクセルと画像のピクセルとの間のオーバーラップの程度の例示的な図である。
【
図29】一部の実施形態による、任意のモジュールのパターンに対するモジュールの格子の推定モジュールの例を示す。
【
図30A】一部の実施形態による、モジュールとピクセルとの間の関係に基づいて推定された例示的なピクセルの格子のピクセルを示す。
【
図30B】一部の実施形態による、モジュールとピクセルとの間の関係に基づいて推定された例示的なピクセルの格子のピクセルを示す。
【
図31】一部の実施形態による、既知のモジュールに基づいて決定されたモジュールの格子内の追加モジュールを示す。
【
図32】一部の実施形態による、無向制約グラフの例を示す。
【発明を実施するための形態】
【0025】
本明細書に記載する技術は、解像度不足のシンボル(例えばサンプリング不足のシンボル及び/又はぼやけたシンボル)をデコードするために使用できる。本発明者らは、1D及び2Dシンボルデコード技術はシンボルをデコードするために、しばしばある程度の画像解像度、例えばモジュールあたり少なくとも2ピクセルの画像解像度を必要とすることを認識した(例えばモジュールがシンボル格子の単一の黒又は白のエレメントである場合)。本発明者らは、本明細書でさらに説明するように、より低い解像度の画像を使用してシンボルをデコードするシンボルデコード技術を改善する技術を開発した。例えば、この技術を用いてモジュールあたり1ピクセル以下、例えばモジュールあたり0.8ピクセル及びそれ以下の解像度で取得された1Dシンボル(多値幅1Dシンボルなど)及び/又は2Dシンボルをデコードできる。
【0026】
以下の説明では、開示された主題の完全な理解を提供するために、開示された主題のシステム及び方法、並びにそのようなシステム及び方法が動作できる環境などに関して多くの具体的な詳細が述べられる。加えて、以下に提供される例は例示であり、開示された主題の範囲内にある他のシステム及び方法があることが想定されていることは理解されるであろう。
【0027】
バーコードには、シンボル体系と呼ばれる多数のバーコード設計のいずれか1つを使用できる。各シンボル体系は、バー、スペース、クワイエットゾーンの寸法制約、並びに情報をいかに正確にエンコードされるかを指定できる。バーコードシンボル体系の例には、コード128、コード93、コード39、コーダバー、I2オブ5、MSI、コード2オブ5、UPC-EANがある。バーコードは、すべての情報が1つの次元に沿ってコード化される伝統的な「線形」シンボル体系(コード128やコード39など)を含むことができる。バーコードには、「スタックされた」2Dシンボルの個々の行(例えばデータバー、PDF417、マイクロPDF、及び一部の合成シンボルの2Dコンポーネント)も含めることができ、これはすべてバーコードを互いに上に積み重ねてより多くの情報をエンコードすることができる。
【0028】
多くのバーコードシンボル体系は、2値幅シンボル体系と多値幅シンボル体系の2つのカテゴリーに分類される。2値幅シンボル体系の例には、例えばコード39、インタリーブド2オブ5、コーダバー、MSI、コード2オブ5及びファーマコードがある。2値幅シンボル体系の各エレメントは、細いか太い。細エレメントの幅は、最小特徴サイズXに等しい。太エレメントの幅は、太エレメントサイズWに等しい。太エレメントのサイズWは、普通は最小特徴サイズの固定した実倍数である。これにより2レベルシンボル体系は、各エレメントがX又はWの2つの可能な値のいずれかを表すことが可能になる。
【0029】
多値幅シンボル体系は、例えばコード128、コード93、UPC-EAN、PDF417、マイクロPDF及びデータバーを含む。多値幅シンボル体系の各エレメントは、最小特徴サイズの整数の倍数nである(例えばnはシンボル体系に応じて1からエレメントの最大幅までの整数である)。モジュールという用語は、しばしばマルチレベルバーコードの最小特徴サイズを指すために用いられ、マルチレベルバーコードシンボルの各エレメントは整数個のモジュールで構成される。多くの多値幅シンボル体系(コード128、コード93、UPC-EANなど)でnの範囲は1~4であるが、これより大きい場合もある(例えばデータバーではnの範囲は1~9である)。
【0030】
2値幅バーコード又は多値幅バーコードにおけるエレメント配列のデータは、量子化されたエレメント幅の対応する配列によってエンコードされる。あるエレメント配列に対するエレメント幅の配列は、しばしばエレメント配列のエレメント幅パターンと呼ばれる。2値幅エレメント配列に対するエレメント幅パターンは、狭いエレメント(「X」)と太いエレメント(「W」)で構成されたバイナリパターンである。例えばバー(W)、スペース(X)バー(X)、スペース(X)、バー(X)、スペース(W)、バー(X)、スペース(X)、バー(W)は、WXXXXWXXWとして表され、ここで、Xは最小特徴サイズであり、Wは太いエレメント幅である。多値幅エレメント配列に対するエレメント幅パターンは、配列内の対応する各エレメントのモジュールの幅を示す整数のパターンである。例えばバー(n=1)、スペース(n=1)、バー(n=1)、スペース(n=3)、バー(n=2)、スペース(n=3)のエレメント幅パターン111323として表される。
【0031】
バーコードエレメントは、しばしばそれぞれのエレメントから英数字の値にデコードできる連続した文字(アルファベットや数字など)にまとめられる。一部の実施形態において、データはエレメント幅の全配列(例えばファーマコードバーコード)から直接決定される。特定のシンボル体系でエンコードできる可能な文字は、文字セットと呼ばれる。文字セットには、シンボル体系に応じて区切り文字やデータ文字など、幾つかの異なるタイプの文字がある。通常、種々の可能な区切り文字パターンは少数しかないが、可能なデータ文字エレメント幅パターンは多数ある。バーコード全体に対してエンコードされた文字列を主に定義するのは、バーコードの一方の端からもう一方の端までに表されるデータ特性値の文字列である。
【0032】
ガードパターンと呼ばれることもある区切り文字は、バーコードの先頭と末尾に表示されることが多い。区切り文字を使用すると、バーコードリーダは、例えばシンボルを検出し、どこで読み取りを開始及び停止するか判定し及び/又はシンボル体系の種類を決定することが可能となる。バーコードの先頭と末尾に配置された区切り文字は、しばしばそれぞれ開始文字と停止文字と呼ばれる。一部のシンボル体系(UPC-Aやデータバーなど)には、シンボル内に区切り文字パターンがあり、データ文字のセクションを区切っている。最後に、一部のシンボル体系(コード128など)には、データ文字をどのように解釈するかを決定する様々な開始区切り文字がある。
【0033】
データ文字は、バーコードの実際の情報をエンコードする文字である。データ文字に対するエレメント幅パターンは、英数字の値に関連付けられている。チェックサム文字と呼ばれる特別なデータ文字が指定されることもよくある。この文字の値は、本質的に他のすべてのデータ文字の値の合計であり、バーコードリーダが誤読した文字列を検出できるようにする。すべてのデータ文字の英数字値の配列は生の文字列を形成し、これは次に特別なフォーマット規則を使ってバーコードに対する実際のエンコードされたエレメントセットに変換される。
【0034】
タイプに関係なく、文字セットの各文字値はユニークなエレメント幅パターンに関連付けられる。例えばコード39文字セットの「A」と「B」のエレメント幅パターンは、それぞれWXXXXWXXWとXXWXXWXXWである。上記で説明したように、したがって「A」に対するエレメント幅パターンWXXXXWXXWは、バー(W)、スペース(X)バー(X)、スペース(X)、バー(X)、スペース(W)、バー(X)、スペース(X)、バー(W)であり、ここで、Xは最小特徴サイズ、Wは太いエレメントの幅である。コード128文字セットの「A」と「B」のエレメント幅パターンは、それぞれ111323と131123である。
【0035】
ほとんどのシンボル体系では、特定のタイプのすべての文字はバーコードの物理的な幅が同じであることに注意することが重要である。例えば2値幅シンボル体系の文字は通常一定の数の狭いバー、狭いスペース、太いバー、太いスペースを持ち、普通はバーエレメントで始まる。特定の2値幅シンボル体系の文字(コード39など)もバーで終わり、文字間ギャップと呼ばれる一貫しているが幅は任意の特別なスペースを使用して個々の文字を分離する。文字の間に文字間ギャップのあるこのようなシンボル体系は、一般に分離型シンボル体系と呼ばれ、そのようなギャップのないシンボル体系は連続型シンボル体系と呼ばれる。対照的に、多値幅シンボル体系文字は、それぞれが正確に1個のモジュール幅である一定の総数のモジュールを持つことが多く、それらは一定の数のバーとスペースを有し、通常はバーで始まりスペースで終わる(したがって文字間ギャップはない)。
【0036】
図1Aは、2値幅シンボル体系コード39を用いて生成されたバーコード100を示す。バーコード100は、102A、102B、102Cから102Nまでのエレメント配列(本明細書ではまとめてエレメント配列102と呼ぶ)のセットを含む。このエレメント配列のセットは、文字列PATENT104をエンコードする。文字列PATENT104の各文字は、データ文字Pをエンコードするエレメント配列102BやデータAをエンコードするエレメント配列102Cなどのデータ文字を使用してエンコードされる。エレメント配列102A及び102Nは、*で示される区切り文字をエンコードする。したがってエレメント配列102A及び102Nは、バーコード100の開始及び終了をマークする。
図1Aに示されるように、各エレメント配列102はバーコード100において同じ物理幅を有する。
【0037】
図1Bは、エレメント配列102Aの拡大図である。エレメント配列102Aは、最小特徴サイズXのスペースであるエレメント154を含む。エレメント配列102Aは、エレメントサイズWの太いスペースであるエレメント152を含む。エレメント配列102Aは、最小特徴サイズXのバーであるエレメント156を含む。エレメント配列102Aは、太いエレメントサイズWを持つバーであるエレメント158を含む。
【0038】
図2は、多値幅シンボル体系コード128を用いて生成されたバーコード200を示す。バーコード200は、エレメント配列202A、202B、202C、202D、202Eのエレメント配列(本明細書ではまとめて文字配列202と呼ぶ)のセットを含む。このエレメント配列のセットは、文字列PATENT204をエンコードする。
図1Aと同様に、文字列PATENT204の各文字は、データ文字Pをエンコードするエレメント配列202Bやデータ文字Aをエンコードするエレメント配列202Cなどのデータ文字を使用してエンコードされる。エレメント配列202Aは、バーコード200の開始区切り文字配列をエンコードする。エレメント配列202Eは、バーコード200の停止区切り文字配列をエンコードする。したがって区切り文字エレメント配列202Aと及び202Eは、バーコード200の開始と終了をマークする。
【0039】
図2に示されるように、各エレメント配列202A~Eはバーコード200において同じ物理幅を有する。
図2は、文字列202に対するエレメント幅パターンを示す。開始区切り文字エレメント配列202Aに対するエレメント幅パターンは、11010010000である。Pデータ文字エレメント配列202Bに対するエレメント幅パターンは、11101110110である。Aデータ文字エレメント配列202Cに対するエレメント幅パターンは、10100011000である。Tデータ文字エレメント配列202Dに対するエレメント幅パターンは、11011100010である。停止区切り文字エレメント配列202Eに対するエレメント幅パターンは、1100011101011である。
【0040】
バーコードを自動的にデコードするデバイスであるバーコードリーダは、一般にレーザスキャナ又は画像ベースのバーコードリーダの2つのカテゴリーに分類される。どちらのタイプのバーコードリーダでも、デコードは通常、物理的バーコード又はバーコードの個別の画像のいずれかを一端から他端まで通過する1回以上のスキャンに沿って、バーコードエレメントのエッジの1次元(1D)位置を測定することにより実行される。各スキャンは通常線分であるが、任意の連続した直線の輪郭であることもできる。
【0041】
バーコードの各バーコードリーダスキャンについて、個別の信号(例えばスキャン信号と呼ばれることが多い)が最初に抽出される。スキャン信号は、普通はスキャンに沿って順次サンプリングされた強度測定値からなり、本明細書ではスキャンサンプルと呼ばれる。各スキャンサンプルは、スキャンに沿った対応する位置を中心としたバーコードの小さい領域若しくはスキャンサンプル領域で測定された反射率(反射光で測定される相対的な暗さ又は明るさ)を表すことができる。スキャンに沿ったスキャンサンプル位置のパターンは、ここではスキャンサンプリング格子と呼ばれる。この格子はほぼ均一であることが多く、これはスキャンに沿ったサンプル位置間の距離若しくはスキャンサンプリングピッチは実質的に一定であることを意味する。スキャンサンプリングピッチは本質的に、通常モジュールごとのスキャンサンプル数として測定される、サンプリングされた信号のスキャンサンプリング解像度を決定する(ここで用いるモジュールは2値幅シンボル体系の最小特徴サイズと同義である)。しかしながら有効なスキャンサンプリングピッチは、バーコードが斜めから見られる又は平らではない物体(例えば瓶)に巻き付けられているために生じる遠近法効果により、スキャンの一端から他端まで実質的かつ連続的に実際に変化する可能性がある。
【0042】
スキャンサンプルピッチに対する各サンプルのスキャンサンプル領域の幅は、スキャンに沿ったサンプル間のオーバーラップの量に影響を与えることができる。サンプル間のオーバーラップが増加すると、スキャン信号のぼやけが増加する可能性がある。サンプル間のオーバーラップが減少すると、信号の重要な特徴を測定しない可能性が増すことがある。各スキャンサンプル領域の高さは、スキャンに対して垂直に統合される情報量を決定する。スキャンサンプルの高さが大きいと、スキャンがバーに対して垂直である場合に信号におけるエレメントのエッジがよりシャープになる(その結果として例えばスキャンは垂直方向におけるバーの冗長な情報を利用できる)。しかしながらバーに対するスキャン角度が増してバーに対して垂直でなくなるに連れて、これらのエッジはますますぼやける。
【0043】
レーザスキャナの場合、スキャン信号は、レーザが物理的バーコードを通ってスキャン輪郭に沿ってスイープするとき(例えばレーザがバーコードを通る線に沿ってスイープするとき)に、レーザの反射強度を経時的にサンプリングすることによって抽出される。各サンプル領域は、本質的にはある瞬間のレーザ「スポット」である。レーザスポットの形状は典型的に楕円形であり、主軸がスキャンに対して垂直に向けられているため、前述のサンプルエリアの幅と高さが代償となることがある。サンプリングされる信号はアナログであるため、経時的なサンプリングレートが解像度又はサンプリングピッチに影響を与えることがある。レーザの経時的なサンプリングレートは、例えばレーザの分解能(例えばレーザの小さいスポットにいかに適切に集束できるか)、最大時間サンプリングレート、及び/又はバーコードの印刷品質によって制限される場合がある。
【0044】
画像ベースのバーコードリーダの場合、バーコードの個別の画像がカメラの光学系や撮像センサ(CCDアレイなど)を使用するなどして取得される。その結果得られる画像は、バーコード全体の2Dサンプリングであってもよい。その画像の各画像サンプル又はピクセルは、それ自体画像サンプリング格子における対応するポイントを中心としたバーコードの小さい領域の平均反射率の測定値である。この格子は均一又はほぼ均一であることが多く、これは画像サンプル位置間の距離又は画像サンプリングピッチが一定であることを意味する。このサンプリングピッチが、通常は1モジュールあたりのピクセル数(「PPM」)として測定される画像の解像度を本質的に決定する。しかしながらレーザスキャンと同様に、遠近効果により有効な画像サンプリングピッチがバーコードの一端から他端まで実質的かつ連続的に実際に変化する可能性がある。
【0045】
次に、スキャンに沿って画像をサブサンプリングする(例えば既にサンプリングされた信号をサンプリングする)ことにより、バーコードの画像全体のスキャンに対してスキャン信号を抽出できる。スキャンサンプリングピッチは、空間上のサンプリングレートによって決まる(例えばレーザスキャナのように時間ではない)。当業者は、このサブサンプリング動作を実行するために多くの方法があることを理解できる。例えば画像処理技術の投影は、スキャン線分に使用できる。投影の場合、投影の高さは本質的に各サンプルに対するスキャンサンプル領域の高さを決定し、スキャンに対して垂直な情報を統合する。別の例として、2011年12月23日に提出された「1次元信号抽出のための方法及び装置」と題する米国特許出願第13/336275号に記載された技術を使用することができ、その全開示内容は参照により本明細書に組み込まれる。例えば各スキャンサンプルための有効なスキャンサンプル領域は、レーザスキャナで使用される楕円形のスポットサイズに類似した楕円形であることができる。
【0046】
図3は、エレメント配列302に対する例示的なスキャン信号を示しており、エレメント配列302はバーコードエレメント302A~302Kからなり、これらはまとめてバーコードエレメントと呼ぶ。スキャン304は、バーコードエレメント302に対して垂直である。
図3は、スキャン304から導出されたスキャン信号306を示す。スキャン信号306は、スキャンサンプル308A、308Bから308Nまでを含み、本明細書ではこれらをスキャンサンプル308と総称する。各スキャンサンプル308は、対応する楕円形のスキャンサンプル領域s0 310Aからsn 310Nで測定された反射率を表しており、これらはスキャンライン304に沿った1D範囲内でスキャンサンプルビンs0 310Aからsn 310Nに対応している。例えば、スキャンサンプル308Aは、スキャンサンプルビン310Aに対応するスキャンサンプル領域311Aで測定された反射率を表し、スキャンサンプル308Bは、スキャンサンプルビン310Bに対応するスキャンサンプル領域311Bで測定された反射率を表し、スキャンサンプル308Nはスキャンサンプルビン310Nに対応するスキャンサンプル領域311Nで測定された反射率を表す。サンプル310Aは、完全にスペースエレメント302A内にあるスキャンサンプル領域311Aによって抽出されるので、スキャンサンプル308Aは、「h」で示される高い反射率を有する。スキャンサンプル308Bは、サンプル領域308Bが完全にスペースエレメント302A内にあるわけではなく、バーエレメント302Bからの情報も統合しているので反射率が低い。
【0047】
しかしながらレーザスキャナとの重要な違いは、画像ベースのバーコードリーダを使用して抽出されたスキャン信号のサンプリング解像度は、取得した画像の基礎となるサンプリング解像度(ピクセルなど)によって本質的に制限されることである。即ち、サブサンプリングされたスキャン信号にとって各ピクセルに含まれる以外の追加の微細な詳細を回復する手段はない。米国特許出願第13/336275号に記載されているように、この制限は、1Dスキャンがピクセルの格子で方向付けられた(例えば取得した画像のピクセルの格子に対して完全に水平又は垂直な)線分である場合にしばしば悪化する。対照的に、可能な限り最良のスキャンサンプリングピッチは、基礎となる画像サンプリングピッチに等しいであろう。したがってこの制限は、より大きい軸外スキャンライン角度で改善できる。一部の実施形態では、画像サンプリングピッチの(1/sqrt(2))倍の最良可能なスキャンサンプリングピッチを達成できるのは、スキャンがピクセルの格子に対して45度に向けられた線分の場合であり、それによりバーコードが斜めに向けられた場合にしばしば見いだされるより多くの情報が反射される。したがってこの解像度の制限の一般的な欠点は、レーザスキャナで可能であるよりはるかに大きい領域をカバーして分析する能力によってしばしば補うことができる。それにもかかわらずそのような解像度の制限に対処することが往々にして必要である。
【0048】
画像ベースのバーコードリーダとレーザスキャナはいずれも、シャープな信号(例えばぼやけていない信号)を取得できない場合に問題に対処する必要がある。画像ベースのバーコードリーダもレーザスキャナも被写界深度が限られていることが多いが、被写界深度は本質的に取得した画像又はレーザスキャン信号が焦点を結ぶバーコードリーダからの距離範囲である。画像ベースのバーコードリーダは、被写界深度の制限に加えてぼやけることがある。ぼやけとは、焦点の不足やその他の効果のために1Dスキャン信号が不鮮明になる量を指す。例えば1Dスキャン信号は、低解像度画像から抽出されるプロセスのためにぼやけている場合がある。別の例として、利用可能な照明条件下で適切なコントラストの画像を取得するために必要な露出時間に対して相対的に、バーコードが貼られている物体の速度に依存する動きによって、ぼやけが引き起こされることがある。
【0049】
バーコードリーダの種類やスキャン信号の抽出方法に関係なく、バーコードをデコードする典型的な方法は、これらのスキャン信号の1つ以上に沿ってすべてのエレメントエッジ(境界とも呼ばれる)の1D位置を検出及び測定することである。スキャンに沿って検出された各エッジの位置は、スキャン信号内のそれらの分数位置とスキャンサンプリングピッチの積である、そのようなエッジを使用してバーコードエレメントの幅を直接推測することができ、次にこれらのバーコードエレメントをさらに個別のエレメントサイズに分類できる(例えば使用するシンボル体系の種類に応じて、細、太、1X、2Xなど)。しかしながら多値幅シンボル体系ではより一般的に、同じ極性の隣接するエッジ間の連続した距離(明から暗又は暗から明への遷移)が計算され、(1X、2Xなどに)分類され、次に当業界で知られているように、「エッジから類似エッジ」パターンから文字を推定するために使用される。この間接的な計算を使用して、印刷プロセスのために、典型的にはインクの広がりのためにバーが太くスペースが細く、又はその逆に見える顕著な印刷太りによる誤分類(誤認識)を回避することができる。2値幅シンボル体系では、バーとスペースを別々に分類することにより、印刷太りを回避できる。
【0050】
エレメントエッジは、当業界で知られている多くの技術を用いて検出でき、これには例えば最大一次導関数の位置を特定する個別の方法、又は二次導関数のゼロ交差、及び/又は分解されたエレメントの境界を特定する波形整形法が含まれる。
【0051】
しかしながらエッジの検出は、画像取得ノイズと印刷欠陥により複雑になる場合がある。画像取得ノイズ及び/又は印刷欠陥によって偽エッジが検出されることがあり、低コントラスト(照明不足、レーザ強度などのため)又はぼやけ(動きや焦点不良のため)などの問題も引き起こして、特定のエッジが全く検出されなくなることがある。真のエッジに対する測定感度を高めるために、信号のプレフィルタリング(平滑化など)又は強調(ぼやけ除去、シャープ化など)、偽エッジ又はピークと谷のフィルタリングなどの様々な方法が考案されている。しかしながらそのような方法を採用しても、信号解像度が低下するとより大きい測定感度が必要となり、偽エッジを真のエッジから区別するとともに、それらのエッジの位置を必要な精度で測定する問題の増加とのバランスを取ることが一層困難になる。
【0052】
同じバーコードにわたる複数のスキャン間にデコードされた文字又はエッジ情報を結合若しくは統合する機能を追加すると、有用であり得る(バーコードに局所的な損傷がある場合など)。しかしながらそのような統合を用いても、エッジベースの技術を使用する画像ベースのデコーダは、画像品質、焦点、及びピクセルの格子に対するバーコードの向きに依存してスキャンラインに対して1モジュールあたり1.3~1.5ピクセル(PPM)で障害が発生し始める傾向がある。
【0053】
本質的に、スキャン信号の有効解像度が低下すると、スキャンサンプリング解像度とぼやけの両方を伴い、バーコードの個々のエレメントを分解することが難しくなる。特に細エレメントは分解するのが難しく、ある解像度ではそのような細エレメントは最終的にそれらの間の遷移は全く明白でないポイントで互いに溶け合う。分解の困難さは、特にサンプリング不足の信号で問題になる。例えば2つのエレメント間(例えばバーとスペースの間)の遷移がスキャンサンプル中心(正確には例えば1/2サンプル位相ずれている)に向かって移動すると、その結果スキャンサンプルは個々のバーとスペースの高い又は低い反射率の平均反射率であるよりも、事実上両エレメントの平均反射率であるサンプル値となる。問題のある例として、解像度は1モジューあたりほぼ1サンプルであり、複数の細エレメントが1/2位相ずれた連続サンプルと一致するため、スキャン信号は均一な反射率値を持ちエッジは全く明白ではない。
【0054】
エッジの検出とノイズとの区別の問題に加えて、そのような遷移のスキャン位置を測定できる精度も低下する可能性があり、これはサンプリング解像度(例えば各エッジ遷移のサンプルは遷移が発生する場所を補間するサンプルに比べて少ないという事実のため)及び/又はぼやけ(例えばぼやけたエッジに沿った緩やかな遷移はノイズの存在下では測定がより困難になるため)を伴う。その結果、例えば細いバーと太いバーをエッジから区別することが不可能になることがある。ぼやけによる不正確さを処理しようとする技術として、例えばエッジペアの位置を使用して各エレメントの中心の位置を特定することに集中することが考案された。各エレメントの中心は少なくともぼやけの効果に対してはより安定であり、エッジ間の距離よりも、むしろこれらの中心位置の間の相対的位置を使用して、シンボルをデコードする。しかしながら測定されたエレメントエッジ境界の中心がより安定であるのは、通常は明白なエッジ位置が反対方向の誤差を有する場合に限られる。例えば明白なエッジ位置は十分な解像度(例えば1.5PPM以上)を持つぼやけたエレメントに対して反対方向の誤差を持つことがあるが、信号がサンプリング不足の場合は必ずしもそうではなく、量子化効果によるエッジ誤差はしばしば圧倒的にピクセルの格子とエレメント境界に対するスキャンサンプリング格子の局所的位相(相対位置)の関数である。
【0055】
解像度の制限を軽減する努力において、太エレメントの中心と幅を決定した後で欠けている細エレメントの位置を推定することを試みるために幾つかの方法が考案された。これらの方法は太エレメント間の細エレメントの数に対する制約を使用でき、この制約は2値幅バーコードと多値幅バーコードで異なるが一般的である。エッジから文字を認識しようと試みる方法も考案されたが、これは検出されないエッジも許容する。例えば確率論的技術を採用してエッジベースの(幾何学的に)変形可能なテンプレートのマッチングによって文字をデコードできる。しかしながらこのような方法は通常は十分なサンプリング解像度を持つぼやけたバーコードのために考案されており、サンプリング不足のバーコードのためではない。事実、そのような技術は、標準のエッジベースのデコード技術は信号が焦点にあると見なされる場合に使用すべきであると指定することがある。エッジ(境界)の決定に依存し続ける場合、SPMが1モジュールあたり1.1サンプルを下回るほど減少すると、たとえ太エレメントでも幅の特定と測定が困難になる。さらに、一部のアルゴリズムは、産業用バーコードリーダでの実用に十分なほど効率的に実装できない。
【0056】
これらの問題をさらに悪化させるのは、レーザスキャナの代わりに(例えばカバレッジが広いというメリットのため)画像ベースのバーコードリーダを採用する傾向と、バーコードリーダのサイズを小さくし、その数を最小限に抑えることによって画像ベースのリーダシステムのコストを削減する傾向である。例えばこれは物流アプリケーションの場合で、幅の広いコンベアベルト上のしばしばランダムな方向に向けられた箱や荷物に貼られたバーコードを読み取らなければならない。バーコードリーダの数を最小化するには、各バーコードリーダがカバーしなければならない体積の量(面積や奥行きなど)を最大化する必要がある。これにより相対画像解像度(PPM)が減少し、(被写界深度の制限により)ぼやけが増加するが、いずれも有効な画像サンプリング解像度を低下させる。
【0057】
単純にぼやけたバーコードを超えて、バーコードリーダの解像度不足のデコード能力を改善する必要がある(例えば特に画像ベースのバーコードリーダの場合)。さらに、エッジベースの方法には低解像度(例えば1.1PPM未満)で困難があるため、スキャン信号値を直接分析してバーコードをデコードできる方法が必要である。これらの制限を克服しようとした技術は、パターンマッチング技術を使用することである。一部のパターンマッチング技術は、バーコード内の各文字を1D変形可能テンプレートとしてモデリングすることによりバーコードのデコードを試みる。1D変形可能テンプレートは、水平方向にスケーリングし(例えば未知のモジュールサイズに対応)、水平方向に平行移動し(例えばスキャンラインに沿った不確実な位置に対応)、垂直方向に伸縮し(例えば未知のコントラストに対応)、垂直方向に平行移動する(例えば未知の背景照明強度に対応)ことができる。しかしながらこのようなパターンマッチング技術は、バーコードの激しいサンプリング不足、例えば1.0PPM以下の量子化効果には対応できない。例えばサンプリング不足により、パターンはテンプレートに対して認識されずに変形する可能性がある。
【0058】
バーコードは一連のバーコード単位で構成されていると見なすことができ、各単位は関連する幅とバイナリエンコード値がある。例えば2値幅バーコードの場合、バーコード単位は、細い「X」又は太い「W」の2つの幅のいずれかを持つことができる。別の例として、多値幅バーコードの場合、バーコード単位はXの倍数nに相当する幅を持つことができる。バイナリエンコード値は、バーコード単位がバー又はスペースの一部であるかどうかを示すことができる。例えばバーコード単位がバーに対するものであることを示すためにBを使用し、スペースに対してはSを使用することができる。一部の実施形態では数値を使用することができ、例えばB=0及びS=1、又はB=-1及びS=1である。したがって、各エレメント幅パターンは、単位幅パターン及び単位エンコードパターンに関連付けることができる。
【0059】
幾つかの例では、バーコード単位はエレメントであることができ、その場合は単位幅パターンはエレメント幅パターンであり、関連する単位エンコードパターンはバー値とスペース値が交互するパターン(例えばBSBSBSBSB)で、バー又はスペースの適当な開始値を持つ(例えばエレメントは文字間ギャップを除き、常にバーとスペースの間で交互するため)。
【0060】
幾つかの例では、各バーコード単位は、単位幅パターンを均一にするために選択される。例えば2値幅バーコードの場合、バーコード単位をエレメントより小さくすることはできないが、これは一般に太エレメントをさらに整数個の細エレメントに減らすことができないためである。例えば多値幅バーコードの場合、各エレメントの幅は整数個のモジュール幅からなるため、単位はモジュールと同じく小さくすることができる。モジュール単位を使用すると、幅の狭い均一な単位幅パターンが得られる。一部の実施形態では、特定の多値幅単位幅パターンは均一なモジュールのある配列からなり、関連する単位エンコードパターンは、その配列のエンコードされたデータを一緒に表すバー値とスペース値からなる。例えばXXXXXXXXXXXは、長さ11のモジュールのすべての単位幅パターンに対する単位幅パターンであるが、単位エンコードパターンはエレメント幅パターンごとに異なる。例えばBSBSSSBBSSSは、11Xエレメント幅パターン111323に対するユニークな単位エンコードパターンである。
【0061】
一部の実施形態では、2値幅シンボル体系の場合、エレメント幅パターン内の情報は、直接単位幅パターンによってエンコードされ、単位エンコードパターンは交互する。例えば前述のように、単位エンコードパターンはバー値とスペース値が交互するパターン(例えばBSBSBSBSB)である。一部の実施形態では、多値幅シンボル体系の場合にエレメント幅パターン内の情報は、単位エンコードパターンによって間接的にエンコードされ、単位幅パターンは均一な最小特徴からなる。例えばXXXXXXXXXXXは長さ11のモジュールのすべての単位幅パターンに対する単位幅パターンであるため、これ以上の情報がないとエレメント幅パターンを推測することはできないので、エレメント幅パターンを間接的にエンコードする。しかし単位幅パターン(例えば11Xエレメント幅パターン111323に対するBSBSSSBBSSSなど)は、11個の特徴(例えば11個のBsとSs)を含む。
【0062】
有利なことに、エレメント単位を使用して2値幅シンボル体系又は多値幅シンボル体系を分析すると、シンボル体系におけるユニークな各データ文字をユニークな単位(例えばエレメント)配列に関連付けることができる。単位エンコードパターンは、すべての文字に対して同じサイズが交互するするバイナリパターンであることができる。モジュール単位を使用して多値幅シンボル体系を分析すると、シンボル体系内のユニークな各データ文字をユニークな単位(モジュールなど)パターンに関連付けることができ、単位(モジュールなど)配列はすべての文字で同じであることができる。
【0063】
例えば2値幅シンボル体系コード39に対してモジュール単位を使用する場合、「A」に対するユニークな単位幅パターンはそのエレメント幅パターンWXXXXWXXWであり、「B」に対するユニークな単位幅パターンはそのエレメント幅パターンXXWXXWXXWである。しかしすべてのコード39データ文字は、同じ長さ9のバイナリ単位エンコードパターンBSBSBSBSBに関連付けられている。コード128についても同様に、エレメント単位を使用する場合、「A」に対するユニークな単位幅パターンはそのエレメント幅パターン111323であり、「B」に対する単位幅パターンはそのエレメント幅パターン131123である。しかしすべてのコード128文字は同じ長さ6のバイナリ単位エンコードパターンBSBSBSと関連付けられている。
【0064】
別の例として、多値幅シンボル体系コード128にモジュール単位を使用する場合、すべての文字に対する単位幅パターンは同じ長さ11の均一な配列XXXXXXXXXXXであるが、「A」に対するユニークな単位エンコードパターンはBSBSSSBBSSSである(例えばエレメント幅パターン111323に対応)、「B」に対するユニークな単位エンコードパターンはBSSSBWBBSSSである(例えばエレメント幅パターン131123に対応)。
【0065】
バーコードとバーコード文字を単位として構成されるように表現することにより、サンプリング量子化効果を数学的にモデル化できる。例えばモデルは以下に基づいて生成できる。
【0066】
(1)(a)バーコードエレメントの連続配列(例えば文字間ギャップなし)、及び(b)エレメント幅パターンとして表される各バーコードエレメントに対する関連する量子化幅。
(2)サンプル座標においてバーコードエレメント配列の最初のエレメントの開始位置(例えばサンプリングピッチの分数において、小数部分は本質的にサンプリング格子に対する開始「位相」である)。
(3)該当する場合、サンプルの分数で測定された最小特徴サイズ(X)と太エレメント幅(W)(又は同等に細太比)。
【0067】
このような情報を使用すると、これらのバーコードエレメントと生信号との関係は、単一のマトリックス方程式を使用して表現できる。
A*b=s 式1
ここで、
・Aは、スキャンに沿った単位境界の位置を定義する、単位格子に依存する単位サンプリング係数マトリックス、即ちサンプリング係数の疎なマトリックスで、次のものからなる。
〇バーコードエレメント配列にまたがる単位サブ配列
〇最小特徴サイズ、X
〇太エレメントサイズ、W(該当する場合)
〇配列内の最初のバーコードエレメントの開始位置。
・bは、バー値とスペース値のバイナリ単位のエンコードパターンである。
・sは、正規化されたスキャンサンプルを表すベクトルである。
【0068】
サンプリング係数マトリックスAの各行は1サンプルに対応でき、各列は1単位(例えば多値幅バーコードに対するモジュール、又は2値幅バーコードに対するエレメント)に対応できる。各行の値を選択して1.0に追加し、各列の値を選択してそれぞれの単位(モジュール又はエレメントなど)の幅(例えばX又はW)に追加できる。
【0069】
i番目の正規化されたベクトルのサンプルs,s(i)は、次式で与えることができる。
s(i)=B+[(r(i)-l(i))×(S-B)]/(h(i)-l(i)) 式2
ここで、
・rは、サンプルビンにわたるスキャン信号の連続部分を表すベクトルである。
・hとlは、rの信号包絡線の離散近似を表す値のベクトルである。
〇h(i)は、サンプルiにおけるスペースの反射率の推定値である。
〇l(i)は、サンプルiにおけるバーの反射率に対する推定値である。
【0070】
ベクトルrは、単位サブ配列全体の位置範囲をカバーすると想定できる。一部の実施形態では、rの値は測定された反射率値であることができる。Aの各行iは、スキャンサンプルに対する反射率の測定値を得るためにサンプルiに対してビンによって統合された単位幅パターン内のバーコード単位のそれぞれのパーセンテージのベクトルであることができる。一部の実施形態では、単位係数は単位格子に依存し、単位格子は単位間の遷移の位置を表すことができる。単位格子は、位相(例えば開始点)、最小特徴サイズ、印刷太り、細太比(ある場合)及び/又は同種のものによって影響されることがある。
【0071】
図4は、一部の実施形態による、1モジュールあたり1サンプル(「SPM」)及びバーコードをデコードするための0位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図4は、バーコードモジュールb1402B、b2 402C、b3 402D、b4 402E、b5 402F、b6 402G、b7 402H、b8 402I、b9 402J、b10 402K、及びb11 402LからなるAデータ文字モジュール400を示す。文字単位402は、これらのモジュールの他に、先行文字の最後のモジュールb0 402A(スペース)と、先行文字の最初のモジュールb12 402M(バー)を含む。
【0072】
図4は、スキャン404から導出されたスキャン信号406を示す。スキャン信号406は、本明細書でスキャンサンプル408と総称するスキャンサンプル408A、408Bから408Nまで含む。スキャンサンプル408は、対応するスキャンサンプルビンs0 410A、s1 410Bからs12 410Nまで含み、これらはスキャンサンプルビン410と総称される。例えばスキャンサンプル408Aは、スキャンサンプルビンs0 410Aに対するスキャンサンプルを表す。各スキャンサンプルビン410は文字単位402の開始と位置合わせされるので、スキャンサンプルビン410は文字単位402に対してゼロ(0)位相を有する。
図4は、単位サンプリング係数マトリックス420も示している。単位サンプリング係数マトリックス420の各行s1 412Aからs11 412Nmまで(本明細書ではまとめて行412と呼ぶ)は1サンプルに対応し、単位幅パターン内の文字単位に対するサンプリング係数のベクトルである。単位サンプリング係数マトリックス420の各列422Aから422Nまで(まとめて列422)は1単位(例えばモジュール)に対応する。
図4に示すように、サンプリングピッチは正確にモジュール幅であるため、各スキャンサンプルビン410の幅はバーコード文字400のモジュールの幅に対応する。単位サンプリング係数マトリックス420は、1を含んで示された場所以外のすべての場所にゼロを含む(簡単にするためにすべてのゼロが示されていない)。行s1 412Aは、スキャンサンプルビンs1 410Bがモジュールb1 402B全体と一致するので、第2列422Bに1を含み、行s2 412Bは、スキャンサンプルビンs2 410Bがモジュールb2 402C全体と一致するので、第3列422Cに1を含む、などと続く。
【0073】
図5は、一部の実施形態による、バーコードをデコードするための1SPM及び0位相での多値幅バーコードに対する例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図5は、Bデータ文字エレメント配列500を示しており、これはバーコードモジュールb1 502B、b2 502C、b3 502D、b4 502E、b5 502F、b6 502G、b7 502H、b8 502I、b9 502J、b10 502K及びb11 502Lからなる。文字単位502は、これらのモジュールの他に、先行文字b0 502Aの最後のモジュール(スペース)と、先行文字b12 502Mの最初のモジュール(バー)を含む。
【0074】
図5は、スキャン504から導出されたスキャン信号506を示す。スキャン信号506は、本明細書でスキャンサンプル508と総称するスキャンサンプル508A、508Bから508Nまで含む。スキャンサンプル508は、対応するスキャンサンプルビンs0 510A、s1 510Bからs12 510Nまでに対するサンプルを表す。例えばスキャンサンプル508Aは、スキャンサンプルビンs0 510Aに対するスキャンサンプルを表す。
図5は、単位サンプリング係数マトリックス520も示す。各スキャンサンプル510はバーコードモジュール502の開始と位置合わせされるので、単位502はスキャンサンプルビン510に対してゼロ(0)位相を有する。単位サンプリング係数マトリックス520の各行s1 512Aからs11 512Nまで(本明細書ではまとめて行512と呼ぶ)は1サンプルに対応し、単位幅パターン内のバーコード単位に対するサンプリング係数のベクトルである。単位サンプリング係数マトリックス520の各列522Aから522Nまでは1単位(例えばモジュール)に対応する。
図4のように、各スキャンサンプルビン510の幅は、バーコード500のモジュールの幅に対応する。単位サンプリング係数マトリックス520は、1を含んで示された場所以外のすべての場所にゼロを含む(簡単にするためにすべてのゼロが示されていない)。行s1 512Aは、スキャンサンプルビンs1 510Bがモジュールb1 502B全体と一致するので、第2列522Bに1を含み、行s2 512Bは、スキャンサンプルビンs2 510Bがモジュールb2 502C全体と一致するので、第3列522Cに1を含む、などと続く。結果の単位サンプリング係数マトリックス520は、
図4の単位サンプリング係数マトリックス420と同じであることに留意されたい。なぜなら、
図4と同様に、単位502は、スキャンサンプルビン510に対してゼロ位相にあり、モジュールサイズはモジュールサイズと正確に等しいからである。
【0075】
図6は、一部の実施形態による、バーコードをデコードするための1SPM及び0.5位相での多値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図6は、
図4からのAデータ文字モジュール配列400を示す。
図6は、スキャン604から導出されたスキャン信号606を示す。スキャン信号606は、スキャンサンプル608A、608Bから608Nまでを含み、本明細書ではまとめてスキャンサンプル608と呼ぶ。スキャンサンプル608は、対応するスキャンサンプルビンs0 610A、s1 610Bからs11 610Nまでに対するサンプルを表す。例えばスキャンサンプル608Aは、スキャンサンプルビンs0 610Aに対するスキャンサンプルを表しており、これはその面積の半分がb0によってカバーされ、その面積の半分がb1によってカバーされるため、高と低の間である。各単位402は、各スキャンサンプルビン610の開始がキャンサンプリングピッチビンの幅の半分だけオフセットされ、サンプリングピッチはモジュールサイズと正確に等しいので、単位402はスキャンサンプルビン610に対して(0.5)位相にある。
【0076】
図6は、単位サンプリング係数マトリックス620も示す。単位サンプリング係数マトリックス620の各行s0 612Aからs11 612Nまで(本明細書ではまとめて行612と呼ぶ)は1サンプルに対応し、単位幅パターン内のバーコード単位のサンプリング係数のベクトルである。単位サンプリング係数マトリックス620の各列622Aから622Nまで(まとめて列622)は1単位(例えばモジュール)に対応する。各スキャンサンプルビン610の幅は各バーコードモジュールの幅に等しい一方で、各スキャンサンプルビン610は半分が2つの連続するバーコードエレメント402の各々によってカバーされる。単位サンプリング係数マトリックス620は、半分(1/2)を含んで示された場所以外のすべての場所にゼロを含む(簡単にするためにすべてのゼロが示されていない)。行s0 612Aは、スキャンサンプルビンs0 610Aがバーb0 402Aで半分カバーされるので、第1列622Aに0.5を含み、スキャンサンプルビンs0 610Aがバーb1 402Bで半分カバーされるので、第2列622Bに0.5を含む。行s1 612Bは、スキャンサンプルビンs1 610Bがバーb1 402Bで半分カバーされるので、第2列622Bに0.5を含み、スキャンサンプルビンs1 610Bがバーb2 402Cで半分カバーされるので、第3列622Cに0.5を含む。
【0077】
図7は、一部の実施形態による、バーコードをデコードするための1SPM及び-0.25位相での多値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図7は、
図4からのAデータ文字エレメント配列400を示す。
図4。
図7は、スキャン704から導出されたスキャン信号706を示す。スキャン信号706は、本明細書でスキャンサンプル708と総称するスキャンサンプル708A、708Bから708Nまで含む。スキャンサンプル708は、対応するスキャンサンプルビンs0 710A、s1710Bからs11 710Nまでに対するサンプルを表す。例えばスキャンサンプル708Aは、スキャンサンプルビンs0 710Aに対するスキャンサンプルを表わし、これは、スキャンサンプルビンs0が0.75%は反射率hを持つモジュールb0によってカバーされ、0.25%が反射率1を持つモジュールb1によってカバーされるため、低から高に向かう行程の4分の3である。各単位402は、各スキャンサンプリングビン410の開始からモジュールの幅の4分の1だけ後方にオフセットされているため、単位402はスキャンサンプルビン710に対して(-0.25)位相にある。
【0078】
図7は、単位サンプリング係数マトリックス720も示す。単位サンプリング係数マトリックス720の各行s0 712Aからs11 712Nまで(本明細書では行712と総称する)は1サンプルに対応し、単位幅パターン内のバーコード単位に対するサンプリング係数のベクトルである。単位サンプリング係数マトリックス720の各列722Aから722N(まとめて列722)は1単位(例えばモジュール)に対応する。各スキャンサンプルビン710の幅は各バーコードモジュールの幅に等しい一方で、各スキャンサンプルビン710は-0.25位相のために2つの連続するバーコード単位402によってそれぞれ0.75%及び0.25%カバーされる。単位サンプリング係数マトリックス720は、ゼロでない値を含んで示された場所以外のすべての場所にゼロを含む(簡単にするためにすべてのゼロが示されていない)。行s0 712Aは、スキャンサンプルビンs0 710Aがモジュールb0 402Aによって3/4カバーされるので、第1列722Aに0.75を含み、スキャンサンプルビンs0 710Aがモジュールb1 402Bによって1/4カバーされるので、第2列722Bに0.75を含む。行s1 712Bは、スキャンサンプルビンs1 710Bがモジュールb1 402Bによって3/4カバーされるので、第2列722Bに0.75を含み、スキャンサンプルビンs1 710Bがモジュールb1 402Cによって1/4カバーされるので、第3列722Bに0.25を含む。
【0079】
図8は、一部の実施形態による、バーコードをデコードするための1.33SPM及び1/3位相での多値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図8は、
図4からのAデータ文字モジュール配列400を示す。
図8は、スキャン804から導出されたスキャン信号806を示す。スキャン信号806は、本明細書ではスキャンサンプル808と総称するスキャンサンプル808A、808Bから808Nまで含む。スキャンサンプル808は、対応するスキャンサンプルビンs0 810A、s1 810Bからs16 810Nまでに対するサンプルを表す。例えばスキャンサンプル808Aは、スキャンサンプルビンs0810Aのスキャンサンプルを表しており、これはスキャンサンプルビンs0が完全にb0によってカバーされるため高い値である。別の例として、スキャンサンプル808Bはスキャンサンプルビンs1 810Bに対するスキャンサンプルを表わしており、これは、スキャンサンプルビンs1がb0の反射率によって1/3カバーされ、b1の反射率によって2/3カバーされるため、高から低への行程の2/3である。単位402B(文字モジュールの始まり)がs1 810Bの右から始まるので、単位402はスキャンサンプルビン810に対して3分の1(1/3)位相にある。
【0080】
図8は、単位サンプリング係数マトリックス820も示す。単位サンプリング係数マトリックス820の各行s0 812Aからs16 812Nまで(本明細書ではまとめて行812と呼ぶ)は1つのスキャンサンプルに対応し、単位幅パターン内のバーコード単位のサンプリング係数のベクトルである。単位サンプリング係数マトリックス820の各列822Aから822Nまで(まとめて列822)は1単位(例えばモジュール)に対応する。各スキャンサンプルビン810の幅は、1.33SPMのためバーコードモジュールの2/3に等しい。単位サンプリング係数マトリックス820は、ゼロでない値を含んで示された場所以外のすべての場所にゼロを含む(簡単にするためにすべてのゼロが示されていない)。例えば行s0 812Aは、スキャンサンプルビンs0 810Aがモジュールb0 402Aによって完全にカバーされる(そして他のモジュールの部分はない)ので、第1列822Aに1.0を含む。行s1 812Bは、スキャンサンプルビンs1 810Bが単位b0 402Aによって1/3カバーされるので、第1列822Aに0.33を含み、スキャンサンプルビンs1 810Bがモジュールb2 402Cによって2/3カバーされるので、第2列822Bに0.66を含む。
【0081】
図9は、一部の実施形態による、バーコードをデコードするための0.75SPM及び-0.25位相での多値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図9は、
図4からのAデータ文字モジュール配列400を示す。
図9は、スキャン904から導出されたスキャン信号906を示す。スキャン信号906は、本明細書でスキャンサンプル908と総称するスキャンサンプル908A、908Bから908Nまでを含む。スキャンサンプル908は、対応するスキャンサンプルビンs0 910A、s1 910Bからs9 910Nまでに対するサンプルを表す。例えばスキャンサンプル908Aは、スキャンサンプルビンs0 910Aのスキャンサンプルを表しており、これはb0 402Aの0.75反射率及びb1 402Bの0.25反射率を表す値である。別の例として、スキャンサンプル908Bはスキャンサンプルビンs1 910Bに対するスキャンサンプルを表しており、これは半分がモジュールb0によってカバーされ、半分がモジュールb1によってカバーされる。単位402B(文字モジュールsの最初の単位)がs1 910Bの左からサンプリングピッチ0.25で始まるため、単位402はスキャンサンプルビン910に対してマイナス4分の1(-1/4)位相にある。
【0082】
図9は、単位サンプリング係数マトリックス920も示している。単位サンプリング係数マトリックス920の各行s0 912Aからs9 912Nまで(本明細書ではまとめて行912と呼ぶ)は1つのスキャンサンプルに対応し、単位幅パターン内のバーコード単位のサンプリング係数のベクトルである。単位サンプリング係数マトリックス920の各列922Aから922Nまで(まとめて列922)は1単位(例えばモジュール)に対応する。各スキャンサンプルビン910の幅は、0.75SPMのためバーコードエレメントの1及び1/3に等しくなる。単位サンプリング係数マトリックス920は、ゼロでない値を含んで示された場所以外のすべての場所にゼロを含む(単純にするためにすべてのゼロが示されていない)。例えば行s0 912Aには、スキャンサンプルビンs0 910Aが単位b0 402Aによって3/4カバーされるので、第1列922Aに0.75を含み、スキャンサンプルビンs0 910Aが単位b1 402Bによって1/4カバーされるので、第2列922Bに0.25を含む。行s1 912Bは、スキャンサンプルビンs1 810Bが単位b1 402Bによって1/2カバーされるので、第1列822Aに0.5を含み、スキャンサンプル単位s1 910Bが単位b2 402Cによって1/2カバーされるので、第2列922Bに0.5を含む。
【0083】
図10は、一部の実施形態による、バーコードをデコードするための0.84SPM、2.1の幅(W)、及び-0.16位相での2値幅バーコードの例示的なスキャンラインサブサンプリング及びサンプリング係数を示す。
図10は、バーコード単位(エレメント)1002と総称されるバーコードエレメントb0 1002A、b1 1002B、b2 1002C、b3 1002D、b4 1002E、b5 1002F、b6 1002G、b7 1002H、b8 1002I、b9 1002J、及びb10 1002KからなるAデータ文字エレメント配列1000を示す。
【0084】
図10は、スキャン1004から導出されたスキャン信号1006を示す。スキャン信号1006は、本明細書でスキャンサンプル1008と総称するスキャンサンプル1008A、1008Bから1008Nまでを含む。スキャンサンプル1008は、対応するスキャンサンプルビンs0 1010A、s1 1010Bからs9 1010Nまでに対するサンプルを表す。例えばスキャンサンプル1008Aはスキャンサンプルビンs0 1010Aに対するスキャンサンプルを表しており、これは単位b0 1002Aの反射率0.84、及び単位b1 1002Bの反射率0.16を表す値である。別の例として、スキャンサンプル1008Bは、単位b1 1002Bによって完全にカバーされるスキャンサンプルビンs1 1010Bに対するスキャンサンプルを表す。単位1002B(文字の最初のエレメント)はスキャンサンプルビンs1 1010Bの左から始まるため、単位1002はスキャンサンプルビン1010に対して-0.16位相にある。
【0085】
図10は、単位サンプリング係数マトリックス1020も示している。単位サンプリング係数マトリックス1020の各行s0 1012Aからs12 1012Nまで(本明細書ではまとめて行1012と呼ぶ)は1つのスキャンサンプルに対応し、単位幅パターン内のバーコード単位のサンプリング係数のベクトルである。単位サンプリング係数マトリックス1020の各列1022Aから1022Nまで(まとめて列1022)は、1単位(例えばエレメント)に対応する。単位サンプリング係数マトリックス1020は、ゼロでない値を含んで示されている場所以外のすべての場所にゼロを含む(単純にするためにすべてのゼロは示されていない)。例えば行s0 1012Aは、スキャンビンs0 1010Aの84%が単位b0 1002Aによってカバーされるので、第1列1022Aに0.84を含み、スキャンサンプルビンs0 1010Aの16%が単位b1 1002Bによってカバーされるので、第2列1022Bに0.16を含む。行s1 1012Bは、スキャンサンプルビンs1 910Bのすべてが単位b1 1002Bによってカバーされるので、第2列1022Bに1.0を含む。
【0086】
一部の実施形態では、
図4~
図9に示されるように、多値幅シンボル体系はモジュール単位を使用する。単位幅パターン(例えばしたがって単位格子)はすべての可能なエレメント幅パターンに対して同じであり得るため、明白なモジュールサイズが一定であるシンボルの特定のセクションに対して1つの単位サンプリング係数マトリックスであることができる(例えば1文字、複数の文字又はバーコード全体)。このようなバーコードのセクションのデコードは、例えば実際の単位エンコードパターン(例えばモジュール値)に対する連立線形方程式を解き、次にそれをエレメント幅パターンに変換し、最終的にその関連する英数字値に変換することによって実行できる。一部の実施形態では、以下でさらに説明する多値幅シンボル体系のエレメントを使用することによってデコードを行うことができる。
【0087】
図11は、一部の実施形態による、バーコードをデコードするための一般的な画像ベースのデコードアルゴリズムの例示的なコンピュータ化された方法1100を示す。ステップ1102で、バーコードリーダは(例えばコンベヤーベルトに載った物品上のバーコードの)取得された画像内のバーコード候補領域の位置を特定する。ステップ1104で、バーコードリーダは、次のバーコード候補領域を選択する。例えば次の候補領域は最もバー状の特徴を持つ領域である。バーコードリーダは、この候補に対して統合された文字列を初期化できる。ステップ1106で、バーコードリーダは、候補領域を通るスキャンのセットから次のスキャンを選択する(例えば
図4のスキャン404)。スキャンは、例えば他のスキャンとほぼ平行で、バーコード候補の一方の端からもう一方の端まで延びる線分であることができる。バーコードリーダは、異なる順序を使用してスキャンを選択できる。例えばバーコードリーダは、上から下へ、中央から外側へなどの順序で次のスキャンを選択できる。
【0088】
ステップ1108で、バーコードリーダは、投影を使用することなどにより、スキャン信号(例えばスキャン信号406)を取得する。ステップ1110で、バーコードリーダはスキャン信号からバーコードをデコードする。デコードプロセスは、さらに
図13に関連して説明される。ステップ1112で、バーコードリーダはスキャン文字列を統合する。例えばバーコードリーダは、スキャンからデコードされた文字列(文字スコアを含む)を、この候補スキャンに対してこれまでの統合された文字列と組み合わせることができる。ステップ1114で、バーコードリーダはバーコードが確実にデコードされたかどうかを(例えば信頼度閾値に基づいて)判定する。バーコードが確実にデコードされないとバーコードリーダが判定した場合、バーコードリーダはステップ1106に戻り、次の選択されたスキャン(残っている場合)でステップ1108から1112までを実行する。追加の候補領域が残っている場合、方法1100はステップ1104に戻る。完了したら、方法1100はバーコード文字列を報告する。バーコード文字列は、確実にデコードされなかったバーコード、部分的にデコードされたバーコードなどを含むことがある。
【0089】
図12は、一部の実施形態による、バーコードをデコードするためのレーザスキャナデコードアルゴリズムの例示的なコンピュータ化された方法1200を示す。ステップ1202で、レーザスキャナはアナログ反射信号を取得する。アナログ反射信号は、レーザと検出器によって測定された、バーコード全体にわたる線形スキャンに沿ったバーコードの反射率である。ステップ1204で、レーザスキャナは(例えば一時的なサンプリングにより個別のデジタルスキャン信号を抽出することにより)反射信号をサンプリングする。ステップ1206で、レーザスキャナはスキャン信号からバーコードをデコードする。デコードプロセスは、さらに
図13に関連して説明される。ステップ1208で、レーザスキャナはスキャン文字列を統合する。ステップ1210で、レーザスキャナはバーコードが確実にデコードされたかどうかを判定する。バーコードが確実にデコードされないとレーザスキャナが判定した場合、レーザスキャナはステップ1202に戻り、新しいアナログ反射信号を取得する。そうでない場合は、方法1200はステップ1212に進み、統合された文字列を報告する。
【0090】
図13A-Bは、一部の実施形態による、スキャン信号からバーコードをデコードするための例示的なコンピュータ化された方法1300を示す。ステップ1302で、バーコードリーダはスキャン信号内のエッジ(例えばエレメント間の遷移の1D位置)を検出する。当業者は、微分ピーク、二次微分ゼロ交差、ピーク/谷遷移(ANSIエッジ)、及び/又はその他のエッジ検出方法を使用するなど、様々な技術を用いてエッジを検出できることを理解できる。ステップ1304で、バーコードリーダはエッジをフィルタリングする。例えばバーコードリーダは(例えばコントラストに基づいて)偽エッジを除外し、及び/又は最小特徴サイズが分かっている場合は欠けているエッジを追加できる。ステップ1306で、バーコードリーダは第1の区切り文字の位置を特定してデコードする。一部の実施形態では、バーコードリーダはスキャンに沿って逆方向に区切り文字の位置を特定してデコードすることができる(例えばスキャン信号を逆にすることにより)。
【0091】
ステップ1308で、バーコードリーダは次の文字位置に進む。例えばバーコードリーダは、現在の文字の測定された文字の長さ(例えばステップ1306の開始時に区切り文字パターンになる)に加えて、測定された整数文字ギャップを追加して、現在の文字の開始位置を決定できる。現在の文字が適切にデコードされなかった場合(例えば信頼範囲内にない場合)、バーコードリーダは文字サイズの推定値を使用できる。ステップ1310で、バーコードリーダは文字単位格子を推定する。一部の実施形態では、文字単位格子は、開始位置(例えば位相)、最小特徴サイズ(例えばX)、細太比(該当する場合)、及び文字間ギャップを含む。一部の実施形態では、バーコードリーダは、以前にデコードされた文字の最後に測定された統計を使用して、後でデコードできなかった文字の数を考慮するように構成できる。一部の実施形態では、第1のエッジ距離を使用して、区切り文字を超える第1の文字に対する文字間ギャップを測定することができる。
【0092】
ステップ1312で、バーコードリーダはエッジを使用して文字をデコードする。当業者は、これが当業界で知られている技術を用いて、例えばエッジから類似エッジまでの距離を測定すること、エッジから類似エッジまでの距離を分類すること(例えばX又はWの最も近い整数倍までの各エッジ距離を丸めることを含む)、文字値を検索すること、及び文字格子(例えば位置、最小特徴サイズ、エレメント幅を含む)とスコアを更新する(例えばXの最も近い整数倍からの分数差を使用するなどして、いかによくエッジが一致しているかを更新する)ことによって実行できることを理解できる。ステップ1314で、バーコードリーダは最後の区切り文字がデコードされたか、又はシンボル体系の文字の最大数を超えたか判定する。答が「いいえ」の場合は、方法はステップ1308に戻る。答が「はい」の場合は、方法は
図13Bのステップ1320に進む。ステップ1320で、バーコードリーダはすべての文字が首尾よくデコードされたかどうかを判定する。答が「はい」の場合は、方法1300はステップ1322に進み、統合された文字列を報告する。答が「いいえ」の場合は、方法1300はステップ1324に進み、確実にデコードされなかった文字を除外する。例えばバーコードリーダは誤読を防ぐように構成できる。バーコードリーダは潜在的な誤読を検出するために高い信頼度閾値で設定することができる(例えばそのような文字がデコードされないとマークされる)。例えばそのような文字は、(例えば文字単位格子の推定値の誤差及び/又はエッジ欠落及び/又は余分なエッジのため)デコードされなかった文字の先行文字を含むことがある。
【0093】
ステップ1326で、バーコードリーダは次のデコードされていない文字に進む。例えばバーコードリーダは文字列の先頭から開始して、次のデコードされていない文字に進むことができる。ステップ1328で、バーコードリーダは文字単位格子を推定する。ステップ1330で、バーコードリーダはスキャン信号から文字をデコードする。文字がデコードされない場合、方法はステップ1326に戻る。文字がデコードされている場合、方法はステップ1334に進み、文字単位格子を精緻化する。一部の実施形態では、ステップ1334は任意選択である。バーコードリーダは、文字単位格子測定値の各々に小さい摂動を検索して、デコードされた文字のスコアがどのように変化するかを評価できる。バーコードリーダは最良のスコアをもたらす文字単位格子を選択することができ、それによって修正された開始位置、文字間ギャップ(該当する場合)、最小特徴サイズ、及び/又は細太比(該当する場合)を決定する。デコードされていない文字が残っている場合、方法はステップ1326に進む。そうでない場合は、方法はステップ1322に進み、統合された文字列を報告する。
【0094】
ステップ1330を参照して、別個の文字をデコードすると、例えば遠近法効果、及び/又は湾曲した物体の周りのシンボルの非線形ワーピングによって引き起こされるものなど、スキャンに沿った位置の関数として変化するスキャンサンプリングピッチに対処することができる。したがってバーコードリーダは、文字の比較的狭い位置範囲で一定のスキャンサンプリングピッチを使用するように構成できる。例えばスキャンサンプルピッチ単位で測定された単一の最小特徴サイズと太いバー幅(該当する場合)を使用して、文字の単位格子を記述することができる。有利なことに、文字を使用すると、バーコードリーダは各単位エンコードパターンのすべての可能な組み合わせ(例えば多値幅コード128に対して103通りの組み合わせ)を調べて、結果として予想された(例えば予測された)正規化されたスキャンサンプルAb(これは測定された正規化されたスキャンサンプルsの部分に最も近い一致である)になる単位エンコードパターンを選択することにより、各文字単位エンコードパターンを解くことが可能になる。
【0095】
一部の実施形態では、バーコードリーダは、標準線形代数技術を使用して直接単位エンコードパターンを解くように構成できる(例えば標準最小2乗式b=(ATA)-1s法を使用する。これはAb-sのユークリッド長さを最小化するであろう)。Aはモジュールサイズが1.0に近づくと数値的に不安定になり、1.0未満では特異になる。したがってこの技術を用いて解を安定させることができる。例えば制約最小化を使用して(例えばラグランジュ乗数を使用して他の線形制約を組み込む)解を安定させることができる。別の例として、擬似逆(例えばb=A+s)を使用して解を安定させることができる。解はその他の多数の方法のいずれか、例えば解を数学的にバイナリベクトルに制限することによって制約できる。しかしながら一部の制約は、容易若しくは効率的に解けない非線形方程式のセットになることがあり、他の制約ほど有益ではない場合がある。
【0096】
文字ごとの技術を使用して、2値幅バーコードをデコードし及び/又は多値幅文字をデコードできる(単位エレメントを使用する場合など)。したがってバーコードリーダは、交互するバーとスペースを表すバイナリ単位エンコードパターンベクトルを乗算した場合に(すべての可能な文字に対して同様)最良のスコア(例えば本質的にサンプルスキャンと最も良く一致するもの)になる単位サンプリング係数マトリックス(及び関連するエレメント幅パターンと文字値など)を識別することにより、バーコード文字をデコードするように構成できる)。
【0097】
一部の実施形態で、バーコードリーダは最も良く一致する文字を見つけるプロセスの前及び/又は最中にスキャン信号包絡線ベクトル1及びHを決定する(その結果、例えば測定及び予測(予想)されたスキャン信号値を直接比較できるようになる)。一部の実施形態において、バーコードリーダは、(例えば計算を容易にするために)スキャン信号包絡線が単一の文字にわたって一定であると仮定するように構成される。例えばバーコードリーダはベクトルではなく、1組の包絡線値l及びhを使用できる。例えばこのような構成を使用すると、基本的にバーコードの基礎となる照明が単一の文字の過程であまり変化しないと仮定することができる。
【0098】
一部の実施形態において、バーコードリーダは、信号包絡線が以前にデコードされた文字の包絡線とあまり変わらないと仮定するように構成できる。デコードした後、バーコードリーダは、デコードされた文字の幅の太いバー内の最小及び最大信号値を測定することによって包絡線を精緻化できる。一部の実施形態では、バーコードリーダは、マッチングプロセスの一部として可能性のある各文字について直接包絡線パラメータl及びhを決定することができる。例えばバーコードリーダは、予想されるAbを実際に測定された生信号rに直接一致させるように構成できる(例えば任意の均一なスケールと単一のオフセットを許可することにより)。一部の実施形態では、バーコードリーダは、合計i(ar(i)+c-s(i))2を最小化するスカラa及びcの値を選択するように構成することができる(例えばiの全n、ここでnはスキャン信号の部分の長さである)。次に関係a=(SB)/(hl)及びc=B-alを用いて、h及びlを決定でき、以下を得る:
l=(DB-vc)/va
h=l+D(SB)/va 式3及び4
ここで、
・va=m2y2-ny1
・vc=m2y1-m1y2
・D=m2
2-nm1
・m1=sum(r(i)2)
・m2=sum(r(i))
・y1=sum(s(i)r(i))
・y2=sum(s(i))
【0099】
一部の実施形態では、バーコードリーダは計算されたl及びhを、これらの数字に対して予想される範囲に照らして(例えば近くの文字に基づいて)検証するように構成でき、その結果としてバーコードリーダはbに対応する文字をさらに考慮する必要があるかどうかを判定できる。
【0100】
図14A-Cは、一部の実施形態による、バーコードをデコードするための第1の区切り文字の位置を特定してデコードするための例示的なコンピュータ化された方法1400を示す。ステップ1402で、バーコードリーダは、可能な区切り文字開始点を識別する。例えばバーコードリーダは各エッジを可能な開始位置と見なすことができ、そこではエッジの極性(明るい色の上に暗い色又は暗い色の上に明るい色)がバーコードの極性(明るいオンダーク又は暗いライト、オンライト)を決定する。別の例として、バーコードリーダは妥当なクワイエットゾーンを持つエッジのみを考慮することができる(例えば先行のスキャン信号内に後続エッジ距離に相当する距離に重要な特徴(エッジなど)がない)。
【0101】
ステップ1404で、バーコードリーダは、残りの識別された可能な区切り文字開始点の間から次の可能な区切り文字開始を選択する。ステップ1406で、バーコードリーダはエッジを使用して文字をデコードする。ステップ1408で、方法1400は、区切り文字がデコードされたかどうかを判定する。答が「はい」の場合、方法は
図14Cのステップ1446に進む。ステップ1410で、バーコードリーダは可能な区切り文字を識別する。例えば一部のシンボル体系は複数の開始パターン又は停止パターンを持つ。上述の一部の実施形態において、デコード操作が逆方向で発生する可能性があるため、停止パターンはスキャン信号に沿って逆方向で検出することができる。ステップ1412で、バーコードリーダは次の可能な区切り文字を選択する。
【0102】
ステップ1414で、バーコードリーダは、可能な大まかな文字単位格子を推定する。例えばバーコードリーダは、バーコードの終わりの信号の部分から、可能な最小特徴サイズと細太比(該当する場合)を推定できる。例えばバーコードリーダは印刷太りがほぼ0であり、文字間ギャップ(該当する場合)は1Xであると推定できる。他の推定は、例えば信号が解像度不足であるために一部のエッジが欠落している可能性があると仮定して、パターンエッジ対応を開始する可能な測定されたエッジを識別して、最小2乗適合を実行することによって行うことができる。最良適合を有する(例えば誤差閾値を超える)対応が選択され、最良適合文字格子に関連付けられる。一部の実施形態では、この推定は代替的に、2値幅シンボル体系について太エレメントの中心の位置を特定して、同様の対応操作を実行することにより、エッジなしで達成することができる。
【0103】
ステップ1416で、バーコードリーダは次の大まかな文字単位格子を選択し、方法はステップ1420に進む。ステップ1420で、バーコードリーダは次の文字単位格子摂動を選択する。例えばバーコードリーダは、推定値とは異なるが、推定された最大誤差内にある文字単位格子を選択できる。一部の実施形態では、バーコードリーダは1つのパラメータ(例えば最小特徴サイズなど)を小さいステップで変えることができる。ステップ1422で、バーコードリーダは、単位サンプリング係数マトリックスを計算するが、これは
図15でさらに説明される。ステップ1424で、バーコードリーダは単位サンプリング係数マトリックスから文字をスコアリングするが、これは
図16でさらに説明される。スコアが十分である(例えば所定の閾値よりも良い)とバーコードリーダが判定した場合、バーコードリーダはその文字に対するスコアと、関連する文字単位格子を記録できる。
【0104】
ステップ1426で、バーコードリーダは、格子摂動が残っているかどうかを判定する。格子摂動が残っている場合、バーコードリーダはステップ1420に進む。答が「いいえ」の場合、方法はステップ1428に進み、粗い文字格子が残っているかどうかを判定する。文字格子が残っている場合、方法は
図14Aのステップ1416に進む。文字格子が残っていない場合、方法はステップ1430に進み、可能な区切り文字が残っているかどうかを判定する。可能な区切り文字が残っている場合、方法は
図14Aのステップ1412に進む。
【0105】
可能な区切り文字が残っていない場合、方法は
図14Cのステップ1440に進む。ステップ1440で、バーコードリーダは、最も良く一致する文字をスコアリングする。例えばバーコードリーダは最良のスコアを持つ文字/格子の組み合わせを選択できる。ステップ1442で、バーコードリーダは最良の文字スコアが十分であるかどうかを判定する。例えば最も良く一致する文字スコアが十分でない場合、又は次に最も良い可能な文字スコアを信頼度閾値以上に下回る場合、バーコードリーダは区切り文字を見つけられなかったと判定できる。最良の文字スコアが十分である場合、バーコードリーダはステップ1446に進む。最良の文字スコアが十分でない場合、バーコードリーダはステップ1444に進み、可能な区切り文字開始位置が残っているかどうかを判定する。可能な区切り文字開始位置が残っている場合、方法は
図14Aのステップ1404に進む。ここで可能な区切り文字開始位置が残っていない場合、方法はステップ1446に進み、(任意選択で)文字格子を精緻化する。例えばバーコードリーダは各文字格子測定値の小さい摂動を検索して、デコードされた文字についてスコアがどのように変化するかを評価できる。一部の実施形態において、バーコードリーダは、最良のスコアをもたらす文字格子を選択し、それにより修正された開始位置、文字間ギャップ(該当する場合)、最小特徴サイズ、及び/又は細太比(該当する場合)を決定する。
【0106】
図15は、一部の実施形態による、バーコードをデコードするための単位サンプリング係数を決定するための例示的なコンピュータ化された方法1500を示す。ステップ1502で、バーコードリーダは単位サンプリング係数を初期化する。単位サンプリング係数マトリックスのサイズはnxmでありここでnは実際の1D信号値の数であり、mはモジュールの数(例えば多値幅シンボルの場合)又は文字内のエレメント(例えば2値幅シンボル、又はエレメント単位を使用する多値幅の場合)の数プラス2(例えば文字の前と後のエレメント又は文字間ギャップを表す)である。バーコードリーダは、すべての値を0に初期化する。好ましい実施形態では、係数マトリックスは、疎なマトリックス表現を使用して表示される。
【0107】
ステップ1504で、バーコードリーダはサンプル範囲を決定する。例えばバーコードリーダは、文字内にある中心(例えば1つの文字モジュール又はエレメント内の中心であって、先行又は後続のエレメント又は文字間ギャップではない)を持つ最初と最後のサンプルを決定することができる。ステップ1506で、バーコードリーダは範囲内の次のスキャンサンプルに進む。例えばまだ考慮されていない場合、これは範囲内の最初のサンプルである。上記のように、サンプルは同じインデックスを持つ係数マトリックスの行に対応できる。サンプルは通常、ビンに関連付けられており、これは情報を統合すると推定されるスキャンラインの位置範囲である。サンプルビンは、サンプル位置を中心にしてその周りに配置することができ、サンプル間隔に等しい幅を持つことができる。
【0108】
ステップ1508で、バーコードリーダは、文字単位のオーバーラップを決定する。例えばバーコードリーダは文字単位格子を使用して、各文字単位でオーバーラップするサンプルビンのパーセンテージを計算する(例えば印刷太りgを考慮に入れる)。多値幅シンボル体系の場合、バーコードリーダはモジュールに等しい単位を使用できる。2値幅シンボル体系の場合、バーコードリーダはエレメントに等しい単位を使用できる。バーコードリーダはこれらの値を、サンプルに関連付けられた係数マトリックスの行全体にわたり順番に記録できる。一部の実施形態では、X-g>0.5サンプルピッチの場合、1行あたりせいぜい3個のゼロでないパーセンテージが存在する可能性があり、オーバーラップはサンプルjに最も近いモジュールiを特定して、係数マトリックスAを次式によって特定することによって決定できる:
q(i)=(w(i)-1)/2 (式5-8)
A(j,i-1)=max(+d(i,j)-q(i)+g/2,0)
A(j,i+1)=max(-d(i,j)-q(i)+g/2,0)
A(j,i)=1-A(j,i-1)-A(j,i+1)
ここで、
w(i)はエレメントiの幅である(例えば細エレメント又はモジュールの場合はX、太エレメントの場合はW)
d(i、j)は、単位iの中心とサンプルjの中心との間の符号付きの差である(例えばすべての位置はサンプル座標の実数値である)。
【0109】
ステップ1510で、バーコードリーダは範囲内にスキャンサンプルが残っているかどうかを判定する。範囲内にスキャンサンプルが残っている場合、方法はステップ1506に進む。範囲内にもはやスキャンサンプルが残っていない場合、方法はステップ1512に進んで終了する。
【0110】
一部の実施形態では、バーコードリーダは、誤差の関数e=s-Abを使用して文字に対するスコアを決定するように構成されている。この関数の例は、2乗誤差の合計、絶対誤差の合計、最大誤差及び/又は同種のものを含む。一部の実施形態では、誤差は係数マトリックスを通して「逆伝搬」されて、元の文字単位(モジュール又はエレメント)の誤差を計算する。逆伝搬は、次式に従って単位誤差ベクトルe(b)を計算することによって達成できる。
e(b)=ATe' 式9
ここで、
・e(b)は単位誤差ベクトルである。
・e'は、e'(i)=|e(i)|によって定義される絶対信号誤差のベクトルである。
【0111】
パターンbに対する全体誤差は、例えば2乗単位誤差の合計、単位誤差の合計、最大単位誤差及び/又は同種のものを使用して計算できる。一部の実施形態では、2乗単位誤差の合計がデータ文字に使用される(例えばたった1つの単位が正しくない場合でもコストのかかる誤読を招くことあるため)。一部の実施形態において、単位誤差の合計は区切り文字に対して使用される(例えば誤読はそれほど有害ではないが、区切り文字が欠落するとシンボルをデコードしようとさえしない場合)。
【0112】
図16は、一部の実施形態による、バーコードをデコードするためにスキャン信号から文字をスコアリングするための例示的なコンピュータ化された方法1600を示す。ステップ1602で、バーコードリーダは文字単位パターンを作成する。例えば一部の実施形態では、バーコードリーダは、文字に関連付けられたバイナリ単位エンコーダパターンを識別する。例えば多値幅文字の場合、単位エンコードパターンは、文字エレメント幅パターンから導出されたバー又はスペースの一部であることができるモジュールのパターンである。例えば2値幅文字の場合、単位エンコードパターンは、常に適当な値(バー又はスペース)で始まり、バー値とスペース値が交互する配列であるエレメント値のパターンである。
【0113】
ステップ1604で、バーコードリーダは単位サンプリング係数の乗算を実行する。例えばバーコードリーダは、単位サンプリング係数マトリックスに単位エンコードパターンを乗算して、予測(又は予想)された信号ベクトルを取得できる。ステップ1606で、バーコードリーダは予測信号と測定信号を比較することができる。一部の実施形態では、比較の結果として予測信号が測定信号とどれだけ良く一致するかを示す1つ以上の文字スコアを生成するように、バーコードリーダを構成することができる。これは、前述のように様々な方法で実現できる。一部の実施形態では、バーコードリーダは、実際の信号をローカル信号包絡線(例えば信号内のバーとスペースの見かけの反射率に対応する最小及び最大信号範囲)で正規化した後に2つの値を減算できる。
【0114】
図17は、一部の実施形態による、バーコードをデコードするためのマルチレベルバーコードのスキャン信号から文字をデコードするための例示的なコンピュータ化された方法1700を示す。ステップ1702を参照すると、バーコードリーダは、例えば
図17で説明したように単位サンプリング係数を決定する。ステップ1704で、バーコードリーダは可能なデータ文字を識別する。例えばコード128など一部のコードでは、すべてのデータ文字が可能であろう。UPC-EANなど他のコードでは、適当なサブグループ(A、B、又はC)の文字のみ可能であろう。ステップ1706で、バーコードリーダは次の可能なデータ文字を選択する。ステップ1708で、バーコードリーダは単位サンプリング係数を使用して文字をスコアリングする。
【0115】
ステップ1710で、バーコードリーダはスコアが十分に高いかどうかを判定する。スコアが十分に高くない場合、方法はステップ1706に進む。スコアが十分に高い場合、バーコードリーダはステップ1712に進み、文字とスコアを記録する。ステップ1714で、バーコードリーダは、可能なデータ文字が残っているかどうかを判定する。可能なデータ文字が残っている場合、バーコードリーダはステップ1706に進む。データ文字が残っている可能性がない場合、バーコードリーダはステップ1716に進み、バーコードリーダは最良のスコアが2番目に良いスコア(ある場合)より少なくとも信頼度閾値だけ優れているかどうかを判定する。バーコードリーダが最良の文字を識別したと確信すると、バーコードリーダはステップ1720に進み、最良の文字とスコアを記録する。バーコードリーダが確信しない場合、文字はデコードされない。
【0116】
図18は、一部の実施形態による、バーコードをデコードするための2レベル又はマルチレベルバーコードのスキャン信号から文字をデコードするための例示的なコンピュータ化された方法1800を示す。ステップ1802で、方法は可能なデータ文字を識別する。例えばコード39など一部のコードでは、すべてのデータ文字が可能であろう。コーダバーなど他のコードでは、適当な長さの文字のみが可能である。ステップ1804で、方法は次の可能なデータ文字を選択する。ステップ1806で、方法は、(例えば
図15に関連して説明したように)単位サンプリング係数を決定する。ステップ1808で、方法は(例えば
図16に関連して説明したように)単位サンプリング係数を使用して文字をスコアリングする。
【0117】
ステップ1810で、バーコードリーダはスコアが所定の閾値を超えているかどうかを判定する。スコアが所定の閾値を超えていない場合、方法はステップ1804に戻る。スコアが所定の閾値を超えている場合、方法はステップ1812に進み、文字とスコアを記録する。ステップ1814で、方法は、可能なデータ文字が残っているかどうかを判定する。可能なデータ文字が残っている場合、方法はステップ1804に進む。可能なデータ文字が残っていない場合、方法はステップ1816に進む。ステップ1816で、バーコードリーダは最良のスコアが2番目に良いスコア(ある場合)よりも少なくとも信頼度閾値だけ優れているかどうかを判定する。バーコードリーダが最良の文字を識別したと確信すると、バーコードリーダはステップ1720に進み、最良の文字とスコアを記録する。バーコードリーダが確信しない場合、文字はデコードされず、方法はステップ1818で終了する。
【0118】
様々な2Dシンボル体系を用いて、上述したようにデータマトリックス、QRコード(登録商標)、アズテックコード、マキシコード、ベリコード及び他の2Dシンボルなどの情報をエンコードすることができる。
図19Aは一部の実施形態による、例示的なデータマトリックス2Dシンボル1900を示している。最も左の列1902と最も下の行1904はデータマトリックス「L」を形成しており、これはすべてのデータマトリックスシンボルに対して存在し、画像内にデータマトリックスシンボルの位置を特定して、その向きを判定するために使用される。データマトリックスシンボル1900は、シンボルの情報をエンコードするために使用されるモジュールのセット(例えば黒いモジュール1906や白いモジュール1908のような黒と白のモジュール)で構成されている。
図19Bは、幾つかの例に従い、例示的なQRコードシンボル1950を示している。データマトリックスシンボル1900における「L」パターンの代わりに、QRコードシンボル1950は、3個のブルズアイ(牡牛の目)1952、1954及び1956を含んでおり、これらは画像内にQRコードシンボル1950の位置を特定して、その向きを判定するために使用される。データマトリックスシンボル1900と同様に、QRコードシンボル1950は、黒いモジュール1958と白いモジュール1960のようなシンボルの情報をエンコードするために使用される。
【0119】
コード128、コード93、UPC-EAN、PDF417、マイクロPDF、データバー、その他のシンボルなど、様々な多値幅1Dシンボルを使用して情報をエンコードできる。上述のように、
図2は、モジュール202A~202Eのセットを有する、多値幅シンボル体系コード128を使用して生成された例示的なバーコード200を示す。
【0120】
上記のように、撮像アプリケーションがサンプリング不足やぼやけなどの解像度不足のシンボルを取得する理由は幾つかある。例えば一部の撮像アプリケーションは、コンベアベルトに沿って移動する物体を撮像するために取り付けられたセンサを使用する。このようなセンサは、より大きい視野(FOV)を実現するためにコンベヤーベルト(及びコンベヤーベルトによって運ばれる物体)から十分に離れた位置に取り付けることができる。しかしながらより大きいFOVを実現するための代償は、物体及び/又は物体上のシンボルの解像度の低下であり、その結果として物体及びシンボルの画像が不十分になる。別の例として、シンボルは物体の底側に向かって位置が特定されることができるが、その結果コードはセンサなどからさらに離れ、やはりシンボルの解像度が不足した画像をもたらすことにつながる。したがって技術を使用して、解像度不足の1D及び2Dシンボルをデコードすることが望ましい場合がある。
【0121】
解像度不足の1Dシンボルをデコードする技術がある。1Dシンボルの場合、この技術はシンボルの文字の態様を活用できる。また、2Dシンボルと比較して、1Dシンボル文字に対する値の可能性は著しく少ないので、1D技術は可能性のある有効な値の組み合わせをすべて試してシンボルをデコードできる。例えば128コードバーコードの場合、103個の標準文字パターンがあるため、この限られたセットのパターンを前提として一部の1D技術は本質的にすべての文字パターンを試すだけである。例えば本明細書で説明された技術は解像度不足の1Dシンボルのデコードを提供する。
【0122】
1Dシンボルとは異なり、モジュール値のすべての可能な組み合わせを単純に試すだけでは、未知のモジュール値を決定することはしばしば実行可能ではない。例えば2Dシンボル(2n、ここでnはシンボル内のモジュールの数)に対してすべての可能なバイナリ2Dパターンを列挙して評価することは、しばしば非現実的であり、結果を現実的な時間枠内で生み出すことはできない。可能性のあるすべてのバイナリ2Dパターンを片っ端から試すことも、モジュール誤差に対する感受性が低い。なぜなら1個のモジュールはパターン全体の非常に小さいパーセンテージであり、それゆえ全体的な誤差に及ぼす効果は、シンボルの特定された位置の不正確さに起因する誤差の効果に比べて小さいからである。別の例として、1Dシンボルに対するすべての可能な多値幅パターンを列挙して評価することは、個々の文字を個別に考慮することなく同様に非実用的である。
【0123】
本明細書に記載される技術は、
図19A-19Bに示される2Dバーコード、及び
図2に示される多値幅バーコードなどのシンボルの解像度不足の画像のデコードを提供する。本明細書でさらに説明するように、技術は、シンボルの画像内の既知のピクセル値と未知の(黒又は白の)モジュール値との間に数学的関係を確立することを含んでよい。例えば幾つかの非限定的な実施形態では、線形方程式の制約不足のセットは、疎なサンプリングマトリックスとして表現できる。サンプリングマトリックスの各係数エレメント(i、j)は、画像内のi番目のピクセルとシンボル内のj番目のモジュールとの間のオーバーラップ率の推定値であることができる。この技術は、モジュールがオーバーラップするピクセルに対する係数と値を分析して、モジュールの可能性を論理的に推測し、及び/又は反復的な方法でモジュール値を満たすことを含む。2Dシンボルモジュールを反復的に考慮すると、全体的な可能性の数をすばやく減らすことができ(例えば2n未満)、未知の2Dモジュール値の決定が実行可能になる。
【0124】
図20は、一部の実施形態による、解像度不足のシンボルをデコードするための例示的なコンピュータ化された方法2000を示す。ステップ2002で、画像処理装置はシンボルの部分のデジタル画像を受け取る。画像処理装置は、バーコードリーダ、バーコードリーダに連結された外部コンピューティングデバイス、及び/又は本明細書で論じる技術を実行するように構成された他の何らかのコンピューティングデバイスであってよい。ステップ2004で、画像処理装置は、モジュールの格子内のモジュールの連続サブセットとピクセルの格子との間の空間マッピングを決定する。ステップ2006で、画像処理装置は空間マッピングを用いて、モジュールの連続サブセット内の各モジュールとピクセルの格子との間の因果関係を決定する。各因果関係は、モジュールの値がピクセルの格子内のピクセルのサブセットの値の各々に与える影響の程度を表すことができる。ステップ2008で、画像処理装置は因果関係を用いて、モジュールの連続サブセット内で隣接する2個以上のモジュールの値の有効な組み合わせのセットをピクセルの格子に照らしてテストする。ステップ2010で、画像処理装置は2個以上の隣接するモジュールの少なくとも1個のモジュールの値を、テストされた有効な組み合わせのセットに基づいて決定する。ステップ2012では、画像処理装置は、少なくとも1個のモジュールの決定された値に基づいてシンボルをデコードする。
【0125】
ステップ2002を参照すると、バーコードリーダなどのシンボルリーダは、自動的にシンボルをデコードする装置である。シンボルリーダは、カメラの光学系や撮像センサ(CCDアレイなど)を使用するなどして、バーコードの離散画像を取得する画像ベースのシンボルリーダを含む。結果の画像は、バーコード全体の1D又は2Dサンプリングである。その画像の各画像サンプル又はピクセル自体が、バーコードの小さい領域の平均反射率の測定値である。
【0126】
図21-25Bは、本明細書に開示される技術を2次元バーコード適用した例示的な例として用いられる。
図21は、一部の実施形態による、2Dシンボルの例示的な画像2100を示す。画像2100は、各ピクセルの暗さを示す関連したピクセル値を有するピクセルのセット(例えばピクセル2102及び2104)を含む。各画像は、8ビット値に対して0~255など所定の輝度範囲内の値を持つことができるピクセル値のセットを有してよい。グレースケール画像などの幾つかの例では、0は黒を表し、255は白を表わすことができる。かしながら、実際には撮像システムは、色の全範囲を達成できないことがあり、その結果として範囲は、通常は画像内のピクセルに許容される値よりも制限されることがある。
【0127】
一部の実施形態では、この技術は、画像信号の包絡線を使用してシンボルをデコードする。包絡線には、画像全体の信号の最大及び最小ピクセル値を含む。包絡線の最大値は、画像の白を示し(しかし例えば画像に許容される理論上の最大値に必ずしも対応しない)、最小値は画像の黒を示す(しかし例えば画像に許容される理論上の最大値に必ずしも対応しない)。したがってピクセル値を局所的前景(暗い)と局所的背景(明るい)の間でマッピングして、0~1の範囲のピクセル値を生成できる。こうしてシステムは画像の特定の包絡線によって信号値を正規化して、ピクセルが特定のアプリケーションに対してどれだけ「黒い」か「白い」かの尺度を決定できる。例えば画像内のシンボルは、照明の角度による勾配を持つことがあり、この場合シンボルの片側は均一なグレーであるが、もう片側は黒になる。信号包絡線を決定すると、例えば画像の様々な部分間の照明の差、影及び/又は同種のものを正規化できる。信号包絡線は、例えば本明細書で説明するものと同様の方法で決定できるが、1D処理ではなく2D処理を使用する。別の例として、各ピクセルの周囲の局所的領域内でヒストグラムのテールを計算することにより、信号包絡線を決定できる。
【0128】
ステップ2004を参照すると、
図22Aは、一部の実施形態による、
図21からの画像2100の上部に重ね合わせた例示的なモジュールの格子を示している。この具体的な例では、モジュールの格子のピッチ(例えばモジュールサイズ)はピクセルの格子のピッチとほぼ同じであり、即ち解像度はモジュールあたり約1ピクセルである。しかしながら常にそうであるとは限らない。極端に低解像度の画像では、モジュールのピッチがピクセルの格子のピッチより著しく大きくなり、高解像度の画像では、モジュールの格子のピッチが画像格子のピッチよりもはるかに小さくなる。この技術は、最初に画像のピクセルの格子に関連するシンボルのモジュールの格子の位置を特定することを含む。2Dシンボルの場合、例えばシンボル上のファインダパターン(例えばデータマトリックスシンボルの「L」パターン、又はQRコードのブルズアイパターン)を使用して格子の位置を特定できる。
【0129】
画像処理装置は、2Dシンボルに対する1つ以上のモジュールの格子を格納でき、これらはシンボルに対するモジュールの2次元レイアウトを表す。画像処理装置は、画像2100に対してモジュールの格子2200の位置を特定して、モジュールの格子内のモジュールと画像内のピクセルの格子との間の空間マッピングを決定することができる。モジュールの格子2200と画像2100内のピクセルの格子との関係は、例えば各モジュールが画像2100内のピクセルとどれだけ多くオーバーラップしているかを反映することができる。
図22Aは、ピクセルの格子に重ねられたモジュール2200の2D格子を示すことにより、そのような関係を高レベルで示している。それゆえモジュールの格子2200と画像2100のピクセルの格子との関係は、各モジュールが各ピクセルにどの程度影響するかを反映することができる。ほとんどの影響はゼロになる(例えば特定のモジュールとオーバーラップしない画像内の大多数のピクセルで)。
【0130】
図22Bは、サンプリングマトリックス2270の部分例を示しており、これは一部の実施形態による、ピクセルの格子2250における各ピクセルが、モジュールの格子2260の例示的モジュール2262によってオーバーラップされるパーセンテージを示す。一部の実施形態では、特定のモジュールに対するパーセンテージがほぼモジュールサイズとなることができる。この例ではモジュールサイズは近似的に1であり、より近似的には0.9である。一部の実施形態では、特定のピクセルに対するすべてのモジュールにわたるパーセンテージを合計するとおよそ100%になることができる。図示されているように、モジュール2262はピクセルの格子2250で4個のピクセル、即ちピクセル2252、2254、2256及び2258がオーバーラップしている。サンプリングマトリックス部分2270はオーバーラップ率、即ち15%、20%、25%、30%を示しており、これらはモジュール2262がピクセル2252、2254、2256及び2258とそれぞれオーバーラップしていることを示す(即ちこれらのピクセルの各部分はモジュール2262によってカバーされている)。サンプリングマトリックス部分2270における残りの値は、モジュール2262がピクセルの格子2250における他のいずれのピクセルともオーバーラップしないため、0%である。簡単にするために、
図22Bは点線の矢印で示すように、ピクセルの格子2250とサンプリングマトリックス2270の一部のみを示している。一部の実施形態では、本明細書でさらに論じるように、画像全体を表す代わりに3×3サンプリングマトリックス及び/又は1×9サンプリングマトリックスなど小さいサンプリングマトリックスが使用される。このような小さいサンプリングマトリックスは、そのまま格納することも、大きいサンプリングマトリックスから導出することもできる。
【0131】
一部の実施形態において、モジュールの格子とピクセルの格子との間の関係は、1つ以上の位置特定技術を用いて決定できる。この技術は、例えば1モジュールあたりのピクセル数(PPM)に基づいて決定できる。例えば特定のPPM値又は範囲に対して特定の技術を使用でき、この技術は、1つの技術が画像内のシンボルの特定の特性を識別できるようになるまで(例えば個別に、順次に及び/又は同種のやり方で)実行できる。一部の実施形態では、PPMが知られていない場合がある。そのような場合に本明細書でさらに論じるように、1つ以上の技術を実行して、モジュールの格子の位置を特定してPPMを決定することができる。例えばPPMが最も高い画像で使用される技術を最初に試し、それから次に高いPPMに対する技術を試し、画像内でシンボルの位置と向きが決定されるまで試すことができる。
【0132】
以下の例では、異なるPPM範囲に対して使用される様々な技術について説明する。この例は、例示のみを目的とするもので、本明細書に記載する技術の精神から逸脱することなく、異なる範囲、範囲の数、値などを使用できる。この非限定的な例によれば、モジュールの格子の関係は特定のPPM(例えば2PPM)に至るまで、シンボル内の既知のパターンの位置を特定することによって決定できる。例えばデータマトリックスシンボルの場合、技術はシンボルの2つの側部に「L」パターンの位置を特定できる。「L」パターンの位置が特定されると、それらを通過する1Dスキャンに沿ってエッジを検出することによって、技術は他の2つの側部の各々にタイミングパターンを見出すことができる。そのような技術の一例は、データマトリックスシンボル体系のためのISO/IEC16022規格に記載されている参照コードアルゴリズムであり、その全体が参照により本明細書に組み込まれる。この例はデータマトリックスシンボル体系のためのものであるが、他のシンボル体系のデコードは、シンボル内の既知の特徴の位置を特定することにより、同様の方法で実行できることを理解されたい。例えばQRコードはブルズアイ部分の位置を特定することにより、同様の方法で決定できるが、このことはQRコードシンボル体系のためのISO/IEC18004規格の「QRコード2005の参照デコードアルゴリズム」セクションに規定されており、これは参照によりその全体が本明細書に組み込まれる。格子サイズは、参照デコードアルゴリズムに記載されたやり方で決定することもできる。
【0133】
低解像度(例えば2PPM~1.2PPM)では、この技術は既知のシンボルパターン(例えばデータマトリックスシンボルに対する「L」パターン)の位置を特定できないことがある。例えばシステムは、シンボルエッジなどシンボルのアスペクトがサンプリング不足のために既知のシンボルパターンの位置を特定できない場合がある。この技術は、シンボルの特徴の視認性を高めるために、最初にピクセル処理を実行して、画像のアップサンプリングなどのシンボル特徴を強化することができる。アップサンプリングは、例えばピクセル間の値を非線形的に補間することを含む。例えば多項式補間を使用できる。
【0134】
さらに低い解像度(例えば1.2PPM未満など)の場合、画像の劣化(エイリアス)が激しいため、例えばピクセル処理を行っても特定のシンボルの特徴を検出することはほぼ不可能な場合がある。例えばシステムは既知の特徴及び/又はタイミングパターンを検出できない場合がある。より高いPPMに関連する技術が失敗した場合、技術は(例えばサブピクセル精度で)シンボルの外側の長方形の位置を特定して、エッジを探すよりもグレースケールデジタル波形を用いて格子サイズを決定するように構成できる。例えばブロブ分析、一般化されたハフ変換などの視覚技術を使用して、2Dシンボルの境界(例えば
図19A及び
図19Bに示すような長方形)の位置を特定することができる。一部の実施形態において、使用される技術は特定の視覚システムの照明条件に依存してよい。例えばより堅牢な方法を使用できる。例えば一部の実施形態では、システムはエッジを検出し、エッジを輪郭別にまとめ、結果として生じるポリラインの頂点の数を減らして(例えばレーマー・ダグラス・ポイカー・アルゴリズムなどの技術を用いて)、結果として得られる画像形状を分析してほぼ90度の角度の4隅を持つ多角形を認識する。次に長方形の4辺に沿ったサブピクセルエッジの各グループに線を合わせることによって、長方形の4辺のサブピクセル位置を決定することができよう。
【0135】
一部の実施形態では、シンボルの格子サイズはシンボルをデコードする前に知られている。例えば格子サイズを固定し及び/又は格子サイズを以前の画像でトレーニングできる。例えばシステムは高解像度画像(例えば高PPMの画像)でトレーニングできる。実行時に、システムが非常に低解像度の画像から格子内の行数を簡単に判定できない場合でも、システムはシンボルがトレーニングされた格子と同じサイズを持つと仮定できる。
【0136】
格子サイズが知られていない場合、システムは自動的に各次元に沿って格子サイズを決定するように構成できる。例えば格子サイズは、1D投影を実行して長方形の反対側の2辺(例えば長方形の外側の境界から内側)をスキャンすることによって決定できる。一部の実施形態では、スキャンは例えば1Dバーコードがスキャンされるのとほぼ同じ方法で実行することができる。例えば1Dバーコードをスキャンするための技術は、上で説明されている。システムがタイミングパターンの開始位置と終了位置を決定すると、システムはそれらの間にある実用的な整数個のモジュールの各々に対応するすべてのタイミングパターンを簡単に試すことができる。この技術は、特定のPPM範囲など特定の状況でのみ使用できる。例えばPPMがPPMの上限(例えば上記の再試行で処理される1.2)を下回るPPMを有するコード、デコードできる実用的なPPMの下限(0.8など)を有するコードに使用できる。モジュールの最小数は、タイミングパターンの長さをPPMの上限で除算した整数に最も近い整数に基づいて決定できるが(例えば上記の例を続けると1.2)、最大値は長さを下限で除算して得られる(再び例えば0.8)。このような制約を使用すると、例えば試行する可能なパターンの数を最小限に抑えることができる。
【0137】
一部の実施形態では、可能なモジュールサイズパターンのどれが最適であるかを決定するために、システムは各タイミングパターンについてサンプリング係数マトリックスを決定し、そのサンプリング係数マトリックスを使用してスコアを決定するように構成できる。最も高いスコアのパターンは、シンボルの当該次元について正しいモジュールサイズに対応するように決定できる。そのような技術は、1Dバーコードシンボルの文字のデコードに関して上述されている。
【0138】
システムがモジュールの格子関係を決定すると、システムはシンボルの既知の構造に対応するモジュール値を設定できる。
図23は、一部の実施形態による、2Dシンボルの既知の構造値で埋められた
図22Aの例示的なモジュールの格子2200を示している。この例ではモジュールの格子2200の最も左の列2302はデータマトリックスシンボル体系の「L」の上部で埋められ、最下部の行2304は「L」の下部で埋められており、最も右の列2306と最も上の列2308はタイミングパターンで埋められている。この実施形態はデータマトリックスシンボル体系の既知の構造を投入するが、QRコードシンボル体系のブルズアイパターンなど、デコードされている他のシンボル体系の既知の構造を投入することも可能であることを理解されたい。
【0139】
既知の構造は、シンボルの向きに基づいてモジュールの格子に埋めることができる。一部の実施形態では、システムは格子の向きを学習して、例えば
図23に示されているように「L」が左下にあるかどうか、或いはそれはシンボルの右上などの異なる位置にあるかどうかなど判定することができる。一部の実施形態では、トレーニング中に向きを判定することができる。一部の実施形態では、他の技術を使用して、既知の特徴が画像内のどこにあるか(例えば「L」がシンボルの左下にあるかどうか)を判定することができる。例えばシステムが既に格子サイズを知っているがシンボルの向きを知らない場合に、システムが格子を識別すると技術を使用して向きを識別するように構成できる。一部の実施形態では、システムは格子位置の下のピクセルを上側、下側、左側、及び右側に沿って平均し、最も低いグレー値を有する平均をLパターンに対応させることができる。他の技術を用いて、シンボルの既知の特徴を識別して向きを判定することもできる。
【0140】
一部の実施形態では、既知の構造の幾つかは、同じ物理的シンボルから取得された以前の画像で高い信頼度で決定されたシンボルのデータモジュールであることができる。これらのモジュールは、高解像度の画像において決定されていることもあれば(例えばシンボルは時間と共にカメラから離れているため)、或いは低解像度画像において決定されていることもある(例えば本明細書に記載した1つ以上の技術を用いて)。低解像度については多くの場合にシンボルが何らかの形で首尾よくデコードされなかったが、特定のモジュールが高い確度で推定され、それらの高い確度で推定されたモジュールは現在の取得された画像ではピクセルの格子に対するモジュールの格子のずれが大きいため推定が難しいものである。
【0141】
ステップ2006を参照すると、画像処理装置はモジュールの格子内のモジュールと画像内のピクセルとの間で決定された因果関係を用いて、第1のセットのモジュールを推定できる(例えば関連するピクセルとのオーバーラップの程度が高いモジュール)。
図24は、一部の実施形態による、モジュールとピクセルとの間の関係に基づいて推定された例示的なモジュールの格子2200のモジュールを示す。
図24に示した推定は、モジュール2402などの推定された白のモジュールと、モジュール2404などの推定された黒のモジュールを含む。例えば画像処理装置は、非常に高度にオーバーラップする各モジュール、例えばサンプリング係数がオーバーラップ閾値を超えるモジュールを投入できる。例えばオーバーラップ閾値を90%(又はその他のパーセンテージ)に設定して、システムはモジュールの領域の90%が、すべて互いに90%以内の価値を有する1つ以上のピクセルのセットとオーバーラップしている場合にモジュールを設定するように構成できる。閾値は90%よりもはるかに小さくてもよい。例えばモジュールの値を決定するには、オーバーラップ率(例えばピクセルがモジュールによってオーバーラップされる割合)がわずか30%のモジュールで十分な場合がある。例えば格子の精度に応じて、これより低い閾値を使用できる。一般的な問題として、この技術は論理を用いて、モジュールは1つの値を持ち、このモジュールが実質的にオーバーラップするピクセルがその正反対に対応する値を持つ可能性は低いという事実を活用することができる。例えばピクセルと顕著にオーバーラップする黒のモジュールは、グレー又は黒の(しかし白ではない)ピクセル値になり、ピクセルと顕著にオーバーラップする白のモジュールは、グレー又は白(しかし黒ではない)ピクセル値になる。したがって、前景の(最も暗い)ピクセルとある程度オーバーラップするモジュールは黒に設定でき、背景の(最も明るい)ピクセルとある程度オーバーラップするモジュールは白に設定できる。
【0142】
このステップで推定されるモジュールは、前景に近い及び/又は背景に近いピクセルに関連付けることができる。したがって一部の実施形態では、ステップ2006で投入されたピクセルは、画像の均一な黒又は白の領域に関連付けられたモジュールであることができる。上述のように、ピクセルを「白」又は「黒」と呼ぶ場合、ピクセルが黒であるか白であるかの尺度は、画像の信号包絡線に関連して決定することができる。したがって一部の実施形態では、信号包絡線の最も暗いピクセルに関連付けられたすべての最も暗いモジュールが推定され、信号包絡線の最も明るいピクセルに関連付けられたすべての光モジュールが推定される。したがって、画像の信号包絡線を使用して、白と黒のピクセルの範囲を正規化して、信号包絡線の特定のピクセルの範囲を決定できる。
【0143】
ステップ2006をさらに参照すると、画像処理装置が知られているモジュールを利用して他の未知のモジュールを決定することができる。
図25A及び
図25Bは、一部の実施形態による、既知のモジュールに基づいて決定された例示的なモジュールの格子の追加モジュールの例を示す。
図25Aは、ステップ2004で決定されたモジュールを含む既知のモジュールに基づいて決定された新しい白のモジュール値(例えばモジュール値2502を含む)と新しい黒のモジュール値(例えばモジュール値2504を含む)を示す。同様に、
図25Bは、新しい白のモジュール値(例えばモジュール値2552を含む)と新しい黒のモジュール値(例えばモジュール値2554)を含む、決定された追加のモジュール値を示しており、これらは
図25Aで決定された新しいモジュールに基づいて決定できる。画像処理装置は、(例えば信号包絡線の前景と背景との間の)範囲の中心にグレー値を有するピクセルを調べることができる。例えば画像処理装置は、ピクセルを特定の数のモジュールに関連付けるピクセルを決定することにより、追加のモジュールを推定することができる。(a)2個のモジュールのみによって大部分オーバーラップされ、(b)既に決定されているモジュール値の1つを有するピクセルについて、画像処理装置はこれら2個のモジュールの他方のモジュールの値と既に知られているものとは反対の値に設定できる。
【0144】
新しいモジュール値は、PPMに基づく既知のモジュール値に基づいて決定できる。例えばPPMが0.5を超えるコードの場合、最大9個のモジュールが与えられたピクセルとオーバーラップしている可能性がある。画像処理装置は配置された格子内で最も近い9個のモジュールの各々をオーバーラップ率によって、即ちピクセルが各モジュールによってどの程度オーバーラップされているかによってランク付けできる。画像処理装置は上位2つのパーセンテージ(最大のオーバーラップを有するモジュール)を加算して、合計が閾値(例えば閾値90%)を超えているかどうかを判定できる。閾値が満たされ、これらの2個のモジュールのうち1つだけの値が既に決定されている場合、これら2個のモジュールのうち他方のモジュールの値を反対の値に設定できる。例えばグレーのモジュールと大いにオーバーラップしている1個のモジュールの値が白であれば、他方のモジュールの値は黒であると判定される(そうでなければ我々は明るいピクセルではなくグレーのピクセルを持つであろう)。この推定技術は、前述の例のバリエーションを含むことができる。例えば閾値は代わりに最大のオーバーラップを有する3個のモジュールと比較することができ、それらのうち2個のモジュールが既知で同じ値を持つ場合、他の1個のモジュールは反対の値を持たなければならない。したがってこの技術は既知のモジュールを使用し、モジュールとピクセルとの間のオーバーラップの程度と組み合わせて、新しいモジュールの値を推定することができる。
【0145】
例示的な例として、
図22Bに示されたサンプリングマトリックスを使用する場合、サンプリングマトリックスの係数は、各ピクセルが関連するモジュールによってオーバーラップされる程度を示すパーセンテージ(例えば関連モジュールによってカバーされている各ピクセルの部分のパーセンテージ)であることができる。このオーバーラップ率を用いることにより既に推定されたモジュール値(例えばシンボルの既知の特徴に関連付けられた値)を活用して、既知のモジュールの周辺にある他の隣接するモジュールを把握できる。例えば9個の係数を持つサンプリングマトリックスの場合、2個のモジュールのみによって大部分オーバーラップされているピクセルは、互いにほぼ等しく(例えばそれぞれ約0.5)、他の7つの係数(例えば残りは約0)よりはるかに大きい2つの係数を持つ。
【0146】
新しいモジュールが決定されると、画像処理装置は未知のモジュールの追加のセットを反復的に決定できる。この技術は、既知のモジュール値を活用することにより、本明細書で論じるようにピクセル/モジュールのオーバーラップに基づいて追加の値を把握することができる。最初は、未知の隣接するモジュールのグループが多数存在する可能性があるが、何らかのオーバーラップを持つピクセル/モジュールを反復的に検索することにより、モジュール値が決定されると、これらの決定された追加の値を使用して別のモュール値を埋めることができる。
【0147】
ステップ2008及び2010を参照すると、(例えばステップ2004及び2006に関連して上述したように)これ以上モジュール値を推定できなくなると、画像処理装置は値の有効な組み合わせのセットをテストしてさらに未知のモジュールを決定できる。一部の実施形態では、現在のピクセルのセットが決定された今、残りのモジュールに対する検索スペースは削減されている。画像処理装置は、今では小さくなった残りの未知のモジュールのセットを(例えば反復的に)決定できる。
【0148】
一部の実施形態では、各モジュールについて、画像処理装置は、1つ以上の決定されたピクセルを含むモジュールパターンの残りの有効な組み合わせ(例えば2×2、3×3など)を試すことができる。例えば画像処理装置は、そのような推定ができなくなるまで、未知のモジュールを中心に持つ3×3モジュールパターンを試すことができる。例として3×3パターンを用いると、各モジュールには29=512の可能性がある。しかしながら多くの場合は最大の組み合わせよりはるかに少なくなる。例えば既に決定されている3×3パターンのモジュール値は、可能性の数を減らすことができる。別の例として、3×3の特定のモジュールに対する係数の一部は、モジュール値が計算にほとんど影響を与えないほど十分小さくすることができる。一部の実施形態では、可能なモジュールパターンを上で多値幅1Dシンボル体系について述べた要領で実行できよう。
【0149】
多くのモジュールが先行のステップで決定されていても、すべての可能性を再帰的にテストすることは依然として非常に時間がかかることがある。すべての組み合わせをテストすることも、例えば正しいパターンと誤ったパターンの一部との間の誤差を区別するのが難しい場合があるため、順調に進まないことがある。一部の実施形態では、サンプリングマトリックスを用いて追加のモジュールを決定することができる。例えばまだ決定されていないモジュールによってオーバーラップされる各ピクセルについて、1×9サンプリングマトリックスを用いてモジュール値を決定できる。システムは、1×9サンプリングマトリックスに、最も近い9個のバイナリ(0又は1)モジュール値(3×3モジュールパターンを表す)の未知のベクトルを乗算してモジュール値を決定できる。ピクセルサンプリングマトリックスは、画像内のすべてのピクセルを格子のすべてのモジュールに関連付ける、より大きい疎なサンプリングマトリックスの行のセクションであることができ、ここでマトリックス内の各エレメント(i、j)は、マトリックスの行iに対応するピクセルが、マトリックスの列jに対応するモジュールによってオーバーラップ又はカバーされるパーセンテージを表している。例えば3×3モジュールパターンの9個のモジュールに対するバイナリ値の可能な組み合わせごとに(最大512であるが、一般に既に決定されているモジュール値を考慮する場合はより少ない)、実際のピクセル値とサンプリング係数で乗算するときに生じるピクセル値との誤差を計算できる。許容される誤差閾値内にあるピクセル値誤差を生み出すいかなる組み合わせも可能な解と見なすことができるが、誤差閾値を超える誤差を生み出す組み合わせは考慮から除外される。誤差閾値を下回る組み合わせが1つしかない場合は、対応する3×3のモジュールパターンの未知のモジュール値を適宜設定できる。複数のパターンがある場合、誤差閾値を下回る誤差をもたらす各組み合わせが、当該ピクセルについて9ビット整数として記録される。
【0150】
一部の実施形態では、システムは最初に特定のピクセルを(例えばモジュール値をデコードする可能性がより高くなるように)処理するように構成することができる。例えばシステムは、既に決定されている多数のオーバーラップするモジュールを有するピクセルを最初に処理するように構成できる。例えばシステムは、最初にシンボルの外側の周囲(例えばモジュールが決定されるタイミングパターンとLファインダパターンの近く)のピクセルを処理することに焦点を当てるように構成できる。そのような技術を用いると、反復するたびにモジュールの値は、シンボルの内側により次第に近づいて、及び/又は未知のモジュールの通常なら大きいスペースの内部に向かって決定される。
【0151】
格子の領域内のすべてのピクセルが考慮され、それらの9ビット整数が記録された後、除外プロセスによって追加のモジュールを決定できる。例えばシステムは、各ピクセルの残りの可能な組み合わせの整合性を、モジュールに関連付けられた隣接する各ピクセルの残りの可能な組み合わせに照らして調べることができる。例えばシステムは、あるピクセルに対する3×3モジュールパターンはその8個の隣接ピクセルと実質的にオーバーラップするという事実を利用して、特定のモジュールについて8個の隣接ピクセルの整合性を調べることができる。実際、システムは、特定のピクセルの可能な各組み合わせが、隣接するピクセルの特定の組み合わせとのみ互換性があるという事実を用いて正しい組み合わせを決定できる。
【0152】
一部の実施形態では、そのようなモジュールとその隣接するモジュールとの比較を用いて、無向制約グラフを生成することができる。各モジュールの3×3モジュールパターンの9個のモジュールに対するバイナリ値の保存された組み合わせを表す9ビット整数は、グラフのノードとして投入でき、隣接モジュールに対する整合的な9ビット整数の各々とのリンケージはグラフ内のエッジであることができる。モジュールの格子内のそれぞれ3×3モジュールパターンの間のオーバーラップ領域が同じバイナリ値の組み合わせを持つ場合、2つのノードは整合的であると見なされる。
【0153】
したがって残りのモジュールを決定することは、各ピクセルとその8個の隣接ピクセルの間のエッジの整合的でユニークなセットを決定することを含むことができ、その結果として唯一のノードだけが各ピクセルに接続されており、その他のノードとそれらのエッジは除外されている。システムは、ピクセルに対して選択されたノードを使用して、オーバーラップするモジュール値の正しい組み合わせを決定できる。システムは、グラフ内の特定のノードとそれらに関連付けられたエッジを除外することができる。例えばシステムは、少なくとも1つのエッジで隣接する各ピクセルの少なくとも1つのノードに接続されていないノードを除外できる。そのようなノードを除外すると、グラフ内の幾つかのノード、特に唯一のノードしか持たない別のピクセルに隣接するピクセルに対するノードを除外できる。このようなノードの除外は、グラフ内にそのようなノードがなくなるまで反復的に実行できる。上記のような特定のノードを除外しても、特定のピクセルに複数のノード(組み合わせ)がまだ残っている場合がある。一部の実施形態において、システムは特定の選択肢の除外をテストするように構成できる。例えばランダム選択によってピクセル(例えば2つの可能性しかないピクセル)の1つに対するノードを選択するようにシステムを構成できる。システムはそのピクセルに対する他のノードを除外し、前述のノード除外プロセスを繰り返すことができる。このような選択と除外を実行する結果として、他のピクセルを決定できるか、又は他のピクセルに対するすべてのノードを除外できる。後者の場合には、システムは選択したノードを除外すべきであると判定できる。さもなければシステムは、この1つのピクセル(及び/又は他のピクセル)に対して保存されているすべての可能な選択肢のモジュール値を計算することによってモジュールのデコードを試みて、デコードが成功するかどうかを判定するように構成できる。システムは、システムがシンボルを誤読するのを防ぐためにビルトインされた誤差修正機能に依存できる。シンボルがデコードされない場合、システムは選択したノードが正しくなかったことを再度認識し、それゆえノードは除外されるべきである。
【0154】
以下に、制約グラフを決定する例を示す。Gは、これまでに2Dシンボルについて推定されたモジュール値の(n+2)×(m+2)マトリックスとし、ここで、nはシンボルの行数、mは列数である。一部の実施形態では、マトリックス内に追加の行及び/又は列(例えば追加の2行及び追加の2列)があり、これをシンボルの(両)側で使用して、クワイエットゾーンのモジュール幅部分をエンコードできる。
【0155】
Gの各エレメントはg(k、l)と表示することができ、ここで、kは0~n+1の範囲、lは0~m+1の範囲、及びg(k、l)=0(暗)、1(明)、又は?(不明)である。各モジュール(k、l)について、S(k、l)はモジュールk、lを中心とするGの3×3サブマトリックスとする。S(k、l)の各エレメントはs(k、l、i、j)と表示され、ここで、iは行インデックスで、-1~1の範囲、djは列インデックスで、-1~1の範囲である。また、すべてのi及びjに対してs(k、l、i、j)=m(k+l、i+j)であることに留意されたい。
【0156】
与えられたサブマトリックスS(k、l)に対して、可能なパターンの組み合わせは2u通りあり、ここで、u(k、l)は、S(k、l)の未知のエレメントの数である(s(k、l、i、j)=?)のi、j座標の数)。各可能なパターンを3×3マトリックスM(k、l、z)によって表示し、ここで、zは1からu(k、l)の範囲である。M(k、l、z)の各エレメントは、m(k、l、z、i、j)=0又は1で表示される(k、l、z、i、j)が0又は1(既知)である場合、m(k、l、z、i、j)=s(k、l、z、i、j)であることに留意されたい(例えば未知の値だけが変化できる場合)。
【0157】
システムは、各エレメントm(k、l、z、i、j)をピクセルの格子と関係させるサンプリングマトリックスに従って、マトリックスパターンM(k、l、z)の各々を画像ピクセルに照らして誤差閾値を下回っているかどうかを確認できる。
【0158】
任意のモジュール(k、l)からの8方向を、-1から1の範囲の行オフセットdrと-1から1の範囲の列オフセットdcで表示する(drとdcの両方が0であることはできない、さもないとそれはモジュール(k、l)からの方向ではなくなる)。言い換えれば、8方向は(drとdc)=(0、1)、(0、-1)、(1、0)、(-1、0)、(1、1)、(1、-1)、(-1、1)及び(-1、-1)である。
【0159】
誤差閾値を下回る各パターンM(k、l、z)について、ノードN(k、l、z)を確立する。次に、ノードを互いにリンクさせる無向グラフでエッジを確立できる。ノードの任意のペアN(k、l、z1)及びN(k+dr、l+dc、z2)について、ここで、(k+dr、l+dc)はモジュール(k、l)からの可能な8方向の1つにおける隣接するモジュールであり、z1は1~u(k、l)の範囲であり、z2は1~u(k+dr、l+dc)の範囲である場合、リンクL(k、l、z1、k+dr、l+dc、z2)は、オーバーラップするサブパターンが同じである場合のみ確立される。即ち、すべてのi=iminからimaxまで、及びすべてのj=jminからjmaxまで、m(k、l、z1、i、j)=m(k+dr、l+dc、z2、i-dr、j-dc)である場合。ここで、imin、imax、jmin、jmaxは、下記の方向に基づいて決定される:
dr≦0の場合はimin=-1、それ以外の場合は0
dr≧0の場合はimax=1、それ以外の場合は0
dc≦0の場合はjmin=-1、それ以外の場合は0
dc≧0の場合はjmax=1、それ以外の場合は0
dr=0の場合はオーバーラップ領域は3×2、dc=0の場合、オーバーラップ領域は2×3、対角線方向の場合、オーバーラップ領域は2×2である。
【0160】
全8方向の各々において少なくとも1つの他のノードにリンクできないノードは、それ以降の考慮から除外される。ノードが除外されるとそれぞれのリンクも除外され、それにより8方向の各々とリンクしていないより多くのノードが除外される、というように続く。この除外プロセスにより、各モジュール(l、k)に対して唯一のノードのみが残ることができ、したがってその時点ですべてのモジュール値が知られている。しかしながら1つ以上のモジュールに1つのノードしか残っていない場合でも、各モジュールで8方向で接続されている選択肢はそれぞれのモジュールで1つだけであろう。このような状況では、追加の検索を実行して(例えば残りのすべての組み合わせを片っ端から検索することによって)そのようなノードを決定できる。
【0161】
図32は、一部の実施形態による無向制約グラフの一例を示す。モジュールの格子3200の部分が幾つかの推定されたモジュールと、モジュール3202、3204及び3206として示された残りの3個の推定されるべきモジュールを含んでいる。ボックス3208は、モジュールの格子3200の部分の中心を囲むモジュールを強調表示し、ボックス3210は、モジュールの格子3200の部分において南東に隣接するモジュールを強調表示している。中心を囲むモジュールは3個の未知のモジュールを有するので、8通りの可能な組み合わせが残されている。特に中央に配置されたモジュールの可能な組み合わせは、可能な組み合わせ3212(3個の未知のモジュールはすべて白)、可能な組み合わせ3214(未知のモジュール3204は黒、未知のモジュール3202と3206は白)、可能な組み合わせ3216(未知のモジュール3202は黒、未知のモジュール3204と3206は白)、可能な組み合わせ3218(未知のモジュール3202と3204は黒、未知のモジュール3206は白)、可能な組み合わせ3220(未知のモジュール3202と3204は白、未知のモジュール3206は黒)、可能な組み合わせ3222(未知のモジュール3202は白、未知のモジュール3204と3206は黒)、可能な組み合わせ3224(未知のモジュール3202と3206は黒、未知のモジュール3204は白)、そして可能な組み合わせ3226(3個の未知のモジュールはすべて黒)として示されている。南東に位置するモジュールは未知のモジュールが2つしかないため、4通りの可能な組み合わせが残されている。南東に位置するモジュールに対する可能な組み合わせは、可能な組み合わせ3230(両モジュールは白)、可能な組み合わせ3232(未知のモジュール3204は黒、未知のモジュール3206は白)、可能な組み合わせ3234(未知のモジュール3204は白、未知のモジュール3206は黒)、及び可能な組み合わせ3236(未知の両モジュールは黒)として示されている。
【0162】
この例では、画像処理装置はモジュールの各セットの残っている組み合わせについて誤差テストを実行し、可能な組み合わせ3212、3216、3218、3224及び3234を除外する。可能な組み合わせ3220は、南東のモジュールに対して残っている組み合わせ(可能な組み合わせ3232又は3236)と一致する可能性がないので、画像処理装置は可能な組み合わせ3220を考慮から除外する。このような処理の後、可能な組み合わせ3214と可能な組み合わせ3232の間に第1の可能な一致3240が存在し、可能な組み合わせ3222と可能な組み合わせ3236の間に第2の可能な一致3242が存在し、可能な組み合わせ3226と可能な組み合わせ3236の間に第3の可能な一致3244が存在する。
【0163】
ステップ2012で、画像処理装置は、ステップ2004-2010で決定された値を含む、決定されたモジュール値に基づいてシンボルをデコードする。この時点ですべてのモジュールが決定されている可能性はあるが、一部のモジュールの値がまだ未知である可能性もある(低解像度の画像など)。例えば決定されていないモジュールは、モジュールをまたぐピクセルが黒と白の値の間で前後に反転する場合など、均一なグレー領域のピクセルと関連付けることができる。しかしながらすべてのモジュールが完了していなくても、画像処理装置はシンボルをデコードできる。例えばほとんどの2Dシンボルは、リードソロモン誤差修正及び/又はやその他の誤差修正を使用するなどして、ある程度の冗長性でエンコードされる。別の例として、未知のモジュールは、しばしば誤って決定されたモジュールとしてより高い誤差率(例えば誤差率の2倍)が与えられる。したがってステップ2012では、画像処理装置は、たとえすべてのモジュールでなくてもシンボルをデコードするのに十分な数のモジュールをデコードすることができる。
【0164】
図26-31は、本明細書で論じる技術を適用して多値幅1Dバーコード(例えば
図2に示す1Dバーコード)をデコードする例示的な例として用いられる。
図26は、一部の実施形態による多値幅1Dシンボルの例示的な1D画像2600を示す。1D画像2600は上記と同様のやり方で、
図21の画像2100について上述したように取得された2D画像を通るスキャンラインに沿ってサンプリングすることによって取得できる。画像2100のように画像2600は、各ピクセルの暗さを示すピクセル値と関連するピクセルのセット(例えばピクセル2602、2604)を含む。ピクセル2602、2604は(例えばレーザスキャナを使用して抽出された)ピクセルと呼ばれるのに対し、一部の実施形態では各ピクセルは上述したサンプルであってよい。そのような実施形態では、画像2600はサンプルを計算するために処理される。本明細書で上述し、さらに以下に論じるように、画像信号の包絡線を使用して1Dバーコードをデコードするために使用することができる。
【0165】
図20で述べた方法2000は、多値幅の1Dシンボルをデコードするために使用できる。
図27は、一部の実施形態による、
図26からの画像2600の上部に重ね合わせた多値幅1Dシンボルに対する例示的なモジュールの格子2700を示す。ステップ2004を参照すると、2Dバーコードと同様に、システムはモジュールの格子2700内のモジュールと画像2600のピクセルとの間の空間マッピングを決定する。例えばモジュールの格子2700は、画像2600のピクセルにマッピングするためにシフト及び/又はスケーリングする必要がある場合がある。モジュールの格子2700と画像2600のピクセルの格子との間の関係は、各モジュールがピクセルの各々にどのように影響するかを反映することができる。
図28は、一部の実施形態による、モジュールの格子2700のモジュールと画像2600のピクセルとの間のオーバーラップの程度の例示的な図である。太い実線の矢印(例えば矢印2802、2804及び2806)はオーバーラップの大きい程度を示し、細い点線の矢印(例えば矢印2808、2810)はオーバーラップの小さい程度を示す。本明細書で論じるように、上記の説明は、サンプル(例えば画像2600内のピクセルの1次元画像(又は単一の行))の1D信号に対して、1次元格子(例えば1次元ピクセルの格子2700)の位置を特定する技術を提供する。
【0166】
この技術は、最初に画像のピクセルの格子に対してシンボルのモジュールの格子の位置を特定することを含むことができる。上で説明したように、個々の文字を個別に調べる必要はなく任意のモジュールパターンを推定できる。1Dシンボルの場合、格子の位置は、例えば区切り文字(1Dシンボルの左端と右端の文字など)及び/又は文字の既知の態様(例えば文字のバーやスペースの終了及び/又は開始)などの任意のモジュールパターンを使用して特定できる。
図29は、一部の実施形態による、任意のモジュールパターンについてモジュールの格子2700のモジュールを推定する例を示す。モジュール2902及び2906はスペース(白のモジュール)として推定され、モジュール2904及び2908はバー(黒のモジュール)として推定される。例えばコード128シンボルの場合、文字はバー(例えばバー2904など)で始まり、スペース(例えばスペース2906)で終わり、先行文字はスペース(例えばスペース2902)で終わり、後続文字はバー(例えばバー2908)で始まる。
【0167】
図30A及び30Bは、一部の実施形態による、モジュールとピクセルとの間の関係に基づいて推定された例示的なモジュールの格子2700のモジュールを示す。
図20のステップ2006を参照して、画像処理装置は、モジュールの格子内のモジュールと画像内のピクセルとの間で決定された因果関係を用いて、このステップが2Dバーコードに対して実行されるのと同じ要領で、モジュールの第1セット(例えば関連ピクセルと高度にオーバーラップするモジュール)を推定することができる。
図30Aに示す推定は、追加で(例えばステップ2004に関連して推定される任意のモジュールのパターンに加えて)推定された白のモジュール3002、3004及び3006を含み、
図30Bは追加で推定された黒のモジュール3008及び3010を含む。例えば2Dバーコードに関連して説明したように、画像処理装置は、サンプリング係数がオーバーラップ閾値を超えるモジュールなど、非常に高度に(例えば90%、30%など)にオーバーラップする各モジュールを投入できる。
図30Aは、例としてオーバーラップを矢印3050、3052及び3054で示す。上述したように、この技術は論理を用いて、モジュールは1つの値を持ち、このモジュールが実質的にオーバーラップするピクセルがその正反対に対応する値を持つ可能性は低いという事実を活用することができる。したがって前景の(最も暗い)ピクセルとある程度オーバーラップするモジュールは黒に設定でき(例えばモジュール3008、3010)、背景の(最も明るい)ピクセルとある程度オーバーラップするモジュールは白に設定できる(例えばモジュール3002、3004及び3006)。上述したように、ピクセルが「白」又は「黒」であると呼ぶ場合、ピクセルが黒であるか白であるかの尺度は、画像の信号包絡線に関連して決定することができる(例えば画像の信号包絡線を使用して白と黒のピクセルの範囲を正規化することにより信号包絡線に対する特定のピクセルの範囲を決定できる)。
【0168】
図31は、一部の実施形態による、既知のモジュールに基づいて決定されたモジュールの格子2700内の追加のモジュールを示す。この技術は、以前のステップでデコードされたモジュールの第1のセットを活用して、モジュールの第2のセットをデコードできる。
図20のステップ2008及び2010を参照すると、(例えばステップ2004及び2006に関連して上述したように)これ以上モジュール値を推定できなくなると、画像処理装置は値の有効な組み合わせのセットをテストしてさらに未知のモジュールを決定できる。一部の実施形態では、現在のピクセルのセットが決定された今、残りのモジュールに対する検索スペースは削減されている。画像処理装置は、今では小さくなった残りの未知のモジュールのセットを(例えば反復的に)決定できる。
図31に示すように、モジュール3102、3104、3106はこのステップで推定される。この例では、以下にさらに一般的に説明するように、論理を用いて残りのモジュールを決定できる。例えばこの例におけるモジュール3102、3104及び3106は、関連するピクセル3150及び3152の均一なグレー値を生成するために交互に入れ替わる。モジュール3106は、隣接する黒のモジュール3008と共に関連する均一なグレーのピクセル値3154を生み出すために白(スペース)である。モジュール3108は関連する明るいグレーのピクセル値3156を生み出すためにスペースである。
【0169】
一部の実施形態で、画像処理装置は各モジュールについて、1つ以上の決定されたピクセルを含むモジュールパターンの残りの有効な組み合わせ(例えば1×2、1×3など)を試すことができる。例えば画像処理装置は、そのような推定がそれ以上できなくなるまで、中心に未知のモジュールを持つ1×3モジュールパターンを試すことができる。例として1×3パターンを使用すると、各モジュールには23=8の可能性がある。さらに、2Dバーコードについて前述したように、既知のモジュールによって可能性の数は減少するため、可能性の数を減らすことができる。
【0170】
上記のように、多くのモジュールが以前のステップで決定されたとしても、すべての可能性を再帰的にテストすることは依然として非常に時間がかかり及び/又はよく機能しないことがある。一部の実施形態では、サンプリングマトリックスを用いて追加のモジュールを決定することができる。例えばまだ決定されていないモジュールによってオーバーラップされている各ピクセルについて、1×3サンプリングマトリックスを用いてモジュール値を決定できる。システムは1×3サンプリングマトリックスに、最も近い3個のバイナリ(0又は1)モジュール値の未知のベクトルを乗算することによってモジュール値を決定できる。上述したように、バイナリ値の可能な各組み合わせについて、実際のピクセル値とサンプリング係数を乗算したときに生じるピクセル値との誤差を計算できる。許容誤差の閾値内にあるピクセル値の誤差を生じる組み合わせのいずれかを可能な解として見なすことができる一方、誤差閾値を超える誤差を生じるものは考慮から除外される。誤差閾値を下回るパターンが1つしかない場合、組み合わせの未知のモジュール値を適当に設定できる。さもなければ、可能な解は3ビット整数として記録できる。
【0171】
上述のように、一部の実施形態では、システムは、最初に特定のピクセルを(例えばモジュール値をデコードする可能性がより高くなるように)処理するように構成することができる。例えばシステムは、既に決定されている多数のオーバーラップするモジュールを有するピクセルを最初に処理するように構成できる。例えばシステムは、最初にシンボルの外側の周囲(例えば上述したようにモジュールが決定されている区切り文字及び/又は文字の開始/終了モジュールの近く)のピクセルを処理することに焦点を当てるように構成できる。そのような技術を用いると、反復するたびにモジュールの値は、シンボルの内側により次第に近づいて、及び/又は未知のモジュールの通常なら大きいスペースの内部に向かって決定される。
【0172】
格子の領域内のすべてのピクセルが考慮され、それらの3ビット整数が記録された後、除外プロセスによって追加のモジュールを決定できる。例えばシステムは、各ピクセルの残りの可能な組み合わせの整合性を、モジュールに関連付けられた隣接する各ピクセルの残りの可能な組み合わせに照らして調べることができる。例えばシステムは、あるピクセルに対する1×3モジュールパターンはその2つの隣接ピクセルと実質的にオーバーラップするという事実を利用して、特定のモジュールについて2つの隣接ピクセルの整合性を調べることができる。実際、システムは、特定のピクセルの可能な各組み合わせが、隣接するピクセルの特定の組み合わせとのみ互換性があるという事実を用いて正しい組み合わせを決定できる。実際、システムは、特定のピクセルの可能な各組み合わせが、隣接するピクセルの特定の組み合わせとのみ互換性があるという事実を用いて正しい組み合わせを決定できる。
【0173】
2Dに関連して上述したように、一部の実施形態では、モジュールとその隣接するモジュールとの比較を用いて、無向制約グラフを生成することができる。各モジュールの1×3モジュールパターンの3個のモジュールに対するバイナリ値の保存された組み合わせを表す3ビット整数は、グラフのノードとして投入でき、隣接モジュールに対する整合的な3ビット整数の各々とのリンケージはグラフ内のエッジであることができる。モジュールの格子内のそれぞれ1×3モジュールパターンの間のオーバーラップ領域が同じバイナリ値の組み合わせを持つ場合、2つのノードは整合的であると見なされる。したがって残りのモジュールを決定することは、各ピクセルとその2個の隣接ピクセルの間のエッジの整合的でユニークなセットを決定することを含むことができ、その結果として唯一のノードだけが各ピクセルに接続されており、その他のノードとそれらのエッジは除外されている。システムは、ピクセルに対して選択されたノードを使用して、オーバーラップするモジュール値の正しい組み合わせを決定できる。上述したようにシステムは、グラフ内の特定のノードとそれらに関連付けられたエッジを除外することができる。
【0174】
本明細書に記載した原理に従って動作する技術は、任意の適当なやり方で実装できる。上記のフローチャートの処理ブロック及び決定ブロックは、これらの種々のプロセスを実行するアルゴリズムに含めることができるステップと動作を表している。これらのプロセスから導出されるアルゴリズムは、1以上の専用又は多目的プロセッサと統合されてその動作を指示するソフトウェアとして実装でき、デジタル信号処理(DSP)回路又は特定用途向け集積回路(ASIC)などの機能的に等価な回路として実装でき、或いはその他の適当なやり方で実装されてよい。本明細書に含まれるフローチャートは、何らかの特定の回路又は何らかの特定のプログラミング言語又はプログラミング言語の種類の構文や動作を示していないことを理解されたい。むしろ、これらのフローチャートは、当業者が本明細書に記載するタイプの技術を実行する特定の装置の処理を行うための回路の製造、又はコンピュータソフトウェアアルゴリズムの実装に使用できる機能情報を例示するものである。本明細書で別途明記しない限り、各フローチャートに記載されたステップ及び/又は動作の特定のシーケンスは、実装できるアルゴリズムの例示にすぎず、本明細書に記載された原理の実装及び実施形態において変更できるものであることも理解されたい。
【0175】
したがって一部の実施形態において本明細書に記載する技術は、アプリケーションソフトウェア、システムソフトウェア、ファームウェア、ミドルウェア、埋め込みコード、又は他の任意の適切なタイプのコンピュータコードを含むソフトウェアとして実装されるコンピュータ実行可能命令において具体化できる。そのようなコンピュータ実行可能命令は、幾つかの適切なプログラミング言語及び/又はプログラミングツール若しくはスクリプトツールのいずれかを使用して記述でき、フレームワーク又は仮想マシンで実行される実行可能なマシン言語コード又は中間コードとしてコンパイルされてもよい。
【0176】
本明細書に記載された技術がコンピュータ実行可能命令として具体化される場合、これらのコンピュータ実行可能命令は、多くの利便機能を含む任意の適当なやり方で実装されてよく、それぞれがこれらの技術に従って動作するアルゴリズムの実行を完了するための1以上の動作を提供する。しかしながらインスタンス化された「利便機能」はコンピュータシステムの構造的要素であり、1以上のコンピュータと統合されて実行されると1以上のコンピュータに特定の操作上の役割を実行させる。利便機能は、ソフトウェア要素の一部又は全体であってよい。例えば利便機能はプロセスの機能として、又は個別のプロセスとして、又は他の処理の適当な単位として実装されてよい。本明細書に記載された技術が複数の利便機能として実装される場合、各利便機能は独自の方法で実装されてよく、すべて同じ方法で実装する必要はない。さらに、これらの利便機能は必要に応じてパラレル及び/又はシリアルに実行されてよく、及びそれらが実行されているコンピュータの共有メモリを使用して、メッセージ受け渡しプロトコルを用いるか又はその他の適当な方法で互いの間で情報を受け渡すことができる。
【0177】
一般に、利便機能は、特定のタスクを実行し、又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。通常、利便機能の機能性は、それらが動作するシステムにおいて所望する通りに組み合わせたり配分したりできる。一部の実装形態では、本明細書の技術を実行する1以上の利便機能が一緒になって完全なソフトウェアパッケージを形成できる。これらの利便機能は、代替実施形態ではソフトウェアプログラムアプリケーションを実装するために、他の無関係な利便機能及び/又はプロセスと相互作用するように適合されてよい。
【0178】
本明細書では、1以上のタスクを実行するために、幾つかの例示的な利便機能が記載された。しかしながら記載された利便機能及びタスクの分割は、本明細書で説明された例示的な技術を実装できる利便機能のタイプを例示するものにすぎず、実施形態は特定の数、分割又はタイプの利便機能に限定されないことを理解されたい。一部の実装においては、すべての機能性が単一の利便機能に実装されてよい。また、一部の実装では本明細書に記載された利便機能の一部を他の利便機能と一緒に又は別個に(即ち単一のユニット又は別個のユニットとして)実装でき、或いはこれらの利便機能の一部が実装されないこともある。
【0179】
本明細書に記載した技術を実装するコンピュータ実行可能命令は(1以上の利便機能として又は他のやり方で実装される場合)、一部の実施形態では1以上のコンピュータ可読媒体でエンコードされて媒体に機能性を提供できる。コンピュータ可読媒体は、ハードディスクドライブなどの磁気媒体、コンパクトディスク(CD)やデジタル多用途ディスク(DVD)などの光学媒体、永続的又は非永続的なソリッドステートメモリ(フラッシュメモリ、磁気RAMなど)、又はその他の適当な記憶媒体を含む。そのようなコンピュータ可読媒体は、任意の適当なやり方で実装されてよい。本明細書で用いる「コンピュータ可読媒体」(「コンピュータ可読記憶媒体」とも呼ばれる)は、有形の記憶媒体を指す。有形の記憶媒体は非一時的であり、少なくとも1つの物理的構造的要素を有する。本明細書で用いる「コンピュータ可読媒体」では、少なくとも1つの物理的構造的要素は、情報が埋め込まれた媒体を作り出すプロセス、その媒体に情報を記録するプロセス、又は情報を含んだ媒体をエンコードするプロセス中に何らかの方法で変更できる少なくとも1つの物理的特性を有する。例えば記録プロセス中に、コンピュータ可読媒体の物理的構造の一部の磁化状態を変更できる。
【0180】
さらに、上述した一部の技術は、これらの技術によって使用するために何らかの方法で情報(例えばデータ及び/又は命令)を保存する動作を含む。これらの技術の一部の実装-技術がコンピュータ実行可能命令として実現される実装など-では、情報はコンピュータ可読記憶媒体にエンコードされる。本明細書で特定の構造がこの情報を保存するための有利なフォーマットとして記載されている場合、記憶媒体にエンコードされるときにこれらの構造を使用して情報の物理的編成を与えることができる。次にこれらの有利な構造は、情報と相互作用する1以上のプロセッサの動作に影響を与えることにより、例えばプロセッサによって実行されるコンピュータ操作の効率を上げることによって記憶媒体に機能性を付与できる。
【0181】
技術をコンピュータ実行可能命令として具体化できる一部の実装(すべての実装ではない)において、これらの命令は任意の適当なコンピュータシステムで動作する1以上の適当なコンピューティングデバイスで実行でき、又は1以上のコンピューティングデバイス(又は1以上のコンピューティングデバイスの1以上のプロセッサ)はコンピュータ実行可能命令を実行するようにプログラムできる。コンピューティングデバイス又はプロセッサは、命令がコンピューティングデバイス又はプロセッサにアクセス可能なやり方でデータストアなど(例えばオンチップキャッシュ又は命令レジスタ、バスを介してアクセス可能なコンピュータ可読記憶媒体、1以上のネットワークを介してアクセス可能な及びデバイス/プロセッサによってアクセス可能なコンピュータ可読記憶媒体など)に保存された場合に命令を実行するようにプログラムできる。これらのコンピュータ実行可能命令を含む利便機能は、単一の多目的プログラム可能なデジタルコンピューティングデバイス、処理能力を共有して本明細書に記載した技術を共同で実行する2以上の多目的コンピューティングデバイスの協調システム、本明細書に記載された技術を実行するためだけの単一のコンピューティングデバイス又はコンピューティングデバイスの協調システム(共同設置又は地理的に分散)、本明細書に記載した技術を実行するための1以上のフィールドプログラマブルゲートアレイ(FPGA)、或いはその他の任意の適当なシステムと統合されてその動作を指示することができる。
【0182】
コンピューティングデバイスは、少なくとも1つのプロセッサ、ネットワークアダプタ、及びコンピュータ可読記憶媒体を含むことができる。コンピューティングデバイスは、例えばデスクトップ又はラップトップパーソナルコンピュータ、パーソナルデジタルアシスタント(PDA)、スマートフォン、携帯電話、サーバ、又は他の任意の適当なコンピューティングデバイスであってよい。ネットワークアダプタは、任意の適当なコンピューティングネットワークを介して他の任意の適当なコンピューティングデバイスと有線及び/又は無線で通信するために、コンピューティングデバイスを有効にする任意の適当なハードウェア及び/又はソフトウェアであってよい。コンピューティングネットワークは、ワイヤレスアクセスポイント、スイッチ、ルータ、ゲートウェイ、及び/又はその他のネットワーク機器、並びにインターネットを含め2以上のコンピュータ間でデータを交換するための適当な有線及び/又は無線通信媒体を含んでよい。コンピュータ可読媒体は、処理されるデータ及び/又はプロセッサによって実行される命令を保存するように適合できる。プロセッサは、データの処理や命令の実行を可能にする。データ及び命令は、コンピュータ可読記憶媒体に保存されてよい。
【0183】
コンピューティングデバイスは、さらに入出力装置を含め1以上のコンポーネントと周辺機器を有してよい。これらのデバイスは、とりわけユーザインタフェースを提供するために使用できる。ユーザインタフェースを提供するために使用できる出力デバイスの例は、出力を視覚的に表示するためのプリンタ又はディスプレイ画面、及び出力を聴覚的に表示するためのスピーカ又はその他の音声生成装置を含む。ユーザインタフェースに使用できる入力デバイスの例は、キーボード、マウスやタッチパッドなどのポインティングデバイス、及びデジタル化タブレットを含む。別の例として、コンピューティングデバイスは、音声認識又は他の可聴形式で入力情報を受け取ることができる。
【0184】
記載された実施形態は、技術が回路及び/又はコンピュータ実行可能命令で実装されたものである。一部の実施形態は、少なくとも1つの例が提供された方法の形態であってもよいことを理解されたい。方法の一部として実行される動作は、任意の適切なやり方で順序付けることができる。したがって例示の実施形態では連続した動作として示されているが、実施形態は幾つかの動作を同時に実行することも含めて、動作が例示されたものとは異なる順序で実行されるように構成されてよい。
【0185】
上記の実施形態の種々の態様は、単独でも、組み合わせて、又は上述した実施形態で具体的に論じられていない様々な配置で使用することができ、それゆえその応用において上記の説明に記され又は図面に示された構成要素の詳細及び配置に限定されるものではない。例えばある実施形態に記載された態様は、他の実施形態に記載された態様と任意のやり方で組み合わせることができる。
【0186】
特許請求の範囲でクレーム要素を修正するために「第1」、「第2」、「第3」などの序数詞を使用することは、それ自体はあるクレーム要素の別のクレーム要素に対する優先、優位又は順位、或いは方法の動作が実行される時間的順序を意味するものではなく、単にクレーム要素を区別するために特定の名前を持つクレーム要素を(序数詞の使用を除いて)同じ名前を持つ別の要素と区別するためのラベルとしてのみ使用される。
【0187】
また、本明細書で使用される語法及び用語は説明を目的とするものであり、制限と見なされるべきではない。本明細書における「含む」、「有する」、「持つ」、「包含する」、「伴う」、及びそれらの変形の使用は、その後に列挙される項目、及びその同等物、並びに追加項目を網羅することを意味する。
【0188】
本明細書では、「例示的」という言葉は、例、事例又は例示としての役割を果たすことを意味するものとして使用される。それゆえ本明細書に例示として記載される実施形態、実装、プロセス、特徴などは、例示的な例として理解されるべきであり、特に明記しない限り選好される例若しくは有利な例として理解されるべきではない。
【0189】
以上、少なくとも1つの実施形態の幾つかの態様を説明したが、当業者には様々な変更、修正及び改善が容易に想到し得るものであることを理解されたい。そのような変更、修正及び改善は本開示の一部であることが意図されており、本明細書に記載する原理の精神及び範囲内にあることが意図されている。したがって上記の説明及び図面は例示にすぎない。