画像生成装置、画像処理装置、プログラム及び記録媒体
【課題】符号画像に埋め込まれた情報を復元して、当該情報が埋め込まれた符号画像内の位置を特定する場合に、限られた長さの基本符号列を用いて、当該基本符号列が埋め込まれる範囲より広い範囲における位置が特定される符号画像を生成する画像処理装置を提供する。
【解決手段】予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得し、取得した基本符号列を複数繰り返してなる第1符号列、及び、基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する画像生成装置である。
【解決手段】予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得し、取得した基本符号列を複数繰り返してなる第1符号列、及び、基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する画像生成装置である。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像生成装置、画像処理装置、プログラム及び記録媒体に関する。
【背景技術】
【0002】
紙などの記録媒体の表面に、当該表面上の位置を表す情報を埋め込んだ符号画像を形成する技術が提案されている。このような技術によれば、媒体表面の一部分に形成された符号画像をカメラ等で読み取って、当該読み取った画像内に埋め込まれた情報を復元することによって、当該読み取った部分の記録媒体内における位置が特定される。
【0003】
このような技術においては、符号画像に埋め込む情報として、例えばM系列などの符号列が用いられる。このような符号列は、その中の一部に基づいて、当該一部が符号列全体に占める位置を一意に特定可能であるという性質がある。符号画像全体にわたってこのような符号列が埋め込まれていれば、この性質を利用して、符号画像の一部分に埋め込まれた情報を復元することによって、当該部分が符号画像全体の中でどの位置に存在するのかが特定される。M系列を利用した媒体上の位置特定技術としては、例えば特許文献1,2,3及び4などが挙げられる。
【特許文献1】特表2003−511762号公報
【特許文献2】特表2004−535011号公報
【特許文献3】特開平10−187912号公報
【特許文献4】特開2007−179111号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
本発明は、符号画像に埋め込まれた情報を復元して、当該情報が埋め込まれた符号画像内の位置を特定する場合に、限られた長さの基本符号列を用いて、当該基本符号列が埋め込まれる範囲より広い範囲における位置が特定される符号画像を生成する画像生成装置及びプログラム、当該符号画像に埋め込まれた情報を復元する画像処理装置、並びに当該符号画像が形成された記録媒体を提供することを目的の一つとする。
【課題を解決するための手段】
【0005】
請求項1記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段と、前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段と、を含むことを特徴とする画像生成装置である。
【0006】
請求項2記載の発明は、請求項1記載の画像生成装置であって、前記補充符号列は、予め定められた長さで0ビットが連続する符号列であって、前記基本符号列の前に付加されることを特徴とする。
【0007】
請求項3記載の発明は、請求項2記載の画像生成装置であって、前記符号画像生成手段は、前記符号画像を分割してなる複数の単位領域のそれぞれに、予め定められた単位ビット長の符号列を埋め込んで前記符号画像を生成し、前記補充符号列は、前記単位ビット長の整数倍に相当する長さで0ビットが連続する符号列であることを特徴とする。
【0008】
請求項4記載の発明は、請求項1から3のいずれか一項記載の画像生成装置であって、前記符号画像生成手段は、前記第1符号列及び第2符号列が埋め込まれる領域に対応する領域に、さらに、前記第1符号列に補充符号列を付加した符号列を繰り返してなる第3符号列、及び、前記第2符号列に補充符号列を付加した符号列を繰り返してなる第4符号列のそれぞれを埋め込んだ符号画像を生成することを特徴とする。
【0009】
請求項5記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像の一部領域を読み取って得られる読み取り画像を取得する画像取得手段と、前記読み取り画像に埋め込まれた情報を復元して、前記第1符号列及び第2符号列それぞれにおいて互いに対応する位置を占める部分列を取得する手段と、前記各部分列が前記基本符号列内に占める位置を特定する手段と、前記特定した前記各部分列の位置に基づいて、前記第2符号列内における前記部分列の位置を算出する手段と、を含むことを特徴とする画像処理装置である。
【0010】
請求項6記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段、及び前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段、としてコンピュータを機能させるためのプログラムである。
【0011】
請求項7記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像が形成された記録媒体である。
【発明の効果】
【0012】
請求項1、5、6及び7記載の発明によれば、符号画像に埋め込まれた情報を復元して、当該情報が埋め込まれた符号画像内の位置を特定する場合に、限られた長さの基本符号列を用いて、当該基本符号列が埋め込まれる範囲より広い範囲における位置が特定される。
【0013】
請求項2記載の発明によれば、符号画像に埋め込まれた情報を復元する際に、補充符号列に対応する部分が得られた場合に、当該部分が容易に特定される。
【0014】
請求項3記載の発明によれば、単位領域ごとに符号画像に埋め込まれた符号列の復元及び位置の特定が行われる。
【0015】
請求項4記載の発明によれば、請求項1記載の発明と比較して、さらに広い範囲における位置が特定される符号画像が生成される。
【発明を実施するための最良の形態】
【0016】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0017】
まず、本実施形態に係る画像生成装置によって生成される、情報が埋め込まれた符号画像(以下、コード画像という)について、説明する。コード画像に埋め込む対象となる情報(以下、コード情報という)は、符号化された情報であって、ビット列によって表される。本実施形態に係る画像生成装置は、コード情報を埋め込んだコード画像を生成し、当該生成したコード画像をプリンタ等の画像形成装置に対して出力し、紙などの記録媒体上に当該コード画像を形成させる。これによって、コード画像が形成された記録媒体が作成される。記録媒体上に形成されたコード画像は、例えばスキャナやカメラなどの画像読み取り装置によって読み取られる。そして、本実施形態に係る画像処理装置は、当該読み取られたコード画像を解析して、その中に埋め込まれたコード情報を復元する。
【0018】
具体的に、コード情報は、コード画像内における位置を特定するための情報(X方向の位置座標を示すX座標情報及びY方向の位置座標を示すY座標情報)を含んでいる。また、画像読み取り装置は、例えばペン型のデバイスの先端部分に内蔵されたカメラなどであって、記録媒体の表面に形成されたコード画像の一部分を読み取る。画像処理装置は、この読み取られた画像からX座標情報及びY座標情報を復元することによって、ペン型デバイスが記録媒体のどの位置に接しているかを特定する。
【0019】
図1は、本実施形態におけるコード画像の一例を示す部分拡大図である。同図に示されるように、コード画像内には複数の単位領域(ブロック)が画定されている。すなわち、コード画像は予め定められた大きさの複数のブロックに分割されている。このブロックは、コード画像を格子状に分割してなる正方形の領域になっており、各ブロックには、予め定められた数の点画像(ドット画像)が含まれている。図1においては、このブロックを画定する線(各ブロックの境界)が実線で表されているが、この境界線は実際にはコード画像上には描画されない。本実施形態では、各ブロック内におけるドット画像の配置パターンによって、コード情報が表される。具体的に、各ブロック内には3行3列で計9箇所のドット配置位置が設定されており、この9箇所のうちのいずれか3箇所に実際にドット画像が配置されている。9箇所の中から3箇所を選択する組み合わせは9C3=84通り存在し、この数は2の6乗である64を上回っているので、1個のブロックにつき6ビットの情報が埋め込まれることになる。なお、この図に示すコード情報の埋め込み方法は一例であって、本実施形態において、コード情報はその他の態様でコード画像内に埋め込まれることとしてもよい。
【0020】
コード画像内に埋め込まれたコード情報の復元は、このブロック単位で実行される。すなわち、本実施形態に係る画像処理装置は、解析対象のコード画像を取得すると、コード画像内から検出された各ドット画像の位置に基づいて、コード画像内における各ブロックの位置を特定する。具体的に、画像処理装置は、各ブロックの境界を仮決定し、当該仮決定された境界に従って分割される各ブロック内に存在するドット画像の数をカウントする。このとき、仮決定されたブロック境界が正しければ、ドット画像の位置検出の際のエラーによって生じる例外を除いて、全てのブロック内に3個のドット画像が検出されるはずである。そこで、画像処理装置は、取得したコード画像内に、3個以外の数のドット画像を含むブロックが予め定められた閾値以上の割合で含まれている場合、仮決定したブロック境界が間違っていたと判定する。
【0021】
そして、仮決定されたブロック境界が間違っていると判定された場合には、画像処理装置は、ブロック境界の位置をドット画像1個分(ここではブロック1辺の1/3)に対応する距離だけ予め定められた方向(X方向又はY方向)にずらして、再び各ブロック内のドット画像の数が予め定められた数に一致するかの判定を実行する。このような処理を繰り返すことによって、画像処理装置は、正しいブロック境界を判定し、コード画像を複数のブロックに分割する。そして、複数のブロックのそれぞれについて、当該ブロック内における3個のドット画像の配置パターンに対して予め対応づけられたビット列を、当該ブロックに埋め込まれているコード情報として復元する。
【0022】
また、本実施形態では、画像読み取り装置によって読み取られた画像の回転を検出する(すなわち、コード情報が埋め込まれた際のコード画像本来の向きを特定する)ために、予め定められた特定のドット画像の配置パターンが、画像回転検出用パターンとしてコード画像内に配置される。そして、この画像回転検出用パターンを90度ずつ回転させて得られる3種類の配置パターンについては、制限パターンとしてその使用が制限される。これらの4種類のドット画像の配置パターンは、回転させることで互いに一致し、かつ、回転させない状態では互いに異なるパターンになっている。そのため、本実施形態に係る画像処理装置は、コード画像を取得してその中に埋め込まれたコード情報を復元する際に、制限パターンを検出した場合には、当該制限パターンが画像回転検出用パターンに一致するように、取得したコード画像全体を回転させる。これにより、取得した画像の向きがコード画像本来の向きに補正される。
【0023】
本実施形態においては、この画像回転検出用パターンを持つブロック(以下、画像回転検出用ブロックBlという)は、縦横それぞれの方向に4ブロックごとに繰り返し配置される。すなわち、コード画像の中から縦4行、横4列で計16個のブロックを含む範囲が画像読み取り装置によって読み取られた場合、その中には1個の画像回転検出用ブロックBlが含まれることになる。したがって、最低限4行4列のブロックを含む画像が読み取られれば、その中に含まれる画像回転検出用パターンの向きによって、読み取られた画像の向きが特定されることになる。
【0024】
以下、本実施形態において、符号画像内に埋め込まれるX座標情報及びY座標情報の具体例について、説明する。X座標情報及びY座標情報のそれぞれは、4個の符号列(以下、座標ブロック列という)によって表される。具体的に、X座標情報はX座標ブロック列X1,X2,X3及びX4によって表され、Y座標情報はY座標ブロック列Y1,Y2,Y3及びY4によって表される。また、後述するように、X座標情報及びY座標情報は、画像回転検出用ブロックBlを除く各ブロックに対して、1ブロック当たり3ビットの情報を単位として埋め込まれる。したがって、X座標情報及びY座標情報のそれぞれを構成する座標ブロック列は、この3ビットのビット列を単位として構成される。すなわち、各座標ブロック列は、各桁が0から7までの数字によって表される数列に相当し、符号画像内において順に並んだ各ブロックに対して、この各桁の数字を表す3ビットの情報が順に埋め込まれることになる。
【0025】
これら4個の座標ブロック列のそれぞれが埋め込まれるブロックの位置は、画像回転検出用ブロックBlの位置に応じて決定される。図2は、X座標ブロック列及びY座標ブロック列のそれぞれが埋め込まれる領域と、画像回転検出用ブロックBlと、の位置関係を示すブロック配置図である。同図に示されるように、X座標情報を構成する4個の座標ブロック列は、それぞれX方向に沿って延在するブロック行領域に埋め込まれている。そして、これらの座標ブロック列のうち、第1X座標ブロック列X1は、画像回転検出用ブロックBlを含んだブロック行領域Rx1に埋め込まれている。さらに、その下のブロック行領域Rx2に第2X座標ブロック列X2が、ブロック行領域Rx2の一つ下のブロック行領域Rx3に第3X座標ブロック列X3が、ブロック行領域Rx3の一つ下のブロック行領域Rx4に第4X座標ブロック列X4が、それぞれ埋め込まれている。
【0026】
また、Y座標情報を構成する4個の座標ブロック列は、それぞれY方向に沿って延在するブロック列領域に埋め込まれている。具体的に、第1Y座標ブロック列Y1は、画像回転検出用ブロックBlを含んだブロック列領域Ry1に埋め込まれている。さらに、その右隣のブロック列領域Ry2に第2Y座標ブロック列Y2が、ブロック列領域Ry2の右隣のブロック列領域Ry3に第3Y座標ブロック列Y3が、ブロック列領域Ry3の右隣のブロック列領域Ry4に第4Y座標ブロック列Y4が、それぞれ埋め込まれている。
【0027】
ただし、画像回転検出用ブロックBl自体には、画像回転検出用パターンが配置されているため、X座標情報及びY座標情報は埋め込まれない。また、X座標情報を構成する各座標ブロック列は、X方向に沿って互いに対応する領域に埋め込まれる必要がある。つまり、各ブロック行領域に埋め込まれる座標ブロック列の長さ及びX方向に沿った位置を揃える必要がある。そのため、画像回転検出用ブロックBlとX方向に沿った位置が同じブロック(すなわち、ブロック列領域Ry1を構成するブロック)内にも、X座標情報は埋め込まれない。同様に、Y座標情報を構成する各座標ブロック列も、Y方向に沿って互いに対応する領域に埋め込まれる必要があるため、画像回転検出用ブロックBlとY方向に沿った位置が同じブロック(すなわち、ブロック行領域Rx1を構成するブロック)内にも、Y座標情報は埋め込まれない。
【0028】
ここで、ブロック行領域Rx1及びブロック列領域Ry1のいずれにも属さない各ブロックには、X座標ブロック列及びY座標ブロック列の双方が埋め込まれることになる。具体的に、このようなブロック内のドット画像配置パターンによって表される6ビットの情報のうち、ここでは上位3ビットがX座標ブロック列を構成し、下位3ビットがY座標ブロック列を構成するものとする。同様に、ブロック行領域Rx1を構成するブロックのうち、画像回転検出用ブロックBlを除く各ブロックにも6ビットの情報が埋め込まれており、そのうちの上位3ビットが第1X座標ブロック列X1を構成する。また、ブロック列領域Ry1を構成するブロックのうち、画像回転検出用ブロックBlを除く各ブロックにも6ビットの情報が埋め込まれており、そのうちの下位3ビットが第1Y座標ブロック列Y1を構成する。なお、ブロック行領域Rx1を構成するブロックに埋め込まれた情報の下位3ビット、及びブロック列領域Ry1を構成するブロックに埋め込まれた情報の上位3ビットは、X座標情報及びY座標情報以外の、他の情報を表すために用いられてよい。
【0029】
具体例として、画像読み取り装置がコード画像を読み取って得られる4行4列のブロック範囲(以下、読み取り領域という)に含まれるブロックのうち、画像回転検出用ブロックBlを除いた各ブロックに埋め込まれたコード情報を復元した結果が、図3に示すものだったとする。この図においては、画像回転検出用ブロックBlを除く各ブロックから復元された6ビットの情報によって表される0〜63の範囲の数値が、各ブロック内に示されている。このとき、各ブロックに埋め込まれたコード情報の上位3ビットによって表される数値は、各ブロックの数値を8で割った商に対応し、図4(a)に示すものになる。この図の例では、第3X座標ブロック列X3の部分列として「540」が、第4X座標ブロック列X4の部分列として「522」が、第1X座標ブロック列X1の部分列として「066」が、第2X座標ブロック列X2の部分列として「554」が、それぞれ取得される。なお、ここではこれらの部分列の値は、いずれも各桁が3ビットに対応する8進数で表されている。すなわち、各部分列はそれぞれ3ブロック分に埋め込まれた情報に対応する9ビットの情報になっている。これら4個の部分列がX座標ブロック列全体の中のどの位置に現れるかが特定されることによって、読み取り領域のX方向における位置(X座標)が特定される。また、ブロック列領域Ry1から得られた「7」、「5」、「6」はX座標情報以外の情報を表している。
【0030】
さらに、図3に示されるコード情報の下位3ビットによって表される数値は、各ブロックの数値を8で割った余りに対応し、図4(b)に示すものになる。この例では、第3Y座標ブロック列Y3の部分列として8進数の「141」が、第4Y座標ブロック列Y4の部分列として「363」が、第1Y座標ブロック列Y1の部分列として「663」が、第2Y座標ブロック列Y2の部分列として「426」が、それぞれ取得される。これら4個の部分列がY座標ブロック列全体の中のどの位置に現れるかが特定されることによって、読み取り領域のY方向における位置(Y座標)が特定される。また、ブロック行領域Rx1から得られた「1」、「1」、「1」はY座標情報以外の情報を表している。
【0031】
次に、本実施形態における各X座標ブロック列の具体的な内容について説明する。なお、以降はX座標ブロック列を例として説明するが、Y座標ブロック列についても同様に生成される符号列であってよい。
【0032】
まず最初に、第1X座標ブロック列X1と第2X座標ブロック列X2とによってX座標を表す場合について、図5に基づいて説明する。同図に示されるように、第1X座標ブロック列X1は、第1基本ブロック列M1を複数回繰り返してなるブロック列になっている。すなわち、第1X座標ブロック列X1は、{M1,M1,M1,・・・,M1}と表される。ここで、第1基本ブロック列M1は、予め定められたビット長(周期)を持つビット列(以下、単位ビット列という)から構成されるブロック列である。この単位ビット列は、その一部に基づいて、当該一部が単位ビット列内に占める位置を特定可能なビット列である。すなわち、単位ビット列全体の中から連続する予め定められた長さの複数ビットで構成される部分列を切り出した場合に、当該切り出された部分列が全ビット列中の他の位置に存在する部分列とは一致せず、それゆえ、ある部分列が取得されると、当該部分列が全ビット列の中のどの位置に存在するか(すなわち、当該部分列が全ビット列内において何番目のビットから開始するか)が一意に特定される。このような性質を持つビット列としては、p次のM系列(疑似ランダム系列)が存在する。p次のM系列のビット長は、(2p−1)で表され、その中からpビットの長さの部分列を取り出した場合に、当該部分列のM系列内の位置が特定される。
【0033】
次に、この単位ビット列から第1基本ブロック列M1を構成する方法を説明する。第1基本ブロック列M1は、この単位ビット列を、各ブロックに埋め込むべきX座標情報のビット数(以下、ブロック当たりビット数bという)に相当する回数だけ繰り返してなるビット列である。ここで、ブロック当たりビット数bが基本ビット列のビット長2p−1の約数になっていなければ、第1基本ブロック列M1をブロック当たりビット数bずつ切り出した場合に、2回目以降の単位ビット列は、1回目の単位ビット列とは異なる区切りで切り出され、各ブロックに埋め込まれることになる。
【0034】
具体例として、M系列の次数p=3とすると、M系列の長さは7である。この場合は、約数としては、1か7しか存在しない。このM系列のビット列を、{b1,b2,b3,b4,b5,b6,b7}と表しておく。仮に、ブロック当たりビット数bを2とし、それぞれ2ビットの情報が埋め込まれるブロックを括弧[]で表すとすると、第1基本ブロック列M1は、
{[b1,b2],[b3,b4],[b5,b6],[b7,b1],[b2,b3],[b4,b5],[b6,b7]}
となり、M系列2周期を使い、7ブロックでブロック表現の1周期が形成されることとなる。これら7ブロックのそれぞれは、すべて他のブロックとは異なるビットの並びを持つ。さらにブロック当たりビット数bを3とした場合も、
{[b1,b2,b3],[b4,b5,b6],[b7,b1,b2],[b3,b4,b5],[b6,b7,b1],[b2,b3,b4],[b5,b6,b7]}
となり、M系列3周期を使い、7ブロックでブロック表現の1周期が形成される。同様に、(2p−1)の長さのM系列を、2p−1の約数でないブロック当たりビット数bの数だけ繰り返すと、bビットを1単位(ブロック)として、ブロック長T1が(2p−1)の第1基本ブロック列M1が得られる。すなわち、単位ビット列(M系列)のビット長と、それをブロック単位で表現した第1基本ブロック列M1のブロック長とは、同じ数となる。
【0035】
単位ビット列から連続するpビットの部分列を取り出した場合と同様に、第1基本ブロック列M1の中から連続する複数ブロックで構成される部分列(部分ブロック列)を切り出した場合、当該切り出された部分列は、第1基本ブロック列M1中の他の位置に存在する部分列とは一致せず、それゆえ、ある部分列が取得されると、当該部分列が第1基本ブロック列M1の中のどの位置に存在するか(すなわち、当該部分列が第1基本ブロック列M1内において何番目のブロックから開始するか)が一意に特定される。このとき、第1基本ブロック列M1内の位置を特定するための部分列は、全体としてpビットの情報を含む連続したブロックからなるブロック列であればよい。例えば上述した3次のM系列の場合、3ビットのビット列を含んだブロック列が部分列として第1基本ブロック列M1から切り出されれば、当該切り出された部分列の第1基本ブロック列M1内における位置が特定される。したがって、b=2の場合には連続する2個のブロック、b=3の場合には1個のブロックが部分ブロック列として取得されれば、当該部分ブロック列の第1基本ブロック列M1内の位置が一意に特定されることとなる。
【0036】
本実施形態では、前述したように読み取り領域である4行4列のブロック範囲から得られる各X座標ブロック列の部分列のビット長が9ビットなので、第1基本ブロック列M1を構成する単位ビット列は、9次のM系列であることとする。こうすれば、読み取り領域内の情報を復元して得られる各X座標ブロック列の部分列に基づいて、当該部分列の第1基本ブロック列M1内における位置が特定される。なお、この場合の第1基本ブロック列M1のブロック長T1は、M系列のビット長と同じであるので、29−1=511になる。また、p次のM系列内において、「0」ビットが連続する最大の長さは、(p−1)である。つまり、9次のM系列においては、最も長く連続する場合で8個の「0」ビットが並ぶことになる。ここでは、この「0」ビットが最も長く連続する部分が先頭又は最後に位置するように、ブロック長T1の第1基本ブロック列M1が決定されることとする。
【0037】
一方、補充ブロック列D1は、m1個の「0」ブロックが連続してなるブロック列である。ここで、「0」ブロックとは、ブロックを表現するビットがすべて0であるブロックを指している。この補充ブロック列D1は、第1X座標ブロック列X1に含まれる第1基本ブロック列M1に対して、第2X座標ブロック列X2に含まれる第1基本ブロック列M1の位置をシフトするために用いられる。
【0038】
図5に示されるように、第2X座標ブロック列X2は、第1X座標ブロック列X1に対して、その中に含まれる1個の第1基本ブロック列M1につき1個の補充ブロック列D1を挿入した構成のブロック列になっている。すなわち、第2X座標ブロック列X2は、第1基本ブロック列M1に補充ブロック列D1を付加したブロック列を繰り返してなるブロック列となる。ここで、補充ブロック列D1は、各第1基本ブロック列M1の先頭側に付加されることとする。よって、第2X座標ブロック列X2は、{D1,M1,D1,M1,D1,M1,・・・,D1,M1}と表される。
【0039】
第1X座標ブロック列X1及び第2X座標ブロック列X2が以上説明したように構成されることによって、第1X座標ブロック列X1内におけるn番目の第1基本ブロック列M1と、第2X座標ブロック列X2内におけるn番目の第1基本ブロック列M1と、は、各X座標ブロック列の先頭から数えた位置が、n×m1ブロック分だけずれることになる。なぜなら、第2X座標ブロック列X2内において、n番目の第1基本ブロック列M1の前には、第1X座標ブロック列X1と比較して長さm1ブロックの補充ブロック列D1がn個分付加されているからである。したがって、第2X座標ブロック列X2から取得された部分列の第1基本ブロック列M1内における位置が、第1X座標ブロック列X1内の当該部分列に対応する位置から取得された部分列の第1基本ブロック列M1内における位置に対して、何ブロック分ずれているかによって、この部分列が、第2X座標ブロック列X2内の何番目の第1基本ブロック列M1から得られたかが特定される。
【0040】
ただし、ずれ量n×m1が第1基本ブロック列M1のブロック長T1を超えると、第2X座標ブロック列X2内に、第1X座標ブロック列X1内の第1基本ブロック列M1に対するずれ量が同じ部分列が複数回現れてしまうことになり、部分列同士の位置ずれ量だけでは当該部分列の位置が特定されないことになる。そのため、第1X座標ブロック列X1及び第2X座標ブロック列X2の2個の座標ブロック列だけでX座標を表す場合、第2X座標ブロック列X2内において第1基本ブロック列M1が繰り返される回数N1は、N1≦T1/m1を満たすことが要請される。
【0041】
ここで、第1X座標ブロック列X1及び第2X座標ブロック列X2のブロック長が長ければ長いほど、この2つの座標ブロック列を用いてより広い範囲のX座標が表現される。例えばm1=1、N1=T1/m1=511とした場合には、第2X座標ブロック列X2のブロック長T2は
T2=(m1+T1)・N1=(1+511)・511=261632
となり、9次のM系列を利用して最大で261632までの座標値が表現されることとなる。このとき、第1X座標ブロック列X1のブロック長もT2に一致し、第1X座標ブロック列X1は第1基本ブロック列M1を(N1+1)回繰り返してなるブロック列となる。
【0042】
さらに本実施形態では、第1X座標ブロック列X1及び第2X座標ブロック列X2に対して、第3X座標ブロック列X3及び第4X座標ブロック列X4を組み合わせることによって、より大きな範囲の座標値が表現されることとしている。図6は、この場合の各X座標ブロック列の構成例を示している。具体的に、第3X座標ブロック列X3及び第4X座標ブロック列X4は、それぞれ上述したブロック長T2の第1X座標ブロック列X1及び第2X座標ブロック列X2を基本単位として、これらのブロック列と補充ブロック列D2とを組み合わせて生成される。そこで以下では、第1基本ブロック列M1を(N1+1)回繰り返してなるブロック長T2のブロック列を第2基本ブロック列M2とし、補充ブロック列D1と第1基本ブロック列M1とを連接したブロック列をN1回繰り替えしてなるブロック長T2のブロック列を第3基本ブロック列M3と表記する。
【0043】
この場合、第1X座標ブロック列X1は、第2基本ブロック列M2を(N2+1)回繰り返してなるブロック列とする。すなわち、第1X座標ブロック列X1は、{M2,M2,M2,・・・,M2}と表される。また、第2X座標ブロック列X2は、第3基本ブロック列M3を(N2+1)回繰り返してなるブロック列とする。すなわち、第2X座標ブロック列X2は、{M3,M3,M3,・・・,M3}と表される。
【0044】
そして、第3X座標ブロック列X3は、第2基本ブロック列M2の先頭側に補充ブロック列D2を付加したブロック列をN2回繰り返してなるブロック列とする。すなわち、第3X座標ブロック列X3は、{D2,M2,D2,M2,D2,M2,・・・,D2,M2}と表される。また、第4X座標ブロック列X4は、第3基本ブロック列M3の先頭側に補充ブロック列D2を付加したブロック列をN2回繰り返してなるブロック列とする。すなわち、第4X座標ブロック列X4は、{D2,M3,D2,M3,D2,M3,・・・,D2,M3}と表される。なお、この場合に第2基本ブロック列M2及び第3基本ブロック列M3に付加される補充ブロック列D2は、補充ブロック列D1と同様に、b個の0ビットからなる「0」ブロックがm2個連続してなるブロック列である。補充ブロック列D2のブロック長m2は、第2基本ブロック列M2に含まれる補充ブロック列D1のブロック長m1と同じでもよいし、異なってもよい。
【0045】
図6に示されるように、第1X座標ブロック列X1内の第2基本ブロック列M2と、第2X座標ブロック列X2内の第3基本ブロック列M3と、は、各X座標ブロック列の先頭から数えて同じ位置に現れている。したがって、前述した図5の例と同様にして、各X座標ブロック列から部分列が得られた場合に、当該部分列の第2基本ブロック列M2及び第3基本ブロック列M3内における先頭から数えた位置が特定される。また、第3X座標ブロック列X3内の第2基本ブロック列M2と、第4X座標ブロック列X4内の第3基本ブロック列M3と、についても、各X座標ブロック列の先頭から数えて同じ位置に現れている。したがって、各X座標ブロック列から得られる部分列の、第2基本ブロック列M2及び第3基本ブロック列M3内における先頭から数えた位置も、同様にして特定される。
【0046】
さらに、第3X座標ブロック列X3及び第4X座標ブロック列X4は、第1基本ブロック列M1がそれぞれ第2基本ブロック列M2又は第3基本ブロック列M3に置き換えられたことを除けば、第2X座標ブロック列X2と同様の構成になっている。したがって、第2基本ブロック列M2を(N2+1)回繰り返してなる第1X座標ブロック列X1と、第3X座標ブロック列X3と、の間の関係、及び、第3基本ブロック列M3を(N2+1)回繰り返してなる第2X座標ブロック列X1と、第4X座標ブロック列X4と、の間の関係は、前述した第2基本ブロック列M2と第3基本ブロック列M3との間の関係に類似している。すなわち、第2X座標ブロック列X2内におけるn番目の第3基本ブロック列M3と、第4X座標ブロック列X4内におけるn番目の第3基本ブロック列M3と、は、各X座標ブロック列の先頭から数えた位置が、n×m2ブロック分だけずれることになる。そこで、第2X座標ブロック列X2から取得された部分列の第2基本ブロック列M2内における位置が、第4X座標ブロック列X4内の当該部分列に対応する位置から取得された部分列の第2基本ブロック列M2内における位置に対して、どの程度ずれているかによって、この部分列が、第4X座標ブロック列X4内の何番目の第2基本ブロック列M2から得られたかが特定される。これらの情報を用いて、最終的に、各X座標ブロック列の互いに対応する位置から得られた部分列に基づいて、当該部分列がX座標ブロック列全体の中のどの位置に存在するかが特定されることになる。
【0047】
ここで、このようなX座標情報を取得する際の計算手順の具体例について、説明する。ここでは具体例として、各X座標ブロック列の部分列として、図4(a)に示した情報が得られた場合について、説明する。まず本実施形態に係る画像処理装置は、各部分列の第1基本ブロック列M1内における位置(各部分列が第1基本ブロック列M1の先頭から数えて何番目のブロックから開始するか)を特定する。
【0048】
以下では、第1〜第4X座標ブロック列X1〜X4のそれぞれから取得された部分列の第1基本ブロック列M1内における先頭位置を、それぞれPx1,Px2,Px3及びPx4と表記する。ここでは具体例として、第1X座標ブロック列X1から取得された「066」で表される部分列は、第1基本ブロック列M1の先頭から数えて132番目のブロックから開始しているものとする(すなわち、Px1=132)。また、同様に、Px2=190,Px3=312,Px4=41とする。これらの位置情報は、予め画像処理装置に保持されている、部分列と位置とを対応づけるテーブルを参照することによって、特定される。
【0049】
続いて画像処理装置は、第1X座標ブロック列X1と第2X座標ブロック列X2との間の比較を行う。この両者から得られた部分列の間の位置ずれ量d1は、計算式
d1=(Px1−Px2) mod T1
によって算出される。ここで、x mod yは、xをyで割った余り(0からy−1までのいずれかの値)を示している。上述した数値を当てはめると、
d1=(132−190) mod 511=453
と算出される。これによって、部分列は、第2X座標ブロック列X2内のいずれかの第3基本ブロック列M3内において、第(d1/m1)番目の第1基本ブロック列M1内に存在することが分かる。したがって、第3基本ブロック列M3内における部分列の先頭位置s1は、計算式
s1=(d1/m1−1)(T1+m1)+(Px2+m1)
によって算出される。上述した数値を当てはめると、
s1=(453/1−1)(511+1)+(190+1)=231615
と算出される。なお、ここではm1=1、N1=511としている。
【0050】
次に画像処理装置は、上述した第1X座標ブロック列X1と第2X座標ブロック列X2との間の比較と同様にして、第3X座標ブロック列X3と第3X座標ブロック列X3との間の比較を行い、両者から得られた部分列の間の位置ずれ量d2を算出する。具体的に、d2は、計算式
d2=(Px3−Px4) mod T1
によって算出される。上述した数値を当てはめると、
d2=(312−41) mod 511=271
と算出される。これによって、部分列は、第4X座標ブロック列X4内のいずれかの第3基本ブロック列M3内において、第(d2/m1)番目の第1基本ブロック列M1内に存在することが分かる。したがって、第3基本ブロック列M3内における部分列の先頭位置s2は、計算式
s2=(d2/m1−1)(T1+m1)+(Px4+m1)
によって算出される。上述した数値を当てはめると、
s2=(271/1−1)(511+1)+(41+1)=138282
と算出される。
【0051】
さらに画像処理装置は、これまでの計算によって算出されたs1とs2との間の位置ずれ量d3を算出する。具体的に、位置ずれ量d3は、計算式
d3=(s1−s2) mod T2
によって算出される。具体的には、d3=93333と算出される。これによって、部分列は、第4X座標ブロック列X4内において、第(d3/m2)番目の第3基本ブロック列M3内に存在することが分かる。したがって、第4X座標ブロック列X4内における部分列の先頭位置を表す値xbは、計算式
xb=(d3/m2−1)(T2+m2)+(s2+m2)
によって算出される。上述した数値を当てはめると、
xb=(93333/1−1)(512・511+1)+(138282+1)
=24418869439
と算出される。なお、ここではm2=1としている。また、T2=N1(N1+1)である。このxbの値が、第4X座標ブロック列X4内における読み取られた部分列の位置を示すX座標値となる。
【0052】
以下、本発明の一実施形態に係る画像生成装置及び画像処理装置の構成例について、説明する。
【0053】
図7は、本実施形態に係る画像生成装置1の構成例を示す図である。画像生成装置1は、制御部11と、記憶部12と、操作部13と、表示部14と、を含んで構成され、画像形成装置2と接続されている。
【0054】
制御部11は、例えばCPU等であって、記憶部12に格納されるプログラムに従って各種の情報処理を実行する。記憶部12は、例えばRAMやROM等のメモリ素子、ハードディスクなどを含んで構成され、制御部11によって実行されるプログラムや、各種のデータを保持する。また、記憶部12は、制御部11のワークメモリとしても動作する。
【0055】
操作部13は、例えばキーボードやマウス等であって、利用者の指示操作を受け付けて、当該指示操作の内容を制御部11に出力する。表示部14は、例えば液晶ディスプレイ等であり、制御部11からの指示に従って、画像の表示を行う。
【0056】
画像形成装置2は、プリンタ等であって、画像生成装置1から入力される指示に従って、紙などの記録媒体上に画像を形成する。
【0057】
画像生成装置1は、機能的に、図8に示すように、文書画像取得部21と、コード情報取得部22と、コード画像生成部23と、画像合成部24と、を含んで構成される。これらの機能は、例えば制御部11が記憶部12に格納されるプログラムを実行することによって実現される。このプログラムは、例えばインターネット等の通信手段を介して提供されてもよいし、光ディスク等の各種のコンピュータ読み取り可能な情報記憶媒体に格納されて提供されてもよい。
【0058】
文書画像取得部21は、記録媒体に形成する対象となる文書画像を取得する。この文書画像は、予め記憶部12に記憶された画像であってもよいし、利用者がアプリケーションプログラム等を実行して作成した画像であってもよい。
【0059】
コード情報取得部22は、コード画像内に埋め込むべきコード情報を取得する。本実施形態では、p次のM系列をb回繰り返してなるブロック列が、第1基本ブロック列M1として記憶部12内に予め記憶されていることとする。コード情報取得部22は、この第1基本ブロック列M1を記憶部12から読み出して、当該読み出した第1基本ブロック列M1を用いて上述した各X座標ブロック列及びこれらと同様のY座標ブロック列を生成することにより、X座標情報及びY座標情報を取得する。ここでbは、1ブロック当たりに埋め込む情報のビット長であって、pは、後述する画像読み取り装置4が読み取る画像範囲内に含まれるX座標情報及びY座標情報の部分列のビット長である。また、コード情報取得部22は、コード画像が形成される記録媒体を特定するための媒体識別情報なども、コード情報として取得することとしてもよい。
【0060】
コード画像生成部23は、コード情報取得部22によって取得されたコード情報に応じて、当該コード情報を埋め込んだコード画像を生成する。このコード画像は、前述したように、例えばコード画像を分割して得られる複数のブロックそれぞれに含まれるドット画像の配置パターンによって、埋め込み対象となるコード情報を表す画像である。
【0061】
画像合成部24は、文書画像取得部21によって取得された文書画像に対して、コード画像生成部23によって生成されたコード画像を背景画像として重ね合わせることによって、画像形成の対象となる合成画像を生成する。そして、生成された合成画像を画像形成装置2に対して出力する。画像形成装置2は、この出力された合成画像を、紙などの記録媒体上に形成する。こうして、文書画像とともに、コード情報が埋め込まれたコード画像が形成された記録媒体が作成される。
【0062】
次に、本実施形態に係る画像処理装置3について、説明する。図9は、画像処理装置3の構成例を示す図である。画像処理装置3は、制御部31と、記憶部32と、操作部33と、表示部34と、を含んで構成され、画像読み取り装置4と接続されている。なお、制御部31、記憶部32、操作部33、及び表示部34は、それぞれ制御部11、記憶部12,操作部13、及び表示部14と同様の構成であってよい。
【0063】
画像読み取り装置4は、例えばペン型の筐体に内蔵された小型カメラ等であって、記録媒体の表面に形成されている画像を読み取って、当該読み取った画像を画像処理装置3に対して出力する。ここでは前述したように、画像読み取り装置4は、コード画像内に含まれる4行4列のブロック範囲を読み取り領域として、画像の読み取りを行うこととする。
【0064】
画像処理装置3は、機能的に、図10に示すように、読み取り画像取得部41と、ドット画像検出部42と、ブロック特定部43と、回転補正部44と、コード情報復元部45と、X座標値算出部46と、Y座標値算出部47と、を含んで構成される。
【0065】
読み取り画像取得部41は、画像読み取り装置4が記録媒体表面に形成された画像を読み取って得られる読み取り画像を取得する。
【0066】
ドット画像検出部42は、パターンマッチング処理等の画像処理によって、読み取り画像取得部41が取得した読み取り画像内に含まれるドット画像の位置を検出する。
【0067】
ブロック特定部43は、前述した方法により、ドット画像検出部42によって検出された各ドット画像の位置に基づいて、各ブロック内のドット画像の数が予め定められた数に一致するように、各ブロックの境界を特定する。
【0068】
回転補正部44は、ブロック特定部43によって特定された各ブロック内に含まれるドット画像の配置パターンの中に、画像回転検出用パターン又は制限パターンが含まれているかを判定する。そして、制限パターンが検出された場合には、この制限パターンが画像回転検出用パターンに一致するように、読み取り画像取得部41が取得した読み取り画像を90度単位で回転する補正を行う。これにより、読み取り画像の向きが特定され、画像生成装置1によって生成されたコード画像本来の向きに補正される。一方、制限パターンが検出されず、画像回転検出用パターンが検出された場合には、読み取り画像の向きは正しいことになるので、このような回転補正を行う必要はない。
【0069】
コード情報復元部45は、回転補正部44によって回転補正が行われた読み取り画像に対して、当該読み取り画像内に埋め込まれたコード情報の復元を行う。具体的に、コード情報復元部45は、まずブロック特定部43によって特定された各ブロック内におけるドット画像の配置パターンに基づいて、ブロックごとに埋め込まれたコード情報を復元する。そして、各ブロックに埋め込まれた6ビットの情報を上位3ビットと下位3ビットとに分離することによって、X座標情報(4個のX座標ブロック列のそれぞれに含まれる、3ブロック長の4個の部分列)及びY座標情報(4個のY座標ブロック列のそれぞれに含まれる、3ブロック長の4個の部分列)を取得する。
【0070】
X座標値算出部46は、コード情報復元部45によって復元されたX座標情報に基づいて、画像読み取り装置4が読み取った読み取り画像のコード画像内における位置を示すX座標値を算出する。また、Y座標値算出部47は、同じくコード情報復元部45によって復元されたY座標情報に基づいて、画像読み取り装置4が読み取った読み取り画像のコード画像内における位置を示すY座標値を算出する。こうして、コード画像内における読み取り画像の位置を示すX座標値とY座標値の組が算出される。
【0071】
ここで、X座標値算出部46がX座標値を算出する処理の流れの一例を、図11のフロー図に基づいて説明する。なお、Y座標値算出部47も、同様の手順によってY座標値を算出することとしてよい。
【0072】
まずX座標値算出部46は、コード情報復元部45によって得られた4個の部分列のそれぞれについて、第1基本ブロック列M1内におけるブロック単位の位置を示す情報を取得する(S1)。この情報は、前述したように、予め記憶部32に記憶されたテーブルを参照することによって、取得される。
【0073】
次にX座標値算出部46は、予め定められた計算式にPx1及びPx2の値を代入して、Px1とPx2との間の位置ずれ量d1を算出する(S2)。続いて、S2で算出された位置ずれ量d1を用いて、コード情報復元部45が取得した部分列の第3基本ブロック列M3内における位置s1を算出する(S3)。
【0074】
一方、X座標値算出部46は、予め定められた計算式にPx3及びPx4の値を代入して、Px3とPx4との間の位置ずれ量d2を算出する(S4)。そして、S4で算出された位置ずれ量d2を用いて、部分列の第3基本ブロック列M3内における位置s2を算出する(S5)。
【0075】
その後、X座標値算出部46は、S3で算出された位置s1の値、及びS5で算出された位置s2の値の間の位置ずれ量d3を算出する(S6)。そして、S6で算出された位置ずれ量d3と、S5で算出された位置s2と、を用いて、X座標値xbを算出する(S7)。
【0076】
以上説明した処理によって、画像読み取り装置4が読み取った読み取り画像のコード画像内における位置を示すX座標値が算出される。
【0077】
なお、本発明の実施の形態は、以上説明したものに限られない。例えば以上の説明では、各ブロックには3ビットのX座標情報及び3ビットのY座標情報が埋め込まれることとしたが、各ブロックに埋め込まれる情報量はこれとは異なる値であってもよい。また、以上の説明においては、X方向及びY方向のそれぞれに沿って並んだ3ブロックから復元された9ビットの情報を部分列として用いることとしたが、各部分列の長さはこれ以外のものであってもよい。また、上述した説明ではX座標及びY座標のそれぞれについて、4個の座標ブロック列を用いて座標情報を表すこととしたが、既に述べたとおり、2個の座標ブロック列だけでも、p次のM系列を用いて当該M系列の周期を超える範囲の座標値が表現される。また、本実施形態に係る画像生成装置は、4個を超える数の座標ブロック列を用いて各座標情報を表現することとしてもよい。
【図面の簡単な説明】
【0078】
【図1】コード画像の一例を示す部分拡大図である。
【図2】ブロック配置の一例を示す図である。
【図3】コード情報を復元した結果の一例を示す図である。
【図4】コード情報をX座標情報及びY座標情報に分離した結果の一例を示す図である。
【図5】第1X座標ブロック列及び第2X座標ブロック列の構成を説明する図である。
【図6】第1〜第4X座標ブロック列の構成を説明する図である。
【図7】本発明の実施の形態に係る画像生成装置の構成例を示す図である。
【図8】本発明の実施の形態に係る画像生成装置が実現する機能の一例を示す機能ブロック図である。
【図9】本発明の実施の形態に係る画像処理装置の構成例を示す図である。
【図10】本発明の実施の形態に係る画像処理装置が実現する機能の一例を示す機能ブロック図である。
【図11】X座標値算出部が実行する処理の流れの一例を示す図である。
【符号の説明】
【0079】
1 画像生成装置、2 画像形成装置、3 画像処理装置、4 画像読み取り装置、11,31 制御部、12,32 記憶部、13,33 操作部、14,34 表示部、21 文書画像取得部、22 コード情報取得部、23 コード画像生成部、24 画像合成部、41 読み取り画像取得部、42 ドット画像検出部、43 ブロック特定部、44 回転補正部、45 コード情報復元部、46 X座標値算出部、47 Y座標値算出部。
【技術分野】
【0001】
本発明は、画像生成装置、画像処理装置、プログラム及び記録媒体に関する。
【背景技術】
【0002】
紙などの記録媒体の表面に、当該表面上の位置を表す情報を埋め込んだ符号画像を形成する技術が提案されている。このような技術によれば、媒体表面の一部分に形成された符号画像をカメラ等で読み取って、当該読み取った画像内に埋め込まれた情報を復元することによって、当該読み取った部分の記録媒体内における位置が特定される。
【0003】
このような技術においては、符号画像に埋め込む情報として、例えばM系列などの符号列が用いられる。このような符号列は、その中の一部に基づいて、当該一部が符号列全体に占める位置を一意に特定可能であるという性質がある。符号画像全体にわたってこのような符号列が埋め込まれていれば、この性質を利用して、符号画像の一部分に埋め込まれた情報を復元することによって、当該部分が符号画像全体の中でどの位置に存在するのかが特定される。M系列を利用した媒体上の位置特定技術としては、例えば特許文献1,2,3及び4などが挙げられる。
【特許文献1】特表2003−511762号公報
【特許文献2】特表2004−535011号公報
【特許文献3】特開平10−187912号公報
【特許文献4】特開2007−179111号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
本発明は、符号画像に埋め込まれた情報を復元して、当該情報が埋め込まれた符号画像内の位置を特定する場合に、限られた長さの基本符号列を用いて、当該基本符号列が埋め込まれる範囲より広い範囲における位置が特定される符号画像を生成する画像生成装置及びプログラム、当該符号画像に埋め込まれた情報を復元する画像処理装置、並びに当該符号画像が形成された記録媒体を提供することを目的の一つとする。
【課題を解決するための手段】
【0005】
請求項1記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段と、前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段と、を含むことを特徴とする画像生成装置である。
【0006】
請求項2記載の発明は、請求項1記載の画像生成装置であって、前記補充符号列は、予め定められた長さで0ビットが連続する符号列であって、前記基本符号列の前に付加されることを特徴とする。
【0007】
請求項3記載の発明は、請求項2記載の画像生成装置であって、前記符号画像生成手段は、前記符号画像を分割してなる複数の単位領域のそれぞれに、予め定められた単位ビット長の符号列を埋め込んで前記符号画像を生成し、前記補充符号列は、前記単位ビット長の整数倍に相当する長さで0ビットが連続する符号列であることを特徴とする。
【0008】
請求項4記載の発明は、請求項1から3のいずれか一項記載の画像生成装置であって、前記符号画像生成手段は、前記第1符号列及び第2符号列が埋め込まれる領域に対応する領域に、さらに、前記第1符号列に補充符号列を付加した符号列を繰り返してなる第3符号列、及び、前記第2符号列に補充符号列を付加した符号列を繰り返してなる第4符号列のそれぞれを埋め込んだ符号画像を生成することを特徴とする。
【0009】
請求項5記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像の一部領域を読み取って得られる読み取り画像を取得する画像取得手段と、前記読み取り画像に埋め込まれた情報を復元して、前記第1符号列及び第2符号列それぞれにおいて互いに対応する位置を占める部分列を取得する手段と、前記各部分列が前記基本符号列内に占める位置を特定する手段と、前記特定した前記各部分列の位置に基づいて、前記第2符号列内における前記部分列の位置を算出する手段と、を含むことを特徴とする画像処理装置である。
【0010】
請求項6記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段、及び前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段、としてコンピュータを機能させるためのプログラムである。
【0011】
請求項7記載の発明は、予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像が形成された記録媒体である。
【発明の効果】
【0012】
請求項1、5、6及び7記載の発明によれば、符号画像に埋め込まれた情報を復元して、当該情報が埋め込まれた符号画像内の位置を特定する場合に、限られた長さの基本符号列を用いて、当該基本符号列が埋め込まれる範囲より広い範囲における位置が特定される。
【0013】
請求項2記載の発明によれば、符号画像に埋め込まれた情報を復元する際に、補充符号列に対応する部分が得られた場合に、当該部分が容易に特定される。
【0014】
請求項3記載の発明によれば、単位領域ごとに符号画像に埋め込まれた符号列の復元及び位置の特定が行われる。
【0015】
請求項4記載の発明によれば、請求項1記載の発明と比較して、さらに広い範囲における位置が特定される符号画像が生成される。
【発明を実施するための最良の形態】
【0016】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0017】
まず、本実施形態に係る画像生成装置によって生成される、情報が埋め込まれた符号画像(以下、コード画像という)について、説明する。コード画像に埋め込む対象となる情報(以下、コード情報という)は、符号化された情報であって、ビット列によって表される。本実施形態に係る画像生成装置は、コード情報を埋め込んだコード画像を生成し、当該生成したコード画像をプリンタ等の画像形成装置に対して出力し、紙などの記録媒体上に当該コード画像を形成させる。これによって、コード画像が形成された記録媒体が作成される。記録媒体上に形成されたコード画像は、例えばスキャナやカメラなどの画像読み取り装置によって読み取られる。そして、本実施形態に係る画像処理装置は、当該読み取られたコード画像を解析して、その中に埋め込まれたコード情報を復元する。
【0018】
具体的に、コード情報は、コード画像内における位置を特定するための情報(X方向の位置座標を示すX座標情報及びY方向の位置座標を示すY座標情報)を含んでいる。また、画像読み取り装置は、例えばペン型のデバイスの先端部分に内蔵されたカメラなどであって、記録媒体の表面に形成されたコード画像の一部分を読み取る。画像処理装置は、この読み取られた画像からX座標情報及びY座標情報を復元することによって、ペン型デバイスが記録媒体のどの位置に接しているかを特定する。
【0019】
図1は、本実施形態におけるコード画像の一例を示す部分拡大図である。同図に示されるように、コード画像内には複数の単位領域(ブロック)が画定されている。すなわち、コード画像は予め定められた大きさの複数のブロックに分割されている。このブロックは、コード画像を格子状に分割してなる正方形の領域になっており、各ブロックには、予め定められた数の点画像(ドット画像)が含まれている。図1においては、このブロックを画定する線(各ブロックの境界)が実線で表されているが、この境界線は実際にはコード画像上には描画されない。本実施形態では、各ブロック内におけるドット画像の配置パターンによって、コード情報が表される。具体的に、各ブロック内には3行3列で計9箇所のドット配置位置が設定されており、この9箇所のうちのいずれか3箇所に実際にドット画像が配置されている。9箇所の中から3箇所を選択する組み合わせは9C3=84通り存在し、この数は2の6乗である64を上回っているので、1個のブロックにつき6ビットの情報が埋め込まれることになる。なお、この図に示すコード情報の埋め込み方法は一例であって、本実施形態において、コード情報はその他の態様でコード画像内に埋め込まれることとしてもよい。
【0020】
コード画像内に埋め込まれたコード情報の復元は、このブロック単位で実行される。すなわち、本実施形態に係る画像処理装置は、解析対象のコード画像を取得すると、コード画像内から検出された各ドット画像の位置に基づいて、コード画像内における各ブロックの位置を特定する。具体的に、画像処理装置は、各ブロックの境界を仮決定し、当該仮決定された境界に従って分割される各ブロック内に存在するドット画像の数をカウントする。このとき、仮決定されたブロック境界が正しければ、ドット画像の位置検出の際のエラーによって生じる例外を除いて、全てのブロック内に3個のドット画像が検出されるはずである。そこで、画像処理装置は、取得したコード画像内に、3個以外の数のドット画像を含むブロックが予め定められた閾値以上の割合で含まれている場合、仮決定したブロック境界が間違っていたと判定する。
【0021】
そして、仮決定されたブロック境界が間違っていると判定された場合には、画像処理装置は、ブロック境界の位置をドット画像1個分(ここではブロック1辺の1/3)に対応する距離だけ予め定められた方向(X方向又はY方向)にずらして、再び各ブロック内のドット画像の数が予め定められた数に一致するかの判定を実行する。このような処理を繰り返すことによって、画像処理装置は、正しいブロック境界を判定し、コード画像を複数のブロックに分割する。そして、複数のブロックのそれぞれについて、当該ブロック内における3個のドット画像の配置パターンに対して予め対応づけられたビット列を、当該ブロックに埋め込まれているコード情報として復元する。
【0022】
また、本実施形態では、画像読み取り装置によって読み取られた画像の回転を検出する(すなわち、コード情報が埋め込まれた際のコード画像本来の向きを特定する)ために、予め定められた特定のドット画像の配置パターンが、画像回転検出用パターンとしてコード画像内に配置される。そして、この画像回転検出用パターンを90度ずつ回転させて得られる3種類の配置パターンについては、制限パターンとしてその使用が制限される。これらの4種類のドット画像の配置パターンは、回転させることで互いに一致し、かつ、回転させない状態では互いに異なるパターンになっている。そのため、本実施形態に係る画像処理装置は、コード画像を取得してその中に埋め込まれたコード情報を復元する際に、制限パターンを検出した場合には、当該制限パターンが画像回転検出用パターンに一致するように、取得したコード画像全体を回転させる。これにより、取得した画像の向きがコード画像本来の向きに補正される。
【0023】
本実施形態においては、この画像回転検出用パターンを持つブロック(以下、画像回転検出用ブロックBlという)は、縦横それぞれの方向に4ブロックごとに繰り返し配置される。すなわち、コード画像の中から縦4行、横4列で計16個のブロックを含む範囲が画像読み取り装置によって読み取られた場合、その中には1個の画像回転検出用ブロックBlが含まれることになる。したがって、最低限4行4列のブロックを含む画像が読み取られれば、その中に含まれる画像回転検出用パターンの向きによって、読み取られた画像の向きが特定されることになる。
【0024】
以下、本実施形態において、符号画像内に埋め込まれるX座標情報及びY座標情報の具体例について、説明する。X座標情報及びY座標情報のそれぞれは、4個の符号列(以下、座標ブロック列という)によって表される。具体的に、X座標情報はX座標ブロック列X1,X2,X3及びX4によって表され、Y座標情報はY座標ブロック列Y1,Y2,Y3及びY4によって表される。また、後述するように、X座標情報及びY座標情報は、画像回転検出用ブロックBlを除く各ブロックに対して、1ブロック当たり3ビットの情報を単位として埋め込まれる。したがって、X座標情報及びY座標情報のそれぞれを構成する座標ブロック列は、この3ビットのビット列を単位として構成される。すなわち、各座標ブロック列は、各桁が0から7までの数字によって表される数列に相当し、符号画像内において順に並んだ各ブロックに対して、この各桁の数字を表す3ビットの情報が順に埋め込まれることになる。
【0025】
これら4個の座標ブロック列のそれぞれが埋め込まれるブロックの位置は、画像回転検出用ブロックBlの位置に応じて決定される。図2は、X座標ブロック列及びY座標ブロック列のそれぞれが埋め込まれる領域と、画像回転検出用ブロックBlと、の位置関係を示すブロック配置図である。同図に示されるように、X座標情報を構成する4個の座標ブロック列は、それぞれX方向に沿って延在するブロック行領域に埋め込まれている。そして、これらの座標ブロック列のうち、第1X座標ブロック列X1は、画像回転検出用ブロックBlを含んだブロック行領域Rx1に埋め込まれている。さらに、その下のブロック行領域Rx2に第2X座標ブロック列X2が、ブロック行領域Rx2の一つ下のブロック行領域Rx3に第3X座標ブロック列X3が、ブロック行領域Rx3の一つ下のブロック行領域Rx4に第4X座標ブロック列X4が、それぞれ埋め込まれている。
【0026】
また、Y座標情報を構成する4個の座標ブロック列は、それぞれY方向に沿って延在するブロック列領域に埋め込まれている。具体的に、第1Y座標ブロック列Y1は、画像回転検出用ブロックBlを含んだブロック列領域Ry1に埋め込まれている。さらに、その右隣のブロック列領域Ry2に第2Y座標ブロック列Y2が、ブロック列領域Ry2の右隣のブロック列領域Ry3に第3Y座標ブロック列Y3が、ブロック列領域Ry3の右隣のブロック列領域Ry4に第4Y座標ブロック列Y4が、それぞれ埋め込まれている。
【0027】
ただし、画像回転検出用ブロックBl自体には、画像回転検出用パターンが配置されているため、X座標情報及びY座標情報は埋め込まれない。また、X座標情報を構成する各座標ブロック列は、X方向に沿って互いに対応する領域に埋め込まれる必要がある。つまり、各ブロック行領域に埋め込まれる座標ブロック列の長さ及びX方向に沿った位置を揃える必要がある。そのため、画像回転検出用ブロックBlとX方向に沿った位置が同じブロック(すなわち、ブロック列領域Ry1を構成するブロック)内にも、X座標情報は埋め込まれない。同様に、Y座標情報を構成する各座標ブロック列も、Y方向に沿って互いに対応する領域に埋め込まれる必要があるため、画像回転検出用ブロックBlとY方向に沿った位置が同じブロック(すなわち、ブロック行領域Rx1を構成するブロック)内にも、Y座標情報は埋め込まれない。
【0028】
ここで、ブロック行領域Rx1及びブロック列領域Ry1のいずれにも属さない各ブロックには、X座標ブロック列及びY座標ブロック列の双方が埋め込まれることになる。具体的に、このようなブロック内のドット画像配置パターンによって表される6ビットの情報のうち、ここでは上位3ビットがX座標ブロック列を構成し、下位3ビットがY座標ブロック列を構成するものとする。同様に、ブロック行領域Rx1を構成するブロックのうち、画像回転検出用ブロックBlを除く各ブロックにも6ビットの情報が埋め込まれており、そのうちの上位3ビットが第1X座標ブロック列X1を構成する。また、ブロック列領域Ry1を構成するブロックのうち、画像回転検出用ブロックBlを除く各ブロックにも6ビットの情報が埋め込まれており、そのうちの下位3ビットが第1Y座標ブロック列Y1を構成する。なお、ブロック行領域Rx1を構成するブロックに埋め込まれた情報の下位3ビット、及びブロック列領域Ry1を構成するブロックに埋め込まれた情報の上位3ビットは、X座標情報及びY座標情報以外の、他の情報を表すために用いられてよい。
【0029】
具体例として、画像読み取り装置がコード画像を読み取って得られる4行4列のブロック範囲(以下、読み取り領域という)に含まれるブロックのうち、画像回転検出用ブロックBlを除いた各ブロックに埋め込まれたコード情報を復元した結果が、図3に示すものだったとする。この図においては、画像回転検出用ブロックBlを除く各ブロックから復元された6ビットの情報によって表される0〜63の範囲の数値が、各ブロック内に示されている。このとき、各ブロックに埋め込まれたコード情報の上位3ビットによって表される数値は、各ブロックの数値を8で割った商に対応し、図4(a)に示すものになる。この図の例では、第3X座標ブロック列X3の部分列として「540」が、第4X座標ブロック列X4の部分列として「522」が、第1X座標ブロック列X1の部分列として「066」が、第2X座標ブロック列X2の部分列として「554」が、それぞれ取得される。なお、ここではこれらの部分列の値は、いずれも各桁が3ビットに対応する8進数で表されている。すなわち、各部分列はそれぞれ3ブロック分に埋め込まれた情報に対応する9ビットの情報になっている。これら4個の部分列がX座標ブロック列全体の中のどの位置に現れるかが特定されることによって、読み取り領域のX方向における位置(X座標)が特定される。また、ブロック列領域Ry1から得られた「7」、「5」、「6」はX座標情報以外の情報を表している。
【0030】
さらに、図3に示されるコード情報の下位3ビットによって表される数値は、各ブロックの数値を8で割った余りに対応し、図4(b)に示すものになる。この例では、第3Y座標ブロック列Y3の部分列として8進数の「141」が、第4Y座標ブロック列Y4の部分列として「363」が、第1Y座標ブロック列Y1の部分列として「663」が、第2Y座標ブロック列Y2の部分列として「426」が、それぞれ取得される。これら4個の部分列がY座標ブロック列全体の中のどの位置に現れるかが特定されることによって、読み取り領域のY方向における位置(Y座標)が特定される。また、ブロック行領域Rx1から得られた「1」、「1」、「1」はY座標情報以外の情報を表している。
【0031】
次に、本実施形態における各X座標ブロック列の具体的な内容について説明する。なお、以降はX座標ブロック列を例として説明するが、Y座標ブロック列についても同様に生成される符号列であってよい。
【0032】
まず最初に、第1X座標ブロック列X1と第2X座標ブロック列X2とによってX座標を表す場合について、図5に基づいて説明する。同図に示されるように、第1X座標ブロック列X1は、第1基本ブロック列M1を複数回繰り返してなるブロック列になっている。すなわち、第1X座標ブロック列X1は、{M1,M1,M1,・・・,M1}と表される。ここで、第1基本ブロック列M1は、予め定められたビット長(周期)を持つビット列(以下、単位ビット列という)から構成されるブロック列である。この単位ビット列は、その一部に基づいて、当該一部が単位ビット列内に占める位置を特定可能なビット列である。すなわち、単位ビット列全体の中から連続する予め定められた長さの複数ビットで構成される部分列を切り出した場合に、当該切り出された部分列が全ビット列中の他の位置に存在する部分列とは一致せず、それゆえ、ある部分列が取得されると、当該部分列が全ビット列の中のどの位置に存在するか(すなわち、当該部分列が全ビット列内において何番目のビットから開始するか)が一意に特定される。このような性質を持つビット列としては、p次のM系列(疑似ランダム系列)が存在する。p次のM系列のビット長は、(2p−1)で表され、その中からpビットの長さの部分列を取り出した場合に、当該部分列のM系列内の位置が特定される。
【0033】
次に、この単位ビット列から第1基本ブロック列M1を構成する方法を説明する。第1基本ブロック列M1は、この単位ビット列を、各ブロックに埋め込むべきX座標情報のビット数(以下、ブロック当たりビット数bという)に相当する回数だけ繰り返してなるビット列である。ここで、ブロック当たりビット数bが基本ビット列のビット長2p−1の約数になっていなければ、第1基本ブロック列M1をブロック当たりビット数bずつ切り出した場合に、2回目以降の単位ビット列は、1回目の単位ビット列とは異なる区切りで切り出され、各ブロックに埋め込まれることになる。
【0034】
具体例として、M系列の次数p=3とすると、M系列の長さは7である。この場合は、約数としては、1か7しか存在しない。このM系列のビット列を、{b1,b2,b3,b4,b5,b6,b7}と表しておく。仮に、ブロック当たりビット数bを2とし、それぞれ2ビットの情報が埋め込まれるブロックを括弧[]で表すとすると、第1基本ブロック列M1は、
{[b1,b2],[b3,b4],[b5,b6],[b7,b1],[b2,b3],[b4,b5],[b6,b7]}
となり、M系列2周期を使い、7ブロックでブロック表現の1周期が形成されることとなる。これら7ブロックのそれぞれは、すべて他のブロックとは異なるビットの並びを持つ。さらにブロック当たりビット数bを3とした場合も、
{[b1,b2,b3],[b4,b5,b6],[b7,b1,b2],[b3,b4,b5],[b6,b7,b1],[b2,b3,b4],[b5,b6,b7]}
となり、M系列3周期を使い、7ブロックでブロック表現の1周期が形成される。同様に、(2p−1)の長さのM系列を、2p−1の約数でないブロック当たりビット数bの数だけ繰り返すと、bビットを1単位(ブロック)として、ブロック長T1が(2p−1)の第1基本ブロック列M1が得られる。すなわち、単位ビット列(M系列)のビット長と、それをブロック単位で表現した第1基本ブロック列M1のブロック長とは、同じ数となる。
【0035】
単位ビット列から連続するpビットの部分列を取り出した場合と同様に、第1基本ブロック列M1の中から連続する複数ブロックで構成される部分列(部分ブロック列)を切り出した場合、当該切り出された部分列は、第1基本ブロック列M1中の他の位置に存在する部分列とは一致せず、それゆえ、ある部分列が取得されると、当該部分列が第1基本ブロック列M1の中のどの位置に存在するか(すなわち、当該部分列が第1基本ブロック列M1内において何番目のブロックから開始するか)が一意に特定される。このとき、第1基本ブロック列M1内の位置を特定するための部分列は、全体としてpビットの情報を含む連続したブロックからなるブロック列であればよい。例えば上述した3次のM系列の場合、3ビットのビット列を含んだブロック列が部分列として第1基本ブロック列M1から切り出されれば、当該切り出された部分列の第1基本ブロック列M1内における位置が特定される。したがって、b=2の場合には連続する2個のブロック、b=3の場合には1個のブロックが部分ブロック列として取得されれば、当該部分ブロック列の第1基本ブロック列M1内の位置が一意に特定されることとなる。
【0036】
本実施形態では、前述したように読み取り領域である4行4列のブロック範囲から得られる各X座標ブロック列の部分列のビット長が9ビットなので、第1基本ブロック列M1を構成する単位ビット列は、9次のM系列であることとする。こうすれば、読み取り領域内の情報を復元して得られる各X座標ブロック列の部分列に基づいて、当該部分列の第1基本ブロック列M1内における位置が特定される。なお、この場合の第1基本ブロック列M1のブロック長T1は、M系列のビット長と同じであるので、29−1=511になる。また、p次のM系列内において、「0」ビットが連続する最大の長さは、(p−1)である。つまり、9次のM系列においては、最も長く連続する場合で8個の「0」ビットが並ぶことになる。ここでは、この「0」ビットが最も長く連続する部分が先頭又は最後に位置するように、ブロック長T1の第1基本ブロック列M1が決定されることとする。
【0037】
一方、補充ブロック列D1は、m1個の「0」ブロックが連続してなるブロック列である。ここで、「0」ブロックとは、ブロックを表現するビットがすべて0であるブロックを指している。この補充ブロック列D1は、第1X座標ブロック列X1に含まれる第1基本ブロック列M1に対して、第2X座標ブロック列X2に含まれる第1基本ブロック列M1の位置をシフトするために用いられる。
【0038】
図5に示されるように、第2X座標ブロック列X2は、第1X座標ブロック列X1に対して、その中に含まれる1個の第1基本ブロック列M1につき1個の補充ブロック列D1を挿入した構成のブロック列になっている。すなわち、第2X座標ブロック列X2は、第1基本ブロック列M1に補充ブロック列D1を付加したブロック列を繰り返してなるブロック列となる。ここで、補充ブロック列D1は、各第1基本ブロック列M1の先頭側に付加されることとする。よって、第2X座標ブロック列X2は、{D1,M1,D1,M1,D1,M1,・・・,D1,M1}と表される。
【0039】
第1X座標ブロック列X1及び第2X座標ブロック列X2が以上説明したように構成されることによって、第1X座標ブロック列X1内におけるn番目の第1基本ブロック列M1と、第2X座標ブロック列X2内におけるn番目の第1基本ブロック列M1と、は、各X座標ブロック列の先頭から数えた位置が、n×m1ブロック分だけずれることになる。なぜなら、第2X座標ブロック列X2内において、n番目の第1基本ブロック列M1の前には、第1X座標ブロック列X1と比較して長さm1ブロックの補充ブロック列D1がn個分付加されているからである。したがって、第2X座標ブロック列X2から取得された部分列の第1基本ブロック列M1内における位置が、第1X座標ブロック列X1内の当該部分列に対応する位置から取得された部分列の第1基本ブロック列M1内における位置に対して、何ブロック分ずれているかによって、この部分列が、第2X座標ブロック列X2内の何番目の第1基本ブロック列M1から得られたかが特定される。
【0040】
ただし、ずれ量n×m1が第1基本ブロック列M1のブロック長T1を超えると、第2X座標ブロック列X2内に、第1X座標ブロック列X1内の第1基本ブロック列M1に対するずれ量が同じ部分列が複数回現れてしまうことになり、部分列同士の位置ずれ量だけでは当該部分列の位置が特定されないことになる。そのため、第1X座標ブロック列X1及び第2X座標ブロック列X2の2個の座標ブロック列だけでX座標を表す場合、第2X座標ブロック列X2内において第1基本ブロック列M1が繰り返される回数N1は、N1≦T1/m1を満たすことが要請される。
【0041】
ここで、第1X座標ブロック列X1及び第2X座標ブロック列X2のブロック長が長ければ長いほど、この2つの座標ブロック列を用いてより広い範囲のX座標が表現される。例えばm1=1、N1=T1/m1=511とした場合には、第2X座標ブロック列X2のブロック長T2は
T2=(m1+T1)・N1=(1+511)・511=261632
となり、9次のM系列を利用して最大で261632までの座標値が表現されることとなる。このとき、第1X座標ブロック列X1のブロック長もT2に一致し、第1X座標ブロック列X1は第1基本ブロック列M1を(N1+1)回繰り返してなるブロック列となる。
【0042】
さらに本実施形態では、第1X座標ブロック列X1及び第2X座標ブロック列X2に対して、第3X座標ブロック列X3及び第4X座標ブロック列X4を組み合わせることによって、より大きな範囲の座標値が表現されることとしている。図6は、この場合の各X座標ブロック列の構成例を示している。具体的に、第3X座標ブロック列X3及び第4X座標ブロック列X4は、それぞれ上述したブロック長T2の第1X座標ブロック列X1及び第2X座標ブロック列X2を基本単位として、これらのブロック列と補充ブロック列D2とを組み合わせて生成される。そこで以下では、第1基本ブロック列M1を(N1+1)回繰り返してなるブロック長T2のブロック列を第2基本ブロック列M2とし、補充ブロック列D1と第1基本ブロック列M1とを連接したブロック列をN1回繰り替えしてなるブロック長T2のブロック列を第3基本ブロック列M3と表記する。
【0043】
この場合、第1X座標ブロック列X1は、第2基本ブロック列M2を(N2+1)回繰り返してなるブロック列とする。すなわち、第1X座標ブロック列X1は、{M2,M2,M2,・・・,M2}と表される。また、第2X座標ブロック列X2は、第3基本ブロック列M3を(N2+1)回繰り返してなるブロック列とする。すなわち、第2X座標ブロック列X2は、{M3,M3,M3,・・・,M3}と表される。
【0044】
そして、第3X座標ブロック列X3は、第2基本ブロック列M2の先頭側に補充ブロック列D2を付加したブロック列をN2回繰り返してなるブロック列とする。すなわち、第3X座標ブロック列X3は、{D2,M2,D2,M2,D2,M2,・・・,D2,M2}と表される。また、第4X座標ブロック列X4は、第3基本ブロック列M3の先頭側に補充ブロック列D2を付加したブロック列をN2回繰り返してなるブロック列とする。すなわち、第4X座標ブロック列X4は、{D2,M3,D2,M3,D2,M3,・・・,D2,M3}と表される。なお、この場合に第2基本ブロック列M2及び第3基本ブロック列M3に付加される補充ブロック列D2は、補充ブロック列D1と同様に、b個の0ビットからなる「0」ブロックがm2個連続してなるブロック列である。補充ブロック列D2のブロック長m2は、第2基本ブロック列M2に含まれる補充ブロック列D1のブロック長m1と同じでもよいし、異なってもよい。
【0045】
図6に示されるように、第1X座標ブロック列X1内の第2基本ブロック列M2と、第2X座標ブロック列X2内の第3基本ブロック列M3と、は、各X座標ブロック列の先頭から数えて同じ位置に現れている。したがって、前述した図5の例と同様にして、各X座標ブロック列から部分列が得られた場合に、当該部分列の第2基本ブロック列M2及び第3基本ブロック列M3内における先頭から数えた位置が特定される。また、第3X座標ブロック列X3内の第2基本ブロック列M2と、第4X座標ブロック列X4内の第3基本ブロック列M3と、についても、各X座標ブロック列の先頭から数えて同じ位置に現れている。したがって、各X座標ブロック列から得られる部分列の、第2基本ブロック列M2及び第3基本ブロック列M3内における先頭から数えた位置も、同様にして特定される。
【0046】
さらに、第3X座標ブロック列X3及び第4X座標ブロック列X4は、第1基本ブロック列M1がそれぞれ第2基本ブロック列M2又は第3基本ブロック列M3に置き換えられたことを除けば、第2X座標ブロック列X2と同様の構成になっている。したがって、第2基本ブロック列M2を(N2+1)回繰り返してなる第1X座標ブロック列X1と、第3X座標ブロック列X3と、の間の関係、及び、第3基本ブロック列M3を(N2+1)回繰り返してなる第2X座標ブロック列X1と、第4X座標ブロック列X4と、の間の関係は、前述した第2基本ブロック列M2と第3基本ブロック列M3との間の関係に類似している。すなわち、第2X座標ブロック列X2内におけるn番目の第3基本ブロック列M3と、第4X座標ブロック列X4内におけるn番目の第3基本ブロック列M3と、は、各X座標ブロック列の先頭から数えた位置が、n×m2ブロック分だけずれることになる。そこで、第2X座標ブロック列X2から取得された部分列の第2基本ブロック列M2内における位置が、第4X座標ブロック列X4内の当該部分列に対応する位置から取得された部分列の第2基本ブロック列M2内における位置に対して、どの程度ずれているかによって、この部分列が、第4X座標ブロック列X4内の何番目の第2基本ブロック列M2から得られたかが特定される。これらの情報を用いて、最終的に、各X座標ブロック列の互いに対応する位置から得られた部分列に基づいて、当該部分列がX座標ブロック列全体の中のどの位置に存在するかが特定されることになる。
【0047】
ここで、このようなX座標情報を取得する際の計算手順の具体例について、説明する。ここでは具体例として、各X座標ブロック列の部分列として、図4(a)に示した情報が得られた場合について、説明する。まず本実施形態に係る画像処理装置は、各部分列の第1基本ブロック列M1内における位置(各部分列が第1基本ブロック列M1の先頭から数えて何番目のブロックから開始するか)を特定する。
【0048】
以下では、第1〜第4X座標ブロック列X1〜X4のそれぞれから取得された部分列の第1基本ブロック列M1内における先頭位置を、それぞれPx1,Px2,Px3及びPx4と表記する。ここでは具体例として、第1X座標ブロック列X1から取得された「066」で表される部分列は、第1基本ブロック列M1の先頭から数えて132番目のブロックから開始しているものとする(すなわち、Px1=132)。また、同様に、Px2=190,Px3=312,Px4=41とする。これらの位置情報は、予め画像処理装置に保持されている、部分列と位置とを対応づけるテーブルを参照することによって、特定される。
【0049】
続いて画像処理装置は、第1X座標ブロック列X1と第2X座標ブロック列X2との間の比較を行う。この両者から得られた部分列の間の位置ずれ量d1は、計算式
d1=(Px1−Px2) mod T1
によって算出される。ここで、x mod yは、xをyで割った余り(0からy−1までのいずれかの値)を示している。上述した数値を当てはめると、
d1=(132−190) mod 511=453
と算出される。これによって、部分列は、第2X座標ブロック列X2内のいずれかの第3基本ブロック列M3内において、第(d1/m1)番目の第1基本ブロック列M1内に存在することが分かる。したがって、第3基本ブロック列M3内における部分列の先頭位置s1は、計算式
s1=(d1/m1−1)(T1+m1)+(Px2+m1)
によって算出される。上述した数値を当てはめると、
s1=(453/1−1)(511+1)+(190+1)=231615
と算出される。なお、ここではm1=1、N1=511としている。
【0050】
次に画像処理装置は、上述した第1X座標ブロック列X1と第2X座標ブロック列X2との間の比較と同様にして、第3X座標ブロック列X3と第3X座標ブロック列X3との間の比較を行い、両者から得られた部分列の間の位置ずれ量d2を算出する。具体的に、d2は、計算式
d2=(Px3−Px4) mod T1
によって算出される。上述した数値を当てはめると、
d2=(312−41) mod 511=271
と算出される。これによって、部分列は、第4X座標ブロック列X4内のいずれかの第3基本ブロック列M3内において、第(d2/m1)番目の第1基本ブロック列M1内に存在することが分かる。したがって、第3基本ブロック列M3内における部分列の先頭位置s2は、計算式
s2=(d2/m1−1)(T1+m1)+(Px4+m1)
によって算出される。上述した数値を当てはめると、
s2=(271/1−1)(511+1)+(41+1)=138282
と算出される。
【0051】
さらに画像処理装置は、これまでの計算によって算出されたs1とs2との間の位置ずれ量d3を算出する。具体的に、位置ずれ量d3は、計算式
d3=(s1−s2) mod T2
によって算出される。具体的には、d3=93333と算出される。これによって、部分列は、第4X座標ブロック列X4内において、第(d3/m2)番目の第3基本ブロック列M3内に存在することが分かる。したがって、第4X座標ブロック列X4内における部分列の先頭位置を表す値xbは、計算式
xb=(d3/m2−1)(T2+m2)+(s2+m2)
によって算出される。上述した数値を当てはめると、
xb=(93333/1−1)(512・511+1)+(138282+1)
=24418869439
と算出される。なお、ここではm2=1としている。また、T2=N1(N1+1)である。このxbの値が、第4X座標ブロック列X4内における読み取られた部分列の位置を示すX座標値となる。
【0052】
以下、本発明の一実施形態に係る画像生成装置及び画像処理装置の構成例について、説明する。
【0053】
図7は、本実施形態に係る画像生成装置1の構成例を示す図である。画像生成装置1は、制御部11と、記憶部12と、操作部13と、表示部14と、を含んで構成され、画像形成装置2と接続されている。
【0054】
制御部11は、例えばCPU等であって、記憶部12に格納されるプログラムに従って各種の情報処理を実行する。記憶部12は、例えばRAMやROM等のメモリ素子、ハードディスクなどを含んで構成され、制御部11によって実行されるプログラムや、各種のデータを保持する。また、記憶部12は、制御部11のワークメモリとしても動作する。
【0055】
操作部13は、例えばキーボードやマウス等であって、利用者の指示操作を受け付けて、当該指示操作の内容を制御部11に出力する。表示部14は、例えば液晶ディスプレイ等であり、制御部11からの指示に従って、画像の表示を行う。
【0056】
画像形成装置2は、プリンタ等であって、画像生成装置1から入力される指示に従って、紙などの記録媒体上に画像を形成する。
【0057】
画像生成装置1は、機能的に、図8に示すように、文書画像取得部21と、コード情報取得部22と、コード画像生成部23と、画像合成部24と、を含んで構成される。これらの機能は、例えば制御部11が記憶部12に格納されるプログラムを実行することによって実現される。このプログラムは、例えばインターネット等の通信手段を介して提供されてもよいし、光ディスク等の各種のコンピュータ読み取り可能な情報記憶媒体に格納されて提供されてもよい。
【0058】
文書画像取得部21は、記録媒体に形成する対象となる文書画像を取得する。この文書画像は、予め記憶部12に記憶された画像であってもよいし、利用者がアプリケーションプログラム等を実行して作成した画像であってもよい。
【0059】
コード情報取得部22は、コード画像内に埋め込むべきコード情報を取得する。本実施形態では、p次のM系列をb回繰り返してなるブロック列が、第1基本ブロック列M1として記憶部12内に予め記憶されていることとする。コード情報取得部22は、この第1基本ブロック列M1を記憶部12から読み出して、当該読み出した第1基本ブロック列M1を用いて上述した各X座標ブロック列及びこれらと同様のY座標ブロック列を生成することにより、X座標情報及びY座標情報を取得する。ここでbは、1ブロック当たりに埋め込む情報のビット長であって、pは、後述する画像読み取り装置4が読み取る画像範囲内に含まれるX座標情報及びY座標情報の部分列のビット長である。また、コード情報取得部22は、コード画像が形成される記録媒体を特定するための媒体識別情報なども、コード情報として取得することとしてもよい。
【0060】
コード画像生成部23は、コード情報取得部22によって取得されたコード情報に応じて、当該コード情報を埋め込んだコード画像を生成する。このコード画像は、前述したように、例えばコード画像を分割して得られる複数のブロックそれぞれに含まれるドット画像の配置パターンによって、埋め込み対象となるコード情報を表す画像である。
【0061】
画像合成部24は、文書画像取得部21によって取得された文書画像に対して、コード画像生成部23によって生成されたコード画像を背景画像として重ね合わせることによって、画像形成の対象となる合成画像を生成する。そして、生成された合成画像を画像形成装置2に対して出力する。画像形成装置2は、この出力された合成画像を、紙などの記録媒体上に形成する。こうして、文書画像とともに、コード情報が埋め込まれたコード画像が形成された記録媒体が作成される。
【0062】
次に、本実施形態に係る画像処理装置3について、説明する。図9は、画像処理装置3の構成例を示す図である。画像処理装置3は、制御部31と、記憶部32と、操作部33と、表示部34と、を含んで構成され、画像読み取り装置4と接続されている。なお、制御部31、記憶部32、操作部33、及び表示部34は、それぞれ制御部11、記憶部12,操作部13、及び表示部14と同様の構成であってよい。
【0063】
画像読み取り装置4は、例えばペン型の筐体に内蔵された小型カメラ等であって、記録媒体の表面に形成されている画像を読み取って、当該読み取った画像を画像処理装置3に対して出力する。ここでは前述したように、画像読み取り装置4は、コード画像内に含まれる4行4列のブロック範囲を読み取り領域として、画像の読み取りを行うこととする。
【0064】
画像処理装置3は、機能的に、図10に示すように、読み取り画像取得部41と、ドット画像検出部42と、ブロック特定部43と、回転補正部44と、コード情報復元部45と、X座標値算出部46と、Y座標値算出部47と、を含んで構成される。
【0065】
読み取り画像取得部41は、画像読み取り装置4が記録媒体表面に形成された画像を読み取って得られる読み取り画像を取得する。
【0066】
ドット画像検出部42は、パターンマッチング処理等の画像処理によって、読み取り画像取得部41が取得した読み取り画像内に含まれるドット画像の位置を検出する。
【0067】
ブロック特定部43は、前述した方法により、ドット画像検出部42によって検出された各ドット画像の位置に基づいて、各ブロック内のドット画像の数が予め定められた数に一致するように、各ブロックの境界を特定する。
【0068】
回転補正部44は、ブロック特定部43によって特定された各ブロック内に含まれるドット画像の配置パターンの中に、画像回転検出用パターン又は制限パターンが含まれているかを判定する。そして、制限パターンが検出された場合には、この制限パターンが画像回転検出用パターンに一致するように、読み取り画像取得部41が取得した読み取り画像を90度単位で回転する補正を行う。これにより、読み取り画像の向きが特定され、画像生成装置1によって生成されたコード画像本来の向きに補正される。一方、制限パターンが検出されず、画像回転検出用パターンが検出された場合には、読み取り画像の向きは正しいことになるので、このような回転補正を行う必要はない。
【0069】
コード情報復元部45は、回転補正部44によって回転補正が行われた読み取り画像に対して、当該読み取り画像内に埋め込まれたコード情報の復元を行う。具体的に、コード情報復元部45は、まずブロック特定部43によって特定された各ブロック内におけるドット画像の配置パターンに基づいて、ブロックごとに埋め込まれたコード情報を復元する。そして、各ブロックに埋め込まれた6ビットの情報を上位3ビットと下位3ビットとに分離することによって、X座標情報(4個のX座標ブロック列のそれぞれに含まれる、3ブロック長の4個の部分列)及びY座標情報(4個のY座標ブロック列のそれぞれに含まれる、3ブロック長の4個の部分列)を取得する。
【0070】
X座標値算出部46は、コード情報復元部45によって復元されたX座標情報に基づいて、画像読み取り装置4が読み取った読み取り画像のコード画像内における位置を示すX座標値を算出する。また、Y座標値算出部47は、同じくコード情報復元部45によって復元されたY座標情報に基づいて、画像読み取り装置4が読み取った読み取り画像のコード画像内における位置を示すY座標値を算出する。こうして、コード画像内における読み取り画像の位置を示すX座標値とY座標値の組が算出される。
【0071】
ここで、X座標値算出部46がX座標値を算出する処理の流れの一例を、図11のフロー図に基づいて説明する。なお、Y座標値算出部47も、同様の手順によってY座標値を算出することとしてよい。
【0072】
まずX座標値算出部46は、コード情報復元部45によって得られた4個の部分列のそれぞれについて、第1基本ブロック列M1内におけるブロック単位の位置を示す情報を取得する(S1)。この情報は、前述したように、予め記憶部32に記憶されたテーブルを参照することによって、取得される。
【0073】
次にX座標値算出部46は、予め定められた計算式にPx1及びPx2の値を代入して、Px1とPx2との間の位置ずれ量d1を算出する(S2)。続いて、S2で算出された位置ずれ量d1を用いて、コード情報復元部45が取得した部分列の第3基本ブロック列M3内における位置s1を算出する(S3)。
【0074】
一方、X座標値算出部46は、予め定められた計算式にPx3及びPx4の値を代入して、Px3とPx4との間の位置ずれ量d2を算出する(S4)。そして、S4で算出された位置ずれ量d2を用いて、部分列の第3基本ブロック列M3内における位置s2を算出する(S5)。
【0075】
その後、X座標値算出部46は、S3で算出された位置s1の値、及びS5で算出された位置s2の値の間の位置ずれ量d3を算出する(S6)。そして、S6で算出された位置ずれ量d3と、S5で算出された位置s2と、を用いて、X座標値xbを算出する(S7)。
【0076】
以上説明した処理によって、画像読み取り装置4が読み取った読み取り画像のコード画像内における位置を示すX座標値が算出される。
【0077】
なお、本発明の実施の形態は、以上説明したものに限られない。例えば以上の説明では、各ブロックには3ビットのX座標情報及び3ビットのY座標情報が埋め込まれることとしたが、各ブロックに埋め込まれる情報量はこれとは異なる値であってもよい。また、以上の説明においては、X方向及びY方向のそれぞれに沿って並んだ3ブロックから復元された9ビットの情報を部分列として用いることとしたが、各部分列の長さはこれ以外のものであってもよい。また、上述した説明ではX座標及びY座標のそれぞれについて、4個の座標ブロック列を用いて座標情報を表すこととしたが、既に述べたとおり、2個の座標ブロック列だけでも、p次のM系列を用いて当該M系列の周期を超える範囲の座標値が表現される。また、本実施形態に係る画像生成装置は、4個を超える数の座標ブロック列を用いて各座標情報を表現することとしてもよい。
【図面の簡単な説明】
【0078】
【図1】コード画像の一例を示す部分拡大図である。
【図2】ブロック配置の一例を示す図である。
【図3】コード情報を復元した結果の一例を示す図である。
【図4】コード情報をX座標情報及びY座標情報に分離した結果の一例を示す図である。
【図5】第1X座標ブロック列及び第2X座標ブロック列の構成を説明する図である。
【図6】第1〜第4X座標ブロック列の構成を説明する図である。
【図7】本発明の実施の形態に係る画像生成装置の構成例を示す図である。
【図8】本発明の実施の形態に係る画像生成装置が実現する機能の一例を示す機能ブロック図である。
【図9】本発明の実施の形態に係る画像処理装置の構成例を示す図である。
【図10】本発明の実施の形態に係る画像処理装置が実現する機能の一例を示す機能ブロック図である。
【図11】X座標値算出部が実行する処理の流れの一例を示す図である。
【符号の説明】
【0079】
1 画像生成装置、2 画像形成装置、3 画像処理装置、4 画像読み取り装置、11,31 制御部、12,32 記憶部、13,33 操作部、14,34 表示部、21 文書画像取得部、22 コード情報取得部、23 コード画像生成部、24 画像合成部、41 読み取り画像取得部、42 ドット画像検出部、43 ブロック特定部、44 回転補正部、45 コード情報復元部、46 X座標値算出部、47 Y座標値算出部。
【特許請求の範囲】
【請求項1】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段と、
前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段と、
を含むことを特徴とする画像生成装置。
【請求項2】
前記補充符号列は、予め定められた長さで0ビットが連続する符号列であって、前記基本符号列の前に付加される
ことを特徴とする請求項1記載の画像生成装置。
【請求項3】
前記符号画像生成手段は、前記符号画像を分割してなる複数の単位領域のそれぞれに、予め定められた単位ビット長の符号列を埋め込んで前記符号画像を生成し、
前記補充符号列は、前記単位ビット長の整数倍に相当する長さで0ビットが連続する符号列である
ことを特徴とする請求項2記載の画像生成装置。
【請求項4】
前記符号画像生成手段は、前記第1符号列及び第2符号列が埋め込まれる領域に対応する領域に、さらに、前記第1符号列に補充符号列を付加した符号列を繰り返してなる第3符号列、及び、前記第2符号列に補充符号列を付加した符号列を繰り返してなる第4符号列のそれぞれを埋め込んだ符号画像を生成する
ことを特徴とする請求項1から3のいずれか一項記載の画像生成装置。
【請求項5】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像の一部領域を読み取って得られる読み取り画像を取得する画像取得手段と、
前記読み取り画像に埋め込まれた情報を復元して、前記第1符号列及び第2符号列それぞれにおいて互いに対応する位置を占める部分列を取得する手段と、
前記各部分列が前記基本符号列内に占める位置を特定する手段と、
前記特定した前記各部分列の位置に基づいて、前記第2符号列内における前記部分列の位置を算出する手段と、
を含むことを特徴とする画像処理装置。
【請求項6】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段、及び
前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段、
としてコンピュータを機能させるためのプログラム。
【請求項7】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像が形成された記録媒体。
【請求項1】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段と、
前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段と、
を含むことを特徴とする画像生成装置。
【請求項2】
前記補充符号列は、予め定められた長さで0ビットが連続する符号列であって、前記基本符号列の前に付加される
ことを特徴とする請求項1記載の画像生成装置。
【請求項3】
前記符号画像生成手段は、前記符号画像を分割してなる複数の単位領域のそれぞれに、予め定められた単位ビット長の符号列を埋め込んで前記符号画像を生成し、
前記補充符号列は、前記単位ビット長の整数倍に相当する長さで0ビットが連続する符号列である
ことを特徴とする請求項2記載の画像生成装置。
【請求項4】
前記符号画像生成手段は、前記第1符号列及び第2符号列が埋め込まれる領域に対応する領域に、さらに、前記第1符号列に補充符号列を付加した符号列を繰り返してなる第3符号列、及び、前記第2符号列に補充符号列を付加した符号列を繰り返してなる第4符号列のそれぞれを埋め込んだ符号画像を生成する
ことを特徴とする請求項1から3のいずれか一項記載の画像生成装置。
【請求項5】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像の一部領域を読み取って得られる読み取り画像を取得する画像取得手段と、
前記読み取り画像に埋め込まれた情報を復元して、前記第1符号列及び第2符号列それぞれにおいて互いに対応する位置を占める部分列を取得する手段と、
前記各部分列が前記基本符号列内に占める位置を特定する手段と、
前記特定した前記各部分列の位置に基づいて、前記第2符号列内における前記部分列の位置を算出する手段と、
を含むことを特徴とする画像処理装置。
【請求項6】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を取得する手段、及び
前記取得した基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像を生成する符号画像生成手段、
としてコンピュータを機能させるためのプログラム。
【請求項7】
予め定められた長さの符号列であって、その一部に基づいて、当該一部が符号列内に占める位置を特定可能な基本符号列を複数繰り返してなる第1符号列、及び、前記基本符号列に補充符号列を付加した符号列を繰り返してなる第2符号列のそれぞれを、互いに対応する領域に埋め込んだ符号画像が形成された記録媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2010−146528(P2010−146528A)
【公開日】平成22年7月1日(2010.7.1)
【国際特許分類】
【出願番号】特願2008−326550(P2008−326550)
【出願日】平成20年12月22日(2008.12.22)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】
【公開日】平成22年7月1日(2010.7.1)
【国際特許分類】
【出願日】平成20年12月22日(2008.12.22)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】
[ Back to top ]