(57)【要約】 【課題】  コード読取装置のデータコードの読み取り性能を向上させること。【解決手段】  自動露出調整機能により撮影して得られた画像データ３１に基づいて二値化テーブル３４０を作成する。二値化テーブル３４０には、所定の閾値に基づいて区分した‘０’及び‘１’の二値データと、‘２’の二値化不明情報とを記憶する。二値化テーブル３４０に基づいて二値化に失敗したと判定した場合には、カメラ部の露光時間を変更して再撮影を行い新たな画像データ３１を得る。そして、二値化テーブル３４０に記憶された二値化不明情報を選択し、その二値化不明情報に対応する座標上のセルを画像データ３１から検出し、そのセルを二値化して、二値化テーブル３４０に記憶された二値化不明情報を更新する。【選択図】図１２
2008083843.tif 000002
【特許請求の範囲】
【請求項１】
データコードの画像を撮影する撮影手段と、
前記撮影手段により撮影された画像の二値化を行う二値化手段と、
前記二値化手段による二値化の成否を判定する判定手段と、
前記判定手段により前記二値化が失敗したと判定された場合に、前記撮影手段と前記二値化手段とに再度撮影及び二値化をそれぞれ行わせる再撮影制御手段と、
前記再撮影制御手段の制御下で二値化された画像と、前記再撮影制御手段の制御前に二値化された画像とを合成する合成手段と、
前記合成手段により合成された画像をデコードするデコード手段と、
を備えることを特徴とするコード読取装置。
【請求項２】
前記二値化手段は、
前記撮影手段により撮影された画像の多値データを所定の二値化条件に基づいて二値データと二値化不明情報とに区分して二値化データを作成する作成手段を有し、
前記判定手段は、
前記二値化不明情報が前記二値化データに対して占める割合に基づいて前記二値化の成否を判定することを特徴とする請求項１に記載のコード読取装置。
【請求項３】
前記合成手段は、
前記再撮影制御手段の制御前に作成された前記二値化データのうちの二値化不明情報を、前記再撮影制御手段の制御下で生成された前記二値化データで置換する置換手段を有することを特徴とする請求項２に記載のコード読取装置。
【請求項４】
前記判定手段は、
前記合成手段により合成された画像の二値化の成否を判定する合成後判定手段を有し、
前記デコード手段は、
前記合成後判定手段により二値化が成功したと判定された場合に、前記合成手段により合成された画像をデコードするデコード制御手段を有することを特徴とする請求項１〜３の何れか一項に記載のコード読取装置。
【請求項５】
前記判定手段により二値化が失敗したと判定された場合に、前記再撮影制御手段による撮影時の前記撮影手段の撮影条件を前記二値化手段による二値化の結果に基づいて変更する撮影条件変更手段を更に備えることを特徴とする請求項１〜４の何れか一項に記載のコード読取装置。
【請求項６】
前記撮影手段により撮影された画像から前記判定手段により二値化が失敗したと判定された部分の画像を抽出する抽出手段と、
前記抽出手段により抽出された画像の平均輝度値を算出する算出手段と、
を更に備え、
前記撮影条件変更手段は、
前記算出手段により算出された平均輝度値に基づいて前記撮影条件を変更することを特徴とする請求項５に記載のコード読取装置。
【請求項７】
コンピュータを、
撮影部により撮影されたデータコードの画像の二値化を行う二値化手段、
前記二値化手段による二値化の成否を判定する判定手段、
前記判定手段により前記二値化が失敗したと判定された場合に、前記撮影手段と前記二値化手段とに再度撮影及び二値化をそれぞれ行わせる再撮影制御手段、
前記再撮影制御手段の制御下で二値化された画像と、前記再撮影制御手段の制御前に二値化された画像とを合成する合成手段、
前記合成手段により合成された画像をデコードするデコード手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、撮影したデータコードの画像を二値化してデコードするコード読取装置及びプログラムに関する。
【背景技術】
【０００２】
近年、太さや間隔の異なる一次元のバーを並べ合わせたバーコード（一次元コード）と共に、二次元のセルを縦横に組み合わせた二次元コードが広く普及している（以下、一次元コード及び二次元コードを総称して「データコード」という）。
【０００３】
このデータコードは、コード読取装置のＣＣＤ（Charge Coupled Device）やＣＭＯＳ（Complementary Metal Oxide Semiconductor）等の撮像部で撮影された画像を二値化することでバーやセルを検出し、デコードエンジン（デコーダ）が解析することにより読み取られる。
【０００４】
このデータコードを撮影する撮像部は、適切な明るさの画像が得られるように露光時間を自動的に調節する自動露出調整機能を一般に有している。ところが、この自動露出調整機能により露光時間を調整したとしても、外光や陰等の影響によってデータコードの一部に明暗が生じたり、印刷媒体の材質等によってコントラスト差を十分に確保できない場合があるため、デコードに適したデータコードの画像が得られるとは限らない。
【０００５】
デコードに適したデータコードの画像を得るための技術としては、次のような技術が知られている。即ち、二次元コードの画像の明部と暗部との境界を抽出し、その明部と暗部それぞれを鮮明化する画像処理を施した後に画像を合成する技術（特許文献１参照）や、複数のＬＥＤ（Light Emitting Diode）を設け、鏡面反射高度判定値よりも高い光度領域が画像中に存在する場合に、照射するＬＥＤの数を減らして撮影した画像と合成することにより鏡面反射領域を除去する技術（特許文献２参照）が開発されている。
【特許文献１】特開平１１−１０２４１１号公報
【特許文献２】特開平１１−１２０２８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１の技術は、二値化を行う前の画像から明部と暗部との境界を抽出し、明部と暗部それぞれを鮮明化する画像処理を行わなければならない。また、特許文献２の技術においても、二値化を行う前の画像から鏡面反射領域を抽出する処理を行わなければならない。
【０００７】
一般に、二値化を施す以前の画像データの各ピクセルは多値データ（輝度値）であるため、その画像に対するデータ処理量は二値化した後の画像の場合よりも膨大になる。このため、特許文献１及び２の技術では、二値化以前の画像に対する処理時間が長くなり、データコードのデコードまでに係る処理時間に影響を与えてしまい、データコードの読み取り性能が低下してしまった。
【０００８】
また、特許文献２の技術は、撮影時のＬＥＤの照射条件を変えるために複数のＬＥＤを設けなければならなく、部品点数が多くなりコストが嵩んでしまった。
【０００９】
本発明の課題は、コード読取装置のデータコードの読み取り性能を向上させることである。
【課題を解決するための手段】
【００１０】
本発明は、データコードの画像を撮影する撮影手段と、前記撮影手段により撮影された画像の二値化を行う二値化手段と、前記二値化手段による二値化の成否を判定する判定手段と、前記判定手段により前記二値化が失敗したと判定された場合に、前記撮影手段と前記二値化手段とに再度撮影及び二値化をそれぞれ行わせる再撮影制御手段と、前記再撮影制御手段の制御下で二値化された画像と、前記再撮影制御手段の制御前に二値化された画像とを合成する合成手段と、前記合成手段により合成された画像をデコードするデコード手段と、を備えることを特徴としている。
【発明の効果】
【００１１】
本発明によれば、デコードするまでの処理時間を短くすることができ、コード読取装置のデータコードの読み取り性能を向上させることができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明のコード読取装置の実施形態について図１〜図１６を参照して詳細に説明する。先ず、コード読取装置の概要について説明する。
【００１３】
図１は、コード読取装置１の外観の一例を示す図であり、図１（ａ）はコード読取装置１を正面から見た外観斜視図、図１（ｂ）はコード読取装置１を背面から見た外観斜視図である。図１に示すように、コード読取装置１は、各種キー群５２、電源スイッチ５４、ディスプレイ６２、インジケータ６６、スピーカ６４、Ｉ／Ｏ端子７２、カメラ部４０、ＬＥＤ４６及び充電池８２を備えて構成される。
【００１４】
コード読取装置１は、カメラ部４０でデータコードを露光・結像することで生成した画像データをデコードすることで、当該データコードによって符号化されたデータ（例えば、価格やシリアル番号等の商品管理情報、ＵＲＬやＥ−ｍａｉｌアドレス等がある。）を読み取る。
【００１５】
各種キー群５２は、テンキーやエンターキー、トリガーキー等を有して構成される。ユーザは、被写体であるデータコードにカメラ部４０を向けて撮影を行う。このとき、ディスプレイ６２は電子ファインダーとして機能して、被写体の画像が表示される。この撮影によって得られたデータコードの画像のデコードが成功した場合、あるいは失敗した場合には、スピーカ６４からブザー音が出力されたりインジケータ６６が点滅したりして、デコード成功やエラーが通知される。
【００１６】
Ｉ／Ｏ端子７２は、クレイドル等の拡張機器と電気的に接続する端子であり、クレイドルとの間の電気信号を中継することで、例えば、充電池８２を充電したり、外部とのデータ通信を行う。また、カメラ部４０の近傍には、図１（ｂ）に示すようにＬＥＤ４６が設けられており、データコードの撮影時に光量不足が生じている場合にはＬＥＤ４６が点灯される。
【００１７】
データコードのコード形式には、１次元コード（バーコード）のＪＡＮ（Japan Article Number）、ｃｏｄｅ３９、ＩＴＦ（Interleaved Two of Five）等や、２次元コードのＱＲ（Quick Response）コード(ＱＲコードは（株）デンソーウェーブの登録商標)、ＰＤＦ４１７(ＰＤＦ４１７はシンボルテクノロジー社の登録商標)、ＤａｔａＭａｔｒｉｘコード(ＤａｔａＭａｔｒｉｘコードはデータマトリックス社の登録商標)、Ｍａｘｉコード(ＭａｘｉコードはＵＳＰ社の登録商標)等があり、データコードの画像に対してコード形式に適応したデコードが行われる。
【００１８】
尚、このコード読取装置１は、例えば、データコードを読み取ってデータ収集を行うハンディターミナル(携帯端末)、ＰＯＳ（Point of Sales）システムのバーコードリーダ、バーコードスキャナ等に適用されるが、その適用例はこれに限られず、例えば、携帯電話やＰＤＡ（Personal Digital Assistant）の各種電子機器に適宜適用可能である。
【００１９】
次に、コード読取装置１の構成について、図２を参照して説明する。図２は、コード読取装置１の機能構成の一例を示すブロック図である。図２によれば、コード読取装置１は、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）２０、ＲＡＭ（Random Access Memory）３０、カメラ部４０、入力部５０、出力部６０、Ｉ／Ｆ部７０及び電源部８０を備えて構成される。
【００２０】
ＣＰＵ１０は、ＲＯＭ２０に記憶されたプログラムに基づいた処理を実行し、各機能部への指示やデータの入出力を行うことで、コード読取装置１を統括的に制御する。より具体的には、ＲＯＭ２０に記憶されたプログラム（例えば、図３（ａ）のコード読取プログラム２１）を読み出して、そのプログラムに基づいた処理を行う。そして、その処理結果を出力部６０から表示及び音声出力する。
【００２１】
ＲＯＭ２０は、各種初期設定やハードウェアの検査等を行うための初期プログラムや、コード読取装置１の動作に係る各種機能を実現するためのプログラムを格納する。ＲＡＭ３０は、ＣＰＵ１０が実行する各種プログラムの実行に係るデータ等を一時的に保持する記憶領域である。
【００２２】
カメラ部４０は、被写体の撮影を行って画像データを生成する機能部であり、図２に示すように撮影レンズ４１と、絞り機構４２と、イメージセンサ４３と、Ａ／Ｄ変換器４４と、撮影制御部４５とを備えて構成される。
【００２３】
撮影レンズ４１は、被写体の焦点を合わせるためのレンズ等を備えて構成され、被写体の像をイメージセンサ４３に結像する。絞り機構４２は、撮影レンズ４１からの被写体の像の光の絞りを調整する。
【００２４】
イメージセンサ４３は、ＣＣＤ（Charge Coupled Diode）や、ＣＭＯＳ（Complementary Metal-Oxide Semiconductor）等の撮像素子により構成され、撮影レンズ４１及び絞り機構４２を介して結像された光を光電変換して、アナログの電気信号を出力する。
【００２５】
Ａ／Ｄ変換器４４は、イメージセンサ４３からの電気信号をＡ／Ｄ変換してデジタルの画像データを生成する。撮影制御部４５は、ＣＰＵ１０の指示に従って撮影レンズ４１及び絞り機構４２を駆動して、撮影レンズ４１の移動や露光時間、ゲイン等の調整を行う。コード読取装置１の露光時間の調整には、自動露出調整機能と、マニュアル露出調整機能とがある。
【００２６】
自動露出調整機能は、撮影に最適な露光時間及びゲインを算出して画像の明るさを自動的に調整して撮影する機能であり、公知のシャッター速度優先自動露出調整や絞り優先自動露出調整等でカメラ部４０により行われる。尚、この自動露出調整機能は、コード読取装置１のアプリケーションプログラムによりＣＰＵ１０がソフト的に実現することとしてもよい。
【００２７】
マニュアル露出調整機能は、コード読取装置１のアプリケーションプログラム（例えば、図３（ａ）のコード読取プログラム２１）が指定した露光時間及びゲインで撮影を行う機能である。撮影制御部４５は、自動露出調整機能によって調整した露光時間及びゲイン、又はマニュアル露出調整機能によってＣＰＵ１０によって指定された露光時間及びゲインに基づいて絞り機構４２及びイメージセンサ４３を制御して撮影を行う。
【００２８】
カメラ部４０により生成された被写体の画像データは、ＲＯＭ２０内に格納されたプログラムに基づいてデコードされる。この画像データ内にデコードの対象となるデータコードが含まれ、そのデータコードのデコードが成功すると、復元されたデータや桁数、コード形式等が出力部６０から出力される。
【００２９】
入力部５０は、図１に示す各種キー群５２や電源スイッチ５４等のキー及びスイッチを有して構成され、ユーザによって押下されたキー又はスイッチに対応する操作信号をＣＰＵ１０に出力する。
【００３０】
出力部６０は、図１のディスプレイ６２やインジケータ６６、スピーカ６４を含み、ＬＣＤ（liquid crystal monitor）やＥＬＤ（Electro Luminescence Display）等の表示部と、音声出力部とから構成される。出力部６０は、ＣＰＵ１０の指示に基づいてコード読取装置１の各種情報を表示又は音声出力する。
【００３１】
Ｉ／Ｆ部７０は、ＬＡＮインターフェイスやＵＳＢインターフェイス等を備えて構成され、図１のＩ／Ｏ端子７２に相当する。Ｉ／Ｆ部７０は、クレイドル等の外部からの供給電力を電源部８０に出力したり、ＣＰＵ１０の制御に基づいてデータ通信を行ったりする。電源部８０は、コード読取装置１の各機能部に対して電力の供給を行い、図１の充電池８２を備えて構成される。
【００３２】
〔第１実施形態〕
次にコード読取装置１の第１実施形態について説明する。図３は、第１実施形態においけるＲＯＭ２０及びＲＡＭ３０のデータ構成の一例を示す図である。図３（ａ）に示すように、ＲＯＭ２０は、コード読取プログラム２１とデコーダプログラム２２とを記憶している。
【００３３】
コード読取プログラム２１は、図８〜図１１に示すコード読取処理を実現するためのアプリケーションプログラムである。デコーダプログラム２２は、データコードをデコードするためのプログラムであり、所定のコード形式に対応したデコードが行われる。ＣＰＵ１０は、デコーダプログラム２２に基づいた処理を行うことで所謂デコーダエンジンとして機能する。
【００３４】
図３（ｂ）によれば、ＲＡＭ３０には、画像データ３１と、露光時間３２と、コード画像３３と、二値化テーブル３４と、座標テーブル３５と、平均輝度値３６とが記憶されている。
【００３５】
ＣＰＵ１０は、撮影の指示入力を行うトリガーキーの押下を検知すると、カメラ部４０の自動露光調整機能によって撮影を行い、その撮影により生成された画像データ３１をＲＡＭ３０に記憶する。この画像データ３１は、例えば、０（暗い）〜２５５（明るい）の輝度値からなるピクセルの集合体、即ち多値のデータとなる。また、ＣＰＵ１０は、自動露光調整機能によって設定された露光時間３２をカメラ部４０から取得してＲＡＭ３０に記憶する。
【００３６】
そして、その画像データ３１を走査して、データコードが含まれているか否かを判別する。データコードの判別は、２個以上の角と、その角を結ぶ直線若しくは緩やかな曲線とが画像中に含まれているかという判別基準に従って行う。例えば、図４の画像データ３１においては、二つの角ＡＧ１及びＡＧ２が含まれると共に、その角ＡＧ１及びＡＧ２を結ぶ辺ＳＤ１が含まれている。
【００３７】
画像データ３１に２個以上の角と、その角を結ぶ直線又は曲線とが含まれている場合には、その角から延伸する複数の辺で囲まれたデータ領域をデータコードとして判別し、そのデータ領域を画像データ３１から切り出してコード画像３３としてＲＡＭ３０に記憶する。図４においては、辺ＳＤ１，ＳＤ２及びＳＤ３で囲まれたデータ領域を切り出し、コード画像３３として記憶している。
【００３８】
また、画像データ３１中に２個以上の角と、その角を結ぶ直線又は曲線が含まれていなかった場合には、データコードを判別できないため、カメラ部４０の自動露出調整機能により露光時間３２を再調整させて撮影を行う。このようにして、自動露出調整機能により画像データ３１からデータコードを検出できた場合には、画像データ３１からコード画像３３を切り出し、そのコード画像３３に対して二値化処理を行う。
【００３９】
尚、データコードの判別には、適宜公知技術を採用して他の条件や方法により判別することとしてよく、例えば、ＱＲコードに含まれる３つの切り出しシンボルを検知してデータコードを判別することとしてもよいし、一次元コード（バーコード）の判別を行うこととしてもよい。
【００４０】
図３（ｂ）に示す二値化テーブル３４（二値化データ）は、このコード画像３３に含まれるセルの多値データを所定の閾値に基づいてＣＰＵ１０が二値化処理を行って生成するデータテーブルであり、セル情報を記憶する。セル情報は、二値化処理によって多値データを変換した‘０’及び‘１’の二値データと、その二値データへの変換ができなかったことを示す二値化不明情報‘２’とを含む。尚、二値化不明情報としては、‘０’及び‘１’の二値データとの識別が可能な値であればよく、他の数字やデータで表しても良い。
【００４１】
図３（ｂ）に示す座標テーブル３５は、コード画像３３に含まれるセルの中心座標の座標情報（ｘ座標，ｙ座標）を記憶するデータテーブルである。
【００４２】
ここで、本実施形態における二値化処理について図５及び図６を参照して説明する。本実施形態における二値化処理は、コード画像３３に含まれる各セルの輝度の平均値を算出し、その平均値を所定の二値化条件に基づいて‘０’、‘１’、‘２’の何れかに区分けする。
【００４３】
二値化条件とは、コード画像３３のセルを二値データ又は二値化不明情報に区分するための条件であり、本実施形態においては２つの閾値を用いる。その閾値としては、第１閾値ＴＨ１（例えば、１５０）と、第１閾値よりも小さい第２閾値ＴＨ２（例えば、１００）とを予め設定する。
【００４４】
先ず、ＣＰＵ１０は、コード画像３３を走査して、そのコード画像３３からセルを抽出し、そのセルの中心座標の座標情報を座標テーブル３５に記憶する。そして、そのセルを構成する各ピクセルの輝度値の平均を算出し、その輝度値が第２閾値ＴＨ２よりも小さい場合には、図５のセルＣＬ２のように黒色のセルであると判別して二値化テーブル３４にセル情報の‘１’を記憶する。また、輝度値が第１閾値ＴＨ１よりも大きい場合には、図５のセルＣＬ１のように白色のセルであると判別して二値化テーブル３４に‘０’を記憶する。
【００４５】
また、輝度値が第１閾値ＴＨ１以下であり且つ第２閾値ＴＨ２以上である場合には、図５のセルＣＬ３のように黒色及び白色のセルと判別ができないグレーゾーンとして二値化不明情報の‘２’を二値化テーブル３４に記憶する。また、第１閾値ＴＨ１よりも大きい輝度値を持つセルや第２閾値ＴＨ２よりも小さい輝度値を持つセルが縦又は横方向に一定数以上続いた場合には、十分なコントラストが確保できていないデータ領域であると判別して、図５のセル領域ＣＬ１０のように‘２’を二値化テーブル３４に記憶する。
【００４６】
従って、本実施形態の二値化処理では、第１閾値ＴＨ１及び第２閾値ＴＨ２に基づいて各ピクセルが白色又は黒色のセルであると判別できた場合には、二値データの‘０’又は‘１’を二値化テーブル３４に記憶するが、白色又は黒色のセルであると判別できなかった場合には、二値化に失敗したことを示す二値化不明情報‘２’を記憶することとなる。
【００４７】
ＣＰＵ１０は、コード画像３３を全走査して各セルに対応する座標情報と、二値データ又は二値化不明情報とを座標テーブル３５及び二値化テーブル３４それぞれに記憶する。例えば、図６においては、コード画像３３のデータ領域３３ａ内の各セルに対応する二値データ３４ａを二値化テーブル３４に、座標情報３５ａを座標テーブル３５にそれぞれ記憶している。
【００４８】
また、図６のコード画像３３においてセル毎のコントラストが不明瞭なデータ領域３３ｂにおいては、そのデータ領域３３ｂ内の各セルに対応する座標情報３５ｂが座標テーブル３５に記憶される一方、上述した二値化が失敗したとして二値化不明情報３４ｂが二値化テーブル３４に記憶される。
【００４９】
尚、上述した二値化処理における２つの閾値の設定方法としては、適宜公知技術を採用してよく、例えば、画像データ３１全体の輝度値の平均を算出して、その平均値に応じて動的に設定することとしてもよい。
【００５０】
図３（ｂ）に示すＲＡＭ３０に記憶される平均輝度値３６は、二値化処理に失敗したセル全体の輝度値の平均値である。一般に、二次元コードのデコードには、公知技術のエラー訂正機能が有効であり、撮影した二次元コードの一部に解読不能な領域があったとしても、その領域が全体のおよそ１０％未満であった場合には、そのエラー訂正機能によりデコードが可能となる。
【００５１】
しかし、解読不能な領域が１０％以上となった場合には、エラー訂正機能を用いたとしてもデコードができないため、再撮影が必要となる。このとき、同等の撮影条件の下で再撮影を行ったとしても、画質の改善が期待できないため、本実施形態では、二値化テーブル３４に二値化不明情報を記憶した全セルの平均輝度値３６を算出して、その平均輝度値３６に基づいてカメラ部４０の露光時間３２を変更して、再撮影を行う。
【００５２】
ＣＰＵ１０は、二値化テーブル３４の全データ量に対して二値化不明情報が占める割合（以下、「占有率」という）を算出し、その占有率が所定値（例えば、１０％）以上であった場合には、二値化に失敗したと判別する。尚、二値化に失敗したか否かの判定基準として、本実施形態では二値化不明情報の占有率が１０％以上であることを判定基準として説明するが、例えば、５％以上としてデコードの精度向上を図ってもよく、デコードに求められる精度に応じて適宜変更してよい。
【００５３】
このように二値化に失敗したと判定した場合には、二値化不明情報を記憶したセルに対応する多値データをコード画像３３から読み出して、平均輝度値３６を算出する。具体的には、二値化テーブル３４に記憶した二値化不明情報に対応する座標情報を座標テーブル３５から読み出し、その座標情報で示される座標を中心したとしたセルの多値データをコード画像３３から読み出す。そして、その読み出した多値データ（輝度値）を逐次加算していき、その平均値である平均輝度値３６を求める。
【００５４】
この算出した平均輝度値３６が、図７に示すデコード可能範囲（例えば、３０〜２２５）内であった場合には、二次元コードが汚れている、二次元コード全体が撮影されていない等の露出以外の原因で二値化できなかったものと判断する。これに対し、平均輝度値３６が、例えば３０以下又は２２５以上であってデコード可能範囲外であった場合には、露光時間３２を算出して更新する。
【００５５】
この露光時間３２の算出は、例えば、平均輝度値３６が３０以下であった場合は、ＲＡＭ３０に記憶している露光時間３２にＮ（実数値）を乗算した値を新たな露光時間３２として算出し、平均輝度値３６が２２５以上であった場合は、露光時間３２をＮで除算した値を新たな露光時間３２として算出する。
【００５６】
即ち、二値化に失敗したセル全体が暗過ぎた場合には露光時間３２を長め、明る過ぎた場合には露光時間を短縮するように当該露光時間３２を変更する。尚、露光時間３２を乗算、除算する実数値Ｎの値は、実験やチューニングによって予め決定される値である。また、デコード可能範囲としての輝度値の設定は、適宜変更可能である。
【００５７】
このようにした新たに算出した露光時間３２をカメラ部４０のマニュアル露出設定機能に設定させて、再度撮影を行うため、始めに撮影したデータコードとは異なる撮影条件で撮影されたデータコードの画像データ３１が得られるようになる。
【００５８】
そして、再撮影により得られた画像データ３１から再度コード画像３３を切り出し、二値化テーブル３４において二値化不明情報が記憶された座標上のセルの多値データをコード画像３３から抽出して、上述した二値化処理を行う。この部分的に抽出したセルの多値データに基づいて二値化処理を行った結果を、二値化テーブル３４に記憶された二値化不明情報と置き換えることで合成し、当該二値化テーブル３４を補完していく。尚、この二値化テーブル３４の合成については、後述する。
【００５９】
〔コード読取装置の具体的な動作〕
次に、コード読取装置１の具体的な動作について図８〜図１１のフローチャートと、図１２の二値化テーブル３４の合成例とを参照して説明する。
【００６０】
先ず、ＣＰＵ１０は、各種キー群５２のトリガーキーの押下を検知すると、コード読取プログラム２１をＲＯＭ２０から読み出して、そのプログラムに従った処理を開始する。そして、自動露出調整機能により設定された露光時間３２でカメラ部４０に撮影を行わせ（ステップＡ１）、その撮影によって生成された画像データ３１をＲＡＭ３０に記憶する（ステップＡ３）。
【００６１】
次いで、画像データ３１にデータコードが含まれているか否かを判別し（ステップＡ５）、上述した判別基準に従ったデータコードを検出できなかった場合には（ステップＡ７；Ｎｏ）、ステップＡ１に処理を移行して、カメラ部４０の自動露出調整機能により再度撮影を行う。
【００６２】
また、データコードを検出した場合には（ステップＡ７；Ｙｅｓ）、そのデータコードを切り出した画像をコード画像３３として記憶し、図９の二値化テーブル作成処理を行う（ステップＡ９）。図９の二値化テーブル作成処理においてＣＰＵ１０は、先ず、コード画像３３を走査してセルを検出し（ステップＢ１〜Ｂ３）、そのセルの輝度値に基づいて上述したように二値化テーブル３４に０（白）、１（黒）及び２（不明）の何れかのセル情報を記憶する（ステップＢ５）。
【００６３】
そして、検出したセルの中心座標の座標を取得して座標テーブル３５に記憶し（ステップＢ７）、コード画像３３の全走査が終了していない場合には（ステップＢ９；Ｎｏ）、ステップＢ１に処理を移行してコード画像３３の操作を繰り返す。また、コード画像３３の全走査が終了した場合には（ステップＢ９；Ｙｅｓ）、二値化テーブル作成処理を終了して図８のコード読取処理に処理を戻す。
【００６４】
ＣＰＵ１０は、二値化テーブル作成処理の処理後、二値化テーブル３４に記憶された二値化不明情報の占有率に基づいて二値化が成功したか否かを判定する（ステップＡ１１）。このとき、二値化不明情報の占有率が１０％未満であった場合には、二値化が成功したと判定し（ステップＡ１１；Ｙｅｓ）、デコーダプログラム２２をＲＯＭ２０から読み出して二値化テーブル３４に対して所定のデコード処理を行う（ステップＡ１３）。
【００６５】
そして、そのデコード処理が成功した場合には（ステップＡ１５；Ｙｅｓ）、デコード結果を出力部６０から表示出力及び音声出力させ（ステップＡ１７）、デコード処理が失敗した場合には（ステップＡ１５；Ｎｏ）、エラーを出力部６０から出力させた後に（ステップＡ１９）、コード読取処理を終了する。
【００６６】
一方、ステップＡ１１において二値化テーブル３４内の二値化不明情報の占有率が１０％以上であって二値化に失敗したと判定した場合には（ステップＡ１１；Ｎｏ）、図１０の露出値決定処理を開始する（ステップＡ２１）。
【００６７】
図１０の露出値決定処理においてＣＰＵ１０は、ステップＡ１の自動露出調整機能により設定された撮影時の露光時間３２をＲＡＭ３０から取得する（ステップＣ１）。次いで、二値化不明情報を記憶したセル全体の平均輝度値３６を算出し（ステップＣ３）、その平均輝度値３６がデコード可能範囲外である否かを判別する（ステップＣ５）。ＣＰＵ１０は、その平均輝度値３６がデコード可能範囲内であると判別した場合には（ステップＣ５；Ｎｏ）、デコードを中断して、図８のコード読取処理を終了する。
【００６８】
また、平均輝度値３６がデコード可能範囲外である場合には（ステップＣ５；Ｙｅｓ）、その平均輝度値３６に基づいて新たな露光時間３２を算出する（ステップＣ９）。即ち、平均輝度値３６が０〜２９内であった場合には（ステップＣ９；０〜２９）、ステップＣ１において取得した露光時間３２に実数値Ｎを乗算して新たな露光時間３２を算出し（ステップＣ１１）、２２６〜２５５内であった場合には（ステップＣ９；２２６〜２５５）、取得した露光時間３２を実数値Ｎで除算して新たな露光時間３２を算出する（ステップＣ１３）。
【００６９】
ＣＰＵ１０は、露出値決定処理によりＲＡＭ３０の露光時間３２を更新すると、図８のコード読取処理に戻り、マニュアル露出調整機能によってＲＡＭ３０の露光時間３２での撮影をカメラ部４０に行わせる（ステップＡ２３〜Ａ２５）。そして、その撮影により生成された画像データ３１からデータコードを判別してコード画像３３を検出できなかった場合には（ステップＡ２７〜Ａ２９；Ｎｏ）、再び露出値決定処理を行い、ステップＡ２１〜Ａ２９の処理を繰り返す。
【００７０】
このため、例えば、露光量が不足してデータコードが検出できない場合には、露出値決定処理により露光時間３２を長めて撮影時の露光量を増やし、逆に露光量が過多である場合には、露光時間３２を短縮して露光量を抑制させることで、データコードが検出可能な最適な露光時間３２を算出することとなる。
【００７１】
一方、ステップＡ２９においてデータコードを検出した場合には（ステップＡ２９；Ｙｅｓ）、そのデータコードのコード画像３３を画像データ３１から切り出し、図１１に示す二値化テーブル合成処理を開始する（ステップＡ３１）。
【００７２】
次の二値化テーブル合成処理の説明では、図１１のフローチャートと共に図１２を参照する。図１２（ａ）は、自動露出調整機能により撮影した際に生成された画像データ３１の画像例と、その画像データ３１に基づいて作成された二値化テーブル３４０のデータ構成例を示している。また、図１２（ｂ）は、マニュアル露出調整機能により撮影した際に生成された画像データ３１の画像例と、その画像データ３１に基づいて二値化テーブル３４２を作成した場合のデータ構成例を示している。
【００７３】
尚、図１２（ｂ）に二値化テーブル３４２を図示したのは、説明の簡便化のためであり、第１実施形態においてはマニュアル露出調整機能により撮影した画像データ３１に基づいて二値化テーブル３４２を作成しない。
【００７４】
図１１の二値化テーブル合成処理においてＣＰＵ１０は、先ず、二値化テーブル３４に記憶されたセル情報の中から二値化不明情報（不明セル）を選択し（ステップＤ１）、その不明セルに対応する座標情報を座標テーブル３５から取得する（ステップＤ３）。そして、その座標情報に基づいた座標を中心とした付近のセルをコード画像３３から検出する（ステップＤ５）。
【００７５】
ＣＰＵ１０は、ステップＤ５において検出したセルの多値データをコード画像３３から読み出し、その多値データに上述した二値化処理を施し、‘０’、‘１’及び‘２’に区分けしてセル情報を決定する（ステップＤ７）。そして、ステップＤ３で取得した座標情報に対応する二値化テーブル３４内のセル情報を、その決定したセル情報で更新して記憶した後（ステップＤ７）、二値化テーブル３４の不明セルの全てを選択したか否かを判別する（ステップＤ１１）。ＣＰＵ１０は、不明セル全てを選択していない場合には（ステップＤ１１；Ｎｏ）、ステップＤ１〜Ｄ１１の処理を繰り返して、全不明セルのセル情報を更新する。
【００７６】
例えば、自動露出調整機能による撮影の結果、図１２（ａ）のような画像データ３１が生成された場合、露光量が最適なデータ領域３１ａの二値化処理は、二値化テーブル３４０のセル情報３４０ａのように二値データ‘０’又は‘１’に変換できる。これに対して、露光量の低い暗い画像のデータ領域３１ｂに対する二値化処理は、二値データへの変換ができずセル情報３４０ｂのように二値化不明情報‘２’が記憶される。
【００７７】
この二値化テーブル３４０の二値化不明情報の占有率が１０％以上である場合には、デコード処理のエラー訂正機能が有効に機能しないため、露出値決定処理により算出した露光時間３２で再撮影を行う。例えば、図１２（ａ）の画像データ３１において平均輝度値３６が０〜２９の値で算出されたものとすると、始めの撮影時の露光時間３２に実数値Ｎ（例えば、２）が乗算されて露光時間３２が長められ、その結果、図１２（ｂ）のような明るい画像データ３１が得られる。
【００７８】
このため、図１２（ａ）の画像データ３１において、コントラストが低いために二値化が困難であったデータ領域３１ｂが、図１２（ｂ）の画像データ３１では、コントラストが高くなり、その二値化が可能になる。
【００７９】
ＣＰＵ１０は、不明セルであるセル情報３４１に対応する座標情報を座標テーブル３５から取得し、その座標情報で示されるセルに対する二値化処理を新たに撮影して得られたコード画像３３に行う。図１２（ｂ）の画像データ３１において、新たに撮影された画像データ３１のデータ領域３１ｂのコントラストが高くなっているため、二値化処理により‘０’又は‘１’の二値データに変換可能であり、例えば、二値化テーブル３４２のようにセル情報３４３として‘０’が決定される。
【００８０】
その結果、二値化テーブル３４０のセル情報３４１がセル情報３４３と置き換えられて更新される。このように、露光時間３２を変更して再撮影した画像データ３１に基づいて二値化テーブル３４０の二値化不明情報を更新することで、その二値化不明情報を二値データに置き換えて補完していくことができる。
【００８１】
ＣＰＵ１０は、二値化テーブル合成処理を終了すると（ステップＡ３１）、更新後の二値化テーブル３４に基づいて二値化の成否を判定する（ステップＡ１１）。このとき、再び占有率１０％以上であって二値化に失敗したと判定した場合には（ステップＡ１１；Ｎｏ）、ステップＡ２１に処理を移行して、露光値決定処理後、同様にステップＡ２３〜Ａ３１の処理を繰り返す。即ち、二値化テーブル３４の二値化不明情報の占有率が１０％未満となるまで、露光時間３２を再算出して再撮影を行い二値化テーブル３４を補完していくこととなる。
【００８２】
以上、第１実施形態によれば、始めに撮影して得られた画像データ３１に基づいて二値化処理を行い、その二値化が失敗したと判定した場合には、再撮影によって新たに得られた画像データ３１を部分的に二値化して二値化テーブル３４の二値化不明情報を更新して補完していく。即ち、二値化テーブル３４は、最初の撮影で得られた画像データ３１に対する二値化処理と、再撮影によって得られた画像データ３１に対する部分的な二値化処理とにより生成される。このため、多値データの画像データ３１に対して処理時間の係る画像処理を行うことなく、デコードに適した二値化テーブル３４を作成することができる。
【００８３】
また、露光量の低い画像であった場合には露光時間３２を長め、露光量の高い画像であった場合には露光時間３２を短縮するように露光時間３２を算出して再撮影を行うため、始めに撮影した画像とは異なる露光量を持つ画像データ３１が得られる。このため、一度の撮影で外光や陰、印刷媒体等の影響によってデータコードの読み取りが困難であっても、再撮影によって二値化テーブル３４をデコードに適したものに逐次補完していくことができる。従って、複数のＬＥＤを設けることなく、コード読取装置１のデータコードの読み取り性能を向上させることができる。
【００８４】
〔第２実施形態〕
次に、第２実施形態におけるコード読取装置１について図１３〜図１６を参照して説明する。尚、第２実施形態におけるコード読取装置１は、図３（ｂ）に示すＲＡＭ３０を図１３に示すＲＡＭ３０ａに置き換えた構成であり、他の構成要素は同一であるため同一の符号を付してそれらの説明は省略する。
【００８５】
図１３によれば、ＲＡＭ３０ａは、画像データ３１、露光時間３２、コード画像３３、座標テーブル３５、平均輝度値３６及び二値化テーブル３７を記憶している。二値化テーブル３７は、撮影時テーブル３８と、合成テーブル３９とを有して構成される。
【００８６】
第１実施形態において、マニュアル露出調整機能による再撮影時には二値化テーブルを作成しなかったが、第２実施形態においては、その再撮影時にも二値化テーブルを作成する。その撮影により生成した二値化テーブルを撮影時テーブル３８として記憶する。合成テーブル３９は、自動露出調整機能及びマニュアル露出調整機能により生成された画像データ３１から生成された２つの二値化テーブルを合成した二値化テーブルである。
【００８７】
図１４及び１５は、第２実施形態におけるコード読取装置１の具体的な動作を説明するためのフローチャートである。尚、図１４及び１５のフローチャートにおいて、第１実施形態の図８〜図１１に示したフローチャートと同一の処理ステップには、同一のステップ番号を付して、その説明は省略する。
【００８８】
図１４によれば、ＣＰＵ１０は、第１実施形態と同様に、自動露出調整機能による撮影を行った後に（ステップＡ１〜Ａ７）、二値化テーブル作成処理を行う（ステップＡ９ａ）。尚、第２実施形態における二値化テーブル作成処理は、図９に示す二値化テーブル作成処理と同等の処理であるが、ステップＢ５では二値化テーブル３７の撮影時テーブル３８にセル情報を記憶して当該撮影時テーブル３８を作成する。
【００８９】
そして、ステップＡ１１ａにおいては、撮影時テーブル３８に基づいて二値化が成功したか否かを判定し、当該二値化が成功したと判定した場合には（ステップＡ１１ａ；Ｙｅｓ）、第１実施形態と同様にデコード処理を行う（ステップＡ１３）。また、二値化が失敗したと判定した場合には（ステップＡ１１ａ；Ｎｏ）、露出値決定処理を行う（ステップＡ２１ａ）。
【００９０】
尚、第２実施形態における露出値決定処理は、図１０に示す露出値決定処理と同等の処理であるが、ステップＣ３では撮影時テーブル３８に記憶された二値化不明情報に基づいて平均輝度値３６を算出する。
【００９１】
ＣＰＵ１０は、二値化テーブル３７の撮影時テーブル３８を合成テーブル３９として記憶して（ステップＡ２０）、ステップＡ２３に処理を移行し、第１実施形態と同様にマニュアル露出調整機能による撮影を行った後に（ステップＡ２３〜Ａ２９）、図１５に示す再撮影時二値化処理を行う（ステップＡ３３）。
【００９２】
図１５の再撮影時二値化処理においてＣＰＵ１０は、ステップＡ９ａと同様に二値化テーブル作成処理を行って、再撮影後のコード画像３３に基づいて二値化テーブル３７の撮影時テーブル３８を作成する（ステップＥ１）。そして、その撮影時テーブル３８の二値化不明情報の占有率に基づいて二値化が成功したか否かを判定し（ステップＥ３）、成功したと判定した場合には（ステップＥ３；Ｙｅｓ）、デコーダプログラム２２をＲＯＭ２０から読み出して撮影時テーブル３８に対して所定のデコード処理を行う（ステップＥ５）。
【００９３】
従って、再撮影によりデコードに適した二値化テーブル３７が得られた場合には、二値化テーブル合成処理を行わずに、その二値化テーブル３７を用いてデコード処理を行うこととなる。
【００９４】
また、二値化に失敗したと判定した場合には（ステップＥ３；Ｎｏ）、二値化テーブル３７の合成テーブル３９に撮影時テーブル３８を合成する二値化テーブル合成処理を行う（ステップＥ７）。第２実施形態における二値化テーブル合成処理は、図１１に示す第１実施形態における二値化テーブル合成処理と略同一の処理であるが、簡単に説明すると次のようになる。
【００９５】
先ず、二値化テーブル３７の合成テーブル３９に記憶されたセル情報の中から二値化不明情報（不明セル）を選択し、その不明セルに対応する座標情報を座標テーブル３５から取得する。そして、その座標情報に対応する撮影時テーブル３８のセル情報を取得して、そのセル情報を合成テーブル３９の選択したセル情報と置き換えて当該合成テーブル３９を更新する。この一連の処理を全不明セルのセル情報に対して行う。
【００９６】
例えば、自動露出調整機能の撮影によって図１６のようなデータ構成の合成テーブル３９が作成され、マニュアル露出調整機能による再撮影により撮影時テーブル３８が作成されたとする。このとき、二値化不明情報が記憶されたセル情報３９ａを合成テーブル３９の中からＣＰＵ１０が不明セルとして選択し、その不明セルに対応するセル情報３８ａを撮影時テーブル３８から取得して合成テーブル３９のセル情報３９ａに置き換える。また、不明セルであるセル情報３９ｂを選択し、撮影時テーブル３８のセル情報３８ｂでセル情報３９ｂを置き換える。
【００９７】
このように、合成テーブル３９に記憶された二値化不明情報を撮影時テーブル３８のセル情報で置き換えることで図１６のように新たな合成テーブル３９が生成される。ＣＰＵ１０は、二値化テーブル合成処理後の合成テーブル３９に基づいて二値化が成功したか否かを判定し（ステップＥ９）、成功したと判定した場合には（ステップＥ９；Ｙｅｓ）、合成テーブル３９に基づいたデコード処理を行って（ステップＥ１１）、図１４のステップＡ１５に処理を移行し、失敗したと判定した場合には（ステップＥ９；Ｎｏ）、ステップＡ２２に処理を移行して、再撮影を行う。
【００９８】
以上、第２実施形態によれば、第１実施形態の効果に加えて、再撮影時に二値化テーブル３７の撮影時テーブル３８を作成して二値化が成功したと判定した場合に、二値化テーブル合成処理を行うことなく、その撮影時テーブル３８に基づいてデコードを行うため、データコードの読み取り時間を短くすることができる。また、デコードまでの処理のパターンが増えるため、コード読取装置１のデータコードの読み取り性能を向上させることができる。
【００９９】
尚、上述した実施形態において、二値化に失敗したと判定した場合には、撮影条件としての露光時間３２を変更して再撮影を行うこととして説明したが、イメージセンサ４３のゲインを変更してもよいし、絞り機構４２の絞り値を変更してもよい。その変更方法としては、図１０の露出値決定処理と同等の処理で実現可能であり、例えば、ステップＣ１１において平均輝度値３６が０〜２９内である場合には、イメージセンサ４３の感度に実数値Ｎを乗算してゲインを高め、２２６〜２５５内である場合には、実数値Ｎで除算してゲインを低めて調整する。
【０１００】
また、このような撮影条件を適宜複数組み合わせて、その複数の撮影条件を変更して再撮影を行うこととしてもよい。このように、様々な撮影条件を変更して再撮影を行うことで、輝度分布の異なる様々なパターンの画像データ３１が得られるため、二値化テーブルの補完精度が上がり、コード読取装置１のデータコードの読み取り性能を更に向上させることができる。
【図面の簡単な説明】
【０１０１】
【図１】コード読取装置の外観図の一例。
【図２】コード読取装置の機能構成の一例を示すブロック図。
【図３】第１実施形態における（ａ）はＲＯＭ、（ｂ）はＲＡＭのデータ構成の一例を示す図。
【図４】データコードの判別方法を説明するための図。
【図５】二値化処理の処理方法を説明するための図。
【図６】二値化テーブルと座標テーブルの作成例を示す図。
【図７】露出時間の変更方法を説明するための図。
【図８】第１実施形態におけるコード読取装置の動作を説明するためのフローチャート。
【図９】二値化テーブル作成処理を説明するためのフローチャート。
【図１０】露出値決定処理を説明するためのフローチャート。
【図１１】二値化テーブル合成処理を説明するためのフローチャート。
【図１２】第１実施形態における二値化テーブル合成処理の処理内容を説明するための図。
【図１３】第２実施形態におけるＲＡＭのデータ構成の一例を示す図。
【図１４】第２実施形態におけるコード読取装置の動作を説明するためのフローチャート。
【図１５】再撮影時二値化処理を説明するためのフローチャート。
【図１６】第２実施形態における二値化テーブル合成処理の処理内容を説明するための図。
【符号の説明】
【０１０２】
１      コード読取装置
２０    ＲＯＭ
２１    コード読取プログラム
２２    デコーダプログラム
３０    ＲＡＭ
３１    画像データ
３２    露光時間
３３    コード画像
３４    二値化テーブル
３５    座標テーブル
３６    平均輝度値
４０    カメラ部
４１    撮影レンズ
４２    絞り機構
４３    イメージセンサ
４４    Ａ／Ｄ変換器
４５    撮影制御部
【図１】
2008083843.tif 000003
【図２】
2008083843.tif 000004
【図３】
2008083843.tif 000005
【図５】
2008083843.tif 000006
【図７】
2008083843.tif 000007
【図８】
2008083843.tif 000008
【図９】
2008083843.tif 000009
【図１０】
2008083843.tif 000010
【図１１】
2008083843.tif 000011
【図１３】
2008083843.tif 000012
【図１４】
2008083843.tif 000013
【図１５】
2008083843.tif 000014
【図１６】
2008083843.tif 000015
【図４】
2008083843.tif 000016
【図６】
2008083843.tif 000017
【図１２】
2008083843.tif 000018