以下、図面を参照して、本発明を実施するための実施の形態の一例について詳細に説明する。
図1は、本実施の形態に係る二次元コードを製造する記録装置10の構成の一例を示す構成図である。図1に示すように、記録装置10は、UI(ユーザ・インタフェース)パネル12、給紙部14、記録手段の一例である画像記録部16、及び排出台18を備えている。
UIパネル12は、タッチパネル・ディスプレイ12A及びスイッチ12Bを備え、タッチパネル・ディスプレイ12A及びスイッチ12Bを介して、記録媒体の一例である記録用紙への二次元コードの記録等の各種指示がユーザによって行われると共に、タッチパネル・ディスプレイ12Aに必要事項が表示される。給紙部14は、記録用紙を収容すると共に必要に応じて画像記録部16に記録用紙を給紙するものである。
画像記録部16は、例えばゼログラフィ方式で画像を記録する所謂プリンタ機能を備えたものである。なお、記録方式はゼログラフィ方式に限定されるものではなく、インクジェット方式やサーマル方式などの他の記録方式であっても良いことは言うまでもない。画像記録部16は、ユーザによってUIパネル12を介して二次元コードの記録用紙への記録が指示された場合、給紙部14を作動させることによって給紙部14からの給紙を受け、これによって取得した記録用紙に対して、二次元コードを示す二次元コード情報に基づいて二次元コードを記録し、二次元コードが記録された記録用紙を排出台18に排出する。
図2は、図1に示す記録装置10によって記録用紙Pに記録された本実施の形態に係るマトリクス型二次元コード60(以下、「二次元コード60」という。)の構成の一例を示す構成図である。図2に示すように、記録用紙Pに記録された二次元コード60は、マトリクス状に配置された複数の画素の特定色の有無によって二値化情報が表現された縦長四角形状の画像である。すなわち、例えば黒を特定色とし、この特定色の有無によって種々の情報が表現された二値図柄と言える。なお、ここでは、輪郭が四角形状の画像を例示しているが、これに限らず、楕円形や四角形以外の多角形であっても良い。
図3は、本実施の形態に係る二次元コード60の具体的な構成の一例を示す構成図である。図3に示すように、二次元コード60は、位置・向き検出シンボル32A〜32Dを有する解読支援二値図柄32、解読対象二値図柄34及び複数の基準二値図柄36を含んで構成されている。すなわち、二次元コード60は、四角形状の被記録対象領域38に解読支援二値図柄32、解読対象二値図柄34及び基準二値図柄36が記録されることによって構成されている。
被記録対象領域38は、二次元コード60の輪郭によって外枠が規定されており、縦長四角形状とされている。また、被記録対象領域38は、複数の四角形状の分割領域(m行n列の分割領域)に分割されている。本実施の形態では、被記録対象領域38が一例として図3に示すように3行1列の分割領域に区分けされている。なお、図3に示す例では、破線の矩形で囲まれた領域が分割領域にあたる。
解読支援二値図柄32は、解読対象二値図柄34が如何なる解読対象情報を含んでいようとも、これに拘らず被記録対象領域38における位置及び特定色の有無の配列が固定された二値図柄であり、位置・向き検出シンボル32A〜32Dの他に、二次元コード60のバージョンを示すバージョン情報が表現された図柄(図示省略)や二次元コード60のフォーマットを示すフォーマット情報が表現された図柄(図示省略)などを含んで構成されている。
位置・向き検出シンボル32A〜32Dは、被記録対象領域38に含まれる画素の位置及び被記録対象領域38の向きを特定するための図柄である。そのため、位置・向き検出シンボル32A〜32Dは解読対象二値図柄34が如何なる解読対象情報を含んでいようとも、これに拘らず被記録対象領域38における位置及び特定色の有無の配列が固定されている。例えば、本実施の形態に係る位置・向き検出シンボル32A〜32Dの各々は四角形状の二値図柄であり、位置特定支援情報の一例である白黒による2行2列の市松模様とされており、市松模様の白領域及び黒領域の各々は複数の画素の集合とされている。また、位置・向き検出シンボル32A〜32Dは被記録対象領域38の四隅に配置されている。図2に示す例では、被記録対象領域38が1行目1列目(被記録対象領域38の上段)、2行目1列目(被記録対象領域38の中段)、及び3行目1列目の分割領域(被記録対象領域38の下段)に区分されており、位置・向き検出シンボル32Aが被記録対象領域38の上段の分割領域の正面視左上隅に、位置・向き検出シンボル32Bが被記録対象領域38の下段の分割領域の左下隅に、位置・向き検出シンボル32Cが被記録対象領域38の上段の分割領域の右上隅に、位置・向き検出シンボル32Dが被記録対象領域38の下段の分割領域の右下隅に各々配置されている。
また、位置・向き検出シンボル32Dの白黒の配列は、位置・向き検出シンボル32A〜32Cの白黒の配列とは異なっている。従って、位置・向き検出シンボル32A〜32Dが読み取られて位置・向き検出シンボル32A〜32Dの相対的な位置関係が特定されることによって二次元コード60の向きが特定され、これによって二次元コード60に含まれる画素の位置が特定される。なお、図3に示す例では、位置・向き検出シンボル32Aに含まれる特定の画素の一例である正面視左上隅の画素の位置を原点として二次元コード60に含まれる画素の各々の位置が二次元座標で特定される。
解読対象二値図柄34は、被記録対象領域38における解読支援二値図柄32以外の領域に含まれる複数の画素の各々が1画素単位で解読対象情報に応じて白又は黒で表現された二値図柄である。解読対象情報とは、符号化された情報であって、復号されることによって解読される情報のことである。解読対象二値図柄34は、画素毎に解読対象情報が白又は黒で表現された図柄である。解読対象二値図柄34は、位置・向き検出シンボル32A〜32Dと共に読み取られ、これによって特定された位置・向き検出シンボル32A〜32Dの相対的な位置関係に基づいて解読対象二値図柄34を構成している複数の画素の各々の被記録対象領域38における位置が特定される。具体的には、位置・向き検出シンボル32Aの正面視左上隅の画素の位置を原点とした二次元座標で特定される。
基準二値図柄36は、解読対象二値図柄34における複数の特定位置に挿入されている。基準二値図柄36は、特定色の有無(本実施の形態では一例として白黒)を識別する対象とされる画素(以下、「識別対象画素」という。)33が含まれる識別対象図柄(本実施の形態では一例として解読支援二次画像32及び解読対象二値図柄34)の識別対象画素33の特定色の有無を識別するための基準とする二値図柄である。すなわち、特定色の有無を識別する際に用いられる閾値を規定する二値図柄である。基準二値図柄36は、一対の白黒の画素である。基準二値図柄36に含まれる白黒の画素の配列の向きには4種類の向きがある。すなわち、ここで言う4種類の配列の向きとは、左右に黒画素及び白画素、左右に白画素及び黒画素、上下に黒画素及び白画素、及び上下に白画素及び黒画素のことである。
基準二値図柄36は、被記録対象領域38のマトリクス状に配置された複数の画素における行方向(横方向)及び列方向(縦方向)の各々について解読対象二値図柄34に配列の向き毎に予め定められた規則に従って(例えば所定間隔毎に)挿入されている。これにより各分割領域には予め定められた位置に複数の基準二値図柄36が配置される。
また、二次元コード60は、位置・向き検出シンボル32Aと位置・向き検出シンボル32Bとの間、及び位置・向き検出シンボル32Cと位置・向き検出シンボル32Dとの間の各々に二次元コード60の輪郭に沿って複数の位置検出補助シンボル62(支援補助二値図柄の一例)が挿入されている。なお、図3に示す例では、位置・向き検出シンボル32Aと位置・向き検出シンボル32Bとの間に挿入された複数の位置検出補助シンボル62が位置・向き検出シンボル32A,32Bを含めて相互間の距離が揃うように予め定められた距離をおいて配置されており、位置・向き検出シンボル32Cと位置・向き検出シンボル32Dとの間に挿入された複数の位置検出補助シンボル62が位置・向き検出シンボル32C,32Dを含めて相互間の距離が揃うように予め定められた距離をおいて配置されている。また、位置検出補助シンボル62は、位置・向き検出シンボル32A〜32Dの各々よりも小さな支援補助情報の一例である市松模様とされている。なお、本第2の実施の形態では、2組の一対の画素(2行2列の画素)を合わせて市松模様を形成しているが、市松模様の全体の大きさが位置・向き検出シンボル32A〜32Dの各々よりも小さく且つ基準二値図柄36よりも大きければ良い。また、必ずしも市松模様である必要はない。また、基準二値図柄36よりも大きくても構わない。
また、本実施の形態に係る二次元コード60では、位置検出補助シンボル62が向かい合う辺に配置された位置検出補助シンボル62と行方向で正対するように配置されている。図3に示す例では、位置・向き検出シンボル32Aと位置・向き検出シンボル32Bとの間に挿入された複数の位置検出補助シンボル62の各々と複数の位置検出補助シンボル62が位置・向き検出シンボル32Cと位置・向き検出シンボル32Dとの間に挿入された複数の位置検出補助シンボル62の各々とが行方向で正対している(向かい合っている)。また、行方向で正対する位置検出補助シンボル62間の中央には位置検出中央シンボル64が挿入されている。
具体的には、位置・向き検出シンボル32Aに隣接する位置検出補助シンボル62(以下、区別して説明する場合に「位置検出補助シンボル62A」という。)と位置・向き検出シンボル32Cに隣接する位置検出補助シンボル62(以下、区別して説明する場合に「位置検出補助シンボル62C」という。)とが行方向で正対するように配置されており、位置検出補助シンボル62Aと位置検出補助シンボル62Cとを結ぶ線分(被記録対象領域38の上段の分割領域の底辺に相当する線分)上の中央に位置検出中央シンボル64が挿入されている。また、位置・向き検出シンボル32Bに隣接する位置検出補助シンボル62(以下、区別して説明する場合に「位置検出補助シンボル62B」という。)と位置・向き検出シンボル32Dに隣接する位置検出補助シンボル62(以下、区別して説明する場合に「位置検出補助シンボル62D」という。)とが行方向で正対するように配置されており、位置検出補助シンボル62Bと位置検出補助シンボル62Dとを結ぶ線(被記録対象領域38の中段の分割領域の底辺に相当する線分)分上の中央に位置検出中央シンボル64が挿入されている。なお、本実施の形態では、複数の位置検出補助シンボル62は撮影によって得られる画像の歪みが予想される方向に交差する一組の対辺の各辺に挿入されており、互いに正対する位置関係にある位置検出補助シンボル62間の中央には画像の歪みの影響を受け難い位置であると予想される前提の下で位置検出中央シンボル64が挿入されている。
また、本実施の形態に係る二次元コード60では、位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62によって各分割領域の位置を定めている。すなわち、位置検出補助シンボル62は、被記録対象領域38の上段の分割領域と被記録対象領域38の中段の分割領域との境界、及び被記録対象領域38の中段の分割領域と被記録対象領域38の下段の分割領域との境界の各々について各境界を中央で跨ぐように配置されており、位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62の各々に含まれる特定の画素に二次元座標が予め付与されている。これらの二次元座標によって各分割領域の位置が特定される。
図4は、二次元コード60を読み取るための読取装置及び画素の特定色の有無を識別する識別装置として機能するカメラ付き携帯電話機40の構成の一例を示すブロック図である。図4に示すカメラ付き携帯電話機(以下、「携帯電話機」という。)40は、送話及び受話などの一般的な固定式電話機に含まれる通話機能、電子メールを作成・送信・受信するメール機能及び静止画撮影を行う撮影機能を備えた携帯端末装置である。携帯電話機40は、携帯電話機40全体の動作を司るCPU40Aと、CPU40Aによる各種処理プログラムの実行時のワークエリア等として用いられるRAM40Bと、各種処理プログラムや各種パラメータなどが予め記憶されたROM40Cと、各種情報を記憶するために用いられる二次記憶部(ここでは、一例としてフラッシュメモリ)40Dと、通話相手から受話する受話部40Eと、通話相手に送話する送話部40Fと、各種情報を入力するために用いられる番号キー、十字キー、タッチパネル・ディスプレイに含まれるタッチパネルなどを含んで構成された入力部40Gと、タッチパネル・ディスプレイに含まれるディスプレイを有し、各種情報を表示する表示部40Hと、上記撮影機能を実現するために用いられるカメラであって、被写体を撮影し、撮影して得た画像を示す撮影画像情報を生成して出力するカメラ(例えばデジタルカメラ)40Iと、通信回線42を介して公衆電話通信網に接続され、他の携帯電話機その他の外部通信機器と通信されるように接続され、外部通信機器との間の各種情報の授受を司る外部インタフェース(I/F)40Jと、を含んで構成されている。これら各部はシステムバス40Kにより電気的に相互に接続されている。従って、CPU40Aは、RAM40B、ROM40C及び二次記憶部40Dに対するアクセスと、入力部40Gを介した各種入力情報の取得と、表示部40Hに対する各種情報の表示と、カメラ40Iの動作の制御と、カメラ40Iにより撮影して得られた撮影画像情報の取得と、受話部40E及び送話部40Fの動作の制御と、受話部40E及び送話部40Fの動作状態の把握と、外部I/F40Jを介した外部通信装置との間の各種情報の授受と、を各々行う。
なお、本実施の形態に係る携帯電話機10のROM40Bには、二次元コード60の輪郭(一例として被記録対象領域38の輪郭)として予め定められた輪郭における予め定められた箇所(例えば予め定められた頂点)から各分割領域の位置を一意に特定する位置特定情報として予め定められた分割領域位置特定情報、及び分割領域における基準二値図柄の位置を一意に特定する位置特定情報として予め定められた基準二値図柄位置特定情報が予め記憶されている。
ところで、二次元コード60に含まれる解読対象二値図柄34により示される解読対象情報を解読するためには、先ず、解読支援二値図柄32及び解読対象二値図柄34を二値化する必要がある。すなわち、二次元コード60に含まれる各画素が白であるか黒であるかを閾値を用いて識別する必要がある。
しかし、従来は、例えば各画素の白及び黒を識別するための基準となる閾値が1つの固定値とされていたので、一例として図5に示すように明暗のバランスが崩れた不鮮明(例えば低コントラスト)な二次元コードを携帯電話機40のカメラ40Iで撮影することにより読み取って得られた撮影画像情報により示される画像に含まれる各画素の二値化が一例として図6に示すように正しく行われないことがあった。また、分割領域の各々に対して事前に定めた閾値を割り当てた場合であっても実際の二次元コード60の読み取り面における明るさが反映された閾値ではないため、やはり二値化が正しく行われない。
そこで、本実施の形態に係る二次元コード60では、上述したように基準二値図柄36を備えることによって従来に比べて高精度な二値化を実現している。
図7は、従来の正方形状の二次元コードを被写体としてカメラ40Iで静止画撮影を行って得られた二次元コードの画像(以下、「二次元コード画像」という。)の一例を示す図であり、図8は、本実施の形態に係る二次元コード60を被写体としてカメラ40Iで静止画撮影を行って得られた二次元コード画像の一例を示す図である。二次元コード60に係る二次元コード画像は、二次元コード30に係る二次元コード画像に比べ、縦に長細い形状とされているため、カメラ40Iにおけるレンズの歪曲収差により歪みが大きく現れてしまう。
二次元コード60に係る二次元コード画像が歪んでいない場合は一例として図9に示すように一辺が直線状に現れるのに対し、二次元コード60に係る二次元コード画像が歪んでいる場合は一例として図10に示すように一辺が直線上に現れない。つまり、一辺が湾曲した状態で現れる。図9に示す二次元コード画像を模式的に極端に示したものが図11であり、図10に示す二次元コード画像を模式的に極端に示したものが図12である。
各画素の位置は一例として図11に示すように一辺が直線状に現れることを前提にして二次元座標によって表現される。ところが、図12に示すように二次元コード画像が歪んでしまうと二次元コード画像に含まれる画素の位置は精度良く特定されない。よって、解読対象二値図柄34により示される解読対象情報も精度良く解読されないことになる。
そこで、本実施の形態に係る二次元コード60では、上述したように位置・向き検出シンボル32A〜32Dに加え、位置・向き検出シンボル32A〜32Dによる二次元コード60に含まれる各画素の位置の特定の支援を補助する複数の位置検出補助シンボル62が被記録対象領域38の少なくとも一辺(本実施の形態では一例として被記録対象領域38の一組の対辺の各々)に沿って被記録対象領域38に挿入されている。
以上のように構成された二次元コード60は、携帯電話機40のカメラ40Iによって撮影されることによって読み取られる。そして、携帯電話機40では、カメラ40Iにより二次元コード30を読み取って得られた撮影画像情報に基づいて二次元コード30を二値化して解読対象情報を解読する二次元コード解読処理が実行される。
携帯電話機40では、二次元コード解読処理を実現するための各種処理がソフトウェア構成によって実現される。その一例としては、コンピュータを利用してプログラムを実行する形態が挙げられる。しかし、このようなソフトウェア構成による実現に限られるものではなく、ハードウェア構成や、ハードウェア構成とソフトウェア構成との組み合わせによって実現しても良いことは言うまでもない。
以下では、本実施の形態に係る携帯電話機40のCPU40Aが二次元コード解読処理プログラムを実行することにより二次元コード解読処理を実現する場合について説明する。この場合、二次元コード解読処理プログラムをROM40Cに予め記憶させておく形態や、記憶内容がコンピュータによって読み取られる記録媒体に記憶された状態で提供される形態、有線または無線による通信手段を介して配信される形態等を適用しても良い。
図13は、本実施の形態に係る二次元コード解読処理プログラムの処理の流れの一例を示すフローチャートである。なお、ここでは、錯綜を回避するために、読み取り対象面における明るさの分布に偏りがある二次元コード60を被写体として携帯電話機40のカメラ40Iにより静止画撮影を行って得られた二次元コード画像が一例として図8に示すように歪んでいる場合について説明する。また、ここでは、錯綜を回避するために、識別対象画素33を解読対象二値図柄34に含まれる画素とし、従来の二値化処理手法等により二値化された解読対象二値図柄34を示す解読支援二値図柄情報が予め定められた記憶領域(例えば二次記憶部40の記憶領域)βに既に記憶されている場合について説明する。また、ここでは、錯綜を回避するために、位置・向き検出シンボル32A〜32Dの各々に含まれる画素であって二次元コード画像の角に位置する特定の画素と位置検出補助シンボル62の各々に含まれる画素であって二次元コード画像の輪郭に位置する特定の画素との各々に対して二次元座標が予め付与されている場合について説明する。また、ここでは、錯綜を回避するために、各分割領域を規定する二次元座標(例えば分割領域の各頂点の二次元座標)が予め定められている場合について説明する。また、ここでは、錯綜を回避するために、基準二値図柄位置特定情報を二次元座標とした場合について説明する。
図13のステップ100では、撮影開始の指示の受け付け待ちを行う。すなわち、ステップ100では、入力部40Gを介して撮影開始の指示が受け付けられると肯定判定となってステップ102に移行する。ステップ102では、撮影機能を働かせて静止画撮影を開始した後、ステップ104に移行する。ステップ104では、二次元コード画像を示す撮影画像情報を生成して予め定められた記憶領域(例えば二次記憶部40の記憶領域)αに記憶した後、ステップ106に移行し、静止画撮影が終了したか否かを判定し、否定判定となった場合にはステップ104に戻る一方、肯定判定となった場合にはステップ108に移行する。
ステップ108では、座標設定処理プログラムを実行する。図14は、座標設定処理プログラムの処理の流れの一例を示すフローチャートである。図14のステップ108Aでは、記憶領域αに記憶されている撮影画像情報により示される二次元コード画像に含まれる位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62を検出する。次のステップ108Bでは、上記ステップ108Aの処理により検出された位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62のうち、最小単位の四隅を形成する位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62の各々に含まれる特定の画素に予め付与されている二次元座標を取得する。なお、本ステップ108Bでは、既に本ステップ108Bの処理により二次元座標が取得された四隅については本処理の対象外とする。
上記の「最小単位の四隅」としては、図3に示す例では、各分割領域を規定している四隅が挙げられる。すなわち、位置・向き検出シンボル32A,32C、位置検出補助シンボル62A、及び位置検出補助シンボル62Cによる四隅と、位置検出補助シンボル62A、位置検出補助シンボル62B、位置検出補助シンボル62C、及び位置検出補助シンボル62Dによる四隅と、位置・向き検出シンボル32B,32D、位置検出補助シンボル62B,62Dによる四隅と、が挙げられる。
次のステップ108Cでは、上記ステップ108Bの処理により取得された最小単位の四隅の各々に含まれる特定の画素に付与された二次元座標を参照して、二次元コード画像に含まれる各画素に対して二次元座標を付与する。例えば上記ステップ108Bの処理により取得された最小単位の四隅の二次元座標から、この最小単位の四隅で形成される四角形領域(辺も含む)に含まれる各画素の二次元座標を一意に導出して各画素に付与する形態例が挙げられる。一意に各画素の二次元座標を一意に導出して各画素に付与する具体的手段としては、歪みがない場合の各画素の位置を特定する情報として上記の「最小単位の四隅」で形成される四角形領域に含まれる各画素に事前に付与された二次元座標毎に、最小単位の四隅の各々に含まれる特定の画素に付与された各二次元座標及び最小単位の四隅の二次元座標の各々からの距離として予め定められた各距離(例えば、位置・向き検出シンボル32Aに含まれる特定の画素からの距離として予め定められた距離、位置・向き検出シンボル32Cに含まれる特定の画素からの距離として予め定められた距離、位置検出補助シンボル62Aに含まれる特定の画素からの距離として予め定められた距離、及び位置検出補助シンボル62Cに含まれる特定の画素からの距離として予め定められた距離)が対応付けられたテーブルを用いて、最小単位の四隅で形成される四角形領域に含まれる各画素に二次元座標を付与する手段が挙げられる。この場合、例えば上記ステップ108Bの処理により取得された最小単位の四隅の二次元座標を入力とし、入力された最小単位の四隅の二次元座標に対応付けられている最小単位の四隅の二次元座標の各々からの距離として予め定められた各距離を満足する位置の二次元座標を出力とし、ここで出力された二次元座標を対象画素に付与すれば良い。また、演算式を用いて、上記ステップ108Bの処理により取得された最小単位の四隅の二次元座標から、最小単位の四隅の二次元座標との相対的な位置関係を一意に特定する情報(例えば最小単位の四隅の二次元座標と各画素までの距離)を算出し、この算出結果に基づいて各画素の二次元座標を算出するようにしても良い。
なお、図3に示す例では位置検出補助シンボル62を二次元コード60に複数挿入する例を挙げているが、これに限らず、位置検出補助シンボル62は単数であっても良い。この場合、例えば、位置検出補助シンボル62B〜62Dが除かれたとすると、位置・向き検出シンボル32A,32C,32D及び位置検出補助シンボル62Aの四隅の二次元座標から各画素の二次元座標を一意に導出する形態例が挙げられる。
また、各画素の二次元座標を一意に導出するには、必ずしも最小単位の四隅の二次元座標から導出する必要はなく、例えば、位置・向き検出シンボル32A,32C及び位置検出補助シンボル62Aの三隅の二次元座標から各画素の二次元座標を一意に導出しても良い。具体的には、位置・向き検出シンボル32A,32C及び位置検出補助シンボル62Aの三隅からの二次元座標の導出対象とされた各画素に事前に付与された二次元座標毎に、位置・向き検出シンボル32Aに含まれる特定の画素からの距離として予め定められた距離、位置・向き検出シンボル32Cに含まれる特定の画素からの距離として予め定められた距離、及び位置検出補助シンボル62Aに含まれる特定の画素からの距離として予め定められた距離が対応付けられたテーブル又は演算式を事前に用意しておき、このテーブル又は演算式を用いて、最小単位の四隅で形成される四角形領域に含まれる各画素に二次元座標を付与する。
次のステップ108Dでは、全ての最小単位の四隅について上記ステップ108Bの処理を実行したか否かを判定し、否定判定となった場合には上記ステップ108Bに戻る一方、肯定判定となった場合には本座標設定処理プログラムを終了する。
図13に戻ってステップ110では、上記ステップ108の処理によって各画素に付与された二次元座標に基づいて、被記録対象領域38に含まれる分割領域を特定する。すなわち、各分割領域を規定する4つの二次元座標が事前に定められているので、この事前に定められている4つの二次元座標を用いて分割領域を推定することにより特定する。本実施の形態では、位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62の各々に含まれる特定の画素に二次元座標が予め付与されるので、これらの二次元座標によって被記録対象領域38に含まれる分割領域が特定される。
次のステップ112では、上記ステップ110の処理により特定された分割領域の各々から基準二値図柄位置特定情報に基づいて分割領域の各々における基準二値図柄の位置を推定することにより特定した後、ステップ114に移行する。ステップ114では、上記ステップ110の処理により特定された分割領域の位置に基づいて、注目すべき分割領域(注目分割領域)を決定する。すなわち、未だに二値化処理(白黒の識別)が行われていない画素を含む分割領域の1つを注目分割領域として決定する。次のステップ116では、上記ステップ114の処理によって決定された注目分割領域について、記憶領域αに記憶されている撮影画像情報により示される二次元コード画像に含まれる未だに二値化処理が行われていない画素である識別対象画素33を示す識別対象画素情報を撮影画像情報から取得した後、ステップ118に移行する。ステップ118では、上記ステップ114の処理によって決定された注目分割領域について、上記ステップ112の処理により特定された基準二値図柄の位置に基づいて、記憶領域αに記憶されている撮影画像情報により示される二次元コード画像に含まれる基準二値図柄を示す基準二値図柄情報を撮影画像情報から取得する。
次のステップ120では、上記ステップ116の処理により取得された識別対象画素情報を、上記ステップ118の処理により取得された基準二値図柄情報に基づいて二値化処理する。すなわち、基準二値図柄情報から識別対象画像の黒と白との識別に供する閾値を特定し、特定した閾値を用いて、上記ステップ116の処理により取得された識別対象画素情報により示される識別対象画素33が白であるか黒であるかの識別を行う。また、分割領域には複数の基準二値図柄が含まれているので、本ステップ120では、識別対象画素33との距離が最も短い基準二値図柄を示す基準二値図柄情報に基づいて二値化処理を行う。なお、識別対象画素33との距離が相違しない複数の基準二値図柄が存在する場合には予め定められた規則(例えば隣接する識別対象画素33との距離が短い方の基準二値図柄を示す基準二値図柄情報を採用するとの規則、最も大きな画素値を有する基準二値図柄を示す基準二値図柄情報を採用するとの規則、最も小さな画素値を有する基準二値図柄を示す基準二値図柄情報を採用するとの規則、画素値の平均値が最も大きな基準二値図柄を示す基準二値図柄情報を採用するとの規則、画素値の平均値が最も小さな基準二値図柄を示す基準二値図柄情報を採用するとの規則、或いは乱数を用いた抽選により決定する規則など)に従って何れか1つの基準二値図柄を決定しても良い。
次のステップ122では、上記ステップ120で二値化処理の対象とされた識別対象画素33の二次元コード30における位置を示す二次元座標及び上記ステップ120での二値化処理の結果を関連付けて記憶領域βに記憶する。これにより記憶領域βには二値化された解読対象二値図柄34を示す解読支援二値図柄情報と二値化された解読対象二値図柄34を示す解読対象二値図柄情報が記憶される。
次のステップ124では、上記ステップ116〜122の処理によって二値化処理が未だに行われていない識別対象画素33がないか否かを判定し、否定判定となった場合にはステップ116に戻る一方、肯定判定となった場合にはステップ126に移行する。ステップ126では、未だに二値化処理が行われていない識別対象画素33を含む分割領域がないか否かを判定し、否定判定となった場合にはステップ114に戻る一方、肯定判定となった場合にはステップ128に移行する。ステップ128では、記憶領域βに記憶されている解読支援二値図柄情報に基づいて、記憶領域βに記憶されている解読対象二値図柄情報を復号した後、本二次元コード解読処理プログラムを終了する。
このように本実施の形態に係る二次元コード60によれば、二次元コード画像が歪んでいたとしても、その歪みを補正することなく、二次元コード画像に含まれる識別対象画素33の位置が高精度に特定される。よって、解読対象情報の解読も高精度に行われる。すなわち、従来であれば一例として図15に示すように二次元コード画像の四隅の二次元座標(位置・向き検出シンボル32A〜32Dの各々に含まれる特定の画素に付与された二次元座標)に依拠して二次元コード画像に含まれる全ての画素の位置を特定していたため、二次元コード画像の4辺の各々が一直線であることを前提として各画素に二次元座標を付与する場合には二次元コード画像が歪むと識別対象画素33の位置が高精度に特定されなかった。これに対し、本実施の形態に係る二次元コード60では、例えば図16に示すように二次元コード画像の四隅の二次元座標の他にも二次元コード60の輪郭上に位置の特定に寄与する基準となる二次元座標(位置検出補助シンボル62に含まれる特定の画素に付与された二次元座標)を設けたので、二次元コード画像の四隅の二次元座標に依拠する構成(図15に示す構成)に比べ、二次元コード画像に含まれる識別対象画素33の位置が高精度に特定される。
また、本実施の形態では、位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62を用いて各画素の位置を特定する場合の形態例を挙げたが、位置・向き検出シンボル32A〜32D及び位置検出補助シンボル62に加えて位置検出中央シンボル64も用いて各画素の位置を特定しても良い。この場合、各画素の位置がより高精度に特定される。
また、本実施の形態では、位置検出補助シンボル62及び位置検出中央シンボル64の各々の大きさを位置・向き検出シンボル32A〜32Dの各々の大きさよりも小さくしたが、これに限らず、位置検出補助シンボル62及び位置検出中央シンボル64の少なくとも一方の大きさを位置・向き検出シンボル32A〜32Dの各々の大きさ以上にしても良い。この場合、本実施の形態で説明した構成に比べ、位置検出補助シンボル62及び位置検出中央シンボル64が正確に検出される。また、位置検出補助シンボル62及び位置検出中央シンボル64の少なくとも一方の大きさを位置・向き検出シンボル32A〜32Dの各々の大きさ以上にしなくても、本実施の形態で説明した大きさよりも大きくすれば、本実施の形態で説明した構成に比べ、位置検出補助シンボル62及び位置検出中央シンボル64が正確に検出される。
また、本実施の形態では、被記録対象領域38の四隅に位置・向き検出シンボル32A〜32Dを配置し、位置・向き検出シンボル32A〜32Dによって各画素の位置を特定する場合の形態例を挙げたが、位置・向き検出シンボル32A〜32Dのうちの少なくとも3つが存在していれば各画素の位置が特定される。
また、本実施の形態では、被記録対象領域38の一組の対辺の各々に沿って複数の位置検出補助シンボル62を挿入する形態例を挙げて説明したが、全ての辺の各々に沿って複数の位置検出補助シンボル62を挿入しても良い。この場合、各画素の位置がより高精度に特定される。
また、本実施の形態では、一組の対辺の各々について位置検出補助シンボル62を2個ずつ設けた例を挙げたが、二次元コード画像の辺において想定される最大の湾曲が無視される程度(各画素の特定に湾曲が影響を及ぼさない程度)の間隔で位置検出補助シンボル62を配置するようにしても良い。例えば、図8に示す二次元コード画像の辺の湾曲よりも大きな湾曲が予想される場合には一辺に3個以上の位置検出補助シンボル62を挿入しておくことにより本実施の形態に係る構成(一辺に2個の位置検出補助シンボル62を挿入した形態)に比べ、画素の位置が高精度に特定される。このように、湾曲した辺を細分することにより得た個々の線分を直線として捉えることで、画素の位置の高精度な特定が実現される。
本実施の形態では、分割領域に複数の基準二値図柄36を含む場合の形態例を挙げて説明したが、これに限らず、一例として図17に示すように分割領域毎に1つの基準二値図柄36を挿入するようにしても良い。この場合、分割領域に複数の基準二値図柄36を含む場合に比べ、識別対象画素33から最も近い位置に存在する基準二値図柄36を探索する処理にかかる負荷が軽減される。また、分割領域毎に1つの基準二値図柄36を挿入する場合も分割領域における特定の位置(上述した基準二値図柄位置特定情報に相当する情報によって一意に特定される位置)に基準二値図柄36を配置すると良い。これにより、分割領域毎に異なる位置に基準二値図柄36を配置する場合に比べ、基準二値図柄36の位置を特定する処理にかかる負荷が軽減される。
また、本実施の形態では、白黒の識別を行う場合の形態例を挙げて説明したが、これに限らず、例えば図18に示すように基準二値図柄36と共に一対の有彩色(ここでは一例として白赤)の有彩色基準二値図柄50を分割領域の各々に挿入しても良い。この場合、例えば解読支援二値図柄32及び解読対象二値図柄34の一方を白黒(一対の無彩色)で表現すると共に他方を白赤(一対の有彩色)で表現し、分割領域毎に、解読支援二値図柄32及び解読対象二値図柄34の一方に含まれる画素の白黒の識別を、基準二値図柄36から取得される閾値を用いて行うと共に、解読支援二値図柄32及び解読対象二値図柄34の他方に含まれる画素の白赤の識別を、有彩色基準二値図柄50から取得される閾値を用いて行う。なお、この場合も基準二値図柄36及び有彩色基準二値図柄50を分割領域における特定の位置(上述した基準二値図柄位置特定情報に相当する情報によって一意に特定される位置)に配置すると良い。この場合、基準二値図柄36及び有彩色基準二値図柄50を分割領域における特定の位置に配置しない場合に比べ、基準二値図柄36及び有彩色基準二値図柄50の位置を特定する処理にかかる負荷が軽減される。
また、解読支援二値図柄32が一対の有彩色及び一対の無彩色を組み合わせた画像であったり、解読対象二値図柄34が一対の有彩色及び一対の無彩色を組み合わせた画像であったりしても、無彩色(例えば白又は黒)が施される画素に対しては基準二値図柄36を基準にして識別を行えば良く、有彩色(例えば白又は赤)が施される画素に対しては有彩色基準二値図柄50を基準にして識別を行えば良い。
また、本実施の形態では、解読対象二値図柄34に含まれる画素を識別対象画素33として例示したが、解読支援二値図柄32及び解読対象二値図柄34の少なくとも一方に含まれる画素を識別対象画素33とすれば良い。
ここで、解読支援二値図柄32に含まれる画素を識別対象画素33とせずに、解読対象二値図柄34に含まれる画素を識別対象画素33としても良い理由を説明する。本実施の形態では、位置・向き検出シンボル32A〜32Dの各々が一例として図3に示すように白領域及び黒領域の市松模様に形成されており、白領域及び黒領域の各々が複数の画素の集合とされている。つまり、解読対象二値図柄34では、解読対象情報が1画素単位で表現されているため、解読対象二値図柄34に含まれる1画素の二値化の失敗は解読対象情報の解読に大きな影響を及ぼす虞があるのに対し、位置・向き検出シンボル32A〜32Dでは、仮に1画素の二値化に失敗したとしても周辺の画素によってその失敗が誤り訂正処理などによって補填される。そのため、位置・向き検出シンボル32A〜32Dは、基準二値図柄36を基準にした二値化処理を行わずとも従来の手法による二値化処理によってその機能を発揮するものと考えられる。言い換えると、位置・向き検出シンボル32A〜32Dは、読取対象とされる白領域及び黒領域の面積が1画素の面積に比べて圧倒的に大きいため、解読対象二値図柄34に含まれる1画素の検出に比べ、精度良く検出されるということである。従って、位置・向き検出シンボル32A〜32Dによって二次元コード30の向き及び二次元コード30に含まれる画素の位置が確実に特定されるという前提の下で、識別対象画素33を解読対象二値図柄34に含まれる画素に限定しても良いということが言える。
また、本実施の形態では、基準二値図柄36により白黒を識別するための基準となる閾値を決定する場合の形態例を挙げて説明したが、これに限らず、位置・向き検出シンボル32A〜32Dの少なくとも1つの白黒も参照して閾値を決定しても良い。例えば、位置・向き検出シンボル32Aの白領域の平均濃度と基準二値図柄36の白画素の濃度との平均値、及び位置・向き検出シンボル32Aの黒領域の平均濃度と基準二値図柄36の黒画素の濃度との平均値に基づいて閾値を決定する形態例が挙げられる。また、解読支援二値図柄32のうちの位置・向き検出シンボル32A〜32D以外のもの(例えばフォーマット情報を示す画像や読取タイミングを規定する画像など)及び基準二値図柄36に基づいて閾値を決定しても良い。
また、本実施の形態では、二次元コード30に複数の基準二値図柄36が含まれている形態例を挙げて説明したが、基準二値図柄36は単数であっても良い。この場合も基準二値図柄36を有しない場合に比べ、高精度な二値化処理が行われる。
また、本実施の形態では、被記録対象領域38をマトリクス状に分割して得られた複数の分割領域を例示したが、これは二次元コード30を読み取った後の処理を簡便にするための事前処理であって、必ずしもマトリクス状に分割して分割領域を得なれければならないというわけではなく、マトリクス状以外の分割形態で分割しても良い。
また、本実施の形態では、解読対象二値図柄34に基準二値図柄36を挿入した例を挙げたが、これに限らず、解読支援二値図柄32に挿入しても良い。また、有彩色基準二値図柄50も解読支援二値図柄32に挿入しても良い。
また、本実施の形態では、基準二値図柄36を用いることにより、読取対象面における明暗のバランスが崩れた不鮮明(例えば低コントラスト)な二次元コード60を携帯電話機40のカメラ40Iで撮影することにより得られた二次元コード画像に基づいて、解読対象情報を高精度に解読する形態例を挙げたが、二次元コード60において明るさの分布に偏りがないことが明らかな場合は二次元コード60に基準二値図柄36を含めなくても良い。この場合、基準二値図柄36を検出する処理及び基準二値図柄36から閾値を特定する処理などが省かれるので二次元コード60を読み取ってから解読対象情報が解読されるまでの時間の短縮が実現される。