(57)【要約】【目的】  読み取り対象が傾いた状態で撮像された場合でも、少ない計算量で正確に画像を解析できるようにする。【構成】  マキシコードのファインダパターンの中心及び方向パターンの位置を基準点としておき、マキシコードを読み取るスキャナが、読み取った画像を処理する際に、各基準点を格子点とし、画像中での各格子点の位置を決定し（Ｓ１０２，１０３）、既に決定された格子点の位置情報を利用して、上記画像中における別の格子点の位置を順次決定し（Ｓ１０５）、位置を決定した格子点によって囲まれる最も細かい格子の内側では、撮像がコード面に平行な面で行われたものとして画像の解析を行うようにした（Ｓ１０６〜Ｓ１０８）。このとき、既に画像中の位置が決定された格子点の中から選択した３点を３つの頂点とする平行四辺形の残り１つの頂点に当たる点の画像中の位置を、上記別の格子点の位置として順次決定する。【選択図】        図１３
2005157677.tif 000002
【特許請求の範囲】
【請求項１】
正六角形の６頂点及びその中心の位置に配置された基準点を有する読取対象の情報の画像を撮像し、画像データとして取り込む画像データ取込手段と、該手段が取り込んだ画像データを解析する解析手段とを有する光学的情報読取装置であって、
前記解析手段に、
前記各基準点を格子点とし、撮像した画像中での各格子点の位置を決定する第１の位置決定手段と、
前記読取対象中において、既に前記画像中の位置が決定された格子点の中から選択した３点を３つの頂点とする平行四辺形の残り１つの頂点に当たる点の、前記画像中の位置を、別の格子点の位置として順次決定する第２の位置決定手段と、
前記第１及び第２の位置決定手段が位置を決定した格子点によって囲まれる最も細かい格子の内側では、前記撮像が前記読取対象に平行な面で行われたものとして前記画像データの解析を行う手段とを設けたことを特徴とする光学的情報読取装置。
【請求項２】
請求項１記載の光学的情報読取装置であって、
前記第２の位置決定手段が、
前記読取対象中における前記正六角形の対角線のうちその中心を通る線の両端の、前記画像中における位置をａ，ｂ、前記正六角形の中心の前記画像中における位置をｍとし、ａと対応する点の位置定数ＫＡを
ＫＡ＝（｜ｂｍ｜−｜ａｍ｜）／｜ａｂ｜…式（Ａ）
（ただし、｜ａｂ｜は線分ａｂの長さを表す）
と定めるものとして、前記正六角形の６頂点の位置に配置された各基準点の位置定数を求める手段と、
前記選択した３点のうち、平行四辺形の対角線に該当する２点の前記画像中における位置をｅ，ｇ、残り１点の前記画像中における位置をｆとし、それら３点の位置定数をそれぞれＫＥ，ＫＦ，ＫＧとして、前記読取対象中において前記残り１つの頂点に当たる点Ｈの位置定数ＫＨを
ＫＨ＝ＫＥ−ＫＦ＋ＫＧ
と定め、点Ｈの前記画像中における位置ｈを、線分ｅｇを
｜ｇｉ｜／｜ｅｉ｜＝（１＋ＫＥ）／（１＋ＫＧ）
なる割合で分割する点ｉについて、線分ｆｉを
｜ｈｉ｜／｜ｆｉ｜＝（１＋ＫＦ）／（１＋ＫＨ）
なる割合で延長した位置に定める手段とを有し、
これらの各手段を用いて前記格子点の位置を順次決定する手段であることを特徴とする光学的情報読取装置。
【請求項３】
請求項２記載の光学的情報読取装置であって、
前記第２の位置決定手段が、前記正六角形の隣接する２頂点の位置に配置された基準点について前記式（Ａ）に従って定めた画像中の位置を利用して、その正六角形の他の４つの頂点の位置に配置された基準点の画像中の位置を求める第３の位置決定手段を有し、
前記格子点の位置を順次決定するに際し、前記各基準点の画像中の位置として、前記第３の位置決定手段によって、位置定数を決めようとする基準点を含まない４組の基準点の画像中の位置を利用してそれぞれ求めた４つの画像中の位置と、前記式（Ａ）に従って定めた１つの画像中の位置との平均の位置を用いるようにしたことを特徴とする光学的情報読取装置。
【請求項４】
請求項１乃至３のいずれか一項記載の光学的情報読取装置であって、
前記読取対象は、所与の情報を示す２色のパターンが規則的に配置されたコードであり、
前記解析手段は、前記画像データを解析してそのコードが示す情報を取得する手段であることを特徴とする光学的情報読取装置。
【請求項５】
請求項４記載の光学的情報読取装置であって、
前記解析手段に、
前記画像中において、前記最も細かい格子上に等間隔に所定個数の前記パターンが並んでいると仮定し、各パターンの中心位置を中心として半径が前記パターンよりも若干小さい円の円周上に位置する複数の点における画像データをサンプリングするサンプリング手段と、
該手段がサンプリングするパターン１つ分の画像データの値の組み合わせと、前記格子点の位置の補正方向との対応関係を記憶する手段と、
前記サンプリング手段がサンプリングした画像データの組み合わせと前記対応関係とから、前記格子点の位置の補正方向を決定し、前記画像中における格子点の位置をその方向に補正する手段とを設けたことを特徴とする光学的情報読取装置。
【請求項６】
正六角形の６頂点及びその中心の位置に配置された基準点を有する読取対象の情報の画像を撮像して得た画像データをコンピュータによって解析する画像データ解析方法であって、
前記各基準点を格子点とし、撮像した画像中での各格子点の位置を決定する第１の位置決定手順と、
前記読取対象中において、既に前記画像中の位置が決定された格子点の中から選択した３点を３つの頂点とする平行四辺形の残り１つの頂点に当たる点の、前記画像中の位置を、別の格子点の位置として順次決定する第２の位置決定手順とを前記コンピュータに実行させ、
前記第１及び第２の位置決定手順で位置を決定した格子点によって囲まれる最も細かい格子の内側では、前記撮像が前記読取対象に平行な面で行われたものとして前記コンピュータに前記画像データの解析を行わせることを特徴とする画像データ解析方法。
【請求項７】
請求項６記載の画像データ解析方法であって、
前記第２の位置決定手順において、
前記読取対象中における前記正六角形の対角線のうちその中心を通る線の両端の、前記画像中における位置をａ，ｂ、前記正六角形の中心の前記画像中における位置をｍとし、ａと対応する点の位置定数ＫＡを
ＫＡ＝（｜ｂｍ｜−｜ａｍ｜）／｜ａｂ｜…式（Ａ）
（ただし、｜ａｂ｜は線分ａｂの長さを表す）
と定めるものとして、前記正六角形の６頂点の位置に配置された各基準点の位置定数を求める手順と、
前記選択した３点のうち、平行四辺形の対角線に該当する２点の前記画像中における位置をｅ，ｇ、残り１点の前記画像中における位置をｆとし、それら３点の位置定数をそれぞれＫＥ，ＫＦ，ＫＧとして、前記読取対象中において前記残り１つの頂点に当たる点Ｈの位置定数ＫＨを
ＫＨ＝ＫＥ−ＫＦ＋ＫＧ
と定め、点Ｈの前記画像中における位置ｈを、線分ｅｇを
｜ｇｉ｜／｜ｅｉ｜＝（１＋ＫＥ）／（１＋ＫＧ）
なる割合で分割する点ｉについて、線分ｆｉを
｜ｈｉ｜／｜ｆｉ｜＝（１＋ＫＦ）／（１＋ＫＨ）
なる割合で延長した位置に定める手順とを前記コンピュータに実行させ、
これらの各手順の処理によって前記格子点の位置を順次決定させるようにしたことを特徴とする画像データ解析方法。
【請求項８】
請求項７記載の画像データ解析方法であって、
前記第２の位置決定手順において、前記正六角形の隣接する２頂点の位置に配置された基準点について前記式（Ａ）に従って定めた画像中の位置を利用して、その正六角形の他の４つの頂点の位置に配置された基準点の画像中の位置を求める第３の位置決定手順を前記コンピュータに実行させ、
前記格子点の位置を順次決定するに際し、前記各基準点の画像中の位置として、前記第３の位置決定手順において、位置定数を決めようとする基準点を含まない４組の基準点の画像中の位置を利用してそれぞれ求めた４つの画像中の位置と、前記式（Ａ）に従って定めた１つの画像中の位置との平均の位置を用いるようにしたことを特徴とする画像データ解析方法。
【請求項９】
請求項６乃至８のいずれか一項記載の画像データ解析方法であって、
前記読取対象は、所与の情報を示す２色のパターンが規則的に配置されたコードであり、
前記解析は、前記画像データを解析してそのコードが示す情報を取得する処理であることを特徴とする画像データ解析方法。
【請求項１０】
請求項９記載の画像データ解析方法であって、
前記画像中において、前記最も細かい格子上に等間隔に所定個数の前記パターンが並んでいると仮定し、各パターンの中心位置を中心して半径が前記パターンよりも若干小さい円の円周上に位置する複数の点における画像データをサンプリングするサンプリング手順と、
該手順においてサンプリングするパターン１つ分の画像データの値の組み合わせと、前記格子点の位置の補正方向との対応関係を記憶しておき、前記サンプリング手順でサンプリングした画像データの組み合わせとその対応関係とから、前記格子点の位置の補正方向を決定し、前記画像中における格子点の位置をその方向に補正する手順とを前記コンピュータに実行させるようにしたことを特徴とする画像データ解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、読み取り対象の情報の画像を撮像し、画像データとして取り込んでその画像データを解析する光学的情報読取装置及び、このような画像データをコンピュータによって解析する画像データ解析方法に関する。
【背景技術】
【０００２】
従来から、流通、物流、郵便、イベント会場管理や医療・化学検査などの分野において、扱う物や人を識別する手段として、バーコードが広く使用されている。また、近年はバーコードよりも多くの情報を記録できる二次元コードも併用されるようになってきている。
このような二次元コードのほとんどは、２０００文字以上の情報を記録することができ、バーコードの容量が２０文字程度であるのに比べて非常に多くの情報を記録できる。また、バーコードは基本的に英数字のみを扱うのに対し、二次元コードでは漢字やカナの使用も可能である。さらに、二次元コードは高密度印刷が可能であり、一般的な二次元コードは、同じ面積領域であってもバーコードの２０〜１００倍の記録密度を持っている。
【０００３】
ここで、二次元コードには、大別してスタック式のものとマトリクス式のものがある。このうちスタック式は、バーコードを縮小し、縦に複数段積み重ねた形態をしており、水平方向に長い長方形をしているものが多い。そして、スタック式コードの代表的なものとしてはＰＤＦ４１７が挙げられる。
このＰＤＦ４１７は、図２２に示すように、コードを画定するために、左右に開始／停止（スタート／ストップ）パターンＳｔａ／Ｓｔｏと呼ばれる特定パターンである垂直方向の黒及び白バーを有し、上記開始／停止パターンのそれぞれ右／左隣りに、具体的な内容データの始まり及び終わりを示す左／右行標識（左／右ローインディケータ）Ｌｉ／Ｒｉを有する。但し、スタート／ストップパターンを除いたコードは、列と行から成り、コードワードと呼ばれるブロックによって構成されるデータセルである。スタート／ストップパターンを除いたコードの大きさは、上記コードワード単位で、列は最小１列、最大３０列（スタートからストップパターンの方向）、行は最小３行、最大９０行（スタートおよびストップパターンに沿う方向）と規定されている。
【０００４】
マトリックス式は、概ね正方形のコード記号面を規則的に区切った表示領域に、黒と白のセルによってパターンを表示する。そして、一例として、図２３に示されるような、マキシコード（Maxi Code）が挙げられる。
このマキシコードは、アメリカ合衆国の宅配業者であるＵＰＳ社が、１９８７年小荷物の管理と仕分け追跡のために開発した二次元コードである。そして現在でも、宅配便の集荷センターにおける行き先の仕分けや、航空機、鉄道あるいは船舶の積み荷における仕分けの管理に多く利用されている。
【０００５】
マキシコードは、マトリックス式コードの中でも複雑な形態をしているが、真中の３重の同心円ファインダパターン（Finder Pattern）ＦＰと、外側の８８４個の６角形のモジュールとから構成される。
そして、ファインダパターンＦＰは、モジュール９０個分の面積を持ち、コード記号の中心位置の検出に使用される。
【０００６】
また、上記の８８４個のモジュールのうち、１８個モジュールが方向決めと傾きの検出に使用される。このモジュールは、方向モジュールと呼ばれ、それぞれ３つのモジュールからなるモジュール群が、上記のファインダパターンＦＰを中心として、その周辺に６０度ごとに６つ配置されている。そして、この方向パターンのモジュール群によって、コードの図形がいかなる方向を向いていようとも、その方向を検出して解析を行うことができる。そして、その方向パターンとしては、白白白のモジュールで構成される右上のモジュール群Ｐ１を起点として、反時計回りに、黒黒黒（Ｐ２）、黒白黒（Ｐ３）、白黒黒（Ｐ４）、黒黒白（Ｐ５）、黒白黒（Ｐ６）の６つのモジュール群が配置される。
【０００７】
あとの８６６個のモジュールのうち、２個は何の情報も持っておらず、８６４個が８６４ビットの情報を搭載している。ファインダパターンに近い１２０個のモジュールが荷物ＩＤ番号や荷主コード、行き先コードサービス区分などのプライマリメッセージといった基本情報をエンコードし、残りの７４４個のモジュールが注文番号や納品番号などのセカンダリーメッセージと呼ばれる顧客情報をエンコードする。コード記号全体のサイズは３３行×３０モジュール、およそ１インチ×１インチ（25.4mm×25.4mm）である。
このように複雑なコード記号なので、読み取り・デコードの方法も多く提案されており、最速、最良の方法が模索されている。このような技術としては、例えば特許文献１や特許文献２に記載されたものが挙げられる。
【特許文献１】特開平１０−２１３２２号公報
【特許文献２】特開２００２−４９８８９号公報
【０００８】
ところで、二次元コードを読み取る二次元コードスキャナには、コード記号の画像をＣＭＯＳイメージセンサやＣＣＤイメージセンサ等の固体撮像素子で撮像して解析することによってデコードするものが多い。しかし、このような撮像素子においては、コード記号貼付面とスキャナの撮像部とが平行でないと、正方形あるいは長方形のコード記号が、傾きの方向に応じて、例えば図２４に示したように、台形あるいは変形四辺形として撮像されてしまう。従って、撮像素子のイメージエリアにおける表示が歪んでしまい、スタート／ストップパターン、ファインダパターン、方向パターン、データセル等の位置関係が、本来のコード記号上ものとずれてしまい、結果的に正確なデコードができなくなってしまう。
【０００９】
このような場合には、表示の歪みを考慮して、画像あるいは解析方式を修正する必要がある。ここで、表示の歪みからコード記号の傾き量を求めるためには、例えば特許文献３に記載されているような技術を利用し、所定の基準点（ファインダパターンや方向パターン等）の画像中での位置関係から、コード記号の傾き角度を計算することが考えられる。そして、これがわかれば、傾き角度をもとに画像を修正することができる。また、非特許文献１に記載のようなアフィン変換を利用することも考えられる。
しかしながら、このような方式では、三角関数のような複雑な演算を幾ステップにも亘って行う必要があるため、計算量が多くなり、計算に時間がかかるので、デコードを高速に行うことが困難であるという問題があった。
【非特許文献１】岡崎彰夫著「ビギナーブックス１５  はじめての画像処理技術」，初版,株式会社工業調査会，２０００年１０月，ｐ．６５−６７
【特許文献３】特開平８−２９２１２８号公報
【００１０】
このような問題の解決を試みた技術としては、例えば特許文献４に記載の２次元コード読み取り方法が挙げられる。この方法においては、「傾き」という量を演算に利用することにより、コード記号を撮像して得た画像中に設定する検査線を、三角関数を用いた角度演算を行わずに設定するようにしている。この方式では、三角関数のような演算量の大きな演算を行わないので、デコードの高速化を図ることができると考えられる。
しかしながら、この方法では、検査線の位置を決めるために、セル配列の行や列の位置を示すタイミングセルを構成する各セルの画像中の位置を正確に解析する必要がある。従って、このようなタイミングセルのないマキシコードの解析には適用できないという問題があった。
【特許文献４】特開２０００−１７２７７７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
この発明は、このような問題を解決し、読み取り対象の情報を撮像した画像を解析する場合において、読み取り対象が傾いた状態で撮像された場合でも、少ない計算量で正確に画像を解析できるようにすることを目的とし、特に、マキシコードの解析を正確かつ高速に行うことができるようにすることを目的とする。
【課題を解決するための手段】
【００１２】
上記の目的を達成するため、この発明は、正六角形の６頂点及びその中心の位置に配置された基準点を有する読取対象の情報の画像を撮像し、画像データとして取り込む画像データ取込手段と、その手段が取り込んだ画像データを解析する解析手段とを有する光学的情報読取装置において、上記解析手段に、上記各基準点を格子点とし、撮像した画像中での各格子点の位置を決定する第１の位置決定手段と、上記読取対象中において、既に上記画像中の位置が決定された格子点の中から選択した３点を３つの頂点とする平行四辺形の残り１つの頂点に当たる点の、上記画像中の位置を、別の格子点の位置として順次決定する第２の位置決定手段と、上記第１及び第２の位置決定手段が位置を決定した格子点によって囲まれる最も細かい格子の内側では、上記撮像が上記読取対象に平行な面で行われたものとして上記画像データの解析を行う手段とを設けたものである。
【００１３】
このような光学的情報読取装置において、上記第２の位置決定手段を、上記読取対象中における上記正六角形の対角線のうちその中心を通る線の両端の、上記画像中における位置をａ，ｂ、上記正六角形の中心の上記画像中における位置をｍとし、ａと対応する点の位置定数ＫＡを
ＫＡ＝（｜ｂｍ｜−｜ａｍ｜）／｜ａｂ｜…式（Ａ）
（ただし、｜ａｂ｜は線分ａｂの長さを表す）
と定めるものとして、上記正六角形の６頂点の位置に配置された各基準点の位置定数を求める手段と、上記選択した３点のうち、平行四辺形の対角線にその当する２点の上記画像中における位置をｅ，ｇ、残り１点の上記画像中における位置をｆとし、それら３点の位置定数をそれぞれＫＥ，ＫＦ，ＫＧとして、上記読取対象中において上記残り１つの頂点に当たる点Ｈの位置定数ＫＨをＫＨ＝ＫＥ−ＫＦ＋ＫＧと定め、点Ｈの上記画像中における位置ｈを、線分ｅｇを｜ｇｉ｜／｜ｅｉ｜＝（１＋ＫＥ）／（１＋ＫＧ）なる割合で分割する点ｉについて、線分ｆｉを｜ｈｉ｜／｜ｆｉ｜＝（１＋ＫＦ）／（１＋ＫＨ）なる割合で延長した位置に定める手段とを設け、これらの各手段を用いて上記格子点の位置を順次決定する手段とするとよい。
【００１４】
さらに、上記第２の位置決定手段に、上記正六角形の隣接する２頂点の位置に配置された基準点について上記式（Ａ）に従って定めた画像中の位置を利用して、その正六角形の他の４つの頂点の位置に配置された基準点の画像中の位置を求める第３の位置決定手段を設け、上記格子点の位置を順次決定するに際し、上記各基準点の画像中の位置として、上記第３の位置決定手段によって、位置定数を決めようとする基準点を含まない４組の基準点の画像中の位置を利用してそれぞれ求めた４つの画像中の位置と、上記式（Ａ）に従って定めた１つの画像中の位置との平均の位置を用いるようにするとよい。
【００１５】
さらに、上記のいずれかの光学的情報読取装置において、上記読取対象が、所与の情報を示す２色のパターンが規則的に配置されたコードであり、上記解析手段を、上記画像データを解析してそのコードが示す情報を取得する手段とするとよい。
さらにまた、上記解析手段に、上記画像中において、上記最も細かい格子上に等間隔に所定個数の上記パターンが並んでいると仮定し、各パターンの中心位置を中心として半径が上記パターンよりも若干小さい円の円周上に位置する複数の点における画像データをサンプリングするサンプリング手段と、その手段がサンプリングするパターン１つ分の画像データの値の組み合わせと、上記格子点の位置の補正方向との対応関係を記憶する手段と、上記サンプリング手段がサンプリングした画像データの組み合わせと上記対応関係とから、上記格子点の位置の補正方向を決定し、上記画像中における格子点の位置をその方向に補正する手段とを設けるとよい。
【００１６】
また、この発明の画像データ解析方法は、正六角形の６頂点及びその中心の位置に配置された基準点を有する読取対象の情報の画像を撮像して得た画像データをコンピュータによって解析する画像データ解析方法において、上記各基準点を格子点とし、撮像した画像中での各格子点の位置を決定する第１の位置決定手順と、上記読取対象中において、既に上記画像中の位置が決定された格子点の中から選択した３点を３つの頂点とする平行四辺形の残り１つの頂点に当たる点の、上記画像中の位置を、別の格子点の位置として順次決定する第２の位置決定手順とを上記コンピュータに実行させ、上記第１及び第２の位置決定手順で位置を決定した格子点によって囲まれる最も細かい格子の内側では、上記撮像が上記読取対象に平行な面で行われたものとして上記コンピュータに上記画像データの解析を行わせるようにしたものである。
【００１７】
このような画像データ解析方法において、上記第２の位置決定手順において、上記読取対象中における上記正六角形の対角線のうちその中心を通る線の両端の、上記画像中における位置をａ，ｂ、上記正六角形の中心の上記画像中における位置をｍとし、ａと対応する点の位置定数ＫＡを
ＫＡ＝（｜ｂｍ｜−｜ａｍ｜）／｜ａｂ｜…式（Ａ）
（ただし、｜ａｂ｜は線分ａｂの長さを表す）
と定めるものとして、上記正六角形の６頂点の位置に配置された各基準点の位置定数を求める手順と、上記選択した３点のうち、平行四辺形の対角線にその当する２点の上記画像中における位置をｅ，ｇ、残り１点の上記画像中における位置をｆとし、それら３点の位置定数をそれぞれＫＥ，ＫＦ，ＫＧとして、上記読取対象中において上記残り１つの頂点に当たる点Ｈの位置定数ＫＨをＫＨ＝ＫＥ−ＫＦ＋ＫＧと定め、点Ｈの上記画像中における位置ｈを、線分ｅｇを｜ｇｉ｜／｜ｅｉ｜＝（１＋ＫＥ）／（１＋ＫＧ）なる割合で分割する点ｉについて、線分ｆｉを｜ｈｉ｜／｜ｆｉ｜＝（１＋ＫＦ）／（１＋ＫＨ）なる割合で延長した位置に定める手順とを上記コンピュータに実行させ、これらの各手順の処理によって上記格子点の位置を順次決定させるようにするとよい。
【００１８】
さらに、上記第２の位置決定手順において、上記正六角形の隣接する２頂点の位置に配置された基準点について上記式（Ａ）に従って定めた画像中の位置を利用して、その正六角形の他の４つの頂点の位置に配置された基準点の画像中の位置を求める第３の位置決定手順を上記コンピュータに実行させ、上記格子点の位置を順次決定するに際し、上記各基準点の画像中の位置として、上記第３の位置決定手順において、位置定数を決めようとする基準点を含まない４組の基準点の画像中の位置を利用してそれぞれ求めた４つの画像中の位置と、上記式（Ａ）に従って定めた１つの画像中の位置との平均の位置を用いるようにするとよい。
【００１９】
さらに、上記のいずれかの画像データ解析方法において、上記読取対象が、所与の情報を示す２色のパターンが規則的に配置されたコードであり、上記解析を、上記画像データを解析してそのコードが示す情報を取得する処理とするとよい。
さらにまた、上記画像中において、上記最も細かい格子上に等間隔に所定個数の上記パターンが並んでいると仮定し、各パターンの中心位置を中心して半径が上記パターンよりも若干小さい円の円周上に位置する複数の点における画像データをサンプリングするサンプリング手順と、その手順においてサンプリングするパターン１つ分の画像データの値の組み合わせと、上記格子点の位置の補正方向との対応関係を記憶しておき、上記サンプリング手順でサンプリングした画像データの組み合わせとその対応関係とから、上記格子点の位置の補正方向を決定し、上記画像中における格子点の位置をその方向に補正する手順とを上記コンピュータに実行させるようにするとよい。
【発明の効果】
【００２０】
以上のようなこの発明の光学的情報読取装置及び画像データ解析方法によれば、読み取り対象の情報を撮像した画像を解析する場合において、読み取り対象が傾いた状態で撮像された場合でも、少ない計算量で正確に画像を解析できるようにすることができる。特に、マキシコードの解析を正確かつ高速に行うことができるようにすることができる。
【発明を実施するための最良の形態】
【００２１】
以下、この発明を実施するための最良の形態を図面を参照して説明する。
〔第１の実施形態：図１乃至図１１〕
まず、この発明の光学的情報読取装置の第１の実施形態であるコードスキャナ（以下「スキャナ」という）について説明するが、そのハードウェア構成について図１及び図２を用いて説明する。図１はそのスキャナの構成を示すブロック図、図２は図１に示したＣＭＯＳイメージセンサの構成をより詳細に示すブロック図である。
このスキャナ１は、ニ次元コードを読み取ることができ、設定を変更すればバーコードも読み取ることができるスキャナであり、図１に示すように、光学ヘッド１０及びデコーダ３０を備え、ホストコンピュータ２に接続されている。この接続は無線であると有線であるとを問わず、スキャナ１によってコード記号を読み取ってデコードした情報が、ホストコンピュータ２に送信され、蓄積及びデータ処理されるものである。
【００２２】
そして、スキャナ１の光学ヘッド１０は、レンズ１１，ＣＭＯＳイメージセンサ（以下「ＣＭＯＳセンサ」と呼ぶ）１２，ガイド用発光ダイオード（ＬＥＤ）１３，照明用ＬＥＤ１４を備えている。レンズ１１は、読み取り対象の情報を含むコード記号面３からの反射光をＣＯＭＳセンサ１２上に結像させるためのものであり、ＣＭＯＳセンサ１２はその画像を設定されたゲイン値とシャッタ速度で画像データとして取り込む画像データ取込手段である。また、ガイド用ＬＥＤ１３は読み取り対象のコード記号の範囲を示すガイド光を照射するためのＬＥＤであり、照明用ＬＥＤ１４はコード記号自体を照明する照明手段である。
【００２３】
このうちＣＭＯＳイメージセンサ１２は、図２に示すように、イメージエリア２１，ＣＤＳ（二重相関サンプリング）回路２２，ＡＧＣ（自動ゲイン制御）回路２３，Ａ／Ｄ変換回路２４，タイミングジェネレータ２５，コマンド・デコーダ回路２６，基準電圧回路２７を備えている。
イメージエリア２１は、多数のフォトダイオードが配列された受光部であり、ＣＭＯＳセンサ１２で取り込むべき画像はこの部分に結像される。そして、その画像のデータはフォトダイオードに電荷として蓄積され、増幅トランジスタを介して電圧信号として取り出される。ＣＤＳ回路２２はこの信号のノイズを低減させるためのサンプリング処理を行う回路であり、ＡＧＣ回路２３はそのサンプリング後の信号がＡ／Ｄ変換回路２４で適正に処理されるよう、基準電圧回路２７からの基準電圧によってゲイン調整する回路である。画像取り込みの際に必要な演算の多くはここで行われる。
【００２４】
Ａ／Ｄ変換回路２４はこのゲイン調整後の信号をＡ／Ｄ変換し、後段のデコーダ３０のＦＰＧＡ（Field Programmable Gate Array）３２に送信する回路である。そしてまた、その信号を制御信号として基準電圧器を介してＡＧＣ回路２３に帰還させる。
コマンド・デコーダ回路２６は、ＣＰＵ３１からの制御コマンドをデコードし、これに従って各部への制御信号を発する回路である。
【００２５】
タイミングジェネレータ２５は、マスタークロックＭＣＫから、データ読み出しタイミングを制御するタイミング信号ＨＤ，ＶＤ，ＤＡＴＡＣＬＫを生成し、また、フォトダイオードへの電荷蓄積期間であるシャッタ速度も制御する回路である。
基準電圧回路２７は、コマンド・デコーダ回路２６からの制御信号に従って基準電圧を発生させることにより、ＡＧＣ回路２３におけるゲインのレベルを調整する。
【００２６】
なお、ＣＭＯＳイメージセンサ１２における動作、例えばイメージエリア２１におけるデータ取り込みモードや、出力信号の形態、信号出力のタイミング、ＡＧＣ回路２３を制御するためのコマンド等は、図示しないインタフェースを介して、ホストコンピュータや操作子等により、外部から入力することも可能である。このようなコマンドも、コマンド・デコーダ回路２６によってデコードし、タイミングジェネレータ２５，基準電圧回路２７，ＡＧＣ回路２３等の必要な回路に制御信号を出力するようにするとよい。
【００２７】
また、デコーダ３０は、ＣＰＵ３１，ＦＰＧＡ３２，ＲＡＭ３３，通信Ｉ／Ｆ３４を備えており、ＣＰＵ３１，ＦＰＧＡ３２，ＲＡＭ３３によってマイクロコンピュータを構成している。
そして、ＣＰＵ３１は、このスキャナ１全体を統括制御する制御手段であり、ＦＰＧＡ３２や、ＣＭＯＳセンサ１２の各部の制御も行う。
ＦＰＧＡ３２は、ＣＭＯＳセンサ１２によって読み取った画像データに対し、二値化処理，ラプラシアンエッジ強調等の種々の画像処理を行うユニットである。なお、これらの処理を行うユニットとして、ＦＰＧＡ３２に代えてＡＳＩＣ（特定用途向け集積回路）やゲートアレイを設けてもよい。また、ソフトウェアを用いて同様の処理を行ってもよい。
【００２８】
ＲＡＭ３３は、ＦＰＧＡ３２による処理後の画像データを記憶したり、ＣＰＵ３１のワークメモリとして用いたり、その他このスキャナ１の動作に必要なデータを記憶したりする記憶手段である。なお、ＲＡＭ３３に記憶した画像データの解析及びデコード処理は、ＣＰＵ３１が行う。この場合において、ＣＰＵ３１が解析手段として機能する。また、ＲＡＭ３３の一部を不揮発性記憶手段で構成し、設定データ等を記憶させるようにするとよい。
【００２９】
通信インタフェース（Ｉ／Ｆ）３４は、スキャナ１をホストコンピュータ２と接続するためのインタフェースであり、ＣＰＵ３１はこの通信Ｉ／Ｆ３４を介してデコード処理後のデータをホストコンピュータに送信することができる。また、ＣＰＵ３１が制御処理やデコード処理を行うために必要なプログラムは、デコーダ３０側に記憶手段を設けて記憶させるようにしてもよいが、この通信Ｉ／Ｆ３４を介してホストコンピュータ２から受信するようにしてもよい。
【００３０】
このようなスキャナ１によってコードを読み込む際には、外部光あるいは照明用ＬＥＤ１４による照明光によるコード記号面３からの反射光をレンズ１１によってＣＭＯＳセンサ１２のイメージエリア２１上に結像させ、読み取り対象の情報の画像を撮像する。具体的には、その画像を画素毎にフォトダイオードによって光電変換して増幅トランジスタを介して電圧信号として取り出す。そして、その信号に対してＣＤＳ回路２２によってＣＤＳを行い、ＡＧＣ回路２３によってゲイン調整を施し、Ａ／Ｄ変換回路２４によってデジタル画像データに変換する。
【００３１】
このスキャナの特徴は、撮像時に読み取り対象のコード記号面３がＣＭＯＳセンサ１２のイメージエリア２１と平行でなく、このためコード記号が歪んで撮像された場合でも、この歪みを考慮したデコード処理を行うことにより、コード記号面３の二次元コードを正確にデコードできるようにした点である。
【００３２】
そこで、次にこの歪みを補正するための処理について説明するが、まずこの処理の基礎となる数学的な考え方について説明する。
まず、イメージエリア２１に対して傾いた物体面Ｌに貼付したコード記号ＡＣを撮像する場合のこれらの位置関係を模式的に示すと、図３に示すようになる。ここで、ａｃがイメージエリア２１上に形成されるコード記号ＡＣの像である。一般に、コード記号は位置決め用の特徴的なパターンを有するので、このパターンの端部又は中心が、点Ａや点Ｃであると考えるとよい。このようなパターンの画像中の位置は、画像が多少歪んでいる場合でも容易に認識することができる。
【００３３】
また、点ＢはＡＣの中点であり、点ｂは点Ｂの画像中での位置である。また、線分Ａａの延長と線分Ｃｃの延長が交わる点をＱとすると、点Ｑは、点ａ,ｂ,ｃを含む面（イメージエリア２１の結像面に該当）が投影面である透視投影法における光学的中心（視点）であると考えることができる。そこで、点Ｑを通って線分ａｂに平行な直線を、光学的中心面（視点平面）と呼ぶ。以後、点ａ,ｂ,ｃ及び点Ａ,Ｂ,Ｃをそれぞれ幾何学上の一点として考える。
ここで、このコードスキャナにおいては、線分ａｂと線分ｂｃの長さから、物体面Ｌの傾斜の度合いを求め、これを利用して、コード記号中の各点が撮像された画像中でどの位置に該当するかを求めるようにしている。
【００３４】
図３の模式図において、点Ａ,Ｂ,Ｃからそれぞれ光学的中心面に下ろした垂線の足をＡ′,Ｂ′,Ｃ′とする。そして、線分ＡＡ′の長さを｜ＡＡ′｜で表わすことにすると、点Ａ,Ｂ,Ｃから光学的中心面までの距離は、それぞれ｜ＡＡ′｜,｜ＢＢ′｜,｜ＣＣ′｜となる。そして、図４に示すように、｜ＡＡ′｜−｜ＢＢ′｜＝｜ＢＢ′｜−｜ＣＣ′｜＝Ｓとする。
ここで、光学的中心面と平行な適当な平面Ｍを考え、図５に示すように各部の長さ及び角度を定義するものとする。点Ｄは、点Ｑを通り、光学的中心面（及び平面Ｍ）に垂直な直線と、物体面Ｌとの交点である。なお、定義から、Ｙ，Ｚ≠０である。また、ｒ１〜ｒ３も０でないとする。
【００３５】
すると、まず、ΔＥＨＱ∽ΔＱＡ′Ａであるから、
｜ＱＡ′｜／｜ＥＨ｜＝｜ＡＡ′｜／｜ＱＨ｜なので、式（１）が成り立つ。
【数１】
2005157677.tif 000003
従って、式（２）も成り立つ。
【数２】
2005157677.tif 000004
【００３６】
同様に、ΔＦＨＱ∽ΔＱＢ′Ｂ及びΔＧＨＱ∽ΔＱＣ′Ｃから、以下の式（３）及び（４）を導くことができる。
【数３】
2005157677.tif 000005
【００３７】
そして、Ｒ３−Ｒ２＝Ｒ２＋Ｒ１＝Ｒであるから、次の式（５）が成り立つ。
【数４】
2005157677.tif 000006
【００３８】
そして、平面Ｍは投影面とも平行であるので、
｜ＥＦ｜／｜ＦＧ｜＝｜ａｂ｜／｜ｂｃ｜であるから、式（６）が成り立つ。
【数５】
2005157677.tif 000007
このコードスキャナでは、この式を傾き補正の基本式としている。
【００３９】
なお、ここでは点Ａ，Ｂ，Ｃ，Ｄの位置関係が図５に示すものである場合について説明したが、点Ｄが線分ＢＣ上に位置したり、点Ａや点Ｃの外側に位置したり、あるいは点Ａ，Ｂ，Ｃのいずれかと重なったり（このときはｒ１，ｒ２，ｒ３のいずれかが０になる）しても、上記と同様な考え方により、式（６）を導き出すことができる。
【００４０】
ただし、一般には、３点Ｑ，Ａ，Ｃを通る平面ＱＡＣ（図５で紙面に相当する）が光学的中心面に垂直であるとは限らない。この場合に、図７に示すように、点Ａ，Ｃからそれぞれ光学的中心面に下ろした垂線の足Ａ′，Ｃ′は、平面ＱＡＣ上にはないことになる。
ここで、平面ＱＡＣと光学的中心面との交線をＭＮとし、点Ａ，点Ｃから直線ＭＮに下ろした垂線の足を点Ａ″，Ｃ″とすると、上述と同様な導出により、
｜ａｂ｜／｜ｂｃ｜＝｜ＣＣ″｜／｜ＡＡ″｜  …式（７）
が得られる。
【００４１】
そして、直線ＭＮを含み光学的中心面と垂直な平面Ｗを考え、平面Ｗと平面ＱＡＣのなす角をβとすると、
｜ＡＡ″｜＝｜ＡＡ′｜／ｃｏｓβ，｜ＣＣ″｜＝｜ＣＣ′｜／ｃｏｓβ
であるから、上記式（７）より、
【数６】
2005157677.tif 000008
となり、上記式（６）と同様な関係が成り立つ。
以上から、物体面Ｌ上の点Ａ及び点Ｃが撮像可能な位置にあれば、その位置によらず、必ず上記式（６）が成り立つことがわかる。
【００４２】
ところで、図４に示した定義から、式（８）が成り立つ。
【数７】
2005157677.tif 000009
【００４３】
ここで、Ｓ／｜ＢＢ′｜＝Ｋとおく。このＫは、点Ｂから光学的中心面までの距離、線分ＡＢの長さ、および線分ＡＣと光学的中心面のなす角すなわち物体面Ｌと投影面のなす角に応じて変化する値であり、このＫを「位置定数」と呼ぶことにする。そして、このＫを用いると、式（８）は式（９）のように記載できる。
【数８】
2005157677.tif 000010
【００４４】
さらに、式（６）から、Ｋと｜ａｂ｜,｜ｂｃ｜の関係は式（１０）のようになる。
【数９】
2005157677.tif 000011
従って、Ｋの値は次の式（１１）によって求めることができる。
【数１０】
2005157677.tif 000012
【００４５】
ところで、上記のＫの値は、点Ｂから光学的中心面までの距離｜ＢＢ′｜と、点Ａから、点Ｂを通って光学的中心面に平行な平面までの距離Ｓとを用いて定義した。そこで、この値を、「点Ｂを参照点とした点Ａの位置定数」と呼ぶことにする。すなわち、
（点Ｘを参照点とした点Ｙの位置定数）
＝（点Ｙから、点Ｘを通って光学的中心面に平行な平面（参照面）までの距離）／
（点Ｘから光学的中心面までの距離）  …式（１２）
と定義する。ただし、「点Ｙから参照面までの距離」は、実際の距離に、点Ｙが参照面に対して光学的中心面と反対側にある場合にプラス、光学的中心面と同じ側に有る場合にマイナスの符号をつけた値とする。
【００４６】
従って、図３及び図４に示した場合において、点Ｂを参照点とすると、「点Ａから参照面までの距離」はＳ、「点Ｃから参照面までの距離」は−Ｓとなる。そして、点Ｂを参照点とした点Ａの位置定数をＫＡと記載するものとすると、ＫＡ＝Ｋ,ＫＢ＝０,ＫＣ＝−Ｋとなる。
ゆえに、式（１０）より、ＫＡとＫＣの関係は、式（１３）のように表わすことができる。
【数１１】
2005157677.tif 000013
【００４７】
また、図７に示すように、線分ＡＣの延長上の任意の点をＤとし、参照面と光学的中心面の距離をＶＢ、点Ｃ及び点Ｄと参照面との距離をそれぞれＳＣ,ＳＤと置くと、点Ｃ及び点Ｄの位置定数ＫＣ及びＫＤは、ＫＣ＝ＳＣ／ＶＢ,ＫＤ＝ＳＤ／ＶＢのように表わすことができる。
そして、ＳＤ／｜ＤＢ｜＝ＳＣ／｜ＣＢ｜であるから、以下の式（１４）が成り立つ。
【数１２】
2005157677.tif 000014
なお、点Ｄを点Ａ側に取った場合には、ＫＤ＝Ｋ・｜ＤＢ｜／｜ＡＢ｜となる。
【００４８】
ここまでの説明は、コード記号が線分であるものとして行った。しかし、実際にはコード記号は平面である。そこで、次に、上述したコード記号上の点の位置定数と画像中の位置の関係について、平面の場合に拡張して説明する。ここでは、コード記号面が図８（ａ）に示すような平行四辺形ＥＦＧＨである場合について考える。ここでも、点Ｅ，Ｆ，Ｇ，Ｈは、それぞれコード記号中の位置決め用パターンの端部又は中心であると考えるとよい。そして、これら４点を基準点と呼び、画像中でこれらの点に相当する点の位置ｅ，ｆ，ｇ，ｈは、画像を解析して容易に定めることができるものとする。
【００４９】
この場合、平行四辺形ＥＦＧＨの対角線の交点Ｉは、各対角線ＥＧ,ＦＨの中点に当たる。従って、各対角線について図３乃至図５を用いて説明した線分ＡＣについての考え方を適用して、点Ｅ，Ｆ，Ｇ，Ｈの位置定数ＫＥ，ＫＦ，ＫＧ，ＫＨを、下記式（１５）,（１６）のように定めることができる。この場合、参照点は点Ｉである。また、点Ｉの画像中の位置ｉは、点Ｅ，Ｆ，Ｇ，Ｈの画像中の位置ｅ,ｆ,ｇ,ｈがわかるので、線分ｅｇと線分ｆｈの交点として容易に導出することができる。この点は、イメージエリア２１に結像した画像が図８（ｂ）に示すようないびつな四角形や、（ｃ）に示すような台形や、その他の四角形であっても変わらない。
【数１３】
2005157677.tif 000015
【００５０】
従って、上記式（１１）より、ＫＥ，ＫＦ，ＫＧ，ＫＨは以下の式（１７）,（１８）に示すような値となる。
【数１４】
2005157677.tif 000016
【００５１】
式（１７）,（１８）に登場する各線分の長さは、各点の画像中の位置がわかれば容易に求めることができるし、その演算には三角関数演算のような複雑な演算は必要としない。従って、点Ｅ，Ｆ，Ｇ，Ｈの位置定数は、これら各点の画像中の位置のみから、単純な距離計算及び四則演算によって求めることができる。
そして、以上のように求めた点Ｅ，Ｆ，Ｇ，Ｈの位置定数を用いて、コード記号面中に解析用の格子を形成するための格子点を配置することができる。この場合において、ここでは、上記の基準点（点Ｅ，Ｆ，Ｇ，Ｈ）が基準となる格子点であるとし、２つの格子点を結ぶ線分の中点に当たる点の画像中における位置を順次決定していくようにしている。
【００５２】
図９（ａ）に、ここで例として用いるコード面上の平行四辺形ＥＦＧＨを、（ｂ）に、そのコード面を撮像した場合の画像中における各点の位置の例を示す。
図９（ａ）に示すように、コード面上の平行四辺形ＥＦＧＨの各辺の中点をそれぞれ点Ｊ，Ｋ，Ｌ,Ｍとすると、これら各点は、図９（ｂ）に示すように、画像中でも対応する各辺上に位置するが、必ずしも中点の位置になるとは限らない。
【００５３】
しかし、点Ｊは線分ＥＨの中点であるから、上述した式（６）より、次の式（１９）の関係が成り立つ。
【数１５】
2005157677.tif 000017
ここで、点Ｉを参照点とし、参照平面と光学的中心面との距離をＶ、点Ｅ,Ｈから参照平面までの距離をそれぞれＳＥ,ＳＨとすると、位置定数を定義した式（１２）から、次の式（２０）が成り立つことがわかる。
【数１６】
2005157677.tif 000018
【００５４】
そして、ＫＥ及びＫＨは上記の式（１７）,（１８）から求めることができるので、点Ｊの画像中での位置は、線分ｅｈを式（２０）に示す割合で分割する点ｊとなることがわかる。同様に、点Ｋ,Ｌ,Ｍの画像中での位置も、線分ｆｇ,ｅｆ,ｇｈをそれぞれ下記数１７に示す割合で分割する点ｋ,ｌ,ｍとなることがわかる。
【数１７】
2005157677.tif 000019
【００５５】
また、点Ｊ,Ｋ，Ｌ,Ｍはそれぞれ線分ＥＨ,ＦＧ,ＥＦ,ＧＨの中点であるから、これらの点の位置定数は、下記数１８に示すように求めることができる。
【数１８】
2005157677.tif 000020
【００５６】
以上の計算により、平行四辺形ＥＦＧＨの各辺の中点の位置定数及び画像中での位置を得ることができる。従って、４つの平行四辺形ＥＬＩＪ，ＪＩＭＨ，ＬＦＫＩ，ＩＫＧＭについて各頂点の位置定数及び画像中の位置がわかったことになる。
従って、これらを利用して４つの平行四辺形について同様な計算を行うことにより、さらに各辺の中点の位置定数及び画像中の位置を求めることができるので、コード記号面上で図１０に示すような１６個の平行四辺形による格子を形成する各格子点の画像中での位置がわかる。なお、破線同士が交わる交点の画像中の位置は、平行四辺形ＥＬＩＪ等の対角線の交点であることを利用して、線分ｌｊと線分ｅｉとの交点等として求めることができる。その位置定数も、（ＫＥ＋ＫＩ）／２等として求めることができる。
【００５７】
以上のように求めた各格子点の情報を利用して、１６個の平行四辺形について同様な計算を行うことにより、さらにコード記号面上で６４個の平行四辺形による格子を形成する各格子点の位置定数及び画像中での位置がわかる。
以上の処理を繰り返すことにより、いくらでも細かく格子点の位置を決めることができる。そして、ある程度細かい格子の内部では、コード記号面が撮像面に対して傾いていたとしても、像の歪みはあまり大きくならないので、撮像がコード記号面に平行な面で行われたものとして画像データの解析を行っても歪みは問題とならず、解析に支障がない。
【００５８】
そこで、以上のように定めた格子点によって囲まれる最も細かい格子の内側では、撮像がコード記号面に平行な面で行われたものとして画像データの解析を行うようにしている。例えば、２次元コードの場合には、コードの各モジュールの中心が格子点上に位置するるか、端部が格子点状に位置するか、また格子の１辺にいくつのモジュールが並ぶか等を予め把握しておくことができるから、各モジュールの位置を決める際に、格子の各辺をモジュールの個数に応じて均等に分割し、その各点を結んで得た線分を基準に、各モジュールの位置を決めることができる。
【００５９】
なお、格子をあまり細かく取ると、格子点の位置を決めるための計算量が大きくなることから、格子点は、解析時に画像の歪みが問題とならない程度の適度の細かさまで決めるようにするとよい。
また、ここでは、基準点を平行四辺形の各頂点の位置に設けた場合について説明したが、基準点を平行四辺形のうちの特別な形状である長方形やひし形、正方形の各頂点の位置に設ける場合にも同様な手法が適用できることは、もちろんである。
【００６０】
次に、以上のような手法を適用した、このコードスキャナにおける画像データ処理の内容について説明する。
図１１のフローチャートに、その画像データ処理の一例として、読み取った二次元コードのデコードを行う処理を示す。なお、読み取り対象のコードとしては、例えば図２３に示したＰＤＦ４１７が考えられ、この場合、基準点としては、スタートパターン及びストップパターンの端部において、長方形の４頂点となる点を採用することができる。また、この処理は、この発明の画像処理方法の第１の実施形態に係る処理である。
【００６１】
図１に示したスキャナ１は、図示しないトリガスイッチ等をオンすると、ＣＰＵ３１が所要のプログラムを実行することにより、図１１に示す処理を開始する。
そして、まずステップＳ１で、イメージエリア２１上に結像している画像を、画像データとして取り込む。この画像データは、ＣＭＯＳセンサ１２が、イメージエリア２１に結像した画像を光電変換して電圧信号として取り出し、デジタル画像データに変換したものである。ここでは、ＣＭＯＳセンサ１２及びＣＰＵ３１が画像データ取込手段として機能する。また、以下のステップＳ２乃至Ｓ７の処理では、ＣＰＵ３１が解析手段として機能する。
【００６２】
次に、ステップＳ２で、取り込んだ画像データを解析して各基準点を探索し、画像中の位置を決定する。そして、スタート／ストップパターンは極めて特徴的なパターンであるから、コード面の傾きにより画像が歪んでいたとしても、その端部にある基準点は容易に発見することができる。なお、各点の画像中での位置は、イメージエリア２１の主走査方向の画素番号と副走査方向の画素番号とにより、これら２方向の座標軸からなる直交座標系における座標として定義するとよい。ただしこの場合においても、計算誤差を低減するため、小数部分を含む座標値も便宜的に取りうるものとする。この処理が、第１の位置決定手順の処理であり、ここではＣＰＵ３１が第１の位置決定手段として機能する。
【００６３】
次のステップＳ３では、ステップＳ２で求めた各基準点の画像中の位置から、上記長方形の対角線の交点の画像中の位置を求めると共に、上記式（１７）及び（１８）を利用して、求めた対角線の交点を参照点とする各基準点の位置定数を計算する。
そして、ステップＳ４で、数１６乃至１８を用いて説明した手法を用いて、２つの格子点を結ぶ線分の中点に当たる点の画像中の位置を新たな格子点の位置として順次計算して決定し、画像データ中に解析用の格子を設ける。
以上のステップＳ３及びＳ４の処理が、第２の位置決定手順の処理であり、ここではＣＰＵ３１が第２の位置決定手段として機能する。
【００６４】
その後、ステップＳ５で、コード記号面３上の全モジュールの位置を決定するが、このとき、ステップＳ２乃至Ｓ４で位置を決定した格子点によって囲まれる最も細かい格子の内側では、撮像が読取対象のコード記号面３に平行な面で行われたものとし、例えば画像中に同じ大きさのモジュールが等間隔で並んでいるものとして位置を決定する。
そして、以下ステップＳ６乃至Ｓ８で、各モジュール位置の画像データの値から、そのモジュールの示す値（２値の場合には０か１）を判定し、誤り訂正のためのリードソロモンデコードを行い、デコードしたデータをホストコンピュータ２に出力する。これらのステップＳ６乃至Ｓ８の処理については、適宜公知の処理を採用すればよい。
なお、リードソロモンデコードは、コードに「汚れ」や「欠け」がある部分に集中して発生する情報の誤り（バースト誤り）の訂正に適した処理であり、誤り訂正のためにコード中に埋め込んでおくリードソロモン符号を用いて行うものである。
【００６５】
以上のような処理を行うことにより、読み取り対象の情報が平行四辺形の４頂点を構成する位置に配置された基準点を有する場合には、読み取り対象が傾いた状態で撮像された場合でも、三角関数等の複雑な演算を行うことなく、基準点の画像中の位置の情報のみから、単純な四則演算及び２点間の距離計算を用いて、傾きによる画像の歪みの影響を考慮した正確な画像処理を可能にすることができる。従って、高速なデコードが可能なコードスキャナを構成することができる。また、この方式は、セル配列の各行や各列の位置を示すタイミングセルがないコードのデコードにも使用することができるため、広汎な対象に適用することができる。ＰＤＦ４１７形式以外のコードの読み取りにも適用することができることは、言うまでもない。
【００６６】
さらに、以上説明した手法は、所与の情報を示す図形が規則的に配置されたコードが読み取り対象であり、読み取った画像データを解析してそのコードが示す情報を取得するコードスキャナのような光学的情報読取装置に適用すると有効であるが、所要の参照点を有する読取対象であれば、どのような画像の解析にも適用することができる。
また、ハードウェア構成も、上述したものに限られることはない。
【００６７】
〔第２の実施形態：図１２乃至図２２〕
次に、この発明の光学的情報読取装置の第２の実施形態であるスキャナについて説明する。このスキャナは、ハードウェア構成については上述した第１の実施形態のものと同様であるので、その部分の説明は省略する。
このスキャナも、撮像時に読み取り対象のコード記号面３がＣＭＯＳセンサ１２イメージエリア２１と平行でなかった場合でもコード記号面３の二次元コードを正確にデコードできるようにした点が特徴であり、このための処理を第１の実施形態の場合と同様な考え方に基づいて行うが、格子点の取り方が異なる。
【００６８】
すなわち、このスキャナにおいては、コード記号面３中において、既に画像中の位置が決定された格子点の中から選択した３点を３つの頂点とする平行四辺形の残り１つの頂点に当たる点を新たな格子点とし、その画像中の位置を順次定めるようにしている。そこで、まずこの位置を決定するための計算内容について説明する。
【００６９】
ここで、図１２（ａ）に示した平行四辺形ＥＦＧＨについて、点Ｅ，Ｆ，Ｇを、既に画像中の位置が決定されたコード記号面上の格子点の中から選択した３点とし、点Ｈを、新たに画像中の位置を決定すべき格子点とする。なお、点Ｅ，Ｆ，Ｇについての位置定数ＫＥ，ＫＦ，ＫＧは既知であるとする。初めに平行四辺形の４頂点を構成する位置に配置された基準点の位置定数を第１の実施形態で説明した方式で定めれば、これを利用して画像中の位置を導出する全ての格子点の位置定数は、以下に説明する方式で求めることができる。この場合の参照点は、上記の平行四辺形の対角線の交点であるが、図中には示していない。また、この点がどこにあっても以下の導出過程に変化はない。
【００７０】
ここで、点Ｅ，Ｆ，Ｇ，Ｈから参照平面までの距離をそれぞれＳＥ，ＳＦ，ＳＧ，ＳＨとすると、線分ＧＨと線分ＦＥは平行で長さが等しいことから、これらの間には次の式（２１）の関係が成立する。
【数１９】
2005157677.tif 000021
また、参照平面と光学的中心面との距離をＶと置くと、式（２２）が成立する。
【数２０】
2005157677.tif 000022
【００７１】
そして、位置定数の定義から、下記の関係式も成立する。
【数２１】
2005157677.tif 000023
従って、点Ｈの位置定数ＫＨは、点Ｅ，Ｆ，Ｇの位置定数ＫＥ，ＫＦ，ＫＧを用いて式（２３）により求めることができる。
【００７２】
また、図１２（ｂ）に、（ａ）の図形を撮像した場合の画像を示すが、線分ＥＧの中点の画像中の位置ｉは、上述した式（１３）より、平行四辺形の対角線となる線分ｅｇを
｜ｇｉ｜／｜ｅｉ｜＝（１＋ＫＥ）／（１＋ＫＧ）  …式（２４）
なる割合で分割した点となる。ここで、ＫＥとＫＧは既知であるので、ｉの位置は具体的に定めることができる。
【００７３】
また、点ｈの画像中での位置は、線分ｆｉの延長上となり、同様に式（１３）より、線分ｆｉを
｜ｈｉ｜／｜ｆｉ｜＝（１＋ＫＦ）／（１＋ＫＨ）  …式（２５）
なる割合で延長した点となる。そして、ＫＦは既知であり、式（２３）よりＫＨも求めることができるので、ｈの位置は具体的に定めることができる。そして、この点ｈの位置及び点Ｈの位置定数を、次の格子点の位置定数及び画像中の位置を求めるために使用することができる。
【００７４】
このスキャナにおいては、以上のように格子点を配置することにより、マキシコードについてコード記号面３の傾きに起因する画像の歪みを補正した解析を行うことができるようにしている。そこで、読み取り対象がマキシコードである場合の処理について以下に具体的に説明する。また、マキシコード特有の性質を利用して格子点の位置を精密化する処理も行っているので、この点についても併せて説明する。
【００７５】
まず、マキシコードには、従来の技術の項で図２４を用いて説明した通り、位置決めのためのパターンとして、中央部のファインダパターンＦＰと、６つのモジュール群Ｐ１〜Ｐ６からなる方向パターンとを有する。そして、ファインダパターンは、白、黒、白、黒、白、黒の６つの同心円で構成される極めて特徴的なパターンであるので、その位置は画像が歪んでいたとしても容易に決定することができる。また、各方向パターンの位置も、ファインダパターンとの位置関係が決まっているので、これをＲＡＭ３３に記憶させておくことにより、容易に決定することができる。
【００７６】
そこで、これらのパターンの位置に基準点を置くものとし、ファインダパターンＦＰの中心と、方向パターンを構成する各モジュール群のうち、最もファインダパターンＦＰに近い第１モジュール（例として、モジュール群Ｐ３の場合にはモジュールＰ３Ａ）の中心とを基準点とする。このようにすると、各基準点は、正六角形の６頂点及びその中心の位置に配置されることになる。なお、以後の説明において、ファインダパターンＦＰの中心を点Ｏ、モジュール群Ｐ１乃至Ｐ６に対応する基準点をそれぞれ点Ｐ１乃至Ｐ６と呼び、これらの画像中での位置を、それぞれ点Ｌ０及び点Ｌ１乃至Ｌ６と呼ぶ。
【００７７】
ここで、図１３のフローチャートに、読み取ったマキシコードのデコードを行う処理を示す。この処理は、この発明の画像処理方法の第２の実施形態に係る処理である。
この実施形態のスキャナ１は、図示しないトリガスイッチ等をオンすると、ＣＰＵ３１が所要のプログラムを実行することにより、図１３に示す処理を開始する。
そして、まずステップＳ１０１で、図１１のステップＳ１の場合と同様に、イメージエリア２１上に結像している画像を、画像データとして取り込む。そして、ここではＣＭＯＳセンサ１２及びＣＰＵ３１が画像データ取込手段として機能し、以下のステップＳ１０２乃至Ｓ１０８の処理では、ＣＰＵ３１が解析手段として機能する。
【００７８】
次に、ステップＳ１０２及びＳ１０３で、取り込んだ画像データを解析してファインダパターンの中心及び各方向パターンの位置を探索し、各基準点の位置を決定する。これらの処理が、第１の位置決定手順の処理であり、ここではＣＰＵ３１が第１の位置決定手段として機能する。
その後、ステップＳ１０４で各基準点の画像中の位置を正確化する。このコードスキャナでは、基準点の外側に格子点を取っていくので、基準点の位置にずれがあると後の処理に影響が大きいため、このような処理を設けたものである。なお、ここで正確化の対象となるのは、各方向パターンに対応する基準点のみとしている。これは、ファインダパターンは他の部分とは際立って異なるパターンであり、その中心位置は比較的正確に検知できると考えられるためである。
【００７９】
ここで、このステップＳ１０４の処理の内容を図１４のフローチャートにより詳しく示す。
すなわち、この処理においては、まずステップＳ２０１で、各基準点の画像中での位置から、各基準点の位置定数を求める。
上記のように基準点を定めると、線分Ｐ１Ｐ４，Ｐ２Ｐ５，Ｐ３Ｐ６の中点は全て点Ｏとなる。従って、これらの線分について上述した式（１１）を適用すると、点Ｐ１乃至Ｐ６の、参照点を点Ｏとする位置定数ＫＰ１乃至ＫＰ６は、上記点Ｌ０乃至Ｌ６の位置から以下の数２２のように定められる。
【数２２】
2005157677.tif 000024
【００８０】
次に、ステップＳ２０２で、隣接する２つの基準点の位置定数を用いて、他の基準点の位置定数を計算する。
各基準点の位置関係は図１５（ａ）に示すようになるので、例えば点Ｐ３は、点Ｏ，Ｐ１，Ｐ２の３点を３つの頂点とし、線分Ｐ２Ｏを対角線とする平行四辺形の残り１つの頂点に該当する。従って、これらの点について上記の式（２３）を適用すると、点Ｐ３の位置定数ＫＰ３を、ＫＰ３＊＝ＫＰ２−ＫＰ１として求めることができる。ＫＰ３に付した＊は、他の点の位置定数を用いて計算した位置定数であることを示すためのものである。
【００８１】
同様に、下記数２３に示すように、各基準点の位置定数を計算することができる。
【数２３】
2005157677.tif 000025
なお、ＫＰ１＊とＫＰ２＊を用いて点Ｐ３の位置定数を求める等しても、上記数２２を考慮すると、結局のところ、ＫＰ３又はＫＰ３＊のどちらかと同じ値しか得られない。他の点についても同様である。
【００８２】
次に、ステップＳ２０３で、各基準点について、ステップＳ２０１で求めた位置定数とステップＳ２０２で求めた位置定数とを平均し、その値を以後の計算に用いる位置定数として採用する。
ここで、仮に各基準点の画像中の位置を完全に正確に求めることができていたとすると、ＫＰＮとＫＰＮ＊（Ｎ＝１〜６）は一致するはずである。しかし、実際には計測や解析の誤差のため、これらは一致しないことが多い。そこで、これら２つの値の平均を取り、その値を以後の計算に使用するようにしたものである。以後はこの平均値をＫＰＮと表記することにする。
【００８３】
次に、ステップＳ２０４で、ファインダパターンの中心及び２つの隣接する方向パターンと対応する基準点の位置定数及び画像中の位置を用いて、他の４つの基準点の画像中の位置を求める。この導出法は、以下の通りである。
上記のように、点Ｐ３は、点Ｏ，Ｐ１，Ｐ２の３点を３つの頂点とし、線分Ｐ２Ｏを対角線とする平行四辺形の残り１つの頂点に該当する。そこで、これらの点について上述の式（２３）乃至式（２５）を適用すると、点Ｐ３の画像中の位置を、図１５（ｂ）に示すように、線分ＬＯ２Ｌ０を所定の割合で分割する点Ｘについて、線分ＬＯ１Ｘを所定の割合で延長した点の位置として導出することができる。
【００８４】
ここで、画像を検索して得た点Ｐｎの画像中の位置を点ＬＯｎと記載し、点Ｐｍ，点Ｐ（ｍ＋１），点Ｏの情報をもとに導出した点Ｐｎの画像中の位置を点Ｌｍｎ（ｍはローマ数字）と記載するものとする。従って、点ＬI３は、点Ｐ１，点Ｐ２，点Ｏの情報から導出した点Ｐ３の画像中の位置を意味する。
また、点Ｐ４は点Ｐ２，点Ｐ３，点Ｏを３つの頂点とする平行四辺形の残り１つの頂点に該当するので、（ｃ）に示すように、検索した点Ｐ２の情報と、先ほど求めた点Ｐ３の情報とを利用して、点Ｐ４の位置定数および画像中の位置を導出することができる。このように求めた画像中の位置は、点ＬI４となる。
以下同様に、（ｄ）及び（ｅ）に示すように各平行四辺形に式（２３）乃至式（２５）を適用し、点ＬI５及び点ＬI６の位置を求めることができる。
以上でステップＳ２０４の処理を終了し、次のステップＳ２０５に進む。
【００８５】
次のステップＳ２０５では、他の基準点の組み合わせ５通りについて、ステップＳ２０４の場合と同様に、他の基準点の画像中の位置を求める。
すなわち、まず点Ｐ２，点Ｐ３，点Ｏの情報をもとに同様な導出を行い、点ＬII４，点ＬII５，点ＬII６，点ＬII１の位置を求め、さらに、他の４つの組み合わせについても、同様にもとにした３点以外の基準点の画像中の位置を順次導出していく。
以上のステップＳ２０４及びＳ２０５の処理が、第３の位置決定手順の処理であり、ここではＣＰＵ３１が第３の位置決定手段として機能する。
【００８６】
そして、次のステップＳ２０６では、初めに検索して得た位置（ＬＯｎ）と、ステップＳ２０４及びＳ２０５で求めた位置（Ｌｍｎ）とを平均して、各方向パターンの画像中の位置（Ｌｎ）を決定する。平均の位置は、イメージエリア２１中での、各点の主走査方向の画素番号と副走査方向の座標をそれぞれ平均して求めればよい。
例えば、点Ｐ１の画像中の位置については、図１６に示すように、初めに検索して得た点ＬＯ１と、他の基準点の情報から導出したＬII１，ＬIII１，ＬIV１，ＬV１の５つの位置情報が得られているので、これら５点の座標を平均してＬ１の座標を得ることができる。
なお、上記の５つ全ての座標を導出せず、２つ、３つ、あるいは４つの座標のみを導出して平均したとしても、ある程度の効果は得ることができる。
【００８７】
以上で各基準点の位置の正確化処理を終了し、図１３のステップＳ１０５の処理に進む。ただし、上記の処理において、ステップＳ２０２及びＳ２０３の処理は必須ではなく、ステップＳ２０１で求めた各基準点の位置定数をそのままＫＰＮとして使用するようにしてもよい。
【００８８】
次のステップＳ１０５の処理は、画像面上の各格子点の位置を順次決定する処理である。そして、このスキャナにおいては、格子点は図１７に示すような位置に取り、コード記号面上に正三角形の格子を形成する。
ここで、このステップＳ１０５の処理の内容を図１８のフローチャートにより詳しく示す。
すなわち、この処理においては、まずステップＳ３０１で、初めの基準点Ｏ及びＰ１〜Ｐ６の位置定数及び画像中の位置から定められる第１グリッドの各格子点の画像中の位置（及びその演算課程で得られる位置定数）を求める。
【００８９】
例えば、点Ｐａ１は、点Ｏ，Ｐ１，Ｐ２の３点を３つの頂点とし、線分Ｐ１Ｐ２を対角線とする平行四辺形の残り１つの頂点に該当する。従って、これらの点について上述の式（２３）乃至式（２５）を適用すると、点Ｐａ１の画像中の位置を、図１９に示すように、線分Ｌ２Ｌ１を所定の割合で分割する点Ｙについて、線分Ｌ０Ｙを所定の割合で延長した点の位置として導出することができる。この際、点Ｐａ１の位置定数も導出できる。
また、同様に点Ｐａ２〜Ｐａ６の位置定数及び画像中の位置も導出することができ、これらの点が第１グリッドを構成する格子点となる。なお、第１グリッドは、点Ｏから各基準点の次に近い格子点の集まりであると言うこともできる。
【００９０】
以上の各点の画像中の位置を導出できると、処理はステップＳ３０２に進み、ステップＳ３０１で求めた各格子点の位置を調整するが、この処理については後に詳述する。
そしてその後、ステップＳ３０３に進んでコード記号の外縁までの格子点の位置を決定したか否か判断するが、ここではまだそこまで処理が進んでいないので、ステップＳ３０４に進む。
【００９１】
そして、今までに求めた各格子点の位置定数及び画像中の位置を利用して、ステップＳ３０１の場合と同様に次のグリッドの各格子点の画像中の位置を導出する。ここで、次のグリッドとは、前のグリッドを構成する各格子点の次に点Ｏに近い格子点の集まりである。そして、図１７において、各格子点がどのグリッドに属するかは、各点の名前に含まれる、「Ｐ」の次のアルファベットで示している。これが「ａ」である格子点は第１グリッド、以下「ｂ」，「ｃ」，…である格子点は、第２，第３，…グリッドの格子点である。
【００９２】
また、例えば点Ｐｂ１の画像中の位置は、点Ｐ１，Ｐ２，Ｐａ１の情報から導出することもできるし、点Ｐ２，Ｐ３，Ｐａ２の情報から導出することもできる。このような場合、双方から導出した位置の平均を採用してもよいし、一方から導出した値を採用するようにしてもよい。
以上の各点の画像中の位置を導出できると、処理はステップＳ３０５に進み、ステップＳ３０４で求めた各格子点の位置を調整する。この処理は、ステップＳ３０２と同様なものであり、この処理については後に詳述する。
【００９３】
そしてその後、ステップＳ３０３に戻って処理を繰り返し、コード記号の外縁までの、すなわち最後のグリッド（図１７の場合は第５グリッド）の格子点の位置が決定されていれば、ステップＳ１０５の処理を終了する。以上のステップＳ１０５の処理が、第２の位置決定手順の処理であり、ここではＣＰＵ３１が第２の位置決定手段として機能する。
そして、以上により、コード記号面上に図１７に示したような格子を構成する各格子点の画像中の位置を決定することができる。
【００９４】
次に、図１３のステップＳ１０６以降の処理に進む。
ステップＳ１０６では、コード記号面３上の全モジュールの位置を決定するが、このとき、ステップＳ１０２乃至Ｓ１０５で位置を決定した格子点によって囲まれる最も細かい格子の内側では、撮像が読取対象のコード記号面３に平行な面で行われたものとし、画像中に同じ大きさのモジュールが等間隔で並んでいるものとして位置を決定する。この場合において、最も細かい格子として、３つの格子点からなる正三角形ではなく、４つの格子点からなる平行四辺形を採用してもよい。
そして、以下ステップＳ１０７乃至Ｓ１０９で、各モジュール位置の画像データの値から、そのモジュールの示す値（２値の場合には０か１）を判定し、誤り訂正のためのリードソロモンデコードを行い、デコードしたデータをホストコンピュータ２に出力して処理を終了する。これらの処理については、適宜公知の処理を採用すればよい。
【００９５】
ここで、図１８のステップＳ３０２及びＳ３０４で行う格子点の位置調整の処理について説明する。この処理は、点Ｏから離れるに従って大きくなると考えられる格子点の位置誤差を補正し、誤差が蓄積しないようにするための処理である。そして、その詳細は、図２０のフローチャートに示すものである。
【００９６】
すなわち、まずステップＳ４０１で、調整対象の格子点の位置を決めるために用いた平行四辺形と対応する画像中の格子のうち、調整対象の格子点を含む辺の一方を６等分し、モジュールの大きさＳｔを求める。例えば、図１９に示した例の場合には、線分Ｌａ１Ｌ１又はＬａ１Ｌ２の一方を６等分することになる。なお、後述するように、ここで用いなかった辺についても後で同様な処理を行うので、どちらの辺を先に用いても構わない。
【００９７】
また、マキシコード上に図１７に示すような格子を設けた場合、各格子点はモジュールの中心に該当し、格子の１辺はモジュール６個分の長さとなる。そして、第１の実施形態の場合と同様に、最小の格子の内側では、撮像がコード記号面に平行な面で行われたものとして画像データの解析を行うので、格子の辺を等分して各モジュールの位置を決めるようにしている。
【００９８】
次に、ステップＳ４０２でＮ＝１と置き、ステップＳ４０３でＮ番目（ここでは１番目）のモジュールの位置を決める。ここで、１番目のモジュールとは、ステップＳ４０１で６等分した辺上にあって調整対象でない方の格子点から最も近いモジュールであるとする。図２１（ａ）に示す例では、モジュールＭ１に該当する。そして、この位置は、点Ｌ１から距離ＳｔだけＬａ１方向に進んだ点、あるいは線分Ｌ１Ｌａ１を１：５に内分する点として決めることができる。
【００９９】
その後、ステップＳ４０４で、ステップＳ４０３で決めたモジュール位置を中心に、直径がＳｔより若干小さい円の円周を８等分する点を取り、その点の画像データを取得する。この点の取り方は、例えば図２１（ｂ）に破線で示す正八角形の頂点とすることができ、このような点の座標は、所要の回転行列を固定値として予め記憶させておけば、三角関数演算を用いることなく求めることができる。また、円の直径をＳｔより小さいものとしたのは、モジュールが６角形であり、直径Ｓｔの円内全体に存在するわけではないからである。しかし、円があまり小さすぎると、後述する調整方向を得る際にわずかなずれが検出できず、適当でないから、円の直径としては、例えばＳｔ×（２／３）を用いるとよい。この処理が、サンプリング手順の処理であり、ここではＣＰＵ３１がサンプリング手段として機能する。
なお、サンプリング位置については、必ずしも８点でなくても、また円周上に等間隔に取らなくても構わないが、後述する調整テーブルの大きさと信頼性を考慮すると、このようにすることが好ましい。
【０１００】
次のステップＳ４０５では、ステップＳ４０４で取得した８点の画像データを所定の閾値で２値化し、白又は黒のデータを得る。そして、ステップＳ４０６でその２値化後のデータを調整テーブルに当てはめて、格子点の調整方向を取得する。
【０１０１】
ここで、調整テーブルについて説明する。
調整対象の格子点が、仮に丁度目標のモジュールの中心に位置している場合には、ステップＳ４０１で６等分した辺は各モジュールの中心を通ると考えられるので、ステップＳ４０４で画像データを取得した８点は全て１つのモジュール内に位置し、ステップＳ４０５で求めた８点の値は、そのモジュールが白であれば全て白、黒であれば全て黒になると考えられる。しかし、調整対象の格子点が目標のモジュールの中心からずれている場合には、図２１（ｃ）に示すように、６等分した辺は各モジュールの中心からずれた位置を通るので、Ｎ番目のモジュールＭＮが黒であっても隣のモジュールが白であれば、ステップＳ４０５で求めた８点の値の一部は白になってしまう。従って、このような場合には、格子点Ｌａ１の位置を矢印方向に微調整する必要があることがわかる。
上記の調整テーブルは、ステップＳ４０５で求めた８点の値の組み合わせと、このような調整方向との対応関係を示したものである。また、ステップＳ４０４で想定したモジュールが白か黒かを示す情報も記載するようにするとよい。
【０１０２】
ステップＳ４０５で取得したデータをこのような調整テーブルにあてはめることにより、格子点の調整方向を取得することができる。ただし、モジュールＭＮと隣接モジュールの色が同じ場合等には、適当な調整方向を得られないこともある。しかし、モジュールは直線的に並んでいるのであるから、格子点の位置がずれていれば、基本的にはすべてのモジュールにおいて同じ方向へのずれが検出されるはずであり、辺上の６個のモジュールについて同様な処理を行って、多数のモジュールについて一致して得られた調整方向を採用することようにすれば、一部のモジュールについて適当な調整方向が得られなくても問題ない。８点の値の組み合わせに応じて、調整方向と共にその信頼性も定義してテーブルに記載しておき、信頼性の高い調整方向を優先的に採用するようにしてもよい。
なお、上記の対応関係は、必ずしもテーブル形式で記憶させる必要はない。
【０１０３】
以上のようなステップＳ４０６の処理の後、ステップＳ４０７でＮをインクリメントし、Ｎが６より大きくなければ、すなわち辺上の全てのモジュールについて処理がなされていなければ、ステップＳ４０３に戻って処理を繰り返す。
ステップＳ４０７でＮが６より大きければ、ステップＳ４０９に進み、ステップＳ４０１で採用しなかった方の辺について、ステップＳ４０１乃至Ｓ４０９と同様な処理を行う。
【０１０４】
そして、ステップＳ４１０で、ステップＳ４０６（又はＳ４０９）で得られた調整方向に従って調整対象の格子点の位置を調整する。調整量は、Ｓｔ×１／１６からＳｔ×１／８程度とするとよい。また、これに合わせて位置定数も調整する。ここで、ステップＳ４０６とステップＳ４０９で得られた調整方向が食い違う場合には、辺上に黒モジュールが多かった方の処理で得られた調整方向を採用するようにするとよい。黒モジュールは、バックとはっきり区別できるので、その位置を基準とした調整方向の方が信頼性が高いと考えられるためである。
【０１０５】
以上により１つの格子点の位置調整の処理を終了し、必要な全ての格子点の位置調整が完了すると、ステップＳ４１１から図１８のステップＳ３０３に進む。他に位置調整が必要な格子点があれば、ステップＳ４０１に戻って処理を繰り返す。
なお、この図２０の処理において、ステップＳ４０４において円周だけでなく円の中心の点の画像データも取得するようにし、調整テーブルを、中心の値と円周上の各点の値との異同の組み合わせと、調整方向との対応関係を示すものとしてもよい。
【０１０６】
以上説明したような各処理を行うことにより、読み取り対象の情報が正六角形の６頂点及びその中心の位置に配置された基準点を有する場合には、読み取り対象が傾いた状態で撮像された場合でも、三角関数等の複雑な演算を行うことなく、単純な四則演算及び２点間の距離計算を用いて、傾きによる画像の歪みの影響を考慮した正確な画像処理を可能にすることができる。従って、高速なデコードが可能なコードスキャナを構成することができる。また、この方式は、セル配列の各行や各列の位置を示すタイミングセルがないコードのデコードにも使用することができるため、広汎な対象に適用することができる。ここではマキシコードのデコードを例に挙げて説明したが、コードの形式に応じて基準点及び格子点を取ることにより、他の形式のコードの読み取りにも適用することができることは、言うまでもない。
【０１０７】
さらに、以上説明した手法は、所与の情報を示す２色の図形が規則的に配置されたコードが読み取り対象であり、読み取った画像データを解析してそのコードが示す情報を取得するコードスキャナのような光学的情報読取装置に適用すると有効であるが、所要の参照点を有する読取対象であれば、どのような画像の解析にも適用することができる。また、上記の２色は白と黒である場合が多いが、他の色である場合にも上記の方式が適用可能であることは言うまでもない。
【０１０８】
また、ハードウェア構成も、上述したものに限られることはない。例えば、画像解析処理をホストコンピュータ側で行うようにし、汎用のＰＣに所要のプログラムを実行させることにより、上記の各処理を行わせることもできる。この場合、プログラムを適当な記録媒体に記憶させて提供することもできる。上述の第１の実施形態の場合も同様である。
【０１０９】
ところで、マキシコードをデコードする場合、通常は、コードの印刷が不鮮明である等して方向パターンの位置が１つでも検索できないと、デコードを行うことができない。しかし、上述した位置正確化処理を利用することにより、一部の方向パターンの位置が検索できない場合でも、その位置を推測して以後のデコード処理に利用することができる。
【０１１０】
すなわち、例えば点Ｐ３の画像中の位置がわからない場合、点Ｐ３だけでなく点Ｐ６についての位置定数も求めることができないが、点Ｐ１，点Ｐ２，点Ｏの情報及び点Ｐ４，点Ｐ５，点Ｏの情報をもとにそれぞれこれらの点の画像中の位置を導出することができる。そして、得られた２つの値の平均を点Ｌ３や点Ｌ６の位置情報として採用し、これをもとに点Ｐ３や点Ｐ６の位置定数を計算すれば、以後のデコード処理を行うことができる。
【０１１１】
また、図１５（ａ）に示した六角形の２本以上の対角線にまたがって位置を検索できない方向パターンがあり、例えば点Ｐ５と点Ｐ６の画像中の位置がわからない場合には、上記の方法も適用することができない。しかし、例えば点Ｐ１，点Ｐ２，点Ｐ３の画像中の位置がわかれば、四角形ＯＰ１Ｐ２Ｐ３は平行四辺形であることから、第１の実施形態で説明した手法を用い、式（１７），（１８）によってその対角線の交点を参照点とする各頂点の位置定数を求めることができる。そして、この値を利用して、上述の式（２３）乃至式（２５）により順次他の各基準点の位置定数及び画像中の位置を導出し、以後のデコード処理に使用することができる。例えば、点Ｐ４は、点Ｐ２，点Ｐ３，点Ｏを３頂点とする平行四辺形の残り１つの頂点に当たるので、その位置定数及び画像中の位置を、点Ｐ２，点Ｐ３，点Ｏの位置定数及び画像中の位置から導出することができる。
【０１１２】
なお、このように、第１の実施形態の手法と第２の実施形態の手法を組み合わせることにより、読み取り対象が少なくとも平行四辺形の４頂点を構成する位置に配置された基準点を有する場合に、任意の領域に配置した格子点の位置定数及び画像中の位置を導出することができる。すなわち、読み取り対象中に図２２（ａ）に示すような平行四辺形ＡＢＣＤの各頂点に位置する基準点が存在し、その画像中の位置が決定できるとすると、第１の実施形態で説明した手法を用い、式（１７），（１８）によって点Ｏを参照点とする各頂点の位置定数を求めることができる。
【０１１３】
そして、これらの点の位置定数及び画像中の位置の情報から、第２の実施形態で説明した手法を用い、式（２３）乃至（２４）により、図２２（ｂ）乃至（ｆ）に示すように、点Ｅ，Ｆ，Ｇ，Ｈ，Ｉの位置定数及び画像中の位置を順次導出することができる。もちろん、他の方向に格子点を設けた場合でも、同様に位置定数及び画像中の位置を導出することができる。
その後、必要に応じて、数１６乃至数１８を利用して平行四辺形の各辺の中点の位置定数及び画像中の位置を決定することにより、（ｇ）に示すようにより細かい格子を形成する各格子点の画像中の位置を得ることができる。
【０１１４】
従って、上述の手法を用いることにより、読み取り対象中の任意の領域に適切な細かさの格子を構成する格子点について、その画像中の位置を、単純な四則演算及び距離計算の繰り返しにより導出することができる。そして、これを利用することにより、読み取り対象が傾いた状態で撮像された場合でも、少ない計算量で正確に画像を解析できる光学的情報読取装置を構成することが可能であり、傾きに伴うずれの補正を広汎な対象について行うことができる。
なお、この場合において、格子点によって構成される格子は、基準点が構成する平行四辺形のと相似な形状となる。従って、基準点が長方形、ひし形、正方形の頂点に配置されている場合には、格子もその形状となる。また、格子の形状を三角形とすることもできるものとする。
【産業上の利用可能性】
【０１１５】
以上の説明から明らかなように、この発明の光学的情報読取装置及び画像データ解析方法によれば、読み取り対象の情報を撮像した画像を解析する場合において、特にマキシコードが読み取り対象である場合に、少ない計算量で正確に画像を解析可能とすることができる。従って、これらを利用することにより、マキシコードの高速な読み取りが可能な光学的情報読取装置を構成できるし、処理速度の遅い安価なプロセッサを用いて光学的情報読取装置を構成し、コストダウンを図ることもできる。
【図面の簡単な説明】
【０１１６】
【図１】この発明の光学的情報読取装置の第１の実施形態であるコードスキャナの構成を示すブロック図である。
【図２】図１に示したＣＭＯＳイメージセンサの構成をより詳細に示すブロック図である。
【図３】イメージエリアに対して傾いた物体面に貼付したコード記号を撮像する場合の、これらの位置関係を模式的に示す図である。
【図４】この発明における画像処理に用いる基本的な考え方について説明するための図である。
【図５】同じく基本的な考え方について説明するための別の図である。
【図６】同じくさらに別の図である。
【図７】同じくさらに別の図である。
【図８】図１に示したコードスキャナによる読み取り対象となるコード記号面及びこれを撮像して得た画像の形状の例を示す図である。
【図９】図８に示したコード記号面上に設ける格子点及びその画像中の位置について説明するための図である。
【図１０】同じくさらに細かい格子点について説明するための図である。
【０１１７】
【図１１】図１に示したコードスキャナが読み取った二次元コードのデコードを行う際に実行する処理を示すフローチャートである。
【図１２】この発明の第２の実施形態のコードスキャナにおける画像処理に用いる基本的な考え方について説明するための図である。
【図１３】この発明の第２の実施形態のコードスキャナが読み取ったマキシコードのデコードを行う処理を示すフローチャートである。
【図１４】図１３のステップＳ１０４の処理をより詳細に示すフローチャートである。
【図１５】図１４のステップＳ２０１の処理について説明するための図である。
【図１６】図１４のステップＳ２０３の処理について説明するための図である。
【図１７】この発明の第２の実施形態においてマキシコードのコード記号面上に設ける格子点の例を示す図である。
【図１８】図１３のステップＳ１０５の処理をより詳細に示すフローチャートである。
【図１９】図１８のステップＳ３０１の処理について説明するための図である。
【図２０】図１８のステップＳ３０２及びＳ３０５の処理をより詳細に示すフローチャートである。
【０１１８】
【図２１】図２０に示した処理について説明するための図である。
【図２２】この発明の各実施形態において説明した手法を利用した格子点の取り方について説明するための図である。
【図２３】ＰＤＦ４１７形式のコード記号の例を示す図である。
【図２４】マキシコードのコード記号の例を示す図である。
【図２５】イメージエリアに対して傾いた状態で撮像されたコード記号の画像の例を示す図である。
【符号の説明】
【０１１９】
１：スキャナ              ２：ホストコンピュータ
３：コード記号面          １０：光学ヘッド
１１：レンズ          １２：ＣＭＯＳイメージセンサ
１３：ガイド用ＬＥＤ      １４：照明用ＬＥＤ
２１：イメージエリア      ２２：ＣＤＳ回路
２３：ＡＧＣ回路          ２４：Ａ／Ｄ変換回路
２５：タイミングジェネレータ
２６：コマンド・デコーダ回路
２７：基準電圧回路        ３０：デコーダ
３１：ＣＰＵ              ３２：ＦＰＧＡ
３３：ＲＡＭ              ３４：通信Ｉ／Ｆ
【図１】
2005157677.tif 000026
【図２】
2005157677.tif 000027
【図３】
2005157677.tif 000028
【図４】
2005157677.tif 000029
【図５】
2005157677.tif 000030
【図６】
2005157677.tif 000031
【図７】
2005157677.tif 000032
【図８】
2005157677.tif 000033
【図９】
2005157677.tif 000034
【図１０】
2005157677.tif 000035
【図１１】
2005157677.tif 000036
【図１２】
2005157677.tif 000037
【図１３】
2005157677.tif 000038
【図１４】
2005157677.tif 000039
【図１５】
2005157677.tif 000040
【図１６】
2005157677.tif 000041
【図１７】
2005157677.tif 000042
【図１８】
2005157677.tif 000043
【図１９】
2005157677.tif 000044
【図２０】
2005157677.tif 000045
【図２１】
2005157677.tif 000046
【図２２】
2005157677.tif 000047
【図２３】
2005157677.tif 000048
【図２４】
2005157677.tif 000049
【図２５】
2005157677.tif 000050