(57)【特許請求の範囲】
【請求項１】
再生されるべき情報のデータに相当するデータコードを含むブロックを複数個配置したコードが光学的に読み取り可能に記録された情報記録媒体から、前記コードを光学的に読み取って前記情報を再生する情報再生システムにおいて、
前記コードを撮像する画像入力手段と、
前記画像入力手段で撮像された画像から前記データを読み取るデータ読み取り手段と、
前記データ読み取り手段で読み取られたデータから前記情報を再生する再生手段と、
を具備し、
前記データ読み取り手段は、前記画像入力手段で撮像された画像における複数個の前記ブロックの中から光学的ディストーションの影響が小さいブロックを選択して読み取るように構成されたことを特徴とする情報再生システム。
【請求項２】
前記データ読み取り手段は、前記画像入力手段で撮像された画像の中央よりのブロックを選択して読み取るように構成されたことを特徴とする請求項１に記載の情報再生システム。
【請求項３】
前記コードは、同じデータ内容を有する前記ブロックを複数個含んで構成され、前記画像入力手段で撮像される一つのフレームに、前記同じデータ内容を有するブロックが複数個含まれるとき、
前記データ読み取り手段は、前記同じデータ内容を有する複数個のブロックの中から光学的ディストーションの影響が小さいブロックを選択して読み取るように構成されたことを特徴とする請求項１又は２に記載の情報再生システム。
【請求項４】
前記データコードは、前記ブロックのアドレスを示すアドレスドットを更に含み、前記同じデータ内容を有するブロックは、前記ブロックのアドレスも同じであることを特徴とする請求項３に記載の情報再生システム。
【請求項５】
前記画像入力手段は、手動でスキャンされる前記コードを連続して撮像するように構成されたことを特徴とする請求項１乃至４の何れかに記載の情報再生システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、音声，音楽等のオーディオ情報、カメラ，ビデオ機器等から得られる映像情報、及びパーソナルコンピュータ，ワードプロセッサ等から得られるディジタルコードデータ、等を含めた所謂マルチメディア情報を光学的に読み取り可能な２次元コードパターンとして記録した紙等の情報記録媒体から、上記コードパターンを光学的に読み取って元のマルチメディア情報を再生する情報再生システムに関する。
【０００２】
【従来の技術】
従来より、音声や音楽等を記録する媒体として、磁気テープや光ディスク等、種々のものが知られている。しかしこれらの媒体は、大量に複製を作ったとしても単価はある程度高価なものとなり、またその保管にも多大な場所を必要としていた。さらには、音声を記録した媒体を、遠隔地にいる別の者に渡す必要ができた場合には、郵送するにしても、また直に持っていくにしても、手間と時間がかかるという問題もあった。また、オーディオ情報以外の、カメラ，ビデオ機器等から得られる映像情報、及びパーソナルコンピュータ，ワードプロセッサ等から得られるディジタルコードデータ、等をも含めた所謂マルチメディア情報全体に関しても同様であった。
【０００３】
このような問題に対処するべきものとして、特開平６−２３１４６６号公報には、オーディオ情報，映像情報，ディジタルコードデータの少なくとも一つを含むマルチメディア情報を、ファクシミリ伝送が可能で、また大量の複製が安価に可能な画像情報即ち符号化情報としての複数のドットを２次元に配置してなる２次元コードの形で紙等の情報記録媒体に記録するシステム及びそれを再生するためのシステムが開示されている。
【０００４】
この公報の情報再生システムでは、情報記録媒体上の２次元コードを光学的に読み取って再生する情報再生装置を、手で保持し、記録されている２次元コードに沿って記録媒体上を手動で走査することによって読み取る方法が開示されている。
【０００５】
【発明が解決しようとする課題】
ところで、２次元コードパターン自体もさらに記録密度を向上できるような構造が研究されている段階であり、さらに高密度記録が達成されることが期待されている。
【０００６】
しかしながら、上記公報には、そのような将来のより高密度記録されたコードパターンの読み取りについては、まだ十分な配慮がなされていない。
【０００７】
本発明は、高密度記録されたコードパターンを読み取って、正しく情報を再生できる情報再生システムを提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記の目的を達成するために、本発明による情報再生システムは、再生されるべき情報のデータに相当するデータコードを含むブロックを複数個配置したコードが光学的に読み取り可能に記録された情報記録媒体から、上記コードを光学的に読み取って上記情報を再生する情報再生システムであって、
上記コードを撮像する画像入力手段と、
上記画像入力手段で撮像された画像から上記データを読み取るデータ読み取り手段と、
上記データ読み取り手段で読み取られたデータから上記情報を再生する再生手段と、
を具備し、
上記データ読み取り手段は、上記画像入力手段で撮像された画像における複数個の上記ブロックの中から光学的ディストーションの影響が小さいブロックを選択して読み取るように構成されたことを特徴とする。
【０００９】
即ち、コードを撮像した画像は、光学的ディストーションにより歪んだものとなるが、この歪みによる影響は、コードが高密度になればなるほど大きくなり、データコードの読み取りエラーの可能性を大きくする。そこで、本発明の情報再生システムによれば、撮像された画像における複数個のブロックの中から光学的ディストーションの影響が小さいブロックを選択して読み取るようにしている。従って、読み取りエラーが発生する確率を低くすることができる。
【００１０】
【発明の実施の形態】
以下、図面を参照して、本発明の実施の形態を説明する。
【００１１】
図１の（Ａ）乃至（Ｃ）は、情報記録媒体上に光学的に読み取り可能に記録される２次元コード（ドットコード）の例を示す図である。
【００１２】
即ち、図１の（Ａ）に示すように、ドットコードは、データコード１０と、パターンコード１２とからなる。データコード１０は、実際のマルチメディア情報に相当する内容を示している。また、パターンコード１２は、データコード１０の読み取り基準点を決定するためのもので、パターンドット１４とマーカ１６とからなる。なおここで、パターンドット１４とは、パターンコード１２を構成するマーカ以外の１つ又は複数のドット群の個々のドットのことである。
【００１３】
ここで、データコード１０を構成するドット（以下、データドットと称す）は非常に高密度（例えばＣＣＤ等の撮像装置の解像限界近傍）で記録されているため、このデータコード１０を正しく再生するためには、正確に各データドットを読み取らなくてはならない、つまり読み取り位置を正確に検出しなければならない。そこで、正確にＣＣＤの画素とそのデータドットの相対位置関係を知るために、データコード１０に関して予め決められた位置に配置され、予め決められたドットパターン（図では、黒を１、白を０とすれば、１０１０１）を持つ、データドットに比べて若干大きなパターンドット１４を使用している。しかしながら、このパターンドット１４を何もないところから見つけることは難しいため、このパターンドット１４に関して予め決められた位置に配置された、非常に大きなマーカ１６を設けている。この例では、マーカ１６は円形のものであり、その直径が（マーカ１６）＞（パターンドット１４）＞（データドット）という大きさ関係となっている。
【００１４】
勿論、パターンドット１４は、図１の（Ｂ）に示すように、データドットと同様の大きさや形状で記録されていても良い。また、マーカ１６も、例えば同図に示す矢印形状のように、パターンドット１４やデータドットとは別の特殊な形あるいは色や大きさで記録されていれば良い。
【００１５】
また、図１の（Ｃ）に示すように、矩形の領域内にデータコード１０を配し、その上下にパターンコード１２を配置すると共に、両脇にアドレスドット１８を配置して、ブロック化し、このようなブロックをマトリクス状に配置して２次元コードを構成するようにしても良い。ここで、パターンドット１４は、例えば、黒ドットを１、白ドットを０で表せば、「１００１００１００１００１００００１００１００１００１００１」という３０ドットのものとなる。また、アドレスドット１８は、例えば、「１＊＊＊＊＊＊＊＊＊＊＃＃＃＃＃＃＃＃＃＃０」という２２ドットで構成される。なお、「＊」は１又は０を表し、この１０個分でアドレスを示すものとし、また、「＃」は１又は０を表し、この１０個分でアドレスのエラー訂正符号を示すものとする。
【００１６】
このように、再生されるべきマルチメディア情報の内容に相当するデータコード１０と、その読み取り基準点を決定するためのパターンコード１２とからなるドットコードの記録される情報記録媒体において、上記パターンコード１２を、データコード１０に関して予め決められた位置に配置されたパターンドット１４と、このパターンドット１４に関して予め決められた位置に配置された、上記パターンドット１４を検出するために利用されるマーカ１６とから構成するようにしているので、パターンドット１４がデータコード１０を形成するデータドットと同様のものでもマーカ１６に基づいて検出することができるようになり、この検出されたパターンドット１４から正確に読み取り基準点を求められるようになる。
【００１７】
なお、図１の（Ｃ）に示したようにブロック化した場合、上記マーカ１６はブロックの４隅に配置されていなくとも良く、例えば、図２の（Ａ）乃至（Ｅ）に示すように、マーカ１６を配置することができる。
【００１８】
即ち、図２の（Ａ）は、矩形のブロック２０の各辺上にマーカ１６を配置したものである。
【００１９】
図２の（Ｂ）は、ブロック２０が複数段に整列されて並んでいる場合、その一番上の段にだけ、マーカ１６を配置した例である。
【００２０】
図２の（Ｃ）は、ブロック２０が複数段に整列しているときに、一部省略してマーカ１６を記録した例を示している。
【００２１】
図２の（Ｄ）は、マーカ１６を正方形で記録した場合である。このように、マーカ１６の形状が円形でない場合にも、図２の（Ａ）乃至（Ｃ）に示したように、種々のマーカ配置を採ることができる。
【００２２】
なお、好ましくは、マーカ１６は、以下の理由から円形であるほうが良い。即ち、マーカ１６の形状を円形にすると、ドットコードとＣＣＤ等の撮像素子（カメラ）の回転（スキュー）によって変形がないので、例えスキューした場合であっても、マーカ１６を容易に抽出することができるからである。しかし、スキューがある程度の範囲内である場合、例えば、カメラとドットコードの相対的な関係が規定されるような状態で撮像するような場合であれば、マーカ１６は四角形や六角形等の他の形状でも構わない。逆に、このような非等方性の形状にすると、一つのマーカ１６が検出されれば、その形状を見るだけで、スキュー角が、つまりどちらの方にどの位傾いているかを求めることができるという利点もある。
【００２３】
図２の（Ｅ）は、ブロック２０を六角形の形状にし、マーカ１６をその３個の頂点に配置した例を示している。このように、ブロックの形状としては、矩形に限定されるものではない。
【００２４】
このように、複数のドットでなる上記データコード１０を所定の領域に配置したブロックを複数個２次元に配置してドットコードを構成すると共に、マーカ１６を、各ブロックの相対的位置関係が判るように、各ブロックの一部に配置しているので、これらマーカ１６によってブロック境界の抽出が容易となる。
【００２５】
また、詳細は後述するようにしてマーカ対から外挿でマーカ１６の概中心を求めることができるので、ブロックの４隅全てにマーカ１６は必要ではなく、従って、図２の（Ｂ）や（Ｃ）に示すように、一部省略することができる。この場合、この省略した位置には、点だけ又は全く何も無いようにする。
【００２６】
図３の（Ａ）及び（Ｂ）は、省略した位置に点２２を記録した例である。この例では、第１方向に隣接するブロック間で異なる対辺をなす頂点で、且つ、第２方向に隣接するブロック間で同一の対辺をなす頂点にマーカ１６を配置している。要するに、図において横方向に隣接する方向に対しては上側のマーカを記録し、一方、下方向に隣接するときには下側のマーカを記録し、その下に隣接するときは上側のマーカを記録する、というように交互に記録する、つまり縞状にマーカ１６を記録（もしくは省略）している。
【００２７】
このように、第１方向に隣接する矩形ブロック間で異なる対辺をなす頂点であり且つこの第１方向に直交する第２方向に隣接するブロック間で同一の対辺をなす頂点に、マーカ１６を配置する、つまり縞状に配置することで、ブロック２０の４隅にマーカ１６を配置する場合に比べて、大きな面積を必要とするマーカ１６が半分で済み、その省略されたマーカ位置にもデータドットを配置することができ、その分、記録容量を増大できるようになる。
【００２８】
また、図４は、マーカ１６を市松状に配置（もしくは省略）した場合の例である。
【００２９】
このようにマーカ１６を、隣接するブロック間で異なる対角をなす頂点に配置（つまり、市松状に配置）すれば、矩形状のブロックの４隅にマーカを配置する場合に比べて、大きな面積を必要とするマーカが半分で済み、その省略されたマーカ位置にもデータドットを配置することができ、その分、記録容量を増大できるようになる。また、１ライン上に少なくとも１組のマーカ１６が必ず検出できるため、前述したようにマーカを縞状に配置する場合に比べて、歪に強いという効果もある。
【００３０】
次に、パターンドット１４につき説明する。
【００３１】
このパターンドット１４としては、例えば、図５の（Ａ）に示すように、黒ドットを１、白ドットを０で表せば、「１０１０１０１０１００１０１０１０１０１」というように、隣り合う黒ドットが互いに分離可能となるように配置される必要がある。即ち、黒ドットが離隔して配置されるようにする。勿論、黒ドットと白ドットを交互に記録しなくとも、黒ドットと黒ドットの間にスペースがあれば構わない。同様に、データドットとパターンドットの間にも黒ドットが離隔して配置されるようにスペースを設ける。
【００３２】
これは、パターンドット１４を構成する黒ドットが例えば２個隣接してしまうと、詳細は後述するようなパターンドット１４による読み取り基準点の決定処理において、２個の黒ドットを１個の黒ドットであるかのように検出してしまい、誤りの元になるということによる。即ち、読み取り基準点の決定処理においては、パターンドット１４は黒ドット１つずつについてそのドットの中心座標を求め、それを利用して読み取り基準点を決定しているので、このパターンドット１４は各ドットの中心点位置が求められる必要があり、黒ドットが２個隣接してしまうと、正しいドットの中心位置が求められなくなる。
【００３３】
つまり、このようにパターンドットのフォーマットとして、隣り合うドットが互いに分離可能となるように配置したものとすることにより、重心や外接矩形の中心など比較的簡単な計算によりパターンドットを構成する各ドットの中心が正確に求められるようになる。また、パターンコード上に情報（アドレス情報、ヘッダ情報）を記録しても、黒ドットが連結して分離できなくなることがない。
【００３４】
また、「１」「１」のような並びが出現しないように、何らかの変調をかけてやることによって、ドット記録位置が隣接して配置されていても、パターンドット１４の中に、例えばアドレス情報やヘッダ情報のようになにかデータを重畳記録することもできる。
【００３５】
例えば、図６の（Ａ）に示すような、４ビット／６ビット変調をかければ良い。なお、この場合、入力信号０（つまり００００）は、０（つまり００００００）に変換するのではなく、３６（つまり１００１００）に変換している。これは、黒ドットが少なくとも１個はなければ、パターンドットとしての意味をなさないという理由による。
【００３６】
このように、ドットコードを隣り合うドットが互いに分離可能となるように変調したコードとして記録することにより、パターンコード上に情報（アドレス情報、ヘッダ情報）を記録したとしても、黒ドットが連結して分離できなくなることをなくすことができる。
【００３７】
また、パターンドット１４のフォーマットとしては、その他、種々の態様が考えられるが、読み取り基準点の位置が推定できる位置関係もしくは構造を有している特殊なコードである必要がある。そのような特殊なコードとすれば、それを使って容易にその読み取り基準点を推定できる。
【００３８】
例えば、図６の（Ｂ）に示すように、直線状のパターンドット１４つまりパターンラインとしても良い。直線検出アルゴリズムとしては、画像処理において良く知られているような、直線をθ，ρのパラメータで表し、θ−ρ平面でカウントを行って直線を求める方法（直線検出アルゴリズム、例えばハフ変換）を用いることができ、この方法を用いて抽出された直線の交点を読み取り基準点とすることができる。
【００３９】
あるいは、図５の（Ｂ）に示すように、パターンドット１４として、少なくとも一部のパターンドットの記録点に位相ずれを設けたものとしても良い。このような位相ずれを設けることで、パターンドット１４の検出条件が厳しくなるので、読み取り基準点推定精度を向上することができる。
【００４０】
即ち、本来、パターンドット１４やデータコード１０のドットの記録位置というのはほぼ格子上に配置されるものであるが、あえてパターンドット１４の場合は、この格子点から少しずらしてやる。これを位相ずれと呼ぶものとする。
【００４１】
例えば、図７の（Ａ）において、（１）は等ピッチ配列の場合であり、ドット内いずれの点で読み込んでも検出できるが、（２）の非等ピッチ配列の場合には、ドットをこの等ピッチ点で読み取ると、同図中の斜線部内に読み取り点がない限りは検出できないことになる。従って、全てのドットを検出することのできる読み取り基準点の存在範囲は、位相ずれを設けない場合に比べて狭くなり、読み取り基準点の推定精度を向上することができる。
【００４２】
また、このように位相ずれを設けることで、未検出ドットの位置やその偏りから、読み取り基準点位置のずれを推定することができるようになる。
【００４３】
例えば、位相ずれを設けてある場合、あるドットは検出できなかったが他のドットは検出できたという場合には、その検出できなかったドットがどのような位相ずれを持つものかは予め設定されたフォーマット情報より知ることができるので、それがどのような位相ずれを持つかにより、読み取り基準点位置のずれている方向を推定することができる。
【００４４】
また、図７の（Ｂ）に示すように、パターンコード１２として、各マーカ１６間に、データコード１０の読み取り基準点検出用のパターンドット１４と、このパターンドット１４の通常のドットよりサイズが小さく且つパターンドット１４のドット位置基準点２４に対して上下左右の位相ずれを付加したガイドコード２６を設けるようにしても良い。
【００４５】
このようなパターンコード１２とした場合には、パターンドット１４が読み取れた後、マーカ１６の中心から上下１ドットずらした点同士を結んでガイドコード２６が読み取れるように中心位置を近傍で移動させる。こうすることにより、パターンドット１４の読み取り条件を厳しくすることなく、ガイドコード２６の読み取り条件の厳しさから、読み取り基準点（この場合、マーカ中心位置）の推定精度を向上することができる。
【００４６】
このように、少なくとも一部のパターンドットの径を小さく記録することにより、同じスペースに多くのパターンドットが記録でき、パターンドットの記録密度を上げることができる。また、パターンドットの検出条件がより厳しくなることで、読み取り基準点の推定精度を上げることができる。
【００４７】
また、図５の（Ｂ）及び（Ｃ）に示すように、パターンドット１４の中央よりの一部のドット１４Ｂの径を大きく記録するようにしても良い。
【００４８】
即ち、後述するようなマーカ対の概中心を結ぶ線上でパターンドット１４を検出する場合に、最も検出されにくい中央よりのドット１４Ｂを予め大きく記録しておくことにより、パターンドット１４を見失うことをなくすことができ、また、中央よりのドット１４Ｂを先に検出して、他のドットを粗検索することもできるようになる。
【００４９】
次に、アドレスドット１８について説明する。
【００５０】
アドレスドット１８は、例えば図８の（Ａ）及び（Ｂ）に示すように、パターンドット１４と直交する方向にマーカ１６間に設けられ、当該ブロック２０のアドレスを示す。
【００５１】
このようなアドレスドット１８を設けることにより、ブロックが順番に読み込まれない場合にも、読み込んだブロックをこのアドレスドット１８で示されるアドレス順に並び代えることで、正しく再生されるようになる。
【００５２】
また、図８の（Ｃ）に示すように、このアドレスドット１８の両脇に、このアドレスドット１８を反転した反転コード２８を記録しておくようにすれば、これを使って、エラー訂正や読み取り位置の補正を行うことができるようになる。
【００５３】
あるいは、図８の（Ｄ）に示すように、アドレスドット１８の両脇に、エラー訂正用の訂正コード３０を設けることにより、アドレスのエラー訂正を行うこともできる。つまり、アドレスドット１８に加えて、この訂正コード３０を読み取ることによって、アドレスの誤り訂正を行える。
【００５４】
また、アドレスドット１８の一部、例えば図９の（Ａ）に示すように、真ん中に、どのようなアドレスの場合であっても常に黒ドットつまり「１」である固定パターン３２を設けるようにしても良い。このようにすると、この固定パターン３２の黒ドットを読み取ることで、位置のずれ検出やエラーの検出に利用することができる。
【００５５】
あるいは、固定パターン３２を、図９の（Ｂ）に示すように、両端に設けても良い。この場合は、固定パターン３２としては、アドレスドット１８の一端側を黒ドット、他端側を白ドットとしておくことにより、このアドレスドット１８の読み取り方向を特定できるようになるので、たとえこのドットコードが上下逆さまにされて読み取られたとしても、正確にアドレスを読み取ることができるようになる。
【００５６】
このように、アドレスドット１８の少なくとも一部に固定パターン３２を含めるようにすれば、この固定パターン３２を利用して、位置合わせやエラー検出を行うことができ、あるいは、アドレスドット１８の読み取り方向を特定できるようになる。
【００５７】
なお、ブロック２０がアドレス順に整列して記録されている場合、あるブロックのアドレスは周囲のブロックのアドレスから容易に推定することができるので、アドレスドット１８を適宜省略することも可能である。
【００５８】
例えば、図９の（Ｃ）に示すように、ブロック２０が整列して順番にアドレスが付られている場合、第１ブロックと第３ブロックのアドレスが検出できれば、その間のブロックのアドレスは第２ブロックであると容易に推定することができる。従って、この第２ブロックのアドレスは記録せずとも良く、そこにもデータコード１０を記録できるので、その分、記録容量を増加させることができる。
【００５９】
なお、隣接するブロック間のアドレス関係が、例えば「＋１０」のように予め設定されていれば、この図のようにブロックアドレスが順番に並んでいなくても良い。
【００６０】
このように、アドレスドット１８を、少なくとも２つ以上のブロックのアドレスを同時に決定できるように適宜省略して記録すれば、この省略した部分にもデータコード１０を記録できるので、その分、記録容量を増大させることが可能になる。
【００６１】
次に、以上説明したようなドットコードを光学的に読み取って元のマルチメディア情報を再生する情報再生システムについて説明する。
【００６２】
図１０は、その構成を示す図である。
【００６３】
即ち、紙などの情報記録媒体３４上に記録されたドットコード３６は、画像入力部３８で撮像される。データ読み取り基準点決定部４０は、この画像入力部３８で撮像された画像から、データコード１０を読み取るための読み取り基準点を決定する。データ読み取り部４２は、このデータ読み取り基準点決定部４０によって決定された読み取り基準点に基づいて、画像入力部３８で得られた画像からデータコード１０を読み取る。データ再生部４４は、このデータ読み取り部４２によって読み取られたデータを再生する。
【００６４】
このような構成にすることで、ドットコードが高速且つ正確に読み取ることができるようになる。
【００６５】
なお、上記再生部４４は、読み取ったデータを必要に応じて復調やエラー訂正を行って再生するということも含む。ここで再生とは、画像であればモニタへの映像出力、音声であればスピーカへの音声出力のことであり、もし圧縮されている信号であれば、復号処理を施してから出力する。例えば、エラー訂正にリードソロモン３重積符号を用いれば、データは８−１０変調されているので、１０−８変調（８−１０逆変調）を行うことになる。
【００６６】
一方、上記画像入力部３８は、ＣＣＤカメラ等の撮像部４６と、この撮像部４６の出力画像を等化並びに２値化する等化，２値化部４８とを含む。即ち、この画像入力部３８において、ドットコード３６を撮像して得られた画像を２値化し、以降のデータ読み取り基準点決定部４０からは、この２値化されたデータについてだけ処理を行うようにすることで、画像を保持しておくための不図示メモリを少なくすることができると共に、データ転送量も少なくなり、高速処理が可能になる。
【００６７】
また、このような２値化したデータとすれば、データ読み取り基準点決定部４０以降をパーソナルコンピュータ等の情報処理装置で構成することも可能になる。さらに、こうした場合、画像入力部３８だけを収容する筐体が小さなもので済むため、操作者が走査を行う時に負担が小さくなる。
【００６８】
一方、上記データ読み取り基準点決定部４０は、例えば、パターンドット１４の中点を読み取り基準点として検出するものであっても良いが、本実施の形態では、マーカ１６の中心位置を読み取り基準点として決定するようにしている。
【００６９】
即ち、このデータ読み取り基準点決定部４０は、上記等化，２値化部４８で２値化された画像データからマーカ１６の存在するマーカ存在エリアを検出するマーカ抽出部５０及びこの検出されたマーカ存在エリア中のマーカ１６の概中心を求めるマーカ概中心算出部５２よりなるマーカ検出部５４と、このマーカ検出部５４で求められたマーカ１６の概中心を用いて上記パターンドット１４を検出し、この検出したパターンドット１４によりデータコード１０及びアドレスドット１８の読み取り基準点としてのマーカ１６の真の中心座標を推定するマーカ中心検出部５６とからなる。
【００７０】
上記マーカ検出部５４のマーカ抽出部５０は、イロージョン処理並びにラベリング処理を行って、マーカ存在エリアを検出する。
【００７１】
ここで、イロージョン処理自体は、画像処理で知られた処理であり、その処理を実行するためのハードウェアも種々存在しているものである。このイロージョン処理とは、注目画素に対して所定の大きさのマスク、例えば図１１の（Ａ）に示すような３×３画素分のマスクを掛けたときに、図１１の（Ｂ）に示すようにマスク内の画素が全て黒画素（○で示す）であれば注目画素は黒画素に、また図１１の（Ｃ）や（Ｄ）に示すようにマスク内で１つでも白画素（×で示す）であれば注目画素は白画素に変換していく処理である。
【００７２】
このようなイロージョン処理をドットコード３６に対して行うと、図１２に示すように、小さなドットで構成されるデータコード１０やパターンドット１４、アドレスドット１８は消えてしまい、これらのドットに比べて非常に大きなマーカ１６に相当する画素のみを残すことができる。
【００７３】
そして、残った画素をまとまり毎に順次ラベリングし、同一のラベルがふられている存在領域を求める。この存在領域にイロージョンによって縮退した分を拡大してマーカ存在エリア５８となる。
【００７４】
マーカ概中心算出部５２は、各マーカ存在エリア５８毎の黒画素の重心を算出し、これをマーカ概中心として、パターンドット１４の読み取りの際の基準点とする。
【００７５】
このように、イロージョン処理とラベリング処理とを行うことにより、既存のハードウェアを利用して簡単にマーカ１６を検出でき、また、マーカ１６付近のノイズの影響を受けにくくすることができる。
【００７６】
また、上記マーカ抽出部５０としては、前述したようなイロージョンや画像処理において知られているストリーク等の計算を必要とする処理を行わずにマーカ存在エリア５８を求めることも可能である。
【００７７】
例えば、図１３の（Ａ）に示すようなフレーム画像を考えると、撮像部４６の不図示光学系の特性によりＬＰＦがかかった状態で撮像されるため、図１３の（Ｂ）に示すように、マーカ１６のように黒画素が集まった部分では黒レベルが低く検出される。そこで、フレーム６０の少なくとも１つ以上のマーカを含む領域をスキャンしながら輝度の最小値を求め、その値にオフセット（１５〜２０程度）をかけた値を閾値ｔｈとして、フレーム画像を２値化すると、図１３の（Ｃ）に示すようにマーカ中心部６２が容易に抽出できる。
【００７８】
即ち、マーカ１６は大きいため、画像として取り込んだ場合に、中心部の輝度値はかなり低い値をとる。これに対して、データコード１０のドットやパターンドット１４は、光学系により若干のボケがあるために、その回りの白情報が重畳されて、少し薄くなる。従って、図１３の（Ｂ）に示すような輝度プロファイルが得られるので、所定の閾値ｔｈで２値化することで、マーカ１６の中心部分だけを抽出できる。
【００７９】
このように、少なくともフレーム６０の一部について輝度の最小値を求め、これに所定のオフセットを加えた閾値を用いて２値化することにより、イロージョンやストリーク等の計算を必要とせずにマーカ中心部６２を検出することができる。
【００８０】
また、この場合、ローパスフィルタを掛けた後、この処理を行うようにすれば、さらにマーカ中心部６２の検出が容易になる。即ち、図１３の（Ａ）に示すようなフレーム画像にローパスフィルタを掛けると、データドット等の小さなドットがさらにボケて薄くなり、大きなマーカ１６の中心部のみが残るようになる。
【００８１】
このように、ローパスフィルタを掛けることによって、マーカ１６がデータコード１０のデータドットやパターンドット１４のような他のドットよりも大きいドットで記録されている場合、マーカ中心部６２の検出がより確実に行える。
【００８２】
また、画像処理分野で既知の技術であるストリーク処理と互いに接するストリークの数で中心算出範囲を求めるようにしても良い。
【００８３】
即ち、フレーム毎に、図１４の（Ａ）に示すように、ストリーク（黒ランの連続数つまり黒画素の続いている数とその始点を求める）を行い、互いに接するストリーク（図の例では、ストリークＳ１〜Ｓ７）をひとまとめにする。そして、まとめられたストリークは属性データをコピーする。ここで、属性データとは、そのストリーク及びそれに接するストリークの上端と左右端の座標と、接したストリークの数のことである。そして、接するストリークが下方に存在しなくなった時に、それまでに接したストリークの数から、高さ方向の範囲を求める。
【００８４】
このようにして、黒画素の始点とそこからの長さというデータに分解すると、データドット等の小さなドットは短いストリークデータしかとらないため、ある程度の大きさの塊で接しているストリークだけがマーカ１６であると判定できる。
【００８５】
従って、互いに接するストリークを一纏めにしてから、この纏めたストリークにおいてそれぞれ属性、即ち、始点と長さ（終点）の座標をそれぞれ下のストリークにコピーしていく。なお、接しているストリークがあると、下側のストリークは上側の属性をコピーするので上側の属性の始点と終点をコピーすることになる。こうして、左端、右端、上端、下端をコピーしていく。
【００８６】
例えば、一番上側の小さなストリークＳ１は、下側のストリークＳ２に対してこの一番上のデータつまり上辺だけをコピーしてやり、下側のストリークＳ２は、左端と右端のデータを持つ。すると、最終的に一番下側のストリークＳ７まで処理を終わると、この一番下のストリークデータＳ７が持っている属性は、一番長いストリークＳ４の左端と右端と、一番上のストリークＳ１と一番下ストリークＳ７の属性が記録されていることになるので、この属性より、マーカ１６の存在エリアが求められる。
【００８７】
このように、ストリーク処理と互いに接するストリークの数で中心算出範囲を求めるようにすれば、イロージョン処理のように計算量の多い処理を行う必要がないため、処理が簡単になる。また、マーカ１６内のスポット的な傷に強くなるという効果も有する。
【００８８】
また、フレーム内すべてに対して上記のようなマーカ抽出処理を行わなくても、すべてのマーカを抽出することが可能である。
【００８９】
即ち、図１４の（Ｂ）に示すように、フレーム６０内に９個のマーカ１６（Ｍ１〜Ｍ９）がある場合を考えると、まず、マーカ１６をフレームの中でラスタスキャンしていき、上記のようないずれかのマーカ抽出処理によってマーカ１６を探し出す。こうしてマーカＭ１が見つかると、そのマーカＭ１に相対的に隣接するマーカＭ２，Ｍ４は、そのマーカＭ１からどの位の距離だけ離れているという情報が先見情報として与えられている場合、そのマーカＭ１からさらにラスタスキャンしていって次のマーカＭ２，Ｍ４を細かく捜す必要はなく、スキューの可能性を加味してその先見情報に従って決められるマーカの存在する可能性のある領域６４に飛んで、その領域６４内でのみ、マーカ１６を探せば良いことになる。そして、マーカＭ２，Ｍ４が見つかれば、そこからまた逐次その先へと広げてマーカ１６を探していけば良い。
【００９０】
このように、少なくとも１つ以上のマーカを検出し、その検出されたマーカを基準としてその他のマーカの存在する可能性のある領域６４内でのみマーカを探すようにしているので、フレーム全体に対してマーカ抽出のための計算を必要としなくなり、処理が高速になる。また、マーカ１６間に例えば黒い塵等があると、上記イロージョンなどの処理ではそれもマーカ１６の候補として抽出してしまうが、このようにマーカの存在する可能性のある領域６４内のみを探す場合には、そのような塵をマーカ候補として抽出することはない。
【００９１】
また、上記マーカの抽出処理において、例えば図１５の（Ａ）に示すように、フレーム６０中に３個しかマーカが見つかっていない時には、ブロックを構成するマーカ組（この例では４隅）が得られないことがわかるので、このフレームの処理を中止するようにしても良い。
【００９２】
即ち、四隅にマーカ１６を配置してあるドットコードでは、イロージョン処理やストリーク処理の後でラベリングをしたラベルが３つまでしかふられなかった場合には、マーカ１６が３個しかないということがその時点でわかる。従って、このようにフレーム内で検出されたマーカ数がブロックを形成するのに必要な数に満たない場合、そのフレームの処理を中止するようにすれば、無駄な処理を省くことができる。
【００９３】
一方、上記マーカ概中心算出部５２は、例えば、図１５の（Ｂ）に示すように、上記マーカ存在エリア５８内の全黒画素の重心を算出し、その重心６６をパターンドット１４の検出のための基準座標としてのマーカ概中心とする。
【００９４】
このようにマーカ存在エリア５８内の黒画素全ての重心をマーカ概中心とすることで、白抜けや黒いドット状、髭状のノイズがあっても、これを打ち消すことができる。
【００９５】
あるいは、上記マーカ概中心算出部５２は、例えば、図１５の（Ｃ）に示すように、マーカ１６の外接矩形６８を求め、その中心点７０を算出して、そこをマーカ概中心とするようにしても良い。こうすれば、上記重心を算出する場合に比べて、計算量が少なくて済む。
【００９６】
ところで、上記マーカ概中心算出部５２においては、例えば、図１６の（Ａ）に示すように、マーカ１６がフレーム端７２にかかってしまって欠損した場合には、フレーム６０内に入っている同図に網掛けで示す残りの部分の概中心７４が求められることになる。このように算出した概中心７４が実際の正しいマーカ概中心７６とずれてしまうと、その後、マーカ中心検出部５６により行われるパターンドット１４の検出において、この点を基準にしたのでは、パターンドット１４がうまく検出されないことがある。つまり、マーカ１６がフレーム端７２にかかってしまうと、マーカ１６の一部が欠損することにより、検出されるマーカ概中心位置がずれることがあり、こうした場合、パターンドット１４の各ドットを正常に検出することができず、マーカ中心位置検出精度が低下してしまう。
【００９７】
そこで、マーカ概中心算出部５２においては、この算出された概中心の位置がフレーム端７２からどの位の距離にあるかにより、そのマーカ１６が欠けたかどうかを推定し、もし欠けている場合には、そのずれ量δを算出して、マーカ概中心位置を正しいマーカ概中心７６に補正する処理を行うことが好ましい。
【００９８】
この場合、マーカ１６が欠けているかどうかは、図１６の（Ｂ）に示すように、算出された概中心位置が概中心補正領域７８内にあるかどうかにより判断することができる。
【００９９】
この概中心補正領域７８は、フレームの左右端に関しては、正しいマーカ概中心７６のフレーム端７２からの距離ｄがマーカ１６の左右方向の大きさの半分ａより小さい（即ち、ｄ＜ａ）ような幅を持ち、フレームの上下端に関しては、正しいマーカ概中心７６のフレーム端７２からの距離ｄがマーカ１６の上下方向の大きさの半分ｂより小さい（即ち、ｄ＜ｂ）ような高さを持つ領域である。
【０１００】
また、概中心のずれ量δは、次式で与えられる。
【０１０１】
【数１】
0003568508.tif 000002
【０１０２】
なお、撮像部４６のＣＣＤの各画素が正方形ではなく、またＣＣＤの画素ピッチも縦と横で違うということにより、これらの図１６の（Ａ）及（Ｂ）に示すように、円形のマーカ１６を撮像して得られる画像は、このように楕円形になってしまう。そのため、マーカ１６がフレーム左右端からはみ出した場合と、上下端からはみ出した場合とでは、ずれ量δの算出式が異なっている。
【０１０３】
このように、フレーム端で欠けている可能性のあるマーカの概中心位置を補正することにより、フレーム端にかかってしまったマーカについても、欠けていないとしたときの概中心位置を求めることができるため、パターンドットの検出をより確実にすることができる。
【０１０４】
また、上記ずれ量δつまり補正量を逐次計算して求めなくても、この計算式を、検出された概中心のフレーム端からの距離と補正量との関係を示すテーブルの形式で持つものとしても良い。
【０１０５】
例えば、マーカ概中心算出部５２は、図１６の（Ｃ）に示すように、検出された概中心のフレーム端からの距離と補正した概中心のフレーム端からの距離との関係を示すテーブルを有する。ただし、これらのテーブルは、マーカ１６の直径を７ドット、撮像時の１ドットのサイズが横３．４７画素（ｐｉｘｅｌ）、縦２．７０画素の場合を示している。
【０１０６】
このように、フレーム端からの距離に応じて所定の補正量を出力するテーブルを用いるようにすれば、補正量の計算が不要になる。
【０１０７】
また、上記概中心位置補正処理をフレーム全体のマーカに対して行う必要はなく、実際にデータドットを読み取るブロック２０に係わるマーカのみに対して行えば良い。
【０１０８】
例えば、図１７の（Ａ）において、フレーム６０内にそれぞれ「×」印で示すマーカ概中心Ｍ０〜Ｍ１４が算出されたとき、概中心位置補正が必要なマーカ、つまりフレーム端で一部が欠落したマーカ８０としては、Ｍ０，Ｍ９，Ｍ１４の３つがある。しかしながら、実際に読み取るブロックつまり処理対象ブロック８２は、４隅にマーカのある図中に網掛けして示す５個のブロックである（なお、マーカＭ７，Ｍ９，Ｍ１１，Ｍ１３を４隅に配したブロックについては、詳細は後述するような理由により除外される）。従って、この読み取りに係わる５個のブロックを構成するマーカ１６について、その一部がフレーム端にかかって欠落したと判断された時に、そのマーカについてのみ補正を行い、それ以外のものについては行わない。つまり、同図の例では、フレーム端で一部が欠落したマーカ８０の内、処理対象ブロック８２に関与するものはマーカＭ１４だけであるので、上記概中心位置補正処理は、このマーカＭ１４についてのみ実施される（この場合、マーカＭ０，Ｍ９は、ブロックを構成する４隅のマーカの一つとなり得ないので、処理対象から除外する）。
【０１０９】
このように、処理対象となったマーカについてのみ選択的に補正を行う、つまり、フレーム全体について概中心位置の補正を必要とするマーカを検出して補正するのではなく、読み取りを行うブロックに関係するマーカについてのみ、この処理を行うようにしているので、計算量が少なくなる。
【０１１０】
なお、マーカＭ７，Ｍ９，Ｍ１３，Ｍ１１を４隅に配したブロックを除外するのは、詳細は後述するようなダブルハイトの場合には、マーカＭ５，Ｍ６，Ｍ１０，Ｍ８を４隅に配したブロックとマーカＭ７，Ｍ９，Ｍ１３，Ｍ１１を４隅に配したブロックとは同じデータ内容を有しており、処理対象ブロック８２として、前者のブロックを選択しているので、後者のブロックは除外されるということによる。
【０１１１】
次に、上記マーカ中心検出部５６について詳細に説明する。
【０１１２】
このマーカ中心検出部５６は、パターンドット１４を検出するために、まず、２つのマーカ１６つまりマーカ対を選択する。
【０１１３】
即ち、マーカ１６を使ってパターンドット１４を探す場合、マーカ１６が１つだけでは、図１７の（Ａ）に示したようにドットコード３６がスキューして撮像された場合には、パターンドット１４がどこにあるかは判らない。それに対して、図１７の（Ｂ）に示すように、２つのマーカ１６がマーカ対８４として検出されたならば、パターンドット１４の存在する位置が例えばマーカ間であるというようにフォーマット情報として与えられていれば、そのマーカ対８４の間を探せば良いのであるから、例えば、マーカ対８４を構成する一方のマーカ１６から他方のマーカ１６へ順次１画素ずつ探索して行けばパターンドット１４が見つかることになる。
【０１１４】
このように、マーカ対を選択することにより、パターンドット１４の検出が確実になる。即ち、パターンドット１４は、マーカ１６から所定の位置関係を有して記録されるため、スキューした場合にも、少なくとも２つのマーカ位置が求められれば、パターンドット１４を検出することができる。
【０１１５】
そこで、マーカ中心検出部５６は、まず、図１８に示すように、基準マーカ選択部８６で処理対象となる基準マーカを一つ選択し、対マーカ存在領域算出部８８にて仕様スキュー角とフォーマット情報とに従って対マーカ存在領域を算出して、対マーカ候補検出部９０でこの対マーカ存在領域内を探索して、対になるマーカ候補全てを検出する。次に、ベースマーカ対選択部９２で対をなす一組のマーカ候補を選択することによって処理対象のマーカを決定し、マーカ組選択部９４によりそれら処理対象マーカを選択して処理対象ブロックを決定する。そして、この処理対象ブロックに係わるマーカ間のパターンドット１４の検出へと進む。
【０１１６】
上記対マーカ存在領域算出部８８は、以下のようにして対マーカ存在領域を算出する。即ち、図１７の（Ｃ）に示すように、基準マーカ選択部８６にて選択されたある１つの基準マーカ９６と対になるべきマーカが存在する範囲つまり対マーカ存在領域９８は、仕様スキュー角（図の例では２０°）と、マーカ間距離つまりフォーマット情報とによって算出することができる。従って、図１７の（Ｄ）に示すように、上記マーカ検出部５４がノイズなどにより幾つかマーカ候補の概中心（図中×で示す）を検出したとしても、この対マーカ存在領域９８の範囲内に入るものだけが、対になるべきマーカ（対マーカ１００）であり、それ以外のものは誤マーカ１０２であることが判る。
【０１１７】
なお、仕様スキュー角とは、当該情報再生システムがどれだけ傾いてドットコード３６を読む仕様になっているかを示すものである。例えば、画像入力部３８が固定されていて、ドットコード３６が自動的に搬送されてスキャンするような場合であれば、ほとんどスキューすることはなく、この仕様スキュー角は、１°以下の単位となる。これに対して、操作者が画像入力部３８を手動でドットコード３６上をスキャンさせるような場合には、２０°位は傾く可能性がある。また、例えば、画像入力部３８にローラ等によってある程度スキャン方向が規制されるような構造となっていれば、スキューが減らせる。このように、情報再生システムは、その構造によって、スキュー角が仕様により決まっている。
【０１１８】
このように、マーカ対を選択するに際して、仕様スキュー角とフォーマット情報とに従って対マーカ存在領域を算出し、この対マーカ存在領域内を探索してマーカ候補を検出するようにすれば、フレーム全体に対して対となるマーカ候補を検出する処理を必要としないため、探索効率が向上する。また、左右隣接マーカ存在領域を絞って探索するため、ノイズによるマーカの誤検出を軽減することができる。換言すれば、ノイズによりマーカ候補を誤検出しても、マーカ対を構成するフォーマット上の制限によりそれらを除去することができる。
【０１１９】
また、マーカ中心検出部５６においては、外挿により対マーカ位置を算出するようにしても良い。
【０１２０】
例えば、既に１組のマーカ対が見付かっているような場合、例えば図１９の（Ａ）において、マーカＭ８とＭ１０が既に何らかの形で検出されている場合には、次のマーカＭ１１の位置は、上記のようにしてマーカＭ１０から仕様スキュー角とフォーマット情報とによって対マーカ存在領域９８を算出してその範囲を探すという処理をおこなわずとも、マーカＭ８とＭ１０との位置関係により既にスキュー角度が判っており、またマーカ間距離も判っているので、それに従ってこのマーカＭ１０から外挿ベクトル（ｅｘｖ）１０４を延ばしてやり、図１９の（Ｂ）に示すように、その先端近傍の非常に狭い範囲の中で対マーカを探索してやれば良い。
【０１２１】
こうすることにより、非常に狭い範囲の中だけがマーカ探索領域１０６となるので、それ以外のところにあるマーカ候補を誤検出することはなくなる、つまりノイズに強くなる。特に、上記対マーカ存在領域９８内に複数のマーカ候補が存在する場合であっても、正しいマーカ候補を対マーカ１００として選び出すことが可能となる。
【０１２２】
また、このような外挿ベクトル１０４を用いることにより、マーカ１６が適宜省略されたコードに対しても読み取り可能となる。例えば、上記の例において、マーカＭ１１が省略されていたとしても、この外挿ベクトル１０４によりマーカＭ１１があるべきおおよその位置が判り、そのマーカＭ１０，Ｍ１１間のパターンドット１４を読み取ることができる。
【０１２３】
このように、外挿により対マーカ位置を算出すれば、ノイズによるマーカ欠落や、誤マーカ検出を起こしにくい。また、マーカ１６が適宜省略されたコードに対しても読み取りが可能となる。
【０１２４】
この外挿ベクトル（ｅｘｖ）１０４は、縦方向隣接マーカを探索する際にも利用でき、これは先に検出された横方向マーカ対の位置関係から算出される。例えば、図１９の（Ｃ）に×印で示すように２つのマーカ１６が検出されている場合、そのｘ方向及びｙ方向の増分Δｘ，Δｙより、次式により縦方向に隣接するマーカの位置が外挿される。
【０１２５】
ｅｘｖ．ｆｘ＝３５／４３×ＲＡＴ×Δｙ
ｅｘｖ．ｆｙ＝３５／４３／ＲＡＴ×Δｘ
ただし、ＲＡＴは使用する撮像系の画素に対する縦横比であり、この例では、
ＲＡＴ＝３．４７／２．７０
である。
【０１２６】
このように、外挿によってマーカ位置を算出する場合、先に検出されたマーカ対の位置関係から外挿ベクトルを算出することにより、マーカ対に対応してブロックを構成するマーカ組を確実に検出することができる。
【０１２７】
また、この外挿ベクトル１０４は、次フレームの処理においても利用することができる。
【０１２８】
即ち、ドットコード３６は、その全体が１枚の画面として撮像されるとは限らず、実際には、スキャンしてフレーム画像を連続して何枚も撮像する場合が多い。この場合、時間的に連続する２つのフレーム間では、スキュー角が急に変化するということはほとんど無いので、前のフレームで求めた外挿ベクトル１０４を次のフレームで使うことができる。
【０１２９】
このように、第２フレーム以降では直前のフレームの外挿ベクトル１０４を参照するようにすれば、計算によって外挿ベクトル１０４を求める必要がなくなる。つまり、対マーカ存在領域算出部８８の処理を省略することができるようになる。
【０１３０】
また、外挿ベクトル１０４により求まるマーカ探索領域１０６の中で対応するマーカを探す場合、その時に、例えば歪みや傾きによって実際のマーカがこの外挿した位置ではなくて若干ずれることがある。そこで、このような場合には、図１９の（Ｂ）に示すように、このマーカ探索領域１０６内で探索された対マーカ１００の概中心を用いて外挿ベクトルを修正し、次の対マーカ１００の探索時には、この修正された外挿ベクトルつまり修正外挿ベクトル１０８によりマーカ探索領域１０６を設定するのが好ましい。
【０１３１】
このように、外挿ベクトル１０４を基に検出されたマーカ中心位置を用いて、この外挿ベクトル１０４を修正することにより、即ち、外挿ベクトルを修正しながら処理を進めることにより、歪や傾きが存在する場合にもマーカを見失うことなく、確実に検出することができるようになる。
【０１３２】
以上のいずれかの手法によって対になるマーカ候補すべてが検出されたならば、マーカ中心検出部５６では、ベースマーカ対選択部９２により、２つのブロックにまたがる一連のマーカ対をベースマーカ対として選択する。
【０１３３】
例えば、図２０の（Ａ）に示すように、マーカＭ１０とＭ１１でなるマーカ対と、マーカＭ１１とＭ１３でなるマーカ対のように、２つのブロックにまたがる一連のマーカ対がある場合、それら３つのマーカＭ１０，Ｍ１１，Ｍ１３をベースマーカ対として選択する。
【０１３４】
即ち、仕様スキュー角やフォーマット情報とによって基準マーカ（ｎｔｍ）より隣接マーカの存在領域つまり対マーカ存在領域９８を算出し、その対マーカ存在領域９８内のマーカ候補を検出して、それらのうち対になるものを隣接マーカ（ｌｍｃ，ｒｍｃ）として抽出する。そして、この基準マーカと抽出したマーカとをベースマーカ対１１０として選択する。
【０１３５】
即ち、誤検出マーカが存在した場合、一列に並んでいるというフォーマット上の制限から、その誤検出マーカを含む３つのマーカ１６を結んだ時に真ん中のマーカが丁度その中点になるような可能性はほとんどなく、従って、このように２ブロックにまたがるマーカ対をベースマーカ対として選択するものとすれば、そのような誤検出マーカは排斥されて、実際のマーカであるものしか選択されないことになる。つまり、ノイズによってマーカと誤検出されたものを排斥することができるようになる。
【０１３６】
また、ドットコード３６がダブルハイトで記録されている場合、このような２ブロックにまたがるベースマーカ対というのを選択することで、そのどの２列を読むかをここで決めることができる。
【０１３７】
さらには、複数のブロックにまたがるので、それだけ多くのパターンドットを利用することができ、データ読み取り基準点の精度を高くすることができる。即ち、図の例では、マーカＭ１０とＭ１１との間のパターンドットを使って読み取り基準点を決めるというだけではなく、マーカＭ１０からＭ１３までの範囲のパターンドットを使って、読み取り基準点つまりマーカの真の中心座標を決めるようにすれば、それだけ精度を高くすることができる。
【０１３８】
また、複数のブロックにまたがって、同時にデータ読み取り基準点を決定することができるので、マーカＭ１０とＭ１１の真中心を求めて、次にマーカＭ１１とＭ１３の真中心を求めて、というように順次求めていく場合に比べて、計算量が少なくて済むといった利点もある。
【０１３９】
このように、少なくとも２つ以上のブロックにまたがる一連のマーカ対をベースマーカ対として選択するようにすれば、ベースマーカ対を構成するフォーマット上の制限（対が限定される）により、ノイズによるマーカの誤検出を軽減することができる。また、ダブルハイトで記録されたコードの場合、再生ブロック列にまたがるマーカ対をベースマーカ対として選択することで、２度読みをなくすことができる。さらに、複数のブロックにまたがることで、多くのパターンドットを読み取ることができ、データ読み取り基準点精度が高くなる。また、複数のブロックにまたがって同時にデータ読み取り基準点が決定できるため、計算量が少ないという効果も有する。
【０１４０】
なお、ここで、ダブルハイトについて説明する。
【０１４１】
ダブルハイトとは、図２０の（Ｂ）に示すように、全く同一のコードを２段印刷することをいう（図中、Ａ１，Ａ２，…はブロックアドレスを示すものとする）。つまり、元のコードが２段（縦２ブロック）重ねになっている場合は、このダブルハイトでは、４段（縦４ブロック）重ねになる。そして、このドットコード３６を画像入力部３８で横方向にスキャンした場合、ＣＣＤカメラ等の撮像部４６（撮像部視野１１２）によって得られるフレーム画像としては、図２０の（Ｃ）に示すように、９０°回転した画像が得られる。つまり、スキャンにつれて、ブロックが下からせり上がってくるように、順次ブロックが上方にスライドしたフレーム画像が得られることになる。
【０１４２】
この場合、ブロックの大きさとフレームの大きさの関係から、通常１フレームに横方向に３ブロック分が撮像されることになる。この３ブロックのうち、ダブルハイトの場合には、２つは同じデータ内容のブロックであるため、どちらか一方のみのブロックについてのみ処理を行えば良いことになる。従って、前述した図１７の（Ａ）の例では、マーカＭ５，Ｍ６，Ｍ１０，Ｍ８を４隅に配したブロックとマーカＭ７，Ｍ９，Ｍ１３，Ｍ１１を４隅に配したブロックとは同じデータ内容を有しており、処理対象ブロック８２として、前者のブロックを選択しているので、後者のブロックは除外されているものである。
【０１４３】
また、ベースマーカ対選択部９２では、少なくとも左右の隣接マーカが検出できる範囲内でスキャン方向側のマーカ候補から基準マーカを選択し、これを基準としてベースマーカ対を選択する。
【０１４４】
即ち、あるマーカがみつかった時に、それに隣接するマーカがどの位置にあるかというのは、前述したように仕様スキュー角やフォーマットで規定することができる。この場合は更に傾きによる縮小率も関係してくるが、隣接マーカがフレーム６０内に必ず入ってくるのは、当該マーカが、図２１の（Ａ）に示すような領域１１４内にあるときだけであるので、この領域１１４内で基準マーカｎｔｍを選択する。
【０１４５】
この領域１１４は、フレーム６０よりも、フレーム上下端からは距離ＡＣＲＹ、左右端からは距離ＡＣＲＸ２だけ小さな領域である。ここで、ＡＣＲＹ及びＡＣＲＸ２は、図２１の（Ｂ）に示すように、対マーカ存在領域９８のＹ方向の１／２の長さと、当該マーカから対マーカ存在領域９８の遠い側の端までのＸ方向の長さに該当し、同図に示すような数式によって算出される値である。
【０１４６】
つまり、このような領域１１４内で基準マーカを選択すれば、この領域１１４中のどのマーカを選択しても必ずその両隣には隣接マーカを検出する可能性があるということである。
【０１４７】
また、基準マーカをスキャン方向側のマーカ候補から選択するのは、後述するブロックの選択のためであり、このようにしてスキャン方向側からブロックを選択していくと、前のフレームで既に処理されているブロックが後から選択されて出てくることになるので、処理済みのブロックが検出されたならばそこで当該フレームの処理を中止するようにすれば、既に処理したブロックに対する無駄な処理を省くことができるようになる。
【０１４８】
なお、図示した例では、基準マーカは、ベースマーカ対１１０の中心のマーカを指し、なるべくフレームの下の方のマーカを基準マーカｎｔｍとするようにしているので、図では基準マーカｎｔｍとしてマーカＭ１１が選択されることになる。
【０１４９】
このように、少なくとも左右の隣接マーカが検出できる範囲内でスキャン方向側のマーカ候補から基準マーカを選択し、これを基準としてベースマーカ対を選択することにより、本来検出されるはずの隣接マーカが検出されない場合、そのコードが画面から外れているか、もしくはアクシデントが起きていることが推定できる。また、スキャン方向側のマーカ候補から基準マーカを選択することにより、前のフレームでは未検出のマーカから処理がなされるため、重複した処理を防ぐことができる。
【０１５０】
また、ベースマーカ対選択部９２では、基準マーカｎｔｍの片側にのみマーカ候補が見つかった場合、そのマーカを基準マーカとして再選択して、さらに隣接マーカを探索する。ただし、このマーカ探索の際には、外挿による存在領域の限定を行う。
【０１５１】
例えば、図２１の（Ｃ）において、最初に基準マーカｎｔｍとしてマーカＭ１０が選択され、対応するマーカｌｍｃとｒｍｃを対マーカ存在領域９８から探した時、右側の対マーカ存在領域９８からマーカが見つからず、左側の対マーカ存在領域９８から左側隣接マーカｌｍｃとしてマーカＭ９が見つかった場合には、マーカＭ１０がドットコード３６の端部にあるマーカであると判断する。そこで、この見つかったマーカＭ９を基準マーカｎｔｍにする。そして、既に検出されているマーカＭ１０とから外挿ベクトルによりマーカ探索領域１０６を求め、その領域内で左側隣接マーカｌｍｃを探す。こうして、マーカＭ８を検出して、マーカＭ８，Ｍ９，Ｍ１０をベースマーカ対とする。
【０１５２】
このように、マーカに対して左右片側のマーカしか検出できない場合、基準マーカをその検出された隣接マーカに置き換え、外挿によってマーカを探索すれば、より多くのブロックを読み取ることかできる。即ち、基準マーカを基準としてブロックを読み取る構成であるため、コード端のマーカが基準マーカとして選択された場合、読めるブロックの数が減ってしまう。そこで選択された基準マーカがコード端である場合にはこれを選び直すことにより、より多くのブロックを読み取ることができる。また、外挿によって探索領域を絞っているため、ノイズによるマーカの誤検出を軽減することができる。
【０１５３】
なお、上記のようにして外挿したマーカ位置がフレーム６０からはみ出してしまう場合には、ベースマーカ対選択部９２は、この外挿した位置を仮想マーカの概中心として記憶する。
【０１５４】
例えば、図２２の（Ａ）において、マーカＭ８が基準マーカｎｔｍとして最初に設定されて、両側の対マーカ存在領域９８を探したとき、右側隣接マーカｒｍｃが見つからない場合、前述したように、基準マーカをマーカＭ７に移して、マーカＭ７，Ｍ８でなるマーカ対から外挿により左側隣接マーカｌｍｃを探すことを行う。この時に、この外挿点がフレーム６０からはみ出た場合には、この外挿点に仮想マーカを設ける。
【０１５５】
このようにすると、同図においてマーカＭ７と仮想マーカＭ１０の間にあるパターンドット１４を利用することができる。
【０１５６】
また、このような仮想マーカＭ１０を設けなかった場合には、マーカＭ７とＭ８の組しか見つからず、このマーカＭ７，Ｍ８を含むブロックと同一の列のブロックしか読み取らないようになってしまう。しかし、このように仮想マーカＭ１０を設けることで、マーカＭ１，Ｍ２，Ｍ５，Ｍ４を４隅に配置したブロックをも読み取るようになり、ブロックの欠落を防ぐことが可能になる。
【０１５７】
このように、外挿した時にマーカ探索領域が画面からはみ出た場合に、外挿点を仮想マーカとすることにより、マーカが画面からはみ出していても、画面内に残っているパターンドット１４は利用することができるので、これらのパターンドット１４を有効に利用することができるようになる。
【０１５８】
また、ブロックは基準マーカを基準にして順次外挿により読み取っていくが、基準マーカに隣接するマーカが画面から外れていたとしても、外挿により求めたブロックを構成するマーカは、スキューによりフレーム内に入ってくるときがあり、そのような場合に、それらのブロックが読めるようになる。
【０１５９】
また、ベースマーカ対選択部９２は、２つ以上のベースマーカ対が選択できる場合には、より多くのブロックを読み取れる可能性の高いベースマーカ対を再選択する。
【０１６０】
即ち、ダブルハイトの場合、前述したように、全く同一のコードが２段印刷されている。フレーム画像としては、元のコードが横２ブロックからなるとき横４ブロック存在し、ブロックの大きさとフレーム６０の大きさの関係から通常は１フレームに横３ブロックが撮像される。そこで、より多くのブロックを読み取れる可能性の高いベースマーカ対を再選択することにより、読み取りブロック数を増加することができる。
【０１６１】
例えば、図２２の（Ｂ）の左側に示すように、マーカＭ１０，Ｍ１１，Ｍ１３をベースマーカ対として選択すると、同図の右側に網掛けを付して示すように、読み取りブロックは、マーカＭ２，Ｍ４，Ｍ７，Ｍ６を４隅に配したブロックと、Ｍ６，Ｍ７，Ｍ１１，Ｍ１０のブロック、Ｍ７，Ｍ９，Ｍ１３，Ｍ１１のブロックの３ブロックとなる。
【０１６２】
これに対して、図２２の（Ｃ）の左側に示すように、マーカＭ８，Ｍ１０，Ｍ１１をベースマーカ対として選択すると、同図の右側に網掛けを付して示すように、読み取りブロックは、マーカＭ１，Ｍ２，Ｍ６，Ｍ５を４隅に配したブロックと、Ｍ５，Ｍ６，Ｍ１０，Ｍ８のブロック、Ｍ８，Ｍ１０，Ｍ１４，Ｍ１２のブロック、Ｍ２，Ｍ４，Ｍ７，Ｍ６のブロック、Ｍ６，Ｍ７，Ｍ１１，Ｍ１０のブロックの５ブロックとなる。
【０１６３】
ここで、ダブルハイトの場合には、Ｍ５，Ｍ６，Ｍ１０，Ｍ８のブロックと、Ｍ７，Ｍ９，Ｍ１３，Ｍ１１のブロックとは、全く同じデータが記録されているため、どちらのブロックを読み取っても得られるデータは同じである。そこで、なるべく読み取れるブロック数の多いＭ８，Ｍ１０，Ｍ１１をベースマーカ対として選択する。
【０１６４】
このように、２つ以上のベースマーカ対が選択できる場合には、より多くのブロックを読み取れる可能性の高いベースマーカ対を再選択することにより、１フレームからより多くの読み取りブロックが抽出できるようになる。
【０１６５】
なお、上記のようなベースマーカ対の再選択を行うとき、コードが左にスキューしている場合には右側のベースマーカ対を、また右にスキューしている場合には左側のベースマーカ対を再選択し、マーカの探索の際には、外挿による存在領域の限定を行う。
【０１６６】
例えば、図２３の（Ａ）に示すようにコードが右にスキューしている場合には、ベースマーカ対として左側のＭ８，Ｍ１０，Ｍ１１の組と、右側のＭ１０，Ｍ１１，Ｍ１３の組を選択する可能性があるが、左側の組を選択すると５個のブロックを読み取ることができるが、右側の組を選択すると４個のブロックしか読み取ることができない。そこで、このようにコードが右にスキューしているときには、左側のマーカ対を選択する。
【０１６７】
ブロックを構成するマーカはベースマーカ対を基準にして順次外挿により求めていくが、このように、ベースマーカ対を再選択するとき、コードが右にスキューしている場合は左側のベースマーカ対を、左にスキューしている場合は右側のベースマーカ対を再選択することにより、スキューによって読み取りブロックを構成するマーカがフレーム外にはみ出てブロック欠損を生じるのを防ぐことができる（横方向）。
【０１６８】
あるいは、上記ベースマーカ対の再選択においては、中央よりのベースマーカ対を選択するようにしても良い。これは、左側マーカと基準マーカとの中点がフレーム中心より右側、もしくは右側マーカと基準マーカとの中点がフレーム中心より左側の場合に、中央に近いマーカ対を再選択することにより行われる。
【０１６９】
例えば、図２３の（Ｂ）に示すように、コードが右にスキューしている場合、マーカＭ１０，Ｍ１１，Ｍ１３をベースマーカ対として検出したとき、左側マーカＭ１０と基準マーカＭ１１の中点がフレーム６０の中央よりも右側にあるので、このベースマーカ対がフレーム６０の右側に寄っていることが判る。そこで、このような場合には、Ｍ１１とＭ１３でなるマーカ対よりも中央に近いＭ１０とＭ１１でなるマーカ対を再選択する。そして、外挿によりマーカＭ８を探索して、Ｍ８，Ｍ１０，Ｍ１１をベースマーカ対として選択する。
【０１７０】
コードが左にスキューしている場合には、右側マーカと基準マーカとの中点がフレーム中心より左側であるかどうかの判断により、再選択するかどうか決定できる。
【０１７１】
ブロックを構成するマーカはベースマーカ対を基準にして順次外挿により求めていくが、このように、左側マーカと基準マーカとの中点がフレーム中心より右側、もしくは右側マーカと基準マーカとの中点がフレーム中心より左側の場合、中央に近いマーカ対を再選択することにより、スキューにより、読み取りブロックを構成するマーカがフレームからはみ出てブロック欠損を生じるのを防ぐことができる。また、中央よりのブロックを選択するため、ディストーションの影響を小さくすることができる。
【０１７２】
また、マーカ組選択部９４は、ブロックを構成するマーカのうち、全ての組み合わせ又は一部の組み合わせを選択する。
【０１７３】
即ち、一例として図２４の（Ａ）に示すようにブロック２０が矩形状であり、その頂点にマーカが配置されている場合、ブロック２０を構成する全ての４つのマーカ組を選択する。
【０１７４】
このように、ブロック２０を構成するマーカ組を選択することにより、読み取るデータをブロック毎に分割して処理することができる。
【０１７５】
なお、マーカ組選択部９４は、選択したブロック２０を構成するマーカ組を全て不図示メモリに記憶する。
【０１７６】
例えば、図２４の（Ａ）の例の場合には、フォーマット情報により、マーカＭ０，Ｍ２，Ｍ６，Ｍ４が１つのブロックを構成するということが判ると、それを第１ブロックのマーカ組として、同図の（Ｂ）に示すように、左上がＭ０、右上がＭ２、右下がＭ６、左下がＭ４というようにメモリに記憶する。以下同様に、第２ブロックとしてＭ１，Ｍ３，Ｍ７，Ｍ５を、第３ブロックとしてＭ８，Ｍ１０，Ｍ１４，Ｍ１２を、第４ブロックとしてＭ９，Ｍ１１，Ｍ１５，Ｍ１３をそれぞれ記憶する。つまり、この例の場合は４つブロックがあるので、第１ブロックから第４ブロックまでをこのようにマーカ番号でメモリに記憶する。
【０１７７】
このように、概中心位置を基にブロック２０を構成するマーカ組を全てメモリに記憶することにより、ブロック２０が整列していない場合にもブロック毎にデータを読み取ることができる。
【０１７８】
あるいは、このように全てのマーカ組を記憶する代わりに、ブロック２０を構成する所定の一つのマーカと、このマーカに対する他のマーカの関係を現す関係式とをメモリに記憶するようにしても良い。
【０１７９】
即ち、図２４の（Ｃ）に網掛けして示すような処理対象ブロック８２が整列されている場合には、ブロックを構成する４つのマーカの内の所定の一つ、例えば左上のマーカと、この左上のマーカと残りの３つのマーカとの関係式とが判っていれば、メモリに全てのマーカ組を記憶する必要はない。
【０１８０】
例えば、同図の例の場合、図２４の（Ｄ）に示すように、関係式として右上のマーカは＋１、左下のマーカは＋３、右下のマーカは＋４というように記憶しておけば、第１ブロックについては、左上のマーカＭ１を記憶するだけで、右上のマーカはそれに＋１したＭ２、左下のマーカは＋３したＭ４、右下のマーカは＋４したＭ５であることが判るので、これらマーカＭ２，Ｍ４，Ｍ５をメモリに記憶する必要がなくなる。
【０１８１】
このように、ブロック２０を構成するマーカの少なくとも一つと他のマーカとの関係が判っていれば、この少なくとも一つのマーカをメモリに記憶するだけで良く、メモリ容量を節約できる。
【０１８２】
また、マーカ組選択部９４は、図２５の（Ａ）に示すように、フレーム６０内に入ったブロック２０を全て処理対象ブロック８２とできるように、ブロック２０を構成する全てのマーカ組を選択するものとしても良い。ただしこの場合は、ベースマーカ対選択部９２を構成する必要はない。
【０１８３】
ダブルハイトの場合には、前述したように全く同一のコードが２段印刷されており、フレーム画像としては、元のコードが横２ブロックからなるとき横４ブロック存在し、ブロックの大きさとフレーム６０の大きさの関係から通常は１フレームに横３ブロックが撮像される。そこで、このように、フレーム内のブロック２０を構成する全てのマーカ組を選択すると、同一内容のブロックが重複して読み取られ、両方とも同じように読み取れたものを正しいデータとすることにより、データの信頼性を高めることができる。
【０１８４】
つまり、重複して選択されるブロックも全て処理対象とすることで、信頼性を高めることができる。
【０１８５】
また、マーカ組選択部９４では、図２５の（Ｂ）に示すように、フレーム内のスキャン方向側のブロックから処理対象ブロック８２とできるように、スキャン方向側のブロックを構成するマーカ組から順次選択し、前フレームで処理済みのブロックが出現した場合、そこで処理を中止して、次フレームへ処理を移行するようにしても良い。
【０１８６】
例えば、前述したようなベースマーカ対選択部９２においてスキャン方向側のマーカ候補から基準マーカを選択した場合、図２６の（Ａ）に示すように、ベースマーカ対としてマーカＭ８，Ｍ１０，Ｍ１１が選択されるが、下側のブロックから読み取るようにするために、ここからまず１回下方に外挿して、マーカを見つける処理を行う。これにより、マーカＭ１２とＭ１４がマーカとして検出され、これらは１つのブロックを構成するマーカ組であると見なされるので、このＭ８，Ｍ１０，Ｍ１４，Ｍ１２のブロックを選択する。次に、今度は逆に上方のブロックを選択して処理していく。そして、ブロックアドレスにより既に処理したブロックであるか否かがわかるので、既に処理したブロックが見つかった時点で、このフレームについての処理を中止することにより、既に処理したブロックを再度処理するという無駄を省くことができる。
【０１８７】
このように、フレームのスキャン方向側のブロックを構成するマーカ組から順次選択することにより、処理済みのブロックは処理対象としないことができるので、重複した処理を省くことができる。
【０１８８】
また、撮像部４６に光学的ディストーション等があった場合に、フレーム６０の中央部よりは外側の方がディストーションが大きくかかってくるので、マーカ組選択手段９４では、フレーム６０の側端部のブロックを構成するマーカ組から順次選択するようにし、まず外側寄りのブロックのデータを読み、次に中央寄りのブロックのデータが読めれば、そのデータで上書きしていくものとすれば、データの信頼性をより高くすることができる。
【０１８９】
例えば、コードがダブルハイトで記録されている場合、図２６の（Ｂ）に丸数字で示すように、１〜９の順番に処理対象ブロック８２のデータを読んでいく。ここで、１のブロックと２のブロックとは同じデータが記録されているが、１のブロックはフレーム６０の端に寄っているので、光学的ディストーションによって、読み取りエラーが発生する確率が高い。そこで、その後に、２のブロックのデータをもう１回読み取って上書きすれば、より正確なデータが得られる。また、例えば、この２のブロックがノイズ等によって読み取れなかったとしても、このブロックのデータは、先に１のブロックから読み取っているので、多少エラーが多いかもしれないが、このブロックのデータが全く読み取られないということを防ぐことができる。
【０１９０】
即ち、フレーム外側に近いブロックほどディストーションの影響を大きく受けてエラーが増えるため、このように、フレーム内のスキャン方向と直交する方向側の端部に近いブロックを構成するマーカ組から順次選択することにより、外側から順次ブロック内のデータを読み取って上書きしていけば、余計なメモリを必要とせずに信頼性の高いデータを得ることができる。
【０１９１】
あるいは、マーカ組選択部９４は、選択されたブロックの読み取りに失敗した場合、同一のアドレスを有するブロックを再選択するものとしても良い。
【０１９２】
例えば、図２７の（Ａ）に示すように、ダブルハイトのコードにおいてベースマーカ対として真ん中の３つのマーカ（図示せず）を選択して処理対象ブロック８２を順番に読んでいった場合に、アドレスＡ１７のブロックが読み取り失敗ブロック１１６となったならば、これと同じデータ（同じアドレス）を持つブロックを再選択ブロック１１８として選択するようにマーカ組を選択し直す。
【０１９３】
なお、読み取りエラーが発生して、読み取り失敗ブロック１１６となるのは、例えば、ノイズ等によってアドレスドット１８が読めなかった場合や、マーカが見つからなかった場合などである。
【０１９４】
このように、あるブロックの読み取りに失敗した場合には、同一のアドレスを持つ別のブロックを構成するマーカ組を選択し直すことにより、ブロック落ちによる読み取りエラーを減少させることができる。
【０１９５】
次に、データコード１０の読み取り基準点の推定法について説明する。
【０１９６】
図２７の（Ｂ）に示すように、マーカ１６とパターンドット１４とはコードライン１２０上に一直線に配置されている。つまり、データコード１０の読み取り基準点としてのマーカ１６の真中心と、パターンドット１４の各ドット中心とがコードライン１２０上に配列されている。従って、この所定のフォーマットで記録されたパターンドット１４を用いることで、読み取ったマーカの概中心が正しい真中心かどうかが直ちに判断できる。
【０１９７】
また、複数のパターンドット１４を用いることで、求める読み取り基準点の精度を高めることができる。即ち、パターンドット１４はフォーマットが決まっているため、このパターンドット１４を検出したときに、本当にドットがあるべき位置にあったドットなのか、あるいはノイズなのかということを区別することができる。よって、このあるべき位置にあるパターンドット１４のドットの中心を、全て求めることができ、これら複数のドットの中心位置を使用して、マーカ１６の真の中心を求めることが可能になるので、読み取り基準点の位置の精度を上げることができる。
【０１９８】
例えば、図２７の（Ｃ）に示すように、パターンドット１４の各ドットの２値化処理後のパターン形状が得られたとすると、マーカ１６の概中心間を結んだ読取ライン１２２上をフォーマット情報に従ったドット読取位置１２４でドットを検出する。そして、検出されたドットの中心位置１２６を算出し、これらの座標から一次回帰により、データコード１０の読み取り基準点となるマーカ真中心を算出することができる。
【０１９９】
１ドット毎の中心位置検出精度は、誤差にしてコンマ数画素程度であるが、パターンドット１４を１つのマーカ１６に対して複数個用意することによって、精度を上げることができる。
【０２００】
このように、所定のフォーマットで記録されたパターンドット１４を用いてデータ読み取り基準点を推定する場合、所定のフォーマットと比較することにより、読み取った情報が正しいのかどうかが直ちに判定できる。また、少なくとも一つ以上のパターンドット１４を用いることにより、基準点推定精度を高めることができる。
【０２０１】
なお、このようにパターンドット１４を用いてデータ読み取り基準点つまりマーカ１６の真中心を推定する場合、マーカ概中心から所定の位置関係を有するパターンドット１４のみを利用して正確なデータ読み取り基準点を推定する。
【０２０２】
上記所定の位置関係を有するパターンドット１４とは、例えば、図２８の（Ａ）に示すような隣接マーカ間のパターンドット１４である。このマーカ真中心の推定は、歪みに対応するため、１ブロックずつ行う。例えば、マーカＭ８とＭ１０のそれぞれの真中心を求める際には、それらの間のパターンドット１４を用い、マーカＭ１０とＭ１１のそれぞれの真中心を求める際には、それらの間のパターンドット１４を用いる。この場合、中心のマーカＭ１０の真中心については、両側のパターンドット１４からそれぞれ求まるので、図２８の（Ｂ）に示すように、左右ブロックの平均を用いる。
【０２０３】
あるいは、上記所定の位置関係を有するパターンドット１４としては、図２８の（Ｃ）に示すように、ブロック外のパターンドット１４を含む所定の範囲内にあるパターンドット１４としても良い。この例では、Ｍ８，Ｍ１０，Ｍ１１の真中心をそれぞれＬ，Ｍ，Ｒの範囲のパターンドットを用いて求めている。
【０２０４】
この場合、例えば、求めたい１つのデータ読み取り基準点つまりマーカ１６の真中心に対して、光学歪みがない場合には、できるだけパターンドット１４のドット数を多く用いて求めた方が精度が良いので、そのように光学歪みのない場合には、図２９の（Ａ）に示すように、広い範囲のパターンドット１４を用いてマーカ１６の真中心を求めることが好ましい。
【０２０５】
これに対して、光学歪みがある場合には、マーカ１６から離れるにつれて誤差が蓄積されて大きな誤差を生じるため、広い範囲のパターンドット１４を利用せずに、図２９の（Ｂ）に示すように、読み取るパターンドット１４の範囲を限定する（マーカ近傍のパターンドット１４のみを用いる）ことによって、求められたデータ読み取り基準点の信頼性を高くする。
【０２０６】
このように、マーカ概中心から所定の位置関係を有するパターンドット１４のみを利用して正確なデータ読み取り基準点を推定することにより、歪みがない場合、範囲を広くしてドット数を多くすることにより推定精度を上げることができる。また、歪みがある場合、範囲を限定することにより推定精度を上げることができる。さらには、範囲をマーカ対間にすることにより処理が簡単になるという利点がある。
【０２０７】
また、マーカ間のパターンドット１４を利用する場合、一般に広く用いられているツリー探索の手法を採用して、データ読み取り基準点を推定することができる。つまり、図２９の（Ｃ）に示すように、マーカ対の概中心間を結んだ線上でパターンドット１４を読み取るだけでなく、その概中心の８近傍それぞれを結んだ線上でパターンドット１４を読み取る。つまりそれぞれの点について９回、読み取りを行う。こうした場合、ずれた位置ではパターンドット１４のドット全てを読み取ることができず、正しい位置では全て読み取れることになるので、同図の（Ｄ）に示すように、パターンドット１４を全て読み取れた回数の最も多かった点（図中○で示す）をデータ読み取り基準点とする。または、上述したように求めた基準点の近傍のさらにせまい範囲で８点を用いて同様に読み取りを行って求めた、より精度の高い読み取り基準点を用いても良い。
【０２０８】
このように、ツリー探索の手法を採用すると、複雑な計算を必要とせずに、データ読み取り基準点を決定することができる。
【０２０９】
さらにこの場合、総当たり的なツリー探索を行う代わりに、マーカ対の概中心間で一度パターンドット１４を読み取り、その結果に従って限定的にツリー探索を行うことも可能である。
【０２１０】
例えば、図３０の（Ａ）に示すように、ドット１，１０をマーカの概中心としたとき、ドット２，３，４，５が読み取れ、ドット６，７，８，９が読み取れなかった場合には、つまり、左寄りのドットだけが正しく読み取れている場合には、左側の概中心（ドット１）はほぼ正しい位置であり、右側の概中心（ドット１０）がずれていると判断することができる。従って、左側の概中心はそのまま、右側の概中心だけを８近傍に振ってツリー探索を行えば良い。
【０２１１】
また、パターンドット１４を、図３０の（Ｂ）に示すように、右にずらしたドット２，６と、通常の位置のドット３，５，７と、左にずらしたドット４，８で構成し、これを読み取ったときに、左にずらしたドット４，８のみが読み取れなかった場合には、概中心の位置が右に寄っていたことが判る。つまり、左にずれたドット４，８が読み取りエラーが起きたということは、全体的に右に寄っていたということであるので、このような場合には、ドット１，９の概中心をずらしたツリー探索を続けるときに、それらの左側にずらした点を重点的に探索すれば良い。
【０２１２】
同様に、図７の（Ｂ）に示したような、上下方向にもずらしたドットをドットパターン１４に入れておくことで、上下方向のずれも検出できるので、それに応じてツリー探索を限定的に行うことが可能になる。
【０２１３】
そして、パターンドット１４の全ドットがほぼ一様に検出された時に、ほぼ確実なデータ読み取り基準点が検出されたことになる。
【０２１４】
このように、マーカ対の概中心とフォーマットで決定されるドット読み取り点でパターンドットを読み取り、読み取りエラーの発生したドットの位置及びその偏りによって概中心位置のずれ量及び方向を推定し、マーカ対の概中心を、その推定結果に基づいて近傍で移動させて、ツリー探索を行うことにより、総当たり的なツリー探索に比べて、探索回数を少なくできる。
【０２１５】
なお、パターンドット１４は、必ずしもマーカ対間に直線状に並んでいる必要はなく、マーカ対とどういう位置関係にあるかがフォーマットとして決定されていれば良いものである。
【０２１６】
例えば、図３０の（Ｃ）に示すように、図示しないマーカ間あるいはマーカの回りに、パターンドット１４が円状に並んでいて、その中心をデータ読み取り基準点にするという場合、半径ｒでパターンドット１４が並ぶフォーマットであれば、マーカ概中心よりそれぞれのドットを検出して、それぞれの中心（図中×で示す）を求める。そして、半径ｒの円の中心（ｘ，ｙ）を、この８個のドット中心と円との距離の２乗和が最小になるように、ｘとｙを求めて、それをデータ読み取り基準点とする。これはつまり、イメージ的には、半径ｒの円を移動して、その求めたドットの中心がうまくこの円に嵌まるところを探し、見付かったならば、その円の中心（ｘ，ｙ）をデータ読み取り基準点とするということを意味している。さらに簡単には、これらドットの中心の重心を円の中心、即ちデータ読み取り基準点とするようにしても良い。
【０２１７】
このように、マーカ対のマーカ概中心とフォーマットで決定されるドット読み取り点でパターンドットを検出し、その検出されたパターンドットの中心を算出して、この算出されたドット中心とフォーマットの関係で定められる所定の誤差関数を最小化するように読み取り基準点を推定するようにしているので、複数のパターンドットの中心を利用してデータ読み取り基準点が推定され、精度が非常に高くなる。
【０２１８】
以上のように、マーカ中心検出部５６では、図１８に示すように、パターンドット検出部１２６にて、マーカ組選択部９４で選択されたマーカ組の各マーカ間に配置されているパターンドット１４を各マーカの概中心とフォーマットで決定されるドット読み取り点で検出し、ドット中心算出部１２８によって各検出されたドットの中心を算出する。そして、誤差最小化部１３０によって、この算出されたドット中心とフォーマットの関係で定められる所定の誤差関数を最小化するように、データコード１０の各データドットの読み取り基準点を推定し、データ読み取り部４２に出力する。
【０２１９】
次に、上記パターンドット検出部１２６について詳細に説明する。
【０２２０】
ドット検出部１２６は、マーカ対の概中心とフォーマットで決定されるドット読み取り点で黒ドットを検出する黒ドット検出部１３２を有している。この黒ドット検出部１３２は、図３１の（Ａ）に示すように、黒ドットが検出されるはずのドット読み取り点１３４で黒ドットが検出されなかった場合には、その近傍の４画素について、図中に１〜４で示す順番に黒画素を探索して、黒画素が有ればそれをドットとするように探索する。つまり、パターンドット１４を形成する各ドットは、マーカ概中心から所定の位置関係を満たすドット読み取り点の画素値として検出される。そこで、黒ドットが検出されるべきドット読み取り点において黒ドットが検出されない場合、ドット読み取り点がずれていたものとみなして、上下左右１画素ずつずらしながらドットを探索する。
【０２２１】
このように、マーカ概中心がノイズ等によってずれて算出されていたり、歪みや傾きによって概中心間を所定の比で分割したドット読み取り点１３４がずれて算出されていたとしても、その近傍で黒ドットを探索することにより、確実にパターンドット１４を検出できるため、検出ドットの減少による精度の低下がない。
【０２２２】
また、このようにしてドット読み取り点１３４の近傍画素でドットが検出された場合には、そのずらし量を記憶しておき、それを次のドット読み取り点１３４からオフセットとして加えることが好ましい。
【０２２３】
即ち、例えば図３１の（Ｂ）において、同図中左側の黒丸で示すドットを計算により求めたドット読み取り点１３４とした場合に、そこには黒画素がないので、探索をする。そして、左側に１画素ずれたところでドットが検出された場合には、左側に１画素ずれた位置をオフセットとして記憶する。そして、次のドット読み取り点１３４が、当初の計算では図中白丸で示す点であったとしても、その点から左に１画素ずれた点をドット読み取り点１３４として読み取りを行う。
【０２２４】
つまり、あるドットがずれて検出された時は、その近傍のドットもずれて検出される可能性が非常に高いので、計算上のドット読み取り点１３４をまた同じように探索するよりも、最初からオフセットを加えた点を読み取りにいく方が、処理が少なくて済む。
【０２２５】
このように、パターンドット１４のあるドットがずれた位置で検出された場合、その近くのドットも同じようにずれている場合が多く、そこで、計算上求められたドット読み取り点１３４からずれた位置でドットが検出された場合、そのずれをオフセットとして次のドット読み取り点１３４を予めシフトしておくことにより、探索効率を高めることができる。また、歪みによってドット検出点がずれていた場合、歪み量に応じてドット読み取り点１３４をシフトしていかないと、ずれが累積して、やがてドットの検出が不可能となるが、読み取り点をシフトしていくことにより、これを防ぐこともできる。
【０２２６】
また、図１８に示すように、マーカ中心検出部５６は、さらに、誤差最小化部１３０で求めたデータ読み取り基準点に基づいてマーカ概中心を算出し直すマーカ概中心再算出部１３６を有しても良い。
【０２２７】
即ち、パターンドット１４を形成する各ドットは、マーカ概中心から所定の位置関係を満たすドット読み取り点１３４の画素値として検出される。そこで、ドットが数個しか検出されない場合、マーカ概中心がずれていたものとみなして、読み取ることができたドットのみを利用してマーカ概中心位置を再計算する。こうして求められたマーカ概中心から、再度所定の位置関係を満たすドット読み取り点１３４の画素値を読み取ることによりドットを検出する。
【０２２８】
例えば、図３１の（Ｃ）の上側に×印で示すようにマーカ概中心が検出されて、パターンドット１４の１回目の読み取りを行う。その時に、右側のマーカ概中心位置がずれて検出されていた場合には、左側のマーカ概中心に近い方のドットは読み取ることはできるが、右側のマーカ概中心に近い方のドットは欠落してしまう。このように読み取れたドットの中心位置をドット中心算出部１２８により算出し、誤差最小化部１３０にてデータ読み取り基準点を推定すると、その推定されたデータ読み取り基準点は、検出されたドットが少なかったために、誤差が多いものとなっている。そこで、マーカ概中心再算出部１３６は、このデータ読み取り基準点を新しいマーカ概中心として、パターンドット検出部１２６に再度パターンドット１４の検出を行わせる。これにより、同図の下側に示すように、パターンドット１４の全てが検出されるようになり、高精度にデータ読み取り基準点を推定できるようになる。
【０２２９】
このように、１回目の読み取りで検出された数個のパターンドットから概中心を再算出することにより、概中心の精度が上がり、再検出されるドットの数を増やすことができる。
【０２３０】
また、黒ドット検出部１３２では黒ドットを検出するだけなので、汚れ等により本来白であった点をも黒ドットと検出してしまう場合もある。そこで、パターンドット１４を信号＋エラー検出符号により構成し、検出された黒ドットの信号からエラー検出処理を行い、本来黒ドットであった点のみドット中心算出を行うようにすることも可能である。
【０２３１】
即ち、図１８に示すように、パターンドット検出部１２６では、黒ドット検出部１３２での検出結果をバッファ１３８に入力し、信号の並びとする。つまり、黒ドットを「１」として、例えば、１，０，０，１，１，０，０というように並べ直すと、これは信号であるのでエラー検出が可能になる。そこで、エラー検出部１４０にてエラー検出を行い、間違って検出された黒ドットがあれば、それは使わないように、つまりドット中心算出部１２８に供給しないように、選択部１４２により、黒ドット検出部１３２の出力をドット中心算出部１２８に選択的に供給させる。
【０２３２】
このように、ドットを検出した後、それら検出したドットの中からエラー検出により正しいドットのみを選択することにより、パターンドット１４に情報を持たせた場合にもドットが正しく検出された位置がわかるため、ノイズによるデータ読み取り基準点精度の低下を防ぐことができる。
【０２３３】
次に、ドット中心算出部１２８について説明する。
【０２３４】
円形に印刷されたドットをＣＣＤカメラで粗く撮像し、２値化した場合、得られるパターンはもはや円形ではないので、簡単にドット中心を算出することができない。
【０２３５】
理想的な２値化が行われた場合、図３２の（Ａ）に示すように画素の半分がドットにかかればその画素はオンとなるため、ある画素がオンとなるためのドット中心位置の存在範囲が規定できる。即ち、画素の半分がドットにかかるときのドット中心の軌跡を臨界線としたとき、その内側（注目画素側）にドット中心がある時は画素はオンに、外側にある時は画素はオフになる。そこで、あるパターンが生じたとき、パターン中のオンとなった画素とその周囲のオフとなった画素についてドット中心位置の存在範囲を求めれば、その重複領域としてドット中心位置を推定することができる。
【０２３６】
例えば、１つのドットを縦２画素、横３画素程度の大きさで撮像した時に、理想的な２値化が行われた場合、表れる画素パターンは、同図の（Ｂ）に丸数字の１〜７で示すような７種類しかなく、それぞれ図示するようにドット中心位置の存在する領域が推定できる。
【０２３７】
ドット中心算出部１２８は、このようなパターン形状とドット中心存在領域との関係をテーブルとして保持している。
【０２３８】
このように、形状が既知のドットを２値化したときのパターン形状からその中心位置の存在領域を求めることができ、そこで、この領域内の点を中心代表点とすることで、粗いサンプリングでも超解像的にドット中心を推定することができるようになる。
【０２３９】
一方、上記のように１ドットを２画素×３画素で撮像する場合にはパターンは７通りしかないが、３画素×３画素や４画素×３画素とより高い解像度で撮像する場合には、解像度が高くなるにつれて表れるパターンは指数的に増大していくことになり、上記のようにテーブルを保持するためには、非常に大容量のメモリが必要になってくる。
【０２４０】
そこで、ドット中心算出部１２８は、撮像されたドットの重心を算出してドット中心とするようにしても良い。このようにすれば、ドット形状と代表点の関係をテーブルにして保持する必要がないので、メモリが不要となる。また、１つのドットを何画素×何画素で撮像するということが決まっていなくとも良いので、光学系の倍率が変動したり、ドットの径が変動したりしても対応できるというスケーラビリティを有するという効果もある。
【０２４１】
また、この重心算出を行う場合、図３３の（Ａ）に示すように、ドット読み取り点１３４に関して所定の大きさ、例えば４×４のマスク１４４をかけて、その中に入っている画素だけを用いて重心１４６の算出を行うようにしても良い。
【０２４２】
ここで、図３３の（Ａ）の例を用いて重心の計算を説明する。
【０２４３】
まず、同図ではマスク内に１１個の黒画素が存在しており、これを行方向に見た場合、ドット読み取り点１３４の行より１行上に位置する行に黒画素が１画素あるので、この行の行重み係数「−１」を「１（画素）」にかけて一時記憶しておく。同様に、ドット読み取り点１３４の行より１行下に位置する行には黒画素が４画素あるので、行重み係数「１」と「４」をかけて、前述の一時記憶結果に加算する。さらに、２行下の行も同様に、３画素の黒画素に対して行重み係数「２」をかけて、結果の「６」を一時記憶結果に加算する。こうして得られた加算結果を黒画素数で除算して、「９／１１」が得られ、これが重心１４６の読み取り点１３４からのｙ方向のずれに相当している。
【０２４４】
ｘ方向に対しても同じように計算し、「（−１×３＋１×３＋２×１）／１１＝２／１１」が、重心１４６の読み取り点１３４からのｘ方向のずれに相当する値である。
【０２４５】
このように、適当なサイズのマスク１４４によって中心算出に寄与する領域を制限すると、ノイズ（シミ）による誤差が読み取り基準点の推定に与える影響を小さくすることができる。
【０２４６】
なおこの場合、ノイズの影響を少なくするために、マスク１４４の大きさはドットの大きさに近ければ近いほど好ましいものであるが、マスク１４４の大きさをドットの大きさと同じにしてしまうと、ドット読み取り点１３４が重心に近い位置で検出されなかった場合には、偏った位置にマスクがかかり、重心算出に寄与する画素も偏ることになって、算出される重心の誤差が非常に大きなものになってしまう。
【０２４７】
そこで、図３３の（Ｂ）に示すように、まずドット読み取り点１３４を基準とする位置でマスク１４４をかけて、マスク内でドットの偏りを検出し、図３３の（Ｃ）に示すようにこの偏りをなくす方向にマスク１４４を移動してから重心算出を行うようにすれば、マスク１４４のサイズをドットのサイズに合わせたとしても、正確な重心算出が可能になる。
【０２４８】
ここで、横（縦）方向のマスク１４４の移動量は、列（行）中に黒画素が一つでも存在すれば「○」、存在しなければ「×」として、図３３の（Ｄ）に示すようなテーブルを参照して算出する。
【０２４９】
以下に、図３３の（Ｂ）、（Ｃ）、及び（Ｄ）を用いて具体的に説明する。
【０２５０】
図３３の（Ｂ）は、読み取り点１３４が左下にずれていた場合の例で、マスク内に９個の黒画素が入っている。
【０２５１】
まず行方向で調べると、読み取り点１３４の行の１行上、１行下、及び２行下のそれぞれに３個、３個、及び０個の黒画素が検出される。この場合、２行下の行に黒画素が無いので、マスク位置を１行上へずらす。
【０２５２】
同様に、列方向で、読み取り点１３４の列の１列左、１列右、及び２列右のそれぞれに０個、３個、及び３個の黒画素が検出される。このときには、マスク１４４を１列右へずらすようにしている。
【０２５３】
これらの関係を表にまとめたのが図３３の（Ｄ）である。
【０２５４】
このように、ドットの検出された位置を基準としてマスク１４４をかけてマスク内でドットの偏りを検出し、偏りをなくす方向にマスク１４４を移動してから中心を算出する、つまりマスク位置を２パスで決定することにより、マスクサイズをドットサイズに合わせて小さくすることができ、メモリが少なくて済むと共にノイズによる誤差がより小さくなる。
【０２５５】
また、上記のように形状が既知のドットを２値化したときのパターン形状からその中心位置の存在領域を求める場合、中心存在領域の広さはパターンによって大きく異なってくる。そこで、図３２の（Ｃ）に示すように、中心代表点を中心存在領域の広さに応じて重み付けし、その確からしさをマーカ真中心検出に反映させるようにしても良い。
【０２５６】
例えば、図３２の（Ｂ）に丸数字３で示すようなパターンの場合には、ドット中心存在領域は非常に小さな領域であり、よって非常に信頼性が高いが、同図に丸数字４で示すパターンの場合には、この領域が非常に大きいので信頼性は非常に低くなる。そこで、この中心存在領域の面積に対応して、それぞれ重みを付ける。例えば、丸数字４で示すパターンの場合の中心代表点の重みを「１」としたならば、１のパターンでは「２．５」、２のパターンでは「１．５」、３のパターンでは「５．０」、５のパターンでは「１．３」、６のパターンでは「１．３」、７のパターンでは「１．５」と重み付けをする。このように中心代表点を重み付けすることで、求められるデータ読み取り基準点の信頼性をこのドットの形状に対応した信頼性を持って計算することができるようになる。
【０２５７】
このように、検出されたドットのパターン形状によって異なるその中心代表点の信頼性を重みにしてデータ読み取り基準点を推定することにより、推定精度を高めることができる。
【０２５８】
また、誤差最小化部１３０は、図３４の（Ａ）に示すように、上記のようにしてマーカ概中心に基づいてドット中心検出部１２８により実際に算出されたドットの中心点（重心代表点位置１５０）と、推定されるデータ読み取り基準点（この場合、マーカ真中心１５２）と、フォーマットに基づいて定められるドットの推定中心点との誤差が最小になるように、データ読み取り基準点を決定するものであり、この場合に、最小自乗法を使うことで、非常に高精度にデータ読み取り基準点を算出することができる。
【０２５９】
ここで、この最小自乗法を使ったデータ読み取り基準点（この場合、マーカ真中心）の算出法につき簡単に説明する。
【０２６０】
今、図３４の（Ｂ）に示すように、Ｍ１  ’を左側推定マーカ真中心、Ｍ２  ’を右側推定マーカ真中心、Ｄｉ  をパターンドット１４のｉ番目のドット中心、ｄｉ  をパターンドット１４のｉ番目のドットのマーカ間分割比とする。
【０２６１】
推定マーカ真中心Ｍ１  ’，Ｍ２  ’から求めたドット中心Ｄｉ  ’は、
【数２】
0003568508.tif 000003
【０２６２】
ドットパターン中心Ｄｉ  との推定誤差εｉ  を用いて、誤差の２乗和Ｅは、
【数３】
0003568508.tif 000004
と表される。
【０２６３】
そこで、このＥを最小化するＭ１  ’，Ｍ２  ’を求める。
【０２６４】
【数４】
0003568508.tif 000005
【０２６５】
ここで、
【数５】
0003568508.tif 000006
とおくと、
（１）より
Ａｘ１  ’＋Ｂｘ２  ’＝Ｐ                        …（３）
（２）より
Ｂｘ１  ’＋Ｃｘ２  ’＝Ｑ                        …（４）
（３）×Ｃ−（４）×Ｂより
【数６】
0003568508.tif 000007
（４）×Ａ−（３）×Ｂより
【数７】
0003568508.tif 000008
【０２６６】
同様にして
【数８】
0003568508.tif 000009
とおくと、
【０２６７】
【数９】
0003568508.tif 000010
となり、推定マーカ真中心Ｍ１  ’及びＭ２  ’の位置座標（ｘ１  ’，ｙ１  ’）及び（ｘ２  ’，ｙ２  ’）が算出される。
【０２６８】
このように、算出された各パターンドットの中心位置の不確定性が、ずれ量の自乗の総和を最小自乗法によって最小化することにより相殺され、データ読み取り基準点の推定精度を高めることができる。
【０２６９】
さらに、数式を簡単にする方法として、以下に述べる方法もある。
【０２７０】
今、図３５の（Ａ）に示すように、記録媒体上の座標系において、Ｄｄｉ（ｕｉ  ）を設計上のドット位置、Ｕを第一単位ベクトル、Ｏを原点位置とし、また、同図の（Ｂ）に示すように、撮像面上の座標系において、Ｄｏｉ（ｘｉ  ，ｙｉ  ）を観測上のドット位置、Ｕ’（ｕｘ  ’，ｕｙ  ’）を第一推定単位ベクトル、Ｏ’（ｏｘ  ’，ｏｙ  ’）を推定原点位置、Ｄｏｉ’（ｘｉ  ，ｙｉ  ）を推定ドット位置とする。
【０２７１】
ここで、設計上のドット位置と、推定される基準点位置、及び単位ベクトルによって求められる推定ドット位置Ｄｏｉ’は、次式によって与えられる。
【０２７２】
【数１０】
0003568508.tif 000011
【０２７３】
また、観測上のドット位置Ｄｏｉとの推定誤差εｉ  を用いて、誤差の２乗和Ｅは、
【数１１】
0003568508.tif 000012
と表される。
【０２７４】
そこで、このＥを最小化するＵ’，Ｏ’を求める。
【０２７５】
【数１２】
0003568508.tif 000013
【０２７６】
ここで、Ｕ’，Ｏ’を独立に求めるため、
【数１３】
0003568508.tif 000014
とすると、（５）式及び（６）式は、次式のようになる。
【０２７７】
【数１４】
0003568508.tif 000015
【０２７８】
同様にして、
【数１５】
0003568508.tif 000016
【０２７９】
このように計算を少なくして、Ｕ’及びＯ’を求めることができる。
【０２８０】
ここで、マーカ対と１０個のパターンドットが図３６のような関係で並んでいた場合の例を説明する。
【０２８１】
まず、各パターンドットのドット読み取り点Ｕｉ  は、左側のマーカ概中心から各々７，１０，１３，１６，１９，２４，２７，３０，３３，３６であり、Ｎ＝１０であるから、
【数１６】
0003568508.tif 000017
は、２１．５となる。
【０２８２】
ところが、ドットの欠けや汚れ等の原因によって、パターンドット検出部１２６において、左から２番目（Ｕｉ  ＝１０）のドットが検出されなかったとすると、Ｎは９となり、Ｕｉ  も７，１３，１６，１９，２４，２７，３０，３３，３６となる。従って、この場合、Ｎ＝９であるから、上記（１１）式の解は２２．７８となる。
【０２８３】
つまり、パターンドット検出部１２６において検出されるドットが１０個全て検出された場合は、上記（７）式及び（９）式の分母に見られる
【数１７】
0003568508.tif 000018
の計算は、値が９０２．５で固定となるが、いくつかのドットが検出されなかった場合には、その都度計算が必要である。
【０２８４】
一方、本ドットコードは、紙等の媒体に印刷されることが多く、印刷条件や、印刷後の扱われ方によってドットが欠けたりすることも考えられ、実際に１０個全てのドットが検出されない可能性もある。
【０２８５】
従って、装置の中に、上記（１２）式を計算させる手段が必要となっているのだが、この計算は、２乗の値を加算する処理であることから、各項の値が大きく、演算精度を考慮すると、レジスタのビット数をかなり大きくとらなければならず、実際に装置を構成する場合のハードウェアの規模も大きくなってしまう。
【０２８６】
そこで、ドット検出で検出されなかったドットがあった場合、ドット読み取り点をそのドットのドット中心とする。そして、全てのドットが検出されたとして処理を行うようにする。
【０２８７】
こうすることにより、常に、Ｎ＝１０となり、また上記（１２）式の解も９０２．５となるので、上記（７）式乃至（１０）式の分母は全て固定値とすることができる。
【０２８８】
つまり、（１２）式の計算をさせる手段が不要となるだけでなく、（７）〜（１０）式の除算は定数による除算で、逆数の乗算に置き換えることが可能となり、一層ハードウェア化に適したものとなる。
【０２８９】
以下、これを図３７のフローチャートを参照して説明する。
【０２９０】
まず、マーカ対の概中心から１０個のパターンドットの読み取り点をそれぞれ算出する（ステップＳＴ１）。但し、ここでは黒ドットだけでなく、その間にある白画素も読み取り点として加えている。そして、ドット検出カウンタｎと検出エラーカウンタｅｒｒを「０」にリセットする（ステップＳＴ２）。
【０２９１】
次に、３０個の各読み取り点を順次処理していくが、その点が黒ドット上の点であるかどうかを判断し（ステップＳＴ３）、そうでなかった場合、その画素が白か黒かを判断する（ステップＳＴ４）。もし黒であれば、ドットでない点を黒として読み取っているので、正しくないとして、検出エラーカウンタｅｒｒをカウントアップし（ステップＳＴ５）、また画素が白であればカウントアップしない。そして、読み取った画素数をインクリメントつまりドット検出カウンタｎをカウントアップし（ステップＳＴ６）、全ての画素の読み取りが終わったかどうかを、このドット検出カウンタｎが「３０」となっているかどうかによって判断する（ステップＳＴ７）。処理画素数が３０未満の時は、上記ステップＳＴ３へ戻って、次の読み取り点を処理する。
【０２９２】
一方、上記ステップＳＴ３において、黒ドット上の画素を読んだと判断された時には、読み取った画素が黒であるかどうか判断することにより、ドットが正しく読み取れたかどうか判断する（ステップＳＴ８）。ここで正しくドットが読み取れた時は、そのまま連結画素の重心算出を行う（ステップＳＴ９）。
【０２９３】
上記ステップＳＴ８でドットが正しく読み取れなかったと判断された場合には、読み取り点の４近傍画素で黒画素を探索し（ステップＳＴ１０）、見つかった場合には（ステップＳＴ１１）、上記ステップＳＴ９へ進んで、連結画素の算出を行う。また、見つからなかった場合には、ドット読み取り点をドット中心とし（ステップＳＴ１２）、検出エラーカウンタｅｒｒをカウントアップする（ステップＳＴ１３）。そして、上記ステップＳＴ６へ進んで、読み取った画素数を計数するドット検出カウンタｎをカウントアップトした後、ステップＳＴ７で、全ての画素の読み取りが終わったかどうかを、ドット検出カウンタｎが「３０」となっているかどうかによって判断する。処理画素数が３０未満の時は、上記ステップＳＴ３へ戻って、次の読み取り点を処理する。
【０２９４】
こうして、全ての画素の読み取りを終了したならば、ドットでない画素が黒であった場合の数と、ドット位置とその４近傍に黒画素が存在しなかった数との合計値、つまり検出エラーカウンタｅｒｒの値を閾値（ＭＡＸ＿ＥＲＲ）と比較する（ステップＳＴ１４）。ちなみに、閾値ＭＡＸ＿ＥＲＲは、２５ぐらいが適当であることが判っている。
【０２９５】
そして、検出カウンタｅｒｒの値が閾値以下であれば、１０個のドット中心を用いて最小自乗誤差法でデータ読み取り基準点の算出を行い（ステップＳＴ１５）、また、閾値を越えたときは、そのパターンコードでは所望の精度でデータ読み取り基準点を検出できないと判断して、次のマーカ対の処理へ移る。
【０２９６】
以上のようにして、データ読み取り基準点が算出されたならば、データ読み取り部４２は、図１０に示すように、このデータ読み取り基準点に基づいて、まずアドレスドット読み込み部１５４でアドレスドット１８を読み取ってブロックアドレスを求め、データ読み込み部１５６によってそのブロック２０のデータドットを読み込む。そして、読み込んだデータを再生部４４に供給して再生出力する。
【０２９７】
ここで、アドレスドット読み込み部１５４は、アドレスドット読み取り部１５８、エラー訂正部１６０、判定部１６２、及びアドレス決定部１６４から構成されている。
【０２９８】
アドレス読み取り部１５８は、上下隣接マーカの真中心間を分割してアドレスドット１８を検出し、アドレスを読み取るものであり、この読み取ったアドレスが既に読み込んだブロックのアドレスであった場合には、処理を中止して、次フレームへ処理を移行する。なお、このアドレスドットの読み取りにおいても、前述したパターンドット１４の読み取りと同様に、ツリー探索の手法を応用できる。
【０２９９】
また、エラー訂正部１６０は、アドレスドット１８にＣＲＣ（エラー検出）符号やＢＣＨ（エラー訂正）符号等が付されている場合に、アドレスドット読み取り部１５８で正しいアドレスが読み取れたかどうかの判定や読み取られたアドレスの訂正を行う。
【０３００】
判定部１６２は、アドレスがシステムで取り扱うデータのアドレスの範囲内であるかどうか判定する。例えば、アドレス０〜１００までのデータしか扱わないシステムで、−５や２００などのアドレスを排除する。あるいは、１つのフレームに１０個のブロックしか入らないこと及びアドレスが順番に記録されていることが判っていれば、例えばアドレスとして２，３，５，６，２５，９が得られたとき、連続性等からアドレス２５が範囲外であることが判り、このアドレス２５のブロックのデータを除外する。
【０３０１】
アドレス決定部１６４は、判定部１６２により正しいアドレスと判定されたアドレスを、データ読み込み部１５６に与える。
【０３０２】
なお、上記エラー訂正部１６０では、アドレスドット読み取り部１５８で読み取ったアドレスドット１８にエラーが検出された場合、周囲のブロックのアドレスからそのブロックのアドレスを算出して訂正することができるが、この機能を利用して、上記アドレスドット読み取り部１５８で適宜アドレスを省略して読み取り、少なくとも２つ以上のブロックのアドレスを同時に決定するようにしても良い。即ち、ブロックがアドレス順に整列して記録されている場合、あるブロックのアドレスは周囲のブロックのアドレスから容易に推定することができるので、アドレスドット１８を適宜省略して読み取っても問題はなく、その分、アドレスドットの読み取り処理を軽減することができる。さらには、図９の（Ｃ）に示すように、アドレスドット１８を間引いて記録することができる。
【０３０３】
ところで、コードを形成する各ブロック２０の左側アドレスドット１８には、図３８の（Ａ）に示すように、そのブロックのアドレスが記録されている。そして、前述したようなダブルハイトで記録されたコードの一番右側のアドレスコードには、次のブロックのアドレスが記録されている。そこで、最終ブロック１６６の右側のアドレスドット１８には、そのブロックのアドレスを記録しておくことにより、読み取り時にブロック２０の左右のアドレスの内容を比較することによって最終ブロック１６６を検出することができる。
【０３０４】
あるいは、図３８の（Ｂ）に示すように、読み取りブロック対のアドレス間に最終ブロックアドレスを示す相対関係を設け、読み取り時にブロック対のアドレスの内容を比較することにより最終ブロックを検出することもできる。
【０３０５】
例えば、６８個のブロックをダブルハイトで記録する場合、アドレス１〜３４を一列に並べ、アドレス３５〜６８を一列に並べて、これらを２重につまりダブルハイトで記録すると、最初に取り込まれるフレーム画像からアドレス１と３５のブロックが隣り合って検出されるので、一列は３５−１つまり３４個のブロックからなり、二列分ということで、その倍の６８個のブロックが存在することがすぐに判る。よって、メモリを確保すべき量や、どのブロックまで処理したら処理を終了して良いのかが最初に判るので、無駄な処理がなくなるという効果を奏することができる。
【０３０６】
勿論、これらはダブルハイトで記録されていない場合であっても、同様である。
【０３０７】
このように、アドレスドット１８のフォーマットとして、隣接するブロックのアドレスがコード全体のブロック数と所定の関係を有するようなコードとし、隣接するアドレスから総ブロック数が求められることにより、必要なメモリを割り付けることができる。また、最終ブロックを検出することができるようになるため、無駄な処理を省くことができる。
【０３０８】
あるいは、アドレスドット１８を、例えば１／６８のように、ブロックの総数が判るようなフォーマットで記録しても良い。
【０３０９】
一方、データ読み込み部１５６は、４つのデータ読み取り基準点を結んで囲まれた領域の各辺を等分割してメッシュを切り、データ読み取り点としてデータコードを読み取っていくものであるが、この場合、図３８の（Ｃ）に示すように、データ読み取り点１６８の画素がノイズ等によって実際のデータと異なって読み取られることがある。
【０３１０】
そこで、このデータ読み取り点１６８のデータをそのまま読み取りデータとするのではなく、そのデータ読み取り点１６８に対して回りの８近傍の画素を使い、全部で９画素について所定の計算式、例えば平均を求めて、この画素のデータを決定する。例えば、データ読み取り点１６８の画素が白抜けであっても、回りの８画素が黒になっていれば、このデータ読み取り点１６８のデータは８／９となり、これは０．５より大きいので、黒画素つまり「１」として読み取れる。
【０３１１】
また、所定の計算式としては、重み付け平均等であっても良い。例えば、もう少し大きい領域、近傍２４画素を取って、内側の８画素のデータには×２倍して、外側の１６画素のデータには×１倍にして、平均をとるというようにしても良い。
【０３１２】
このように、データ読み取り基準点から算出された読み取り点の近傍も同時に読み取り、所定の計算式によりデータ読み取り点の属性を決定することにより、劣化ドットの読み取りに強くなる。
【０３１３】
以上実施の形態に基づいて本発明を説明したが、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形や応用が可能である。
【０３１４】
【発明の効果】
以上詳述したように、本発明によれば、撮像された画像における複数個のブロックの中から光学的ディストーションの影響が小さいブロックを選択して読み取るようにしているので、読み取りエラーが発生する確率を低くすることができる。従って、高密度記録されたコードパターンを読み取って、正しく情報を再生できる情報再生システムを提供することができる。
【図面の簡単な説明】
【図１】（Ａ）乃至（Ｃ）はそれぞれ情報記録媒体上に光学的に読み取り可能に記録される２次元コード（ドットコード）の例を示す図である。
【図２】（Ａ）乃至（Ｅ）はそれぞれ図１の（Ｃ）に示したようにブロック化した場合のマーカの配置例を示す図である。
【図３】（Ａ）及び（Ｂ）はそれぞれマーカを縞状に省略した場合のコード例を示す図である。
【図４】マーカを市松状に省略した場合のコード例を示す図である。
【図５】（Ａ）乃至（Ｃ）はそれぞれパターンドットの例を示す図である。
【図６】（Ａ）はパターンドットの変調を説明するための図であり、（Ｂ）はパターンドットの別の例を示す図である。
【図７】（Ａ）及び（Ｂ）はそれぞれ一部のパターンドットの記録点に位相ずれを設けた例を示す図である。
【図８】（Ａ）及び（Ｂ）はアドレスドットの一例を示す図であり、（Ｃ）及び（Ｄ）はそれぞれ別の記録例を示す図である。
【図９】（Ａ）乃至（Ｃ）はそれぞれアドレスドットのさらに別の記録例を示す図である。
【図１０】実施の形態の情報再生システムのブロック構成図である。
【図１１】（Ａ）乃至（Ｄ）はイロージョン処理を説明するための図である。
【図１２】イロージョン処理とラベリング処理を説明するための図である。
【図１３】（Ａ）乃至（Ｃ）はマーカ中心部の抽出方法を説明するための図である。
【図１４】（Ａ）はストリーク処理を説明するための図であり、（Ｂ）はマーカ抽出処理の別の手法を説明するための図である。
【図１５】（Ａ）はマーカ抽出処理におけるフレームの処理を中止する場合を説明するための図であり、（Ｂ）及び（Ｃ）はそれぞれマーカ概中心の算出法を説明するため図である。
【図１６】（Ａ）及び（Ｂ）はマーカがフレーム端にかかって欠損した場合の概中心の補正法を説明するための図であり、（Ｃ）はそのような補正の別の例において用いられるテーブルを示す図である。
【図１７】（Ａ）はフレーム中の概中心位置補正処理を行うマーカを説明するための図、（Ｂ）はマーカとパターンドットの関係を示す図であり、（Ｃ）及び（Ｄ）は対マーカ存在領域を説明するための図である。
【図１８】図１０中のマーカ中心検出部のブロック構成図である。
【図１９】（Ａ）乃至（Ｃ）はそれぞれ外挿による対マーカ位置の算出を説明するための図である。
【図２０】（Ａ）はベースマーカ対を説明するための図であり、（Ｂ）及び（Ｃ）はダブルハイトを説明するための図である。
【図２１】（Ａ）及び（Ｂ）はベースマーカ対の選択時の基準マーカの選択法を説明するための図であり、（Ｃ）は基準マーカの片側にのみマーカ候補が見つかった場合の隣接マーカの探索法を説明するための図である。
【図２２】（Ａ）は仮想マーカの概中心を説明するための図であり、（Ｂ）及び（Ｃ）はそれぞれ２つ以上のベースマーカ対が選択できる場合のベースマーカ対の再選択法を説明するための図である。
【図２３】（Ａ）及び（Ｂ）はそれぞれコードがスキューしているときのベースマーカ対の再選択法を説明するための図である。
【図２４】（Ａ）及び（Ｂ）はブロックが整列されていない場合の選択されたマーカ組及びそれらの記憶法を説明するための図であり、（Ｃ）及び（Ｄ）はブロックが整列されている場合の選択されたマーカ組及びそれらの記憶法を説明するための図である。
【図２５】（Ａ）及び（Ｂ）はそれぞれ処理対象ブロックを選択するためのマーカ組の選択法を説明するための図である。
【図２６】（Ａ）はスキャン方向側のマーカ候補から基準マーカを選択した場合のブロックの読取法を説明するための図であり、（Ｂ）は光学的ディストーション等があった場合のブロックの読み取り順を説明するための図である。
【図２７】（Ａ）は選択されたブロックの読み取りに失敗した場合のブロック再選択処理を説明するための図、（Ｂ）はマーカ１６とパターンドット１４の位置関係を示す図であり、（Ｃ）はドット読み取り位置とドットの中心位置との関係を示す図である。
【図２８】（Ａ）及び（Ｂ）はマーカ概中心からパターンドットを利用したデータ読み取り基準点の推定法を説明するための図であり、（Ｃ）は別の推定法を説明するための図である。
【図２９】（Ａ）及び（Ｂ）はそれぞれさらに別のデータ読み取り基準点推定法を説明するための図であり、（Ｃ）及び（Ｄ）はツリー探索法を説明するための図である。
【図３０】（Ａ）及び（Ｂ）はそれぞれ限定的なツリー探索を説明するための図であり、（Ｃ）はパターンドットの別の配列を説明するための図である。
【図３１】（Ａ）は黒ドット検出部の動作を説明するための図、（Ｂ）は黒ドット検出部の別の動作を説明するための図であり、（Ｃ）はマーカ概中心再算出部の動作を説明するための図である。
【図３２】（Ａ）及び（Ｂ）はドット中心算出部でのドット中心位置存在領域の推定動作を説明するための図であり、（Ｃ）はドット中心位置存在領域と中心代表点の信頼性を説明するための図である。
【図３３】（Ａ）はドット中心算出部でのさらに別の中心算出法としての重心算出を説明するための図であり、（Ｂ）乃至（Ｄ）は重心算出の別の手法を説明するための図である。
【図３４】（Ａ）及び（Ｂ）は最小自乗法を使ったデータ読み取り基準点の算出法を説明するための図である。
【図３５】（Ａ）は記録媒体上の座標系を示す図であり、（Ｂ）は撮像面上の座標系を示す図である。
【図３６】マーカ対と１０個のパターンドットの関係を示す図である。
【図３７】ドット検出で検出されなかったドットがあった場合、ドット読み取り点をそのドットのドット中心とし、全てのドットが検出されたとして処理を行う場合の、動作フローチャートである。
【図３８】（Ａ）及び（Ｂ）はそれぞれブロックの並べ順並びにその際のブロックアドレスの記録内容の例を示す図であり、（Ｃ）はデータドットの読み取り動作を説明するための図である。
【符号の説明】
１０…データコード、  １２…パターンコード、  １４…パターンドット、  １６…マーカ、  １８…アドレスドット、  ２０…ブロック、  ２２…点、  ２４…ドット位置基準点、  ２６…ガイドコード、  ２８…反転コード、  ３０…訂正コード、  ３２…固定パターン、  ３４…情報記録媒体、  ３６…ドットコード、  ３８…画像入力部、  ４０…データ読み取り基準点決定部、  ４２…データ読み取り部、  ４４…データ再生部、  ４６…撮像部、  ４８…等化，２値化部、  ５０…マーカ抽出部、  ５２…マーカ概中心算出部、  ５４…マーカ検出部、  ５６…マーカ中心検出部、  ５８…マーカ存在エリア、  ６０…フレーム、  ６２…マーカ中心部、  ６４…マーカの存在する可能性のある領域、  ６６…重心、  ６８…外接矩形、  ７０…外接矩形中心点、  ７２…フレーム端、７４…欠損によりずれて検出されたマーカ概中心、  ７６…正しいマーカ概中心、  ７８…概中心補正領域、  ８０…フレーム端で一部が欠落したマーカ、  ８２…処理対象ブロック、  ８４…マーカ対、  ８６…基準マーカ選択部、  ８８…対マーカ存在領域算出部、  ９０…対マーカ候補検出部、  ９２…ベースマーカ対選択部、  ９４…マーカ組選択部、  ９６…基準マーカ、  ９８…対マーカ存在領域、  １００…対マーカ、  １０２…誤マーカ、  １０４…外挿ベクトル（ｅｘｖ）、  １０６…マーカ探索領域、  １０８…修正拡張ベクトル、  １１０…ベースマーカ対、  １１２…撮像部視野、  １１４…領域、  １１６…読み取り失敗ブロック、  １１８…再選択ブロック、  １２０…コードライン、  １２２…読取ライン、  １２４…ドット読取位置、  １２６…ドット中心位置、１２８…ドット中心算出部、  １３０…誤差最小化部、  １３２…黒ドット検出部、  １３４…ドット読み取り点、  １３６…マーカ概中心再算出部、  １３８…バッファ、  １４０…エラー検出部、  １４２…選択部、  １４４…マスク、  １４６…マスク内黒画素重心、  １５０…重心代表点位置、  １５２…推定されるマーカ真中心、  １５４…アドレスドット読み込み部、  １５６…データ読み込み部、  １５８…アドレスドット読み取り部、  １６０…エラー訂正部、１６２…判定部、  １６４…アドレス決定部、  １６６…最終ブロック、  １６８…データ読み取り点。
【図１】
0003568508.tif 000019
【図２】
0003568508.tif 000020
【図３】
0003568508.tif 000021
【図４】
0003568508.tif 000022
【図５】
0003568508.tif 000023
【図６】
0003568508.tif 000024
【図７】
0003568508.tif 000025
【図８】
0003568508.tif 000026
【図９】
0003568508.tif 000027
【図１０】
0003568508.tif 000028
【図１１】
0003568508.tif 000029
【図１２】
0003568508.tif 000030
【図１３】
0003568508.tif 000031
【図１４】
0003568508.tif 000032
【図１５】
0003568508.tif 000033
【図１６】
0003568508.tif 000034
【図１７】
0003568508.tif 000035
【図１８】
0003568508.tif 000036
【図１９】
0003568508.tif 000037
【図２０】
0003568508.tif 000038
【図２１】
0003568508.tif 000039
【図２２】
0003568508.tif 000040
【図２３】
0003568508.tif 000041
【図２４】
0003568508.tif 000042
【図２５】
0003568508.tif 000043
【図２６】
0003568508.tif 000044
【図２７】
0003568508.tif 000045
【図２８】
0003568508.tif 000046
【図２９】
0003568508.tif 000047
【図３０】
0003568508.tif 000048
【図３１】
0003568508.tif 000049
【図３２】
0003568508.tif 000050
【図３３】
0003568508.tif 000051
【図３４】
0003568508.tif 000052
【図３５】
0003568508.tif 000053
【図３６】
0003568508.tif 000054
【図３７】
0003568508.tif 000055
【図３８】
0003568508.tif 000056