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