(57)【要約】【課題】比較的小さな容量の画像メモリを有するが、読取失敗の確率が低い二次元コード読取装置の実現。【解決手段】二次元撮像装置11と、二次元撮像装置が撮像した画像データのうち、二次元撮像装置の撮像範囲40より狭い記憶範囲41の画像データを記憶するメモリ13,33と、撮像により取得した記憶範囲の画像データを解析し、画像に含まれる二次元コードを解析する解析部50と、を有し、解析部は、記憶範囲における二次元コードの領域を探索するコード探索部51と、記憶範囲の画像データでの二次元コードの解析に失敗した時に、コード探索部が探索した二次元コードの領域の位置に基づいて、次の撮像における記憶範囲の撮像範囲における位置を制御する記憶範囲制御部53と、を有する二次元コード読取装置。【選択図】図８
2016148925.tif 000002
【特許請求の範囲】
【請求項１】
二次元撮像装置と、
前記二次元撮像装置が撮像した画像データのうち、前記二次元撮像装置の撮像範囲より狭い記憶範囲の画像データを記憶するメモリと、
撮像により取得した前記記憶範囲の画像データを解析し、画像に含まれる二次元コードを解析する解析部と、を備え、
前記解析部は、
前記記憶範囲における二次元コードの領域を探索するコード探索部と、
前記記憶範囲の画像データでの二次元コードの解析に失敗した時に、前記コード探索部が探索した前記二次元コードの領域の位置に基づいて、次の撮像における前記記憶範囲の前記撮像範囲における位置を制御する記憶範囲制御部と、を備えることを特徴とする二次元コード読取装置。
【請求項２】
前記コード探索部は、前記記憶範囲を複数のブロックに分割し、前記二次元コードの画像が含まれるブロックをコードブロックと判定する請求項１に記載の二次元コード読取装置。
【請求項３】
前記記憶範囲制御部は、前記コードブロックの集合から二次元コードの領域を決定し、次の撮像で、決定した前記二次元コードの領域が前記記憶範囲内に入るように、前記記憶範囲の前記撮像範囲における位置を制御する請求項２に記載の二次元コード読取装置。
【請求項４】
前記記憶範囲制御部は、前記コードブロックの集合の中央位置を推定し、推定した前記中央位置が前記記憶範囲の中心に位置するように制御する請求項３に記載の二次元コード読取装置。
【請求項５】
前記記憶範囲制御部は、前記コードブロックの集合の中央位置の推定を、推定した前記中央位置を含む前記ブロックの中心が前記記憶範囲の中心に位置するように制御する請求項３に記載の二次元コード読取装置。
【請求項６】
前記記憶範囲制御部は、前記記憶範囲を複数のブロックに分割し、前記二次元コードの画像の存在確率が高いブロックを中央ブロックと判定し、次の撮像で、決定した前記中央ブロックの中心が前記記憶範囲の中心になるように、前記記憶範囲の前記撮像範囲における位置を制御する請求項１に記載の二次元コード読取装置。
【請求項７】
前記記憶範囲制御部は、前記記憶範囲を、隣接する前記ブロックを複数含むグリッド領域に分割し、前記グリッド領域単位で、前記記憶範囲の前記撮像範囲における位置を制御する請求項３から６のいずれか１項に記載の二次元コード読取装置。
【請求項８】
二次元撮像装置が撮像した画像データのうち、二次元撮像装置の撮像範囲より狭い記憶範囲の画像データをメモリに記憶し、記憶範囲の画像データを解析し、画像に含まれる二次元コードを解析する二次元コード読取方法であって、
前記記憶範囲における二次元コードの領域を探索し、
前記記憶範囲の画像データでの二次元コードの解析を行い、解析に失敗した時に、探索した前記二次元コードの領域の位置に基づいて、次の撮像における前記記憶範囲の前記撮像範囲における位置を制御する、ことを特徴とする二次元コード読取方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二次元コード読取装置および方法に関する。
【背景技術】
【０００２】
現実の物体に情報を付加する手段としてバーコードが用いられている。一次元バーコードは商品の価格に関連付けられ、レジの作業効率の向上に寄与している。
一方、二次元コードは一次元のバーコードに比較して多くのデータを格納することができる。そのため、商品にＵＲＬなど比較的大きなデータを関連付け、消費者に対し商品案内を提供したり、作業者向けに作業支援のためのデータを格納したりするのに使用されている。
【０００３】
二次元コードリーダー（二次元コード読取装置）は、カメラ（撮像装置）とマイクロプロセッサを用いて構成される。昨今の半導体技術の向上は、構成部品の性能向上と価格低下をもたらしており、二次元コードリーダーをウェアラブル（身に着けることができる）実装することも可能となっている。コードリーダーがウェアラブルになることで、使用者の両手が自由になる。そのため、二次元コードを使用する現場の作業者の作業負荷の低減に起用することが期待される。
【０００４】
プロセッサはカメラから得られた画像から二次元コードを解析し、コードデータを取得する。搭載されるメモリは、カメラから得られる画像を格納するカメラ画像格納領域、カメラを制御するためのカメラ制御情報格納領域、画像を解析するためのメインプログラム格納領域、およびメインプログラムが一時的にデータを格納するための作業領域を有する。
【０００５】
二次元コードリーダーは、使用者の指示に応じて画像を撮影し、撮影した画像を解析し、解析に成功すればコードデータを出力し、解析に失敗すれば、規定回数までは連続して画像の撮影および解析を繰り返す。解析失敗が規定回数を超えたら、二次元コードリーダーは、入力待ち状態となる。
【０００６】
ウェアラブル機器上に二次元コードリーダーを実装した場合、以下に示す理由で処理可能な二次元コードの画像を取得することが難しい。
【０００７】
１つの理由は、撮影内容をリアルタイムに確認することができないことである。ウェアラブル機器は小型・軽量であることが望まれ、大容量のバッテリの搭載が難しいので、ディスプレイを搭載することができず、使用者が撮影された画像を確認できない。
【０００８】
そこで、撮影位置を示すガイド用光の照射部を設け、位置合わせの指針を使用者に提供することが提案されているが、上記のように大容量のバッテリの搭載が難しいので、ガイド用の光源を搭載する余裕がない。
【０００９】
もう１つの理由は、画像メモリ（カメラ画像格納領域）が小さいことである。ウェアラブル機器は小型・軽量であるため、大容量のメモリの搭載は、大きさおよびバッテリ容量の関係で難しい。近年、撮像装置の画素数は飛躍的に増加しているが、上記の理由で画像メモリの容量を増加させるのが難しく、画像メモリが記憶できる記憶範囲は、撮像範囲より狭く、画像メモリは、生成された撮像範囲の画像の一部しか記憶できない。解析は、記憶範囲に記憶された画像について行われるので、二次元コードの画像が撮像範囲内に入らない場合はもちろん、撮像範囲内に入っても記憶範囲内に入らない場合には解析に失敗することになる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第２９３８３３８号公報
【特許文献２】特開２０００−１５７８１２号公報
【特許文献３】特開２００４−１５７８１２号公報
【特許文献４】特開２００５−０８４８９０号公報
【特許文献５】特許第４４１９２６９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
撮影した画像での解析に失敗すると、使用者に何度も撮影をリトライさせることになり、作業の負担となる。
【００１２】
そのため、比較的小さな容量の画像メモリを有する二次元コード読取装置でも、確実に二次元コードの解析に成功することが望まれている。
【課題を解決するための手段】
【００１３】
本発明の第１の態様の二次元コード読取装置は、二次元撮像装置と、メモリと、解析部と、を有する。メモリは、二次元撮像装置が撮像した画像データのうち、二次元撮像装置の撮像範囲より狭い記憶範囲の画像データを記憶する。解析部は、撮像により取得した記憶範囲の画像データを解析し、画像に含まれる二次元コードを解析する。解析部は、コード探索部と、記憶範囲制御部と、を有する。コード探索部は、記憶範囲における二次元コードの領域を探索する。記憶範囲制御部は、記憶範囲の画像データでの二次元コードの解析に失敗した時に、コード探索部が探索した二次元コードの領域の位置に基づいて、次の撮像における記憶範囲の撮像範囲における位置を制御する。
【００１４】
本発明の第２の態様の二次元コード読取方法は、二次元撮像装置が撮像した画像データのうち、二次元撮像装置の撮像範囲より狭い記憶範囲の画像データをメモリに記憶し、記憶範囲の画像データを解析し、画像に含まれる二次元コードを解析する。二次元コード読取方法によれば、記憶範囲における二次元コードの領域を探索する。さらに、記憶範囲の画像データでの二次元コードの解析を行い、解析に失敗した時に、探索した二次元コードの領域の位置に基づいて、次の撮像における記憶範囲の撮像範囲における位置を制御する。
【発明の効果】
【００１５】
実施形態によれば、比較的小さな容量の画像メモリを有するが、読取失敗の確率が低い二次元コード読取装置が実現される。
【図面の簡単な説明】
【００１６】
【図１】図１は、二次元コードリーダーの構成を示すブロック図である。
【図２】図２は、ウェアラブルなコードリーダーに搭載されるカメラ（撮像装置）の構成例を示す図である。
【図３】図３は、メモリの内容を示す図である。
【図４】図４は、メモリのカメラ画像格納領域のカメラの撮像面の撮像範囲に対する関係を示す図である。
【図５】図５は、二次元コードリーダー全体の処理を示すフローチャートである。
【図６】図６は、二次元コード解析処理の詳細を示すフローチャートである。
【図７】図７は、撮像範囲および記憶範囲に対する二次元コードの撮影位置の例を示す図である。
【図８】図８は、実施形態の二次元コードリーダーにおいて、プロセッサにより実現される解析部の機能ブロック図である。
【図９】図９は、実施形態の二次元コード解析処理の詳細を示すフローチャートである。
【図１０】図１０は、撮像面（撮像範囲）および画像の座標系を示す図である。
【図１１】図１１は、探索処理を示すフローチャートである。
【図１２】図１２は、複数のグリッドに分割された記憶範囲を示す図である。
【図１３】図１３は、グリッドに分割した例を示す図である。
【発明を実施するための形態】
【００１７】
実施形態の二次元コードリーダー（二次元コード読取装置）を説明する前に、一般的な二次元コード読取装置について説明する。
【００１８】
昨今の半導体技術の向上は、構成部品の性能向上と価格低下をもたらしており、二次元コードリーダーをウェアラブル（身に着けることができる）実装することも可能となっている。コードリーダーがウェアラブルになることで、使用者の両手が自由になる。そのため、二次元コードを使用する現場の作業者の作業負荷の低減に起用することが期待される。
【００１９】
図１は、二次元コードリーダーの構成を示すブロック図である。
二次元コードリーダーは、カメラ（撮像装置）１１と、マイクロプロセッサ１２と、メモリ１３と、ＤＭＡコントローラ１４と、外部通信モジュール１５と、外部入出力部１６と、以上の部分を接続するバス１７と、を有する。言い換えれば、二次元コードリーダーは、カメラと、コンピュータと、を有する。
【００２０】
図２は、ウェアラブルなコードリーダーに搭載されるカメラ（撮像装置）の構成例を示す図である。
【００２１】
カメラ１１は、レンズ２１と、撮像素子２２と、コントローラ２４と、接続ケーブル２５と、を有する。レンズ２１は、外部の物体１００の光学像を撮像素子２２の撮像面２３上に投影する。撮像素子２２は、撮像面２３上に投影された光学像を電気信号に変換する。コントローラ２４は、撮像面２３の矩形の撮像領域における光強度に対応する電気信号をラスタ順に読み取り画像データに変換した上で、接続ケーブル２５を通してコードリーダーの本体部（メモリ１３）へ転送する。
【００２２】
メモリ１３は、プロセッサ１２に画像解析を行わせるプログラムやデータを格納する。
図３は、メモリの内容を示す図である。
【００２３】
メモリ１３の容量は、メインプログラム格納領域３１と、カメラ制御情報格納領域３２と、カメラ画像格納領域３３と、メインプログラム作業領域３４と、に分割されて使用される。カメラ画像格納領域３３は、カメラ１１から得られる画像データを格納する。カメラ制御情報格納領域３２は、カメラを制御するためのカメラ制御情報を格納する。メインプログラム格納領域３１は、プロセッサ１２に画像を解析する処理を行わせるプログラムを格納する。メインプログラム作業領域３４は、メインプログラムの動作途中で生成されるデータを一時的に格納する。メモリ１３は、ＳＲＡＭ (Static RAM)、ＤＲＡＭ(Dynamic RAM) などの揮発性のメモリ、フラッシュ(Flash)メモリなどの不揮発性メモリ、あるいは一部が不揮発性で一部が揮発性の構成をとる場合も考えられる。
【００２４】
ＤＭＡコントローラ１４は、カメラ１１から得られる画像データを読み取り、メモリ１３のカメラ画像格納領域３３に書き込む。
プロセッサ１２は、カメラ画像格納領域３３に書き込まれた画像データから二次元コードを解析し、コードデータを取得する。
【００２５】
外部入出力部１６は、ボタンやスイッチ、電源オン（ＯＮ）状態表示用のＬＥＤに接続される。
外部通信モジュール１５は、二次元コードリーダーと外部のシステムとを接続するモジュールである。通信形態は限定されないが、ＵＳＢ、Bluetooth（登録商標）などが使用される。
【００２６】
図４は、メモリのカメラ画像格納領域のカメラの撮像面の撮像範囲に対する関係を示す図である。
ウェアラブル機器は小型・軽量であるため、大容量のメモリの搭載は、大きさおよびバッテリ容量および演算処理量の増加の関係で難しい。近年、撮像装置の画素数は飛躍的に増加しているが、上記の理由で画像メモリの容量を増加させるのが難しく、図４に示すように、画像メモリが記憶できる記憶範囲は、撮像範囲より狭く、画像メモリは、生成された撮像範囲の画像の一部しか記憶できない。解析は、記憶範囲に記憶された画像について行われるので、二次元コードの画像が撮像範囲内に入らない場合はもちろん、撮像範囲内に入っても記憶範囲内に入らない場合も解析に失敗することになる。図４では、記憶範囲の中心と撮像範囲の中心が一致する例が示されるが、記憶範囲の撮像範囲内における位置は、任意に設定可能である。
【００２７】
図５は、二次元コードリーダー全体の処理を示すフローチャートである。
処理は、全体では、電源が供給されている間は無限ループの構造になっている。
ステップＳ１で、外部入出力１６による指示があるまで待機しており、指示があればステップＳ２に進む。
【００２８】
ステップＳ２で、指示に応じて、カメラ１１から画像を読み取って、解析を行い、ステップＳ３に進む。
ステップＳ３で、解析に成功したか、失敗したかを判定し、成功すればステップＳ４に進み、失敗すればステップＳ２に戻る。ここで、解析に失敗した場合のステップＳ２とＳ３の繰り返しは、規定回数までは連続して行い、解析失敗が規定回数を超えた場合にもステップＳ４に進むものとする。
【００２９】
ステップＳ４で、二次元コードリーダーのホスト装置に解析結果を送信する。すなわち、解析成功の場合には解析した二次元コードのコードデータを、解析失敗が規定回数を超えた場合には解析失敗を、通知する。二次元コードリーダーが解析結果を表示する等の出力装置を有する場合には、出力装置から解析結果を出力する。
【００３０】
図６は、二次元コード解析処理の詳細を示すフローチャートである。
図６に示すステップのうち、コード探索（Ｓ１３）、コード正規化（Ｓ１５）、コード解読（Ｓ１７）の３つが、二次元コード解析処理の主ステップである。
【００３１】
ステップＳ１１で、初めにカメラ１１を初期化して、画像取得の大きさ、撮像素子のホワイトバランス、ガンマ値などを設定する。
ステップＳ１２で、カメラ１１で撮影を行い、ＤＭＡコントローラ１４を用いて撮影したカメラ画像格納領域３３に転送し、画像を取得する。
【００３２】
ステップＳ１３で、撮影画像から二次元コードがどのあたりに写っているのかを探索する。
ステップＳ１４で、ステップＳ１３において二次元コードを探し出すことができたかできないかを判定し、探索が成功した場合にはステップＳ１５に、探し出すことができなかった場合には、ステップＳ２０に進む。
【００３３】
ステップＳ１５で、探索に成功し、二次元コードが映っている場所がわかれば、コードを正規化する。正規化とはコードを正しい位置に回転し、コードの白黒の情報を０、１の内容に置き換えることである。
【００３４】
ステップＳ１６で、ステップＳ１５において二次元コードの正規化に成功したかを判定し、正規化が成功した場合にはステップＳ１７に、正規化できなかった場合には、ステップＳ２０に進む。
【００３５】
ステップＳ１７で、正規化した二次元コードの情報を基にコードを解読する。解読の結果、誤り検知に引っかかれば解析失敗であり、誤り検知に引っかからなければ解析成功である。
【００３６】
ステップＳ１８で、ステップＳ１７において二次元コードの解析に成功したかを判定し、解析が成功した場合にはステップＳ１９に、解析できなかった場合には、ステップＳ２０に進む。
【００３７】
ステップＳ１９で、解析成功を返す。
ステップＳ２０で、解析失敗を返す。
ステップＳ１９およびＳ２０の解析成功か解析失敗は、解析結果として送信される。
【００３８】
二次元コードリーダー（読取装置）の構成および解析処理については、特許文献１等に記載され、広く知られているので、これ以上の説明は省略する。
【００３９】
ウェアラブル機器上に二次元コードリーダーを実装した場合、以下に示す理由で処理可能な二次元コードの画像を取得することが難しい。
【００４０】
１つの理由は、ウェアラブル機器は小型・軽量であることが望まれ、大容量のバッテリの搭載が難しいので、ディスプレイを搭載することができず、使用者が撮影された画像をリアルタイムに確認することができないことである。このため、成功するまで何度も撮影と解析を繰り返すことになり、規定回数内に解析に成功しないと、読取失敗となり、使用者に何度も撮影をリトライさせることになり、作業の負担となる。
【００４１】
そこで、特許文献４は、撮影位置を示すガイド用光の照射部を設け、位置合わせの指針を使用者に提供することを提案しているが、上記のように大容量のバッテリの搭載が難しいので、ガイド用の光源を搭載する余裕がない。
【００４２】
もう１つの理由は、前述のように、画像メモリ（カメラ画像格納領域）が小さいことである。ウェアラブル機器は小型・軽量であるため、大容量のメモリの搭載は、大きさ、バッテリ容量および処理量増加の関係で難しい。撮影した二次元コードの画像が、図４の記憶範囲内に入らない場合には、解析失敗になる。
【００４３】
以上２つの理由で、ウェアラブル機器に搭載する二次元コードリーダー（読取装置）は、二次元コードの画像を的確に撮影して解析するのが難しく、何度も読取に失敗するため、作業の負担となっていた。これは、ウェアラブル機器に搭載されるものに限定されず、ディスプレイを搭載しておらず、画像メモリが小さい二次元コードリーダーであれば、同様の問題を有する。
【００４４】
以下に説明する実施形態の二次元コードリーダー（読取装置）は、規定回数内に解析に成功する確率を向上し、使用者の作業負担を軽減する。
【００４５】
上述の問題を解決するため、図４に示した撮像範囲と記憶範囲の関係に着目する。
図２のカメラ１１において、レンズ２１を通して撮像素子２２の撮像面２３に写った像は、ＤＭＡコントローラ２４を経由して、図３のカメラ画像格納領域３３に転送される。このとき、すべての撮像素子２２の撮像面２３に写った情報がカメラ画像格納領域３３に転送されるわけではなく、カメラ画像格納領域３３に記憶される分のみが転送される。
【００４６】
たとえば、図４に示すように、撮像素子２２は、最大で６４０×４８０ピクセルの画像を取得することができる撮像範囲４０を有する。しかし、カメラ画像格納領域３３に転送されるのは３２０×２４０ピクセル分の大きさの記憶範囲４１の画像データである。これは、前述のように、大容量のメモリの搭載は、大きさ、バッテリ容量および処理量増加の関係で難しいためであり、メモリサイズの都合であえて小さな領域の画像を転送している。
【００４７】
図７は、撮像範囲および記憶範囲に対する二次元コードの撮影位置の例を示す図である。
実際には、二次元コードの像は正方形でなく歪んで投影され、像のエッジと撮像範囲および記憶範囲のエッジは平行とは限らない。しかし、図７では、説明を簡単にするため、二次元コードの正方形の像のエッジが、撮像範囲および記憶範囲のエッジと平行であるように撮影された例を示す。これは以下の説明でも同様であり、取得される二次元コードの像が歪んで回転しているような場合の二次元コードの解析処理については、特許文献１および特許文献５等に記載されており、それらに開示された技術を利用可能である。
【００４８】
図７に示すように、撮影した二次元コードの像４２が記憶範囲４１の境界に投影された場合、解析の対象となる画像には二次元コードの一部しか含まれない。そのため、図７に示すような画像でコード解析処理を行うと、解析失敗となる。しかし、解析対象の画像としては取得できていないが、撮像範囲４０には二次元コードの像４２の全体が含まれている可能性がある。
【００４９】
前述のように、記憶範囲４１の撮像範囲４０内における位置は、任意に設定可能である。そこで、次のフレーム画像の取得の際、カメラ画像格納領域３３に転送する範囲、すなわち記憶範囲をずらすことにより、二次元コード全体を記憶範囲の内部に含められることが期待できる。実施形態では、記憶範囲の画像に対するコード解析の結果、二次元コードの一部のみが含まれ、解析が失敗した場合、二次元コードの一部であると判定された部分の位置に応じて、次のフレーム画像の取得の際の記憶範囲の撮像範囲に対する位置を変更する。記憶範囲に記憶する画像の位置は、画像取得位置を指定することにより決定され、ここでは記憶範囲の左上のコーナーの撮像範囲における位置を、画像取得位置として指定するものとする。
【００５０】
実施形態の二次元コードリーダー（読取装置）は、上記の一般的な二次元コードリーダーと同様の構成を有し、解析に失敗した後の二次元コードの解析処理が異なり、他は同じでよい。
【００５１】
図８は、実施形態の二次元コードリーダーにおいて、プロセッサにより実現される解析部の機能ブロック図である。
図８に示すように、カメラ（撮像装置）１１で生成された画像データは、記憶範囲（画像取得位置）設定データにより設定された範囲について、メモリ１３のカメラ画像格納領域３３に転送される。解析部５０は、コード探索部５１と、解析処理部５２と、記憶範囲制御部５２と、を有する。コード探索部５１は、カメラ画像格納領域３３に記憶された画像データにおける二次元コードの領域を探索し、その探索結果である二次元コードの位置を解析処理部５２に出力する。解析処理部５２は、コード探索部５１からの探索結果に基づいて、カメラ画像格納領域３３に記憶された画像データに対してコード正規化処理及びコード解読処理を行う。記憶範囲制御部５２は、通知解析処理部５２からコード解析に失敗したとの通知を受けると、コード探索部５１から探索した二次元コードの領域の位置に関する情報を取得して、カメラ１１に出力する記憶範囲（画像取得位置）設定データを変更する。これにより、カメラ画像格納領域３３に記憶する画像データの記憶範囲が変更される。なお、コード探索部５１がコード探索に失敗した場合、解析処理部５２は解析処理を行わないが、コード探索部５１が二次元コードであると推定される領域に関する情報を生成した場合には、その情報に基づいて画像データの記憶範囲を変更してもよい。
【００５２】
図８において、記憶範囲制御部５３を除く部分は、一般的な二次元コードリーダーと同じよい。一般的な二次元コードリーダーは、カメラ１１に設定される記憶範囲設定データが固定であるか、設定可能であるが一旦設定した後は解析結果に応じて変更されることはなかった。言い換えれば、カメラ画像格納領域３３が記憶する画像データの記憶範囲が、撮像範囲に対して固定であるか、設定可能であるが一旦設定した後は解析結果に応じて変更されることはなかった。
【００５３】
図９は、実施形態の二次元コード解析処理の詳細を示すフローチャートである。
図９において、ステップＳ３３−Ｓ３５およびＳ３７−Ｓ４２は、図６のＳ１２−Ｓ２０に対応し、実施形態の二次元コード解析処理は、ステップＳ３１、Ｓ３２およびＳ３６を追加したことが、図６のフローチャートと異なる。
【００５４】
ステップＳ３１で、初めに前回のコード検出位置を取得する。この探索が初回の探索であれば、コード検出位置は、撮像範囲４０の中央とする。初回とは、例えば、前回の撮影から所定時間以上経過している場合である。逆に、初回でないとは、例えば、リトライの規定回数内の場合である。
【００５５】
ステップＳ３２で、カメラ１１を初期化し、撮像範囲４０における画像データの取得範囲、すなわち記憶範囲４１を設定する。このとき、前回のコード検出（推定）位置が記憶範囲４１の中央付近に来るように設定する。
【００５６】
ステップＳ３３で、カメラ１１で撮影を行い、ＤＭＡコントローラ１４を用いて撮影したカメラ画像格納領域３３に転送し、画像を取得する。
【００５７】
ステップＳ３４で、撮影画像から二次元コードがどのあたりに写っているのかを探索する。探索処理については後述する。
ステップＳ３５で、ステップＳ３４において二次元コードを探し出すことができたかできないかを判定し、探索が成功した場合にはステップＳ３６に、探し出すことができなかった場合には、ステップＳ４２に進む。
【００５８】
ステップＳ３６で、探索した二次元コードの位置をメモリ１３のカメラ制御情報格納領域３２に保存する。保存された検出位置は、解析に失敗した場合に、次の撮影時のステップＳ３１およびＳ３２に利用される。
【００５９】
ステップＳ３７で、二次元コードが写っている領域のコード画像について、コードを正規化する。正規化とはコードを正しい位置に回転し、コードの白黒の情報を０、１の内容に置き換えることである。
【００６０】
ステップＳ３８で、ステップＳ３７において二次元コードの正規化に成功したかを判定し、正規化が成功した場合にはステップＳ３９に、正規化できなかった場合には、ステップＳ４２に進む。
【００６１】
ステップＳ３９で、正規化した二次元コードの情報を基にコードを解読する。解読の結果、誤り検知に引っかかれば解析失敗であり、誤り検知に引っかからなければ解析成功である。
【００６２】
ステップＳ４０で、ステップＳ３９において二次元コードの解析に成功したかを判定し、解析が成功した場合にはステップＳ４１に、解析できなかった場合には、ステップＳ４２に進む。
【００６３】
ステップＳ４１で、解析成功を返す。
ステップＳ４２で、解析失敗を返す。
【００６４】
次に、撮像範囲における記憶範囲の設定処理について詳細に説明する。
図１０は、撮像面（撮像範囲）および画像の座標系を示す図である。
撮像面および画像の座標系は行方向と列方向で考える。図１０に示すように、行方向は画像の上から下の方向であり、図１０に示すように０から始まる。ここでは、行座標をｙで表す。同様に、列方向は画像の左から右の方向であり、０から始まる。ここでは、列座標をｘで表す。カメラの種類によっては、行方向は画像の下から上の方向に向くことはあり得る。
【００６５】
撮像範囲４０のうち画像データを取得して記憶する記憶範囲４１の設定は、カメラ１１内部のレジスタを設定することにより行う。このレジスタへはプロセッサとカメラとを接続するインターフェース（Ｉ２ＣやＳＰＩ）を経由して設定する。
【００６６】
カメラ１１は、内部に取得開始行、取得開始列、取得幅、取得高さを設定するレジスタを有する。カメラの種類によっては取得幅、取得高さではなく、取得終了行、取得終了列を設定するものもある。この場合、以下の関係式により取得終了行、取得終了列を設定する。
取得終了行＝取得開始行＋取得高さ
取得終了列＝取得開始列＋取得幅
実施形態は、いずれの方式を採用してもよく、取得画像の幅、高さは変わらないため、取得幅、取得高さは変化しない。
【００６７】
図１１は、探索処理を示すフローチャートである。
探索処理については各種の手法が提案されており、実施形態ではどのような探索処理を使用してもよい。図１１に示した探索処理は、特許文献５に記載された処理例である。
【００６８】
ステップＳ１０１で、入力画像（記憶範囲の画像データ）を、ブロック単位に走査し、所定の条件を満たすブロックをコードブロックとして検出する。ブロックの形状は任意であり、例えば、横Ｍピクセル、縦Ｎピクセルの長方形ブロックである。所定の条件は、例えば、（１）ブロック内の黒画素率がある範囲であること、（２）白画素と黒画素の変化点の割合がある範囲であること、（３）ブロック内の黒画素の連結の仕方による識別条件、（４）ブロック内の黒画素の射影の変動による識別条件である。詳細は、特許文献５に記載されているので省略するが、上記のいずれかの条件により、二次元コードの存在確率が高いブロックであるか否か判定できる。
【００６９】
ステップＳ１０２で、ステップＳ１０１で検出したコードブロックについて連結するコードブロックにより構成される領域を検出する。
ステップＳ１０３で、連結するコードブロックにより構成される領域のうち、最大の領域を二次元コード領域として検出する。
【００７０】
実施形態では、ステップＳ１０４およびＳ１０５は、コード探索処理としてではなく、コード正規化処理として行われる。ステップＳ１０４で、検出した二次元コード領域から二次元コード画像を抽出する。ステップＳ１０５で、二次元コードの傾き角°を検出し、必要ならば傾き補正を行う。
【００７１】
実施形態では、二次元コード領域と判定された領域の中央位置を推定する。中央位置の推定は、例えば、二次元コード領域のブロックのうちもっとも上側と下側にあるブロックの中心位置の中間を縦方向の中央位置（ｙ座標の中央位置）とし、もっとも左側と右側にあるブロックの中心位置の中間を横方向の中央位置（ｘ座標の中央位置）とする。また、二次元コード領域のブロックの中心位置を加算して、二次元コード領域のブロック数で除して中央位置算出してもよい。
以上のようにして、二次元コード領域の中央位置が推定される。以下、推定した中央位置を推定位置と称する。
【００７２】
次に、ステップＳ３２における、二次元コードの推定位置に応じて、次フレーム時にカメラから画像を取得する範囲を変更する処理を説明する。
【００７３】
まず、差分の計算においては、行方向の差分と列方向の差分を求める。
行方向の差分＝コードの行方向の推定位置−記憶範囲の中心の行方向の位置
列方向の差分＝コードの列方向の推定位置−記憶範囲の中心の列方向の位置
すると、コードの推定位置が記憶範囲中心よりも上側にある場合、行方向の差分は負の値となり、コードの推定位置が記憶範囲中心よりも下側にある場合、行方向の差分は正の値となる。また、コードの推定位置が記憶範囲中心よりも左側にある場合、列方向の差分は負の値となり、コードの推定位置が記憶範囲中心よりも右側にある場合、列方向の差分は正の値となる。
【００７４】
この差分の値を用いて、次のフレームにおける画像取得位置を計算する。初めに、現在の取得位置（記憶範囲の左上のコーナー位置）の列方向の位置に列方向の差分を加え、次に取得する記憶範囲の列方向の取得位置とする。同様に、現在の取得位置の行方向の位置に行方向の差分を加え、次の取得位置の行方向の取得位置とする。
【００７５】
さらに、次の取得位置から画像を取得しても撮像範囲に収まることを確認し、収まらない場合は取得位置を調整する。言い換えれば、次に取得する記憶範囲が、撮像範囲内に収まるか判定し、収まらない場合は、撮像範囲の境界に応じて次の取得位置を設定する。
【００７６】
具体的には、次の取得位置の列方向の位置が０よりも小さい場合は、次の取得位置の列方向の位置を０とする。次の取得位置の列方向の位置が、（撮像範囲の列方向の長さ）−（記憶範囲の列方向の長さ）よりも大きい場合は、次の取得位置を、（撮像範囲の列方向の長さ）−（記憶範囲の列方向の長さ）に設定する。
【００７７】
次の取得位置の行方向の位置が０よりも小さい場合は、次の取得位置の行方向の位置を０とする。次の取得位置の行方向の位置が、（撮像範囲の行方向の長さ）−（記憶範囲の行方向の長さ）よりも大きい場合は、次の取得位置の行方向の位置を、（撮像範囲の行方向の長さ）−（記憶範囲の行方向の長さ）に設定する。
【００７８】
例えば、撮像範囲の大きさが６４０×４８０（列方向座標値が０から６３９、行方向座標値０から４７９）であり、記憶範囲の大きさが３２０×２４０（列方向座標値が０から３１９、行方向座標値が０から２３９）であったとする。
【００７９】
このとき、撮像範囲の中心は、列方向位置が３２０、行方向位置が２４０となり、記憶範囲の中心は、列方向位置が１６０、行方向位置が１２０となる。
初回の撮影時には、取得位置を、列方向位置を撮像範囲の１６０に、行方向位置を撮像範囲の１２０に設定し、撮像範囲の中心と記憶範囲の中心が一致するようにする。
【００８０】
次に、コード探索の結果、コード中心の推定位置が、列方向１００、行方向１００であることが判明し、コードの正規化、解読に失敗したとする。このとき、次のフレームで取得位置を、次のように変更する。
【００８１】
行方向の差分＝コード中心の行方向の推定位置−記憶範囲中心の行方向の位置＝１００−１６０＝−６０
列方向の差分＝コード中心の列方向の推定位置−記憶範囲中心の列方向の位置＝１００−１２０＝−２０
【００８２】
次の取得位置の列方向の位置＝現在の取得位置の列方向の位置＋列方向の差分＝１６０＋（−６０）＝１００
次の取得位置の行方向の位置＝現在の取得位置の行方向の位置＋行方向の差分＝１２０＋（−２０）＝１００
【００８３】
この場合、どちらの方向の位置も撮像範囲内に収まるため、次のフレームはこの位置のまま撮影を行う。
【００８４】
さらに、変更したこの取得位置での画像でコード探索をした結果、コード中心の推定位置が列方向位置１０、行方向位置１０であると算出され、コードの正規化、解読に失敗したとする。このとき、次のフレームで取得位置をさらに変更する。
【００８５】
行方向の差分＝コードの行方向の推定位置−記憶範囲中心の行方向の位置＝１０−１６０＝−１５０
列方向の差分＝コードの列方向の推定位置−記憶範囲中心の列方向の位置＝１０−１２０＝−１１０
【００８６】
次の取得位置の列方向の位置＝現在の取得位置の列方向の位置＋列方向の差分＝１００＋（−１５０）＝−５０
次の取得位置の行方向の位置＝現在の取得位置の行方向の位置＋行方向の差分＝１００＋（−１１０）＝−１０
【００８７】
この場合、取得位置が、撮像範囲を超えているため、補正する必要があり、補正の結果、次の取得位置の列方向の位置＝０、次の取得位置の行方向の位置＝０とする。
【００８８】
上記の二次元コードの中央位置の推定処理および画像取得位置の変更処理は、ピクセル単位で行われたが、演算量を削減するために、複数のピクセルからなるグリッド単位で行うことも可能である。以下、グリッド単位で処理する変形例を説明する。
【００８９】
この変形例では、記憶範囲４１を複数のグリッドに分割する。
図１２は、複数のグリッドに分割された記憶範囲を示す図である。
【００９０】
図１２では、記憶範囲４１を、行方向の線（縦線）グリッドｘ０、ｘ１、…ｘｍ（ｍ：１以上の整数）および列方向の線（横線）グリッドｙ０、ｙ１、…、ｙｎ（ｎ：１以上の整数）で、ｍ×ｎの同じ長方形のグリッド領域に分割される。ただし、グリッドｘ０とｘｍは、記憶範囲４１の左右のエッジの値（ｘ０＝０、ｘｍ＝画像の幅）とし、グリッドｙ０とｙｎは、記憶範囲４１の上下のエッジの値（ｙ０＝０、ｙｎ＝画像の高さ）とする。
【００９１】
図１２では、撮像範囲４０は、記憶範囲４１の外部および内部含めて格子状に分割される。つまり、列方向については、は記憶範囲４１の外部、内部を含めて以下のようなｍ＋２の領域に分割される。
【００９２】
グリッドｘ０より小さい領域
グリッドｘ０以上、グリッドｘ１より小さい領域
グリッドｘ１以上、グリッドｘ２より小さい領域
・・・
グリッドｘｉ以上、グリッドｘ（ｉ＋１）より小さい領域
・・・
グリッドｘ（ｍ−１）以上、グリッドｘｍより小さい領域
グリッドｘｍより大きい領域
【００９３】
同様に、行方向については、は記憶範囲４１の外部、内部を含めて以下のようなｎ＋２の領域に分割される。
グリッドｙ０より小さい領域
グリッドｙ０以上、グリッドｙ１より小さい領域
グリッドｙ１以上、グリッドｙ２より小さい領域
・・・
グリッドｙｉ以上、グリッドｙ（ｉ＋１）より小さい領域
・・・
グリッドｙ（ｎ−１）以上、グリッドｙｎより小さい領域
グリッドｙｎより大きい領域
したがって、記憶範囲４１の内部、外部を含めて（ｍ＋２）×（ｎ＋２）の領域に分割される。
【００９４】
図１３は、グリッドに分割した例を示す図である。
図１３では、ｍ＝３、ｎ＝３とし、グリッドｘ０＝０、ｘ１＝１０６、ｘ２＝２１２、ｘ３＝３２０、ｙ０＝０、ｙ１＝８０、ｙ２＝１６０、ｙ３＝２４０としている。これにより、図１３に示すように、記憶範囲４１内部で行方向に３つ、列方向に３つ分割され、合計９個のグリッド領域が形成され、外部も含めると行方向、列方向にそれぞれ５つに分割されるため合計２５個のグリッド領域になる。
【００９５】
グリッド領域は、前述のコード探索のブロックより大きく、複数個のブロックを含むようにすることが望ましい。
前述の二次元コード領域の中央値の推定は、推定した中央値がどのグリッド領域に入るか判明すればよい。そこで、上記の方法で推定された二次元コード領域の中央値が、どのグリッド領域に含まれるか判定する。各グリッド領域には、あらかじめ差分が割り当てられており、そのグリッド領域に割り当てられた差分に応じて、次の画像取得位置を変更する。
【００９６】
また、前述の二次元コードのブロックの探索で、二次元コードの存在確率が高いブロックをもっとも多く含むグリッド領域を、「コードの推定中央位置を含むグリッド領域」とみなす。そして、そのグリッド領域に割り当てられた差分に応じて、次の画像取得位置を変更するようにしてもよい。
【００９７】
グリッド領域は、該当するブロックを含むか否かは、該当するブロックの中心座標をグリッド領域が含むか否かで判定する。
次に、グリッド領域への差分の割り当てについて説明する。
【００９８】
図１２に示すように、記憶領域４１の内部、外部を含めて（ｍ＋２）×（ｍ＋２）の分割されたグリッド領域に対し、行方向、列方向の差分をそれぞれ割り当てる。ただし、以下の条件を満たす必要がある。
【００９９】
（１）列方向の位置（ｘ座標）が異なる任意の２つの分割されたグリッド領域に対し、左側のグリッド領域に対応付けられた列方向の差分は、右側のグリッド領域に対応付けられた列方向の差分に等しいか、より小さい。
【０１００】
（２）行方向の位置（ｙ座標）が異なる任意の２つの分割されたグリッド領域に対し、上側のグリッド領域に対応付けられた行方向の差分は、下側の領域に対応付けられた行方向の差分に等しいか、より小さい。
【０１０１】
図１３には、上記の（１）および（２）の条件を満たすように割り当てた差分の例が示される。この差分の値を用いて、次のフレームにおける画像取得位置を計算する。
【０１０２】
初めに、現在の画像取得位置の列方向の位置に列方向の差分を加え、次の取得位置の列方向の位置とする。
さらに、現在の画像取得位置の行方向の位置に行方向の差分を加え、次の取得位置の行方向の位置とする。
【０１０３】
次に、次の取得位置から画像を取得しても撮像面に収まることを確認し、収まらない場合は取得位置を調整する。
具体的には、次の取得位置の列方向の位置が０よりも小さい場合は、次の取得位置の列方向の位置を０とする。
【０１０４】
次の取得位置の列方向の位置が、（撮像範囲の列方向の長さ）−（記憶範囲の列方向の長さ）よりも大きい場合は、次の取得位置の列方向の位置を、（撮像範囲の列方向の長さ）−（記憶範囲の列方向の長さ）に設定する。
【０１０５】
次の取得位置の行方向の位置が０よりも小さい場合は、次の取得位置の行方向の位置を０とする。
次の取得位置の行方向の位置が、（撮像範囲の行方向の長さ）−（記憶範囲の行方向の長さ）よりも大きい場合は、次の取得位置の行方向の位置を、（撮像範囲の行方向の長さ）−（記憶範囲の行方向の長さ）に設定する。
【０１０６】
この方法での処理例を、図１３を参照して説明する。
初めに、撮像範囲からの画像取得位置（記憶範囲の左上コーナーの位置））を列方向位置１６０、行方向位置１２０とする。
【０１０７】
コード探索の結果、コード中心の推定位置が列方向位置１００、行方向位置１００であると算出され、コードの正規化、解読に失敗したとする。このとき、次のフレームでの画像の取得位置を変更する。
【０１０８】
まず、コード中心の推定位置が列方向位置１００、行方向位置１００で見つかったことにより、図１３のグリッドｘ０とｘ１およびグリッドｙ１とｙ２で囲まれたグリッド領域が、推定位置のグリッドの領域となる。このグリッド領域に割り当てられた差分は列方向の差分が−１６０、行方向の差分が０となる。
【０１０９】
現在の取得位置に差分を加えると、次のフレームでの画像取得位置は、列方向位置が０、行方向位置が１２０となる。この位置は撮像面の範囲内であるため、この位置を次のフレームの画像取得位置とする。
【０１１０】
さらに、この取得位置で記憶範囲に記憶した画像についてコード探索をした結果、コードの中心の推定位置が列方向位置１０、行方向位置１０に見つかり、コードの正規化、解読に失敗したとする。このとき、次のフレームで撮影画像の取得位置をさらに変更する。
【０１１１】
この位置に対応するグリッド領域は、図１３のグリッドｘ０とｘ１およびグリッドｙ０とｙ１で囲まれたグリッド領域であり、このグリッド領域に割り当てられた差分は列方向の差分が−１６０、行方向の差分が−１２０となる。
【０１１２】
現在の取得位置（０，１２０）に差分を加えると、次のフレームでの画像取得位置は列方向位置が−１６０、行方向位置が０となる。この位置は撮像面の外であるため、取得位置を調整する。調整の結果、画像取得位置は、列方向位置が０、行方向位置が０となる。
【０１１３】
以上説明したように、実施形態によれば、撮影リトライの回数を減らすことができ、検出時間を短縮することができる。この結果、プロセッサの動作時間の短縮につながり、システムの消費電力の削減に貢献する。
【０１１４】
以上、実施形態の二次元コードリーダー（読取装置）について説明したが、各種の変形例が可能であるのは言うまでもない。上記の例では、リトライの規定回数内の撮影以外は初回の撮影として、撮像範囲と記憶範囲の中心が一致するように画像の取得位置を設定するとしたが、例えば、二次元コードリーダーを同じ使用者が使用する場合には、前回の解析に成功した時の画像の取得位置を保存しておき、それを使用してもよい。これにより、使用者が二次元コードリーダーを使用する場合の癖を反映することができ、１回目の撮影で取得した画像で二次元コードを解析することができる可能性が向上する。
【０１１５】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものである。特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【０１１６】
１１    カメラ（撮像装置）
１２    プロセッサ
１３    メモリ
１４    ＤＭＡコントローラ
２２    撮像素子
２３    撮像面
２４    コントローラ
３３    カメラ画像格納領域
４０    撮像範囲
４１    記憶範囲
５０    解析部
５１    コード探索部
５２    解析処理部
５３    記憶範囲制御部
【図１】
2016148925.tif 000003
【図２】
2016148925.tif 000004
【図３】
2016148925.tif 000005
【図４】
2016148925.tif 000006
【図５】
2016148925.tif 000007
【図６】
2016148925.tif 000008
【図７】
2016148925.tif 000009
【図８】
2016148925.tif 000010
【図９】
2016148925.tif 000011
【図１０】
2016148925.tif 000012
【図１１】
2016148925.tif 000013
【図１２】
2016148925.tif 000014
【図１３】
2016148925.tif 000015