以下に添付図面を参照して、光学シンボル、表示媒体、物品および生成装置の実施形態を詳細に説明する。
(第1の実施形態)
図1は、第1の実施形態に係る光学シンボルの利用形態の例を概略的に示す。図1において、各物品50に対して、第1の実施形態に係る光学シンボル30が表示された表示媒体40がそれぞれ添付される。表示媒体40は、例えば光学シンボル30が印刷された印刷媒体である。これに限らず、表示媒体40は、光学シンボル30が表示された、LCD(Liquid Crystal Display)などの表示デバイスでもよい。
詳細は後述するが、光学シンボル30は、それぞれセルと呼ばれる複数の小領域を含み、各セルが、隣接するセルと色を異ならせて配列されて構成される。光学シンボル30は、セル間の色の遷移を用いて情報を表現する。すなわち、光学シンボル30は、色を用いて情報をコード化したコード(カラーコード)である。
コード認識装置10は、カメラ11により撮像された撮像画像から光学シンボル30を認識し、認識された光学シンボル30をデコードする。より具体的には、コード認識装置10は、光学シンボル30の認識により光学シンボル30に含まれる各セルの色の遷移を検出し、検出された色の遷移に基づきデコードを行う。コード認識装置10は、光学シンボル30からデコードされた情報を出力する。
(第1の実施形態に係る光学シンボルの詳細)
図2は、第1の実施形態に係る光学シンボル30の基本的な構成例を示す。図2に示されるように、光学シンボル30は、幹と、一端が幹に接続される枝とを含んで構成される。幹は、順次隣接する複数のセルが1次元に配列されたセル列(第1の配列)により構成される。すなわち、幹は、複数のセルが分岐および交差せずに配列される。枝は、幹の1つのセルに接続されるセルを含む1以上のセルが、幹の配列方向と異なる方向に向けて、順次隣接して1次元に配列されたセル列(第2の配列)により構成される。枝は、複数のセルを含む場合、幹と同様に、複数のセルが分岐および交差せずに配列される。また、枝同士は、接触しない。
幹および枝を構成する各セルは、色が割り当てられる。このとき、各セルに割り当てる色は、隣接するセル同士で同一色とならないように選択される。また、各セルに割り当てる色は、予め定めた複数の色から選択される。セルに割り当てるための複数の色は、当該複数の色から任意に選択した2色を隣接させた場合に、この2色を識別容易な色の組み合わせとすることが好ましい。
第1の実施形態に係る光学シンボル30は、隣接するセル間での色の遷移に基づき情報を表現する。換言すれば、光学シンボル30は、色の遷移を用いて情報をコード化する。光学シンボル30は、幹の各セル、および、枝の各セルにより、それぞれ異なる情報をコード化して表現することができる。幹の各セル(主コードセル)によりコード化された情報を主コードと呼び、枝の各セル(副コードセル)によりコード化された情報を副コードと呼ぶ。以下、特に記載の無い限り、幹および枝を、それぞれ主コード部300および副コード部301と呼ぶ。副コード部301は、複数の枝を含むことができる。
図2において、主コード部300は、一端のセルを開始セル302とし(図中で「S」とも記載)、他端のセルを終了セル303とする(図中で「E」とも記載)。主コード部300の各セルの色の遷移は、図中に矢印にて示されるように、開始セル302から終了セル303に向けて検出されるものとする。また、副コード部301の各セルの色の遷移は、図中に矢印にて示されるように、主コード部300と接続される端から、他端に向けて検出されるものとする。
なお、開始セル302および終了セル303は、省略することができる。この場合、主コード部300の先頭および後端の各セルが、それぞれ開始セル302および終了セル303の役割を兼用することができる。
以下では、光学シンボル30を用いてコード化する情報が文字列であるものとする。文字列は、例えば「0」〜「9」の数字である。これに限らず、光学シンボル30は、「a」〜「z」、または、小文字の「a」〜「z」に大文字の「A」〜「Z」を加えたアルファベットによる文字列や、さらに記号を含めた文字列をコード化することもできる。
図3は、第1の実施形態に係る光学シンボル30にコード化するための情報の例を示す。図3において、主コード部300’および副コード部301’は、それぞれ、コード化後の光学シンボル30における主コード部300および副コード部301に対応する。また、図3において、主コード部300’および副コード部301’に含まれる各マスを、光学シンボル30の各セルに倣って、便宜上、セルと呼ぶ。
図3は、コード化を行う文字列が数字である場合の例である。主コード部300’のセル列の各セル「d1」、「d2」、「d3」、…が、文字列の各桁を表現している。図3における左端のセル「d1」が文字列の第1桁目を表し、セル「d1」を起点として順次隣接する各セル「d2」、「d3」、…において、表現される桁が順次移動する。すなわち、主コード部300’のセル列の各セル「d1」、「d2」、「d3」、…は、文字列における位置に対応している。
図3の例では、当該各セル「d1」、「d2」、「d3」、…は、10進数の各桁を表しているものとする。具体的には、先端セルである左端のセル「d1」が「100」の桁を示し、以降、各セル「d2」、「d3」、…は、順次、「101」、「102」、…の桁を表す。
また、図3の例において、副コード部301’は、端が接続される主コード部300’のセル「d1」、「d2」、「d3」、…における値を、2進数で表している。図3の例では、副コード部301’の各セル列において、主コード部300’に接続されるセルが最下位ビットとされ、主コード部300’のセル「d1」、「d2」および「d3」に接続される各セル列がそれぞれ値「b0010」、値「b0110」および値「b1000」とされている。したがって、図3の光学シンボル30は、「100」、「101」および「102」の桁の値が、それぞれ10進数で「2」、「6」および「8」である文字列を表している。なお、値の表記において先頭の「b」は、続く数字が2進数による値であることを示している。
第1の実施形態では、上述したように、主コード部300’および副コード部301’において表現される情報を、セル間の色の遷移を用いてコード化する。ここで、主コード部300’は、表現される情報が予め定められている。したがって、主コード部300’がコード化された光学シンボル30における主コード部300は、各セルの色が、隣接するセル同士で異なっていることが分かればデコードできる。例えば、主コード部300に含まれるセルの数が既知であれば、セル間の色の遷移の回数を計数することで、主コード部300をデコードできる。
一方、副コード部301’は、コード化する情報に応じて異なる値を表現する必要がある。そのため、副コード部301’は、色の遷移と表現可能な値とを予め関連付けた変換テーブルを用いてコード化を行う。
図4を用いて、第1の実施形態に適用可能な、2進数を表現可能なコード化ルールについて説明する。隣接する異なる色のセル間での色の遷移により2値を表現するためには、少なくとも3色が必要となる。図4は、赤色(R)、緑色(G)および青色(B)の3色を用いて2値を表現する場合のコード化ルールの例を示している。例えば、図4(a)に例示されるように、時計回り、すなわち、R色からB色、B色からG色、および、G色からR色への各遷移により値「0」を表現する。また、反時計回り、すなわち、R色からG色、G色からB色、および、B色からR色の各遷移により値「1」を表現する。
例えば、図4(b)に示されるように、G色、B色、G色、R色の順に各セルが順次隣接されたセル列において、図中で左から右に向けて各セルの色遷移を見た場合について考える。この場合、G色からB色への遷移が値「1」、B色からG色への遷移が値「0」、G色からR色への遷移が値「0」をそれぞれ表す。したがって、図4(b)の配列は、値「b001」、すなわち10進数の値「1」を表す。
また例えば、図4(c)に示されるように、図4(b)の各セルの配列に対し、図4(b)とは逆方向に向けて色遷移を見た場合について考える。この場合、R色からG色への遷移が値「1」、G色からB色への遷移が値「1」、B色からG色への遷移が値「0」をそれぞれ表す。したがって、図4(c)の配列は、値「011」、すなわち、10進数の値「3」を表す。
図4(d)は、図4(a)に示したコード化ルールに従った色遷移と値とを関連付ける変換テーブルの例を示す。図4(d)の変換テーブルにおいて、左端の列は、直前のセル(遷移元のセル)の色を示し、上端の行は、表現したい値を示す。例えば、遷移元のセルの色がR色で、値「1」を表現したい場合、遷移元のセルに隣接する遷移先のセルの色をG色とする。同様に、遷移元のセルの色がB色で値「1」を表現したい場合、遷移先のセルの色をR色とする。
図5は、第1の実施形態に係る、コード化された主コード部300および副コード部301における色の配列の例を示す。図5(a)は、主コード部300のセル列における各セルの色の配列の例を示す。図5(a)の例では、主コード部300のセル列は、第1色(この例ではR色)のセルと、第2色(この例ではB色)の2色のセルを交互に配置して構成している。また、主コード部300のセル列は、2N個(Nは1以上の整数)のセルにより構成している。これにより、主コード部300のセル列の先端のセルの色を第1色に固定することで、後端のセルの色が第2色に一意に決定されるため、主コード部300のセル列の先端および後端の認識が容易となる。
図5(b)は、副コード部301のセル列における色の配列の例を示す。副コード部301のセル列は、各セルに対して、上述した2値を表現するための3色が、隣接するセルの色が異なるように割り当てられる。また、副コード部301のセル列は、当該セル列が接続される主コード部300のセルを最初の遷移元のセルとして、上述したコード化ルールに従ったコード化がなされる。
副コード部301のセル列は、表現する値によっては、当該3色のうち割り当てられない色が発生する場合がある。これに対して、主コード部300は、セル列に含まれる各セルに割り当てる所定の2色を、副コード部301において2値を表現するために用いる3色から選択し、この2色を各セルに交互に割り当ててセル列を構成している。したがって、主コード部300のセル列は、各セルに、主コード部300に用いるように定められた各色が必ず割り当てられる。そのため、例えば当該光学シンボル30を含む画像から当該光学シンボル30を切り出す場合に、主コード部300の各セルに割り当てられている色の情報のみを検出することで、容易に光学シンボル30を切り出すことが可能である。
図6は、第1の実施形態に係る、図3に例示した情報を、図4を用いて説明したコード化ルールに従いコード化した光学シンボル30の例を示す。この例では、コード化された主コード部300のセル列は、偶数個のセルを含み、先端のセルをR色として、R色およびB色が交互に配置されて構成されている。
また、コード化された副コード部301は、例えば左端のセル列において、当該セル列の端のセルが接続される、主コード部300のセルのR色を最初の遷移元の色として、各セルの色が割り当てられる。この例では、当該セル列の各セルに対して、値「0」、「1」、「0」、「0」に従い、図4(d)の変換テーブルを参照して、B色、R色、B色、G色がそれぞれ割り当てられる。
図6に示されるように、第1の実施形態に係る光学シンボル30は、幹(主コード部300のセル列)の伸長方向と異なる一方向に対し、複数の枝(副コード部301の各セル列)が、主コード部300のセル列の各セルにそれぞれ接続される。且つ、第1の実施形態に係る光学シンボル30は、カメラ11にて光学シンボル30を撮像した撮像画像から光学シンボル30を認識する際の認識精度を良好とするため、副コード部301の各セル列が、隣り合うセル列に対して所定の間隔を開けて配置される。このように、第1の実施形態に係る光学シンボル30は、幹と複数の枝とによる櫛型の形状として構成される。
光学シンボル30を櫛型形状とすることで、例えば光学シンボル30が含まれる画像において、光学シンボル30の形状の当該画像に含まれる他の形状との区別や、光学シンボル30の当該画像内での向き(角度)などの認識が容易となる。これにより、例えば後述するテンプレートを用いた光学シンボル30の切り出し処理を、高精度に実行可能となる。
上述では、光学シンボル30の各セルに割り当てる色数を3色として、情報を2値により表現したが、これはこの例に限定されず、各セルに割り当てる色数を4色以上としてもよい。各セルに割り当てる色数を多くすることで、同じセル数でより多くの情報を表現可能となる。
図7は、第1の実施形態に係る、R色、G色およびB色と、K色(黒色)との4色を用いた場合のコード化ルールの例を示す。4色を用いる場合、3値すなわち3進数での表現が可能である。例えば、図7(a)に例示されるように、時計回り、すなわち、R色からK色、K色からB色、B色からG色、G色からR色への各遷移により値「0」を表現する。また、反時計回り、すなわち、R色からG色、G色からB色、B色からK色、K色からR色への各遷移により値「1」を表現する。さらに、対角線上、すなわち、R色とB色との間の双方向の遷移、および、K色とG色との間の双方向の遷移により、それぞれ値「2」を表現する。
例えば、図7(b)に示されるように、G色、R色、B色、K色、G色の順に各セルが順次接続されたセル列において、図中で左から右に向けて各セルの色遷移を見た場合について考える。この場合、G色からR色への遷移が値「0」、R色からB色への遷移が値「2」、B色からK色への遷移が値「1」、K色からG色への遷移が値「2」をそれぞれ表す。したがって、図7(b)の配列は、値「3d2120」、すなわち10進数の値「69」を表す。なお、値の表記において先頭の「3d」は、続く数字が3進数による値であることを示している。
また例えば、図7(c)に示されるように、図7(b)の各セルの配列に対し、図7(b)とは逆方向に向けて色遷移を見た場合について考える。この場合、G色からK色への遷移が値「2」、K色からB色への遷移が値「0」、B色からR色への遷移が値「2」、R色からG色への遷移が値「1」をそれぞれ表す。したがって、図7(c)の配列は、値「3d1202」、すなわち10進数の値「47」を表す。
4色の色遷移を用いたコード化ルールは、図7(a)に示した例に限定されない。図7(d)は、第1の実施形態に適用可能な、4色の色遷移を用いたコード化ルールの別の例を示す。この別の例では、R色とK色と間の遷移が双方向それぞれで値「0」を表し、R色とG色との間の遷移が双方向それぞれで値「1」を表し、G色とB色との間の遷移が双方向それぞれで値「2」を表す。また、B色からR色への遷移、および、K色からG色への遷移が値「1」をそれぞれ表す。さらに、G色からK色への遷移が値「0」を、R色からB色への遷移が値「2」をそれぞれ表す。
図7(e)は、図7(d)に示したコード化ルールに従った色遷移と値とを関連付ける変換テーブルの例を示す。図7(e)に変換テーブルにおける列および行の意味は、上述した図4(d)の変換テーブルと同様であるので、ここでの説明を省略する。図7(e)において、例えば、遷移元のセルの色がR色で、値「2」を表現したい場合、遷移元のセルに隣接する遷移先のセルの色をB色とする。同様に、遷移元のセルの色がK色で値「1」を表現したい場合、遷移先のセルの色をG色とする。
図8および図9を用いて、第1の実施形態に係る、光学シンボル30の各セルに割り当てる色数を4色とした場合のより具体的な例について説明する。一例として、図8に示すように、主コード部300’の各セル「d1」、「d2」、「d3」および「d4」に接続される、副コード部301’の各セル列がそれぞれ値「3d0121」、「3d2101」、「3d2212」および「3d0220」とされている。
図9は、図8に例示した情報を、図7を用いて説明したコード化ルールに従いコード化した光学シンボル30の例を示す。この例では、主コード部300のセル列は、偶数個のセルを含み、先端のセルをR色として、R色およびK色が交互に配置されて構成されている。
また、副コード部301は、図6と同様にして、例えば左端のセル列において、当該セル列の端のセルが接続される、主コード部300のセルのR色を最初の遷移元の色として、各セルの色が割り当てられる。この例では、当該セル列の各セルに対して、値「1」、「2」、「1」、「0」に従い、図7(d)の変換テーブルを参照して、G色、B色、R色、K色がそれぞれ割り当てられている。
(第1の実施形態に適用可能な装置構成)
次に、第1の実施形態に係る光学シンボル30を生成するための構成について説明する。図10は、第1の実施形態に適用可能なコード生成システムの一例の構成を示す。図10において、コード生成システムは、コード生成装置20と、コード生成装置20に対して例えばネットワーク22を介して接続されるプリンタ21とを含む。
コード生成装置20は、入力された情報を上述したコード化ルールに従いコード化して、光学シンボル30を生成する。プリンタ21は、コード生成装置20により生成された光学シンボル30を印刷媒体に印刷し、光学シンボル30が表示される表示媒体40を作成する。作成された表示媒体40は、例えば、図1を用いて説明したように、物品50に貼付される。
図11は、第1の実施形態に係るコード生成装置20のハードウェア構成の例を示す。図11において、コード生成装置20は、CPU(Central Processing Unit)2000と、ROM(Read Only Memory)2001と、RAM(Random Access Memory)2002と、グラフィクスI/F2003と、ストレージ2005と、データI/F2006と、通信I/F2009とを含み、これら各部がバス2010により互いに通信可能に接続される。このように、第1の実施形態に係るコード生成装置20は、一般的なコンピュータを用いて実現できる。
ストレージ2005は、ハードディスクドライブやフラッシュメモリといった不揮発性の記憶媒体であって、プログラムやデータが記憶される。CPU2000は、ストレージ2005やROM2001に記憶されるプログラムに従い、RAM2002をワークメモリとして用いて、コード生成装置20の全体の動作を制御する。
グラフィクスI/F2003は、ディスプレイ2004が接続され、CPU2000によりプログラムに従い生成された表示制御情報に基づき、ディスプレイ2004が表示可能な表示信号を生成する。データI/F2006は、コード生成装置20の外部から供給される外部データに対するインタフェースである。また、データI/F2006は、マウスといったポインティングデバイス2007や、キーボード2008を接続することができる。データI/F2006としては、例えばUSB(Universal Serial Bus)を適用することができる。
コード化対象のデータは、外部からデータI/F2006に供給される。これに限らず、ユーザがポインティングデバイス2007やキーボード2008を操作して、コード化対象のデータをコード生成装置20に入力してもよい。
通信I/F2009は、ネットワーク22と接続され、ネットワーク22を介した通信を行う。ネットワーク22は、LAN(Local Area Network)であってもよいし、インターネットであってもよい。また、ネットワーク22は、有線通信および無線通信の何れを用いて接続されるものでもよい。
図12は、第1の実施形態に係るコード生成装置20の機能を説明するための機能ブロック図である。図12において、コード生成装置20は、データ入力部200と、分解部201と、変換部202と、色割当部203と、テーブル記憶部204と、出力部205とを含む。
これらのうち、データ入力部200、分解部201、変換部202、色割当部203および出力部205は、CPU2000上で動作するプログラムにより構成される。これに限らず、データ入力部200、分解部201、変換部202、色割当部203および出力部205の一部または全部を、互いに協働して動作するハードウェア回路により構成してもよい。また、テーブル記憶部204は、ストレージ2005またはRAM2002における所定の記憶領域により構成される。
データ入力部200は、データI/F2006を介して入力されたコード化対象のデータを受け付ける。この場合、上述したように、コード化対象のデータは、文字列であるものとする。分解部201は、データ入力部200に受け付けられた文字列を、各桁の値に分解する。変換部202は、分解部201で分解された各桁の値を、光学シンボル30の各セルに割り当てる色数に応じた値に変換する。例えば、変換部202は、各セルに割り当てる色数が4色であれば、各桁の値を3進数による値に変換する。
テーブル記憶部204は、図4(d)や図7(d)で説明したような、各セルに割り当てる色数に応じた変換テーブルを予め記憶する。色割当部203は、変換部202で変換された値と、遷移元の色とに基づきテーブル記憶部204に記憶される変換テーブルを参照して、光学シンボル30の各セルに色を割り当てる。なお、色割当部203は、主コード部300のセル列における各セルの色の配列を示す情報を予め記憶しているものとする。
出力部205は、色割当部203で色が割り当てられたセルおよび色の情報を記憶する。出力部205は、光学シンボル30の全てのセルに対して色が割り当てられたと判定した場合に、光学シンボル30の各セルに割り当てられた色を示す情報を、各セルの情報に関連付けて出力する。
なお、色割当部203は、副コード部301における1つのセル列のコード化において、直前にコード化したセルの色を、出力部205から取得することができる。
第1の実施形態に係るコード生成装置20の各機能を実現するためのコード生成プログラムは、インストール可能な形式または実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供される。これに限らず、コード生成プログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、当該ネットワークを介してダウンロードさせることにより提供してもよい。また、コード生成プログラムをインターネットなどのネットワークを経由して提供または配布するように構成してもよい。
コード生成プログラムは、上述した各部(データ入力部200、分解部201、変換部202、色割当部203および出力部205)を含むモジュール構成となっている。実際のハードウェアとしては、CPU2000がストレージ2005などの記憶媒体から当該コード生成プログラムを読み出して実行することにより、上述した各部がRAM2002などの主記憶装置上にロードされ、データ入力部200、分解部201、変換部202、色割当部203および出力部205が主記憶装置上に生成されるようになっている。
図13は、第1の実施形態に係る光学シンボル30の生成方法を示す一例のフローチャートである。ステップS100で、データ入力部200により、コード化対象のデータが受け付けられる。ここで、データ入力部200に受け付けられたデータは、k桁の文字列であるものとする。次のステップS101で、分解部201は、データ入力部200に受け付けられたk桁のデータを、桁毎の値v(i)に分解する。なお、変数iは、処理対象の桁の文字列における位置を示すループ変数であって、(0≦i≦k)の整数である。
次のステップS102で、変数iが値「0」に初期化され、次のステップS103で、変数iに値「1」が加算される。
次のステップS104で、変換部202は、分解部201により分解されたk桁のデータのi桁目の値v(i)を、n進数のp桁の値u(q)に変換する。なお、値nは、予め定められた、2以上の整数である。また、変数qは、副コード部301のセル列内のセルの位置を示すループ変数であって、(0≦q≦p)の整数であり、値pは、副コード部301における処理対象のセル列に含まれるセル数を示す。
次のステップS105で、変数qが値「0」に初期化され、次のステップS106で、変数qに値「1」が加算される。
次のステップS107で、色割当部203は、出力部205から、現在色を割り当てようとしているセルに対する直前(遷移元)のセルの色を取得する。なお、ステップS107において、色割当部203は、変数qの値が「1」である場合には、主コード部300のセル列におけるi桁目に対応するセルの色を取得する。
次のステップS108で、色割当部203は、ステップS107で取得したセルの色と、値u(q)とに基づき、テーブル記憶部204に記憶される変換テーブルを参照して、副コード部301におけるi桁目のセル列におけるq番目のセルの色を取得する。
次のステップS109で、色割当部203は、変数qが値pと一致するか否かを判定する。一致しないと判定した場合(ステップS109、「No」)、色割当部203は、処理をステップS106に戻す。また、一致すると判定した場合(ステップS109、「Yes」)、色割当部203は、処理をステップS110に移行させる。
ステップS110で、変換部202は、変数iが値kと一致するか否かを判定する。一致しないと判定した場合(ステップS110、「No」)、変換部202は、処理をステップS103に戻す。また、一致すると判定した場合(ステップS110、「Yes」)、変換部202は、ステップS100で受け付けられたデータの光学シンボル30へのコード化が終了したとして、図13のフローチャートにおける一連の処理を終了させる。
なお、図13のフローチャートの処理では、副コード部301に含まれる各セル列に含まれるセルの個数が制限されない。これはこの例に限られず、副コード部301に含まれる各セル列に含まれるセルの個数を一定数としてもよい。図14は、第1の実施形態に係る、副コード部301に含まれる各セル列に含まれるセルの個数をM個に固定する例を示す。
このように、副コード部301に含まれる各セル列に含まれるセルの個数を一定数とすることで、後述する、光学シンボル30に対するデコード処理を容易とすることができる。また、さらに、各セルの大きさも一定とすると、後述するテンプレートを用いた光学シンボル30の切り出し処理が容易となり好ましい。
また、第1の実施形態では、隣接するセル間での色の遷移を用いて情報のコード化を行っている。そのため、光学シンボル30を構成する各セルの大きさが異なっていてもよい。この場合、副コード部301に含まれる各セル列の長さを一定とすると、後述するテンプレートを用いた光学シンボル30の切り出し処理が容易となり好ましい。
図15は、第1の実施形態に係る、副コード部301の各セル列に含まれるセルの大きさが各セル列毎に異なり、且つ、各セル列の長さが一定である光学シンボル30の例を示す。図15の例では、副コード部301の左端のセル列がP個のセルを含み、真中のセル列が左端のセル列のセルより大きいセルを、P個より少ないQ個含む。また、図15における副コード部301の右端のセル列は、真中のセル列のセルより大きいセルを、Q個より少ないR個含む。この例では、各セル列に含まれるセルのサイズは、それぞれが属するセル列に含まれるセルの総数(P個、Q個、R個)に応じたサイズとなる。
上述では、光学シンボル30において、図2に示した開始セル302および終了セル303を省略したものとして説明したが、開始セル302および終了セル303を用いることで、後述する光学シンボル30のデコード処理の際の、各セルの認識処理が容易となり好ましい。
図16は、第1の実施形態に係る、上述した開始セル302および終了セル303を用いた光学シンボル30の例を示す。図16に示されるように、主コード部300のセル列において、開始セル302および終了セル303には副コード部301のセル列が接続されない。また、主コード部300のセル列は、開始セル302および終了セル303に挟まれる各セルには副コード部301の各セル列が必ず接続される構成となっている。
このような構成において、各セルに接続される他のセルの個数を示す接続数に基づき、主コード部300と副コード部301とを認識することができる。すなわち、開始セル302および終了セル303と、副コード部301の各セル列の終端のセル(主コード部300のセル列のセルに接続されていない側のセル)は、それぞれ接続数が「1」である。一方、副コード部301の各セル列の終端以外の各セルの接続数が「2」であるのに対し、主コード部300のセル列の、開始セル302および終了セル303以外の各セルは、接続数が「3」である。したがって、接続数「3」のセルに接続される接続数「1」のセルが開始セル302または終了セル303であると判定できる。
開始セル302および終了セル303を用いることで、主コード部300のセル列の先端のセルの色を決めなくても、デコード時に主コード部300のセル列を容易に認識できる。また、主コード部300のセル列の先端のセルの色を決める必要が無いため、主コード部300のセル列にも情報を埋め込むことが可能となり、光学シンボル30が含む情報量を増加させることが可能となる。
(第1の実施形態に係る光学シンボルの具体的な例)
次に、第1の実施形態に係る光学シンボル30のより具体的な例について説明する。ここでは、光学シンボル30におけるセルの色をR色、G色、B色およびK色の4色とし、コード化対象の情報(文字列)の各桁を3進数で表すものとする。
ここで、副コード部301において、数値と文字とを対応付けたコード表を用いて各桁の情報を表現することができる。コード表を用いることで、数字以外の文字や記号を表現可能となる。
このようなコード表の例として、ASCII(American Standard Code for Information Interchange)コードがある。ASCIIコードは、7ビットの値で表現され、コード「0」〜「31」に制御文字、コード「32」に空白、コード「33」〜「47」、「58」〜「64」、「91」〜「96」および「123」〜「126」に記号、コード「48」〜「57」に数字、コード「65」〜「90」にアルファベットの大文字、コード「97」〜「122」にアルファベットの小文字、コード「127」に「削除」がそれぞれ割り当てられている。
例えば、副コード部301の各セル列に含まれるセル数を4個とした場合、3進数では、「0」〜「80」の値を表現できる。したがって、この値をそのままASCIIコードに適用した場合、大文字のアルファベットの途中までを表現可能である。また、副コード部301の各セル列により表現する4桁の3進数の値を、例えばオフセット値「32」を与えてシフトさせることで、ASCIIコードで表現される、すべての文字と、空白など一部の記号を除く記号とを表現可能である。
なお、数値と文字との対応付けは、このASCIIコードによるコード表を利用した例に限定されない。すなわち、第1の実施形態では、文字や記号と、副コード301のセル列により表現可能な数値とを1対1に関連付けることができれば、任意の形式のコード表を適用することができる。以下では、説明のため、副コード部301の各セル列により表現する4桁の3進数の値を、そのままASCIIコードに適用させるものとする。
図17は、第1の実施形態に係る光学シンボル30にコード化するための情報の例を示す。ここでは、コード化対象の情報を、8桁の文字列「CBA00283」とする。また、図17において、この8桁の各桁を、桁の小さい方から順にセル「d1」、「d2」、…、「d8」として示している。図13のフローチャートのステップS100では、この文字列「CBA00283」の入力がデータ入力部200により受け付けられる。ステップS101で、分解部201は、この文字列「CBA00283」を桁毎の値に分解する。このとき、分解部201は、ASCIIコードのコード表を用いて、この文字列「CBA00283」の各桁を、それぞれ「67」、「66」、「65」、「48」、「48」、「50」、「56」、「51」の各値に変換する。
これら各値をさらに3進数に変換すると、それぞれ「3d2111」、「3d2110」、「3d2102」、「3d1210」、「3d1210」、「3d1212」、「3d2002」、「3d1220」となる。これらの3進数の各桁の値が、副コード部301’のセル列における各セルで表現される値となる。変換部202は、図13のフローチャートのステップS104において、この変換処理を、桁毎に実行している。
図18は、第1の実施形態に係る、図17に例示した情報を、図7を用いて説明したコード化ルールに従いコード化した光学シンボル30、および、光学シンボル30が表示された表示媒体40の例を示す。この例では、主コード部300のセル列は、開始セル302および終了セル303を含む10個のセルで構成され、開始セル302をR色として、R色およびK色を交互に配置して構成されている。
色割当部203は、図13のフローチャートのステップS106〜ステップS109において、テーブル記憶部204に記憶される変換テーブルと、遷移元のセルの色とを参照して、上述した文字列の各桁が変換された3進数の桁毎に、色を割り当てる。例えば、図17のセル「d1」に対応する桁は、3進数の値が「3d1220」である。
副コード部301のセル列において、3進数の最も小さい桁(「30」の桁)が主コード部300に接続されるセル(先端セル)に割り当てられるものとする。この場合、色割当部203は、先ず、主コード部300のセル列の当該桁に対応するK色を遷移元のセルの色として変換テーブルを参照して、当該セル列の先端セルに割り当てる色を取得する。以降、色割当部203は、直前に色を割り当てたセルを遷移元のセルとして、当該セル列の各セルに順次色を割り当てる。
図18の例では、図17のセル「d1」に対応する主コード部300のセルに接続される副コード部301のセル列における各セルは、先端セル側から、「R色」、「B色」、「G色」、「R色」がそれぞれ割り当てられている。色割当部203は、当該セル列の終端のセルへの色の割当が終了すると、副コード部301の次のセル列への色割り当て処理を実行する。
コード生成装置20は、上述のようにして生成した光学シンボル30を、表示媒体40上に表示させる。例えば、コード生成装置20は、生成した光学シンボル30を、プリンタ21を用いて表示媒体40としての印刷媒体に印刷する。
図19は、第1の実施形態に係る光学シンボル30が表示された表示媒体40の使用例を概略的に示す。図19の例では、光学シンボル30が表示された表示媒体40が、物品50の外面に添付されている。一例として、光学シンボル30にコード化するコード化対象の文字列を、物品50を識別する識別情報とすることができる。表示媒体40をカメラにより撮像し、撮像画像に含まれる光学シンボル30を認識してデコードすることで、物品50からの作用無しに、物品50の識別情報を取得できる。
(第1の実施形態に係る光学シンボルの認識処理)
次に、第1の実施形態に係る光学シンボル30の認識処理について説明する。図20は、第1の実施形態に適用可能なコード認識システムの一例の構成を示す。図20において、コード認識システムは、コード認識装置10と、カメラ11と、コード管理装置12とを含み、コード認識装置10とコード管理装置12とがネットワーク13を介して互いに通信可能に接続される。また、カメラ11は、コード認識装置10に接続される。
コード認識装置10は、図1を用いて説明したように、カメラ11で撮像された撮像画像に含まれる光学シンボル30の画像を認識し、光学シンボル30のデコードを行う。コード管理装置12は、コード認識装置10が光学シンボル30をデコードして得た情報を管理する。
図21は、第1の実施形態に適用可能なコード認識装置10のハードウェア構成の例を示す。コード認識装置10は、CPU1000と、ROM1001と、RAM1002と、ストレージ1003と、カメラI/F1004と、通信I/F1005とを含み、これら各部がバス1010により互いに通信可能に接続されて構成される。このように、第1の実施形態に係るコード認識装置10は、一般的なコンピュータを用いて実現できる。なお、コード認識装置10は、キーボードやポインティングデバイスといった入力手段や、グラフィクスI/Fおよびディスプレイといった表示手段は、省略することができる。
ストレージ1003は、ハードディスクドライブやフラッシュメモリといった不揮発性の記憶媒体であって、プログラムやデータが記憶される。CPU1000は、ストレージ1003やROM1001に記憶されるプログラムに従い、RAM1002をワークメモリとして用いて、コード認識装置10の全体の動作を制御する。
カメラI/F1004は、カメラ11が接続される。CPU1000は、カメラ11で撮像された撮像画像を、カメラI/F1004を介して取得することができる。また、CPU1000は、カメラI/F1004を介してカメラ11の撮像動作などを制御することも可能である。
通信I/F1005は、ネットワーク13と接続され、ネットワーク13を介した通信を行う。ネットワーク13は、LAN(Local Area Network)であってもよいし、インターネットであってもよい。また、ネットワーク13は、有線通信および無線通信の何れを用いて接続されるものでもよい。
図22は、第1の実施形態に係るコード認識装置10の機能を説明するための一例の機能ブロック図である。図22において、コード認識装置10は、画像取得部100と、切出処理部101と、認識部102と、デコード部103と、テーブル記憶部104とを含む。
これらのうち、画像取得部100、切出処理部101、認識部102およびデコード部103は、CPU1000上で動作するプログラムにより構成される。これに限らず、画像取得部100、切出処理部101、認識部102およびデコード部103の一部または全部を、互いに協働して動作するハードウェア回路により構成してもよい。また、テーブル記憶部104は、ストレージ1003またはRAM1002における所定の記憶領域により構成される。
画像取得部100は、カメラ11により撮像された撮像画像を取得する。切出処理部101は、画像取得部100により取得された撮像画像から、光学シンボル30の画像を切り出す。認識部102は、切出処理部101で切り出された光学シンボル30の画像に対する認識処理を行う。すなわち、認識部102は、光学シンボル30の画像から各セルの画像を検出し、検出した画像の色情報に基づき各セルの接続関係から得られる情報、または、その色情報自身が持つ情報を認識する。認識部102は、この認識結果に基づき、光学シンボル30が持つシンボル情報を作成する。
より具体的には、認識部102は、主コード認識部1020と、副コード認識部1021と、合成部1022とを含む。主コード認識部1020は、光学シンボル30の画像から主コード部300のセル列を構成するセルの色を示す色情報を認識する。副コード認識部1021は、光学シンボル30の画像から、副コード部301に含まれる各セル列を構成するセルの色情報を認識する。このとき、副コード認識部1021は、副コード部301に含まれる各セルの色情報を認識する認識処理を、各セルについて並列的に実行する。合成部1022は、主コード認識部1020および副コード認識部1021でそれぞれ認識して得られた情報を合成し、光学シンボル30が持つシンボル情報として作成する。シンボル情報は、例えば、光学シンボル30の主コード部300および副コード部301が含む各セル列内の各セルの色情報と、各セル間の接続関係の情報とを含む。
テーブル記憶部104は、図4(d)や図7(e)で説明したような、各セルに割り当てる色数に応じた変換テーブルを予め記憶する。デコード部103は、認識部102で作成されたシンボル情報をデコードし、光学シンボル30にコード化された情報を復元する。
第1の実施形態に係るコード認識装置10の各機能を実現するためのコード認識プログラムは、インストール可能な形式または実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供される。これに限らず、コード認識プログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、当該ネットワークを介してダウンロードさせることにより提供してもよい。また、コード認識プログラムをインターネットなどのネットワークを経由して提供または配布するように構成してもよい。
コード認識プログラムは、上述した各部(画像取得部100、切出処理部101、認識部102およびデコード部103)を含むモジュール構成となっている。実際のハードウェアとしては、CPU1000がストレージ1003などの記憶媒体から当該コード認識プログラムを読み出して実行することにより、上述した各部がRAM1002などの主記憶装置上にロードされ、画像取得部100、切出処理部101、認識部102およびデコード部103が主記憶装置上に生成されるようになっている。
(第1の実施形態に係る光学シンボルの認識処理の詳細)
次に、第1の実施形態に係る光学シンボル30の認識およびデコード処理について、より詳細に説明する。以下では、図18を用いて説明した光学シンボル30を用いるものとして説明を行う。
すなわち、以下の説明に用いる光学シンボル30は、開始セル302および終了セル303を含み、開始セル302および終了セル303に挟まれた8個のセルを含む主コード部300と、主コード部300の開始セル302および終了セル303に挟まれた8個のセルにそれぞれ接続される8本のセル列を含む副コード部301とを備える。主コード部300において、開始セル302の色がR色とされ、R色とK色とが交互に配置されて構成される。副コード部301において、各セル列は、4色を用いて3進数を表す4個のセルをそれぞれ含む。コード認識装置10は、この光学シンボル30の構造を、予め知っているものとする。
図23は、第1の実施形態に係る、カメラ11により撮像され、コード認識装置10の画像取得部100に取得される撮像画像60の例を示す。図23の例では、撮像画像60は、表示媒体40と、表示媒体40上に表示された光学シンボル30との組の画像を複数含んでいる。コード認識装置10は、この撮像画像60から光学シンボル30の画像をそれぞれ切り出して、切り出した光学シンボル30の画像に基づき、光学シンボル30に含まれる各セルの色情報および各セルの接続関係を認識し、認識結果に基づき光学シンボル30のデコードを行う。
図24は、第1の実施形態に係るコード認識装置10における光学シンボル30の認識およびデコード処理を示す一例のフローチャートである。図24において、ステップS400で、コード認識装置10は、認識部102により、光学シンボル30に対して認識処理を行い、主コード部300のセルが認識されたか否かを判定する。
より詳細には、ステップS400において、コード認識装置10は、切出処理部101により撮像画像60から光学シンボル30の画像の切り出しを行う。認識部102は、主コード認識部1020により、切り出された画像から主コード部300のセルの認識処理を行い、主コード部300における開始セル302および終了セル303以外のセルが認識されたか否かを判定する。認識されていないと判定した場合、認識部102は、処理をステップS400に戻し(ステップS400、「No」)、主コード部300のセルの認識処理を続行する。
ステップS400で、主コード部300のセルが認識されていると判定した場合(ステップS400、「Yes」)、認識部102は、認識されたセルの色と接続情報とを取得し、処理をステップS401およびステップS402に移行させる。
なお、接続情報は、例えば、認識されたセルを示す情報と、認識されたセルに隣接する、認識済みのセルを示す情報とを含む。認識部102は、例えば、主コード認識部1020および副コード認識部1021においてセルが認識された順序に応じた識別情報(例えば通し番号)を、そのセルを示す情報として用いる。
ステップS401で、認識部102において主コード認識部1020は、主コード部300のセル列の全てのセルを認識したか否かを判定する。認識していないと判定した場合(ステップS401、「No」)、認識部102は、処理をステップS400に戻し、主コード部300のセルの認識処理を続行する。
一方、ステップS401で、主コード部300のセル列の全てのセルを認識したと判定した場合(ステップS401、「Yes」)、認識部102は、処理をステップS403に移行させる。
例えば、主コード部300に含まれるセル列が、2種類の色情報のセルが交互に配置されて構成され、且つ、当該セル列に含まれるセルの個数が既知であるとする。この場合、主コード認識部1020は、当該セル列におけるセル間の色情報の遷移の回数を計数することで、主コード部300のセル列の全てのセルを認識したと判定できる。また、主コード認識部1020は、この主コード部300のセル列におけるセル間の色情報の遷移の回数を、主コード部300のセル列により表現される情報であると認識できる。
上述した図17および図18を例に取ると、主コード部300において、開始セル302および終了セル303を含めて、9回の色情報の遷移が計数されると、主コード部300のセル列の全てのセルを認識したと判定できる。また、色情報の遷移回数から1を減じた値が、主コード部300のセル列の、開始セル302および終了セル303を除いたセルにより表現される情報すなわち桁数であると認識できる。
また、ステップS402で、認識部102は、副コード認識部1021により、副コード部301のセルに対する認識処理を行う。より詳細には、副コード認識部1021は、ステップS400で主コード認識部1020により認識されたセルに接続される、副コード部301のセル列を処理対象として、この処理対象のセル列について、各セルの認識処理を行う。
図25は、第1の実施形態に係る、このステップS402による副コード認識部1021による認識処理を示す一例のフローチャートである。ステップS4020で、副コード認識部1021は、例えば主コード部300で認識されたセルに対して接続される副コード部301のセルを認識する。ここで認識されたセルが含まれるセル列が、処理対象のセル列となる。副コード認識部1021は、認識されたセルの色と接続情報とを取得する。次のステップS4021で、副コード認識部1021は、処理対象のセル列における色の遷移に基づき、直前の処理で認識されたセルに隣接するセルを認識する。副コード認識部1021は、認識されたセルの色と接続情報とを取得する。
次のステップS4022で、副コード認識部1021は、ステップS4021で認識されたセルが、処理対象のセル列の終端セルであるか否かを判定する。終端セルではないと判定した場合(ステップS4022、「No」)、副コード認識部1021は、処理をステップS4021に戻し、直前のステップS4021の処理において認識されたセルに隣接するセルの認識処理を行う。一方、副コード認識部1021は、終端セルであると判定した場合(ステップS4022、「Yes」)、図25のフローチャートによる一連の処理を終了させる。
なお、副コード認識部1021は、例えば、ステップS4021において予め定められた回数の色の遷移を認識した場合に、ステップS4022において、認識されたセルが処理対象のセル列の終端セルであると判定する。これに限らず、副コード認識部1021は、ステップS4021において認識されたセルに隣接するセルの接続数に基づきステップS4022の終端セルの判定を行ってもよい。
この図25のフローチャートによる処理は、副コード部301に含まれる複数のセル列に対して、並列的に実行される。例えば、副コード認識部1021は、図24のステップS400において主コード認識部1020によりセルが認識される毎に、ステップS402の処理、すなわち、図25のフローチャートによる処理を実行させる。
図24のフローチャートの説明に戻り、認識部102は、ステップS403で、主コード部300のセル列に接続される、副コード部301の全てのセル列に対する処理が終了したか否かを判定する。例えば、認識部102は、主コード認識部1020におけるステップS400およびステップS401の処理と、副コード認識部1021におけるステップS402の処理とを監視する。認識部102は、ステップS400およびステップS401において最後に認識された主コード部300のセルに接続される副コード部301のセル列に対するステップS402の処理が終了したか否かを判定する。終了していないと判定した場合(ステップS403、「No」)、認識部102は、処理をステップS403に戻して、処理の終了を待機する。
一方、認識部102は、ステップS403で、主コード部300のセル列に接続される、副コード部301の全てのセル列に対する処理が終了したと判定した場合(ステップS403、「Yes」)、処理をステップS404に移行させる。
ステップS404で、認識部102は、合成部1022により、主コード部300のセル列を読み取って得られた情報と、副コード部301に含まれる複数のセル列を読み取って得られた情報とを合成し、各情報が合成された情報を、光学シンボル30が持つシンボル情報として作成する。より具体的には、合成部1022は、上述のステップS400およびステップS401、ならびに、ステップS402で取得された各セルの接続情報に基づき、主コード部300に含まれる情報と、副コード部301に含まれる情報との合成処理を行う。
図26を用いて、第1の実施形態に係る、合成部1022による接続情報に基づく合成処理について説明する。なお、ここでは、説明のため、主コード部300のセル列は、図26(d)に示されるように、開始セル302および終了セル303と、開始セル302および終了セル303に挟まれた3個のセル(それぞれラベルを丸で囲んで示す)を含むものとする。また、副コード部301の各セル列は、2個のセルを含むものとする。
なお、図26(d)において、各セルに付された数字は、例えば各セルが認識された順番に応じて各セルに与えられた識別情報(ラベル)である。開始セル302および終了セル303のラベルは、それぞれ「S」および「E」とされている。
図26(a)は、各セル間の接続情報をラベルを用いて示している。図26(a)において、括弧「()」内に併記される2つのセルが接続されていることを示し、例えばラベル#1のセルと、ラベル#2のセルとが接続されることが示されている。同様に、ラベル#5およびラベル#2の各セル、ラベル#3およびラベル#9の各セル、ラベル#1およびラベル#3の各セル、ラベル#1およびラベル#Sの各セル、ラベル#8およびラベル#4の各セル、ラベル#3およびラベル#6の各セル、ラベル#6およびラベル#7の各セル、ラベル#9およびラベル#4の各セル、ラベル#9およびラベル#Eの各セルがそれぞれ接続されることが示されている。
合成部1022は、図26(a)に示される各セル間の接続情報に基づき、各セルに接続される他のセルの個数である接続数を求める。図26(b)は、ラベル#1〜#9の各セルの接続数を示す。ラベル#1、#3および#9の各セルが接続数「3」であり、ラベル#2、#4および#6の各セルが接続数「2」であり、ラベル#5、#7および#8の各セルが接続数「1」となっている。
合成部1022は、図26(a)で示した各セルの接続情報と、図26(b)で示した各セルの接続数とに基づき、各セルの接続の組を求める。すなわち、図16を用いて説明したように、接続数「3」のセルは、主コード部300のセル列のセルである。接続数「2」のセルは、副コード部301における各セル列の、終端以外のセルである。また、接続数「1」のセルは、副コード部301における各セル列の終端のセルである。なお、開始セル302および終了セル303も、接続数「1」となるが、開始セル302および終了セル303は、ラベル#Sおよび#Eとして他のセルと区別されているので、ここで考慮する必要は無い。
合成部1022は、これらの情報と、図26(a)のセルの接続情報とから、図26(c)に接続組として示されるように、ラベル#1、#3および#9の各セルによる接続の組により、幹すなわち主コード部300のセル列における各セルの接続関係を作成する。また、ラベル#2および#5、ラベル#4および#8、ならびに、ラベル#6および#7の各接続の組により、それぞれ枝すなわち副コード部301の各セル列における各セルの接続関係を作成する。さらに、合成部1022は、幹の各セルの接続関係と、枝の各セルの接続関係とに基づき、副コード部301の各セル列を、主コード部300のセル列における各セルに接続する。
合成部1022は、副コード部301の各セル列が、主コード部300のセル列における各セルに接続された構成に基づき、主コード部300のセル列に含まれる情報と、副コード部301の各セル列に含まれる各情報とを取得する。合成部1022は、取得された各情報を合成し、合成した情報を、光学シンボル30が持つシンボル情報として作成する。上述したように、シンボル情報は、光学シンボル30の主コード部300および副コード部301が含む各セル列内の各セルの色情報と、各セル間の接続関係の情報とを含む。
説明は図24のフローチャートに戻り、ステップS404で合成部1022により主コード部300のセル列に基づく情報と副コード部301の各セル列に基づく情報とが合成されて光学シンボル30が持つシンボル情報が作成されると、処理がステップS405に移行される。ステップS405で、デコード部103は、ステップS404で作成されたシンボル情報のデコード処理を行い、元の情報を復元する。
より詳細には、デコード部103は、ステップS404で合成部1022により作成されたシンボル情報に基づき、テーブル記憶部104に記憶される変換テーブルを参照する。デコード部103は、シンボル情報に基づき、光学シンボル30の副コード部301の各セル列における隣接する2つのセルについて、主コード部300のセル列に近い側のセルを遷移元のセルとして、各セルの色情報に従い変換テーブルを参照して値を取得する。
デコード部103は、副コード部301の1本のセル列の各セルについて値が取得されると、取得された各値を3進数の桁に応じて加算して、当該セル列の値を求める。デコード部103は、求めたセル列の値に基づき、例えばコード表を参照して、元の文字を復元する。この処理を、副コード部301の全てのセル列に対して実行し、光学シンボル30にコード化された元の文字列をデコードする。
ステップS405のデコード処理が終了すると、図24のフローチャートによる一連の処理が終了される。
このように、第1の実施形態に係る光学シンボル30は、主コード部300のセル列に対して、副コード部301の複数のセル列が接続されている。そのため、副コード部301の複数のセル列に対するデコード処理を並列的に実行することができ、デコード処理を高速化できる。
(第1の実施形態に係る光学シンボルの切り出し処理)
次に、第1の実施形態に係る光学シンボル30を撮像画像から切り出す切り出し処理について説明する。第1の実施形態では、この切り出し処理として、(1)テンプレートを用いたテンプレートマッチングによる第1の切り出し処理と、(2)画素の色の連続性を用いた第2の切り出し処理とのうち、何れかを適用する。
(第1の切り出し処理)
先ず、(1)の、第1の切り出し処理について説明する。第1の切り出し処理では、光学シンボル30の形状を既知とし、光学シンボル30の形状に対応する形状のテンプレートを用意する。図27は、第1の実施形態に適用可能なテンプレートの例を示す。図27(a)は、形状が既知の光学シンボル30の例を示す。
図27(b)は、2値化画像によるテンプレート70aの例を示す。テンプレート70aは、例えば、図27(a)に示される光学シンボル30に対して、当該光学シンボル30を輝度値に対する所定の閾値に基づき2値化して作成する。図27(c)は、エッジ検出により作成したテンプレート70bの例を示す。テンプレート70bは、例えば、図27(a)に示される光学シンボル30をグレースケールの画像に変換し、このグレースケールの画像に対して既知の方法によりエッジ検出処理を施し、検出されたエッジ情報を用いて作成する。
第1の切り出し処理は、これらテンプレート70aおよび70bの何れを用いて実行してもよい。以下では、2値化画像によるテンプレート70aを用いるものとして説明を行う。
図28は、第1の実施形態に係る第1の切り出し処理を示す一例のフローチャートである。この図28のフローチャートによる処理は、上述した図24のフローチャートにおけるステップS400の処理に対応する。
ステップS200で、コード認識装置10は、切出処理部101により、撮像画像60(図23参照)に対して、既知の技術を用いてエッジ検出処理を施す。次のステップS201で、切出処理部101は、用いるテンプレート70aのサイズおよび形状を選択する。すなわち、撮像画像60に含まれる光学シンボル30の画像は、撮像時のカメラ11と光学シンボル30との距離や、カメラ11の画角、撮像の角度などにより、向きや大きさが変化する。そのため、切出処理部101は、複数のサイズのテンプレート70aを用意する。
次のステップS202で、切出処理部101は、ステップS201で選択されたテンプレート70aを用いて、撮像画像60に対して既知の技術を用いてテンプレートマッチング処理を施し、類似度を求める。例えば、切出処理部101は、ステップS201で選択したテンプレート70aを撮像画像60内でスキャンさせて、各位置での類似度を求める。
次のステップS203で、切出処理部101は、ステップS202で求めた類似度に基づき、閾値以上の類似度の有無を判定する。このとき、上述したように、光学シンボル30が櫛型形状とされているため、撮像画像60に含まれる、光学シンボル30の画像と、光学シンボル30以外の画像との区別が容易であり、類似度に基づく判定を高精度に実行可能である。閾値以上の類似度が無いと判定した場合(ステップS203、「No」)、切出処理部101は、処理をステップS201に戻し、別のサイズ、形状のテンプレート70aを選択して再びテンプレートマッチング処理を行う。
ステップS203で、閾値以上の類似度があると判定した場合(ステップS203、「Yes」)、切出処理部101は、処理をステップS204に移行させる。ステップS204で、切出処理部101は、撮像画像60から、類似度が閾値以上と判定された撮像画像60上の位置におけるテンプレート70aの領域の画像を切り出す。次のステップS205で、コード認識装置10は、認識部102の主コード認識部1020により、ステップS204で切り出した画像から、主コード部300のセル列を構成するセルの色情報を認識する。
主コード部300のセル列構成するセルの色情報が認識されると、図28のフローチャートによる一連の処理が終了される。
図29は、第1の実施形態に係る第1の切り出し処理により切り出した光学シンボル30の画像から、各セルの色情報を取得する方法の例を示す。図29(a)は、各セルにおける所定の位置の画素から色情報を取得する例を示す。図29(b)は、セル列をセルの接続方向にスキャンして、位置が連続する複数の画素から色情報を取得する例を示す。
図29(a)に示す取得方法は、光学シンボル30における各セルが一定の大きさを有し、且つ、撮像画像60に歪みが少ない場合に、高速に色の取得を行うことが可能である。一方、図29(b)に示す取得方法は、図29(a)の取得方法に比べて処理に時間を要する一方で、各セルの大きさが一定ではない場合や、撮像画像60に歪みが多い場合であっても、高精度に色の取得を行うことが可能である。また、図29(b)に示す取得方法は、撮像画像60における色ムラに強いという利点もある。
これら図29(a)に示す取得方法と、図29(b)に示す取得方法は、撮像画像60の撮像条件などに応じて適宜選択できるようにすると、好ましい。
(第2の切り出し処理)
次に、(2)の、第2の切り出し処理について説明する。第2の切り出し処理では、撮像画像60の画素毎に色を認識し、注目画素に隣接する隣接画素と注目画素とが同一色である場合に、注目画素と当該隣接画素とを一纏めにしてラベリングする。
図30は、第1の実施形態に係る第2の切り出し処理を示す一例のフローチャートである。この図30のフローチャートによる処理は、上述した図24のフローチャートにおけるステップS400の処理に対応させることができる。
ステップS300で、コード認識装置10は、切出処理部101により、撮像画像60からランダムに画素を注目画素として選択する。なお、ステップS300では、撮像画像60の所定画素を注目画素として選択するようにしてもよい。
次のステップS301で、切出処理部101は、注目画素の色を認識する。次のステップS302で、切出処理部101は、注目画素の色情報が、光学シンボル30の構成色(例えばR色、G色、B色およびK色の何れか)の色情報と対応するか否かを判定する。一例として、切出処理部101は、ある色情報に係る色を示す値が、他の色情報に係る色を示す値に対して所定の範囲内に収まっている場合に、当該ある色情報が当該他の色情報に対応していると判定する。切出処理部101は、注目画素の色情報が光学シンボル30の構成色の色情報と対応しないと判定した場合(ステップS302、「No」)、処理をステップS300に戻し、別の画素を新たな注目画素として選択する。
一方、切出処理部101は、ステップS302で、注目画素の色情報が光学シンボル30の構成色の色情報に対応すると判定した場合(ステップS302、「Yes」)、処理をステップS303に移行する。ステップS303は、注目画素の色情報と、注目画素に隣接する隣接画素の色情報とに基づき各画素をラベリングする処理である。換言すれば、ステップS303は、光学シンボル30に含まれるセルを特定するための処理である。ステップS303は、ステップS3030〜ステップS3037の一連の処理を含む。
ステップS303において、ステップS3030で、切出処理部101は、注目画素に対して固有のラベルを付与するラベリングを行う。ラベリングは、ラベリング対象の画素(注目画素)の撮像画像60上の座標情報と、注目画素の色情報と、所定のラベルとを関連付けることで行う。切出処理部101は、ラベリングを行った画素の情報を、例えばRAM1002に記憶する。
次のステップS3031で、切出処理部101は、色情報の認識に用いるパラメータを調整する。例えば、切出処理部101は、R色、G色、B色およびK色をそれぞれ認識するための閾値を、ステップS3031で調整する。
次のステップS3032で、切出処理部101は、注目画素に隣接する隣接画素のうち、未処理の隣接画素が有るか否かを判定する。切出処理部101は、判定対象の隣接画素の座標に基づき当該隣接画素にラベルが付与されているか否かを調べ、ラベルが付与されていない場合に、当該隣接画素が未処理画素であると判定する。切出処理部101は、未処理の隣接画素が無いと判定した場合(ステップS3032、「No」)、処理を後述するステップS3034に移行する。
一方、切出処理部101は、ステップS3032で、未処理の隣接画素があると判定した場合(ステップS3032、「Yes」)、処理をステップS3033に移行する。ステップS3033で、切出処理部101は、未処理の隣接画素の座標を、座標記憶部に記憶する。座標記憶部は、例えばRAM1002やストレージ1003の所定領域が用いられる。このステップS3033の処理では、光学シンボル30の構成色の色情報と対応しない色情報の未処理の隣接画素も、座標記憶部に記憶される。
次のステップS3034で、切出処理部101は、未処理の隣接画素の座標が座標記憶部に記憶されているか否かを判定する。切出処理部101は、未処理の隣接画素の座標が座標記憶部に記憶されていると判定した場合(ステップS3034、「Yes」)、処理をステップS3035に移行させる。ステップS3035で、切出処理部101は、未処理の隣接画素のうち1つの画素を選択する。このとき、切出処理部101は、注目画素と同一の色の画素を優先して選択する。
次のステップS3036で、切出処理部101は、ステップS3035で選択した未処理の隣接画素の色情報を認識する。次のステップS3037で、切出処理部101は、ステップS3036で認識された色情報が、光学シンボル30の構成色の色情報と対応するか否かを判定する。
切出処理部101は、認識された色情報が光学シンボル30の構成色の色情報と対応すると判定した場合(ステップS3037、「Yes」)、処理をステップS3030に戻し、当該未処理の隣接画素を新たな注目画素としてラベリングを行う。
このラベリングにおいて、切出処理部101は、当該新たな注目画素の色情報が、直前の処理における注目画素の色情報に対応する場合、当該新たな注目画素に、当該直前の処理における注目画素と同一のラベルを付与する。一方、切出処理部101は、当該新たな注目画素の色情報が、直前の処理における注目画素の色情報と異なる色情報である場合、当該新たな注目画素に、当該直前の処理における注目画素と異なるラベルを付与する。すなわち、切出処理部101は、ステップS3030のラベリング処理により、座標が連続し、且つ、互いに対応する色情報を有する一塊の画素群に対して、固有のラベルを付与する。
一方、ステップS3037で、切出処理部101は、ステップS3036で認識された色情報が、光学シンボル30の構成色の色情報に対応しないと判定した場合(ステップS3037、「No」)、処理をステップS3034に戻す。切出処理部101は、ステップS3034で未処理の隣接画素の座標が座標記憶部に記憶されていると判定した場合(ステップS3034、「Yes」)、次のステップS3035で、直前の処理で選択した未処理の隣接画素と異なる未処理の隣接画素を選択する。
上述したステップS3034で、未処理の隣接画素の座標が座標記憶部に記憶されていないと判定した場合(ステップS3034、「No」)、ステップS303の一連の処理を抜け、処理がステップS304に移行される。すなわち、ステップS3032で未処理の隣接画素が無く、且つ、ステップS3034で座標記憶部に未処理の隣接画素の座標が記憶されていない場合に、ステップS303の一連の処理を抜けることになる。
ステップS304で、コード認識装置10において、主コード認識部1020は、ステップS303におけるラベリングによりそれぞれ固有のラベルが付与された各画素群による構成が、主コード部300のセルの接続情報と一致するか否かを判定する。
すなわち、このステップS304では、ステップS303のラベリング処理によりそれぞれ固有のラベルが付与された画素群が複数あり、且つ、これら複数の画素群間の接続関係が、主コード部300のセル列における各セルの接続情報と完全一致する接続関係を含むか否かを判定する。画素群間の接続関係は、例えば、ラベリングされた各画素の座標および色に基づき知ることができる。
主コード認識部1020は、ステップS304で、それぞれ固有のラベルが付与された各画素群による構成が、主コード部300のセルの接続情報と一致しないと判定した場合(ステップS304、「No」)、処理をステップS300に戻す。すなわち、この場合は、ステップS300で選択された画素が、光学シンボル30を構成する画素ではなかったことになる。
一方、主コード認識部1020は、ステップS304で、それぞれ固有のラベルが付与された各画素群による構成が、主コード部300のセルの接続情報と一致すると判定した場合(ステップS304、「Yes」)、図30のフローチャートによる一連の処理を終了させる。この場合、少なくとも光学シンボル30の主コード部300の切り出し処理が完了している。
なお、主コード認識部1020は、上述のステップS303のラベリング処理において、固有のラベルが付与された画素群と、この画素群に接続される他の画素群との接続関係に基づき、当該画素群が主コード部300のセルであると認識することが可能である。画素群が主コード部300のセルであると認識された場合、図24のステップS400の判定に従い処理をステップS402に移行させ(ステップS400、「Yes」)、副コード部301のセルの処理を実行する。
この場合、例えば、コード認識装置10は、図30のフローチャートの処理を別途実行することで、副コード部301のセル列の切り出し処理を実行することができる。一例として、切出処理部101は、ステップS300における画素の選択を、主コード部300のセルであると認識した画素群に隣接する画素に対して行う。また、ステップS304の判定処理は、例えば、副コード認識部1021により、副コード部301のセルの接続情報と一致するか否かを判定する。
コード認識装置10は、主コード認識部1020により主コード部300のセルが認識される毎に、図30のフローチャートの処理を別途、並列的に実行できる。これにより、処理の高速化が可能である。
なお、図30のフローチャートのステップS303では、注目画素に隣接する隣接画素の色実行が光学シンボル30の構成色の色情報と対応する場合、当該隣接画素を新たな注目画素として処理を行い、順次、ラベルを付与する領域を拡大していく。このとき、光学シンボル30の構成色以外の色の隣接画素への領域の拡大を行わない。このように、ラベリング処理を行う領域を限定的とすることで、ラベリング処理をより高速に実行することが可能である。
(第1の実施形態の変形例)
次に、第1の実施形態の変形例について説明する。第1の実施形態では、光学シンボル30を、セルが直線状に配列されたセル列による主コード部300と、主コード部300の開始セル302および終了セル303を除く各セルに接続される、それぞれセルが直線状に配列された複数のセル列による副コード部301とにより構成した。光学シンボル30の形状は、この例に限定されず、主コード部300および副コード部301の各セル列をそれぞれ直線状に配列しない形状も可能である。
図31は、第1の実施形態の変形例に係る光学シンボル30’の一例の構成を示す。第1の実施形態の変形例では、光学シンボル30’を、図31(a)に例示されるように、各セルの大きさをそれぞれ異ならせると共に、各セル間の接続を、各セルの任意の辺に対して行い、3以上のセルが直線状に配列されないように構成している。なお、図31(a)のセル内のアルファベットは、そのセルに付与されるラベルを示している。
図31(b)は、図31(a)の光学シンボル30’の構成を整理して示している。なお、図31(b)では、ラベルを丸で囲んでセルを示している。図31(b)において、セル「a」、「b」、「g」、「k」、「p」および「q」が主コード部300のセル列となる。この例では、セル「a」および「q」がそれぞれ開始セル302および終了セル303であり、セル「a」および「q」に挟まれる各セル「b」、「g」、「k」および「p」は、3以上のセルが接続されている。
また、セル「c」、「d」および「e」、セル「i」および「j」、セル「l」、「m」、「n」および「o」、ならびに、セル「r」および「s」は、それぞれ主コード部300のセル「b」、「g」、「k」および「p」に接続される、副コード部301のセル列である。また、図31(b)の例では、セル「f」および「h」も、それぞれ副コード部301のセル列として構成されている。この場合、例えばセル「f」は、主コード部300のセル「b」に対して、セル「c」、「d」および「e」によるセル列とは異なる方向に接続される。セル「h」も同様である。また、これらセル「f」および「h」は、それぞれ、副コード部301におけるセル列の終端セルでもある。
このような構成であっても、主コード部300の各セルに対して副コード部301の各セル列がそれぞれ接続されるため、副コード部301の各セル列に対する処理を並列的に実行でき、処理の高速化が可能である。
(第2の実施形態)
次に、第2の実施形態について説明する。第2の実施形態は、第1の実施形態に係る光学シンボル30を、コード管理システムおよび搬送システムに適用させた例である。図32は、第2の実施形態に係るコード管理システムおよび搬送システムを概略的に示す。なお、図32において、上述した図1、図10および図20などと共通する部分には同一の符号を付して、詳細な説明を省略する。
図32において、コード管理システムは、互いにネットワーク13で接続されるコード認識装置10、コード管理装置12、コード生成装置20およびプリンタ21を含む。また、搬送システムは、このコード管理システムの構成に対して、さらに、搬送制御装置14を含む。搬送制御装置14は、搬送装置51の駆動制御を行うことができる。例えば、搬送制御装置14は、位置情報を入力することで、入力された位置情報に対応する位置の搬送装置51を駆動制御し、移動させることができる。
図32の例では、各搬送装置51に対して、それぞれ物品50が積載されている。物品50には、第1の実施形態に係る光学シンボル30が表示される表示媒体40が、外面(この例では上面)に添付される。各物品50に添付される表示媒体40に表示される各光学シンボル30は、それぞれ、各物品50を識別するための識別情報がコード化されたものである。
コード生成装置20は、各物品50を識別する各識別情報が入力される。コード生成装置20は、入力された各識別情報を、例えば図13に示される手順に従いコード化して、各物品50にそれぞれ対応する各光学シンボル30を生成する。コード生成装置20は、生成した各光学シンボル30を、それぞれ表示媒体40に印刷する。光学シンボル30が印刷された各表示媒体40は、光学シンボル30にコード化された識別情報に対応する物品50に添付される。
コード認識装置10は、カメラ11により撮像された撮像画像60から、図23〜図30を用いて説明した方法に従い、各光学シンボル30の切り出しを行う。すなわち、コード認識装置10は、光学シンボル30を含む撮像画像60を取得する画像取得部として機能する。コード認識装置10は、さらに、切り出した各光学シンボル30をデコードし、光学シンボル30にコード化された識別情報を復元する。すなわち、コード認識装置10は、光学シンボル30にコード化された識別情報を取得する識別情報取得部としても機能する。また、コード認識装置10は、例えば光学シンボル30の切り出し処理の際に取得した画素の座標に基づき、撮像画像60内における各光学シンボル30の位置を取得する。すなわち、コード認識装置10は、光学シンボル30の位置を取得する位置取得部としても機能する。
コード認識装置10は、各光学シンボル30をデコードして復元した各識別情報と、各光学シンボル30の位置を示す位置情報とをコード管理装置12に送信する。コード管理装置12は、コード認識装置10から送信された各識別情報と、各位置情報とを関連付けて管理する。ここで、撮像画像60の撮像範囲と、各物品50が配置される領域の座標とが予め関連付けられているものとする。
搬送制御装置14は、例えば、外部から、特定の物品50の識別情報と、当該物品50を移動させる移動指示が入力される。搬送制御装置14は、入力された識別情報をコード管理装置12に送信し、当該識別装置に関連付けられた位置情報を、コード管理装置12に要求する。コード管理装置12は、この要求に応じて、管理される情報から識別情報に関連付けられた位置情報を取得して、搬送制御装置14に送信する。搬送制御装置14は、コード管理装置12から送信された位置情報に対応する搬送装置51の動作を制御して、当該搬送装置51を移動させる。
このように、第2の実施形態に係るコード管理システムおよび搬送システムは、各物品50に添付された表示媒体40に表示される各光学シンボル30をカメラ11により撮像して、各光学シンボル30にコード化された各識別情報を一括して取得および管理できる。そのため、各物品50の出庫管理などを容易に実行することが可能である。
なお、上述の実施形態は、本発明の好適な実施の例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変形による実施が可能である。