(57)【特許請求の範囲】
【請求項１】
読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置であって、
前記読取手段で読み取られた前記シンボルイメージの幅を所定基準値と比較する比較手段と、
前記比較手段による比較結果に基づいて、前記シンボルイメージに対するデコード処理時での誤差許容度、あるいはデコード処理の回数を変更する変更手段と、
を具備したことを特徴とするイメージ処理装置。
【請求項２】
前記変更手段は、前記比較手段による比較で前記所定基準値よりも小の場合は前記誤差許容度を低く変更する、あるいは前記比較手段による比較で前記所定基準値よりも大の場合は前記誤差許容度を高く変更する、
ことを特徴とする請求項１に記載のイメージ処理装置。
【請求項３】
前記変更手段は、前記誤差許容度を変更すると共に、前記読取手段で読み取られたシンボルイメージに対するデコード処理の回数を変更する、
ことを特徴とする請求項１又は２に記載のイメージ処理装置。
【請求項４】
前記変更手段は、前記比較手段による比較で前記所定基準値よりも小の場合は前記回数を多く変更する、あるいは前記比較手段による比較で前記所定基準値よりも大の場合は前記回数を少なく変更する、
ことを特徴とする請求項１〜３の何れかに記載のイメージ処理装置。
【請求項５】
読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置であって、
当該処理装置から前記シンボルイメージまでの読取距離を判別する判別手段と、
前記判別手段による読取距離の結果に基づいて、前記シンボルイメージに対するデコード処理時での誤差許容度、あるいはデコード処理の回数を変更する変更手段と、
を具備したことを特徴とするイメージ処理装置。
【請求項６】
前記変更手段は、前記判別手段による判別で前記読取距離が遠い場合は前記誤差許容度を低く変更する、あるいは前記判別手段による判別で前記読取距離が近い場合は前記誤差許容度を高く変更する、
ことを特徴とする請求項５記載のイメージ処理装置。
【請求項７】
前記変更手段は、前記判別手段による判別で前記読取距離が遠い場合は前記回数を多く変更する、あるいは前記判別手段による判別で前記読取距離が近い場合は前記回数を少なく変更する、
ことを特徴とする請求項５又は６に記載のイメージ処理装置。
【請求項８】
前記変更手段は、前記誤差許容度を変更すると共に、前記読取手段で読み取られたシンボルイメージに対するデコード処理の回数を変更する、
ことを特徴とする請求項５〜７の何れかに記載のイメージ処理装置。
【請求項９】
読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置のコンピュータを制御するためのプログラムであって、
前記コンピュータを、
前記読取手段で読み取られた前記シンボルイメージの幅を所定基準値と比較する比較手段、
前記比較手段による比較結果に基づいて、前記シンボルイメージに対するデコード処理時での誤差許容度、あるいはデコード処理の回数を変更する変更手段、
として機能させるようにしたコンピュータ読み取り可能なプログラム。
【請求項１０】
読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置のコンピュータを制御するためのプログラムであって、
前記コンピュータを、
当該処理装置から前記シンボルイメージまでの読取距離を判別する判別手段、
前記判別手段による読取距離の結果に基づいて、前記シンボルイメージに対するデコード処理時での誤差許容度、あるいはデコード処理の回数を変更する変更手段、
として機能させるようにしたコンピュータ読み取り可能なプログラム。  
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置に関する。  
【背景技術】
【０００２】
従来、レーザ光を用いて１次元のバーコードをスキャンするスキャナ装置が知られている。このスキャナ装置は、レーザ光を横方向に振って出射し、バーコードで反射された反射光を受光して得られたイメージデータを、所定の閾値を用いてデコードすることにより、バーコードをスキャンしている。
【０００３】
バーコードの読み取りにおいて、読み取りレスポンスを向上して高速にすることと、デコードの正確性を向上することと、の要請がある。デコードの読み取りレスポンスを向上するために、二度読み防止機能を有するスキャナ装置において、加速度計により検出された加速度が所定値に変化した場合に、意図的に二度読みしたと判断し、イメージデータのデコードを行う構成が知られている（例えば、特許文献１参照）。
【０００４】
また、デコードの読み取りレスポンスを向上するために、イメージデータをビット数の少ないＢＣＤコードに変更してデコードするスキャナ装置が知られている（例えば、特許文献２参照）。
【０００５】
また、デコードの正確性を向上するために、キャラクタ毎に閾値を補正し、補正した閾値を用いてイメージデータをデコードするスキャナ装置が知られている（例えば、特許文献３参照）。
【０００６】
また、デコードの正確性を向上するために、バー幅が所定幅よりも小さく、読取距離が遠い場合に、イメージデータのデコードを行わないスキャナ装置が知られている（例えば、特許文献４参照）。読取距離が遠いと、デコードの正確性が低減するからである。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平８−１４７４０３号公報
【特許文献２】特開平７−４９９１９号公報
【特許文献３】特開平９−６８８５号公報
【特許文献４】特開平６−１２５１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、従来のスキャナ装置では、シンボルの読み取り距離に応じて、読み取りレスポンス及びデコードの正確性を適切にすることができなかった。
【０００９】
本発明の課題は、シンボルイメージに対するデコードの正確性を適切にすることである。  
【課題を解決するための手段】
【００１０】
請求項１は、読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置であって、前記読取手段で読み取られた前記シンボルイメージの幅を所定基準値と比較する比較手段と、前記比較手段による比較結果に基づいて、前記シンボルイメージに対するデコード処理時での誤差許容度、あるいはデコード処理の回数を変更する変更手段と、を具備したことを特徴とする。
請求項５は、読取手段で読み取られたシンボルイメージに対してデコード処理を行うイメージ処理装置であって、当該処理装置から前記シンボルイメージまでの読取距離を判別する判別手段と、前記判別手段による読取距離の結果に基づいて、前記シンボルイメージに対するデコード処理時での誤差許容度、あるいはデコード処理の回数を変更する変更手段と、を具備したことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、シンボルイメージに対するデコードの正確性を適切にできる
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施の形態のスキャナ装置の構成を示すブロック図である。
【図２】スキャナ部の構成を示すブロック図である。
【図３】第１のスキャン処理を示すフローチャートである。
【図４】図３の続きの第１のスキャン処理を示すフローチャートである。
【図５】第１のスキャン処理のバーコード開始位置解析処理を示すフローチャートである。
【図６】第１のスキャン処理のバーコード終了位置解析処理を示すフローチャートである。
【図７】第１のスキャン処理の最小エレメント幅解析処理を示すフローチャートである。
【図８】第１のスキャン処理のデコード処理を示すフローチャートである。
【図９】デコード処理の４値化処理を示すフローチャートである。
【図１０】第２の実施の形態のスキャナ装置の機能構成を示すブロック図である。
【図１１】第２のスキャン処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明に係る第１及び第２の実施の形態を順に詳細に説明する。なお、本発明は、図示例に限定されるものではない。
【００１４】
（第１の実施の形態）
図１〜図９を参照して、本実施の形態に係る第１の実施の形態を説明する。先ず、図１及び図２を参照して、本実施の形態の装置構成を説明する。図１に、本実施の形態のスキャナ装置１０の構成を示す。図２に、スキャナ部１８の構成を示す。
【００１５】
図１に示すように、本実施の形態のスキャナ装置１０は、読み取り対象物であるシンボルとしての１次元のバーコードを読み取り管理するハンディターミナルである。スキャナ装置１０は、例えば、倉庫や、小売店の店舗で使用される。バーコードは、例えば、倉庫や店舗等に並べられた商品に付されているものとする。
【００１６】
スキャナ装置１０は、判別部、デコード部としてのＣＰＵ（Central Processing Unit）１１と、操作部１２と、ＲＡＭ（Random Access Memory）１３と、表示部１４と、ＲＯＭ（Read Only Memory）１５と、無線通信部１６と、フラッシュメモリ１７と、スキャナ部１８と、報知部１９と、電源部２０と、を備える。電源部２０を除くスキャナ装置１０の各部は、バス２１を介して互いに接続されている。
【００１７】
ＣＰＵ１１は、スキャナ装置１０の各部を制御する。ＣＰＵ１１は、各種プログラムのうち指定されたプログラムをＲＯＭ１５から読み出してＲＡＭ１３に展開し、展開されたプログラムとの協働で各種処理を実行する。
【００１８】
ＣＰＵ１１は、第１のスキャンプログラム１５１に従い、スキャナ部１８からバーコードまでの読み取り距離が近距離か否かを判別し、前記読み取り距離が近距離であると判別された場合に、前記バーコードのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くし、且つデコード結果の照合回数を少なく設定する。また、ＣＰＵ１１は、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くし、且つ前記照合回数を多く設定する。そして、ＣＰＵ１１は、前記設定に応じて前記イメージデータのデコードを行う。
【００１９】
操作部１２は、文字入力キー等の各種キーからなるキー群を備え、ユーザからの各キーの押下入力に応じた操作情報をＣＰＵ１１に出力する。操作部１２は、少なくとも、スキャナ部１８を用いたバーコードスキャンのトリガキーを有する。
【００２０】
ＲＡＭ１３は、揮発性の半導体メモリであり、各種データ及び各種プログラムを格納するワークエリアを有する。
【００２１】
表示部１４は、ＬＣＤ（Liquid Crystal Display）、ＥＬ（ElectroLuminescent）ディスプレイ等の表示パネルを備える表示部であり、ＣＰＵ１１から入力される表示情報に応じて表示パネルに各種表示を行う。
【００２２】
ＲＯＭ１５は、各種データ及び各種プログラムを記憶する読み出し専用の半導体メモリである。ＲＯＭ１５には、スキャンプログラム１５１が記憶されている。
【００２３】
無線通信部１６は、携帯電話通信方式の無線通信部である。無線通信部１６は、アンテナ、変調部、復調部、信号処理部等を備え、基地局と無線通信を行う。無線通信部１６は、送信する情報の信号を、信号処理部で信号処理し、変調部により変調してアンテナから無線電波として基地局に送信する。この基地局は、通信先の機器と通信ネットワークを介して接続されている。また、無線通信部１６は、アンテナにより基地局から受信した無線電波の受信信号を復調部により復調し、信号処理部で信号処理して受信情報を得る。このようにして、無線通信部１６は、基地局を介して、通信先の機器と通信を行う。また、無線通信部１６は、無線ＬＡＮ（Local Area Network）方式の無線通信部とし、アクセスポイントを介して、通信先の機器と通信を行うこととしてもよい。
【００２４】
フラッシュメモリ１７は、情報を読み出し及び書き込み可能に記憶する不揮発性の半導体メモリである。
【００２５】
スキャナ部１８は、ＣＰＵ１１の制御信号に従い、一次元のバーコードをスキャンして、バーコードのイメージデータを取得し、そのイメージデータをＣＰＵ１１に出力するレーザスキャナ部である。図２に示すように、スキャナ部１８は、発光部１８１と、バイブレーションミラー１８２と、受光部１８３と、ゲイン回路１８４と、二値化回路１８５と、を備える。
【００２６】
発光部１８１は、レーザ光Ｌを発光して出射する。バイブレーションミラー１８２は、ＣＰＵ１１の制御信号に従い、モータ（図示略）等によりバイブレートされることにより、発光部１８１から出射されたレーザ光Ｌを反射して左右に広げる。受光部１８３は、バイブレーションミラー１８２により反射されたレーザ光Ｌが実際に読み取り対象物（バーコード）に当たった反射光を受光して電気信号に変換するモジュールである。
【００２７】
ゲイン回路１８４は、受光部１８３で受光した反射光の電気信号を増幅して波形を最適化する。二値化回路１８５は、ゲイン回路１８４で最適化された電気信号をバーコードのイメージデータとしての二値データに変換してＣＰＵ１１に出力する。ＣＰＵ１１は、二値化回路１８５から入力されたイメージデータをデコードする。
【００２８】
報知部１９は、ＣＰＵ１１の制御に応じて、ブザー音を出力する報知部である。報知部１９は、バーコードスキャンが成功した場合に、ブザー音出力するよう制御される。
【００２９】
電源部２０は、リチウム電池等の二次電池であり、スキャナ装置１０の各部に電源供給を行う。電源部２０は、アルカリ電池等の一次電池としてもよい。
【００３０】
次に、図３〜図９を参照して、スキャナ装置１０の動作を説明する。図３に、第１のスキャン処理を示す。図４に、図３の続きの第１のスキャン処理を示す。図５に、第１のスキャン処理のバーコード開始位置解析処理を示す。図６に、第１のスキャン処理のバーコード終了位置解析処理を示す。図７に、第１のスキャン処理の最小エレメント幅解析処理を示す。図８に、第１のスキャン処理のデコード処理を示す。図９に、デコード処理の４値化処理を示す。
【００３１】
スキャナ装置１０で実行される第１のスキャン処理は、読み取り対象のバーコードをスキャンして情報を読み取る処理である。予め、ユーザにより、スキャナ部１８のレーザ光の出射方向に、読み取り対象のバーコードが合わせられるように、スキャナ装置１０の位置及び姿勢が調整される。より具体的には、スキャナ部１８のレーザ光の振れ幅の方向が、バーコードの長手方向に合わせられる。
【００３２】
ここでは、バーコードに含まれる各キャラクタが６本のエレメント（３本の黒バー及び３本の白スペース）で構成される規格であるＣｏｄｅ１２８のバーコードを読み取る例を説明する。しかし、これに限定されるものではなく、バーコードに含まれる各キャラクタがＣｏｄｅ１２８以外の６本のエレメントからなる規格や、各キャラクタが６以外の本数のエレメントからなる規格のバーコードを読み取る構成としてもよい。
【００３３】
スキャナ装置１０において、ユーザにより操作部１２のバーコードスキャンのトリガボタンが押下されたことをトリガとして、ＣＰＵ１１は、ＲＯＭ１５から読み出されて適宜ＲＡＭ１３に展開された第１のスキャンプログラム１５１との協働で、第１のスキャン処理を実行する。ＣＰＵ１１は、第１のスキャン処理の開始とともに、タイマのカウントを開始する。
【００３４】
図３及び図４に示すように、先ず、ＣＰＵ１１は、タイマのカウント値に応じて、スキャン処理開始から予め設定された所定時間を経過してタイムアウトしたか否かを判別する（ステップＳ１１）。この所定時間は、スキャン処理を終了するためのタイムアウトの時間である。タイムアウトした場合（ステップＳ１１；ＹＥＳ）、第１のスキャン処理が終了する。
【００３５】
タイムアウトしていない場合（ステップＳ１１；ＮＯ）、ＣＰＵ１１は、スキャナ部１８からバーコードのイメージデータの取得を完了する（ステップＳ１２）。イメージデータは、バーコードのイメージの左から右へ並んだ黒バー及び白スペースの各データ幅の配列Ｄａｔ［０］，Ｄａｔ［１］，Ｄａｔ［２］…を有するものとする。例えば、バーコードの左横の白スペースのデータ幅が配列Ｄａｔ［０］となり、バーコードの最も左の黒バーのデータ幅が配列Ｄａｔ［１］となる。
【００３６】
そして、ＣＰＵ１１は、ステップＳ１２で取得したバーコードのイメージデータについて、バーコード開始位置解析処理を行う（ステップＳ１３）。ここで、図５を参照して、ステップＳ１３のバーコード開始位置解析処理の説明を行う。先ず、ＣＰＵ１１は、イメージデータのバーコード開始位置（バーコードの左端の黒バー位置）の変数Ｐｏｓ１に１を設定する（ステップＳ４１）。
【００３７】
そして、ＣＰＵ１１は、変数Ｐｏｓ１＋１がイメージデータの全エレメントの本数ＤａｔＮｕｍより小さいか否かを判別する（ステップＳ４２）。ステップＳ４２では、変数Ｐｏｓ１＋１がイメージデータのバーコードの右端を超えておらず正常か、同じく超えており異常かが判別されている。
【００３８】
Ｐｏｓ１＋１＜ＤａｔＮｕｍである場合（ステップＳ４２；ＹＥＳ）、正常であり、ＣＰＵ１１は、配列Ｄａｔ［Ｐｏｓ１＋１］×１０が配列Ｄａｔ［Ｐｏｓ１−１］より小さいか否かを判別する（ステップＳ４３）。ステップＳ４３では、配列Ｄａｔ［Ｐｏｓ１＋１］の１０倍の値が、これと同じ色で左隣の配列Ｄａｔ［Ｐｏｓ１−１］より小さく、その同じ色で左隣の配列Ｄａｔ［Ｐｏｓ１−１］がイメージデータのバーコードの左隣の大きな白スペース部分であるか否かが判別されている。
【００３９】
Ｄａｔ［Ｐｏｓ１＋１］×１０≧Ｄａｔ［Ｐｏｓ１−１］である場合（ステップＳ４２；ＮＯ）、配列Ｄａｔ［Ｐｏｓ１−１］が大きな白スペース部分でなく、ＣＰＵ１１は、変数Ｐｏｓ１を１インクリメントし（ステップＳ４４）、ステップＳ４２に移行される。
【００４０】
Ｄａｔ［Ｐｏｓ１＋１］×１０＜Ｄａｔ［Ｐｏｓ１−１］である場合（ステップＳ４３；ＹＥＳ）、配列Ｄａｔ［Ｐｏｓ１−１］が大きな白スペース部分であり、ＣＰＵ１１は、バーコード開始位置を取得した旨を設定し（ステップＳ４５）、バーコード開始位置解析処理を終了する。
【００４１】
Ｐｏｓ１＋１≧ＤａｔＮｕｍである場合（ステップＳ４２；ＮＯ）、異常であり、ＣＰＵ１１は、バーコード開始位置を未取得の旨を設定し（ステップＳ４６）、
バーコード開始位置解析処理を終了する。
【００４２】
そして、図３に戻り、ＣＰＵ１１は、ステップＳ１３の取得結果に応じてバーコード開始位置Ｐｏｓ１の取得を成功したか否かを判別する（ステップＳ１４）。バーコード開始位置Ｐｏｓ１の取得を失敗した場合（ステップＳ１４；ＮＯ）、ステップＳ１１に移行される。
【００４３】
バーコード開始位置Ｐｏｓ１の取得を成功した場合（ステップＳ１４；ＹＥＳ）、ＣＰＵ１１は、バーコード終了位置解析処理を実行する（ステップＳ１５）。ここで、図６を参照して、ステップＳ１５のバーコード終了位置解析処理の説明を行う。先ず、ＣＰＵ１１は、イメージデータのバーコード終了位置（バーコードの右端の黒バー位置）の変数Ｐｏｓ２にバーコード開始位置Ｐｏｓ１＋２を設定する（ステップＳ５１）。Ｐｏｓ１＋２は、バーコード開始位置の黒バーの右隣の黒バーの位置となる。
【００４４】
そして、ＣＰＵ１１は、変数Ｐｏｓ２＋１が本数ＤａｔＮｕｍより小さいか否かを判別する（ステップＳ５２）。ステップＳ５２では、変数Ｐｏｓ２＋１がイメージデータのバーコードの右端を超えておらず正常か、同じく超えており異常かが判別されている。
【００４５】
Ｐｏｓ２＋１＜ＤａｔＮｕｍである場合（ステップＳ５２；ＹＥＳ）、正常であり、ＣＰＵ１１は、配列Ｄａｔ［Ｐｏｓ２−１］×１０が配列Ｄａｔ［Ｐｏｓ２＋１］より小さいか否かを判別する（ステップＳ５３）。ステップＳ５３では、配列Ｄａｔ［Ｐｏｓ２−１］の１０倍の値が、これと同じ色で右隣の配列Ｄａｔ［Ｐｏｓ２＋１］より小さく、その同じ色で右隣の配列Ｄａｔ［Ｐｏｓ２＋１］がイメージデータのバーコードの右隣の大きな白スペース部分であるか否かが判別されている。
【００４６】
Ｄａｔ［Ｐｏｓ２−１］×１０≧Ｄａｔ［Ｐｏｓ２＋１］である場合（ステップＳ５３；ＮＯ）、配列Ｄａｔ［Ｐｏｓ２＋１］が大きな白スペース部分でなく、ＣＰＵ１１は、変数Ｐｏｓ２を２インクリメントし（ステップＳ５４）、ステップＳ５２に移行される。
【００４７】
Ｄａｔ［Ｐｏｓ２−１］×１０＜Ｄａｔ［Ｐｏｓ２＋１］である場合（ステップＳ５３；ＹＥＳ）、配列Ｄａｔ［Ｐｏｓ２＋１］が大きな白スペース部分であり、ＣＰＵ１１は、バーコード終了位置を取得した旨を設定し（ステップＳ５５）、バーコード終了位置解析処理を終了する。
【００４８】
Ｐｏｓ２＋１≧ＤａｔＮｕｍである場合（ステップＳ５２；ＮＯ）、異常であり、ＣＰＵ１１は、バーコード終了位置を未取得の旨を設定し（ステップＳ５６）、
バーコード終了位置解析処理を終了する。
【００４９】
そして、図３に戻り、ＣＰＵ１１は、ステップＳ１５の取得結果に応じてバーコード終了位置Ｐｏｓ２の取得を成功したか否かを判別する（ステップＳ１６）。バーコード終了位置Ｐｏｓ２の取得を失敗した場合（ステップＳ１６；ＮＯ）、ステップＳ１１に移行される。
【００５０】
バーコード終了位置Ｐｏｓ２の取得を成功した場合（ステップＳ１６；ＹＥＳ）、ＣＰＵ１１は、最小エレメント幅解析処理を実行する（ステップＳ１７）。ここで、図７を参照して、ステップＳ１７の最小エレメント幅解析処理の説明を行う。先ず、ＣＰＵ１１は、エレメント位置の変数ｓにバーコード開始位置Ｐｏｓ１を代入する（ステップＳ６１）。そして、ＣＰＵ１１は、最小エレメント幅の変数Ｍｉｎに配列Ｄａｔ［ｓ］を代入する（ステップＳ６２）。
【００５１】
そして、ＣＰＵ１１は、変数ｓがバーコード終了位置Ｐｏｓ２以下であるか否かを判別する（ステップＳ６３）。ｓ≦Ｐｏｓ２である場合（ステップＳ６３；ＹＥＳ）、ＣＰＵ１１は、配列Ｄａｔ［ｓ］が変数Ｍｉｎ以下であるか否かを判別する（ステップＳ６４）。
【００５２】
Ｄａｔ［ｓ］≦Ｍｉｎである場合（ステップＳ６４；ＹＥＳ）、ＣＰＵ１１は、変数Ｍｉｎに配列Ｄａｔ［ｓ］を代入する（ステップＳ６５）。そして、ＣＰＵ１１は、変数ｓを１インクリメントし（ステップＳ６６）、ステップＳ６３に移行される。Ｄａｔ［ｓ］＞Ｍｉｎである場合（ステップＳ６４；ＮＯ）、ステップＳ６６に移行される。
【００５３】
ｓ＞Ｐｏｓ２である場合（ステップＳ６３；ＮＯ）、最小エレメント幅解析処理を終了する。
【００５４】
そして、図３に戻り、ＣＰＵ１１は、最小エレメント幅Ｍｉｎが予め設定された基準値より小さいか否かを判別する（ステップＳ１８）。ステップＳ１８の基準値は、スキャナ部１８によるバーコードの読み取り距離が遠距離か近距離かを判別するための基準値であり、第１のスキャンプログラムに含まれるか、ＲＯＭ１５に記憶されている。
【００５５】
最小エレメント幅Ｍｉｎ＜基準値である場合（ステップＳ１８；ＹＥＳ）、ＣＰＵ１１は、変数Ｔに０．２５を代入し、照合を実施する回数の変数Ｃに３を代入する（ステップＳ１９）。変数Ｔは、バーの比率誤差について、どこまで許容するのかを表すパラメータであり、変数Ｔが小さいほど誤差を許容して解析を行う。最小エレメント幅Ｍｉｎ≧基準値である場合（ステップＳ１８；ＮＯ）、ＣＰＵ１１は、変数Ｔに０を代入し、変数Ｃに１を代入する（ステップＳ２０）。
【００５６】
そして、ＣＰＵ１１は、ループ回数の変数ｉに０を代入してクリアする（ステップＳ２１）。そして、ＣＰＵ１１は、デコード処理を実行する（ステップＳ２２）。ここで、図８を参照して、ステップＳ２２のデコード処理を説明する。
【００５７】
先ず、ＣＰＵ１１は、変数Ｐｏｓにバーコード開始位置Ｐｏｓ１を代入する（ステップＳ７１）。そして、ＣＰＵ１１は、変数Ｐｏｓ＋６の値が本数ＤａｔＮｕｍより小さいか否かを判別する（ステップＳ７２）。ステップＳ１６で加算する６は、バーコードの１キャラクタ分の黒バー及び白スペースの数である。
【００５８】
Ｐｏｓ＋６＜ＤａｔＮｕｍである場合（ステップＳ７２；ＹＥＳ）、ＣＰＵ１１は、４値化処理を実行する（ステップＳ７３）。ここで、図９を参照して、ステップＳ７３の４値化処理を説明する。
【００５９】
Ｃｏｄｅ１２８の規格において、黒バー及び白スペースのデータ幅は、４種類の値（太さ）が設定されている。４値化処理は、１キャラクタ分のイメージデータにおいて、閾値及び変数Ｔを用いて、３本の各黒バー及び３本の各白スペースのデータ幅を４種類の値のいずれであるかを判定する処理である。但し、黒バー及び白スペースのデータ幅が４種類であるバーコードの規格に限定されるものではない。
【００６０】
図９に示すように、先ず、ＣＰＵ１１は、配列Ｄａｔ［Ｐｏｓ］，Ｄａｔ［Ｐｏｓ＋１］，Ｄａｔ［Ｐｏｓ＋２］，Ｄａｔ［Ｐｏｓ＋３］，Ｄａｔ［Ｐｏｓ＋４］，Ｄａｔ［Ｐｏｓ＋５］を加算して、１キャラクタ分のイメージデータのデータ幅の変数Ｃｈａｒを算出する（ステップＳ８１）。
【００６１】
先ず、ＣＰＵ１１は、変数Ｃｈａｒを１１で除算した値を変数Ｍとして設定する（ステップＳ８２）。Ｃｏｄｅ１２８の規格において、１キャラクタ分のイメージデータのデータ幅は、１１値で一定である。ステップＳ８２では、１キャラクタ分の変数Ｃｈａｒを１１（値）で除算することにより、１値に対応するイメージデータのデータ幅を変数Ｍとして算出している。
【００６２】
そして、ＣＰＵ１１は、変数Ｍを０．５倍した値を変数Ｂ０５として設定し、変数Ｍを１．５倍した値を変数Ｂ１５として設定し、変数Ｍを２．５倍した値を変数Ｂ２５として設定し、変数Ｍを３．５倍した値を変数Ｂ３５として設定し、変数Ｍを４．５倍した値を変数Ｂ４５として設定する（ステップＳ８３）。変数Ｂ０５，Ｂ１５，Ｂ２５，Ｂ３５，Ｂ４５は、順に、１値の０．５、１．５、２．５、３．５、４．５倍に対応するイメージデータのデータ幅の変数である。４値化処理において、変数Ｂ０５，Ｂ１５，Ｂ２５，Ｂ３５，Ｂ４５は、黒バー及び白スペースのデータ幅を判定する（４値化する）ための閾値として使用される。
【００６３】
そして、ＣＰＵ１１は、ループカウンタｊに変数Ｐｏｓを設定する（ステップＳ８４）。そして、ＣＰＵ１１は、ループカウンタｊが変数Ｐｏｓ＋６よりも小さいか否かを判別する（ステップＳ８５）。ｊ＜Ｐｏｓ＋６である場合（ステップＳ８５；ＹＥＳ）、ＣＰＵ１１は、配列Ｄａｔ［ｊ］が変数Ｂ１５よりも小さいか否かを判別する（ステップＳ８６）。
【００６４】
Ｄａｔ［ｊ］＜Ｂ１５である場合（ステップＳ８６；ＹＥＳ）、ＣＰＵ１１は、ループカウンタｊに対応する黒バー又は白スペースのデータ幅の４値の配列Ｒ［ｊ］に１を設定する（ステップＳ８７）。そして、ＣＰＵ１１は、配列Ｄａｔ［ｊ］から変数Ｂ０５を減算した値を変数Ｗ１として設定し、変数Ｂ１５から配列Ｄａｔ［ｊ］を減算した値を変数Ｗ２として設定する（ステップＳ８８）。変数Ｗ１は、配列Ｄａｔ［ｊ］と、配列Ｄａｔ［ｊ］の左側の閾値（変数Ｂ０５，Ｂ１５，Ｂ２５又はＢ３５）と、の間の距離の変数である。変数Ｗ２は、配列Ｄａｔ［ｊ］の右側の閾値（変数Ｂ１５，Ｂ２５，Ｂ３５又はＢ４５）と、配列Ｄａｔ［ｊ］と、の間の距離の変数である。
【００６５】
Ｄａｔ［ｊ］≧Ｂ１５である場合（ステップＳ８６；ＮＯ）、ＣＰＵ１１は、配列Ｄａｔ［ｊ］が変数Ｂ２５よりも小さいか否かを判別する（ステップＳ８９）。Ｄａｔ［ｊ］＜Ｂ２５である場合（ステップＳ８９；ＹＥＳ）、ＣＰＵ１１は、配列Ｒ［ｊ］に２を設定する（ステップＳ９０）。そして、ＣＰＵ１１は、配列Ｄａｔ［ｊ］から変数Ｂ１５を減算した値を変数Ｗ１として設定し、変数Ｂ２５から配列Ｄａｔ［ｊ］を減算した値を変数Ｗ２として設定する（ステップＳ９１）。
【００６６】
Ｄａｔ［ｊ］≧Ｂ２５である場合（ステップＳ８９；ＮＯ）、ＣＰＵ１１は、配列Ｄａｔ［ｊ］が変数Ｂ３５よりも小さいか否かを判別する（ステップＳ９２）。Ｄａｔ［ｊ］＜Ｂ３５である場合（ステップＳ９２；ＹＥＳ）、ＣＰＵ１１は、配列Ｒ［ｊ］に３を設定する（ステップＳ９３）。そして、ＣＰＵ１１は、配列Ｄａｔ［ｊ］から変数Ｂ２５を減算した値を変数Ｗ１として設定し、変数Ｂ３５から配列Ｄａｔ［ｊ］を減算した値を変数Ｗ２として設定する（ステップＳ９４）。
【００６７】
Ｄａｔ［ｊ］≧Ｂ３５である場合（ステップＳ９２；ＮＯ）、ＣＰＵ１１は、配列Ｒ［ｊ］に４を設定する（ステップＳ９５）。そして、ＣＰＵ１１は、配列Ｄａｔ［ｊ］から変数Ｂ３５を減算した値を変数Ｗ１として設定し、変数Ｂ４５から配列Ｄａｔ［ｊ］を減算した値を変数Ｗ２として設定する（ステップＳ９６）。
【００６８】
ステップＳ８８，Ｓ９１，Ｓ９４，Ｓ９６の実行後、ＣＰＵ１１は、変数Ｗ１が、変数Ｍに変数Ｔを乗算した値よりも小さいか否かを判別する（ステップＳ９７）。Ｗ１≧Ｍ×Ｔである場合（ステップＳ９７；ＮＯ）、比率誤差が許容範囲内にあり、ＣＰＵ１１は、変数Ｗ２が、変数Ｍに変数Ｔを乗算した値よりも小さいか否かを判別する（ステップＳ９８）。
【００６９】
Ｗ２≧Ｍ×Ｔである場合（ステップＳ９８；ＮＯ）、比率誤差が許容範囲内にあり、ＣＰＵ１１は、ループカウンタｊを１インクリメントし（ステップＳ９９）、ステップＳ８５に移行される。Ｗ１＜Ｍ×Ｔである場合（ステップＳ９７；ＹＥＳ）、ＣＰＵ１１は、変数Ｐｏｓに対応する１キャラクタの黒バー及び白スペースの４値化が失敗した旨を設定し（ステップＳ１００）、４値化処理を終了する。Ｗ２＜Ｍ×Ｔである場合（ステップＳ９８；ＹＥＳ）、ステップＳ１００に移行される。
【００７０】
変数Ｗ１，Ｗ２が小さい場合、１値と２値との差や、２値と３値との差等、本来異なるレベルとなるべきデータ幅の差異が小さく、比率があいまいになり、誤読の危険性が高くなるため、ステップＳ１００で４値化が失敗した旨が設定されている。
【００７１】
ｊ≧Ｐｏｓ＋６である場合（ステップＳ８５；ＮＯ）、ＣＰＵ１１は、変数Ｐｏｓに対応する１キャラクタの黒バー及び白スペースの４値化が成功した旨を設定し（ステップＳ１０１）、４値化処理を終了する。
【００７２】
図８に戻り、ＣＰＵ１１は、ステップＳ７３（ステップＳ１００，Ｓ１０１）の４値化処理の結果に応じて、変数Ｐｏｓに対応する１キャラクタの黒バー及び白スペースの４値化が成功したか否かを判別する（ステップＳ７４）。４値化が成功した場合（ステップＳ７４；ＹＥＳ）、ＣＰＵ１１は、ステップＳ７３の４値化処理で得られたキャラクタの配列Ｒ［ｊ］をキャラクタコードに変換する（ステップＳ７５）。そして、ＣＰＵ１１は、ステップＳ７５で変換したキャラクタコードが、バーコードの右端を示すストップコードであるか否かを判別する（ステップＳ７６）。
【００７３】
ストップコードでない場合（ステップＳ７６；ＮＯ）、ＣＰＵ１１は、変数Ｐｏｓを６インクリメントし（ステップＳ７７）、ステップＳ７４に移行される。ストップコードである場合（ステップＳ７６；ＹＥＳ）、ＣＰＵ１１は、イメージデータのデコードが成功した旨を設定し（ステップＳ７８）、デコード処理を終了する。
【００７４】
Ｐｏｓ＋６≧ＤａｔＮｕｍである場合（ステップＳ７２；ＮＯ）、イメージデータのデコードが失敗した旨を設定し（ステップＳ７９）、デコード処理を終了する。４値化が失敗した場合（ステップＳ７４；ＮＯ）、ステップＳ７９に移行される。なお、ストップコードである場合（ステップＳ７６；ＹＥＳ）、ＣＰＵ１１は、ステップＳ７５で変換されたキャラクタコードを用いてチェックデジット等のチェック処理を行い、そのチェック結果に応じて、最終的にデコードが成功したか否かを判別し、デコードが成功した場合にステップＳ７８に移行され、デコードが失敗した場合にステップＳ７９に移行されることとしてもよい。
【００７５】
そして、図４に戻り、ＣＰＵ１１は、ステップＳ２２でデコードが成功したか否かを判別する（ステップＳ２３）。デコードが失敗した場合（ステップＳ２３；ＮＯ）、ステップＳ３０に移行される。デコードが成功した場合（ステップＳ２３；ＹＥＳ）、ＣＰＵ１１は、変数ｉが０より大きいか否かを判別する（ステップＳ２４）。
【００７６】
０＜ｉである場合（ステップＳ２４；ＹＥＳ）、ＣＰＵ１１は、ＲＡＭ１３に記憶されている前のデコード結果と最新のデコード結果との照合を実施する（ステップＳ２５）。０≧ｉである場合（ステップＳ２４；ＮＯ）、照合元のデコード結果がなく、ＣＰＵ１１は、ステップＳ２２で得られたデコード結果を照合元としてＲＡＭ１３に記憶する（ステップＳ２６）。
【００７７】
そして、ＣＰＵ１１は、ステップＳ２５の照合が一致したか否かを判別する（ステップＳ２７）。照合が一致していない場合（ステップＳ２７；ＮＯ）、ステップＳ１１に移行される。照合が一致した場合（ステップＳ２７；ＹＥＳ）、ＣＰＵ１１は、変数ｉが変数Ｃ＋１よりも小さいか否かを判別する（ステップＳ２９）。ｉ＜Ｃ＋１である場合（ステップＳ２９；ＹＥＳ）、ＣＰＵ１１は、スキャナ部１８から次のイメージデータが入力されるのを待ち、入力された次のイメージデータを取得する（ステップＳ３０）、ステップＳ２２に移行される。
【００７８】
ｉ≧Ｃ＋１である場合（ステップＳ２９；ＮＯ）、ＣＰＵ１１は、ステップＳ２３で得られたキャラクタコードを含むデコード結果を表示部１４に表示し、報知部１９にブザー音を出力させ（ステップＳ３１）、第１のスキャン処理を終了する。ステップＳ３１において、デコード結果は、例えば、フラッシュメモリ１７に記憶される。
【００７９】
以上、本実施の形態によれば、スキャナ装置１０のＣＰＵ１１は、スキャナ部１８からバーコードまでの読み取り距離が近距離か否かを判別し、前記読み取り距離が近距離であると判別された場合に、前記バーコードのエレメント幅を判定するための閾値（変数Ｂ０５，Ｂ１５，Ｂ２５，Ｂ３５，Ｂ４５）に対するイメージデータの誤差の許容度を高くし（変数Ｔを小さくし）、且つデコード結果の照合回数（変数Ｃ）を少なく設定する。また、ＣＰＵ１１は、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くし（変数Ｔを大きくし）、且つ前記照合回数（変数Ｃ）を多く設定する。そして、ＣＰＵ１１は、前記設定に応じて前記イメージデータのデコードを行う。
【００８０】
このため、スキャナ装置１０は、シンボルの読み取り距離が近距離である場合に、読み取りレスポンスを向上し、シンボルの読み取り距離が遠距離である場合に、デコードの正確性を向上するので、シンボルの読み取り距離に応じて、読み取りレスポンス及びデコードの正確性を適切にできる。
【００８１】
また、スキャナ装置１０は、前記イメージデータの最小エレメント幅が基準値以上の場合に、前記読み取り距離が近距離であると判定し、前記イメージデータの最小エレメント幅が基準値よりも小さい場合に、前記読み取り距離が遠距離であると判定する。このため、読み取り距離を測定する部品を設けないので、スキャナ装置１０の構成を簡単にすることができる。
【００８２】
（第２の実施の形態）
図１０及び図１１を参照して、本発明に係る第２の実施の形態を説明する。図１０に、本実施の形態のスキャナ装置１０Ａの機能構成を示す。図１１に、第２のスキャン処理を示す。
【００８３】
図１０に示すスキャナ装置１０Ａは、スキャナ装置１０の各部に加えて、測距部２２を備える。スキャナ装置１０と共通する部分は、同じ符号を付し、その説明を省略する。
【００８４】
測距部２２は、赤外線を出射してスキャン対象物（バーコード）からの反射光を受光することにより、スキャナ装置１０Ａ（スキャナ部１８）からバーコードまでの読み取り距離を測定し、その読み取り距離情報をＣＰＵ１１に出力する。
【００８５】
また、ＲＯＭ１５には、第１のスキャンプログラム１５１に代えて第２のスキャンプログラム１５２が記憶されているものとする。
【００８６】
次に、図１１を参照して、スキャナ装置１０Ａの動作を説明する。スキャナ装置１０Ａにおいて、ユーザにより操作部１２のバーコードスキャンのトリガボタンが押下されたことをトリガとして、ＣＰＵ１１は、ＲＯＭ１５から読み出されて適宜ＲＡＭ１３に展開された第２のスキャンプログラム１５２との協働で、第２のスキャン処理を実行する。ＣＰＵ１１は、第２のスキャン処理の開始とともに、タイマのカウントを開始する。
【００８７】
図１１に示すように、ステップＳ１１１，Ｓ１１２は、図３及び図４の第１のスキャン処理のステップＳ１１，Ｓ１２と同様である。そして、ＣＰＵ１１は、測距部２２によりバーコードまでの読み取り距離ｄを測定する（ステップＳ１１３）。そして、ＣＰＵ１１は、読み取り距離ｄが基準値より大きいか否かを判別する（ステップＳ１１４）。ステップＳ１１４の基準値は、読み取り距離ｄが近距離か遠距離かを判別するための基準値であり、第２のスキャンプログラムに含まれるか、ＲＯＭ１５に記憶されている。
【００８８】
ｄ＞基準値である場合（ステップＳ１１４；ＹＥＳ）、ステップＳ１１５に移行される。ｄ≦基準値である場合（ステップＳ１１４；ＮＯ）、ステップＳ１１６に移行される。ステップＳ１１５〜Ｓ１２７は、図３及び図４の第１のスキャン処理のステップＳ１９〜Ｓ３１と同様である。
【００８９】
以上、本実施の形態によれば、スキャナ装置１０ＡのＣＰＵ１１は、スキャナ装置１０と同様に、バーコードの読み取り距離に応じて、読み取りレスポンス及びデコードの正確性を適切にできる。また、スキャナ装置１０Ａは、測距部２２により測定された読み取り距離が基準値以下の場合に、前記読み取り距離が近距離であると判別し、前記測定された読み取り距離が基準値よりも大きい場合に、前記読み取り距離が遠距離であると判別する。このため、イメージデータにおける読み取り距離に対応するエレメント幅の解析を行わず、読み取り距離を容易に得ることができる。
【００９０】
以上の説明では、本発明に係るプログラムのコンピュータ読み取り可能な媒体としてＲＯＭ１５を使用した例を開示したが、この例に限定されない。
その他のコンピュータ読み取り可能な媒体として、フラッシュメモリ等の不揮発性メモリ、ＣＤ−ＲＯＭ等の可搬型記録媒体を適用することが可能である。
また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウエーブ（搬送波）も本発明に適用される。
【００９１】
なお、上記実施の形態における記述は、本発明に係るスキャナ装置及びプログラムの一例であり、これに限定されるものではない。
【００９２】
上記実施の形態では、スキャナ装置１０がハンディターミナルである構成としたが、これに限定されるものではない。スキャナ装置１０としては、レーザ方式のスキャナ部を有するＰＤＡ（Personal Digital Assistant）、ＥＣＲ（Electronic Cash Register）に接続されたスキャナ装置等、他のスキャナ装置を用いる構成としてもよい。
【００９３】
また、上記第１の実施の形態では、イメージデータのエレメント幅が基準値より小さいか否かに応じて、スキャナ部からシンボルまでの読み取り距離が近距離か遠距離かを判別する構成としたが、これに限定されるものではない。例えば、イメージデータのシンボル幅（バーコード幅）が基準値より小さいか否かに応じて、スキャナ部からシンボルまでの読み取り距離が近距離か遠距離かを判別する構成としてもよい。
【００９４】
また、上記第２の実施の形態では、スキャナ部からシンボルまでの読み取り距離を測定する測距部２２が、赤外線を用いる測距部２２としたが、これに限定されるものではない。例えば、撮像部のオートフォーカス機構を利用して焦点距離を読み取り距離とする測距部等、他の測距部としてもよい。
【００９５】
また、上記実施の形態では、スキャナ装置１０，１０ＡのＣＰＵ１１は、読み取り距離が近距離であると判別された場合に、バーコードのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くし、且つデコード結果の照合回数を少なく設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くし、且つ前記照合回数を多く設定することとしたが、これに限定されるものではない。ＣＰＵ１１は、読み取り距離が近距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を高くすることと、デコード結果の照合回数を少なくすることとの少なくとも一方を設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くすることと、前記照合回数を多く設定することとの少なくとも一方を設定することとしてもよい。
【００９６】
また、上記実施の形態では、スキャナ部１８が、シンボルとしてのバーコードを読み取るレーザ方式のスキャナ部である構成としたが、これに限定されるものではない。例えば、スキャナ部が、シンボルとしてのバーコード又は２次元コードを撮像して読み取るイメージスキャナであるとしてもよい。
【００９７】
また、上記実施の形態におけるスキャナ装置１０，１０Ａの各構成要素の細部構成及び細部動作に関しては、本発明の趣旨を逸脱することのない範囲で適宜変更可能であることは勿論である。
【００９８】
本発明の実施の形態を説明したが、本発明の範囲は、上述の実施の形態に限定するものではなく、特許請求の範囲に記載された発明の範囲とその均等の範囲を含む。
以下に、この出願の願書に最初に添付した特許請求の範囲に記載した発明を付記する。付記に記載した請求項の項番は、この出願の願書に最初に添付した特許請求の範囲の通りである。
〔付記〕
＜請求項１＞
シンボルをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部から前記シンボルまでの読み取り距離が近距離か否かを判別する判別部と、
前記読み取り距離が近距離であると判別された場合に、前記シンボルのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くすることと、デコード結果の照合回数を少なくすることとの少なくとも一方を設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くすることと、前記照合回数を多くすることとの少なくとも一方を設定し、前記設定に応じて前記イメージデータのデコードを行うデコード部と、を備えるスキャナ装置。
＜請求項２＞
前記判別部は、前記イメージデータのエレメント幅又はシンボル幅が基準値以上の場合に、前記読み取り距離が近距離であると判別し、前記イメージデータのエレメント幅又はシンボル幅が基準値よりも小さい場合に、前記読み取り距離が遠距離であると判別する請求項１に記載のスキャナ装置。
＜請求項３＞
前記スキャナ部から前記シンボルまでの読み取り距離を測定する測距部を備え、
前記判別部は、前記測距部により測定された読み取り距離が基準値以下の場合に、前記読み取り距離が近距離であると判別し、前記測定された読み取り距離が基準値よりも大きい場合に、前記読み取り距離が遠距離であると判別する請求項１に記載のスキャナ装置。
＜請求項４＞
コンピュータを、
シンボルをスキャンしてイメージデータを取得するスキャナ部、
前記スキャナ部から前記シンボルまでの読み取り距離が近距離か否かを判別する判別部、
前記読み取り距離が近距離であると判別された場合に、前記シンボルのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くすることと、デコード結果の照合回数を少なくすることとの少なくとも一方を設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くすることと、前記照合回数を多くすることとの少なくとも一方を設定し、前記設定に応じて前記イメージデータのデコードを行うデコード部、
として機能させるためのプログラム。
【符号の説明】
【００９９】
１０，１０Ａ  スキャナ装置
１１  ＣＰＵ
１２  操作部
１３  ＲＡＭ
１４  表示部
１５  ＲＯＭ
１６  無線通信部
１７  フラッシュメモリ
１８  スキャナ部
１８１  発光部
１８２  バイブレーションミラー
１８３  受光部
１８４  ゲイン回路
１８５  二値化回路
１９  報知部
２０  電源部
２１  バス
２２  測距部
【図１】
0005532163.tif 000002
【図２】
0005532163.tif 000003
【図３】
0005532163.tif 000004
【図４】
0005532163.tif 000005
【図５】
0005532163.tif 000006
【図６】
0005532163.tif 000007
【図７】
0005532163.tif 000008
【図８】
0005532163.tif 000009
【図９】
0005532163.tif 000010
【図１０】
0005532163.tif 000011
【図１１】
0005532163.tif 000012