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

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

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

特開2023-121722コードを付した物体の画像内のコード画像領域の発見
<>
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図1
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図2
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図3
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図4
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図5
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図6
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図7
  • 特開-コードを付した物体の画像内のコード画像領域の発見 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023121722
(43)【公開日】2023-08-31
(54)【発明の名称】コードを付した物体の画像内のコード画像領域の発見
(51)【国際特許分類】
   G06T 7/11 20170101AFI20230824BHJP
   G06T 7/00 20170101ALI20230824BHJP
【FI】
G06T7/11
G06T7/00 350C
【審査請求】有
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022201590
(22)【出願日】2022-12-16
(31)【優先権主張番号】22157758
(32)【優先日】2022-02-21
(33)【優先権主張国・地域又は機関】EP
(71)【出願人】
【識別番号】591005615
【氏名又は名称】ジック アーゲー
(74)【代理人】
【識別番号】110001069
【氏名又は名称】弁理士法人京都国際特許事務所
(72)【発明者】
【氏名】パスカル シューラー
(72)【発明者】
【氏名】クリストファ― ローザ―
(72)【発明者】
【氏名】トルステン ファルク
(72)【発明者】
【氏名】サッシャ ブルクハルト
(72)【発明者】
【氏名】ロマン ミューラー
【テーマコード(参考)】
5L096
【Fターム(参考)】
5L096AA06
5L096EA39
5L096FA06
5L096FA52
5L096FA54
5L096FA64
5L096FA67
5L096FA69
5L096GA22
5L096GA23
5L096GA51
5L096HA11
(57)【要約】      (修正有)
【課題】セグメント化又はコード画像領域の発見を更に改善する方法及び光電式コードリーダを提供する。
【解決手段】コードを付した物体の原画像内でコード画像領域を見つけ出すための方法であって、機械学習を含まない古典的な画像処理の方法を用いる第1のセグメント化法を用いてコード画像領域の第1候補を決定し、機械学習を用いる第2のセグメント化法を用いて第2候補を決定し、コード画像領域を見つけ出すために第1候補と第2候補をマージする。
【選択図】図5
【特許請求の範囲】
【請求項1】
コードを付した物体(14)の原画像内でコード画像領域を見つけ出すためのコンピュータ実行型の方法であって、機械学習を含まない古典的な画像処理の方法を用いる第1のセグメント化法においてコード画像領域の第1候補が決定される方法において、
機械学習を用いる第2のセグメント化法において第2候補を決定すること、及び、コード画像領域を見つけ出すために前記第1候補と前記第2候補をマージすること、を特徴とする方法。
【請求項2】
前記第1のセグメント化法が第1の結果マップを生成し、及び/又は、前記第2のセグメント化法が第2の結果マップを生成し、結果マップは前記原画像よりも低解像度の画像であり、その画素が、該画素の位置においてコード画像領域が認識されているかという情報を示している、請求項1に記載の方法。
【請求項3】
前記候補の発見に続いて、前記コード画像領域をより細かく区切る微細セグメント化を、特に前記原画像の解像度で行う、請求項1又は2に記載の方法。
【請求項4】
前記原画像内に、第1候補及び第2候補が決定された場所、又はその代わりに第1候補若しくは第2候補が決定された場所がある場合に、その場所においてコード画像領域が発見されたとみなす、請求項1又は2に記載の方法。
【請求項5】
前記第1候補を、特に連結成分法により、繋がった画像領域に拡張し、閾値サイズを下回る小さい第1候補だけを維持し、特に該小さい第1候補を追加的にコード画像領域とみなす、請求項1又は2に記載の方法。
【請求項6】
前記第2候補を、特に連結成分法により、繋がった画像領域に拡張し、既に見つかっているコード画像領域の位置と一致しない位置にある排他的な第2候補だけを維持し、特に該排他的な第2候補を追加的にコード画像領域とみなす、請求項1又は2に記載の方法。
【請求項7】
前記第1候補、第2候補及び/又はコード画像領域に対し、代表の位置において前記原画像内に光学コード(20、22)がどの程度の確からしさで認識されているかを示す値数を決定する、請求項1又は2に記載の方法。
【請求項8】
1次元コードの第1候補、2次元コードの第1候補、1次元コードの第2候補、及び/又は、2次元コードの第2候補を決定する、請求項1又は2に記載の方法。
【請求項9】
第1候補のうち同時に第2候補ではないものを、前記原画像内のテキスト画像領域とみなす、請求項1又は2に記載の方法。
【請求項10】
前記第1のセグメント化法がタイルに分割された原画像内で第1候補を決定する、請求項1又は2に記載の方法。
【請求項11】
前記第1のセグメント化法がコントラストの特定を含み、その際に第1候補が最低コントラストを持たなければならない、請求項1又は2に記載の方法。
【請求項12】
前記第1のセグメント化法において、互いに交差する2本の線に沿って明度エッジを数えることで、該明度エッジのそれぞれの数に基づいて優先方向を決定し、優先方向がある場合にのみ1次元コードの第1候補を認識し、特に、それ以外では2次元コードの第1候補を認識する、請求項1又は2に記載の方法。
【請求項13】
前記第2のセグメント化法がニューラルネットワーク、特に深層畳み込みネットワークを備えている、請求項1に記載の方法。
【請求項14】
前記ニューラルネットワークが、サンプル画像、特に機械学習の方法を用いないセグメント化法及び/又はデコード法の結果に基づいて評価されたサンプル画像に基づく教師あり学習で訓練される、請求項13に記載の方法。
【請求項15】
受信光から画像データを生成するための少なくとも1つの受光素子(24)と、コードを付した物体(14)の原画像内でコード画像領域を見つけ出すための方法、特に請求項1~14のいずれかに記載の方法が実行される制御及び評価ユニット(26)とを有する光電式コードリーダ(10)であって、コード画像領域の第1候補が機械学習を行わない古典的な画像処理の方法を用いる第1のセグメント化法において決定される光電式コードリーダ(10)において、
前記制御及び評価ユニット(26)において実行される方法において、機械学習を用いる第2のセグメント化法においてコード画像領域の第2候補が決定され、前記コード画像領域を見つけ出すために前記第1候補と前記第2候補がマージされることを特徴とする光電式コードリーダ(10)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、請求項1のプレアンブルに記載の、コードを付した物体の原画像内でコード画像領域を見つけ出すためのコンピュータ実行型の方法、及び、それに相当する方法を利用する、請求項15のプレアンブルに記載の光電式コードリーダに関する。
【背景技術】
【0002】
コードリーダは、スーパーマーケットのレジ、荷物の自動識別、郵便物の仕分け、空港での手荷物の発送等、物流での利用が知られている。コードスキャナの場合、読み取り光線が回転ミラー又はポリゴンミラーホイールでコードを横切るように案内される。カメラベースのコードリーダは画像センサを用いて物体の画像をその表面のコードとともに撮影し、画像解析ソフトウエアがその画像からコード情報を抽出する。カメラベースのコードリーダは、1次元バーコード以外の種類のコード、例えばマトリクスコードのように2次元的に構成され、より多くの情報を利用できるコードでも問題なく処理できる。
【0003】
ある重要な一群の利用形態では、コードを付した物体がコードリーダの近くを通過するように搬送される。そして、コードスキャナがその読み取り領域内に次々に入ってくるコードをそれぞれ検出する。一方、カメラベースのコードリーダでは、ライン走査カメラがコード情報を持つ物体画像を相対運動に伴って次々に1ラインずつ読み取る。2次元画像センサを用いる場合は、撮像レートと搬送速度に応じて多少重なり合う複数の画像データが規則的に取得される。物体をコンベア上で任意の向きに配置できるようにするため、読み取りトンネルに複数のコードリーダを設け、物体を複数の側又は全ての側から撮影できるようにすることも多い。
【0004】
コードを読み取るための準備として、コードを付した物体を撮影した原画像内で、コード画像領域、即ち画像内でコードを含んでいる可能性がある領域を探す。このステップをセグメント化又は予備セグメント化と呼ぶ。人間が目でコード画像領域を認識することは非常に簡単である。しかしアルゴリズムの観点からするとそれは極めて難しい課題である。なぜなら、背景のパターン又は構造がコード画像領域そのものに似た特性を呈していることがよくあるからである。例えば、非常に小さいモジュールを持つ2次元コードは様々な点でテキスト領域、ロゴ、荷物テープ等に非常に似た特性を持っている。それ故、従来からセグメント化のエラー率はまだ高すぎる。ここで、コードのある領域を見落とすエラー(検出漏れ)と、コードのない領域をコード画像領域として見つけてしまうエラー(誤検出)とを区別する必要がある。前者のエラーは、物体が複数の冗長なコードを持っていない場合、コード情報によって制御される自動処理を妨げる場合がある。一方、後者のエラーは限られた計算リソースと利用可能な時間窓を使用し、その結果、他のコード画像領域にあるコードがもはや遅滞なく読み取られない場合がある。
【0005】
今日のほとんどのコード読み取りの利用においてセグメント化は伝統的な画像処理アルゴリズムと手動で作成された分類とを用いて行われる。これにより、しばしば非常に小さい構造さえもなお良好に認識され、以て小さいコードを含むコード画像領域(例えばモジュールサイズ及びシンボルサイズの小さい2次元コードや、コードの高さ乃至はバーの長さが小さいバーコード)でも見つかる。この従来のアプローチではその評価が非常に局所的なままである。しかしそうすると、背景構造が多い等、難しい読み取り状況においては多くの誤検出のコード画像領域が見つかってしまい、使用時の典型的なリアルタイム条件下ではそれらを全て処理することができず、それにより読み取り率が低下する。
【0006】
セグメント化の別のアプローチは人工的なニューラルネットワーク、特に深層畳み込みネットワーク(深層ニューラルネットワーク、畳み込みニューラルネットワーク:CNN)を基礎としている。詰まるところ、このようなニューラルネットワークはサンプルデータを用いて訓練された多数のフィルタカーネルを原画像に適用するものである。こうして多数のフィルタを少しずつ段階的に適用するため、ニューラルネットワークは大量の計算を要する。それ故、第1層において画像解像度を大きく下げなければならない。しかしそうすると原画像内のより微細な構造が失われる恐れがある。その結果、小さめのコード画像領域が見落とされる、即ち、比較的高い率で検出漏れエラーが生じることになる。見つけられなかったコード画像領域は読み取り率に直接影響を及ぼす。逆に、見つかったコード画像領域は本当に信頼でき、誤検出エラーの率は古典的なセグメント化のアプローチに比べて低い。
【0007】
非特許文献1では大きなデータセットが合成され、それを用いてCNNによるコードのセグメント化が実行される。詳しいネットワークアーキテクチャとハードウェア実装は提示されていない。
【0008】
非特許文献2では、手動でパラメータを調整しなくても、バーコードの場所を突き止める際の性能がそれまでのアプローチに比べて少なくとも5%改善されたとされている。
【0009】
非特許文献3では、回転を含むコード領域が、インテルi5-6600 3.30GHzとNvidia GeForce GTX 1080を用いてリアルタイムで認識されている。
【0010】
非特許文献4ではCPU環境内でバーコードが認識され、コード型が識別される。
【0011】
特許文献1は、画像環境内でコードの場所を突き止めるステップをニューラルネットワークを用いて実行するコード認識方法及びコードリーダを開示している。ニューラルネットワークの訓練及びアーキテクチャは詳しく説明されていない。特許文献2では、光学コードの検出に畳み込みネットワークを用いることが提案されている。特許文献3から、撮影された画像内でコードを見つけ出すために畳み込みネットワークを用いる別のコードリーダが知られている。
【0012】
特許文献4では、機械学習のために構成された分類器又はより特別にはニューラルネットワークを訓練するために、機械学習のない方法で作動する古典的なデコーダが用いられる。しかし、この文献は前処理又はコード領域の検出を詳しく扱っていない。
【0013】
特許文献5にはストリーミング法においてニューラルネットワークを用いてセグメント化が行われるカメラと画像データ処理方法が記載されている。即ち、別の画像データがまだ読み込まれつつある間に前の画像データがもう処理される。ニューラルネットワークの少なくとも第1層はFPGA上に実装することができる。これにより計算時間及びハードウェアに対する要求が著しく低減されるが、セグメント化自体はそれにより改善されない。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】DE 101 37 093 A1
【特許文献2】DE 10 2018 109 392 A1
【特許文献3】US 10 650 211 B2
【特許文献4】EP 3 428 834 B1
【特許文献5】EP 3 916 633 A1
【非特許文献】
【0015】
【非特許文献1】Zhao, Qijie, et al, "Deep Dual Pyramid Network for Barcode Segmentation using Barcode-30k Database", arXiv preprint arXiv:1807.11886 (2018)
【非特許文献2】Xiao, Yunzhe, and Zhong Ming, "1D Barcode Detection via Integrated Deep-Learning and Geometric Approach", Applied Sciences 9.16 (2019): 3268
【非特許文献3】Hansen, Daniel Kold, et al, "Real-Time Barcode Detection and Classification using Deep Learning", IJCCI. 2017
【非特許文献4】Zharkov, Andrey; Zagaynov, Ivan, Universal Barcode Detector via Semantic Segmentation, arXiv preprint arXiv:1906.06281, 2019
【発明の概要】
【発明が解決しようとする課題】
【0016】
従来技術ではこれまで、古典的なセグメント化かニューラルネットワークを用いたセグメント化の一方だけが実行される。従って、両方の種類のセグメント化が各々の長所で補い合い、短所を消し合うという可能性は認識されておらず、利用もされていなかった。
【0017】
故に本発明の課題はセグメント化又はコード画像領域の発見を更に改善することである。
【課題を解決するための手段】
【0018】
この課題は、請求項1に記載の、コードを付した物体の原画像内でコード画像領域を見つけ出すためのコンピュータ実行型の方法、及び、請求項15に記載の光電式コードリーダにより解決される。物体には少なくとも1つの光学的なバーコード又は2次元コードが付されている、又は、とにかくそれが前提とされる。故に物体の撮影画像、即ち原画像には少なくとも1つのコード画像領域、即ちコードを含む画像部分(ROI、関心領域)があるが、撮影状況や視点のせいでコードが一緒に撮影されなかったということを排除するものではなく、また、物体に実際にコードが全く付されていなかったり、それが失われていたりすることも起こり得る。原画像は例えば搬送運動の間にベルトコンベア付近でカメラにより撮影される。あるいは物体がカメラの視野内に提示される。
【0019】
コード画像領域の発見(これをセグメント化とも呼ぶ)は光学コードの読み取り方法の準備ステップであることが好ましく、その場合、該ステップに続いて、見つかったコード画像領域がデコーダに渡され、該デコーダが各コード画像領域内のコードのコード内容を読み取る又は該コードをデコードする。
【0020】
コード画像領域の第1候補が第1のセグメント化法において決定される。第1のセグメント化法は古典的な画像処理の方法で(例えば手動で選択され且つパラメータ設定されたフィルタを用いて)作動する。古典的な画像処理は、機械学習の方法、特にニューラルネットワークを使用しないということにより限定される。従ってここで「古典的な」とは機械学習に対する反対概念ということになる。なお、パラメータの設定及び適合化は古典的な画像処理においても可能であり、それだけではまだ機械学習ではない。実践上の重要な違いは、古典的なセグメント化はそのプログラミングと同時に既にその課題に対して準備ができており、前もって経験若しくは訓練を必要としないこと、そしてその性能が最初から全寿命を通じて或る程度一定であることである。これに対して機械学習ではそれら全てが、プログラムされた構造にはるかに依存しているだけでなく、訓練及び訓練データの質との関係で初めて現れる。従来の古典的なセグメント化は第1候補の決定とともにもう終了し、その第1候補は該セグメント化を基準として見つかったコード画像領域である。
【0021】
本発明の出発点となる基本思想は、古典的なセグメント化を機械学習のセグメント化と組み合わせることにある。そのために、機械学習を用いる第2のセグメント化法でコード画像領域の第2候補を決定する。従来の機械学習に基づくセグメント化は、第1候補を決定することなく第2候補を決定しただけでもう終了となり、その第2候補は該セグメント化を基準として見つかったコード画像領域である。
【0022】
本発明では、コード画像領域を見つけ出すために、2つの異なるセグメント化法で見つけ出された第1候補と第2候補をその次にマージする。従って、第1候補と第2候補を一緒に観察すること、即ち2つのセグメント化の融合が行われる(スマート融合)。
【0023】
本発明には、2つのセグメント化法の組み合わせによりそれらの各々の長所を利用することができるという利点がある。古典的なセグメント化は粒子が細かすぎて、実際にはコードを含んでいない誤検出のコード画像領域が多くなりすぎる傾向がある一方、機械学習を用いるセグメント化はコードを見落として検出漏れエラーになる傾向がある。既に冒頭で触れたように、誤検出のコード画像領域は貴重な計算時間を浪費するため、それが間接的に読み取り率の低下につながる場合がある。なぜなら、リアルタイム又は準リアルタイムの条件下では少なくとも若干数のコード画像領域がもはや評価することができなくなるからである。見落とされたコード画像領域にある、読み取られないコードは読み取り率を直接的に低下させる。2つのセグメント化をインテリジェントにマージすることにより第1及び第2の種類のエラーを両方とも減らすことができる。これにより、古典的なセグメント化の粒子の細かさ及び正確さと機械学習を用いるセグメント化の選択性とを効果的に統合することができ、全体の読み取り率が上がる。
【0024】
好ましくは、第1のセグメント化法が第1の結果マップを生成し、及び/又は、第2のセグメント化法が第2の結果マップを生成し、結果マップは原画像よりも低解像度の画像であり、その画素が、該画素の位置においてコード画像領域が認識されているかという情報を示している。これは第1候補及び第2候補をそれぞれ結果マップ(ヒートマップ)として表す非常に扱いの容易な表現法である。特に2つの結果マップは、コード画像領域を見つけ出すために、本発明の実施形態に応じて様々なやり方で組み合わされる(融合されたヒートマップ)。原画像に比べて解像度が低いため、結果マップの各画素は原画像の一定の領域又はタイルを代表しており、当該部分がコード画像領域の一部であるか否か、若しくは該タイル内にコード(の一部)が含まれていた可能性はどの程度か、という情報を二値的に又はスコア値で与え、場合によっては更にそれがどのコード型であると思われるか等といった分類情報も与える。
【0025】
候補の発見に続いて、コード画像領域をより細かく区切る微細セグメント化を、特に原画像の解像度で行うことが好ましい。コード画像領域の位置に関する情報はコードの正確な境界をまだ必ずしも含んでいるとは限らない。例えば結果マップの場合、コード画像領域の位置は粗いマップの解像度でしか突き止められない。微細セグメント化はコード画像領域の境界をより良くし、好ましくは原画像の解像度における画素の精度にする。第1候補、第2候補、及び/又は、融合の後で見つかったコード画像領域を微細セグメント化することができる。
【0026】
原画像内に、第1候補及び第2候補が決定された場所、又はその代わりに第1候補若しくは第2候補が決定された場所がある場合に、その場所においてコード画像領域が発見されたとみなすことが好ましい。これによれば、2つのセグメント化法の論理的AND結合又はその代わりに論理的OR結合が実行される。ANDの場合、コード画像領域が見つかったとみなすには両方のセグメント化法が1つの候補を確認しなければならず、ORの場合は2つのセグメント化法の一方に候補があれば足りる。一般には、AND又はORは意味どおりに解釈すべきである。即ち、両方の条件が累積的に与えられるか、若しくは一方の条件だけが与えられる。結果マップの場合、それは画素をAND又はOR結合する画像処理操作とすることが好ましい。即ち、第1の結果マップと第2の結果マップをAND又はORで組み合わせて第3の結果マップを作るのである。結果マップが二値的ではない場合は、コード画像領域を見つけ出すために相応のものを選ぶことになる。例えば、両方の画素におけるスコア値又は両方の画素のスコア値の和が閾値を超えなければならない、又はそれが2つの画素の一方だけで十分である、等である。ANDを用いた組み合わせは厳しすぎる傾向があり、コード画像領域が失われる可能性がある。ここではどちらかと言えば見落としエラーが生じ、誤検出エラーはほとんど生じない。逆にORを用いた組み合わせは緩すぎる傾向があり、偽のコード画像領域が多すぎる結果となる一方、コード画像領域が見落とされることはほとんどない。それ故、好ましくは、2種類のエラーを更に減らすため、次に説明するような追加のステップを続ける。
【0027】
第1候補を、特に連結成分法(Connected-Components-Verfahren)により、繋がった画像領域に拡張し、閾値サイズを下回る小さい第1候補だけを維持し、特に該小さい第1候補を追加的にコード画像領域とみなすことが好ましい。このステップは、第1候補と第2候補が既に一度融合された後、特に第3の結果マップに融合された後で、追加のコード画像領域を見つけ出すために実行されることが好ましい。まさにAND結合の後で小さいコード画像領域が消える傾向がある。それは、機械学習を用いる第2のセグメント化法がそれを見落としてしまい、よってその存在を認めなかったことに因る。それ故、第1のセグメント化法の結果を再び後処理することで、意図的に小さい第1候補を見つけ出し、続いて小さいコード画像領域を見つける。第1候補はまず連結成分又はいわゆるブロブに仕上げられる。それから小さい第1候補だけを維持するサイズフィルタを適用する。サイズフィルタは例えば画素数又は他の尺度(長さ、幅、直径等)を基礎とする。そしてその小さい第1候補が好ましくは追加のコード画像領域とみなされる。これを第4の結果マップ内で見つけ出す又は該マップ内に集めることができる。それから特に第3の結果マップを第4の結果マップとOR結合することで第5の結果マップを得る。全体として、今の場合、第5の結果マップは「第1の結果マップ」AND「第2の結果マップ(第3の結果マップでも同じ)」OR「第4の結果マップ」として得られる。この第5の結果マップは、第1のセグメント化法及び第2のセグメント化法で見つかったコード画像領域がどこにあるかを示すと同時に、小さい第1候補に対応するコード画像領域を示す。
【0028】
第2候補を、特に連結成分法により、繋がった画像領域に拡張し、既に見つかっているコード画像領域の位置と一致しない位置にある排他的な第2候補だけを維持し、特に該排他的な第2候補を追加的にコード画像領域とみなすことが好ましい。第2のセグメント化法も再び、後考察することができる。これもまた、対応する第1候補がなかったためAND結合により失われた第2候補があるかもしれないということに関わるものであることが好ましい。しかし、比較的大きな第2候補が第1候補をOR結合の意味で単純に上書きしてはならない。典型的な間違い事例は複数の小さいバーコードが上下に重なった商品倉庫コードである。より精度の高い第1のセグメント化法はそれらのバーコードをばらばらに分けることができる。この分けられたコードを大面積の第2候補により一体化してはならない。それ故、まず排他的な第2候補を探索する、即ち、連結成分乃至はブロブに成長させた各第2候補の位置にコード画像領域が既に見つかっていないか調べる。そうでない場合にのみ、それは排他的な第2候補であり、その排他的な第2候補だけを追加的なコード画像領域として付け加える。排他的な第2候補は第6の結果マップ内で見つけ出す又は該マップ内に集めることができる。それから結果マップのレベルで統合が行われる。第6の結果マップは第3の結果マップ又は第5の結果マップとOR結合することができる。その結果、第7の結果マップ又は全結果マップが得られる。
【0029】
特に好ましくは、小さい第1候補と排他的な第2候補を第1候補と第2候補のAND結合に付け加える。結果マップを用いる場合は以下のカスケードになる。第1候補の第1の結果マップが第2候補の第2の結果マップとAND結合されて第3の結果マップになる。第1候補が、繋がったブロブに成長させられ、閾値サイズ又は最大サイズまでのブロブのみが小さい第1候補として維持され、これが第4の結果マップとな る。第3の結果マップと第4の結果マップがOR結合されて第5の結果マップとなる。第2候補が、繋がったブロブに成長させられ、既に見つかったコード画像領域と一致していないブロブだけが排他的な第2候補として維持され、これが第6の結果マップとなる。第5の結果マップと第6の結果マップをOR結合すると、この好ましい実施形態によって見つけ出された全てのコード画像領域を含む全結果マップが得られる。
【0030】
第1候補、第2候補及び/又はコード画像領域に対し、代表の位置において原画像内に光学コードがどの程度の確からしさで認識されているかを示す値数(スコアリング、スコア値)を決定することが好ましい。これによりAND又はOR結合を例えば投票又は重み付けにより更に細分化することができる。コード画像領域に対して何らかの値数(好ましくは該領域の基礎となる各候補の値数を取り込んだ値数)が割り当てられると、それに応じて後段のデコードに優先順位を付けることができ、利用可能なデコード時間が限られている場合には最も見込みのあるコード画像領域から始めることができる。値数は、二値的な「コードあり/コードなし」を越えて例えばコード型まで含むような追加の分類結果にまで一般化することもできる。
【0031】
好ましくは、1次元コードの第1候補、2次元コードの第1候補、1次元コードの第2候補、及び/又は、2次元コードの第2候補を決定する。従って、1次元コード(バーコード)と2次元コードとの間で更に候補が区別される。コードはそれ自身、更に様々な公知のコード型に従って区別することができる。後段のデコーダはそのような細分化を通じて、どの優先順位の高い読み取り試行をどのデコード法で行えば最も早く成功に至るかという重要な示唆を受け取り、以て利用可能なデコード時間をより良く活用する。
【0032】
2次元コードの第1候補のうち同時に第2候補ではないものを、原画像内のテキスト画像領域とみなすことが好ましい。このような画像領域では第1のセグメント化法の古典的な画像処理により目立つ構造が認識されたとする。同時に、機械学習を用いる第2のセグメント化法ではこの画像領域においてコードの形を識別できなかったとする。そうすると、それは、古典的な画像処理が反応したその構造がテキスト領域であるということの少なからぬ証明となる。この情報はいわば副産物として更なる処理のためにOCRエンジン(光学的文字認識、テキスト認識)に渡すことができ、該エンジンはその情報から、デコーダがコード画像領域から引き出すのと似たような利点を引き出す。テキスト領域は他方で別の結果マップ(OCR結果マップ、OCRヒートマップ)の形で処理して出力することができる。
【0033】
第1のセグメント化法はタイルに分割された原画像内で第1候補を決定することが好ましい。このようにすれば、例えばコントラストを決定したり、明度エッジを数えたりするために、その都度、小さい画像部分だけを処理すればよい。タイルは反復的に連続して処理してもよいし、任意に段階を付けて並列に処理してもよい。第1の結果マップはタイル毎に1画素を含むことが好ましい。第2の結果マップの解像度は同じ(即ち、第2のセグメント化法がそのように構成される)か、解像度を合わせるための正規化が行われる。
【0034】
第1のセグメント化法がコントラストの特定を含み、その際に第1候補が最低コントラストを持たなければならないものとすることが好ましい。コード要素の明暗の移行部では高いコントラストが生じるから、高いコントラストはコード画像領域の第1候補を認識するための良好な識別基準である。コントラストの評価はその都度1つのタイルを対象とすることが好ましい。
【0035】
第1のセグメント化法において、互いに交差する2本の線に沿って明度エッジを数えることで、該明度エッジのそれぞれの数に基づいて優先方向を決定し、優先方向がある場合にのみ1次元コードの第1候補を認識し、特に、それ以外では2次元コードの第1候補を認識することが好ましい。前記2本の線は原画像の面内における2方向の次元に対する一種のテスト十字線である。テスト対象の領域がバーコードを含んでいれば、少なくとも1本の線がバーコードのバーを横切って延在し、故に多数の明度エッジを通る。これがどちらの線にも該当しなければ、バーコードが存在するということは排除される。高いコントラスト等の構造を認識する基準の検査が先に行われていれば、その構造はバーコードではなく、故に特に2次元コードと推定することができる。これはその後、場合によって第2のセグメント化法により確認されるか、更に検査を進めて2次元コードのファインダーパターンが探索される。他の可能性として、撒き印刷、テキスト領域、又は先行基準の誤評価がある。テスト十字線も1つのタイルを対象とすることが好ましい。
【0036】
第2のセグメント化法はニューラルネットワーク、特に深層ニューラルネットワーク若しくは畳み込みネットワーク(CNN、畳み込みニューラルネットワーク)を備えていることが好ましい。これは画像処理のために特に定評のある機械学習の方法である。第2のセグメント化法はそれを用いてコード画像領域の第2候補を非常に確実に決定することができる。
【0037】
ニューラルネットワークは、サンプル画像、特に機械学習の方法を用いないセグメント化法及び/又はデコード法の結果に基づいて評価されたサンプル画像に基づく教師あり学習で訓練されることが好ましい。教師あり学習では、予め正しい評価が与えられたサンプルを含む訓練データセットから、後に運転時に提示される原画像まで一般化することができる。訓練並びに運転(推論)のためのニューラルネットとアルゴリズムの適切なアーキテクチャはそもそも既知であるから、良好に機能する解を用いること又はその上に重ねることができる。いくつかの引用文献を冒頭で挙げた。サンプル画像に対する正しい評価の割り当て、即ち注釈付け又はラベリングは基本的に手動で行うことができる。なぜなら訓練は運転時間の前に行われるからである。更に、第2のセグメント化法は、少なくとも部分的に、第1のセグメント化法で評価したサンプル画像を用いて訓練することができる。これは最終的に第1のセグメント化法を別の手段で再作成するだけのものでは決してない。なぜなら、ニューラルネットワークは訓練を通じて独自の評価と一般化を見つけ出すからである。更に、サンプル画像を評価し、コード画像領域において本当にコードを読み取ることができた場合にのみ過去にさかのぼって該コード画像領域に正解サンプルとしての注釈を付けるような、少なくとも1つの古典的なデコーダを引き合いに出すことができる。
【0038】
本発明に係る光電式コードリーダは、受信光から画像データを生成するため、そしてそれにより原画像を撮影するための受光素子を備えている。受光器はバーコードスキャナの受光器(例えばフォトダイオード)とすることができ、スキャンの強度プロファイルを1ラインずつ合成して原画像にする。好ましいのはカメラベースのコードリーダの画像センサである。この画像センサは、コードラインを捕らえる若しくは画像ラインの結合により平面的なコード画像を捕らえるためのラインセンサ、又は、マトリクスセンサとすることができ、マトリクスセンサの撮影画像をつなぎ合わせてより大きな原画像にすることもできる。複数のコードリーダ又はカメラヘッドの結合も考えられる。制御及び評価ユニット(これ自体はバーコードスキャナ若しくはカメラベースのコードリーダの一部であるか、制御装置としてそれに接続されたものとすることができる)において、コード画像領域を見つけ出すために本発明に係る方法が前記のいずれかの実施形態に従って実行される。その後、コード画像領域内のコードのコード内容を読み取るためにコード画像領域を外部へ送る、及び/又は、デコードする。
【0039】
以下、本発明について、更なる特徴及び利点をも考慮しつつ、模範的な実施形態に基づき、添付の図面を参照しながら詳しく説明する。
【図面の簡単な説明】
【0040】
図1】読み取り対象のコードが付いた物体を搬送するベルトコンベアの上方にコードリーダを取り付けた模範例の概略的な3次元全体図。
図2】(a)コードリーダにより撮影された模範的な原画像、(b)図2(a)に示した原画像内で古典的なセグメント化法で決定された、コード画像領域の第1候補、及び、(c)図2(a)に示した原画像内でニューラルネットワークを用いたセグメント化法で決定された、コード画像領域の第2候補。
図3】古典的なセグメント化法の模範的なフローチャート。
図4】ニューラルネットワークを用いたセグメント化法の模範的なフローチャート。
図5】コード画像領域を見つけ出すために古典的なセグメント化法の結果とニューラルネットワークを用いたセグメント化法の結果をマージするための模範的なフローチャート。
図6】(a)古典的なセグメント化法で決定された、コード画像領域の第1候補を改めて図2(b)と同様に示した第1の結果マップ、(b)ニューラルネットワークを用いたセグメント化法で決定された、コード画像領域の第2候補を図2(c)と同様に示した第2の結果マップ、及び、(c)図6(a)に示した第1の結果マップと図6(b)に示した第2の結果マップとのAND結合を示す第3の結果マップ。
図7】(a)図6(a)に示した第1の結果マップを原画像の情報を重ねない形に直して描いた図、(b)図7(a)に示した第1の結果マップの第1候補から連結成分法により生成した、繋がったブロブを示す図、(c)図7(b)に示したブロブのうち閾値サイズより小さいものを示す第4の結果マップ、及び、(d)図6(c)に示した第3の結果マップを図7(c)に示した第4の結果マップとOR結合した第5の結果マップ。
図8】(a)図6(b)に示した第2の結果マップを直接比較のために改めて示す図、(b)図7(d)に示した第5の結果マップを直接比較のために改めて示す図、(c)図8(a)に示した第2の結果マップのうち、第1候補又は小さい第1候補の位置にはない排他的な第2候補が識別された第6の結果マップ、及び、(d)図8(b)に示した第5の結果マップと図8(c)に示した第6の結果マップをOR結合した第7の結果マップ又は全結果マップ。
【発明を実施するための形態】
【0041】
図1はベルトコンベア12の上方に取り付けられた好ましい使用状況の光電式コードリーダ10を示している。ベルトコンベア12は矢印16で示したようにコードリーダ10の検出領域18を通過するように物体14を搬送する。物体14はその外側表面にコード領域20を持っており、これがコードリーダ10により検出されて評価される。このコード領域20は上面に付されているか、少なくとも上から見えるように付されている場合にのみコードリーダ10で認識できる。そこで、図1の描画から逸脱して、例えば側面又は底面に付されたコード22を読み取るために複数のコードリーダ10を異なる方向から取り付けることで、いわゆる全方向からの多重読み取りを可能にしてもよい。読み取りシステムにおける複数のコードリーダ10の配置は実際には読み取りトンネルとして実施することがほとんどである。このようにコードリーダをベルトコンベア付近に固定して用いることは実際に非常によくある。しかし、本発明は何よりもコードリーダ10そのもの若しくはその中で実行されるコードのデコード方法、又は、より詳しくはそのための前処理ステップに関するものであるから、本例を限定的なものとして解釈してはならない。
【0042】
コードリーダ10は搬送されている物体14及びコード領域20の画像データを画像センサ24で取得し、そのデータが制御及び評価ユニット26によって画像処理及びデコード法を用いて更に処理される。本発明にとって具体的な撮像法は重要ではないため、コードリーダ10はそれ自体公知である任意の原理により構成することができる。例えばその都度1ラインだけを捕らえる場合、ライン状の画像センサを用いてもよいしスキャン法によってもよいが、後者の場合、画像センサ24としてはフォトダイオード等の簡単な受光器で十分である。制御及び評価ユニット26は搬送運動の進行中に得られる複数のラインを結合して画像データにする。マトリクス状の画像センサを用いれば一度の撮影だけでより広い領域を捕らえることができる。ここでもまた複数の撮影画像の結合を搬送方向にもそれと交差する方向にも行うことができる。複数の撮影画像は連続的に及び/又は複数のコードリーダ10により撮影される。それらのコードリーダ10は例えば各々の検出領域18を合わせてようやくベルトコンベア12の幅全体をカバーするものであり、各コードリーダ10は全体画像の断片部分だけを撮影し、該断片部分が画像処理(Stitching)により結合される。個々の断片部分内でデコードを断片的にのみ行い、その後でコード断片を結合することも考えられる。
【0043】
コードリーダ10の仕事はコード領域20を認識してそこに付されたコードを読み取ることである。撮影された画像内のコード領域20乃至はそれに対応するコード画像領域の認識をセグメント化又は予備セグメント化とも呼び、もっと後で図2(a)~8(d)に基づいて詳しく説明する。
【0044】
コードリーダ10はインターフェイス28を通じて情報(読み取られたコード又は画像データ等)を出力する。制御及び評価ユニット26を、本来のコードリーダ10内、即ち図1に示したカメラ内に配置するのではなく、別個の制御装置として一又は複数のコードリーダ10に接続することも考えられる。その場合、インターフェイス28は内部と外部の制御及び評価を接続する働きもする。制御及び評価の機能はほぼ任意に内部と外部の部品に分配することができ、その際、外部の部品はネットワーク又はクラウドを通じて接続されていてもよい。これら全てをここではこれ以上区別せず、制御及び評価ユニット26はその具体的な実装に関わらずコードリーダ10の一部とみなす。制御及び評価ユニット26はFPGA(Field Programmable Gate Array)及びマイクロプロセッサ(CPU)等の複数の部品を備えることができる。特に、まだ説明していない、ニューラルネットワークを用いたセグメント化には、AIプロセッサ、NPU(Neural Processing Unit)、GPU(Graphics Processing Unit)等の特別なハードウェア部品を用いることができる。画像データの処理、特にセグメント化は、まだ画像データを読み込んでいる間又はストリーミングの間にオンザフライで、特に冒頭に挙げた特許文献5においてコードリーダのニューラルネットワークに関して説明されているように、行うことができる。
【0045】
図2(a)は、例えば図1のコードリーダ10で撮影されたり、任意の他の出所から得られたりする模範的な原画像を示している。背景に荷物があり、白いラベルが前面にあるのが分かる。ラベルには複数の光学コードを含む多数の文字がある。これから説明するセグメント化の目的は、コードのあるコード画像領域の場所を突き止めることである。
【0046】
図2(b)は第1の古典的なセグメント化の結果を示している。セグメント化により見つけ出された、コード画像領域又は関心領域(ROI)の第1候補が強調されている。それらは、後に導入される、ニューラルネットワークを用いた第2のセグメント化の第2候補を限定するための第1候補として示されている。見て分かるようにあまりに多くの第1候補があり、それらはまだ多数の誤検出のコード画像領域を含んでいる。
【0047】
図3は古典的なセグメント化法のフローチャートを示しており、その結果が図2(b)に模範的に例示されている。古典的なセグメント化は一般に、FPGAによっても実行できる比較的簡単な計算規則に基づいている。ここに描いた古典的なセグメント化は単に模範的なものと理解すべきであり、セグメント化のために元々知られているどのような画像処理法も用いることができるが、古典的なセグメント化法であるため、機械学習の方法を用いず、従って特にニューラルネットワークを用いないという制約がある。
【0048】
ステップS1では原画像がタイルに、即ち、例えば10×10又は他の画素数の画像部分に分割される。その数はX方向とY方向で異なっていてもよい。その後の処理はタイル毎に行うことができ、複数のタイルにわたる並列処理も可能である。
【0049】
ステップS2ではタイル毎にコントラストが特定される。なぜなら、コントラストの低い均質な領域はコードを含んでいないからである。コントラストの特定のために、既にオンザフライで、例えばFPGA上で、読み込まれた画素のグレースケール値とその2乗を合計することができる。そうすればこれらの合計値から改めて画素にアクセスすることなく平均値と標準偏差を求めることが可能であり、そのうち後者がコントラストの尺度となるからである。
【0050】
ステップS3では線に沿って、好ましくは互いに直交する2つの線から成るテスト十字線上で、明から暗又は逆の移行部が数えられる。これはコード要素間のエッジである可能性があり、コード画像領域内ではその最小数が期待される。
【0051】
ステップS4ではコントラストの評価を特にコントラスト閾値との比較により行う。コントラストが低すぎるタイルは拒絶される。それらはコード画像領域の第1候補ではない。この評価はステップS2でもうすぐに行うことができる。そうすればこのように削除されるタイルについてはそもそも明度エッジを特定する必要が全くなくなる。十分なコントラストを持つタイルでは明度エッジの数がエッジ閾値と比較され、あまりに数が少ないタイルは同様に拒絶される。最後に、バーコードを持つコード画像領域を見つけ出すための特別な別の基準として、テスト十字線の2本の線に沿った明度エッジの数を評価することで、多数の明度エッジを持つ優先方向があるか確認することが考えられる。はっきりした優先方向のないタイルはバーコードを含んでいないから、拒絶されるか、場合によっては更に撒き印刷、テキスト領域又は2次元コード画像領域として評価される。既に述べたように、図3は古典的なセグメント化の一例にすぎない。特に、例えば少なくとも直接隣接しているタイルを更に取り入れたタイル群の後分析等、追加のステップが考えられる。
【0052】
図2(c)はニューラルネットワークを用いた第2のセグメント化の結果を示している。これにより見つかった、コード画像領域又は関心領域(ROI)の第2候補が強調されている。古典的なセグメント化の第1候補に比べて第2候補は比較的少数しか決定されない。その代わり第2のセグメント化では、第1のセグメント化で見落とされ、目で見ても認識できないような非常にコントラストの低い第2候補が認識されている。
【0053】
図4は機械学習の方法を用いたセグメント化法の模範的なフローチャートを示しており、その結果が図2(c)に模範的に例示されている。これに特に適しているのはニューラルネットワークであり、特に深層ニューラルネットワーク若しくは畳み込みネットワーク(畳み込みニューラルネットワーク、CNN)である。
【0054】
ステップS5ではニューラルネットワークの入力層に原画像が渡される。図3及び図4を参照して説明した2つのセグメント化は連続して又は互いに並列に実行することができる。
【0055】
ステップS6ではニューラルネットワークが複数の層S7において入力からコード画像領域の第2候補を作る(推論)。単なる模範例として3つの層S7が描かれているが、ニューラルネットワークのアーキテクチャは限定すべきものではなく、前方又は後方への結合(フィードフォワード、フィードバック又は回帰)、層の省略(ResNets)等、通常のツールが利用可能である。畳み込みネットワークに特徴的なのは畳み込み層である。これは、原画像、又はより深い層においては先行層の特徴量マップを、局所フィルタで効果的に畳み込む。その際、フィルタをずらすステップを大きくすることにより解像度損失(ダウンサンプリング)を生じさせることができる(ストライド付き畳み込み、プーリング層)。解像度の低減、特に早期の層での低減は、そもそも十分高速に且つ限られたリソースで推論ができるようにするために望ましい。図に反してニューラルネットワークは畳み込み又はプーリングのない層を含むことができる。
【0056】
ニューラルネットワークは既知のコード画像領域を持つサンプル画像に基づいて予め訓練される(教師あり学習)。このようなサンプル画像は手動で評価することができる(ラベリング、注釈付け)。他方で、古典的なセグメント化と一緒に古典的なデコーダを用いてサンプル画像を評価し、実際に読み取ることができたコードに基づいてコード画像領域を過去にさかのぼって認識することも可能である。正に時間が切迫していないオフラインモードではこのような古典的な手段は非常に強力であるから、多数の訓練サンプルを自動的に生成することができる。
【0057】
ステップS7ではニューラルネットワークが推論を終了し、その出力に現れる特徴量マップから、求めるコード画像領域の第2候補が得られる。
【0058】
図3を参照して説明した古典的なセグメント化及び/又は図4を参照して説明したニューラルネットワークを用いたセグメント化に続いて、更に微細セグメント化を行うことができる。第1候補と第2候補は好ましくは結果マップ(ヒートマップ)の形で決定される。これは、タイル若しくはニューラルネットワークの出力に現れる最後の特徴量マップに対応する解像度の画像であり、従ってその画素はより解像度の高い原画像の一定の範囲を代表している。二値的な結果マップの場合、各画素は、原画像のうち代表されている画像部分内にコード画像領域があるか否かを表す。あるいは、画素の数値がコードの蓋然性の評価(スコア値)及び/又は特定されたコード型を表すものであってもよい。第1候補は第1の結果マップを成し、第2候補は第2の結果マップを成す。図5を参照して更に説明するように、2つのセグメント化の結果は融合され、その結果得られるコード画像領域も別の結果マップの形で表現することができる。
【0059】
結果マップ上、しかもとりわけ個々の、複数の、又は全ての結果マップ上で、任意選択で更に後段のアルゴリズムを実行することができる。一例は優先方向に基づくバーコードの識別である。別の例は微細セグメント化である。その場合、コード画像領域はもはやタイル又は特徴量マップという粗い解像度ではなく、より精細な解像度、最大では元の原画像の解像度で特定される。これはデコードの試行と交互に作用させながら繰り返し行うことできる。なぜなら、コード情報を読み取るという目標が達成されれば、それ以上セグメント化を高精細にすることはもはや自己目的にすぎなくなるからである。逆に、実際には処理中の画像部分にコードがないにも関わらず微細セグメント化とデコーダがコストをかけて様々な試みを行うことを、できるだけエラーのないセグメント化によって防止すべきである。
【0060】
見つかったコード画像領域のエラー率を低くするため、2つのセグメント化の結果を融合させる。ここでの出発点は、2つのセグメント化が全く異なるエラー挙動を示すということである。古典的なセグメント化はそのタイルを用いて狭く限定された局所的な領域だけを評価する。この方法は微細な構造を評価するため、非常に感度が高い。これは部分的にパラメータ設定可能であるが、それ故に手動での調整も必要である。高い感度は、一方では望ましい。なぜなら、それにより小さいコード画像領域でもなお認識されるからである。他方で、古典的なセグメント化は、例えば文字、ロゴ又は荷物テープのようなコードに似た背景構造と本物のコード領域とをうまく区別できない可能性がある。故に誤検出のエラー数が比較的大きくなる。
【0061】
第2のセグメント化は基本的に原画像全体を評価する。特定の畳み込み層により、形態(希釈、ストライド、プーリング)に応じて解像度を低減させる。これは、出力に現れる特徴量マップの解像度がタイルに相当するものになることを暗に意味する。もっとも、この特徴量にはもっと広い近傍の情報が取り込まれる。背景の構造と本物のコード領域との識別性能は高く、第2候補には誤検出のコード画像領域はないに等しい。コントラストの低いコード並びに様々なマーキング技術のコード(金属に刻印されたコード等)も確実に認識される。ただし、解像度の低減を行う層が早ければ早いほど(リソースが限られていることから、これは非常に早いのが普通である)、微細な構造を見落とす恐れが大きくなる。故にニューラルネットワークは検出漏れエラーを起こしやすい。もっともそれはニューラルネットワークの内在的な問題ではなく、早めに解像度の低減を行うコードリーダに応用するために現実のハードウェア上で実装することに因るものである。
【0062】
本発明では、2つのセグメント化の各々の結果を一緒に評価することにより、両方のセグメント化の相補的なエラー挙動を利用してコード画像領域を見つけ出す。このようなインテリジェントな融合の実施形態をこれより説明する。この融合は結果マップのレベルで行うことが好ましく、そのように説明するが、他の表現で相応のやり方をすることも同様に可能である。また、結果マップは二値化されていること、即ち各画素において、その位置にコード画像領域乃至はその候補が決定されているか否かを示していることが好ましい。若しくは、結果マップが適宜の確からしさのスコア値及び/又は分類情報(コード型等)を含んでいてもよい。
【0063】
図5はコード画像領域を見つけ出すために古典的なセグメント化法の結果とニューラルネットワークを用いたセグメント化法の結果をマージするための模範的なフローチャートである。そのフローを図6(a)から図8(d)に純粋に模範例として図2(a)の原画像の処理で例示する。
【0064】
ステップS10ではコード画像領域の第1候補が第1の古典的なセグメント化で決定される。これは模範的に図3を参照して説明した通りである。図2(a)に示した原画像に適用すると、図6(a)に示した第1の結果マップが得られる。ここでは純粋に分かりやすさために原画像の画像情報がまだ重ねられているが、この画像情報は第1の結果マップの一部ではない。図6(a)は図2(b)に相当する。
【0065】
ステップS11ではコード画像領域の第2候補が第2のセグメント化で決定される。これは機械学習の方法(特にニューラルネットワーク)を用いるものであり、模範的に図4を参照して説明した通りである。図2(a)の原画像に適用すると、図6(b)に示した第2の結果マップが得られる。図6(b)は図2(c)に相当する。
【0066】
図示しない任意選択のステップで第1及び/又は第2の結果マップの正規化を必須とすることができる。古典的なセグメント化におけるタイルの大きさとニューラルネットワーク層のダウンサンプリングによっては2つの結果マップの画素が異なる大きさの画像領域を代表している場合がある。それ故、その場合は一方又は両方の結果マップの拡大縮小を行うことでそれらを同じ解像度にする。
【0067】
ステップS12で今度はステップS10とS11で見つかった第1候補と第2候補(特に第1及び第2の結果マップ)の融合が行われる。それ以降の一連のステップは全て通り抜けることが好ましいが、一般には各ステップは任意選択とみなすべきである。その場合、融合の結果、所望の目的の一部しか達成されないが、それでも古典的な方法だけ又は機械学習の方法だけで作用するセグメント化に比べれば依然としてはるかに良い。
【0068】
4つの目的を挙げることができる。これらは一緒に達成されることが好ましいが、それらの目的の一部を実現しただけでも既に有利である。第1の目的は、感度の良い第1の古典的なセグメント化でしか見つけられない小さいコード画像領域を失わないことである。第2の目的は、機械学習の方法を用いた第2のセグメント化だけで排他的に見つけられる大きめのコード画像領域を失わないことである。第3の目的は複数のコード画像領域の合体を避けることである。第4の目的として、誤検出のコード画像領域をできるだけ多く削除すべきである。
【0069】
最初のアプローチでは、ステップS12においてステップS10とS11の第1候補と第2候補が論理的にAND結合される。二値的な第1及び第2の結果マップのレベルではそれは画素毎の論理的AND結合であり、他の表現では、2つのセグメント化でそれぞれコード画像領域の存在が確認されることを意味する2重の条件を付けることになる。
【0070】
図6(c)はステップS12の結果を第3の結果マップで例示している。これは図6(a)に示した第1の結果マップと図6(b)に示した第2の結果マップのAND結合で得られたものである。第1の結果マップと第2の結果マップは後のステップでも利用できるように別個に保存したままにしておくことが好ましい。第3の結果マップを見ると、先に述べた第1の目的に反して、第1候補のかなりの部分が第1の結果マップから失われていることが分かる。更に、第2の目的にも反して、2つの第2候補の一方が第2の結果マップから失われている。これは例えば古典的なセグメント化のコントラスト基準により選び捨てられた低コントラストで面積の広いコードである。前述の第3及び第4の目的は達成される。
【0071】
ここで、結果マップが単に二値的ではなくスコア値を保持している場合、任意選択で、第3の結果マップにおいて見つかったコード画像領域に高めのスコア値を割り当てることができる。なぜならここでは両方のセグメント化による確認が成されているからである。このスコア値は後で生成される各結果マップに渡されるか、該マップ内で更に差引勘定される。後段のデコーダはこれを優先順位付けに利用することで、最も見込みのあるコード画像領域を優先的に評価したり、あまり見込みのないコード画像領域に過大な計算時間を浪費しないようにしたりすることができる。
【0072】
ステップS13からS15においては、第1の目的を追求するため、今度は第3の結果マップ(即ち2つのセグメント化のAND結合)に古典的なセグメント化で見つかった小さい第1候補が付け加えられる。図7(a)は第1の結果マップを、今度は原画像の画像情報を重ねていないきれいな描画で再び示している。
【0073】
ステップS13ではまず例えば連結成分のアルゴリズムを用いて第1候補が連結成分(いわゆるブロブ)に拡張される。ブロブは、第1の結果マップ中の繋がった画素は同じコード画像領域を表すという直感的な仮定の下、繋がった画素群を描き出す。図7(a)に示した第1の結果マップにおけるブロブを図7(b)に示す。
【0074】
ステップS14では、小さい第1候補だけを特別に維持するために、ブロブにサイズフィルタを適用する。サイズは例えば面積、画素数、エッジ長、直径又は他の尺度で決定し、閾値サイズと比較することができる。このサイズフィルタの背後にある理由付けは、大きめのコード画像領域は第2のセグメント化により確実に認識されているから、既に第3の結果マップに存在している、ということである。この点で高い価値があるとみなされる第2の結果マップひいては第3の結果マップの情報の質を落とさないようにするため、大きめのブロブは考慮の対象外としておくべきである。適切にフィルタリングされたブロブ又は小さい第1候補が第4の結果マップを成す。これを図7(c)に示す。
【0075】
ステップS15では小さい第1候補がこれまでの結果、即ち(元の)第1候補と第2候補のAND結合に転写される。これは特に図6(c)に示した第3の結果マップと図7(c)に示した第4の結果マップのOR結合と理解することができ、その結合の結果、第5の結果マップが得られる。図7(d)にそれを示す。第5の結果マップは、実装においては、修正された第3の結果マップとすることができ、第3及び第5の結果マップは必ずしも別個に保存する必要はなく、第4の結果マップももはや絶対に必要とされるわけではない。結果マップがスコア値を保持しており、二値的ではない場合は、付け加えられた小さい候補に適切なスコア値を与えることができる。これで第1の目的も達成される。
【0076】
ステップS16からS18では、第2の目的を追求するために、これまでの結果に、機械学習の方法を用いた第2のセグメント化だけで排他的に決定された第2候補が付け加えられる。これは例えば、古典的なセグメント化で見落とされる低コントラストのコードである。ステップS13及びS15、そしてS16からS18は、累積的に適用することが好ましいが、順序を入れ替えたり、単に個別に適用したりしてもよい。
【0077】
ステップS16からS18の出力状況をより良く理解するため、図8(a)に比較のために図6(b)の第2の結果マップを再び示し、図8(b)にこれまでの結果、つまり図7(c)に示した第5の結果マップを再び示している。
【0078】
ステップS16では、例えば連結成分のアルゴリズムで、第2候補から連結成分又はブロブが生成される。これはステップS13と同様であるが、今度は第2候補若しくは第2の結果マップが対象である。図示した例では第2候補の数が少なく、明瞭に分離されているため、このステップでは第2の結果マップに目立った変化は生じない。故にブロブを更に別の図で示すことはしない。内部的には完全に違いがある。なぜなら、今や2つの候補があることが分かっているからである。
【0079】
ステップS17では各ブロブに対して位置(例えばその重心)を特定する。それからブロブ毎にその位置において既にコード画像領域が認識されたか、即ち、該当の画素が図8(b)に示した第5の結果マップ中のその位置に既に設定されているかを調べる。既に分かっているコード画像領域の位置にある第2候補は拒絶される。新たな位置にある第2候補のみ、即ち、機械学習の方法を用いたセグメント化だけで見つかった第2候補のみが、排他的な第2候補となり、それらだけが保持される。図8(c)はこのステップを例示している。下の第2候補は既に分かっていたので拒絶される。右上の円で囲んだ第2候補だけが新たな場所にあるから、排他的な第2候補である。排他的な第2候補だけを含む第6の結果マップを生成することができる。従って、図8(c)とは異なり、第6の結果マップでは下の排他的ではない第2候補が削除されている。
【0080】
ステップS18では排他的な第2候補がこれまでに見つかったコード画像領域に付け加えられる。これは特に図8(b)に示した第5の結果マップと第6の結果マップのOR結合と理解することができる。ここで、第6の結果マップは図8(c)に示した円で囲んだ排他的な候補だけを含んでいる。その結果、第7の結果マップ又は全結果マップが得られる。これを図8(d)に示すが、当然ながら、分かやすくするために排他的な第2候補を囲んでいる円環は結果マップの一部ではない。
【0081】
ステップS16からS18は、上述した第2の目標も達成されること、即ち機械学習の方法を用いる第2のセグメント化により見つかったコード画像領域が失われないことを保証する。一見すると、それには図8(a)に示した第2の結果マップと図8(b)に示した第5の結果マップの単なるOR結合で十分ではないかと思われるかもしれない。しかしそうすると第3の目的に反して、古典的なセグメント化により適切に分離される小さいコード画像領域が再び一体化されてしまう恐れがある。これはいわゆる倉庫コード、即ち、僅かな隙間を空けて上下に配置された複数のバーコードを見ればよく分かる。第1のセグメント化はそれらのバーコードを分離することができる。第2のセグメント化はそれを、場合によっては初めのステップS11で既に、又はもっと後でステップS16においてブロブを成長させることにより、単に1つの共通の領域と認識してしまう可能性がある。OR結合するとそれらのバーコードが今度は第3の目的に反して単一のコード画像領域に統合されてしまう。ステップS16からS18の処置がこれを防止する。なぜなら、その倉庫コードの場所にある第2候補又はそのブロブは排他的な第2候補ではないからである。
【0082】
図8(d)に示した全結果マップでは、2つのセグメント化がAND結合により最初から一致していた1つのコード画像領域を越えて、第1のセグメント化の小さいコード画像領域も保持されたままであると同時に、第2のセグメント化の低コントラストの排他的な第2候補を失うことなく、面積の大きい誤検出のコード画像領域が削除されていることがよく分かる。従ってコードの見落としはなく、検出漏れエラーの率は極めて低く、本例ではゼロである。残っている誤検出のコード画像領域は少なくなり、しかもそれらは小さい。とりわけ問題になりかねなかったのは削除された大きな誤検出のコード領域である。なぜなら、そのような大きめの文字領域、ロゴ、グラフィック、木目は大量の計算を要し、しかもその高いコストが最終的に無駄になるからである。
【0083】
任意選択の更なるステップとして、住所及びテキストの領域を出力して、それを例えば後段のテキスト認識(OCR、光学的文字認識)に渡すことができる。ここでの着想は、機械学習を用いる第2のセグメント化が実際には選択的に光学コードにのみ反応し、文字には反応しないということであり、これは実際に十分に達成される。それ故、全ての第1候補は潜在的なテキスト領域であるが、テキスト領域は同時に第2候補にはならない。第1のセグメント化が例えばステップS3及びS4にあるように優先方向に基づいてバーコードを認識する場合、そのような領域を更に除外してもよい。結果マップを用いる実装において、それは第1の結果マップ(又はバーコード分を除去した第1の結果マップ)と第2の結果マップとのAND-NOT結合として説明することができる。続いて小さい面積のものを更に除去することができる。なぜならテキストには普通、一定の面積が必要だからである。テキスト領域はOCR結果マップの形で処理して出力することができる。テキスト領域に対し、方向の決まった枠を見積もることができる。場合によっては、既に成功したデコードに基づいてその方向を更に修正することができる。なぜならコードとテキストは互いに整列しており、方向が揃っており、内容が合っていることが通例だからである。或いは、隣接するコードからテキスト領域をそのサイズ、向き及び内容に関して逆推論することも考えられる。
【0084】
図5を参照して説明した、2つのセグメント化の結果を融合する非常に有利な実施形態の代わりに別の実施形態も考えられる。例えば、第1候補と第2候補をAND結合するだけにすることができる。これによれば、言わば図5に示した方法がステップS12で中断される。これにより、信頼できるコード画像領域だけが残り、それをより短いデコード時間で処理できるが、コード(特に小さいコード)を見落とす恐れがある。例えばとにかく大きなコードだけを待ち受けるような応用においてはそれを完全に許容することができる。或いは、第1候補と第2候補をOR結合するだけにすることができる。これによれば、図5に示した方法においてステップS12のANDをORに置き換える修正が行われ、そこで中断される。これによりコード画像領域が最大限に得られるから、十分なデコード時間が利用できてしかも非常に高い読み取り率を得ようとする場合に有利である。別の代案では、第2のセグメント化の結果を単に誤検出のコード画像領域に対するフィルタとして利用することができる。例えば、第1の古典的なセグメント化だけを行った後で微細セグメント化を行うとあまりに多くのコード画像領域が生成される場合、第2のセグメント化で確認されないコード画像領域を特に動的に削除する。更に別の代案では2つのセグメント化の結果を並列に又は連続して微細セグメント化及びデコードまで入念に調べる。これは明らかに所要時間が非常に長くなるが、最高の読み取り率を保証する。
【0085】
列挙した各代案により、利用可能なデコード時間及びそれに応じた目標の所要時間に関する制御が可能になる。必要なデコード時間と達成される読み取り率の昇順で以下の組み合わせを適用できる。即ち、純粋なAND結合、第2のセグメント化のコード画像領域のみの使用、図5を参照して説明した融合、第1のセグメント化のコード画像領域のみの使用(場合により第2のセグメント化を利用して動的にフィルタリング)、第1のセグメント化のコード画像領域のみの使用、純粋なOR結合、第1及び第2のセグメント化の別々の結果の2重評価である。
図1
図2
図3
図4
図5
図6
図7
図8
【外国語明細書】