JP5393428B2 - コード検出及び復号化システム - Google Patents

コード検出及び復号化システム Download PDF

Info

Publication number
JP5393428B2
JP5393428B2 JP2009285726A JP2009285726A JP5393428B2 JP 5393428 B2 JP5393428 B2 JP 5393428B2 JP 2009285726 A JP2009285726 A JP 2009285726A JP 2009285726 A JP2009285726 A JP 2009285726A JP 5393428 B2 JP5393428 B2 JP 5393428B2
Authority
JP
Japan
Prior art keywords
code
finder
detected
angle
vector
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2009285726A
Other languages
English (en)
Other versions
JP2010170539A5 (ja
JP2010170539A (ja
Inventor
ウェイ レオン イープ アルヴィン
エドワード イーコブ ステファン
スウェン ジェームズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AU2008261179A external-priority patent/AU2008261179B2/en
Priority claimed from AU2008261177A external-priority patent/AU2008261177B2/en
Application filed by Canon Inc filed Critical Canon Inc
Publication of JP2010170539A publication Critical patent/JP2010170539A/ja
Publication of JP2010170539A5 publication Critical patent/JP2010170539A5/ja
Application granted granted Critical
Publication of JP5393428B2 publication Critical patent/JP5393428B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1408Methods for optical code recognition the method being specifically adapted for the type of code
    • G06K7/14172D bar codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1439Methods for optical code recognition including a method step for retrieval of the optical code
    • G06K7/1452Methods for optical code recognition including a method step for retrieval of the optical code detecting bar code edges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1439Methods for optical code recognition including a method step for retrieval of the optical code
    • G06K7/1456Methods for optical code recognition including a method step for retrieval of the optical code determining the orientation of the optical code with respect to the reader and correcting therefore

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Electromagnetism (AREA)
  • General Health & Medical Sciences (AREA)
  • Toxicology (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)
  • Editing Of Facsimile Originals (AREA)

Description

本発明は、一般に、識別マーカ又は目標特徴検出及びその結果として起こるコード復号化に関する。更に本発明は、QRコード領域を形成するための複数の識別マーカの探索及びグループ化に関する。それらのQRコード領域は、識別されるとQRコードシンボルにより符号化されるデータを復号化するために使用されても良い。
デジタル画像が出現したため、デジタル画像処理の目的は画像中の特徴を識別し、且つその位置を特定することである。この目的を達成するために、多くのアルゴリズムや方法が開発されている。
走査済画像中の目標特徴を検出する簡単な方法は、例えばテンプレート相関として周知である。ここで、求められる目標特徴の代表的な画像が形成されてメモリに格納される。その後、代表的な画像(又はテンプレート)を走査済画像上でステップ毎に比較し、相関スコアをステップ位置毎に計算する。相関スコアの急激なピークは、走査済画像における目標特徴の存在及び場所を示す。しかし、この方法はいくつかの制限を有する。テンプレート相関の主な制限は、テンプレートに対するデジタル画像のサイズ及び回転の差に非常に影響されやすいことである。従って、ロバストな尺度不変性及び回転不変性の検出システムのために複数のテンプレートが形成される必要があり、これは非常に複雑なシステムを必要とする。
走査済画像において目標特徴を検出する別の方法は、統計的な手段により実行される。ここで、機械は種々の機械学習アルゴリズムにより目標特徴を識別するように訓練される。一般に訓練処理は、目標特徴を含む画像及び目標特徴を含まない画像の大きなテスト集合を入力することを含む。訓練処理の結果として、画像中の新しい「見えなかった」目標特徴を検出する時に使用される分類ベクトルが生成される。しかし、この方法は、訓練処理中に入力されたテスト集合に大きく依存する。結果として得られる分類ベクトルは予測不可能であり、目標特徴の主な特徴には無関係である場合がある。
走査済画像において目標特徴を検出する別の方法は、単純であり、且つ効率的である。ここで、黒色領域及び白色領域の周知の構成を有する目標特徴がそれらの黒色領域と白色領域との間の比率を検査することにより検出されても良い。一例として、図1の特徴100などの目標特徴は黒:白:黒:白:黒が1:1:3:1:1となる比率を見つけた場合に検出される。この方法は実現するのに非常に容易で、且つ効率的であるが、目標特徴の画像がドットゲインとして周知の歪み効果により影響を受ける場合に不利になる。ドットゲインは、印刷された黒色領域の厚さを縮小又は増加するプリンタ歪みである。これは、黒色領域及び白色領域の比率に直接影響を及ぼす。従って、この方法はドットゲインが存在する場合には不適切である。
図3のコード300などのQRコードは、「モジュール」と呼ばれる、黒色及び白色の正方形ブロックで情報を符号化する2次元バーコードである。QRコード300において、黒色モジュール302及び白色モジュール301にはラベルが付けられる。QRコードは、データ容量の範囲を有する。「バージョン1」のQRコードは最小データビット数を符号化し、「バージョン40」のQRコードは最大データビット数を符号化する。更なるデータビットを符号化するQRコードは、より多くのモジュールを有する。データ容量に関係なく、常にQRコードは高さと同一のモジュール数の幅である。即ち、常にQRコードは正方形である。
QRコードは、3つの場所/識別記号を含む。それらの3つの場所記号は「ファインダパターン」(FP)として周知であり、それらの位置はQRコードの左上、右上及び左下の隅で特定される。従って、「QRコード領域」としても周知であるQRコードにより専有される画像の2次元領域は、3つのFPの場所により境界が決定される。図2Bは、QRコード200の3つの隅で位置が特定されても良いような3つのFP201、202、203を示す。図2Aは、FP202の拡大された表現を提供する。図1は、QRコードファインダパターン100を詳細に示す図である。ファインダパターンは白色モジュール102の5×5正方形上に重畳される黒色モジュール103の3×3正方形から構成され、白色モジュール102は黒色モジュール101の7×7正方形上に重畳される。
QRコードに符号化されるデータを抽出する処理は、コードを含む画像の取得から開始する。その後、全ての3つのファインダパターンが検出され、それらの場所が判定される。QRコードのデータモジュールは、検出されたFPの場所情報を使用してサンプリングされ、バイナリデータストリームを取得する。最後に、バイナリデータストリームは有意味なテキスト又は数値情報に変換される。
QRコードは、製品ラベル、広告及び名刺などの広範な媒体上に含まれることが多い。一般に、これらの媒体は、高品質の単一のQRコードのみを含んでいる(即ち、元のQRコードのデジタル画像が媒体上に正確に再現されている)。従って、QRコードが復号化されている時、取得された画像には単一のQRコードのみが存在し、コードの品質が高いため、相対的に単純な復号化処理の使用を容易にする。更に、従来のQRコード取り込み装置(カメラフォンなど)は、回転の位置ずれが殆どないQRコードの画像が取得されるようにユーザにより調整される。それらのユーザにより調整される取り込み装置は、QRコードのモジュールのサイズ(取り込み装置に対する)が制限された周知の範囲内になるようにQRコードを作成できる。
近年、文書のセキュリティ及びワークフロー管理を支援する際のQRコードの適用に対する関心が高まっている。これらの応用例の場合、取得された画像には複数のQRコードが存在する場合がある。更に、多くの場合、画像中のQRコードのうちで、モジュールのサイズ及び向きが大きく異なっても良い。QRコードは、何回も印刷、走査及び再印刷されても良いが、その度にQRコードの画質は低下する。特に、QRコードは、QRコードにおける黒色モジュールのサイズと白色モジュールのサイズとの比率が理想的な1:1の比率とは大きく異なる「ドットゲイン」の悪影響を受ける可能性がある。複数回の印刷/走査により、ノイズ及び他の歪みが導入され、理想的なFP100と比較してQRコードファインダパターンの外形を更に変更する。従来の技術を使用する復号化信頼性に対するドットゲイン、並びに他の印刷及び/又は走査による歪みの影響が考慮される。これは、一般に従来の復号化システムがQRコードファインダパターン100の予想される外形、特に白色モジュールのサイズと黒色モジュールのサイズとの1:1の比率に大きく依存し、QRコードファインダパターンを検出し、且つそれによりQRコードを復号化するためである。
説明するいくつかの構成は、ドットゲイン、ノイズ及び他の種類の損失に対して非常に高いロバスト性を有するQRコードを検出及び復号化する方法を提供する。更に、取得した画像に複数のQRコードが存在する場合でも、構成はQRファインダパターンをグループ化して有効なQRコード領域を形成できる。
簡単に説明すると、ここで開示されるQR検出構成は、4つの基本的な段階、即ち2値化、CCA、分解及び復号化を含む。これらの段階については、後で更に詳細に説明する。
その構成は、従来のFP検出方法より有用な情報を分解段階及び復号化段階に提供する連結成分解析(CCA)を使用するQR FPを検出し且つそれらの位置を特定する方法を使用する。
本発明の一態様は、QR FPをQRコード領域にグループ化するための新しい方法を使用する。ここで、QRコードを形成するために複数のQR FPをグループ化する処理を「分解」と呼ぶ。他の態様である、損失ファインダパターン回復処理と共に適用される、ここで開示される分解方法は、最初に検出される2つのQR FPのみからQRコード領域を分解できる。このことは、本発明者が知る限り従来の方法では達成されておらず、3つのFPのうち1つが損失した場合にQRコードが復号化されることを可能にする。
全般的に言うと、上述の態様を取り入れた開示される復号化方法により、3つのFPのうち1つが損失した場合でも、QRコードを復号化できる非常に高いロバスト性を有するQRコード復号化システムが可能である。この損失は、偶発的な汚れ又はペンストローク、或いは複数回の印刷/走査により、引き起こされた深刻なノイズが原因である可能性がある。
本発明の一態様によれば、2つの最初に検出されたファインダパターンを有するQRコードを復号化する方法を実行するためのプロセッサと前記ファインダパターンを含む画像が格納される関連メモリとを少なくとも含むコンピュータにより実現される方法であって、
(a)前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成するステップと、
(b)前記QRコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づかれる候補領域であり、前記検出されたファインダパターンに関して少なくとも1つの候補領域を決定するステップと、
(c)前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも1つの候補領域の中の前記QRコードの先に検出されなかった第3のファインダパターンの位置を特定するステップと、
(d)前記2つの最初に検出されたファインダパターンの各々及び前記第3のファインダパターンを使用して前記QRコードを復号化するステップと、
を有することを特徴とする方法が提供される。
本発明の他の態様は、各連結成分の低レベル計測値を同時に集約する連結成分解析を実行する新しい方法である。その後、低レベル計測値は、連結成分の幾何学的特性に直接関連付けられる形状計測値に変換される。形状計測値は、実質的にサイズ不変性及び回転不変性である類似性スコアを計算するために使用される。
説明される構成は、メモリ効率が良く、FPGA又はASIC等のカスタマイズされたハードウェア論理として実装することに適する。更に構成は、ドットゲイン等のプリンタ及びスキャナのノイズ及び歪みに対して高いロバスト性を有する。
本発明の他の態様によれば、画像中において周知の目標特徴を有する2次元コード及び符号化データを検出する方法が提供される。目標特徴は連続する黒色領域を含み、その黒色領域の全体は連続する白色領域により囲まれ、その白色領域の全体は連続する黒色領域により囲まれている。方法は、関心候補特徴を判定するために画像の行毎の連結成分解析を実行する。行毎の連結成分解析は、関心候補特徴に対応する計測値を集約する。方法は、各関心候補特徴が目標特徴とどの程度類似するかを判定するために集約された計測値を評価し、複数の関心候補特徴から1つの関心候補領域を形成する。一般に目標特徴は、著作権記号及び登録商標記号を含む。
他の態様が更に開示される。
目標特徴とも考えられてもよいQRコード「ファインダパターン」の理想的な構成を示す図である。 ノイズ及びドットゲインにより影響を受けるQRコードを示す図である。 黒色モジュール及び白色モジュールの例を含むQRコードを示す図である。 QRコード復号化処理を示すフローチャートである。 図4のステップ404で採用された分解処理に対する一般的な概要を示すフローチャートである。 3つのファインダパターンのグループをQRコード領域に分解するために図5のステップ502で採用された処理の一般的な概要を示すフローチャートである。 3つのファインダパターンのグループがQRコード領域を潜在的に形成しても良いことをチェックする処理を詳細に示すフローチャートである。 図6のステップ602で実行されるチェックが失敗するいくつかの例を示す図である。 「真」の3/3領域を見つけるためにステップ603で採用される処理を示すフローチャートである。 内部ファインダパターンを有するQRコード領域及び有さないQRコード領域の例を示す図である。 3/3QRコードが内部ファインダパターンを含むかを判定するために使用されるベクトルを示す図である。 2つのファインダパターンのグループをQRコード領域に分解するためにステップ503で採用される処理の一般的な概要を示すフローチャートである。 1対のファインダパターンがQRコード領域を潜在的に形成しても良いことをチェックする処理を詳細に示すフローチャートである。 1203で実行されるチェックが失敗する例を示す図である。 垂直及び対角に配向された2/3領域を示す図である。 潜在的な2/3領域を生成するためにステップ1203で採用される処理を示すフローチャートである。 検出されたファインダパターンに対して潜在的なQRコード領域を示す図である。 潜在的なQRコード領域の範囲を判定するために使用される検出されたファインダパターンに対するベクトルを示す図である。 「真」の2/3領域を見つけるためにステップ1204で採用される処理を示すフローチャートである。 2/3QRコード領域が内部ファインダパターンを含むかを判定するために使用されるベクトルを示す図である。 QRコード領域を復号化するためにステップ405で採用される処理の一般的な概要を示すフローチャートである。 3/3領域を復号化するためにステップ2102で採用される処理を詳細に示すフローチャートである。 2/3領域を復号化するためにステップ2103で採用される処理を詳細に示すフローチャートである。 2/3領域において損失するファインダパターンを検出するためにステップ2304で採用される処理を詳細に示すフローチャートである。 CCA情報からパターンマッチングテンプレートを形成するためにステップ2402で採用される処理の一般的な概要を示すフローチャートである。 最初に検出される2つのファインダパターンを平均することによりパターンマッチングテンプレートを形成するためにステップ2402で採用されてもよい別の処理の一般的な概要を示すフローチャートである。 ドットゲイン情報を考慮してメモリに形成されるテンプレートの一例を示す図である。 メモリに形成され且つ回転されたテンプレートの一例を示す図である。 探索領域、並びに垂直及び対角に配向されたQRコード領域における検出されたファインダパターンとそれらの探索領域との関係の例を示す図である。 探索領域の範囲を判定するために形成されるベクトル及び角度を示す図である。 ステップ1201のチェック及び2304で採用される損失するファインダパターンを検出する処理を助長するために利用されてもよいQRコードの種々の固有の特徴を示す図である。 固有のQRコードの特徴を利用して損失するファインダパターンを検出する別の処理を示すフローチャートである。 説明する構成が実現可能である汎用コンピュータシステムを示す概略ブロック図である。 本発明の状況において有効である別の目標特徴を示す図である。 目標特徴を含むデジタル画像を示す図である。 本発明の状況において目標特徴検出方法を示すフローチャートである。 デジタル画像300から作成される2値化画像を示す図である。 本発明の構成において使用されてもよい2値化方法を示すフローチャートである。 デジタル画像300がモザイク状のタイルに分割される方法を示す図である。 タイルバッファの2次元配列構造を示す図である。 目標特徴に重ね合わされるタイルから構成されるスライディングウィンドウを示す図である。 メモリ効率の良いタイルバッファを示す図である。 本発明において使用される連結成分解析の方法を示すフローチャートである。 CCとそのクレームと走査線上のランとの関係を示す図である。 ランの処理方法を示すフローチャートである。 形状計測値を評価する方法を示すフローチャートである。 候補特徴及びその中間計測値の関係を示す図である。 QRコードを示す図である。 QRコード復号化のための目標特徴検出の状況における後処理方法を示すフローチャートである。 候補特徴を候補領域に分解する方法を示すフローチャートである。 内部候補特徴を含む候補領域を除去する方法を示すフローチャートである。 内部候補特徴を含む候補領域を示す図である。 著作権の記号を示す図である。 著作権の記号を検出するための後処理方法を示すフローチャートである。 登録商標の記号を示す図である。
次に、図面を参照して、本発明の少なくとも1つの実施形態を説明する。
動作環境
図33A及び図33Bは、説明する種々の構成が実現される汎用コンピュータシステム3300の概略ブロック図を集合的に形成する。
図33Aから分かるように、コンピュータシステム3300は、コンピュータ装置モジュール3301と、キーボード3302、マウスポインタデバイス3303、スキャナ3326、カメラ3327及びマイク3380などの入力装置と、プリンタ3315、表示装置3314及びスピーカ3317を含む出力装置とにより形成される。外部変復調器(モデム)トランシーバ装置3316は、接続3321を介して通信ネットワーク3320と通信するコンピュータモジュール3301により使用されても良い。ネットワーク3320は、インターネット又は専用ワイドエリアネットワーク(WAN)などのWANであっても良い。接続3321が電話回線である場合、モデム3316は従来の「ダイヤルアップ」モデムであっても良い。或いは、接続3321が大容量(例えば、ケーブル)接続である場合、モデム3316はブロードバンドモデムであっても良い。無線モデムは、ネットワーク3320に無線接続するために使用されても良い。
一般に、コンピュータ装置3301は、少なくとも1つのプロセッサユニット3305と、例えば半導体ランダムアクセスメモリ(RAM)及び半導体読み出し専用メモリ(ROM)から形成されるメモリユニット3306とを含む。モジュール3301は、ビデオ表示装置3314、スピーカ3317及びマイク3380に結合するオーディオビデオインタフェース3307と、キーボード3302、マウス3303、スキャナ3326、カメラ3327及びオプションとしてジョイスティック(不図示)に対する入出力(I/O)インタフェース3313と、外部モデム3316及びプリンタ3315に対するインタフェース3308とを含む多くのI/Oインタフェースを更に含む。いくつかの実現例において、モデム3316は、コンピュータモジュール3301内、例えばインタフェース3308内に内蔵されても良い。コンピュータモジュール3301は、接続3323を介してコンピュータシステム3300をローカルエリアネットワーク(LAN)として周知のローカルコンピュータネットワーク3322に結合することを可能にするローカルネットワークインタフェース3311を更に有する。図示するように、ローカルネットワーク3322は、一般に、所謂「ファイアウォール」装置又は同様の機能性の装置を含む接続3324を介してワイドネットワーク3320に更に結合しても良い。インタフェース3311は、Ethernet(登録商標)回路カード、Bluetooth(登録商標)無線構成又はIEEE802.11無線構成により形成されても良い。
インタフェース3308及び3313は、直列接続性及び並列接続性の何れか又は双方を提供でき、一般に直列接続性はユニバーサルシリアルバス(USB)規格に従って実現され、対応するUSBコネクタ(不図示)を有する。記憶装置3309が提供され、一般にハードディスクドライブ(HDD)3310を含む。更に、フロッピー(登録商標)ディスクドライブ及び磁気テープ装置(不図示)などの他の記憶装置が使用されても良い。一般に光ディスクドライブ3312は、不揮発性データソースとして動作するために提供される。光ディスク(例えば、CD−ROM、DVD)、USB−RAM及びフロッピー(登録商標)ディスクなどのポータブルメモリ素子は、例えばシステム3300に対する適切なデータソースとして使用されても良い。
一般に、コンピュータモジュール3301の構成要素3305〜3313は、当業者には周知のコンピュータシステム3300の従来の動作モードを結果として与える方法で、相互接続バス3304を介して通信する。上述の構成が実現されるコンピュータの例として、IBMのPC及びそれに互換性のある、Sun SPARCstation、Apple Mac(登録商標)又はそれから進化した同様のコンピュータシステムがある。
QRコード復号化方法は、説明する図4乃至図55の処理がコンピュータシステム3300内で実行可能な1つ以上のソフトウェアアプリケーションプログラム3333として実現されるコンピュータシステム3300を使用して実現されても良い。特に、QRコード復号化方法のステップは、コンピュータシステム3300内で実行されるソフトウェア3333の命令3331により行われる。ソフトウェア命令3331は、各々が1つ以上の特定のタスクを実行する1つ以上のコードモジュールとして形成されても良い。ソフトウェアは、2つの別個の部分に分割されても良い。第1の部分及び対応するコードモジュールはQRコード復号化方法を実行し、第2の部分及び対応するコードモジュールは第1の部分とユーザとの間のユーザインタフェースを管理する。
ソフトウェア3333は、一般にコンピュータ可読媒体からコンピュータシステム3300にロードされ、通常、図33Aに示すようにHDD3310に格納されるか又はメモリ3306に格納される。その後、ソフトウェア3333はコンピュータシステム3300により実行される。いくつかの例において、アプリケーションプログラム3333は、メモリ3310又は3306に格納される前に、1つ以上のCD−ROM3325上で符号化されてユーザに供給され、対応するドライブ3312を介して読み出されても良い。或いは、ソフトウェア3333はコンピュータシステム3300によりネットワーク3320又は3322から読み出されても良く、他のコンピュータ可読媒体からコンピュータシステム3300にロードされても良い。コンピュータ可読記憶媒体は、実行及び/又は処理のために、命令及び/又はデータをコンピュータシステム3300に提供することに関係する任意の記憶媒体を示す。そのような記憶媒体の例としては、装置がコンピュータモジュール3301の内部装置であるか又は外部装置であるかに関わらず、フロッピー(登録商標)ディスク、磁気テープ、CD−ROM、ハードディスクドライブ、ROM又は集積回路、USBメモリ、光磁気ディスク、或いはPCMCIAカード等のコンピュータ可読カード等がある。ソフトウェア、アプリケーションプログラム、命令及び/又はデータのコンピュータモジュール3301への提供に関係しても良いコンピュータが読み取り可能な伝送媒体の例としては、別のコンピュータ又はネットワーク化装置に対するネットワーク接続、並びに電子メール送信及びウェブサイト等に記録された情報を含むインターネット又はイントラネットに加え、無線伝送チャネル又は赤外線伝送チャネルがある。
上述のアプリケーションプログラム3333の第2の部分及び対応するコードモジュールは、表示装置3314上にレンダリングされるか又は表現される1つ以上のグラフィカルユーザインタフェース(GUI)を実現するために実行されても良い。一般にキーボード3302及びマウス3303を操作することにより、コンピュータシステム3300のユーザ及びアプリケーションは機能的に適応可能な方法でインタフェースを操作し、GUIと関連するアプリケーションに対して制御コマンド及び/又は入力を提供しても良い。スピーカ3317を介して出力される音声プロンプトを利用するオーディオインタフェース及びマイク3380を介して入力されるユーザ音声コマンド等の他の形態の機能的に適応可能なユーザインタフェースが実現されても良い。
図33Bは、プロセッサ3305及び「メモリ」3334を詳細に示す概略ブロック図である。メモリ3334は、図33Aのコンピュータモジュール3301によりアクセス可能な全てのメモリ素子(HDD3310及び半導体メモリ3306を含む)の論理的な集合を表す。
コンピュータモジュール3301が最初に電源を投入されると、POST(Power-On Self-Test)プログラム3350が実行される。一般にPOSTプログラム3350は、半導体メモリ3306のROM3349に格納される。ROM3349などのハードウェア装置に永続的に格納されたプログラムは、ファームウェアと呼ばれることもある。POSTプログラム3350は、コンピュータモジュール3301内のハードウェアを検査して適切な機能を保証し、一般にプロセッサ3305、メモリ(3309、3306)及びROM3349に格納された基本入出力システムソフトウェア(BIOS)モジュール3351が正確に動作しているかをチェックする。POSTプログラム3350が正常に実行されると、BIOS3351はハードディスクドライブ3310を起動する。ハードディスクドライブ3310が起動されると、ハードディスクドライブ3310に常駐するブートストラップローダプログラム3352がプロセッサ3305を介して実行される。これにより、オペレーティングシステム3353はRAMメモリ3306にロードされ、オペレーティングシステム3353はRAMメモリ3306上で動作を開始する。オペレーティングシステム3353は、プロセッサ3305により実行可能なシステムレベルのアプリケーションであり、プロセッサ管理、メモリ管理、装置管理、記憶装置管理、ソフトウェアアプリケーションインタフェース及び一般的なユーザインタフェースを含む種々の高レベルな機能を実現する。
オペレーティングシステム3353は、コンピュータモジュール3301上で実行する各処理又はアプリケーションが別の処理に割り当てられたメモリと衝突せずに実行されるように十分なメモリを有することを保証するためにメモリ(3309、3306)を管理する。更にシステム3300において使用可能な種々のメモリは、各処理が効果的に実行可能であるように適切に使用される必要がある。従って、統合メモリ3334は、メモリの特定のセグメントが割り当てられる方法を示すことを意図せず(特に指示のない限り)、コンピュータシステム3300によりアクセス可能なメモリ及びその使用方法の一般的な図を提供する。
プロセッサ3305は、制御ユニット3339、論理演算装置(ALU)3340及びキャッシュメモリと呼ばれることもあるローカル又は内部メモリ3348を含む複数の機能モジュールを含む。一般にキャッシュメモリ3348は、レジスタセクションに複数の記憶レジスタ3344〜3346を含む。1つ以上の内部バス3341は、それらの機能モジュールを機能的に相互接続する。一般にプロセッサ3305は、接続3318を使用してシステムバス3304を介して外部装置と通信するために1つ以上のインタフェース3342を更に有する。
アプリケーションプログラム3333は、条件付き分岐及びループ命令を含んでも良い一連の命令3331を含む。プログラム3333は、プログラム3333の実行時に使用されるデータ3332を更に含んでも良い。命令3331及びデータ3332は、記憶位置3328〜3330及び記憶位置3335〜3337にそれぞれ格納される。特定の命令は、命令3331の相対サイズ及び記憶位置3328〜3330に依存して、記憶位置3330において示される命令により図示されるように単一の記憶位置に格納されても良い。或いは、命令は記憶位置3328、3329において示される命令セグメントにより図示されるように、各々が別個の記憶位置に格納される複数の部分にセグメント化されても良い。
一般にプロセッサ3305には、プロセッサ3305において実行される命令の集合が与えられる。プロセッサ3305は次の入力を待ち、その入力に対して、別の命令の集合を実行することにより反応する。各入力は、複数の送信元のうち1つ以上から提供されても良く、1つ以上の入力装置3302、3303により生成されるデータ、ネットワーク3320、3322のうち1つのネットワークを介して外部送信元から受信されるデータ、記憶装置3306、3309のうち一方の記憶装置から検索されるデータ又は対応する読取り装置3312に挿入された記憶媒体3325から検索されるデータを含む。場合によっては、命令の集合を実行した結果、データが出力されても良い。実行は、データ又は変数をメモリ3334に格納することを更に含んでも良い。
開示されるQRコード復号化構成は、メモリ3334において対応する記憶位置3355〜3358に格納される入力変数3354を使用する。QRコード復号化構成は、メモリ3334において対応する記憶位置3362〜3365に格納される出力変数3361を生成する。中間変数は、記憶位置3359、3360、3366及び3367に格納されても良い。
プロセッサ3305のレジスタセクション3344〜3346、論理演算装置(ALU)3340及び制御ユニット3339は共に動作し、プログラム3333を構成する命令の集合中の全ての命令に対して「取り出し、復号化及び実行」サイクルを実行するのに必要な一連のマイクロ動作を実行する。各「取り出し、復号化及び実行」サイクルは以下を含む。
(a)記憶位置3328から命令3331を取り出すか又は読み出す取り出し動作;
(b)制御ユニット3339が取り出された命令を判定する復号化動作;
(c)制御ユニット3339及び/又はALU3340が命令を実行する実行動作。
その後、次の命令に対する更なる「取り出し、復号化及び実行」サイクルが実行されても良い。同様に、制御ユニット3339が値を記憶位置3332に格納するか又は書き込む格納サイクルが実行されても良い。
図4乃至図55の処理における各ステップ又はサブ処理は、プログラム3333の1つ以上のセグメントと関連付けられ、プロセッサ3305のレジスタセクション3344〜3347、ALU3340及び制御ユニット3339が共に動作してプログラム3333の示されたセグメントに対する命令の集合中の全ての命令に対して「取り出し、復号化及び実行」サイクルを実行することにより実行される。
或いは、コード検出及び復号化、並びにQRコード復号化の方法は、QRコード復号化の機能又はサブ機能を実行する1つ以上の集積回路等の専用ハードウェアで実現されても良い。そのような専用ハードウェアは、グラフィックプロセッサ、デジタル信号プロセッサ、或いは1つ以上のマイクロプロセッサ及び連想メモリを含んでも良い。
QRコード復号化システム
図33Aに示すように、一般にQRコード復号化に対して、少なくとも1つのQRコードが形成された文書3390がスキャナ3326により走査されるか又はカメラ3327により取り込まれ、その文書3390の取得された画像をインタフェース3313を介してコンピュータ3301に出力する。画像は、入力変数3355としてメモリ3334に格納される。QRコード復号化は、その記憶位置及び上述の記憶位置を含む他の記憶位置に格納された画像を使用して、次に説明するようにプロセッサ3305により実行される処理及びアプリケーションプログラムの制御下で進行する。
復号化フロー及び2値化
取得された画像中の1つ以上のQRコードを復号化する方法400を、図4を参照して説明する。方法400は、プロセッサ3305により実行されるようなアプリケーションプログラムの基礎を形成する。
取得された画像中の1つ以上のQRコードを復号化する処理400は初期ステップ401から開始し、QRコードを含む画像410が上述のように入力される。画像は、フラットベッドスキャナ又はデジタルカメラから取得されても良く、或いはネットワーク3320、3322を介して画像をダウンロードする等の画像のデジタル表現を取得する任意の他の手段により取得されても良い。画像は、プロセッサ3305の動作によりHDD3310に格納されても良い。
ステップ401の後、2値化ステップ402が続く。ステップ402において、2値化画像412は取得された画像410からプロセッサ3305により生成される。2値化画像は、中間変数3359として格納されても良い。2値化ステップ402は、取得された画像の他の画素に対する各画素の輝度を検査することにより、「黒色」又は「白色」として取得された画像の各画素にラベル付けする2値化アルゴリズムを採用する。従来技術において利用可能な周知の2値化アルゴリズムが多く存在し、ステップ402では、画素の輝度に基づいて「黒色」又は「白色」として画素にラベル付けする任意のアルゴリズムが採用されても良い。
次のステップ403において、2値化画像412のFPの位置が連結成分解析(CCA)の方法を採用することにより特定される。CCA段階403は、検出されたFPのリスト414を出力する。ここで開示されるFPを検出するためにCCAを実行する方法は、従来のFP検出方法と比較してドットゲインなどの一般的な印刷/走査歪みに対する非常に高いロバスト性を提供する。CCA FP検出アルゴリズムについては後で詳細に説明する。
次のステップ404において、先の段階403から出力される検出されたFPのリスト414は、プロセッサ3305を使用して処理され、FPをQRコード領域416に分解する。このFPをQRコード領域にグループ化する処理は、「分解」と呼ばれる。
ここで開示される構成では、2つの分解アルゴリズムが採用される。「3/3分解」と呼ばれる第1の分解アルゴリズムは、3つの検出されたファインダパターンのグループからQRコード領域を形成する。「2/3分解」と呼ばれる第2の分解アルゴリズムは、QRコードの1つのFPが検出されないと仮定される場合に存在できる可能なQRコード領域を判定する。この仮定から発生する可能なQRコード領域を生成することにより、3つのファインダパターンのうち2つのみが最初に検出される場合に、後の損失FP回復ステップを適用することによりQRコード領域は分解される。これにより、全体的に見て従来技術よりはるかに高いロバスト性を有するQRコード復号化システムの実現が可能になる。3/3及び2/3分解アルゴリズムについては後で詳細に説明する。
次のステップ405において、各候補QRコード領域において符号化情報418を抽出しようとする。候補QRコード領域が3つの検出されたFP(3/3分解アルゴリズムの出力)を含む場合、QRコード領域のモジュールがサンプリングされ、情報は従来の周知の方法を使用して抽出される。或いは、候補QRコード領域が2つのFP(2/3分解の出力)のみを含む場合、第3の「損失する」FPを取得しようとする。この処理は、ステップ403で採用されるCCA FP検出方法から利用可能にされる検出されたファインダパターンに関する追加の情報を活用する。この処理については後で詳細に説明する。第3のファインダパターンが正常に取得される場合、QRコードはサンプリングされ、情報は従来の周知の方法を介して抽出される。QRコード領域から符号化情報を抽出する処理は「復号化」として周知である。
取得された画像中の1つ以上のQRコードを復号化する処理は、最後のステップ406において終了する。
連結成分解析(CCA)
次に、復号化処理400のステップ403で採用される連結成分解析(CCA)の処理を詳細に説明する。
連結成分解析(CCA)は、黒色及び/又は白色領域等の画像中の連続したカラー領域又は同様のカラー領域を識別する処理の総称である。ここで開示される構成は、特にQRコードが繰り返し印刷/走査された場合、従来よりはるかに高いロバスト性を有するFP検出方法を提供する固有のCCAを採用する。更にCCA FP検出方法403は、従来より効率的で高精度である分解アルゴリズム(ステップ404で採用される)の適用を容易にする。また、ステップ405で採用される損失FP回復アルゴリズムはCCA FP検出器403を使用することにより容易になる。
ステップ403で採用され且つプロセッサ3305を使用して実行されるCCAアルゴリズムは、連続する「黒色」又は「白色」領域を識別するように、ステップ402で生成される2値化画像412中の同一の輝度を有する画素をグループ化する。特にCCAアルゴリズムは、一番上の走査線から一番下の走査線まで2値化画像412の各走査線を順に検査する。連続した黒画素を単一の「ラン」と呼ぶ。所定の走査線に対して各ランを検査し、先の走査線上のランと連結されるかを判定する。これは、ランの最も左側の範囲及び最も右側の範囲をチェックし、それらの範囲が先の走査線上の任意のランの最も左側の範囲及び最も右側の範囲と重なるかを判定することにより達成される。ランが先のランと連結されない場合、ランを新しい連結成分(CC)の開始として設定する。或いは、ランが先のランと連結される場合、先のランは先に設定されたCCのメンバであり、当該走査線上のランを先に設定されたCCに追記する。
当該走査線上のランが先の走査線上の2つ以上のランと連結される場合、当該走査線上のランに連結するランを含む全てのCCがマージされ、単一のCCを形成する。従って、画像において下方の点で一緒になるいくつかの分離した成分から開始されるオブジェクトを単一のCCであると識別しても良い。
CCが当該走査線上に連結されたランを有さない場合、CCは「終了」される。即ち、そのCCに属する全ての画素が識別されたため、CCは完了したと考えられる。
ステップ403で採用されるCCAアルゴリズムは、1つの連続的な黒色CCが連続的な白色CCにより完全に囲まれ且つその白色CCが更なる黒色CCに完全に囲まれるCC構成を探索することによりQRファインダパターンを検出する。この包囲関係は、CCが終了した時に実行される単純なチェックにより検出される。当該CCは終了した時、当該CCの範囲内に配置される最も左側の範囲、最も右側の範囲、一番上の範囲及び一番下の範囲を有する別のCCが存在するかを判定するためのチェックを行う。CCが当該CCの境界内に存在する場合、双方のCCを候補FPとして出力リストに追記する。存在しない場合、CCを廃棄する。
トポロジ関係を探索することによりQRファインダパターンを検出する、即ちQRファインダパターンが別のCC内に完全に囲まれる1つの黒色CCから構成されることを検出することにより、上述のCCA方法は印刷/走査による歪みに対して、FPの理論上予想される外形100に非常に依存する従来の方法よりはるかに高いロバスト性を提供できる。上述のCCA方法の別の特徴は、いくつかの有用なFP計測値を効率的に計算し、それらのFP計測値を処理400の後の分解ステップ404及び復号化ステップ405で非常に有利に適用することである。特に、少なくとも「メタデータ」と呼ばれる検出したFPに関する以下の情報を判定する。
(1)FPの中心の座標(FP100の黒色の連結成分101及び103の平均の中心の座標)
(2)FP100の黒色モジュールのサイズ(黒色連結成分101の線幅)
(3)FP100の白色モジュールのサイズ(白色連結成分102の線幅)
(4)FP100の回転(この角度は、90°を法とし、本質的に、使用中の座標系に対して0〜90°であるCC101及び102の辺の角度に対応する)
(5)FP100の信頼度(これは、FPの外形を理論上予想される外形100と比較することにより計算される。予想された外形に非常に類似するFPは、100%に近い信頼度を有する)
(6)FP100のバウンディングボックス(外側の黒色CC101の最も左側、最も右側、一番上及び一番下の範囲)
CCA方法403により識別されたFPをリスト414に形成する。各リストエントリには、関連付けられるメタデータの一部又は全てを補足しても良い。
一般的な分解
次に、分解処理404の詳細について図5を参照して説明する。分解処理404は初期ステップ501から開始し、検出されたFPのリストが入力される。
次のステップ502において、FPはトリプレットにグループ化され、トリプレットが有効な候補3/3QRコード領域を形成するかを判定するためのチェックを実行する。
次のステップ503において、FPは対にグループ化され、対が有効な候補2/3QRコード領域を形成するかを判定するためのチェックを実行する。
ステップ502及び503で採用される処理については、後で詳細に説明する。
分解処理404は、最後のステップ504で終了する。
3/3分解
ステップ502において採用されるような候補3/3コード領域を形成する処理を、図6、図7及び図9を参照して説明する。この時点において、2つの事前定義済みパラメータが導入され、分解方法における反り及び位置ずれに対する許容差を与える。これらのパラメータは、toleranceangle及びtolerancemagnitudeで示され、双方とも0.2に設定されても良い。これらの許容差は、角度及び距離が20%だけ変動することに対応し、更にQR領域が分解され且つQRコードが検出されることを可能にする。これにより、反りがある状態における検出が可能になる一方で、偽陽性検出は制限される。許容差は、システムの所望の精度に基づいて必要に応じて変動しても良い。
図6を参照して、3/3領域を分解する一般的な処理を示す。初期ステップ601において、検出されたFPのリスト414が入力される。
次のステップ602において、検出されたFPのトリプレットに対して一連のチェックを行い、「潜在的な」3/3領域のリスト606を形成する。これらのチェックを実行する処理については、後で詳細に説明する。
次のステップ603において、「潜在的な」3/3領域のリスト606の潜在的な各QRコード領域が「内部」FPを含むかを判定するために検査する。ステップ603の結果として、候補3/3QRコード領域の最終的なリスト608が得られる。ステップ603を実行する処理についても、後で詳細に説明する。
候補3/3コード領域を形成する処理502は、最後のステップ604で終了する。
潜在的な3/3領域の検出
潜在的な3/3領域のリスト606を形成する処理602を、図7を参照して説明する。
処理602は、初期ステップ701で開始し、検出されたFPのリスト414が入力される。
次のステップ702において、トリプレットのリスト710は、まず入力リスト414からの可能な3つのFPの全ての組み合わせを見つけることによって生成される。6つのトリプレットは、QRコードの可能な各公称FP位置に各FPを割り当てることにより、それらの組み合わせの各々から形成される。即ち、各FPは、6つのトリプレットのうちの1つのトリプレットのQRコードの「左上」の隅、「右上」の隅、又は「右下」になるように指定される。次の説明において、左上に割り当てられたFPに関連する属性(module_sizeなど)には「tl」の下付き文字を与え、同様に、右上のFP及び左下のFPにはそれぞれ「tr」及び「bl」を与える。
次のステップ703において、ステップ702で生成されたトリプレットのリスト710からトリプレット712が選択される。
次のステップ704において、トリプレット712は、3つのファインダパターンのモジュールサイズが非常に類似するかを判定するためにチェックされる。モジュールサイズは、ステップ403で採用されるCCA FP検出方法により利用可能になる黒色及び白色モジュールのサイズの平均である。図8Aに、FPモジュールサイズがほぼ同一でないため、このチェックが失敗する3つのFPの例801を示す。同様のモジュールサイズであるかのチェックは、以下の擬似コード1により表されても良い。
****擬似コード1****ステップ704****
if
(
(
abs(module_sizetl - module_sizetr)
/
min(module_sizetl, module_sizetr)
) <= tolerancemagnitude
and
(
abs(module_sizetl - module_sizebl)
/
min(module_sizetl, module_sizebl)
) <= tolerancemagnitude
and
(
abs(module_sizebl - module_sizetr)
/
min(module_sizebl, module_sizetr)
) <= tolerancemagnitude
):
check passed
else:
check failed
次のステップ705において、3つのFPの角度方向がほぼ同一であるかを判定するためにFPの相対的な角度がチェックされる。上述のように、FP毎に計算された回転角はp/2ラジアン(90°)を法とする。従って、FPの回転角の間の最小偏差を判定するために調整が必要である。図8Bに、FPの角度方向がほぼ同一でないために、このチェックが失敗する3つのFPの例802を示す。このチェックは、擬似コード2を実行することにより行われても良い。
****擬似コード2****ステップ705****
if
(
(
abs(angletl - angletr) <= toleranceangle x pi / 2
or
(
pi / 2 - max(angletl, angletr) + min(angletl, angletr)
) <= toleranceangle x pi / 2
)
and
(
abs(angletl - anglebl) <= toleranceangle x pi / 2
or
(
pi / 2 - max(angletl, anglebl) + min(angletl, anglebl)
) <= toleranceangle x pi / 2
)
and
(
abs(anglebl - angletr) <= toleranceangle x pi / 2
or
(
pi / 2 - max(anglebl, angletr) + min(anglebl, angletr)
) <= toleranceangle x pi / 2
)
):
check passed
else:
check failed
尚、「pi」は数学的定数pを示す。
次のステップ706において、3つの検出されたFPの構成が有効なQRコード領域に対応するかを判定するためのチェックが実行される。これは、左上のFPと右上のFPとの間の距離及び左上のFPと左下のFPとの間の距離がほぼ同一であることを最初にチェックすることにより達成される。このチェックは、擬似コード3を実行することにより行われても良い。
****擬似コード3****ステップ706−第1部****
vector_xtl-tr = xtl - xtr
vector_ytl-tr = ytl - ytr
vector_magtl-tr = sqrt(vector_xtl-tr 2 + vector_ytl-tr 2)

vector_xtl-bl = xtl - xbl
vector_ytl-bl = ytl - ybl
vector_magtl-bl = sqrt(vector_xtl-bl 2 + vector_ytl-bl 2)

min_vector_mag = min(vector_magtl-bl, vector_xtl-bl)
max_vector_mag = max(vector_magtl-bl, vector_xtl-bl)

if max_vector_mag <= (min_vector_mag x (1 + tolerancemagnitude)):
check passed
else:
check failed
左上のFPと右上のFPとの間のベクトルの長さ及び左上のFPと左下のFPとの間のベクトルの長さがほぼ同一であることが確認されると、次のステップでは、FPのモジュールサイズを仮定して、それらのベクトルの長さが適切であることがチェックされる。本質的には、これは、ベクトルの長さがバージョン1(最小)〜40(最大)のQRコードに対して予想される長さ以下であることをチェックする。このチェックは、擬似コード4で実現可能である。
****擬似コード4****ステップ706−第2部****
module_size_average =
(module_sizetl + module_sizetr + module_sizebl)
/
3

if
(
(
vector_magtl-tr x (1 + tolerancemagnitude)

14 x module_size_average
)
or
(
vector_magtl-tr x (1 - tolerancemagnitude)

170 x module_size_average
)
or
(
vector_magtl-bl x (1 + tolerancemagnitude)

14 x module_size_average
)
or
(
vector_magtl-bl x (1 - tolerancemagnitude)

170 x module_size_average
)
):
check failed
else:
check passed
検出されたFPの正確な構成に対するチェックは、FPのほぼ直交する構成に対するチェック及びQRコード領域の右上の位置及び左下の位置に対する検出されたFPの仮定された割り当てが正確であることのチェックを含む。これらのチェックは、擬似コード5を実行することにより行われても良い。
****擬似コード5****ステップ706−第3部****
dot_product =
(vector_xtl-tr x vector_xtl-bl)
+
(vector_ytl-tr x vector_ytl-bl)

cross_product_k =
(vector_xtl-tr x vector_ytl-bl)
+
(vector_ytl-tr x vector_xtl-bl)

cos_theta = dot_product / (vector_magtl-tr x vector_magtl-bl)

if cos_theta <= toleranceangle and cross_product_k > 0:
check passed
else:
check failed
次のステップ707において、領域の回転がFPの角度にマッチングするかを判定するためのチェックが実行される。候補領域の回転角は、左上のFPと右上のFPとの間のベクトルの角度として規定される。図8Cに、FPの角度方向が領域の向きとマッチングしないためにこのチェックが失敗する3つのFPの例803を示す。このチェックは、擬似コード6を実行することにより行われても良い。
****擬似コード6*****ステップ707****
vector_angletl-tr = arctan2(vector_ytl-tr, vector_xtl-tr)
if vector_angletl-tr < 0:
vector_angletl-tr = vector_angletl-tr + (2 x pi)

vector_angletl-tr = ((4 x vector_angletl-tr)mod(2 x pi) / 4)

if
(
(
abs(angletl - vector_angletl-tr) <= toleranceangle x pi / 2
or
(
pi / 2
- max(angletl, vector_angletl-tr)
+ min(angletl, vector_angletl-tr)
) <= toleranceangle x pi / 2
)
and
(
abs(angletr - vector_angletl-tr) <= toleranceangle x pi / 2
or
(
pi / 2
- max(angletr, vector_angletl-tr)
+ min(angletr, vector_angletl-tr)
) <= toleranceangle x pi / 2
)
and
(
abs(anglebl - vector_angletl-tr) <= toleranceangle x pi / 2
or
(
pi / 2
- max(anglebl, vector_angletl-tr)
+ min(anglebl, vector_angletl-tr)
) <= toleranceangle x pi / 2
)
):
check passed
else:
check failed
ステップ714でテストされるように上記チェック704〜707の全てが成功する場合、FPのトリプレット712は、ステップ708において潜在的な3/3領域の出力リスト606に追記される。尚、出力される潜在的な領域の各々は、領域の3つのFPの信頼度に基づいて信頼度値と関連付けられる。この信頼度は、擬似コード7を実行することにより計算される。
****擬似コード7****
confidenceregion = (confidencetl + confidencetr + confidencebl) / 3
信頼度値は、潜在的なFPのリスト中の各FPに対するメタデータに追記される。
ステップ716でテストされるように、ステップ702で生成されるトリプレットのリストにトリプレットが残っている場合、ステップ703に戻る。或いは、全てのトリプレットが処理された場合、潜在的な3/3領域のリスト606を形成する処理602は最後のステップ709で終了する。
真の領域の検出
真の3/3領域のリストを形成する処理603を、図9を参照して説明する。有効なQRコード領域は、追加の検出されたファインダパターンを含むことができない。この要求に基づくと、領域1000の範囲1001内に追加の検出されたファインダパターンが存在しないため、図10AのQRコード領域1000は有効な領域である。図10Bに示されるQRコード領域1010は、領域範囲1011により追加の検出されたFP1012を含むため有効なQRコード領域ではない。「内部」FPの信頼度が領域の3つのFPの信頼度より非常に低い場合は例外となる。これは、いくつかの稀な例において、図10Cの1020で示されるように位置決めパターン1022がファインダパターンとして検出されるためである。この状況において、位置決めパターン1022の信頼度は、検出されたファインダパターン1023、1024及び1025の信頼度より非常に低い。
図9に戻ると、真の3/3領域を見つける処理603は初期ステップ901で開始し、潜在的な3/3領域のリスト606及び検出されたFPが入力される。
次のステップ902において、潜在的な3/3領域910はステップ901で入力されたリスト606から選択される。
次のステップ903において、潜在的な3/3領域が高い信頼度の追加のファインダパターンを含むかが判定される。本質的には、潜在的なコード領域を形成するファインダパターン以外の検出されたファインダパターンの全てがチェックされ、それらが潜在的な3/3領域の範囲内にあるかが判定される。
次に、特定のファインダパターンが潜在的なコード領域内にあるかを判定する処理について説明する。図11は、左上のFP1103、右上のFP1101及び左下のFP1102から成るQRコード領域1100を示す。ファインダパターン1109は、領域1100内にあるかを判定するためにチェックされる。最初に、左上のFP1103と右上のFP1101との間のベクトル1105及び左上のFP1103と左下のFP1102との間のベクトル1106がそれぞれ計算される。これは、擬似コード8を実行することにより達成される。
****擬似コード8****
vector_xtl-tr = xtl - xtr
vector_ytl-tr = ytl - ytr
vector_xtl-bl = xtl - xbl
vector_ytl-bl = ytl - ybl
領域の未知の隅の位置1104は、擬似コード9に示すように計算される。
****擬似コード9****
xbr = xtl + vector_xtl-bl + vector_xtl-tr
ybr = ytl + vector_ytl-bl + vector_ytl-tr
次に、領域の右下の隅1104と右上のFP1101との間のベクトル1107及び右下の隅1104と左下の隅1102との間のベクトル1108のそれぞれが計算される。これは、擬似コード10を実行することにより達成される。
****擬似コード10****
vector_xbr-tr = -vector_xtl-bl
vector_ybr-tr = -vector_ytl-bl
vector_xbr-bl = -vector_xtl-tr
vector_ybr-bl = -vector_ytl-tr
領域の左上の隅1103からチェックされる追加のファインダパターン1109までのベクトル1110及び右下の隅1104の隅1104から追加のファインダパターン1109までのベクトル1111が構成される。これは、擬似コード11により達成される。
****擬似コード11****
vector_xtl-fp = xfp - xtl
vector_ytl-fp = yfp - ytl
vector_xbr-fp = xfp - xbr
vector_ybr-fp = yfp - ybr
最後に、以下の条件を判定することにより、追加のFP1109が領域1100内に存在するかが判定される。
1.左上のFP1103と追加のファインダパターン1109との間のベクトル1110の角度は、左上のFP1103と右上のFP1101との間のベクトル1105の角度と左上のFP1103と左下のFP1102との間のベクトル1106の角度との間にあるか。
2.右下の隅1104と追加のファインダパターン1109との間のベクトル1111の角度は、右下の隅1104と右上のFP1101との間のベクトル1107の角度と右下の隅1104と左下のFP1102との間のベクトル1108の角度との間にあるか。
双方の条件(1)及び(2)が真であると分かった場合、FP1109が領域1100内に存在すると判定される。このチェックは、擬似コード12を実行することにより達成される。
****擬似コード12****
vector_angletl-tr = arctan2(vector_ytl-tr, vector_xtl-tr)
if vector_angletl-tr < 0:
vector_angletl-tr = vector_angletl-tr + (2 x pi)

vector_angletl-bl = arctan2(vector_ytl-bl, vector_xtl-bl)
if vector_angletl-bl < 0:
vector_angletl-bl = vector_angletl-bl + (2 x pi)

vector_anglebr-tr = arctan2(vector_ybr-tr, vector_xbr-tr)
if vector_anglebr-tr < 0:
vector_anglebr-tr = vector_anglebr-tr + (2 x pi)

vector_anglebr-bl = arctan2(vector_ybr-bl, vector_xbr-bl)
if vector_anglebr-bl < 0:
vector_anglebr-bl = vector_anglebr-bl + (2 x pi)

vector_anglebr-fp = arctan2(vector_ybr-fp, vector_xbr-fp)
if vector_anglebr-fp < 0:
vector_anglebr-fp = vector_anglebr-fp + (2 x pi)

vector_angletl-fp = arctan2(vector_ytl-fp, vector_xtl-fp)
if vector_angletl-fp < 0:
vector_angletl-fp = vector_angletl-fp + (2 x pi)

min_vector_angletl = min(vector_angletl-tr, vector_angletl-bl)
max_vector_angletl = max(vector_angletl-tr, vector_angletl-bl)

min_vector_anglebr = min(vector_anglebr-tr, vector_anglebr-bl)
max_vector_anglebr = max(vector_anglebr-tr, vector_anglebr-bl)

if
(
max_vector_angletl - min_vector_angletl

(
2 x pi
-
max_vector_angletl
+
min_vector_angletl
)
):
if
(
vector_angletl-fp >= min_vector_angletl
and
vector_angletl-fp <= max_vector_angletl
):
top left check passed
else:
top left check failed
else:
if
(
vector_angletl-fp >= max_vector_angletl
or
vector_angletl-fp <= min_vector_angletl
):
top left check passed
else:
top left check failed

if
(
max_vector_anglebr - min_vector_anglebr

(
2 x pi
-
max_vector_anglebr
+
min_vector_anglebr
)
):
if
(
vector_anglebr-fp >= min_vector_anglebr
and
vector_anglebr-fp <= max_vector_anglebr
):
bottom right check passed
else:
bottom right check failed
else:
if
(
vector_anglebr-fp >= max_vector_anglebr
or
vector_anglebr-fp <= min_vector_anglebr
):
bottom right check passed
else:
bottom right check failed

if
(
top left check passed
and
bottom right check passed
):
check passed
else:
check failed
QRコードがそれらを取り囲む4モジュールサイズ分の静穏領域を含む必要があるということは、ステップ903の内部FPチェックの目的で潜在的な3/3コード領域を拡大するために活用される。これにより、真の3/3領域として識別される偽陽性3/3領域の数は減少する。一般に、追加のファインダパターンは、コード領域の検出されたファインダパターンの中心の約11モジュールサイズ内では発生不可能である。これは、4モジュール分の静穏ゾーン及び2つのハーフファインダパターンの幅(7モジュール)の双方を考慮に入れる。内部FPチェックに使用される潜在的な3/3領域のサイズは、領域の四隅を約11モジュールサイズ分だけ外側に移動することにより拡大される。
潜在的な3/3領域が追加の検出されたファインダパターンを含むと判定された場合、追加の検出されたファインダパターンの信頼度が領域の検出されたファインダパターンの信頼度より非常に低いかが判定される。このチェックは、擬似コード13を実行することにより達成される。
****擬似コード13****
if
(
confidencefp

(
0.75
X
min(confidencetl, confidencetr, confidencebl)
)
):
check passed
else:
check failed
図9に戻ると、潜在的な3/3領域が潜在的な領域の検出されたファインダパターンに類似する信頼度の追加の検出されたファインダパターンを含まないことがステップ903で判定された場合、次のステップ904において、潜在的な3/3領域は真の3/3領域として保存される。保存は、図33Bの変数レジスタ3360等の中間変数の1つに対して実行される。これらの保存の蓄積により、リスト608の形成が開始される。
ステップ906でテストされるように、未処理の潜在的な3/3領域が更に存在する場合、ステップ902に戻る。或いは、全ての潜在的な3/3領域が処理された場合、ステップ603で採用された真の3/3領域のリスト608を形成する処理は最後のステップ905で終了する。
2/3分解
候補2/3領域を形成する処理503の詳細を、図12、図13、図16及び図19を参照して説明する。3/3分解、toleranceangle及びtolerancemagnitudeの先の説明において使用された同一の2つの事前定義済み許容差パラメータを2/3領域の分解時にも使用する。双方のパラメータに対して、同一の値0.2が使用される。
図12を参照すると、2/3領域を分解する一般的な処理503が示される。初期ステップ1201において、検出されたFPのリスト414が入力される。
次のステップ1202において、ファインダパターン対1210が見つけられる。これらは、QRコードの一部を潜在的に形成することを示す複数の基準にマッチングするファインダパターンの対である。
次のステップ1203において、潜在的な2/3領域1212が見つけられる。潜在的な2/3領域1212は、未検出のファインダパターンを含むQRコードが潜在的に存在する画像410/412の領域である。
次のステップ1204において、ステップ1203で見つけられる潜在的な2/3領域1212がチェックされ、ステップ603で潜在的な3/3領域がチェックされたのと同様に、それらの領域が「内部」FPを含むかが判定される。そのような「内部」FPを含まない潜在的な2/3領域は、真の2/3領域1214であると判定される。
候補2/3領域を形成する処理503は、最後のステップ1205で終了する。
ファインダパターン対の検出
次に、ファインダパターン対を見つける処理1202について、図13を参照して更に詳細に説明する。初期ステップ1301において、検出されたファインダパターンのリスト414が入力される。
次のステップ1302において、入力リストから可能な2つのFPの全ての組み合わせを見つけることにより、ファインダパターン対のリスト1312が生成される。この説明の目的で、各ファインダパターン対の2つのファインダパターンにはラベルA及びBが任意に割り当てられる。次の説明において、属性(module_size等)には、それらが示すFPを示すために「A」及び「B」の下付き文字が与えられる。
次のステップ1303において、ファインダパターンの対1314は、ステップ1302で生成されたリスト1312から選択される。
次のステップ1304において、ファインダパターン対1314は、2つのファインダパターンのモジュールサイズが非常に類似するかを判定するためにチェックされる。図14Aは、このチェックが成功しない例1400を示す。ファインダパターン1401及び1402のモジュールサイズが非常に異なることが分かる。モジュールサイズが類似するかのチェックは、擬似コード14により表されても良い。
****擬似コード14****ステップ1304****
if
(
(
abs(module_sizeA - module_sizeB)
/
min(module_sizeA, module_sizeB)
) <= tolerancemagnitude
):
check passed
else:
check failed
次のステップ1305において、FPの角度がチェックされ、2つのFPの角度方向がほぼ同一であるかが判定される。尚、各ファインダパターンに対する回転角はp/2ラジアンを法とする。従って、2つのファインダパターンの回転角の間の最小偏差を判定するために調整が必要である。図14Bは、このチェックを通過しない例1410を示す。ファインダパターン1411及び1412の角度が非常に異なることが分かる。このチェックは、擬似コード15を実行することにより行われても良い。
****擬似コード15****ステップ1305****
if
(
(
abs(angleA - angleB) <= toleranceangle x pi / 2
or
(
(pi / 2) - max(angleA, angleB) + min(angleA, angleB)
<=
toleranceangle x pi / 2
)
)
):
check passed
else:
check failed
尚、「pi」は数学的定数pを示す。
次のステップ1306において、FP間のベクトルの角度がチェックされ、その角度が2つの可能な2/3コード領域構成に対するファインダパターンの角度に対応するかが判定される。2/3領域の2つの可能な構成を図15A及び図15Bに示す。2つの検出されたFPがQRコードの側部1501に沿うFPに対応する図15Aの構成1500を「垂直」タイプの2/3領域と呼ぶ。検出されたFPがQRコードの対角線1511上にある図15の構成1510を「対角」タイプの2/3領域と呼ぶ。図15Cは、チェックされるファインダパターンの対の例1520を示す。チェックは、ファインダパターン1521と1522との間のベクトル1523の角度1524が許容される角度許容差toleranceangle内の有効な構成1500及び1510と整合性がとれているかを判定する。このチェックの結果、垂直又は対角であるFP対の種類が設定される。このチェックは、擬似コード16を使用して実現される。
****擬似コード16****
vector_xA-B = xB - xA
vector_yA-B = yB - yA
vector_magA-B = sqrt(vector_xA-B 2 + vector_yA-B 2)

vector_angleA-B = arctan2(vector_yA-B, vector_xA-B)
if vector_angleA-B < 0:
vector_angleA-B = vector_angleA-B + (2 x pi)

vector_angleA-B' = ((4 x vector_angleA-B)mod(2 x pi) / 4)

anglediffA = abs(angleA - vector_angleA-B')
anglediffA =
min
(
anglediffA,
(
pi / 2
-
max(angleA, vector_angleA-B')
+
min(angleA, vector_angleA-B')
)
)
anglediff_45A = abs(anglediffA - pi / 4)

anglediffB = abs(angleB - vector_angleA-B')
anglediffB =
min
(
anglediffB,
(
pi / 2
-
max(angleB, vector_angleA-B')
+
min(angleB, vector_angleA-B')
)
)

anglediff_45B = abs(anglediffB - pi / 4)

if
(
(
anglediffA < toleranceangle x pi / 2
and
anglediffB < toleranceangle x pi / 2
)
or
(
anglediff_45A < toleranceangle x pi / 2
and
anglediff_45B < toleranceangle x pi / 2
)
):
if
(
anglediff_45A < anglediffA
and
anglediff_45B < anglediffB
):
region_type = diagonal
else:
region_type = normal

check passed
else:
check failed
次のステップ1307において、2つのFP間のベクトルの長さがQRコードバージョン1〜40の制限内であるかを判定するためのチェックが行われ、大きさの許容差を与える。このチェックは、擬似コード17を実行することにより行われる。
****擬似コード17****
module_size_average = (module_sizeA + module_sizeB) / 2

if (region_type == normal):
if
(
(
vector_magA-B x (1 + tolerancemagnitude)

14 x module_size_average
)
or
(
vector_magA-B x (1 - tolerancemagnitude)

170 x module_size_average
)
):
check failed
else
check passed
else:
if
(
(
vector_magA-B x (1 + tolerancemagnitude)

1.41 x 14 x module_size_average
)
or
(
vector_magA-B x (1 - tolerancemagnitude)

1.41 x 170 x module_size_average
)
):
check failed
else
check passed
ステップ1310でテストされるように、上記チェック1304〜1307が成功した場合、ステップ1308において、FPの対1314はFP対の出力リスト1210に追記される。ステップ1311でテストされるように、ステップ1302で生成されたリスト1312のFP対が残っている場合、ステップ1303に戻る。残っていない場合、FP対を見つける処理1202は最後のステップ1309で終了する。
潜在的な2/3領域の検出
次に、潜在的な2/3領域を見つける処理1203について、図16を参照して更に詳細に説明する。初期ステップ1601において、先に見つけられたファインダパターン対のリスト1210が入力される。
次のステップ1602において、ファインダパターン対1610は、ステップ1701で先に入力されたファインダパターン対のリスト1210から選択される。
ステップ1606でテストされるように、選択されたファインダパターン対1610が「対角」の「タイプ」を有する場合、ステップ1603において、対角タイプの潜在的な2/3領域が1つ生成される。選択されたファインダパターン対の「タイプ」が「垂直」である場合、ステップ1604において、垂直タイプの潜在的な2/3領域が2つ生成される。ステップ1603及び1604の実行について次に説明する。尚、ステップ1603及び1604から出力される潜在的な2/3領域1612毎に、領域の2つの検出されたFPの信頼度に基づく信頼度値が計算される。この信頼度は、擬似コード18を実行することにより計算される。
****擬似コード18****
confidenceregion = (confidenceA + confidenceB) / 2
ステップ1607で判定されるように、未処理のファインダパターン対が更に存在する場合、ステップ1602に戻る。存在しない場合、潜在的な2/3領域を見つける処理1203は最後のステップ1605で終了する。ステップ1203の処理は、メモリ3334に格納されてもよい判定された潜在的な2/3領域のリスト1212を設定する。
次に、対角タイプの潜在的な2/3領域を生成する処理1603について詳細に説明する。図17Aは、検出されたファインダパターン1701及び1702の対から形成される対角タイプの2/3領域1703の一例1700を示す。1700の領域に示すように、対角の場合、検出されたファインダパターンはQRコード領域の右上のFP位置及び左下のFP位置に対応する。
ファインダパターン対から潜在的な2/3領域を生成することは、実質的に、領域の損失するファインダパターンの2つの可能な場所を判定することを含む。これは、潜在的な2/3領域の範囲を判定する。図18Aに、損失するファインダパターンの2つの可能な場所が対角タイプの潜在的な2/3領域に対して判定される方法の一例1800を示す。最初に、2つの検出されたファインダパターン1801、1802の一方が基準ファインダパターンとして選択される(この例において、ファインダパターン1801が選択される)。次に、2つのベクトル1804及び1806は、選択された基準ファインダパターン1801から他方の検出されたファインダパターン1802へのベクトル1803から45°の角度オフセット1808で形成される。ベクトル1804及び1806の長さは、擬似コード19に示すようにベクトル1803の長さから計算される。
****擬似コード19****
vector_mag4604 = vector_mag4603 / 1.41
vector_mag4606 = vector_mag4603 / 1.41
尚、定数1.41は、上記擬似コードにおいて2の平方根を近似する。
ベクトル1804及び1806の端点は、損失するファインダパターン1805及び1807の2つの可能な場所を判定する。判定される損失するファインダパターンの2つの可能な場所を使用して、潜在的な2/3領域は完全に規定され、ステップ1603が完了する。
次に、垂直タイプの2つの潜在的な2/3領域を生成する処理1604について、詳細に説明する。図17Bは、検出されたファインダパターン1711及び1712の対から形成される垂直タイプの2つの2/3領域1713及び1714の一例を示す。1710に示すように、垂直タイプの2/3領域において、検出されたファインダパターンは、コード領域の一方側の2つの隣接するファインダパターン位置に対応する。このため、1710に示すように、単一の垂直タイプのファインダパターン対から形成される2つの潜在的な2/3領域が存在する。実質的に、検出されたファインダパターン対1711、1712に基づいて、領域1713及び1714のいずれかの損失する第3のファインダパターンを含むQRコードが存在する。このため、ステップ1604において、双方の潜在的な2/3領域が生成される。
ファインダパターン対に対して2つの潜在的な2/3領域を生成することは、本質的に、潜在的な2/3領域1713及び1714の各々に対して損失するファインダパターンの2つの可能な場所を判定することを含む。この処理は、全ての垂直タイプの潜在的な2/3領域に対して同一であり(即ち、1713及び1714の双方に対して同一である)、次に説明する。以下に説明する処理がファインダパターン対から形成される双方の潜在的な2/3領域(1713、1714等)に対して完了すると、ステップ1604が完了する。
図18Bは、垂直タイプの潜在的な2/3領域の一例1810を示す。1811、1812等の垂直タイプのファインダパターン対に対して、2つの検出されたファインダパターン間のベクトル1813の両側に1つの垂直タイプの潜在的な2/3領域が形成される。1810においては、ファインダパターン対1811、1812から形成される2つの可能な潜在的な2/3領域のうち一方のみを示す。
潜在的な2/3領域1810に対して損失するファインダパターンの2つの可能な場所を判定する処理は、検出されたファインダパターン1811、1812の間のベクトル1813から90°のオフセットで2つのベクトル1814及び1816を形成することから開始する。ベクトル1814及び1816の長さは、べクトル1813の長さと同一である。ベクトル1814及び1816の端点は、損失するファインパターン1815及び1817の2つの可能な場所を判定する。
真の2/3領域の検出
次に、真の2/3領域を見つける処理1204について、図19を参照して更に詳細に説明する。3/3分割の説明において示したように、有効なQRコード領域は追加の検出されたファインダパターンを含むことができないが、「内部」FPの検出信頼度がコード領域の検出されたファインダパターン対よりかなり低い場合は例外である。
初期ステップ1901において、先に判定された潜在的な2/3領域のリスト1212が入力される。
次のステップ1902において、潜在的な2/3領域1910は、ステップ1901で入力されたリスト1212から選択される。
次のステップ1903において、潜在的な2/3領域1910が高い信頼度の追加のファインダパターンを含むかが判定される。本質的には、潜在的な2/3領域を形成するファインダパターン以外の全ての検出されたファインダパターンがチェックされ、それらが潜在的な2/3領域の範囲内にあるかが判定される。
特定のFPが潜在的な2/3領域内にあるかを判定する処理は、本質的に、3/3分割に対して上述した処理と同一である。この処理を潜在的な2/3領域に適用するために、検出されたFPの場所及び損失するFPの場所は、最初に左上、右上、左下及び右下の標準的なFP位置ラベルに割り当てられる必要がある。次に、標準的なFP位置ラベルを検出されたFPの場所及び可能な損失するFPの場所に割り当てる処理について、図20A及び図20Bを参照して垂直タイプ及び対角タイプの潜在的な2/3領域に対して説明する。
対角タイプの潜在的な2/3領域2000を図20Aに示す。追加のファインダパターン2009は、潜在的な2/3領域内にあるかを判定するためにチェックされる。最初に、損失するファインダパターンの場所2003、2004の一方には、左上のFPの位置が任意に割り当てられる。次に、他方の可能な損失するFPの場所には、右下のFPの位置が割り当てられる。2つの検出されたFP2001、2002には、右上のFP及び左下のFPの位置が割り当てられることになる。追加のFP2009が潜在的な2/3領域2000内に存在するかを判定する処理は、以下の情報を使用して3/3分解に対して説明した方法により実行される。
(1)左上のFP2003と右上のFP2001との間のベクトル2005及び左上のFP2003と左下のFP2002との間のベクトル2006
(2)右下のFP2004と右上のFP2001との間のベクトル2007及び右下のFP2004と左下のFP2002との間のベクトル2008
(3)左上のFP2003からチェックされる追加のファインダパターン2009までのベクトル2010及び右下のFP2004から追加のファインダパターン2009までのベクトル2011。
垂直タイプの潜在的な2/3領域2020を図20Bに示す。追加のファインダパターン2029は、潜在的な2/3領域内にあるかを判定するためにチェックされる。最初に、検出されたファインダパターンの場所2022、2023の一方には、左上のFPの位置が任意に割り当てられる。次に、他方の検出されたFPの場所には、左下のFPの位置が割り当てられる。2つの可能な損失するFPの場所2021、2024には、右上のFP及び右下のFPの位置が割り当てられることになる。追加のFP2029が潜在的な2/3領域2020内に存在するかを判定する処理は、以下の情報を使用して、3/3分解に対して上述した方法により実行される。
(1)左上のFP2023と右上のFP2021との間のベクトル2025及び左上のFP2023と左下のFP2022との間のベクトル2026
(2)右下のFP2024と右上のFP2021との間のベクトル2027及び右下のFP2024と左下のFP2022との間のベクトル2028
(3)左上のFP2023からチェックされる追加のファインダパターン2029までのベクトル2030及び右下のFP2024から追加のファインダパターン2029までのベクトル2031。
追加のFPが潜在的な2/3領域内に存在するかを判定する上述の方法において、潜在的な2/3領域の範囲は、2/3領域の2つの可能な損失するファインダパターンの公称予測位置に基づいていた。内部FPチェックに対して潜在的な2/3領域の範囲を規定するために、別の方法が使用されても良い。1つの代替方法は、潜在的な2/3領域の範囲が可能な限り小さくなる(許容される許容差内)ように損失するファインダパターンの可能な場所を判定する際に許容差tolerancemagnitude及びtoleranceangleを適用することである。これは、上述した方法より保守的な方法であり、反りのために予想より小さなQRコード領域が得られる可能性がある。これは、有効なQRコード領域が内部FPチェックにより誤って除去されるような状況である偽陰性を減少する。
QRコードがそれらを取り囲む4モジュールサイズ分の静穏領域を含む必要があるということは、ステップ1903の内部FPチェックの目的で潜在的な2/3コード領域を拡大するために活用される。これは、真の2/3領域として識別される偽陽性2/3領域の数を減少する。一般に、追加のファインダパターンは、コード領域の検出されたファインダパターンの中心の11モジュールサイズ内では発生できない。これは、4モジュール分の静穏ゾーン及び2つのハーフファインダパターン(それぞれが3.5モジュール)の双方を考慮に入れる。内部FPチェックに対して使用される潜在的な2/3領域のサイズは、領域の四隅を11モジュールサイズ分だけ外側に移動することにより拡大される。
潜在的な2/3領域が追加の検出されたファインダパターンを含むと判定される場合、追加の検出されるファインダパターンの信頼度が領域の検出されたファインパターンの信頼度より非常に低いかが判定される。このチェックは、擬似コード20を実行することにより達成される。
****擬似コード20****
if
(
confidencefp

(
0.75
X
min(confidenceA, confidenceB)
)
):
check passed
else:
check failed
図19に戻ると、潜在的な2/3領域が潜在的な領域の検出されたファインダパターンに類似する信頼度の追加の検出されたファインダパターンを含まないことがステップ1903で判定された場合、次のステップ1904において、潜在的な2/3領域は真の2/3領域としてメモリ3334に保存される。
ステップ1906でテストされるように、未処理の潜在的な2/3領域が更に存在する場合、ステップ1902に戻る。或いは、全ての潜在的な2/3領域が処理された場合、真の2/3領域のリスト1214を形成する処理1204は最後のステップ1905で終了する。
真の3/3領域のリスト608及び真の2/3領域のリスト1214は、分解処理404から出力されるような上述の(予測された)QRコード領域416を共に形成する。
復号化処理
復号化処理405について、図21を参照して説明する。復号化処理405は、3/3領域(608)及び2/3領域(1214)の各々から情報を抽出しようとする。検出されたファインダパターンは、複数の3/3領域及び2/3領域により共有されても良い。これは、ステップ404の結果、3/3領域及び2/3領域の各々における符号化データの存在がまだ未知であるためである。即ち、ステップ404で生成される領域416はQRコードとして確定されていないが、領域はQRコードを含む可能性が高い。
ステップ405において、データが領域から正常に抽出された場合に領域はQRコードとして確定される。更に、QRコードは他のQRコードとファインダパターンを共有しなくても良い。従って、QRコード領域が正常に復号化されると、ファインダパターンを正常に復号化されたコード領域と共有する任意の残りの領域は処理されない。このように、処理時間は、QRコードを形成できない領域を復号化しようとすることに浪費されない。
復号化処理405は初期ステップ2101で開始し、3/3領域及び2/3領域の1つ又は複数のリストが入力される。
次のステップ2102において、全ての3/3領域が処理される。コード領域から符号化情報を抽出しようとすることを含むこの処理ステップの詳細については後述する。
次のステップ2103において、全ての2/3領域は同様に処理される。
復号化処理405は、最後のステップ2104で終了する。
ステップ2102で採用される3/3領域を処理する処理については、図22を参照して詳細に説明する。
初期ステップ2201において、3/3領域のリストは受信される。
次のステップ2202において、3/3領域はそれらの領域信頼度によりソートされ、より高い信頼度を有する領域がより低い信頼度を有する領域より前に処理されることを保証する。
次のステップ2203において、ステップ2202で作成されたリストの次の残りの3/3領域が選択される。
次のステップ2204において、領域を復号化しようとする。復号化は、QRコードの符号化コンテンツを識別するために領域の3つのFPを使用する。特に、3つのFPの各々の場所は、コード領域のデータモジュールがサンプリングされ且つ符号化データが抽出されるデータモジュール位置のグリッドを規定するために使用される。コードの全ての3つのFPが取得された後にデータモジュールをサンプリングし且つQRコードから符号化データを抽出する処理は、従来技術において周知であるため、更に説明する必要はない。
領域が正常に復号化される場合、現在の領域とFPと共有するこれから処理される任意の3/3領域は、次のステップ2205で廃棄される。
更に、ステップ2205の後のステップ2206において、現在の領域とFPを共有するこれから処理される任意の2/3領域も廃棄される。
ステップ2208でテストされるように、これから処理される3/3領域が存在する場合、ステップ2203に継続する。ステップ2204の復号化が失敗した場合、ステップ2208のテストが後続する。
全ての3/3領域が処理されると、処理2102は最後のステップ2207で終了する。
ステップ2103で採用される2/3領域の処理については、図23を参照して詳細に説明する。
初期ステップ2301において、残りの2/3領域のリストが受信される。尚、いくつかの2/3領域はステップ2206で廃棄されている場合がある。
次のステップ2302において、2/3領域は、それらの領域信頼度によりソートされ、より高い信頼度を有する領域がより低い信頼度を有する領域の前に処理されることを保証する。
次のステップ2303において、ステップ2302で作成されたリストの次の残りの2/3領域が選択される。
次のステップ2304において、第3のFPが後で詳細に説明される処理で見つけられる。
損失するFPがステップ2304において正常に見つけられる場合、次のステップ2305に進み、ステップ2303からの2つの選択された検出されたファインダパターン及びステップ2304で検出された第3のファインダパターンを使用して、ステップ2204で採用された処理と同一の復号化処理で領域を復号化しようとする。復号化データは、例えば出力変数3362としてメモリ3334に格納されても良い。
復号化が成功した場合、ステップ2306において、正常に復号化された領域とFPを共有するこれから処理される任意の2/3領域は、ステップ2206で採用された処理と同様の処理で除去される。
ステップ2308でテストされるように、これから処理される2/3領域が存在する場合、ステップ2303に継続する。ステップ2304の検出又はステップ2305の復号化が失敗した場合、ステップ2308のテストが後続する。
全ての2/3領域が処理されると、処理2103は最後のステップ2307で終了する。
損失するFPの検出
テンプレート相関は、画像中の特徴を検出し且つそれらの位置を特定する周知の非常に高いロバスト性を有する方法である。本発明の状況において、QR FPを検出し且つそれらの位置を特定するのが望ましい。しかし、テンプレート相関は、いくつかの基本的な欠点を有する。第1に、本発明の状況において、テンプレート相関は、QR FPのサイズが事前に決定されることを必要とする。第2に、テンプレート相関は、QR FPの回転の向きが事前に決定されることを必要とする。これらの2つの制約は、テンプレート相関を実現する任意のQR FP検出システムの機能性を大きく制限する。印刷/走査されたQRコードの特定の例において、走査済画像にはQRコードの回転位置ずれがほぼ常に存在する。
上記2つの説明した制約に加え、テンプレート相関は計算に費用がかかる動作である。その結果、走査済画像全体に対してテンプレート相関を採用するQR FP検出システムは非実際的に遅い。
しかし、本発明者は、ロバスト性を利用し且つ上述の制約を克服するようにテンプレート相関を利用するQR FP検出システムを開発した。一般的に、本発明で開示されるシステムは、先に実行されたCCAにより収集された情報を採用して、探索されるFPに適応されるテンプレートを形成し、それにより相関強度を最大にする。実質上、印刷/走査サイクルにより導入される任意の歪み及び位置ずれは、既に検出された2つのFPに対する影響から推定可能である。この情報は、損失する損失したFPをより効率的に且つより正確に探索するために使用される。
更に、画像中の小さな探索領域は、既に検出された2つのFPの場所から推定されても良い。これらの探索領域は、第3の損失するFPの位置が特定される可能な領域である。従って、計算に費用がかかるテンプレート相関の動作は画像の小さな部分に制限され、その結果、はるかに効率的な検出システムが得られる。
ステップ2304で採用される損失するFPを検出する処理について、図24を参照して説明する。
処理は、初期ステップ2401で開始し、2/3領域が入力される。
次のステップ2402において、パターンマッチングテンプレートは、2/3領域の既に検出された2つのFPを参照して形成される。パターンマッチングテンプレートを形成する2つの効果的な方法については、後で詳細に説明する。
次のステップ2403において、候補探索領域が形成される。候補探索領域は、第3の損失するFPが存在してもよい小さな画像領域である。候補探索領域を形成する処理2403については後述する。
次のステップ2404において、ステップ2402で生成されたパターンマッチングテンプレートは、ステップ2403で形成された各候補探索領域に適用される。このステップは、テンプレート相関により第3の損失するFPを検出しようとする。損失するFPが検出され、ステップ2404が成功した場合、2/3領域は「完了」したと判定される。即ち、全ての3つのFPが検出され、QRコードに符号化されたデータが抽出されても良い。従って、損失するFPが検出された場合、ステップ2405に継続し、「完了した」領域は処理2304から出力されるリストに追記される。損失するFPが検出されなかった場合、2/3領域は有効なQRコードを形成せず、廃棄される。損失するFPを検出する処理2304は、ステップ2406で終了する。
テンプレートの形成−メタデータから
ステップ2402で採用されても良いCCA情報からパターンマッチングテンプレートを形成する1つの処理について、ステップ2402aとして図25を参照して詳細に説明する。
処理2402aは、初期ステップ2501で開始し、2/3領域が入力される。
次のステップ2502において、2/3領域の既に検出された2つのFPに対するCCAからの情報が取得される。上述のように、CCAは検出されたFPに関する以下の情報を提供する。
(1)FPの中心の座標
(2)FPの黒色モジュールのサイズ
(3)FPの白色モジュールのサイズ
(4)FPの回転
(5)FPの信頼度
(6)FPのバウンディングボックス
FPを形成する黒色及び白色モジュールのサイズは、ドットゲインの効果の指示を与える。従って、QRコード領域の3つのFPのうちの2つが検出された場合、ドットゲイン情報は第3の損失するFPの位置を特定するために使用される。2つの検出されたFPの間のモジュールサイズの平均を取得するのが有用である。これらの平均は、擬似コード21を実行することにより計算されても良い。
****擬似コード21****
average_module_sizeblack =
(module_sizeblack, fp0 + module_sizeblack, fp1) / 2

average_module_sizewhite =
(module_sizewhite, fp0 + module_sizewhite, fp1) / 2
次のステップ2503において、CCAから取得される情報は、パターンマッチングテンプレートを生成するために使用される。ステップ2503において、QR FPのテンプレート2700(図27から分かる)は、擬似コード22のように以下の黒色の幅及び白色の幅の比率に準拠してメモリ3334に形成される。ラベル「average_module_size」は、表現の便宜上「ams」と略される。
****擬似コード22****
amsblack : amswhite : 3 x amsblack : amswhite : amsblack
****擬似コード22****
average_module_sizeblack:
average_module_sizewhite:
3 x average_module_sizeblack:
average_module_sizewhite:
average_module_sizeblack
図27で分かるように、FPテンプレート2700の外側の黒色領域2701は、average_module_sizeblackの線幅2704を有する。更に白色領域2702はaverage_module_sizewhiteの幅2705を有する。最後に、内側の黒色領域2703は、average_module_sizeblackの3倍の幅2706を有する。
その後、テンプレート2700は既に検出されているFPの角度を考慮して回転される。これは、図28において回転されたテンプレート2800を参照すると分かる。ここで、2つの検出されたFP間、anglefp0とanglefp1との平均角度2801(angleaverage)は擬似コード23を実行することにより計算される。
****擬似コード23****
if
(
abs(anglefp0 - anglefp1)

(
pi / 2
-
max(anglefp0, anglefp1)
+
min(anglefp0, anglefp1)
)
):
angleaverage =
(
min(anglefp0, anglefp1)
-
(
pi / 2
-
max(anglefp0, anglefp1)
)
)
/
2

if angleaverage < 0:
angleaverage = pi / 2 + angleaverage
else:
angleaverage =
(
anglefp0
+
anglefp1
)
/
2
指定された角度だけテンプレートを回転することの詳細な説明は、補間を含むアフィン変換等の種々の周知の方法が採用されてもよいため本明細書において提供しない。
ドットゲイン情報及び角度回転情報を取り入れたテンプレート2800が形成されると、CCA情報からパターンマッチングテンプレートを形成する処理2402aは、最後のステップ2504で終了する。
テンプレートの形成−切り抜き及び平均化
図26は、ステップ2402で採用されてもよいパターンマッチングテンプレートを形成する別の方法2402bを示す。本明細書において、テンプレートは、入力画像又は2値化画像410、412から既に検出されている2つのFPを切り抜き、それらの既に検出されている2つのFPを変倍及び平均することにより作成される。
処理2402bは、初期ステップ2601で開始し、2/3領域が入力される。
次のステップ2602において、2/3領域における既に検出されている2つのFPは、各FPのバウンディングボックス情報を使用して取得された画像からトリミングされる。2つのトリミングされた画像は、高さ及び幅が僅かに異なる可能性があるため、ステップ2602において変倍が採用され、検出されている2つのFPの平均高さ及び幅に双方の画像を変倍する。ここでも、この目的を達成するためにアフィン変換が使用されても良い。
次のステップ2603において、FPの2つの変倍表現の各画素は、2つの画素輝度を合計し且つその合計を2で除算することにより平均される。結果として、印刷/走査動作により導入される任意のノイズ及び歪み効果を含む検出されたFPの平均化表現であるテンプレートが得られる。
テンプレート2402を形成する処理2402bは、最後のステップ2604で終了する。
探索領域
次に、第3のファインダパターンを潜在的に含む候補探索領域を形成する処理2403について、図29A〜図30を参照して詳細に説明する。
図29Bは、垂直に配向された2/3領域2910の一例を示し、図29Aは、対角に配向された2/3領域2900の一例を示す。探索領域を生成する処理2403は、垂直又は対角に配向された2/3コード領域がステップ2403で処理されるかに依存して異なる。双方のタイプの2/3領域に対する適切な処理について以下に説明する。
図29Bの垂直に配向された2/3領域において、2つの矩形の探索領域2913及び2914は、検出されたファインダパターン2911及び2912付近又は近傍に形成される。これは、検出された各ファインダパターン2911及び2912の中心を通り且つ線2915に垂直である2つの線2916及び2917を形成することにより達成されても良い。線2916及び2917は、図30を参照して上述する処理により探索領域2913及び2914の場所を規定する。尚、図29Bに示す2/3領域2910は、ステップ404において検出された2つのファインダパターン2911及び2912から形成される2つの可能な2/3領域の一方である。別の2/3領域は、ファインダパターン2911及び2912の左側に形成されるが、その2/3領域に対する探索領域は、図29Bに示す領域2910と同様の方法で形成される。
図29Aの対角に配向された2/3領域2900において、2つの矩形の探索領域2903及び2904は、検出されたファインダパターン2901及び2902付近又は近傍に形成される。本明細書において、2つの線2905及び2907は、検出された2つのファインダパターン2901及び2902の中心を通る線2906に対して45°で形成される。これらの線2905及び2907の双方とも、検出された2つのファインダパターン2901、2902のうち一方の中心を通る必要がある。中心のFPの選択は任意である。これらの線2905及び2907は、図30を参照して次に説明される処理により探索領域2903及び2904の場所を規定する。
図30は、線3002上で位置が特定される検出されたファインダパターン3001及び近傍の探索領域3017を示す。図30は、探索領域が2/3領域のファインダパターンとファインダパターン及び探索領域の中心を通る周知の線とに基づいて形成される方法を示す。図29の垂直に配向されたコード領域2910に戻ると、図30に示す構成はファインダパターン2911及び近傍の探索領域2913(線2916上)に対応し、或いはファインダパターン2912及び近傍の探索領域2914(線2917上)に対応する。図29Aの対角に配向されたコード領域2900を参照すると、図30の構成は、中心のファインダパターン2901及び近傍の探索領域2903又は2904(それぞれ線2907及び2905上)に対応する。
探索領域3017の中心3013は、損失するファインダパターンの予想される場所に対応する。ファインダパターン3001と探索領域3017の中心3013との間の距離3015は、処理されているコード領域の近傍のファインダパターンの間の公称距離(Dnomとして示される)である。コード領域2910等の垂直に配向されたコード領域において、公称距離Dnomは線2915に沿うファインダパターン2911及び2912の中心間の距離である。これは、擬似コード24により表される。
****擬似コード24****
Dnom, normal = distance(第1の検出されたFPから第2の検出されたFP)
コード領域2900等の対角に配向されたコード領域において、公称距離Dnomは、線2906に沿うファインダパターン2901及び2902の中心の間の距離を1.41で除算したものである。これは、擬似コード25により表される。
****擬似コード25****
Dnom, diagonal =
distance(第1の検出されたFPから第2の検出されたFP)
/
1.41
尚、上記で使用される定数1.41は2の平方根を近似する。
矩形の探索領域3017の範囲は、領域が制御点3007、3008、3009、3010、3011及び3012の全てを含む一方で可能な限り小さくなるように規定される。尚、矩形の探索領域は、線3002の角度に関係なく、使用される座標系の軸(例えば、3020及び3021)に平行辺により常に配向される。これは、そのような矩形の垂直に配向された探索領域により、後で行われるテンプレートマッチング処理が容易に実現されるためである。
矩形の探索領域3017の範囲を規定する点の場所は、未検出のファインダパターン3013の予想される場所に対して大きさの許容差tolerancemagnitude及び角度許容差toleranceangleの双方を適用することに基づく。点3009は、長さDmax3016の線3002に沿うファインダパターン3001からのベクトル3004の端点として見つけられる。長さDmaxは以下のように計算可能である。
****擬似コード26****
Dmax = (1 + tolerancemagnitude) x Dnom
点3012は、ファインダパターン3001から距離Dmin3014のところでベクトル3004に沿う点として見つけられる。距離Dminは、以下のように計算される。
****擬似コード27****
Dmax = (1 - tolerancemagnitude) x Dnom
ベクトル3003は、ベクトル3004を線3002からtoleranceangle x pi / 2 3006だけ回転させることにより見つけられる。点3007及び3008は、このベクトルに沿って距離Dmin及びDmaxのところでそれぞれ見つけられる。点3010及び3011は、線3002から異なる方向にtoleranceangle x pi / 2 3006だけ回転されたベクトル3005に沿って同様に見つけられる。
この実現例において、座標系の軸に平行辺を有する矩形の探索領域が使用されるが、本明細書で説明する方法に類似する方法を使用して形成される任意の探索領域が代わりに使用されてもよいことが当業者には理解されるだろう。本明細書で説明される構成は、探索領域が損失するファインダパターンの予想される場所及び適用されたいくつかの許容差に基づいて形成されるべきであり、その結果、潜在的なコード領域と同様のサイズの探索領域(即ち、ページ全体よりはるかに小さい)が得られることを示す。本発明の説明される実現例において、大きさ及び角度許容差が使用され、矩形の探索領域はそれらの許容差により規定された領域に適合される。本発明から逸脱せずに、任意の形状の探索領域を規定するために、損失するファインダパターンの予想される場所に対して許容差を適用する別の手段が採用されてもよいことが考えられる。
テンプレートの適用
ステップ2404において、ステップ2402で形成されたテンプレートは、テンプレート相関処理の際にステップ2403で識別された探索領域に適用される。
2次元(2D)相関は、画像中の要求される特徴を検出し且つその位置を特定する周知の方法である。2D相関は、2D相関マップを与えるために探索領域に含まれるコンテンツにテンプレートを渡すことを含む。相関マップの各点は、その時点におけるテンプレートの類似性及び重なり合う探索領域を示す。従って、相関マップの急なピークは、テンプレートに類似する特徴が探索領域のコンテンツ中にピークの座標において存在することを示す。
ステップ2404において、ステップ2402で形成されるFPテンプレートとの2D相関は、ステップ2403により指定される各探索領域に適用され、第3のFPが存在するかが判定される。第3のFPが存在するかを判定する際、所定のピーク強度閾値が適用される。探索領域のいずれかの相関マップの最大のピークが所定の閾値より大きい場合、FPはその探索領域においてピークの場所に存在すると判定される。FPが双方の探索領域において見つけられる場合、2/3領域の第3のFPは、対応する相関マップにおいてより高いピークを有するFPであると判定される。第3のFPが正常に見つけられた場合、ステップ2405に進み、完全なQR領域を出力する。所定の相関ピーク閾値より大きい強度の相関ピークがステップ2403により指定された探索領域のうちいずれの領域でも見つけられない場合、テンプレートマッチング処理2404は失敗したと考えられ、ステップ2406に進み、処理2304は終了する。
ステップ2404で適用されるテンプレート相関の別の方法は、1次元相関(説明した2D相関方法の代わりに)を含む。1次元相関は、ステップ2402で形成された説明した2Dパターンマッチングテンプレートを通して「スライス」を得ることを含む。「スライス」は、テンプレートと同一の回転角angleaverageで配向されるテンプレートの中心点を通る断面である。その後、行毎の探索が探索領域にわたり実行される。探索がテンプレート「スライス」に類似する画素線を与える場合、第3のFPは正常に見つけられたと考えられる。更に、探索は回転角angleaverageに垂直な方向に実行されても良い。
別の実現例
QRコード検出及び復号化に対する別の実現例は、QRコードの固有の特徴を利用し、2/3領域において損失するFPを検出する処理を助長する。
この別の実現例において、損失するFPを検出する処理2304は、図32に示す処理2304aに変更される。処理2304aは追加の領域確定ステップ3201を含み、他のステップは上記で説明し且つ番号を付けたステップと同一である。
領域確定ステップ3201の第1の例において、クロッキングパターンが必要とされる。図31に示すように、QRコードはFP間にわたるクロッキングパターン3102を含む。これらのクロッキングパターン3102は、左上のFPから左下のFP及び右上のFPまでの直線である交互になっている黒色モジュール及び白色モジュールから構成される。従って、既に検出されている2つのFPの各々から離れる方向に誘導する交互になっている黒色モジュール及び白色モジュールの線形的な推移を検出するために、単純なチェックが実行されても良い。クロッキングパターンに類似する交互になっている黒色モジュール及び白色モジュールが検出される場合、領域確定ステップ3201は成功し、上述のステップ2402が後続する。検出されない場合、領域確定ステップ3201は失敗し、ステップ2406が後続する。
領域確定ステップ3201の第2の例は、コード領域の周波数特性を検査する。QRコードモジュールサイズは、既に検出されている2つのFPから計算されても良い。従って、周波数解析技術(2Dフーリエ変換等)は、コード領域の黒色モジュール及び白色モジュールの周波数が検出されたFPの周波数とマッチングするかを判定するために使用されても良い。特に、コード領域のエネルギーはQRコードモジュールサイズにマップする周波数に集中されると予想される。その場合、領域確定ステップ3201は成功し、ステップ2402が後続する。周波数がマッチングしない場合、領域確定ステップ3201は失敗し、ステップ2406が後続する。
QRコード検出及び復号化に対する更に別の実現例は、図31に示すようなQRコード中のバージョン情報3104を利用し、FPがQRコードバージョン1〜40に準拠するかをチェックするステップ1307(図13)のチェックを助長する。バージョン6より大きいQRコードは、コードのバージョンをQRオードファインダパターンの近傍で符号化する。バージョン情報は誤差補正され、周知の方法を使用して復号化されても良い。QRコードモジュールサイズ(検出されたFPから計算される)を仮定すると、QRコードバージョンは、画素数でのQRコードの物理的サイズを判定するために使用されても良い。従って、ステップ1307において、検出されたFP間の距離がQRコードの物理的サイズ(バージョン情報を復号化することにより判定される)と整合性があるかを判定するためのチェックが行われても良い。
結論
CCA自体は、ファインダパターン検出に対する不完全なツールである。CCAは、高速で安価である一方、トポロジにおける損失があるファインダパターン、例えば内部の構成要素103が外部の構成要素101に連結されることが見つけられるか又は外側の構成要素と切断又は中断されているファインダパターンを検出できない。しかし、CCAをテンプレートマッチングと組み合わせ且つその組み合わせをファインダパターンが予想される領域に限定することにより、本発明者は、CCAの利点(サイズ、回転及びドットゲインに対するロバスト性)がテンプレートマッチングの利点(トポロジの損失に対するロバスト性)と組み合わされる一方でそれらの対応する欠点を回避することを見つけた。この方法により、損失するファインダパターンの位置は確実に特定され、効率的なQRコード復号化を可能にする。先の復号化は、計算に費用がかかるか又は誤差の影響を受け易かった。
目標特徴検出システム
テキスト又は図等の他のコンテンツを含んでもよい画像において目標特徴の存在を検出し且つその場所を判定するための構成が開示される。
有効な目標特徴の説明
次に、有効な目標特徴を、図1を参照して説明する。図1は、2つの異なる輝度レベルの領域を有する目標特徴100として考えられてもよいものを示す。簡潔にするために、より低い輝度の領域は黒色で示され、より高い輝度の領域は白色で示される。目標特徴100は、連続した白色領域102により全体を囲まれる連続した黒色領域103から構成され、白色領域102全体は、連続した黒色領域101内に囲まれる。しかし、本発明は、図示する構成に限定されない。最も内側の領域103は白色であってもよく、その外側の領域102は黒色であってもよいことが理解されるべきである。従って、このように黒色領域及び白色領域(即ち、より暗い領域及びより明るい領域)が交互に維持される限り、構成は有効な目標特徴である。更に有効な目標は、目標特徴100に示すような3つの交互になった黒色領域及び白色領域に限定されず、4つ以上の別個の領域から構成されても良い。例えば図34の特徴3400は有効な目標特徴であり、6つの別個の黒色領域及び白色領域(3401、3402、3403、3404、3405、3406)を含む。
目標特徴検出の説明
図1の目標特徴100は、テキスト又は図等の他のコンテンツを含む文書に埋め込まれても良い。更に文書は、複数の関心目標特徴を含んでも良い。この文書は、図35に示すデジタル画像3500を形成するために印刷及び走査されても良い。デジタル画像3500は、デジタルカメラから等、走査以外の方法で取得されても良い。印刷/走査処理は、デジタル画像3500が原稿の不完全な表現になるようにノイズ及び歪みを導入する可能性がある。従って、デジタル画像3500の目標特徴3501の表現には、ノイズ及び歪みがある可能性がある。上述した構成は、目標特徴3501がノイズ及び歪みに影響を受けた場合でもデジタル画像3500において目標特徴を検出し且つそれらの位置を特定する。
次に、デジタル画像3500において目標特徴3501を検出し且つその位置を特定する処理3600について、図36を参照して説明する。目標特徴を検出し且つその位置を特定する処理3600は、コンピュータシステム3300がステップ401で開始した時にソフトウェアアプリケーションを実行することにより行われるのが好ましい。ステップ401において、デジタル画像3500は、例えばプロセッサ3305によりHDD3310から検索されることにより入力される。
処理3600の次のステップ3602において、プロセッサ3305は、2値化処理を実行することによりデジタル画像3500から図37に示す2値化画像3700を作成する。
次のステップ3603において、プロセッサ3305は、ステップ3602で作成された2値化画像を利用して、2値化画像3700に対して連結成分解析を実行する。連結成分解析処理3603は、黒色領域及び白色領域を含む2値化画像3700において特徴を識別するように動作し、それによりその2つの表現が可能になる。これは、有効な目標特徴に対する要件である。連結成分解析処理3603により識別される2値化画像3700における特徴は、候補目標特徴と呼ばれる。連結成分処理3603の間、候補目標特徴の幾何学的特性に対応する低レベル計測値がプロセッサ3305により計算される。これらの低レベル計測値及び計測値の集合については、後で詳細に説明する。
次のステップ3604において、候補目標特徴の各低レベル計測値は、候補目標特徴と関連付けられるサイズ情報、位置情報及び類似性スコアを判定するために使用される。類似性スコアは、候補目標特徴が要求される目標特徴100にどの程度類似しているかを判定する。従って、実際には候補目標特徴がノイズ及び歪みにより僅かに破損した目標特徴100である場合、その候補目標特徴の類似性スコアは高い。その一方で、候補目標特徴が目標特徴100とは幾何学的に異なる場合、候補目標特徴は低い類似性スコアを有する。サイズ情報、位置情報及び類似性スコアについては後で詳細に説明する。
次のステップ3605において、後処理ステップは、候補目標特徴のサイズ情報、位置情報及び類似性スコアに適用され、実行されている特定の実現例に依存して種々の目的を達成する。この後処理ステップは実現例毎に異なり、その詳細については後述する。
目標特徴を検出し且つそれらの位置を特定する処理3600は、次の最後のステップ3606で終了する。
閾値処理の説明
画像の2値化ステップ3602を実行する種々の方法が存在する。例示的な一実現例において、2値化画像3700がデジタル画像300から作成されるステップ3602は、適応方法を使用して実行され、その詳細については図38を参照して次に説明する。説明した2値化ステップ3602は、画像をモザイク状の画素のタイルに分割し、タイルの近傍の画素毎に適切な閾値を計算する。最小輝度値mintile及び最大輝度値maxtileがタイル毎に格納される。一例として、デジタル画像3500は、幅が32画素及び高さが32画素のタイルに分割される。図39は、デジタル画像3500がタイル3901に分割される方法を示す。本明細書で説明する2値化ステップ3602は、プロセッサ3305によりソフトウェアで実現されてもよく、或いはASIC等のコンピュータ3301の一部として形成されるハードウェア論理を使用し且つプロセッサ3305の制御下で動作することにより実現されてもよいロバスト性を有する効率的なアルゴリズムである。ここでも、入力画像から2レベル画像を生成する任意の2値化方法がこのステップにおいて使用されてもよいことが理解されるべきである。
図38の2値化ステップ3602は、最初のステップ3801から開始し、デジタル画像3500が入力される。デジタル画像3500は、左上の画素から開始して1度に1画素処理される。デジタル画像3500は、画素処理の順序がある行の最も左側の画素から開始して同一行の最も右側の画素まで進むようにラスタ形式で処理される。その後、処理は、次の行で再度開始し、一番下の行が処理されるまで同一の左から右への処理フローを繰り返す。この初期ステップ3801において、タイルバッファはメモリ3306等に設定される。タイルバッファは、タイルの最小輝度値mintile及び最大輝度値maxtileの一時レコードとしての役割を果たす。図40を参照すると、タイルバッファ4000が示され、タイルメモリ4001はタイル3901に対する最小輝度値及び最大輝度値を格納する。タイルバッファ4000は、2次元配列として考えられ、各要素は、x指標xtile及びy指標ytileにより一意的に識別されても良い。
次のステップ3802において、処理順序で次の画素が取得される。タイルの最大輝度値及び最小輝度値は、取得された(又は対象)画素の輝度に従って更新される。更新されるタイルは、対象画素のx座標xpixel及びy座標ypixelから取得される。2値化方法3800の1つの面は、2値化される画素の前のいくつかの走査線のタイル情報を収集する能力である。タイル情報が収集される2値化される画素の前の走査線数は、パラメータheightforwardにより指定される。更新されるタイル3901のタイルx指標xtile及びタイルy指標ytileは、以下のように計算されても良い。
xtile = floor(xpixel/widthtile)
ytile = floor((ypixel - heightforward)/heighttile)
更新されるタイルは、xtile及びytileにより一意に識別され、タイルバッファ4000の対応するタイルメモリ4001はアクセスされる。
アクセスされたタイルメモリの最大輝度値及び最小輝度値は、対象画素の輝度値を参照して更新される。輝度値が最小輝度値より小さい場合、アクセスされたタイルメモリの最小画素輝度値は対象画素の輝度値と置換される。或いは、対象画素の輝度値が最大輝度値より大きい場合、アクセスされたタイルメモリの最大画素輝度値は対象画素の輝度値と置換される。
このように、デジタル画像3500のタイルの最大輝度値及び最小輝度値は、現在2値化されている画素の前のいくつかの走査線だけ更新される。2値化画像3700は、判定されると、メモリ3306又は3310に格納されても良い。
次のステップ3803において、閾値はプロセッサ3305により対象画素を取り囲む近傍のタイルから計算される。実質上、タイルのスライディングウィンドウは、2値化される各対象画素の周囲に形成される。一例として、スライディングウィンドウは幅widthwindow = 5及び高さheightwindow = 2を有する。図41は、タイルを含むデジタル画像3500上に重ね合わされ且つタイル4101を含むスライディングウィンドウ4100を示す。対象画素の対応するウィンドウは、対象画素の座標xpixel及びypixelから計算されても良い。
スライディングウィンドウ4100の一番上の範囲に対応するタイルのy指標ytileは、プロセッサ3305により以下のように計算されても良い。
ytile = floor(ypixel/heighttile) - heightwindow
スライディングウィンドウ4100の一番下の範囲に対応するタイルのy指標ytileは、以下のように計算されても良い。
ytile = floor(ypixel/heighttile)
スライディングウィンドウの最も左側の範囲に対応するタイルのx指標xindexは、以下のように計算されても良い。
xtile = floor(xpixel/widthtile) - floor((widthwindow - 1)/2)
スライディングウィンドウ4100の最も右側の範囲に対応するタイルのx指標xindexは、プロセッサ3305により以下のように計算されても良い。
xtile = floor(xpixel/widthtile) + floor((widthwindow - 1)/2)
対象画素の対応するスライディングウィンドウ4100が取得されると、対象画素の閾値は、スライディングウィンドウ4100内の各タイル4101の最小輝度値mintile及び最大輝度値maxtileから計算されても良い。
例示的な閾値は、各タイルの閾値の加重平均である。重み付きタイル閾値thrtileは、タイル毎に以下の式を評価してプロセッサ3305により計算される。
thrtile = ((maxtile + mintile)/2) x (maxtile - mintile)
更にタイル重みweightthrは、タイル4101毎に以下の式から計算される。
weighttile = maxtile - mintile
従って、対象画素に対する適切な閾値thrfinalは以下の式から見つけられる。
Figure 0005393428
スライディングウィンドウ4100の全ての画素は同様の輝度を有し、全てが暗い画素であるか又は明るい画素である場合がある。この場合、計算される閾値thrfinalは過度に小さいか又は過度に大きい。従って、2値化画像3700における結果として得られる領域は、同様の黒色領域又は白色領域の代わりにノイズに類似する黒画素及び白画素を含む。これらの例が発生するのを最小限にするために、計算された閾値thrfinalは所定の範囲(例えば、50〜210)内で変動してもよいが、閾値がこの範囲を超える場合、最も近い範囲内の値が代わりに使用される。
次のステップ3804において、ステップ3803で計算された閾値は、2値化画像3700の2値白画素又は2値黒画素を生成するために使用される。対象画素の輝度がステップ3803で計算された閾値thrfinalより小さい場合、2値化画像3700の対応する画素は黒色に設定される。閾値thrfinal以上である場合、2値化画像3700の対応する画素は白色に設定される。
ステップ3806においてプロセッサ3305により判定されるように処理する画素が更に存在する場合、処理順序で次の画素に対してステップ3802、3803及び3804が繰り返される。存在しない場合、2値化ステップ3602はステップ3805で終了する。
尚、説明する2値化ステップ3602は、FPGA又はASIC等の個別のハードウェア論理素子アレイを使用して実行されても良い。そのような一実現例において、メモリの使用を低減するのが望ましいだろう。これを達成するために、タイルバッファ4000はメモリ効率が更に良い実現例と置換されても良い。図42を参照すると、メモリ効率の良いタイルバッファ1000は、heightwindow + 1行のタイル記憶素子のみを含む(heightforwardはheighttileより小さいと仮定する)。タイルが閾値計算のために参照されない場合、タイルの対応するタイルメモリは閾値計算に必要とされる記憶素子と置換される。
連結成分解析(CCA)の説明
ステップ3603は、ステップ3602で作成された2値化画像に対して連結成分解析(CCA)を実行する。本明細書において説明されるCCAの方法は、所定の目標特徴を検出するように特に構成される効率的なアルゴリズムである。説明するCCA方法は、2値化画像3700で見つけられる黒色連結成分(CC)のグループを出力する。特徴100等の目標特徴が検出される場合、CCAはCCの対を出力する。CCの対において、一方のCCは他方のCC内に完全に含まれ且つ他方のCCと区別される。目標特徴3400が使用される場合、CCAはCCのトリプレットを出力する。CCのトリプレットにおいて、1つのCCは第2のCC内に完全に含まれ且つ第2のCCと区別され、第2のCCは第3のCC内に完全に含まれ且つ第3のCCと区別される。更に本明細書で説明するCCA方法は、各CCと関連付けられる低レベル計測値を収集する。簡潔にするために、目標特徴100を検出する方法について説明するが、そのような方法は上述したように全ての有効な目標特徴を検出するために容易に拡張できる。
次に、ステップ3603で実行されるCCAの方法について、図43を参照して説明する。方法3603は初期ステップ4301で開始し、2値化画像3700が入力される。CCA方法3603は、上述の2値化方法と同様に2値化画像3700をラスタ形式で処理する。これは、CCA処理が画像3700の一番上の走査線の最も左側の画素から開始し、画像の全ての画素が処理されるまで継続することを意味する。CCA方法は、走査線の黒画素のランを見つけ且つそれらのランを先の行のランから形成されるCCに追加することにより行毎にCCを構築する。尚、任意の特定の走査線において、CCは、走査線のCCの「クレーム」と呼ばれる画素の1つ以上の未結合のランを含む。CCとそのクレームとまだCCに割り当てられていないランとの間の関係を図44に示す。図44は、走査線4403において2つのクレーム4401及び4402を含むCC4400を示す。本明細書において、ラン4405は、クレーム4401及び従ってCC4400に結合される走査線4404において見つけられる。
次のステップ4302において、現在の走査線上の次の一続きの黒画素(ランと呼ばれる)は、プロセッサ3305により要求される。そのようなランが見つけられる場合、現在の画素ポインタは新しいランの開始場所まで移動される。先の画素(xstart_run - 1における)が白色であり且つxstart_runの画素が黒色である場合、ランはx座標xstart_runから開始するように規定される。先の画素(xend_run - 1における)が黒色であり且つxend_runの画素が白色である場合、ランはx座標xend_runで終了するように規定される。ステップ4302が現在の走査線上で次の行を見つけられなかった場合、現在の画素ポインタは走査線の最後の画素に設定される。
次のステップ4303において、現在の画素ポインタの後方に範囲を有する先の走査線のクレームは終了する。これは、そのようなクレームが現在の走査線に継続せず、重なり合うランが見つからないためである。終了するクレームがCCの最後の終了していないクレームでもある場合、CCは終了する。CCが終了する場合、終了するCCが子CCであるかを判定するためのチェックが実行される。親CCが存在する場合、即ち終了されるCCの左右において走査線上にクレームを有するCCが存在する場合、CCは子CCであると判定される。この条件が満たされる場合、終了されるCCは子CCとしてマーク付けされ、対応する親CCにより参照される。
或いは、終了されるCCは親CCであっても良い。本明細書において、終了されるCCが子CCを参照するかを判定するためのチェックが実行される。子CCを参照する場合、CCは次の評価ステップ3604に対して出力される。
最後に、CCが親CCに囲まれておらず、CCが親CCでない場合、CCは更なる処理のために出力されない。この場合、メモリ3306等のCCと関連付けられる任意のメモリがクリアされ、CCに対する任意の参照は廃棄される。
ステップ4302において、ラン(即ち、白画素に囲まれる走査線上の一続きの黒画素)が見つけられる場合、ステップ4304において、そのランはプロセッサ3305により処理される。ランの処理の詳細については後述する。
現在処理されている走査線上に更に画素が存在する場合、ステップ4302からの処理フローが繰り返される。存在しない場合、2値化画像3700における次の走査線(存在する場合は)が選択され(ステップ4305において)且つ処理される。
これから処理される走査線が存在しない場合、ステップ3803で採用されてもよいCCAの方法が最後のステップ4306において終了する。
次に、ステップ4304で採用されるランを処理する方法について、図45を参照して詳細に説明する。方法は、初期ステップ4501から開始し、処理されるランが入力される。
ランが既存のクレームと結合されない場合、ステップ4502において、新しいCC及びクレームが初期化される。
新たに作成されるクレームを初期化するために、現在の走査線yscanline上のクレームの最も左側の範囲はxstart_runに設定される。同様に、現在の走査線上のクレームの最も右側の範囲はxend_runに設定される。
新しいCCを初期化するために、CCの一番上の範囲ycc_topは現在の走査線のy座標yscanlineに設定される。CCの最も左側の範囲xcc_leftは、xstart_runに設定され、CCの最も右側の範囲xcc_rightはxend_runに設定される。他の全ての低レベルCC計測値は、ステップ4503に関連して後述する方法により更新される前にゼロに初期化される。
ランが先の走査線上の単一の既存のクレームに結合される場合、ステップ4503において、既存のクレームは新しいランの範囲を含むように変更され、クレームのCCは更新される。
しかし、ランが複数の既存のクレームに結合され且つそれらのクレームが種々のCCを参照する場合、マージステップ4504において、全てのCCはマージされて単一のCCを形成する。更に、クレームは新しいランの範囲を含むようにマージされる。いくつかのCCをマージする処理の詳細については後述する。
CCは、ステップ3604において高レベル計測値を計算するために使用されるいくつかの関連する低レベル計測値を有する。しかし、ステップ4503で累積された低レベル計測値は更新可能であるため、ハードウェアでの実装に適する。定例ベル計測値は以下を含むが、それらに限定されない。
−CCの最も左側の範囲xcc_left
−CCの最も右側の範囲xcc_right
−CCの一番上の範囲ycc_top
−CCの一番下の範囲ycc_bottom
−CCの大きさmasscc
−CCの穴部の大きさmasscc_hole
−CCの傾斜の正弦成分sincc
−CCの傾斜の余弦成分coscc
−CCの傾斜の累積重みweightcc
CCに対する上記計測値のうち最初の4つを更新する処理は、アプリケーションコードにより表される場合にプロセッサ3305により実行されてもよい以下の擬似コードにより最適に表される。
****擬似コード28****
if xstart_run < xcc_left:
xcc_left = xstart_run

if xend_run > xcc_right:
xcc_right = xend_run

ycc_bottom = yscanline
masscc = masscc + (xend_run - xstart_run + 1)
CCの穴部の大きさは、CCにより囲まれる白画素数の近似値である。CCが現在更新されているクレーム(例えば、現在の走査線上の最も左側の範囲xstart_runを有するclaimcurrent)の左側にクレーム(例えば、現在の走査線上の最も右側の範囲xclaim_left_endを有するclaimleft)を有する場合、CCの穴部の大きさは単純に以下の擬似コードにより更新される。
****擬似コード29****
masscc_hole = masscc_hole + (xstart_run - xclaim_left_end - 1)
所定の画素位置におけるCCの傾斜は、取得されるか又は例えばプロセッサ3305により実行されるソフトウェアで実現されるソーベルフィルタ等の周知の方法を使用して判定される。ソーベルフィルタは、対象画素の近傍の1画素内の画素輝度を検査し、画素位置における傾斜を近似する。水平方向の傾斜gradienthorz、垂直方向の傾斜gradientvert及び傾斜ベクトルの大きさgradientmagnitudeは、ソーベルフィルタを使用して従来技術において周知の式により計算されても良い。
所定の画素位置における傾斜ベクトルは、「第1の象限」にある同等の角度、即ちπ/2を法とする角度に変換される。これは、後のステップで計算される直線の辺を有する形状に対する回転角を与える。
更に、傾斜ベクトルの正弦成分及び余弦成分は、所定の画素位置における傾斜ベクトルの大きさにより重み付けされる。
CCの傾斜の正弦、余弦及び重み成分を更新するソフトウェアを表す擬似コードは以下の通りである。
****擬似コード30****
theta_first_quadrant =
(4 x arctan(gradientvert / gradienthoriz))mod(2 x pi)

sincc = sincc + (sin(theta_first_quadrant) x gradientmagnitude)
coscc = coscc + (cos(theta_first_quadrant) x gradientmagnitude)
weightcc = weightcc + gradientmagnitude
ステップ4504において、ランが2つ以上のクレームと重なり合う場合、CC及びクレームはマージされる。実質上、低レベルCC計測値は全てのCCから集約され、重なり合うクレームは見つけられたランの範囲とマッチングする単一のクレームで置換される。
マージされたCCの最も左側の範囲は、マージされる全てのCCの最も左側の座標になる。同様に、マージされたCCの一番上の範囲、最も右側の範囲及び一番下の範囲は、マージされる全てのCCの一番上の範囲、最も右側の範囲及び一番下の範囲を見つけることにより判定される。
マージされるCCの大きさmassmerged_ccは、マージされる全てのCCの大きさを合計することにより見つけられる。同様に、masshole_cc等の全ての他の低レベル計測値は、マージされる全てのCCから合計され、マージされるCCに対する各計測値を判定しても良い。
CCが更新されると又はマージされると、或いは新しいCCが初期化されると、ステップ4304で採用されるランを処理する方法は最後のステップ4505において終了する。
形状計測値の評価の説明
図36のステップ3603の出力は、潜在的に目標特徴100であっても良い候補特徴のリストである。ステップ3603により出力される各候補特徴は、上述のように収集及び更新される対応する低レベル計測値を有する。ステップ3604において、低レベル計測値は高レベル形状計測値を計算するために使用される。形状計測値は、候補特徴の幾何的配置に密接に関連付けられる。
ステップ3604で採用される各候補特徴に対する形状計測値を評価する方法について、図46を参照して詳細に説明する。初期ステップ4601において、対応する低レベル計測値を有する候補特徴が入力される。これは、プロセッサ3305に対してメモリ3306又はHDD3310における記憶位置からそのようなデータを検索することを含んでも良い。次のステップ4602において、中間計測値が候補特徴毎にプロセッサ3305により計算される。中間計測値は、形状計測値の計算を容易にする。次のステップ4603において、形状計測値の集合は、各候補特徴の低レベル計測値及び中間計測値から計算される。各形状計測値については、後で詳細に説明する。次のステップ4604において、各形状計測値は正規化され、正規化形状計測値を生成する。次のステップ4605において、各正規化形状計測値は所定の重みと乗算され、重み付き形状計測値を生成する。形状計測値を評価する方法は、最後のステップ4606において終了する。
次に、ステップ4602及び4603について詳細に説明する。しかし、ステップ4604及び4605の詳細は種々の実現例の間で変更されるため、後で説明する。
次に、ステップ4602で計算される各中間計測値について、図47を参照して詳細に説明する。候補特徴4700は、子CC4701及び親CC4702から構成される。子CC4701に対応する計測値には「child」の下付き文字を与え、親CC4702に対応する計測値には「parent」の下付き文字を与える。例えば計測値は、x及びyの場所、モジュールサイズ、幅、高さ、平均の辺の長さ及び回転角を含む。
個々のCCのx及びyの場所は、以下の式を評価してプロセッサ3305により判定されても良い。
xchild = xchild_cc_left + (xchild_cc_right - xchild_cc_left + 1) / 2
ychild = ychild_cc_top + (ychild_cc_bottom - ychild_cc_top + 1) / 2
xparent = xparent_cc_left + (xparent_cc_right - xparent_cc_left + 1) / 2
yparent = yparent_cc_top + (yparent_cc_bottom - yparent_cc_top + 1) / 2
候補特徴のx及びyの場所であるxcandidate_feature及びycandidate_featureは、以下の式を評価してプロセッサ3305により判定されても良い。
xcandidate_feature = (xchild_centre + xparent_centre) / 2
ycandidate_feature = (ychild_centre + yparent_centre) / 2
目標特徴のモジュールサイズ(画素数)は、外側の黒色領域101の線幅と同等であり、これは囲まれた白色領域102の幅と同等であるべきである。従って、後処理の目的で検出された候補特徴のモジュールサイズを判定するのが望ましい。しかし、ある程度歪みのある画像において、黒色領域及び白色領域のモジュールサイズは等しくないため、平均モジュールサイズはプロセッサ3305により黒色領域及び白色領域から計算される。
module_size_black = sqrt(massparent/24)
module_size_white = sqrt((hole_massparent - masschild)/16)
module_size = (module_size_black + module_size_white)/2
尚、「sqrt」は平方根関数を示す。
子CCの幅4703であるwidthchildは、以下の式により判定される。
widthchild = xchild_cc_right - xchild_cc_left + 1
子CCの高さ4704であるheightchildは、以下の式により判定される。
heightchild = ychild_cc_bottom - ychild_cc_top + 1
子CCの平均の辺の長さaverage_sidechildは、以下の式により判定される。
average_sidechild = (widthchild + heightchild) / 2
親CCの幅4705であるwidthparentは、以下の式を使用してプロセッサ3305により判定される。
widthparent = xparent_cc_right - xparent_cc_left + 1
親CCの高さ1506であるheightparentは、以下の式を実行してプロセッサ3305により判定される。
heightparent = yparent_cc_bottom - yparent_cc_top + 1
親CCの平均の辺の長さaverage_sideparentは、以下の式により判定される。
average_sideparent = (widthparent + heightparent) / 2
更に、候補特徴4700の回転角1507であるanglecandidate_featureは、以下の擬似コードの例示的なコードを実行してプロセッサ3305により判定されても良い。
****擬似コード31****
sin anglecandidate_feature = sin anglechild_cc + sin angleparent_cc
cos anglecandidate_feature = cos anglechild_cc + cos angleparent_cc

weightcandidate_feature = weightchild_cc + weightparent_cc

averaged_sin anglecandidate_feature =
sin anglecandidate_feature
/
weightcandidate_feature

averaged_cos anglecandidate_feature =
cos anglecandidate_feature
/
weightcandidate_feature

anglecandidate_feature =
(
arctan
(
averaged_sin anglecandidate_feature
/
averaged_cos anglecandidate_feature
)
/
4
)

if anglecandidate_feature < 0:
anglecandidate_feature = anglecandidate_feature + (pi / 2)
尚、「arctan」は逆正接関数を示し、「pi」は数学的定数pを示す。
次に、ステップ4603で計算される各形状計測値について詳細に説明する。しかし、形状計測値は、辺長比、幅及び高さの比、平均の辺長比、大きさの比、閉じた大きさ、剛率、同心性、直線性、平均の直線性及びバウンディングボックスの剛率である本明細書で説明される計測値に限定されない。
子CC及び親CCの辺長比であるside_ratiochild及びside_ratioparentは、以下の式から判定されても良い。
side_ratiochild = widthchild / heightchild
side_ratioparent = widthparent / heightparent
候補特徴の幅及び高さの比であるwidth_raio及びheight_ratioは、以下の式により判定されても良い。
width_ratio = widthchild / widthparent
height_ratio = heightchild / heightparent
候補特徴の平均の辺長比であるside_ratioは、以下の式により判定されても良い。
side_ratio = average_sidechild / average_sideparent
候補特徴の大きさの比であるmass_raioは、以下の式を評価してプロセッサ3305により判定されても良い。
mass_ratio = masschild / massparent
子CC及び親CCの閉じた大きさであるclosed_masschild及びclosed_massparentは、以下の式により判定されても良い。
closed_masschild = masschild + hole_masschild
closed_massparent = massparent + hole_massparent
子CC及び親CCの剛率であるsoliditychild及びsolidityparentは、以下の式により判定されても良い。
soliditychild = masschild / closed_masschild
solidityparent = massparent / closed_massparent
候補特徴の同心性は、以下の擬似コードの例示的なコードを実行してプロセッサ3305により判定されても良い。
****擬似コード32****
xchild_centre = (xchild_cc_right + xchild_cc_left) / 2
ychild_centre = (ychild_cc_bottom + ychild_cc_top) / 2
xparent_centre = (xparent_cc_right + xparent_cc_left) / 2
yparent_centre = (yparent_cc_bottom + yparent_cc_top) / 2
x_distbetween_centres = xchild_centre - xparent_centre
y_distbetween_centres = ychild_centre - yparent_centre

concentricity = sqrt(x_distbetween_centres 2 + y_distbetween_centres 2)
尚、「sqrt」は平方根関数を示し、上付き文字の数字「2」は2乗を示す。
子CC及び親CCの直線性であるrectilinearitychild及びrectilinearityparentは、以下の式により判定されても良い。
rectilinearitychild = sqrt(sin2 anglechild_cc + cos2 anglechild_cc) / weightchild_cc
rectilinearitychild = sqrt(sin2 anglechild_cc + cos2 anglechild_cc) / weightchild_cc
候補特徴の平均の直線性であるrectilinearitycandidate_featureは、以下の式を表すコードを実行してプロセッサ3305により判定されても良い。
rectilinearitycandidate_feature =
sqrt(sin2 anglecandidate_feature + cos2 anglecandidate_feature)
/
weightcandidate_feature
子CCの「バウンディングボックス」剛率は、子CCのバウンディングボックスのサイズが周知の大きさを有する回転された子CCの好適なバウンディングボックスとどの程度マッチングするかの尺度である。実際には、子CCの大きさ及び候補特徴の回転角は、予想されるバウンディングボックスのサイズを計算するために使用される。この予想されるサイズは、実際のバウンディングボックスのサイズと比較され、「バウンディングボックス」剛率計測値を与える。子CCのバウンディングボックス剛率であるbounding_box_soliditychildを計算する方法は、以下の擬似コードにより表される。
****擬似コード33****
expected_BB_side_length = (widthchild + heightchild) / 2

sin_theta_plus_45 = sin(anglecandidate_feature + (pi / 4))

expected_CC_side_length =
expected_BB_side_length
/
(sqrt(2.0) x sin_theta_plus_45)

expected_CC_mass = expected_CC_side_length2

bounding_box_soliditychild = masschild / expected_CC_mass
同様の「バウンディングボックス」剛率計測値がclosed_massparentを使用して親CCに対して計算されることは、当業者には認識されるだろう。
QRコード復号化における目標特徴検出
目標特徴検出の第1の実現例において、目標特徴を検出する処理3600が適用され、図48の4800として示すQRコードを検出及び復号化する。QRコード4800は、最初に3つの「ファインダパターン」4801、4802及び4803の各々の場所を取得することにより復号化される。
次に、QRコード復号化に対する目標特徴を検出する(この場合、ファインダパターン4801、4802及び4803を検出する)処理3600について、ステップ3604及び3605を詳細に示すことにより説明する。
単一の類似性スコアを生成するためのステップ3604で適用されるような形状計測値を評価する方法について、更に詳細に説明する。方法はサブステップ4604を含み、形状計測値は正規化される。ステップ4604において、各形状計測値は、プロセッサ3305により0〜1の値に正規化される。正規化された値1は、候補特徴がその計測値に対する目標特徴に幾何学的に類似することを示す。従って、正規化された値0は、候補特徴がその計測値に対する目標特徴に幾何学的に類似しないことを示す。更に、正規化ステップ4604は、計測値が広範な所定の範囲外にある候補特徴を廃棄する。
各形状計測値は、目標特徴の幾何学的属性に厳密にマッチングする理想値を有する。例えば、目標特徴101の内部構成要素が正方形であるため、目標特徴100のside_ratiochildの理想値は1である。以下の表は、この実現例に従って各形状計測値に対する有効な範囲を概略的に示す。
┌─────────────┬───┬───┬─────────┐
│計測値 │最小値│理想値│最大値 │
├─────────────┼───┼───┼─────────┤
│mass_ratio │ 0 │0.375 │0.75 │
├─────────────┼───┼───┼─────────┤
│width_ratio │ 0 │0.43 │1.0 │
├─────────────┼───┼───┼─────────┤
│height_ratio │ 0 │0.43 │1.0 │
├─────────────┼───┼───┼─────────┤
│concentricity │ 0 │0 │concentricity_max │
├─────────────┼───┼───┼─────────┤
│side_ratiochild │ 0.5 │1.0 │2.0 │
├─────────────┼───┼───┼─────────┤
│side_ratioparent │ 0.5 │1.0 │2.0 │
├─────────────┼───┼───┼─────────┤
│soliditychild │ 0 │1.0 │1.0 │
├─────────────┼───┼───┼─────────┤
│bounding_box_soliditychild│ 0 │1.0 │2.0 │
├─────────────┼───┼───┼─────────┤
│solidityparent │ 0 │0.49 │1.0 │
└─────────────┴───┴───┴─────────┘
直線性等の上記表に一覧表示されていない計測値は正規化されない。
有効な同心性の最大値は、目標特徴のサイズの要素である。従って、同心性の最大値であるconcentricity_maxは以下の擬似コードにより判定される。
****擬似コード34****
max_dist_x = widthchild / 2
max_dist_y = heightchild / 2

max_concentricity = sqrt(max_dist_x2 + max_dist_y2)
正規化された形状計測値は、以下の擬似コードに従って各形状計測値から生成される。
****擬似コード35****
if metric < metric_ideal:
normalized_metric =
(metric - metric_mininum)
/
(metric_ideal - metric_minimum)
else:
normalized_metric =
1
-
(
(metric - metric_ideal)
/
(metric_maximum - metric_ideal)
)
ステップ4605において、正規化された形状計測値は、数学的に組み合わされ(乗算及び加算により)、単一の類似性スコアを生成する。以下の擬似コードは、形状計測値を組み合わせる処理を表す。
****擬似コード36****
rectilinearity_parent_combined =
norm_solidityparent x rectilinearityparent
side_ratios_combined =
norm_side_ratiochild x norm_side_ratioparent
weighted_metrics =
(mass_ratio_weight x norm_mass_ratio)
+
(width_ratio_weight x norm_width_ratio)
+
(height_ratio_weight x norm_height_ratio)
+
(concentricity_weight x norm_concentricity)
+
(
rectilinearity_parent_combined_weight
x
rectilinearity_parent_combined
)
+
(
side_ratios_combined_weight
x
side_ratios_combined
)

similarity_score =
weighted_metrics
x
soliditychild
x
norm_bounding_box_soliditychild
尚、正規化された計測値は、「norm」を頭に付けられており、例示的な一実現例においては、重みが以下の表において規定される。
┌───────────────────┬────┐
│ 重み │ 値 │
├───────────────────┼────┤
│mass_ratio_weight │0.2978 │
├───────────────────┼────┤
│width_ratio_weight │0.2256 │
├───────────────────┼────┤
│height_ratio_weight │0.1799 │
├───────────────────┼────┤
│concentricity_weight │0.0887 │
├───────────────────┼────┤
│rectilinearity_parent_combined_weight │0.0599 │
├───────────────────┼────┤
│side_ratios_combined_weight │0.1481 │
└───────────────────┴────┘
上記で規定された重みは、大きなデータセットの統計分析により取得された。データセットは、ポジティブセットとして周知の実際の目標特徴を含む画像及びネガティブセットとして周知の目標特徴に類似する特徴を含む画像を含む。上記重み(類似性スコアを生成するために適用される場合)は、ポジティブテストセットとネガティブテストセットとの間の類似性スコア平均値の有用な分離を提供する。
類似性スコアが各候補特徴から生成されると、それらの候補特徴は後処理ステップ4605に出力される。この実現例に対する後処理ステップ4605を図49に示す。後処理ステップは初期ステップ4901から開始し、候補特徴のリストが入力される。
次のステップ4902において、候補特徴のリストは「分解」されて、候補領域を判定する。候補領域は、潜在的にQRコードを含んでもよい2次元領域である。QRコードは、2次元コードの左上の隅、右上の隅及び左下の隅に配置される3つのファインダパターンを含む。従って、候補領域は同様の配置の3つの候補特徴を有する。
3つの候補特徴のグループが候補領域を形成するように適切に構成されるかを判定するための一連のチェックが実行される。これらのチェックは、2つの所定の許容差toleranceangle及びtolerancemagnitudeに対して行われる。一例として、toleranceangleは0.2であり、tolerancemagnitudeも0.2である。候補特徴を候補領域に分解する方法の詳細については後述する。
次のステップ4903において、ステップ4902で生成された候補領域のリストは検査され、追加の候補特徴を含む候補領域を除去する。このステップの詳細については後述する。
ステップ4902において候補特徴が候補領域に分解され、追加の候補特徴を含む領域が除去されると、ステップ4904において候補領域は復号化される。QRコードを復号化し且つファインダパターンのトリプレット(分解された候補特徴)であった符号化データを抽出する処理は、従来技術において周知であるため、本明細書においては説明しない。しかし、復号化処理の最終的な出力はQRコードに2次元的に符号化されたデータである。最後に、3805で適用される後処理ステップ(本実現例の状況において)はステップ4905で終了する。
次に、ステップ4902で実行される候補特徴を候補領域に分解する方法について、図50を参照して説明する。方法は初期ステップ5001で開始し、全ての検出された候補特徴が入力される。
次のステップ5002において、3つの候補特徴のグループが取得される。グループの各候補特徴には、候補領域の仮定される位置が割り当てられる。これは、本ステップにおいて、3つの候補特徴の各グループが仮定された位置の構成毎に1回、合計3回選択されることを意味する。これらの候補特徴は、CFtl、CFtr及びCFblと呼ばれる。これらは、それぞれ左上の隅、右上の隅及び左下の隅の候補特徴に対応する。
次のステップ5003において、3つの候補特徴が同様のモジュールサイズを有するかを判定するためのチェックが行われる。モジュールサイズは、目標特徴100の親CCの線幅(画素数)を示す。同様のモジュールサイズに対するチェックは、以下の擬似コードにより表されても良い。
****擬似コード37****
if
(
(
abs(module_sizetl - module_sizetr)
/
min(module_sizetl, module_sizetr)
) <= tolerancemagnitude
and
(
abs(module_sizetl - module_sizebl)
/
min(module_sizetl, module_sizebl)
) <= tolerancemagnitude
and
(
abs(module_sizebl - module_sizetr)
/
min(module_sizebl, module_sizetr)
) <= tolerancemagnitude
):
check passed
else:
check failed
次のステップ5004において、正方形のQRコードに準拠して、候補特徴の間の距離が等しいかを判定するためのチェックが行われる。このチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード38****
vector_xtl-tr = xtl - xtr
vector_ytl-tr = ytl - ytr
vector_magtl-tr = sqrt(vector_xtl-tr 2 + vector_ytl-tr 2)

vector_xtl-bl = xtl - xbl
vector_ytl-bl = ytl - ybl
vector_magtl-bl = sqrt(vector_xtl-bl 2 + vector_ytl-bl 2)

min_vector_mag = min(vector_magtl-bl, vector_xtl-bl)
max_vector_mag = max(vector_magtl-bl, vector_xtl-bl)

if max_vector_mag <= (min_vector_mag x (1 + tolerancemagnitude):
check passed
else:
check failed
次のステップ5005において、左上の候補特徴から他の2つの候補特徴にわたるベクトルが適切に直交するかを判定するためのチェックが行われる。候補領域中の右上の位置及び左下の位置への候補特徴の仮定される割り当てが正確であるかを判定するための更なるチェックが行われる。これらのチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード39****
dot_product =
(vector_xtl-tr x vector_xtl-bl)
+
(vector_ytl-tr x vector_ytl-bl)

cross_product_k =
(vector_xtl-tr x vector_ytl-bl)
+
(vector_ytl-tr x vector_xtl-bl)

cos_theta = dot_product / (vector_magtl-tr x vector_magtl-bl)

if cos_theta <= toleranceangle and cross_product_k > 0:
check passed
else:
check failed
次のステップ5006において、候補特徴の回転角が同様であるかを判定するためのチェックが行われる。
尚、候補特徴毎に計算される回転角はp/2ラジアンを法とする。従って、候補特徴の回転角の間の最小偏差を判定するために調整が行われる。このチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード40****
if
(
(
abs(angletl - angletr) <= toleranceangle x pi / 2
or
(
pi / 2 - max(angletl, angletr) + min(angletl, angletr)
) <= toleranceangle x pi / 2
)
and
(
abs(angletl - anglebl) <= toleranceangle x pi / 2
or
(
pi / 2 - max(angletl, anglebl) + min(angletl, anglebl)
) <= toleranceangle x pi / 2
)
and
(
abs(anglebl - angletr) <= toleranceangle x pi / 2
or
(
pi / 2 - max(anglebl, angletr) + min(anglebl, angletr)
) <= toleranceangle x pi / 2
)
):
check passed
else:
check failed
次のステップ5006において、候補特徴の回転角が候補領域の回転と同様であるかを判定するためのチェックが行われる。候補領域の回転角は、左上の候補特徴と右上の候補特徴との間のベクトルの角度として規定される。このチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード41****
vector_angletl-tr = arctan2(vector_ytl-tr, vector_ytl-tr)
if vector_angletl-tr < 0:
vector_angletl-tr = vector_angletl-tr + (2 x pi)

vector_angletl-tr = pi/2 - ((4 x vector_angletl-tr)mod(2 x pi) / 4)
if
(
(
abs(angletl - vector_angletl-tr) <= toleranceangle x pi / 2
or
(
pi / 2
- max(angletl, vector_angletl-tr)
+ min(angletl, vector_angletl-tr)
) <= toleranceangle x pi / 2
)
and
(
abs(angletr - vector_angletl-tr) <= toleranceangle x pi / 2
or
(
pi / 2
- max(angletr, vector_angletl-tr)
+ min(angletr, vector_angletl-tr)
) <= toleranceangle x pi / 2
)
and
(
abs(anglebl - vector_angletl-tr) <= toleranceangle x pi / 2
or
(
pi / 2
- max(anglebl, vector_angletl-tr)
+ min(anglebl, vector_angletl-tr)
) <= toleranceangle x pi / 2
)
):
check passed
else:
check failed
尚、arctan2は、4象限逆正接関数を示す。
ステップ5010でテストされるようにステップ5003〜5007の全てのチェックを通過した場合、次のステップ5008において候補領域は出力するための候補領域のリストに追加される。
ステップ5011でテストされるようにこれから処理される候補領域が更に存在する場合、ステップ5002からの処理が繰り返される。存在しない場合、候補特徴から候補領域を分解する方法は、最後のステップ5009で終了する。
ステップ4903において、出力するためのリストの各候補領域が処理され、候補特徴は、領域の候補特徴が存在する2次元領域に存在するかをチェックする。有効なQRコードは、その隅にのみファインダパターンを含む。従って、追加の候補特徴が候補領域内で見つけられる場合、候補領域は有効なQRコードではなく且つ除去されるべきである。次に、内部候補特徴を含む候補領域を削除する処理4903について、図51を参照して詳細に説明する。処理は初期ステップ5101で開始し、候補特徴のリスト及び候補領域のリスト(ステップ5008の間に作成される)が入力される。
次のステップ5102において、候補領域が選択される。
次のステップ5103において、候補特徴が選択される。本明細書において、ステップ5101で入力されたリストから全ての候補特徴が選択されても良い。しかし、高い類似性スコア(候補領域を形成する特徴に対して)を有する候補特徴のみが選択される場合、システム全体は更に高いロバスト性を有するだろう。一例として、候補特徴は、その類似性スコアが候補領域の特徴の最小の類似性スコアの2/3より大きい場合に十分に高い類似性スコアを有する。
次のステップ5104において、選択された候補特徴の位置が候補領域内で特定されるかを判定するためのチェックが実行される。このチェックについては、図52を参照して最適に説明される。図52において、候補領域は平行四辺形5200に外挿される(vector_angletl-tr及びvector_angletl-trが直交しない場合)。選択された候補特徴5201の中心(xcandidate_feature及びycandidate_featureにより規定される)が平行四辺形5200内に存在する場合、選択された候補領域は、内部候補特徴を含むと判定される。領域の3つの候補特徴の中心により直接規定される平行四辺形を図52に示すが、例えば領域2000へのバッファ領域の追加により形成される更に大きな平行四辺形が使用可能であることが理解されるべきである。
候補領域が内部候補特徴を含むと判定される場合、候補領域は復号化処理4904に出力される候補領域のリストから除去される(ステップ5105において)。
リスト中に更なる候補特徴が存在する場合、ステップ5103からの処理が繰り返される。
或いは、処理される候補領域がリスト中に残っている場合、ステップ5102からの処理が繰り返される。
或いは、処理される候補領域が残っていない場合、内部候補特徴を含む候補領域を削除する処理は最後のステップ5106で終了する。
著作権記号検出における目標特徴検出
目標特徴検出の第2の実現例において、目標特徴を検出する処理3600が適用され、図53の著作権記号(c)5300を検出する。著作権記号5300が白色領域5302に完全に囲まれる黒色領域5301(即ち、文字「c」)を含み、白色領域5302が黒色領域5303(即ち、円)により完全に囲まれるため、著作権記号5300が有効な目標特徴であることは明らかである。
次に、目標特徴(この場合、著作権記号)を検出する処理3600について、ステップ3604及び3605を詳細に示すことにより説明する。更に、上記実現例で既に説明したステップを参照する。
本実現例の状況において、単一の類似性スコアを生成するために形状計測値3604を評価する方法について更に詳細に説明する。形状計測値が0〜1の範囲に正規化されるステップ4604は、上記実現例に対して説明されたステップ4604の説明と類似する。しかし、目標特徴の幾何学的配置がQRコードのファインダパターンと非常に異なるため、形状計測値に対する理想的な最小値及び最大値は異なる。また、いくつかの形状計測値は、著作権記号を検出することに関連しないため、本実現例において使用される必要がない。
形状計測値に対する理想的な最小値及び最大値は、以下の表において与えられる。以下の表に一覧表示されない計測値は、本実現例に関連せず且つ計算されない。
┌───────────┬───┬───┬─────────┐
│計測値 │最小値│理想値│最大値 │
├───────────┼───┼───┼─────────┤
│mass_ratio │0 │0.4336│0.8672 │
├───────────┼───┼───┼─────────┤
│width_ratio │0 │0.5 │1.0 │
├───────────┼───┼───┼─────────┤
│height_ratio │0 │0.5 │1.0 │
├───────────┼───┼───┼─────────┤
│rectilinearitychild │0 │0.1 │0.5 │
├───────────┼───┼───┼─────────┤
│rectilinearityparent │0 │0 │0.5 │
├───────────┼───┼───┼─────────┤
│concentricity │0 │0 │concentricity_max │
├───────────┼───┼───┼─────────┤
│side_ratiochild │0.5 │1.0 │2.0 │
├───────────┼───┼───┼─────────┤
│side_ratioparent │0.5 │1.0 │2.0 │
├───────────┼───┼───┼─────────┤
│solidityparent │0 │0.3095│1.0 │
└───────────┴───┴───┴─────────┘
正規化された形状計測値が数学的に組み合わされる次のステップ4605は、本実現例においては上記のステップと異なる。本実現例において、全ての正規化形状計測値は最初に所定の重みと乗算される。その後、全ての重み付き正規化形状計測値は合計され、最終的な類似性スコアを生成する。以下の表は、正規化計測値毎に重みを一覧表示する。
┌──────────────┬────┐
│ 重み │ 値 │
├──────────────┼────┤
│mass_ratio_weight │0.2893 │
├──────────────┼────┤
│width_ratio_weight │0.0797 │
├──────────────┼────┤
│height_ratio_weight │0.0975 │
├──────────────┼────┤
│rectilinearitychild _weight│0.0590 │
├──────────────┼────┤
│rectilinearityparent _weight│0.1014 │
├──────────────┼────┤
│concentricity_weight │0.0191 │
├──────────────┼────┤
│side_ratiochild _weight │0.1028 │
├──────────────┼────┤
│side_ratioparent _weight │0.1014 │
├──────────────┼────┤
│solidityparent _weight │0.2009 │
└──────────────┴────┘
本実現例における形状計測値評価処理3604の残りは、先の実現例において説明した処理と同一である。
次に、候補特徴を後処理するステップ3605について図54を参照して説明する。候補特徴の後処理の方法3605は初期ステップ5401で開始し、検出された候補特徴のリストが入力される。
次のステップ5402において、候補特徴が選択される。
次のステップ5403において、選択された候補特徴の類似性スコアは所定の閾値と比較される。この例において、閾値は0.48に設定される。類似性スコアが閾値より大きい場合、候補特徴は検出結果として出力される。ステップ5405でテストされるように、処理される候補特徴が残っている場合、ステップ5402からの処理が繰り返される。これから処理される候補特徴が存在しないと、候補特徴を後処理する方法3605は最後のステップ5404で終了する。
登録商標記号検出における目標特徴検出
目標特徴検出の第3の実現例において、目標特徴を検出する処理3600が適用され、図55の登録商標記号(R)5500を検出する。登録商標記号5500が白色領域5502により完全に囲まれる黒色領域5501(即ち、文字「R」)を含み、白色領域5502が黒色領域5503により完全に囲まれるため、登録商標記号5500が有効な目標特徴であることは明らかである。
次に、目標特徴(この場合、登録商標記号)を検出する処理3600について、上記の第2の実現例を参照して説明する。登録票記号を検出する方法と著作権記号を検出する方法とは、使用される形状計測値、ステップ4604で判定される計測値の正規化及びステップ4605における計測値の重み付けのみが異なる。
正規化ステップ4604に対しては、以下の理想値、最小値及び最大値が適切である。以下の表に一覧表示されない形状計測値は、登録商標記号検出には使用されない。
┌───────────┬───┬───┬─────────┐
│計測値 │最小値│理想値│最大値 │
├───────────┼───┼───┼─────────┤
│mass_ratio │0 │0.6261│1.2522 │
├───────────┼───┼───┼─────────┤
│width_ratio │0 │0.6 │1.0 │
├───────────┼───┼───┼─────────┤
│height_ratio │0 │0.6 │1.0 │
├───────────┼───┼───┼─────────┤
│rectilinearityparent │0 │0 │0.5 │
├───────────┼───┼───┼─────────┤
│concentricity │0 │0 │concentricity_max │
├───────────┼───┼───┼─────────┤
│side_ratiochild │0 │1.0 │2.0 │
├───────────┼───┼───┼─────────┤
│side_ratioparent │0.5 │1.0 │2.0 │
├───────────┼───┼───┼─────────┤
│solidityparent │0 │0.3095│1.0 │
└───────────┴───┴───┴─────────┘
ステップ4605において、形状計測値は、単一の類似性スコアを生成するために、重みと乗算され且つ合計される。登録商標記号を検出するために、ステップ4604で正規化される形状計測値は以下の重みと乗算される。
┌──────────────┬────┐
│ 重み │ 値 │
├──────────────┼────┤
│mass_ratio_weight │0.2396 │
├──────────────┼────┤
│width_ratio_weight │0.1407 │
├──────────────┼────┤
│height_ratio_weight │0.1292 │
├──────────────┼────┤
│rectilinearityparent _weight│0.1358 │
├──────────────┼────┤
│concentricity_weight │0.0199 │
├──────────────┼────┤
│side_ratiochild _weight │0.0948 │
├──────────────┼────┤
│side_ratioparent _weight │0.1167 │
├──────────────┼────┤
│solidityparent _weight │0.1234 │
└──────────────┴────┘
上述したように、一般に上記構成は適切にプログラムされたコンピュータシステム3300に実現される。コンピュータシステム3300において、画像は文書から走査されるか又は入力され(通信ネットワーク3320、3322を介して電子ファイルにより)、画像は著作権記号(C)又は登録商標記号(R)などの目標特徴の存在を検出するためにコンピュータシステム3300により処理される。上述の方法は、システムのコンピュータ可読記憶媒体(例えば、HDD3310)に格納され、システムのプロセッサ3305により読み出され且つ実行されて入力画像に対して動作するソフトウェアに組み込まれる。特定の実現例は、著作権で保護される作品又は登録商標を含む作品の不適切な複製を防止するようにそれらの構成を複写機に含むようにしても良い。システム3300は複写機と考えられても良く、例えばスキャナ3327及びプリンタ3315は複写機の電気機械入力及び出力を表し、コンピュータ3301は複写機のコンピュータ化制御器を表す。例えば目標特徴の候補領域が識別されると、目標特徴はプロセッサ3305を使用してHDD3310からの可能な目標特徴の格納されたアレイと比較される。比較の結果は、複写機における走査済画像の印刷により文書をコピーするか又は文書のコピーを中止するために使用される。例えば著作権記号が検出される場合、複写機は、スキャナ3326による文書の走査により行われるコピー動作を中止し、文書の著作権侵害を潜在的に回避する。目標特徴が特別なコードである場合、そのような目標特徴は、HDD3310に格納されるその特別なコードを含む複写機によってのみそのような文書のコピーを許可するために使用されても良い。このように、目標特徴の検出は、複写機機能を選択的に有効又は無効にするために使用される。
上述の構成はコンピュータ及びデータ処理業界に適用可能であり、特に文書中のQRコードの検出及び復号化に対して適用可能である。構成は、文書の認証に有用であり、特に著作権で保護される作品又は登録商標を保持する作品の不適切な複製を防止するのに有用である。
上述において、本発明のいくつかの実施形態のみを説明したが、本発明の趣旨の範囲から逸脱せずに変形及び/又は変更が行われても良い。実施形態は、例示するものであり限定するものではない。

Claims (18)

  1. 2つの最初に検出されたファインダパターンを有するQRコードを復号化する方法を実行するためのプロセッサと前記ファインダパターンを含む画像が格納される関連メモリとを少なくとも含むコンピュータにより実現される方法であって、
    (a)前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成するステップと、
    (b)前記QRコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づく候補領域であり、前記検出されたファインダパターンに関して少なくとも1つの候補領域を決定するステップと、
    (c)前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも1つの候補領域の中の前記QRコードの未検出の第3のファインダパターンの位置を特定するステップと、
    (d)前記2つの最初に検出されたファインダパターンの各々及び前記第3のファインダパターンを使用して前記QRコードを復号化するステップと、
    を有することを特徴とする方法。
  2. 前記2つの最初に検出されたファインダパターンは、連結成分解析を使用して検出されることを特徴とする請求項1記載の方法。
  3. 前記検出されたファインダパターンの前記特性は、回転角及びモジュールサイズを含むことを特徴とする請求項1記載の方法。
  4. 前記検出されたファインダパターンの前記特性は、黒色モジュールサイズ及び白色モジュールサイズを更に含むことを特徴とする請求項3記載の方法。
  5. 前記検出されたファインダパターンの前記特性は、前記検出されたファインダパターンの少なくとも一方の画素の輝度値に基づくことを特徴とする請求項1記載の方法。
  6. ステップ(d)は、前記第3のファインダパターンの場所及び前記2つの最初に検出されたファインダパターンの場所を使用して前記QRコードを復号化することを含むことを特徴とする請求項1記載の方法。
  7. 2つの最初に検出されたファインダパターンを有するQRコードを復号化するためにコンピュータ装置により実行可能なコンピュータプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、前記プログラムは、
    前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成するコードと、
    前記QRコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づく候補領域であり、前記検出されたファインダパターンに関して少なくとも1つの候補領域を決定するコードと、
    前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも1つの候補領域の中の前記QRコードの未検出の第3のファインダパターンの位置を特定するコードと、
    前記2つの最初に検出されたファインダパターンの各々及び前記第3のファインダパターンを使用して前記QRコードを復号化するコードと、
    を含むことを特徴とするコンピュータ読み取り可能な記憶媒体。
  8. 前記2つの最初に検出されたファインダパターンは、連結成分解析を使用して検出されることを特徴とする請求項7記載のコンピュータ読み取り可能な記憶媒体。
  9. 前記検出されたファインダパターンの前記特性は、回転角及びモジュールサイズを含むことを特徴とする請求項7記載のコンピュータ読み取り可能な記憶媒体。
  10. 前記検出されたファインダパターンの前記特性は、黒色モジュールサイズ及び白色モジュールサイズを更に含むことを特徴とする請求項9記載のコンピュータ読み取り可能な記憶媒体。
  11. 前記検出されたファインダパターンの前記特性は、前記検出されたファインダパターンの少なくとも一方の画素の輝度値に基づくことを特徴とする請求項7記載のコンピュータ読み取り可能な記憶媒体。
  12. 前記復号化するコードは、前記第3のファインダパターンの場所及び前記最初に検出された2つのファインダパターンの場所を使用して前記QRコードを復号化するコードを含むことを特徴とする請求項7記載のコンピュータ読み取り可能な記憶媒体。
  13. 2つの最初に検出されたファインダパターンを有するQRコードを復号化するコンピュータ装置であって、
    前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成する手段と、
    前記QRコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づく候補領域であり、前記検出されたファインダパターンに関して少なくとも1つの候補領域を判定する手段と、
    前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも1つの候補領域の中の前記QRコードの未検出の第3のファインダパターンの位置を特定する手段と、
    前記2つの最初に検出されたファインダパターンの各々及び前記第3のファインダパターンを使用して前記QRコードを復号化する手段と、
    を有することを特徴とするコンピュータ装置。
  14. 既に検出されている二つのファインダパターンの特性に基づいてパターンマッチングテンプレートを生成する手段と、
    前記二つのファインダパターンの相対位置に基づいて、前記二つのファインダパターンと共にQRコードを構成する残り一つのファインダパターンが存在しうる候補領域を決定する手段と、
    前記候補領域のコンテンツと前記生成されたパターンマッチングテンプレートとの相関を取ることにより、前記決定された候補領域から、残り一つのファインダパターンを検出する手段と
    を有することを特徴とする装置。
  15. 既に検出されている二つのファインダパターンの相対位置に基づいて、当該二つのファインダパターンと共にQRコードを構成する残り一つのファインダパターンが存在しうる候補領域を決定する手段と、
    前記候補領域のコンテンツと前記生成されたパターンマッチングテンプレートとの相関を取ることにより、前記決定された候補領域から、残り一つのファインダパターンを検出する手段と
    を有することを特徴とする装置。
  16. 既に検出されている二つのファインダパターンの特性に基づいてパターンマッチングテンプレートを生成する工程と、
    前記二つのファインダパターンの相対位置に基づいて、前記二つのファインダパターンと共にQRコードを構成する残り一つのファインダパターンが存在しうる候補領域を決定する工程と、
    前記候補領域のコンテンツと前記生成されたパターンマッチングテンプレートとの相関を取ることにより、前記決定された候補領域から、残り一つのファインダパターンを検出する工程と
    を有することを特徴とする方法。
  17. 既に検出されている二つのファインダパターンの相対位置に基づいて、当該二つのファインダパターンと共にQRコードを構成する残り一つのファインダパターンが存在しうる候補領域を決定する工程と、
    前記候補領域のコンテンツと前記生成されたパターンマッチングテンプレートとの相関を取ることにより、前記決定された候補領域から、残り一つのファインダパターンを検出する工程と
    を有することを特徴とする方法。
  18. 請求項16又は17に記載の方法をコンピュータに実行させるためのプログラム。
JP2009285726A 2008-12-22 2009-12-16 コード検出及び復号化システム Active JP5393428B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
AU2008261177 2008-12-22
AU2008261179A AU2008261179B2 (en) 2008-12-22 2008-12-22 QR code decoding system
AU2008261179 2008-12-22
AU2008261177A AU2008261177B2 (en) 2008-12-22 2008-12-22 Target feature detection system

Publications (3)

Publication Number Publication Date
JP2010170539A JP2010170539A (ja) 2010-08-05
JP2010170539A5 JP2010170539A5 (ja) 2013-01-10
JP5393428B2 true JP5393428B2 (ja) 2014-01-22

Family

ID=42264572

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009285726A Active JP5393428B2 (ja) 2008-12-22 2009-12-16 コード検出及び復号化システム

Country Status (2)

Country Link
US (1) US9355293B2 (ja)
JP (1) JP5393428B2 (ja)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100315483A1 (en) * 2009-03-20 2010-12-16 King Keith C Automatic Conferencing Based on Participant Presence
US8542492B2 (en) * 2009-12-10 2013-09-24 Richard Anthony Dunn, JR. Scalable up and down nesting integrated electronic enclosures with form factors including asteroids and/or dumbbells and/or approximated tessellation(s)/tiling(s) or combinations thereof with thermal management, wiring, sliding fit, manual and/or automated full range vertical to horizontal positioning, access and structural systems for individual modules and intra-and inter-planar stacks, columns, rows, arrays and associated infrastructures
US8842153B2 (en) 2010-04-27 2014-09-23 Lifesize Communications, Inc. Automatically customizing a conferencing system based on proximity of a participant
US8786666B2 (en) 2010-04-27 2014-07-22 Lifesize Communications, Inc. Providing separate video and presentation streams to a recording server
AU2010257441B2 (en) * 2010-12-24 2012-09-20 Canon Kabushiki Kaisha Method, apparatus and system for identifying candidate pairs of finder patterns of a barcode
CN102842084A (zh) * 2011-03-30 2012-12-26 赛乐得公司 使用不支持的交易标识符类型来促进交易
US8717400B2 (en) 2011-07-29 2014-05-06 Lifesize Communications, Inc. Automatically moving a conferencing based on proximity of a participant
US20130084004A1 (en) * 2011-09-30 2013-04-04 Konica Minolta Laboratory U.S.A., Inc. Image processing of data from scanned display
US8608074B2 (en) 2011-12-20 2013-12-17 Seiko Epson Corporation Method and apparatus for locating and decoding machine-readable symbols
US9245445B2 (en) * 2012-02-21 2016-01-26 Ricoh Co., Ltd. Optical target detection
JP5908113B2 (ja) * 2012-11-13 2016-04-26 共同印刷株式会社 二次元コード
US10394419B2 (en) * 2012-12-01 2019-08-27 Gspi B.V. Device, a method and a server for retrieving information using a machine readable image
JP2015032213A (ja) * 2013-08-05 2015-02-16 株式会社東芝 情報処理装置、方法、及びプログラム
CN104517090B (zh) * 2013-09-29 2017-09-05 北大方正集团有限公司 一种qr码探测图形的检测方法及系统
CN104517091A (zh) * 2013-09-29 2015-04-15 北大方正集团有限公司 一种qr码探测图形的筛选方法及系统
US20150161350A1 (en) * 2013-12-06 2015-06-11 International Business Machines Corporation Selectable message barcode for healthcare
WO2015147862A1 (en) * 2014-03-28 2015-10-01 Hewlett-Packard Development Company, L.P. Determine presence of quasi-periodic two-dimensional object
JP6481957B2 (ja) * 2014-08-20 2019-03-13 富士ゼロックス株式会社 画像処理装置およびプログラム
US9424504B2 (en) * 2014-09-15 2016-08-23 Paypal, Inc. Combining a QR code and an image
US9460503B2 (en) 2015-02-02 2016-10-04 Arris Enterprises, Inc. Automated video testing using QR codes embedded in a video stream
EP3109823A1 (en) * 2015-06-22 2016-12-28 Sick IVP AB Method and arrangements for estimating one or more dominating orientations in a digital image
US9501681B1 (en) 2015-07-14 2016-11-22 A9.Com, Inc. Decoding visual codes
CN105138943B (zh) * 2015-09-02 2017-10-24 福建联迪商用设备有限公司 Qr码位置探测图形破损时的解码方法及系统
US20170078145A1 (en) * 2015-09-16 2017-03-16 Kodak Alaris, Inc. Simplified configuration of network devices using scanned barcodes
WO2017113290A1 (zh) * 2015-12-31 2017-07-06 深圳配天智能技术研究院有限公司 一种一维码定位的方法及装置
CN106384143B (zh) * 2016-09-20 2020-03-17 北京兆信信息技术股份有限公司 一种动态电子二维码生成方法及识别方法
CN106529370B (zh) * 2016-10-18 2019-08-13 福州觉感视觉软件科技有限公司 一种多qr码识别方法
CN106778440B (zh) * 2016-12-21 2020-04-21 腾讯科技(深圳)有限公司 二维码识别方法及装置
CN106874906B (zh) * 2017-01-17 2023-02-28 腾讯科技(上海)有限公司 一种图片的二值化方法、装置及终端
CN112861560B (zh) 2017-09-27 2023-12-22 创新先进技术有限公司 二维码定位方法及装置
CN109960957B (zh) 2017-12-26 2022-12-16 阿里巴巴集团控股有限公司 残缺二维码及其生成、修复和识别方法、装置及系统
US10572783B2 (en) 2017-12-26 2020-02-25 Paypal, Inc. Contextual machine readable codes
CN108388822B (zh) * 2018-01-25 2021-03-23 微梦创科网络科技(中国)有限公司 一种检测二维码图像的方法和装置
CN109359999B (zh) * 2018-08-21 2021-10-29 同济大学 用于商品外包装的二维线段图形的编解码方法
JP2020064374A (ja) 2018-10-15 2020-04-23 富士通株式会社 コード情報読取装置、方法、及びプログラム
JP2020064373A (ja) 2018-10-15 2020-04-23 富士通株式会社 コード情報読取装置、方法、及びプログラム
US11212521B2 (en) * 2018-11-07 2021-12-28 Avago Technologies International Sales Pte. Limited Control of memory bandwidth consumption of affine mode in versatile video coding
CN109711223A (zh) * 2018-12-28 2019-05-03 福州符号信息科技有限公司 一种提升qr码解码率方法及设备
CN110020571B (zh) * 2019-03-18 2022-05-13 创新先进技术有限公司 二维码校正方法、装置及设备
US10701353B1 (en) * 2019-03-20 2020-06-30 United States Of America, As Represented By The Secretary Of The Army Pattern, method, and apparatus for testing imaging system performance
CN109977720B (zh) * 2019-03-28 2021-07-20 尤尼泰克(嘉兴)信息技术有限公司 一种快速解析二维码图像的方法及装置
US11301223B2 (en) 2019-08-19 2022-04-12 International Business Machines Corporation Artificial intelligence enabled function logic infusion
WO2021046173A1 (en) 2019-09-06 2021-03-11 Vitiprints, LLC Image and quick art response code system
US11538265B2 (en) 2020-03-11 2022-12-27 Universal City Studios Llc Orientation tag for providing orientation information
CN111597853B (zh) * 2020-05-26 2023-02-24 成都鹏业软件股份有限公司 一种混凝土标识提取方法
CN112199972A (zh) * 2020-10-28 2021-01-08 普联技术有限公司 一种识别定位点的方法
CN113705270B (zh) * 2021-11-01 2022-02-18 深圳思谋信息科技有限公司 识别二维码定位码区的方法、装置、设备和存储介质
EP4332832B1 (de) * 2022-09-02 2024-06-26 Sick Ag Lokalisieren eines optischen codes
CN116739022B (zh) * 2023-08-15 2023-11-07 北京紫光青藤微系统有限公司 用于条码图像的译码方法、装置和电子设备
CN117725943B (zh) * 2024-02-06 2024-06-04 浙江码尚科技股份有限公司 基于数图处理的点阵码识别方法及系统

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5726435A (en) 1994-03-14 1998-03-10 Nippondenso Co., Ltd. Optically readable two-dimensional code and method and apparatus using the same
JP2938338B2 (ja) 1994-03-14 1999-08-23 株式会社デンソー 二次元コード
JP2867904B2 (ja) * 1994-12-26 1999-03-10 株式会社デンソー 2次元コード読取装置
EP0766449A3 (en) 1995-06-21 1997-09-24 Eastman Kodak Co Copy protection system
US6267296B1 (en) 1998-05-12 2001-07-31 Denso Corporation Two-dimensional code and method of optically reading the same
JP4122629B2 (ja) 1998-09-03 2008-07-23 株式会社デンソー 2次元コードの生成方法
JP2003248792A (ja) * 2002-02-22 2003-09-05 Seiko Epson Corp 2次元コードのデコード方法、2次元コードのデコード装置、コンピュータに2次元コードのデコード方法を実行させるためのプログラム、このプログラムを記録した記録媒体
US20060050961A1 (en) 2004-08-13 2006-03-09 Mohanaraj Thiyagarajah Method and system for locating and verifying a finder pattern in a two-dimensional machine-readable symbol
CN100347714C (zh) * 2004-09-07 2007-11-07 佳能株式会社 用于定位二维条形码的方法和设备
EP1904952A2 (en) * 2005-05-23 2008-04-02 Nextcode Corporation Efficient finder patterns and methods for application to 2d machine vision problems
KR100828539B1 (ko) 2005-09-20 2008-05-13 후지제롯쿠스 가부시끼가이샤 이차원 코드의 검출 방법, 검출 장치, 및 검출 프로그램을기억한 기억 매체
JP2007094584A (ja) * 2005-09-27 2007-04-12 Fuji Xerox Co Ltd 二次元コードの検出方法、検出装置、及び検出プログラム
JP4670658B2 (ja) 2006-01-25 2011-04-13 富士ゼロックス株式会社 画像処理装置、画像処理方法及びプログラム
JP4911340B2 (ja) 2006-02-10 2012-04-04 富士ゼロックス株式会社 二次元コード検出システムおよび二次元コード検出プログラム
US7546950B2 (en) * 2006-03-28 2009-06-16 Seiko Epson Corporation Method and apparatus for locating and decoding a two-dimensional machine-readable symbol

Also Published As

Publication number Publication date
JP2010170539A (ja) 2010-08-05
US9355293B2 (en) 2016-05-31
US20100155464A1 (en) 2010-06-24

Similar Documents

Publication Publication Date Title
JP5393428B2 (ja) コード検出及び復号化システム
JP6354589B2 (ja) 物体識別装置、方法及びプログラム
JP2010170539A5 (ja)
WO2014160426A1 (en) Classifying objects in digital images captured using mobile devices
EP2974261A2 (en) Systems and methods for classifying objects in digital images captured using mobile devices
JP4522468B2 (ja) 画像判別装置、画像検索装置、画像検索プログラムおよび記録媒体
JP2000105829A (ja) 顔パーツ検出方法及びその装置
US8538170B2 (en) System and method for document location and recognition
JP4406027B2 (ja) バーコード復号方法及び装置
CN113011426A (zh) 一种识别证件的方法和装置
US8064636B2 (en) Image processing apparatus and method of controlling the same
CN110569845A (zh) 一种试卷图像的校正方法及相关装置
US20060279767A1 (en) Method and apparatus for detecting specific pattern and copying machine including the same
CN112818983B (zh) 一种利用图片相识度判断字符倒置的方法
US7155051B2 (en) Image recognition apparatus, image recognition method and image recognition program for specific pattern
JP2006099326A (ja) 平面4指画像判定装置、平面4指画像判定方法及び平面4指画像判定プログラム
Shapiro et al. On hausdorff distance measures
KR100726473B1 (ko) 이미지 분별 장치 및 그 방법
JPH1125215A (ja) 帳票種識別方法、装置および記録媒体
US9792485B2 (en) Systems and methods for coarse-to-fine ridge-based biometric image alignment
JP2007140729A (ja) 物品の位置及び姿勢を検出する方法および装置
AU2008261179B2 (en) QR code decoding system
AU2014277851A1 (en) Detecting a gap between text columns from text line fragments
AU2008261177B2 (en) Target feature detection system
US20150178255A1 (en) Text line fragments for text line analysis

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121116

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121116

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130802

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130820

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130917

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131015

R151 Written notification of patent or utility model registration

Ref document number: 5393428

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151