(57)【要約】      （修正有）【課題】ドットゲイン、ノイズ及び他の種類の損失に対して非常に高いロバスト性を有するＱＲコード（登録商標）を検出及び復号化する方法を提供する。更に、取得した画像に複数のＱＲコードが存在する場合でも、ファインダパターンをグループ化して有効なＱＲコード領域を形成する。【解決手段】最初に検出された２つのファインダパターン２９０１、２９０２の特性に基づいてパターンマッチングテンプレートを形成し、検出されたファインダパターンに近接する少なくとも１つの候補領域２９０３、２９０４を判定する。この候補領域のコンテンツをパターンマッチングテンプレートと相関することにより少なくとも１つの候補領域においてＱＲコードの先に検出されなかった第３のファインダパターンを検出する。ＱＲコードの復号化は、識別された第３のファインダパターン及び最初に検出された２つのファインダパターンの各々を使用して実行する。【選択図】図２９Ａ
2010170539.tif 000002
【特許請求の範囲】
【請求項１】
２つの最初に検出されたファインダパターンを有するＱＲコードを復号化する方法を実行するためのプロセッサと前記ファインダパターンを含む画像が格納される関連メモリとを少なくとも含むコンピュータにより実現される方法であって、
（ａ）前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成するステップと、
（ｂ）前記ＱＲコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づかれる候補領域であり、前記検出されたファインダパターンに関して少なくとも１つの候補領域を決定するステップと、
（ｃ）前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも１つの候補領域の中の前記ＱＲコードの先に検出されなかった第３のファインダパターンの位置を特定するステップと、
（ｄ）前記２つの最初に検出されたファインダパターンの各々及び前記第３のファインダパターンを使用して前記ＱＲコードを復号化するステップと、
を有することを特徴とする方法。
【請求項２】
前記２つの最初に検出されたファインダパターンは、連結成分解析を使用して検出されることを特徴とする請求項１記載の方法。
【請求項３】
前記検出されたファインダパターンの前記特性は、回転角及びモジュールサイズを含むことを特徴とする請求項１記載の方法。
【請求項４】
前記検出されたファインダパターンの前記特性は、黒色モジュールサイズ及び白色モジュールサイズを更に含むことを特徴とする請求項３記載の方法。
【請求項５】
前記検出されたファインダパターンの前記特性は、前記検出されたファインダパターンの少なくとも一方の画素の輝度値に基づくことを特徴とする請求項１記載の方法。
【請求項６】
ステップ（ｄ）は、前記第３のファインダパターンの場所及び前記２つの最初に検出されたファインダパターンの場所を使用して前記ＱＲコードを復号化することを含むことを特徴とする請求項１記載の方法。
【請求項７】
２つの最初に検出されたファインダパターンを有するＱＲコードを復号化するためにコンピュータ装置により実行可能なコンピュータプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、前記プログラムは、
前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成するコードと、
前記ＱＲコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づかれる候補領域であり、前記検出されたファインダパターンに関して少なくとも１つの候補領域を決定するコードと、
前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも１つの候補領域の中の前記ＱＲコードの先に検出されなかった第３のファインダパターンの位置を特定するコードと、
前記２つの最初に検出されたファインダパターンの各々及び前記第３のファインダパターンを使用して前記ＱＲコードを復号化するコードと、
を含むことを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項８】
前記２つの最初に検出されたファインダパターンは、連結成分解析を使用して検出されることを特徴とする請求項７記載のコンピュータ読み取り可能な記憶媒体。
【請求項９】
前記検出されたファインダパターンの前記特性は、回転角及びモジュールサイズを含むことを特徴とする請求項７記載のコンピュータ読み取り可能な記憶媒体。
【請求項１０】
前記検出されたファインダパターンの前記特性は、黒色モジュールサイズ及び白色モジュールサイズを更に含むことを特徴とする請求項９記載のコンピュータ読み取り可能な記憶媒体。
【請求項１１】
前記検出されたファインダパターンの前記特性は、前記検出されたファインダパターンの少なくとも一方の画素の輝度値に基づくことを特徴とする請求項８記載のコンピュータ読み取り可能な記憶媒体。
【請求項１２】
前記復号化するコードは、前記第３のファインダパターンの場所及び前記最初に検出された２つのファインダパターンの場所を使用して前記ＱＲコードを復号化するコードを含むことを特徴とする請求項７記載のコンピュータ読み取り可能な記憶媒体。
【請求項１３】
２つの最初に検出されたファインダパターンを有するＱＲコードを復号化するコンピュータ装置であって、
前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成する手段と、
前記ＱＲコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づかれる候補領域であり、前記検出されたファインダパターンに関して少なくとも１つの候補領域を判定する手段と、
前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも１つの候補領域の中の前記ＱＲコードの先に検出されなかった第３のファインダパターンの位置を特定する手段と、
前記２つの最初に検出されたファインダパターンの各々及び前記第３のファインダパターンを使用して前記ＱＲコードを復号化する手段と、
を有することを特徴とするコンピュータ装置。
【請求項１４】
画像中において周知の目標特徴が連続する黒色領域を含み、前記黒色領域の全体が連続する白色領域により囲まれ、前記白色領域の全体が連続する黒色領域により囲まれている当該目標特徴を有する２次元コード及び符号化データを検出するコンピュータにより実現される方法であって、
関心候補特徴を判定するために前記画像の行毎の連結成分解析を行うステップであり、前記行毎の連結成分解析が関心候補特徴に対応する計測値を集約することを含むステップと、
各関心候補特徴が前記目標特徴とどの程度類似するかを決定するために前記集約された計測値を評価するステップと、
複数の関心候補特徴から１つの関心候補領域を形成するステップと、
を有することを特徴とする方法。
【請求項１５】
前記符号化データを抽出するステップと、
前記画像の適応２値化を行うステップとを更に含むことを特徴とする請求項１４記載の方法。
【請求項１６】
前記目標特徴は、著作権記号及び登録商標記号から成るグループから選択されることを特徴とする請求項１５記載の方法。
【請求項１７】
画像中の著作権記号を検出するコンピュータにより実現可能な方法であって、
前記画像の適応２値化を行うステップと、
関心候補特徴を識別するために前記２値化画像の行毎の連結成分解析を行うステップであり、前記行毎の連結成分解析が関心候補特徴に対応する計測値を集約することを含むステップと、
各関心候補特徴が著作権記号とどの程度類似するかを示す類似性スコアを計算するステップと、
検出結果を提供するために前記類似性スコアを閾値処理するステップと、
を有することを特徴とする方法。
【請求項１８】
画像中の登録商標記号を検出するコンピュータにより実現可能な方法であって、
前記画像の適応２値化を行うステップと、
関心候補特徴を識別するために前記２値化画像の行毎の連結成分解析を行うステップであり、前記行毎の連結成分解析が関心候補特徴に対応する計測値を集約することを含むステップと、
各関心候補特徴が登録商標記号とどの程度類似するかを示す類似性スコアを計算するステップと、
検出結果を提供するために前記類似性スコアを閾値処理するステップと、
を有することを特徴とする方法。
【請求項１９】
画像中において周知の目標特徴が連続する黒色領域を含み、前記黒色領域の全体が連続する白色領域により囲まれ、前記白色領域の全体が連続する黒色領域により囲まれている当該目標特徴を有する２次元コード及び符号化データを検出するコンピュータ装置により実現可能なコンピュータプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、前記プログラムは、
関心候補特徴を判定するために前記画像の行毎の連結成分解析を行うコードであり、前記行毎の連結成分解析が関心候補特徴に対応する計測値を集約することを含むコードと、
各関心候補特徴が前記目標特徴とどの程度類似するかを決定するために前記集約された計測値を評価するコードと、
複数の関心候補特徴から１つの関心候補領域を形成するコードと、
を有することを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項２０】
画像中において周知の目標特徴が連続する黒色領域を含み、前記黒色領域の全体が連続する白色領域により囲まれ、前記白色領域の全体が連続する黒色領域により囲まれている当該目標特徴を有する２次元コード及び符号化データを検出するためのコンピュータ装置であって、
関心候補特徴を判定するために前記画像の行毎の連結成分解析を行う手段であり、前記行毎の連結成分解析が関心候補特徴に対応する計測値を集約することを含む手段と、
各関心候補特徴が前記目標特徴とどの程度類似するかを決定するために前記集約された計測値を評価する手段と、
複数の関心候補特徴から１つの関心候補領域を形成する手段と、
を有することを特徴とするコンピュータ装置。
【請求項２１】
メモリに結合されるプロセッサと、
前記プロセッサに結合され、文書の走査図に画像が前記メモリに格納される際に使用されるスキャナと、
前記走査済画像中において周知の目標特徴が連続する黒色領域を含み、前記黒色領域の全体が連続する白色領域に囲まれ、前記白色領域の全体が連続する黒色領域により囲まれている当該目標特徴を有する２次元コード及び符号化データを検出する前記プロセッサにより実行可能であり且つ前記メモリに記録されたプログラムとを有する複写機であって、前記プログラムは、
関心候補特徴を判定するために前記画像の行毎の連結成分解析を行うコードであり、前記行毎の連結成分解析が関心候補特徴に対応する計測値を集約することを含むコードと、
各関心候補特徴が前記目標特徴とどの程度類似するかを決定するために前記集約された計測値を評価するコードと、
複数の関心候補特徴から１つの関心候補領域を形成するコードと、
前記走査済画像を使用して前記文書の複写機能を有効又は無効にするために前記候補領域を少なくとも１つの所定の目標特徴とを比較するコードと、
を含むことを特徴とする複写機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、識別マーカ又は目標特徴検出及びその結果として起こるコード復号化に関する。更に本発明は、ＱＲコード領域を形成するための複数の識別マーカの探索及びグループ化に関する。それらのＱＲコード領域は、識別されるとＱＲコードシンボルにより符号化されるデータを復号化するために使用されても良い。
【背景技術】
【０００２】
デジタル画像が出現したため、デジタル画像処理の目的は画像中の特徴を識別し、且つその位置を特定することである。この目的を達成するために、多くのアルゴリズムや方法が開発されている。
【０００３】
走査済画像中の目標特徴を検出する簡単な方法は、例えばテンプレート相関として周知である。ここで、求められる目標特徴の代表的な画像が形成されてメモリに格納される。その後、代表的な画像（又はテンプレート）を走査済画像上でステップ毎に比較し、相関スコアをステップ位置毎に計算する。相関スコアの急激なピークは、走査済画像における目標特徴の存在及び場所を示す。しかし、この方法はいくつかの制限を有する。テンプレート相関の主な制限は、テンプレートに対するデジタル画像のサイズ及び回転の差に非常に影響されやすいことである。従って、ロバストな尺度不変性及び回転不変性の検出システムのために複数のテンプレートが形成される必要があり、これは非常に複雑なシステムを必要とする。
【０００４】
走査済画像において目標特徴を検出する別の方法は、統計的な手段により実行される。ここで、機械は種々の機械学習アルゴリズムにより目標特徴を識別するように訓練される。一般に訓練処理は、目標特徴を含む画像及び目標特徴を含まない画像の大きなテスト集合を入力することを含む。訓練処理の結果として、画像中の新しい「見えなかった」目標特徴を検出する時に使用される分類ベクトルが生成される。しかし、この方法は、訓練処理中に入力されたテスト集合に大きく依存する。結果として得られる分類ベクトルは予測不可能であり、目標特徴の主な特徴には無関係である場合がある。
【０００５】
走査済画像において目標特徴を検出する別の方法は、単純であり、且つ効率的である。ここで、黒色領域及び白色領域の周知の構成を有する目標特徴がそれらの黒色領域と白色領域との間の比率を検査することにより検出されても良い。一例として、図１の特徴１００などの目標特徴は黒：白：黒：白：黒が１：１：３：１：１となる比率を見つけた場合に検出される。この方法は実現するのに非常に容易で、且つ効率的であるが、目標特徴の画像がドットゲインとして周知の歪み効果により影響を受ける場合に不利になる。ドットゲインは、印刷された黒色領域の厚さを縮小又は増加するプリンタ歪みである。これは、黒色領域及び白色領域の比率に直接影響を及ぼす。従って、この方法はドットゲインが存在する場合には不適切である。
【０００６】
図３のコード３００などのＱＲコードは、「モジュール」と呼ばれる、黒色及び白色の正方形ブロックで情報を符号化する２次元バーコードである。ＱＲコード３００において、黒色モジュール３０２及び白色モジュール３０１にはラベルが付けられる。ＱＲコードは、データ容量の範囲を有する。「バージョン１」のＱＲコードは最小データビット数を符号化し、「バージョン４０」のＱＲコードは最大データビット数を符号化する。更なるデータビットを符号化するＱＲコードは、より多くのモジュールを有する。データ容量に関係なく、常にＱＲコードは高さと同一のモジュール数の幅である。即ち、常にＱＲコードは正方形である。
【０００７】
ＱＲコードは、３つの場所／識別記号を含む。それらの３つの場所記号は「ファインダパターン」（ＦＰ）として周知であり、それらの位置はＱＲコードの左上、右上及び左下の隅で特定される。従って、「ＱＲコード領域」としても周知であるＱＲコードにより専有される画像の２次元領域は、３つのＦＰの場所により境界が決定される。図２Ｂは、ＱＲコード２００の３つの隅で位置が特定されても良いような３つのＦＰ２０１、２０２、２０３を示す。図２Ａは、ＦＰ２０２の拡大された表現を提供する。図１は、ＱＲコードファインダパターン１００を詳細に示す図である。ファインダパターンは白色モジュール１０２の５×５正方形上に重畳される黒色モジュール１０３の３×３正方形から構成され、白色モジュール１０２は黒色モジュール１０１の７×７正方形上に重畳される。
【０００８】
ＱＲコードに符号化されるデータを抽出する処理は、コードを含む画像の取得から開始する。その後、全ての３つのファインダパターンが検出され、それらの場所が判定される。ＱＲコードのデータモジュールは、検出されたＦＰの場所情報を使用してサンプリングされ、バイナリデータストリームを取得する。最後に、バイナリデータストリームは有意味なテキスト又は数値情報に変換される。
【０００９】
ＱＲコードは、製品ラベル、広告及び名刺などの広範な媒体上に含まれることが多い。一般に、これらの媒体は、高品質の単一のＱＲコードのみを含んでいる（即ち、元のＱＲコードのデジタル画像が媒体上に正確に再現されている）。従って、ＱＲコードが復号化されている時、取得された画像には単一のＱＲコードのみが存在し、コードの品質が高いため、相対的に単純な復号化処理の使用を容易にする。更に、従来のＱＲコード取り込み装置（カメラフォンなど）は、回転の位置ずれが殆どないＱＲコードの画像が取得されるようにユーザにより調整される。それらのユーザにより調整される取り込み装置は、ＱＲコードのモジュールのサイズ（取り込み装置に対する）が制限された周知の範囲内になるようにＱＲコードを作成できる。
【００１０】
近年、文書のセキュリティ及びワークフロー管理を支援する際のＱＲコードの適用に対する関心が高まっている。これらの応用例の場合、取得された画像には複数のＱＲコードが存在する場合がある。更に、多くの場合、画像中のＱＲコードのうちで、モジュールのサイズ及び向きが大きく異なっても良い。ＱＲコードは、何回も印刷、走査及び再印刷されても良いが、その度にＱＲコードの画質は低下する。特に、ＱＲコードは、ＱＲコードにおける黒色モジュールのサイズと白色モジュールのサイズとの比率が理想的な１：１の比率とは大きく異なる「ドットゲイン」の悪影響を受ける可能性がある。複数回の印刷／走査により、ノイズ及び他の歪みが導入され、理想的なＦＰ１００と比較してＱＲコードファインダパターンの外形を更に変更する。従来の技術を使用する復号化信頼性に対するドットゲイン、並びに他の印刷及び／又は走査による歪みの影響が考慮される。これは、一般に従来の復号化システムがＱＲコードファインダパターン１００の予想される外形、特に白色モジュールのサイズと黒色モジュールのサイズとの１：１の比率に大きく依存し、ＱＲコードファインダパターンを検出し、且つそれによりＱＲコードを復号化するためである。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
説明するいくつかの構成は、ドットゲイン、ノイズ及び他の種類の損失に対して非常に高いロバスト性を有するＱＲコードを検出及び復号化する方法を提供する。更に、取得した画像に複数のＱＲコードが存在する場合でも、構成はＱＲファインダパターンをグループ化して有効なＱＲコード領域を形成できる。
【００１２】
簡単に説明すると、ここで開示されるＱＲ検出構成は、４つの基本的な段階、即ち２値化、ＣＣＡ、分解及び復号化を含む。これらの段階については、後で更に詳細に説明する。
【００１３】
その構成は、従来のＦＰ検出方法より有用な情報を分解段階及び復号化段階に提供する連結成分解析（ＣＣＡ）を使用するＱＲ ＦＰを検出し且つそれらの位置を特定する方法を使用する。
【００１４】
本発明の一態様は、ＱＲ ＦＰをＱＲコード領域にグループ化するための新しい方法を使用する。ここで、ＱＲコードを形成するために複数のＱＲ ＦＰをグループ化する処理を「分解」と呼ぶ。他の態様である、損失ファインダパターン回復処理と共に適用される、ここで開示される分解方法は、最初に検出される２つのＱＲ ＦＰのみからＱＲコード領域を分解できる。このことは、本発明者が知る限り従来の方法では達成されておらず、３つのＦＰのうち１つが損失した場合にＱＲコードが復号化されることを可能にする。
【００１５】
全般的に言うと、上述の態様を取り入れた開示される復号化方法により、３つのＦＰのうち１つが損失した場合でも、ＱＲコードを復号化できる非常に高いロバスト性を有するＱＲコード復号化システムが可能である。この損失は、偶発的な汚れ又はペンストローク、或いは複数回の印刷／走査により、引き起こされた深刻なノイズが原因である可能性がある。
【課題を解決するための手段】
【００１６】
本発明の一態様によれば、２つの最初に検出されたファインダパターンを有するＱＲコードを復号化する方法を実行するためのプロセッサと前記ファインダパターンを含む画像が格納される関連メモリとを少なくとも含むコンピュータにより実現される方法であって、
（ａ）前記検出されたファインダパターンの特性に基づいてパターンマッチングテンプレートを形成するステップと、
（ｂ）前記ＱＲコードの中の前記検出されたファインダパターンの相対位置に少なくとも基づかれる候補領域であり、前記検出されたファインダパターンに関して少なくとも１つの候補領域を決定するステップと、
（ｃ）前記候補領域のコンテンツを前記パターンマッチングテンプレートと相関することにより前記少なくとも１つの候補領域の中の前記ＱＲコードの先に検出されなかった第３のファインダパターンの位置を特定するステップと、
（ｄ）前記２つの最初に検出されたファインダパターンの各々及び前記第３のファインダパターンを使用して前記ＱＲコードを復号化するステップと、
を有することを特徴とする方法が提供される。
【００１７】
本発明の他の態様は、各連結成分の低レベル計測値を同時に集約する連結成分解析を実行する新しい方法である。その後、低レベル計測値は、連結成分の幾何学的特性に直接関連付けられる形状計測値に変換される。形状計測値は、実質的にサイズ不変性及び回転不変性である類似性スコアを計算するために使用される。
【００１８】
説明される構成は、メモリ効率が良く、ＦＰＧＡ又はＡＳＩＣ等のカスタマイズされたハードウェア論理として実装することに適する。更に構成は、ドットゲイン等のプリンタ及びスキャナのノイズ及び歪みに対して高いロバスト性を有する。
【００１９】
本発明の他の態様によれば、画像中において周知の目標特徴を有する２次元コード及び符号化データを検出する方法が提供される。目標特徴は連続する黒色領域を含み、その黒色領域の全体は連続する白色領域により囲まれ、その白色領域の全体は連続する黒色領域により囲まれている。方法は、関心候補特徴を判定するために画像の行毎の連結成分解析を実行する。行毎の連結成分解析は、関心候補特徴に対応する計測値を集約する。方法は、各関心候補特徴が目標特徴とどの程度類似するかを判定するために集約された計測値を評価し、複数の関心候補特徴から１つの関心候補領域を形成する。一般に目標特徴は、著作権記号及び登録商標記号を含む。
【００２０】
他の態様が更に開示される。
【図面の簡単な説明】
【００２１】
【図１】目標特徴とも考えられてもよいＱＲコード「ファインダパターン」の理想的な構成を示す図である。
【図２Ａ】、
【図２Ｂ】ノイズ及びドットゲインにより影響を受けるＱＲコードを示す図である。
【図３】黒色モジュール及び白色モジュールの例を含むＱＲコードを示す図である。
【図４】ＱＲコード復号化処理を示すフローチャートである。
【図５】図４のステップ４０４で採用された分解処理に対する一般的な概要を示すフローチャートである。
【図６】３つのファインダパターンのグループをＱＲコード領域に分解するために図５のステップ５０２で採用された処理の一般的な概要を示すフローチャートである。
【図７】３つのファインダパターンのグループがＱＲコード領域を潜在的に形成しても良いことをチェックする処理を詳細に示すフローチャートである。
【図８Ａ】、
【図８Ｂ】、
【図８Ｃ】図６のステップ６０２で実行されるチェックが失敗するいくつかの例を示す図である。
【図９】「真」の３／３領域を見つけるためにステップ６０３で採用される処理を示すフローチャートである。
【図１０Ａ】、
【図１０Ｂ】、
【図１０Ｃ】内部ファインダパターンを有するＱＲコード領域及び有さないＱＲコード領域の例を示す図である。
【図１１】３／３ＱＲコードが内部ファインダパターンを含むかを判定するために使用されるベクトルを示す図である。
【図１２】２つのファインダパターンのグループをＱＲコード領域に分解するためにステップ５０３で採用される処理の一般的な概要を示すフローチャートである。
【図１３】１対のファインダパターンがＱＲコード領域を潜在的に形成しても良いことをチェックする処理を詳細に示すフローチャートである。
【図１４】１２０３で実行されるチェックが失敗する例を示す図である。
【図１５Ａ】、
【図１５Ｂ】、
【図１５Ｃ】垂直及び対角に配向された２／３領域を示す図である。
【図１６】潜在的な２／３領域を生成するためにステップ１２０３で採用される処理を示すフローチャートである。
【図１７Ａ】、
【図１７Ｂ】検出されたファインダパターンに対して潜在的なＱＲコード領域を示す図である。
【図１８Ａ】、
【図１８Ｂ】潜在的なＱＲコード領域の範囲を判定するために使用される検出されたファインダパターンに対するベクトルを示す図である。
【図１９】「真」の２／３領域を見つけるためにステップ１２０４で採用される処理を示すフローチャートである。
【図２０Ａ】、
【図２０Ｂ】２／３ＱＲコード領域が内部ファインダパターンを含むかを判定するために使用されるベクトルを示す図である。
【図２１】ＱＲコード領域を復号化するためにステップ４０５で採用される処理の一般的な概要を示すフローチャートである。
【図２２】３／３領域を復号化するためにステップ２１０２で採用される処理を詳細に示すフローチャートである。
【図２３】２／３領域を復号化するためにステップ２１０３で採用される処理を詳細に示すフローチャートである。
【図２４】２／３領域において損失するファインダパターンを検出するためにステップ２３０４で採用される処理を詳細に示すフローチャートである。
【図２５】ＣＣＡ情報からパターンマッチングテンプレートを形成するためにステップ２４０２で採用される処理の一般的な概要を示すフローチャートである。
【図２６】最初に検出される２つのファインダパターンを平均することによりパターンマッチングテンプレートを形成するためにステップ２４０２で採用されてもよい別の処理の一般的な概要を示すフローチャートである。
【図２７】ドットゲイン情報を考慮してメモリに形成されるテンプレートの一例を示す図である。
【図２８】メモリに形成され且つ回転されたテンプレートの一例を示す図である。
【図２９Ａ】、
【図２９Ｂ】探索領域、並びに垂直及び対角に配向されたＱＲコード領域における検出されたファインダパターンとそれらの探索領域との関係の例を示す図である。
【図３０】探索領域の範囲を判定するために形成されるベクトル及び角度を示す図である。
【図３１】ステップ１２０１のチェック及び２３０４で採用される損失するファインダパターンを検出する処理を助長するために利用されてもよいＱＲコードの種々の固有の特徴を示す図である。
【図３２】固有のＱＲコードの特徴を利用して損失するファインダパターンを検出する別の処理を示すフローチャートである。
【図３３Ａ】、
【図３３Ｂ】説明する構成が実現可能である汎用コンピュータシステムを示す概略ブロック図である。
【図３４】本発明の状況において有効である別の目標特徴を示す図である。
【図３５】目標特徴を含むデジタル画像を示す図である。
【図３６】本発明の状況において目標特徴検出方法を示すフローチャートである。
【図３７】デジタル画像３００から作成される２値化画像を示す図である。
【図３８】本発明の構成において使用されてもよい２値化方法を示すフローチャートである。
【図３９】デジタル画像３００がモザイク状のタイルに分割される方法を示す図である。
【図４０】タイルバッファの２次元配列構造を示す図である。
【図４１】目標特徴に重ね合わされるタイルから構成されるスライディングウィンドウを示す図である。
【図４２】メモリ効率の良いタイルバッファを示す図である。
【図４３】本発明において使用される連結成分解析の方法を示すフローチャートである。
【図４４】ＣＣとそのクレームと走査線上のランとの関係を示す図である。
【図４５】ランの処理方法を示すフローチャートである。
【図４６】形状計測値を評価する方法を示すフローチャートである。
【図４７】候補特徴及びその中間計測値の関係を示す図である。
【図４８】ＱＲコードを示す図である。
【図４９】ＱＲコード復号化のための目標特徴検出の状況における後処理方法を示すフローチャートである。
【図５０】候補特徴を候補領域に分解する方法を示すフローチャートである。
【図５１】内部候補特徴を含む候補領域を除去する方法を示すフローチャートである。
【図５２】内部候補特徴を含む候補領域を示す図である。
【図５３】著作権の記号を示す図である。
【図５４】著作権の記号を検出するための後処理方法を示すフローチャートである。
【図５５】登録商標の記号を示す図である。
【発明を実施するための形態】
【００２２】
次に、図面を参照して、本発明の少なくとも１つの実施形態を説明する。
動作環境
図３３Ａ及び図３３Ｂは、説明する種々の構成が実現される汎用コンピュータシステム３３００の概略ブロック図を集合的に形成する。
【００２３】
図３３Ａから分かるように、コンピュータシステム３３００は、コンピュータ装置モジュール３３０１と、キーボード３３０２、マウスポインタデバイス３３０３、スキャナ３３２６、カメラ３３２７及びマイク３３８０などの入力装置と、プリンタ３３１５、表示装置３３１４及びスピーカ３３１７を含む出力装置とにより形成される。外部変復調器（モデム）トランシーバ装置３３１６は、接続３３２１を介して通信ネットワーク３３２０と通信するコンピュータモジュール３３０１により使用されても良い。ネットワーク３３２０は、インターネット又は専用ワイドエリアネットワーク（ＷＡＮ）などのＷＡＮであっても良い。接続３３２１が電話回線である場合、モデム３３１６は従来の「ダイヤルアップ」モデムであっても良い。或いは、接続３３２１が大容量（例えば、ケーブル）接続である場合、モデム３３１６はブロードバンドモデムであっても良い。無線モデムは、ネットワーク３３２０に無線接続するために使用されても良い。
【００２４】
一般に、コンピュータ装置３３０１は、少なくとも１つのプロセッサユニット３３０５と、例えば半導体ランダムアクセスメモリ（ＲＡＭ）及び半導体読み出し専用メモリ（ＲＯＭ）から形成されるメモリユニット３３０６とを含む。モジュール３３０１は、ビデオ表示装置３３１４、スピーカ３３１７及びマイク３３８０に結合するオーディオビデオインタフェース３３０７と、キーボード３３０２、マウス３３０３、スキャナ３３２６、カメラ３３２７及びオプションとしてジョイスティック（不図示）に対する入出力（Ｉ／Ｏ）インタフェース３３１３と、外部モデム３３１６及びプリンタ３３１５に対するインタフェース３３０８とを含む多くのＩ／Ｏインタフェースを更に含む。いくつかの実現例において、モデム３３１６は、コンピュータモジュール３３０１内、例えばインタフェース３３０８内に内蔵されても良い。コンピュータモジュール３３０１は、接続３３２３を介してコンピュータシステム３３００をローカルエリアネットワーク（ＬＡＮ）として周知のローカルコンピュータネットワーク３３２２に結合することを可能にするローカルネットワークインタフェース３３１１を更に有する。図示するように、ローカルネットワーク３３２２は、一般に、所謂「ファイアウォール」装置又は同様の機能性の装置を含む接続３３２４を介してワイドネットワーク３３２０に更に結合しても良い。インタフェース３３１１は、Ethernet（登録商標）回路カード、Bluetooth（登録商標）無線構成又はＩＥＥＥ８０２．１１無線構成により形成されても良い。
【００２５】
インタフェース３３０８及び３３１３は、直列接続性及び並列接続性の何れか又は双方を提供でき、一般に直列接続性はユニバーサルシリアルバス（ＵＳＢ）規格に従って実現され、対応するＵＳＢコネクタ（不図示）を有する。記憶装置３３０９が提供され、一般にハードディスクドライブ（ＨＤＤ）３３１０を含む。更に、フロッピー（登録商標）ディスクドライブ及び磁気テープ装置（不図示）などの他の記憶装置が使用されても良い。一般に光ディスクドライブ３３１２は、不揮発性データソースとして動作するために提供される。光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ）、ＵＳＢ−ＲＡＭ及びフロッピー（登録商標）ディスクなどのポータブルメモリ素子は、例えばシステム３３００に対する適切なデータソースとして使用されても良い。
【００２６】
一般に、コンピュータモジュール３３０１の構成要素３３０５〜３３１３は、当業者には周知のコンピュータシステム３３００の従来の動作モードを結果として与える方法で、相互接続バス３３０４を介して通信する。上述の構成が実現されるコンピュータの例として、ＩＢＭのＰＣ及びそれに互換性のある、Sun SPARCstation、Apple Mac（登録商標）又はそれから進化した同様のコンピュータシステムがある。
【００２７】
ＱＲコード復号化方法は、説明する図４乃至図５５の処理がコンピュータシステム３３００内で実行可能な１つ以上のソフトウェアアプリケーションプログラム３３３３として実現されるコンピュータシステム３３００を使用して実現されても良い。特に、ＱＲコード復号化方法のステップは、コンピュータシステム３３００内で実行されるソフトウェア３３３３の命令３３３１により行われる。ソフトウェア命令３３３１は、各々が１つ以上の特定のタスクを実行する１つ以上のコードモジュールとして形成されても良い。ソフトウェアは、２つの別個の部分に分割されても良い。第１の部分及び対応するコードモジュールはＱＲコード復号化方法を実行し、第２の部分及び対応するコードモジュールは第１の部分とユーザとの間のユーザインタフェースを管理する。
【００２８】
ソフトウェア３３３３は、一般にコンピュータ可読媒体からコンピュータシステム３３００にロードされ、通常、図３３Ａに示すようにＨＤＤ３３１０に格納されるか又はメモリ３３０６に格納される。その後、ソフトウェア３３３３はコンピュータシステム３３００により実行される。いくつかの例において、アプリケーションプログラム３３３３は、メモリ３３１０又は３３０６に格納される前に、１つ以上のＣＤ−ＲＯＭ３３２５上で符号化されてユーザに供給され、対応するドライブ３３１２を介して読み出されても良い。或いは、ソフトウェア３３３３はコンピュータシステム３３００によりネットワーク３３２０又は３３２２から読み出されても良く、他のコンピュータ可読媒体からコンピュータシステム３３００にロードされても良い。コンピュータ可読記憶媒体は、実行及び／又は処理のために、命令及び／又はデータをコンピュータシステム３３００に提供することに関係する任意の記憶媒体を示す。そのような記憶媒体の例としては、装置がコンピュータモジュール３３０１の内部装置であるか又は外部装置であるかに関わらず、フロッピー（登録商標）ディスク、磁気テープ、ＣＤ−ＲＯＭ、ハードディスクドライブ、ＲＯＭ又は集積回路、ＵＳＢメモリ、光磁気ディスク、或いはＰＣＭＣＩＡカード等のコンピュータ可読カード等がある。ソフトウェア、アプリケーションプログラム、命令及び／又はデータのコンピュータモジュール３３０１への提供に関係しても良いコンピュータが読み取り可能な伝送媒体の例としては、別のコンピュータ又はネットワーク化装置に対するネットワーク接続、並びに電子メール送信及びウェブサイト等に記録された情報を含むインターネット又はイントラネットに加え、無線伝送チャネル又は赤外線伝送チャネルがある。
【００２９】
上述のアプリケーションプログラム３３３３の第２の部分及び対応するコードモジュールは、表示装置３３１４上にレンダリングされるか又は表現される１つ以上のグラフィカルユーザインタフェース（ＧＵＩ）を実現するために実行されても良い。一般にキーボード３３０２及びマウス３３０３を操作することにより、コンピュータシステム３３００のユーザ及びアプリケーションは機能的に適応可能な方法でインタフェースを操作し、ＧＵＩと関連するアプリケーションに対して制御コマンド及び／又は入力を提供しても良い。スピーカ３３１７を介して出力される音声プロンプトを利用するオーディオインタフェース及びマイク３３８０を介して入力されるユーザ音声コマンド等の他の形態の機能的に適応可能なユーザインタフェースが実現されても良い。
【００３０】
図３３Ｂは、プロセッサ３３０５及び「メモリ」３３３４を詳細に示す概略ブロック図である。メモリ３３３４は、図３３Ａのコンピュータモジュール３３０１によりアクセス可能な全てのメモリ素子（ＨＤＤ３３１０及び半導体メモリ３３０６を含む）の論理的な集合を表す。
【００３１】
コンピュータモジュール３３０１が最初に電源を投入されると、ＰＯＳＴ（Power-On Self-Test）プログラム３３５０が実行される。一般にＰＯＳＴプログラム３３５０は、半導体メモリ３３０６のＲＯＭ３３４９に格納される。ＲＯＭ３３４９などのハードウェア装置に永続的に格納されたプログラムは、ファームウェアと呼ばれることもある。ＰＯＳＴプログラム３３５０は、コンピュータモジュール３３０１内のハードウェアを検査して適切な機能を保証し、一般にプロセッサ３３０５、メモリ（３３０９、３３０６）及びＲＯＭ３３４９に格納された基本入出力システムソフトウェア（ＢＩＯＳ）モジュール３３５１が正確に動作しているかをチェックする。ＰＯＳＴプログラム３３５０が正常に実行されると、ＢＩＯＳ３３５１はハードディスクドライブ３３１０を起動する。ハードディスクドライブ３３１０が起動されると、ハードディスクドライブ３３１０に常駐するブートストラップローダプログラム３３５２がプロセッサ３３０５を介して実行される。これにより、オペレーティングシステム３３５３はＲＡＭメモリ３３０６にロードされ、オペレーティングシステム３３５３はＲＡＭメモリ３３０６上で動作を開始する。オペレーティングシステム３３５３は、プロセッサ３３０５により実行可能なシステムレベルのアプリケーションであり、プロセッサ管理、メモリ管理、装置管理、記憶装置管理、ソフトウェアアプリケーションインタフェース及び一般的なユーザインタフェースを含む種々の高レベルな機能を実現する。
【００３２】
オペレーティングシステム３３５３は、コンピュータモジュール３３０１上で実行する各処理又はアプリケーションが別の処理に割り当てられたメモリと衝突せずに実行されるように十分なメモリを有することを保証するためにメモリ（３３０９、３３０６）を管理する。更にシステム３３００において使用可能な種々のメモリは、各処理が効果的に実行可能であるように適切に使用される必要がある。従って、統合メモリ３３３４は、メモリの特定のセグメントが割り当てられる方法を示すことを意図せず（特に指示のない限り）、コンピュータシステム３３００によりアクセス可能なメモリ及びその使用方法の一般的な図を提供する。
【００３３】
プロセッサ３３０５は、制御ユニット３３３９、論理演算装置（ＡＬＵ）３３４０及びキャッシュメモリと呼ばれることもあるローカル又は内部メモリ３３４８を含む複数の機能モジュールを含む。一般にキャッシュメモリ３３４８は、レジスタセクションに複数の記憶レジスタ３３４４〜３３４６を含む。１つ以上の内部バス３３４１は、それらの機能モジュールを機能的に相互接続する。一般にプロセッサ３３０５は、接続３３１８を使用してシステムバス３３０４を介して外部装置と通信するために１つ以上のインタフェース３３４２を更に有する。
【００３４】
アプリケーションプログラム３３３３は、条件付き分岐及びループ命令を含んでも良い一連の命令３３３１を含む。プログラム３３３３は、プログラム３３３３の実行時に使用されるデータ３３３２を更に含んでも良い。命令３３３１及びデータ３３３２は、記憶位置３３２８〜３３３０及び記憶位置３３３５〜３３３７にそれぞれ格納される。特定の命令は、命令３３３１の相対サイズ及び記憶位置３３２８〜３３３０に依存して、記憶位置３３３０において示される命令により図示されるように単一の記憶位置に格納されても良い。或いは、命令は記憶位置３３２８、３３２９において示される命令セグメントにより図示されるように、各々が別個の記憶位置に格納される複数の部分にセグメント化されても良い。
【００３５】
一般にプロセッサ３３０５には、プロセッサ３３０５において実行される命令の集合が与えられる。プロセッサ３３０５は次の入力を待ち、その入力に対して、別の命令の集合を実行することにより反応する。各入力は、複数の送信元のうち１つ以上から提供されても良く、１つ以上の入力装置３３０２、３３０３により生成されるデータ、ネットワーク３３２０、３３２２のうち１つのネットワークを介して外部送信元から受信されるデータ、記憶装置３３０６、３３０９のうち一方の記憶装置から検索されるデータ又は対応する読取り装置３３１２に挿入された記憶媒体３３２５から検索されるデータを含む。場合によっては、命令の集合を実行した結果、データが出力されても良い。実行は、データ又は変数をメモリ３３３４に格納することを更に含んでも良い。
【００３６】
開示されるＱＲコード復号化構成は、メモリ３３３４において対応する記憶位置３３５５〜３３５８に格納される入力変数３３５４を使用する。ＱＲコード復号化構成は、メモリ３３３４において対応する記憶位置３３６２〜３３６５に格納される出力変数３３６１を生成する。中間変数は、記憶位置３３５９、３３６０、３３６６及び３３６７に格納されても良い。
【００３７】
プロセッサ３３０５のレジスタセクション３３４４〜３３４６、論理演算装置（ＡＬＵ）３３４０及び制御ユニット３３３９は共に動作し、プログラム３３３３を構成する命令の集合中の全ての命令に対して「取り出し、復号化及び実行」サイクルを実行するのに必要な一連のマイクロ動作を実行する。各「取り出し、復号化及び実行」サイクルは以下を含む。
（ａ）記憶位置３３２８から命令３３３１を取り出すか又は読み出す取り出し動作；
（ｂ）制御ユニット３３３９が取り出された命令を判定する復号化動作；
（ｃ）制御ユニット３３３９及び／又はＡＬＵ３３４０が命令を実行する実行動作。
【００３８】
その後、次の命令に対する更なる「取り出し、復号化及び実行」サイクルが実行されても良い。同様に、制御ユニット３３３９が値を記憶位置３３３２に格納するか又は書き込む格納サイクルが実行されても良い。
【００３９】
図４乃至図５５の処理における各ステップ又はサブ処理は、プログラム３３３３の１つ以上のセグメントと関連付けられ、プロセッサ３３０５のレジスタセクション３３４４〜３３４７、ＡＬＵ３３４０及び制御ユニット３３３９が共に動作してプログラム３３３３の示されたセグメントに対する命令の集合中の全ての命令に対して「取り出し、復号化及び実行」サイクルを実行することにより実行される。
【００４０】
或いは、コード検出及び復号化、並びにＱＲコード復号化の方法は、ＱＲコード復号化の機能又はサブ機能を実行する１つ以上の集積回路等の専用ハードウェアで実現されても良い。そのような専用ハードウェアは、グラフィックプロセッサ、デジタル信号プロセッサ、或いは１つ以上のマイクロプロセッサ及び連想メモリを含んでも良い。
ＱＲコード復号化システム
図３３Ａに示すように、一般にＱＲコード復号化に対して、少なくとも１つのＱＲコードが形成された文書３３９０がスキャナ３３２６により走査されるか又はカメラ３３２７により取り込まれ、その文書３３９０の取得された画像をインタフェース３３１３を介してコンピュータ３３０１に出力する。画像は、入力変数３３５５としてメモリ３３３４に格納される。ＱＲコード復号化は、その記憶位置及び上述の記憶位置を含む他の記憶位置に格納された画像を使用して、次に説明するようにプロセッサ３３０５により実行される処理及びアプリケーションプログラムの制御下で進行する。
復号化フロー及び２値化
取得された画像中の１つ以上のＱＲコードを復号化する方法４００を、図４を参照して説明する。方法４００は、プロセッサ３３０５により実行されるようなアプリケーションプログラムの基礎を形成する。
【００４１】
取得された画像中の１つ以上のＱＲコードを復号化する処理４００は初期ステップ４０１から開始し、ＱＲコードを含む画像４１０が上述のように入力される。画像は、フラットベッドスキャナ又はデジタルカメラから取得されても良く、或いはネットワーク３３２０、３３２２を介して画像をダウンロードする等の画像のデジタル表現を取得する任意の他の手段により取得されても良い。画像は、プロセッサ３３０５の動作によりＨＤＤ３３１０に格納されても良い。
【００４２】
ステップ４０１の後、２値化ステップ４０２が続く。ステップ４０２において、２値化画像４１２は取得された画像４１０からプロセッサ３３０５により生成される。２値化画像は、中間変数３３５９として格納されても良い。２値化ステップ４０２は、取得された画像の他の画素に対する各画素の輝度を検査することにより、「黒色」又は「白色」として取得された画像の各画素にラベル付けする２値化アルゴリズムを採用する。従来技術において利用可能な周知の２値化アルゴリズムが多く存在し、ステップ４０２では、画素の輝度に基づいて「黒色」又は「白色」として画素にラベル付けする任意のアルゴリズムが採用されても良い。
【００４３】
次のステップ４０３において、２値化画像４１２のＦＰの位置が連結成分解析（ＣＣＡ）の方法を採用することにより特定される。ＣＣＡ段階４０３は、検出されたＦＰのリスト４１４を出力する。ここで開示されるＦＰを検出するためにＣＣＡを実行する方法は、従来のＦＰ検出方法と比較してドットゲインなどの一般的な印刷／走査歪みに対する非常に高いロバスト性を提供する。ＣＣＡ ＦＰ検出アルゴリズムについては後で詳細に説明する。
【００４４】
次のステップ４０４において、先の段階４０３から出力される検出されたＦＰのリスト４１４は、プロセッサ３３０５を使用して処理され、ＦＰをＱＲコード領域４１６に分解する。このＦＰをＱＲコード領域にグループ化する処理は、「分解」と呼ばれる。
【００４５】
ここで開示される構成では、２つの分解アルゴリズムが採用される。「３／３分解」と呼ばれる第１の分解アルゴリズムは、３つの検出されたファインダパターンのグループからＱＲコード領域を形成する。「２／３分解」と呼ばれる第２の分解アルゴリズムは、ＱＲコードの１つのＦＰが検出されないと仮定される場合に存在できる可能なＱＲコード領域を判定する。この仮定から発生する可能なＱＲコード領域を生成することにより、３つのファインダパターンのうち２つのみが最初に検出される場合に、後の損失ＦＰ回復ステップを適用することによりＱＲコード領域は分解される。これにより、全体的に見て従来技術よりはるかに高いロバスト性を有するＱＲコード復号化システムの実現が可能になる。３／３及び２／３分解アルゴリズムについては後で詳細に説明する。
【００４６】
次のステップ４０５において、各候補ＱＲコード領域において符号化情報４１８を抽出しようとする。候補ＱＲコード領域が３つの検出されたＦＰ（３／３分解アルゴリズムの出力）を含む場合、ＱＲコード領域のモジュールがサンプリングされ、情報は従来の周知の方法を使用して抽出される。或いは、候補ＱＲコード領域が２つのＦＰ（２／３分解の出力）のみを含む場合、第３の「損失する」ＦＰを取得しようとする。この処理は、ステップ４０３で採用されるＣＣＡ ＦＰ検出方法から利用可能にされる検出されたファインダパターンに関する追加の情報を活用する。この処理については後で詳細に説明する。第３のファインダパターンが正常に取得される場合、ＱＲコードはサンプリングされ、情報は従来の周知の方法を介して抽出される。ＱＲコード領域から符号化情報を抽出する処理は「復号化」として周知である。
【００４７】
取得された画像中の１つ以上のＱＲコードを復号化する処理は、最後のステップ４０６において終了する。
連結成分解析（ＣＣＡ）
次に、復号化処理４００のステップ４０３で採用される連結成分解析（ＣＣＡ）の処理を詳細に説明する。
【００４８】
連結成分解析（ＣＣＡ）は、黒色及び／又は白色領域等の画像中の連続したカラー領域又は同様のカラー領域を識別する処理の総称である。ここで開示される構成は、特にＱＲコードが繰り返し印刷／走査された場合、従来よりはるかに高いロバスト性を有するＦＰ検出方法を提供する固有のＣＣＡを採用する。更にＣＣＡ ＦＰ検出方法４０３は、従来より効率的で高精度である分解アルゴリズム（ステップ４０４で採用される）の適用を容易にする。また、ステップ４０５で採用される損失ＦＰ回復アルゴリズムはＣＣＡ ＦＰ検出器４０３を使用することにより容易になる。
【００４９】
ステップ４０３で採用され且つプロセッサ３３０５を使用して実行されるＣＣＡアルゴリズムは、連続する「黒色」又は「白色」領域を識別するように、ステップ４０２で生成される２値化画像４１２中の同一の輝度を有する画素をグループ化する。特にＣＣＡアルゴリズムは、一番上の走査線から一番下の走査線まで２値化画像４１２の各走査線を順に検査する。連続した黒画素を単一の「ラン」と呼ぶ。所定の走査線に対して各ランを検査し、先の走査線上のランと連結されるかを判定する。これは、ランの最も左側の範囲及び最も右側の範囲をチェックし、それらの範囲が先の走査線上の任意のランの最も左側の範囲及び最も右側の範囲と重なるかを判定することにより達成される。ランが先のランと連結されない場合、ランを新しい連結成分（ＣＣ）の開始として設定する。或いは、ランが先のランと連結される場合、先のランは先に設定されたＣＣのメンバであり、当該走査線上のランを先に設定されたＣＣに追記する。
【００５０】
当該走査線上のランが先の走査線上の２つ以上のランと連結される場合、当該走査線上のランに連結するランを含む全てのＣＣがマージされ、単一のＣＣを形成する。従って、画像において下方の点で一緒になるいくつかの分離した成分から開始されるオブジェクトを単一のＣＣであると識別しても良い。
【００５１】
ＣＣが当該走査線上に連結されたランを有さない場合、ＣＣは「終了」される。即ち、そのＣＣに属する全ての画素が識別されたため、ＣＣは完了したと考えられる。
【００５２】
ステップ４０３で採用されるＣＣＡアルゴリズムは、１つの連続的な黒色ＣＣが連続的な白色ＣＣにより完全に囲まれ且つその白色ＣＣが更なる黒色ＣＣに完全に囲まれるＣＣ構成を探索することによりＱＲファインダパターンを検出する。この包囲関係は、ＣＣが終了した時に実行される単純なチェックにより検出される。当該ＣＣは終了した時、当該ＣＣの範囲内に配置される最も左側の範囲、最も右側の範囲、一番上の範囲及び一番下の範囲を有する別のＣＣが存在するかを判定するためのチェックを行う。ＣＣが当該ＣＣの境界内に存在する場合、双方のＣＣを候補ＦＰとして出力リストに追記する。存在しない場合、ＣＣを廃棄する。
【００５３】
トポロジ関係を探索することによりＱＲファインダパターンを検出する、即ちＱＲファインダパターンが別のＣＣ内に完全に囲まれる１つの黒色ＣＣから構成されることを検出することにより、上述のＣＣＡ方法は印刷／走査による歪みに対して、ＦＰの理論上予想される外形１００に非常に依存する従来の方法よりはるかに高いロバスト性を提供できる。上述のＣＣＡ方法の別の特徴は、いくつかの有用なＦＰ計測値を効率的に計算し、それらのＦＰ計測値を処理４００の後の分解ステップ４０４及び復号化ステップ４０５で非常に有利に適用することである。特に、少なくとも「メタデータ」と呼ばれる検出したＦＰに関する以下の情報を判定する。
（１）ＦＰの中心の座標（ＦＰ１００の黒色の連結成分１０１及び１０３の平均の中心の座標）
（２）ＦＰ１００の黒色モジュールのサイズ（黒色連結成分１０１の線幅）
（３）ＦＰ１００の白色モジュールのサイズ（白色連結成分１０２の線幅）
（４）ＦＰ１００の回転（この角度は、９０°を法とし、本質的に、使用中の座標系に対して０〜９０°であるＣＣ１０１及び１０２の辺の角度に対応する）
（５）ＦＰ１００の信頼度（これは、ＦＰの外形を理論上予想される外形１００と比較することにより計算される。予想された外形に非常に類似するＦＰは、１００％に近い信頼度を有する）
（６）ＦＰ１００のバウンディングボックス（外側の黒色ＣＣ１０１の最も左側、最も右側、一番上及び一番下の範囲）
ＣＣＡ方法４０３により識別されたＦＰをリスト４１４に形成する。各リストエントリには、関連付けられるメタデータの一部又は全てを補足しても良い。
一般的な分解
次に、分解処理４０４の詳細について図５を参照して説明する。分解処理４０４は初期ステップ５０１から開始し、検出されたＦＰのリストが入力される。
【００５４】
次のステップ５０２において、ＦＰはトリプレットにグループ化され、トリプレットが有効な候補３／３ＱＲコード領域を形成するかを判定するためのチェックを実行する。
【００５５】
次のステップ５０３において、ＦＰは対にグループ化され、対が有効な候補２／３ＱＲコード領域を形成するかを判定するためのチェックを実行する。
【００５６】
ステップ５０２及び５０３で採用される処理については、後で詳細に説明する。
【００５７】
分解処理４０４は、最後のステップ５０４で終了する。
３／３分解
ステップ５０２において採用されるような候補３／３コード領域を形成する処理を、図６、図７及び図９を参照して説明する。この時点において、２つの事前定義済みパラメータが導入され、分解方法における反り及び位置ずれに対する許容差を与える。これらのパラメータは、toleranceangle及びtolerancemagnitudeで示され、双方とも０．２に設定されても良い。これらの許容差は、角度及び距離が２０％だけ変動することに対応し、更にＱＲ領域が分解され且つＱＲコードが検出されることを可能にする。これにより、反りがある状態における検出が可能になる一方で、偽陽性検出は制限される。許容差は、システムの所望の精度に基づいて必要に応じて変動しても良い。
【００５８】
図６を参照して、３／３領域を分解する一般的な処理を示す。初期ステップ６０１において、検出されたＦＰのリスト４１４が入力される。
【００５９】
次のステップ６０２において、検出されたＦＰのトリプレットに対して一連のチェックを行い、「潜在的な」３／３領域のリスト６０６を形成する。これらのチェックを実行する処理については、後で詳細に説明する。
【００６０】
次のステップ６０３において、「潜在的な」３／３領域のリスト６０６の潜在的な各ＱＲコード領域が「内部」ＦＰを含むかを判定するために検査する。ステップ６０３の結果として、候補３／３ＱＲコード領域の最終的なリスト６０８が得られる。ステップ６０３を実行する処理についても、後で詳細に説明する。
【００６１】
候補３／３コード領域を形成する処理５０２は、最後のステップ６０４で終了する。
潜在的な３／３領域の検出
潜在的な３／３領域のリスト６０６を形成する処理６０２を、図７を参照して説明する。
【００６２】
処理６０２は、初期ステップ７０１で開始し、検出されたＦＰのリスト４１４が入力される。
【００６３】
次のステップ７０２において、トリプレットのリスト７１０は、まず入力リスト４１４からの可能な３つのＦＰの全ての組み合わせを見つけることによって生成される。６つのトリプレットは、ＱＲコードの可能な各公称ＦＰ位置に各ＦＰを割り当てることにより、それらの組み合わせの各々から形成される。即ち、各ＦＰは、６つのトリプレットのうちの１つのトリプレットのＱＲコードの「左上」の隅、「右上」の隅、又は「右下」になるように指定される。次の説明において、左上に割り当てられたＦＰに関連する属性（module_sizeなど）には「tl」の下付き文字を与え、同様に、右上のＦＰ及び左下のＦＰにはそれぞれ「tr」及び「bl」を与える。
【００６４】
次のステップ７０３において、ステップ７０２で生成されたトリプレットのリスト７１０からトリプレット７１２が選択される。
【００６５】
次のステップ７０４において、トリプレット７１２は、３つのファインダパターンのモジュールサイズが非常に類似するかを判定するためにチェックされる。モジュールサイズは、ステップ４０３で採用されるＣＣＡ ＦＰ検出方法により利用可能になる黒色及び白色モジュールのサイズの平均である。図８Ａに、ＦＰモジュールサイズがほぼ同一でないため、このチェックが失敗する３つのＦＰの例８０１を示す。同様のモジュールサイズであるかのチェックは、以下の擬似コード１により表されても良い。
****擬似コード１****ステップ７０４****
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
次のステップ７０５において、３つのＦＰの角度方向がほぼ同一であるかを判定するためにＦＰの相対的な角度がチェックされる。上述のように、ＦＰ毎に計算された回転角はｐ／２ラジアン（９０°）を法とする。従って、ＦＰの回転角の間の最小偏差を判定するために調整が必要である。図８Ｂに、ＦＰの角度方向がほぼ同一でないために、このチェックが失敗する３つのＦＰの例８０２を示す。このチェックは、擬似コード２を実行することにより行われても良い。
****擬似コード２****ステップ７０５****
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」は数学的定数ｐを示す。
【００６６】
次のステップ７０６において、３つの検出されたＦＰの構成が有効なＱＲコード領域に対応するかを判定するためのチェックが実行される。これは、左上のＦＰと右上のＦＰとの間の距離及び左上のＦＰと左下のＦＰとの間の距離がほぼ同一であることを最初にチェックすることにより達成される。このチェックは、擬似コード３を実行することにより行われても良い。
****擬似コード３****ステップ７０６−第１部****
vector_xtl-tr = xtl - xtr
vector_ytl-tr = ytl - ytr
vector_magtl-tr = sqrt(vector_xtl-tr2 + vector_ytl-tr2)
vector_xtl-bl = xtl - xbl
vector_ytl-bl = ytl - ybl
vector_magtl-bl = sqrt(vector_xtl-bl2 + vector_ytl-bl2)
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
左上のＦＰと右上のＦＰとの間のベクトルの長さ及び左上のＦＰと左下のＦＰとの間のベクトルの長さがほぼ同一であることが確認されると、次のステップでは、ＦＰのモジュールサイズを仮定して、それらのベクトルの長さが適切であることがチェックされる。本質的には、これは、ベクトルの長さがバージョン１（最小）〜４０（最大）のＱＲコードに対して予想される長さ以下であることをチェックする。このチェックは、擬似コード４で実現可能である。
****擬似コード４****ステップ７０６−第２部****
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
検出されたＦＰの正確な構成に対するチェックは、ＦＰのほぼ直交する構成に対するチェック及びＱＲコード領域の右上の位置及び左下の位置に対する検出されたＦＰの仮定された割り当てが正確であることのチェックを含む。これらのチェックは、擬似コード５を実行することにより行われても良い。
****擬似コード５****ステップ７０６−第３部****
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
次のステップ７０７において、領域の回転がＦＰの角度にマッチングするかを判定するためのチェックが実行される。候補領域の回転角は、左上のＦＰと右上のＦＰとの間のベクトルの角度として規定される。図８Ｃに、ＦＰの角度方向が領域の向きとマッチングしないためにこのチェックが失敗する３つのＦＰの例８０３を示す。このチェックは、擬似コード６を実行することにより行われても良い。
****擬似コード６*****ステップ７０７****
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
ステップ７１４でテストされるように上記チェック７０４〜７０７の全てが成功する場合、ＦＰのトリプレット７１２は、ステップ７０８において潜在的な３／３領域の出力リスト６０６に追記される。尚、出力される潜在的な領域の各々は、領域の３つのＦＰの信頼度に基づいて信頼度値と関連付けられる。この信頼度は、擬似コード７を実行することにより計算される。
****擬似コード７****
confidenceregion = (confidencetl + confidencetr + confidencebl) / 3
信頼度値は、潜在的なＦＰのリスト中の各ＦＰに対するメタデータに追記される。
【００６７】
ステップ７１６でテストされるように、ステップ７０２で生成されるトリプレットのリストにトリプレットが残っている場合、ステップ７０３に戻る。或いは、全てのトリプレットが処理された場合、潜在的な３／３領域のリスト６０６を形成する処理６０２は最後のステップ７０９で終了する。
真の領域の検出
真の３／３領域のリストを形成する処理６０３を、図９を参照して説明する。有効なＱＲコード領域は、追加の検出されたファインダパターンを含むことができない。この要求に基づくと、領域１０００の範囲１００１内に追加の検出されたファインダパターンが存在しないため、図１０ＡのＱＲコード領域１０００は有効な領域である。図１０Ｂに示されるＱＲコード領域１０１０は、領域範囲１０１１により追加の検出されたＦＰ１０１２を含むため有効なＱＲコード領域ではない。「内部」ＦＰの信頼度が領域の３つのＦＰの信頼度より非常に低い場合は例外となる。これは、いくつかの稀な例において、図１０Ｃの１０２０で示されるように位置決めパターン１０２２がファインダパターンとして検出されるためである。この状況において、位置決めパターン１０２２の信頼度は、検出されたファインダパターン１０２３、１０２４及び１０２５の信頼度より非常に低い。
【００６８】
図９に戻ると、真の３／３領域を見つける処理６０３は初期ステップ９０１で開始し、潜在的な３／３領域のリスト６０６及び検出されたＦＰが入力される。
【００６９】
次のステップ９０２において、潜在的な３／３領域９１０はステップ９０１で入力されたリスト６０６から選択される。
【００７０】
次のステップ９０３において、潜在的な３／３領域が高い信頼度の追加のファインダパターンを含むかが判定される。本質的には、潜在的なコード領域を形成するファインダパターン以外の検出されたファインダパターンの全てがチェックされ、それらが潜在的な３／３領域の範囲内にあるかが判定される。
【００７１】
次に、特定のファインダパターンが潜在的なコード領域内にあるかを判定する処理について説明する。図１１は、左上のＦＰ１１０３、右上のＦＰ１１０１及び左下のＦＰ１１０２から成るＱＲコード領域１１００を示す。ファインダパターン１１０９は、領域１１００内にあるかを判定するためにチェックされる。最初に、左上のＦＰ１１０３と右上のＦＰ１１０１との間のベクトル１１０５及び左上のＦＰ１１０３と左下のＦＰ１１０２との間のベクトル１１０６がそれぞれ計算される。これは、擬似コード８を実行することにより達成される。
****擬似コード８****
vector_xtl-tr = xtl - xtr
vector_ytl-tr = ytl - ytr
vector_xtl-bl = xtl - xbl
vector_ytl-bl = ytl - ybl
領域の未知の隅の位置１１０４は、擬似コード９に示すように計算される。
****擬似コード９****
xbr = xtl + vector_xtl-bl + vector_xtl-tr
ybr = ytl + vector_ytl-bl + vector_ytl-tr
次に、領域の右下の隅１１０４と右上のＦＰ１１０１との間のベクトル１１０７及び右下の隅１１０４と左下の隅１１０２との間のベクトル１１０８のそれぞれが計算される。これは、擬似コード１０を実行することにより達成される。
****擬似コード１０****
vector_xbr-tr = -vector_xtl-bl
vector_ybr-tr = -vector_ytl-bl
vector_xbr-bl = -vector_xtl-tr
vector_ybr-bl = -vector_ytl-tr
領域の左上の隅１１０３からチェックされる追加のファインダパターン１１０９までのベクトル１１１０及び右下の隅１１０４の隅１１０４から追加のファインダパターン１１０９までのベクトル１１１１が構成される。これは、擬似コード１１により達成される。
****擬似コード１１****
vector_xtl-fp = xfp - xtl
vector_ytl-fp = yfp - ytl
vector_xbr-fp = xfp - xbr
vector_ybr-fp = yfp - ybr
最後に、以下の条件を判定することにより、追加のＦＰ１１０９が領域１１００内に存在するかが判定される。
【００７２】
１．左上のＦＰ１１０３と追加のファインダパターン１１０９との間のベクトル１１１０の角度は、左上のＦＰ１１０３と右上のＦＰ１１０１との間のベクトル１１０５の角度と左上のＦＰ１１０３と左下のＦＰ１１０２との間のベクトル１１０６の角度との間にあるか。
【００７３】
２．右下の隅１１０４と追加のファインダパターン１１０９との間のベクトル１１１１の角度は、右下の隅１１０４と右上のＦＰ１１０１との間のベクトル１１０７の角度と右下の隅１１０４と左下のＦＰ１１０２との間のベクトル１１０８の角度との間にあるか。
【００７４】
双方の条件（１）及び（２）が真であると分かった場合、ＦＰ１１０９が領域１１００内に存在すると判定される。このチェックは、擬似コード１２を実行することにより達成される。
****擬似コード１２****
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
ＱＲコードがそれらを取り囲む４モジュールサイズ分の静穏領域を含む必要があるということは、ステップ９０３の内部ＦＰチェックの目的で潜在的な３／３コード領域を拡大するために活用される。これにより、真の３／３領域として識別される偽陽性３／３領域の数は減少する。一般に、追加のファインダパターンは、コード領域の検出されたファインダパターンの中心の約１１モジュールサイズ内では発生不可能である。これは、４モジュール分の静穏ゾーン及び２つのハーフファインダパターンの幅（７モジュール）の双方を考慮に入れる。内部ＦＰチェックに使用される潜在的な３／３領域のサイズは、領域の四隅を約１１モジュールサイズ分だけ外側に移動することにより拡大される。
【００７５】
潜在的な３／３領域が追加の検出されたファインダパターンを含むと判定された場合、追加の検出されたファインダパターンの信頼度が領域の検出されたファインダパターンの信頼度より非常に低いかが判定される。このチェックは、擬似コード１３を実行することにより達成される。
****擬似コード１３****
if 
(
confidencefp
＜
(
0.75
X
min(confidencetl, confidencetr, confidencebl)
)
):
check passed
else:
check failed
図９に戻ると、潜在的な３／３領域が潜在的な領域の検出されたファインダパターンに類似する信頼度の追加の検出されたファインダパターンを含まないことがステップ９０３で判定された場合、次のステップ９０４において、潜在的な３／３領域は真の３／３領域として保存される。保存は、図３３Ｂの変数レジスタ３３６０等の中間変数の１つに対して実行される。これらの保存の蓄積により、リスト６０８の形成が開始される。
【００７６】
ステップ９０６でテストされるように、未処理の潜在的な３／３領域が更に存在する場合、ステップ９０２に戻る。或いは、全ての潜在的な３／３領域が処理された場合、ステップ６０３で採用された真の３／３領域のリスト６０８を形成する処理は最後のステップ９０５で終了する。
２／３分解
候補２／３領域を形成する処理５０３の詳細を、図１２、図１３、図１６及び図１９を参照して説明する。３／３分解、toleranceangle及びtolerancemagnitudeの先の説明において使用された同一の２つの事前定義済み許容差パラメータを２／３領域の分解時にも使用する。双方のパラメータに対して、同一の値０．２が使用される。
【００７７】
図１２を参照すると、２／３領域を分解する一般的な処理５０３が示される。初期ステップ１２０１において、検出されたＦＰのリスト４１４が入力される。
【００７８】
次のステップ１２０２において、ファインダパターン対１２１０が見つけられる。これらは、ＱＲコードの一部を潜在的に形成することを示す複数の基準にマッチングするファインダパターンの対である。
【００７９】
次のステップ１２０３において、潜在的な２／３領域１２１２が見つけられる。潜在的な２／３領域１２１２は、未検出のファインダパターンを含むＱＲコードが潜在的に存在する画像４１０／４１２の領域である。
【００８０】
次のステップ１２０４において、ステップ１２０３で見つけられる潜在的な２／３領域１２１２がチェックされ、ステップ６０３で潜在的な３／３領域がチェックされたのと同様に、それらの領域が「内部」ＦＰを含むかが判定される。そのような「内部」ＦＰを含まない潜在的な２／３領域は、真の２／３領域１２１４であると判定される。
【００８１】
候補２／３領域を形成する処理５０３は、最後のステップ１２０５で終了する。
ファインダパターン対の検出
次に、ファインダパターン対を見つける処理１２０２について、図１３を参照して更に詳細に説明する。初期ステップ１３０１において、検出されたファインダパターンのリスト４１４が入力される。
【００８２】
次のステップ１３０２において、入力リストから可能な２つのＦＰの全ての組み合わせを見つけることにより、ファインダパターン対のリスト１３１２が生成される。この説明の目的で、各ファインダパターン対の２つのファインダパターンにはラベルＡ及びＢが任意に割り当てられる。次の説明において、属性（module_size等）には、それらが示すＦＰを示すために「Ａ」及び「Ｂ」の下付き文字が与えられる。
【００８３】
次のステップ１３０３において、ファインダパターンの対１３１４は、ステップ１３０２で生成されたリスト１３１２から選択される。
【００８４】
次のステップ１３０４において、ファインダパターン対１３１４は、２つのファインダパターンのモジュールサイズが非常に類似するかを判定するためにチェックされる。図１４Ａは、このチェックが成功しない例１４００を示す。ファインダパターン１４０１及び１４０２のモジュールサイズが非常に異なることが分かる。モジュールサイズが類似するかのチェックは、擬似コード１４により表されても良い。
****擬似コード１４****ステップ１３０４****
if 
(
(
abs(module_sizeA - module_sizeB)
/
min(module_sizeA, module_sizeB)
) ＜= tolerancemagnitude
):
check passed
else:
check failed
次のステップ１３０５において、ＦＰの角度がチェックされ、２つのＦＰの角度方向がほぼ同一であるかが判定される。尚、各ファインダパターンに対する回転角はp/2ラジアンを法とする。従って、２つのファインダパターンの回転角の間の最小偏差を判定するために調整が必要である。図１４Ｂは、このチェックを通過しない例１４１０を示す。ファインダパターン１４１１及び１４１２の角度が非常に異なることが分かる。このチェックは、擬似コード１５を実行することにより行われても良い。
****擬似コード１５****ステップ１３０５****
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を示す。
【００８５】
次のステップ１３０６において、ＦＰ間のベクトルの角度がチェックされ、その角度が２つの可能な２／３コード領域構成に対するファインダパターンの角度に対応するかが判定される。２／３領域の２つの可能な構成を図１５Ａ及び図１５Ｂに示す。２つの検出されたＦＰがＱＲコードの側部１５０１に沿うＦＰに対応する図１５Ａの構成１５００を「垂直」タイプの２／３領域と呼ぶ。検出されたＦＰがＱＲコードの対角線１５１１上にある図１５の構成１５１０を「対角」タイプの２／３領域と呼ぶ。図１５Ｃは、チェックされるファインダパターンの対の例１５２０を示す。チェックは、ファインダパターン１５２１と１５２２との間のベクトル１５２３の角度１５２４が許容される角度許容差toleranceangle内の有効な構成１５００及び１５１０と整合性がとれているかを判定する。このチェックの結果、垂直又は対角であるＦＰ対の種類が設定される。このチェックは、擬似コード１６を使用して実現される。
****擬似コード１６****
vector_xA-B = xB - xA
vector_yA-B = yB - yA
vector_magA-B = sqrt(vector_xA-B2 + vector_yA-B2)
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
次のステップ１３０７において、２つのＦＰ間のベクトルの長さがＱＲコードバージョン１〜４０の制限内であるかを判定するためのチェックが行われ、大きさの許容差を与える。このチェックは、擬似コード１７を実行することにより行われる。
****擬似コード１７****
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
ステップ１３１０でテストされるように、上記チェック１３０４〜１３０７が成功した場合、ステップ１３０８において、ＦＰの対１３１４はＦＰ対の出力リスト１２１０に追記される。ステップ１３１１でテストされるように、ステップ１３０２で生成されたリスト１３１２のＦＰ対が残っている場合、ステップ１３０３に戻る。残っていない場合、ＦＰ対を見つける処理１２０２は最後のステップ１３０９で終了する。
潜在的な２／３領域の検出
次に、潜在的な２／３領域を見つける処理１２０３について、図１６を参照して更に詳細に説明する。初期ステップ１６０１において、先に見つけられたファインダパターン対のリスト１２１０が入力される。
【００８６】
次のステップ１６０２において、ファインダパターン対１６１０は、ステップ１７０１で先に入力されたファインダパターン対のリスト１２１０から選択される。
【００８７】
ステップ１６０６でテストされるように、選択されたファインダパターン対１６１０が「対角」の「タイプ」を有する場合、ステップ１６０３において、対角タイプの潜在的な２／３領域が１つ生成される。選択されたファインダパターン対の「タイプ」が「垂直」である場合、ステップ１６０４において、垂直タイプの潜在的な２／３領域が２つ生成される。ステップ１６０３及び１６０４の実行について次に説明する。尚、ステップ１６０３及び１６０４から出力される潜在的な２／３領域１６１２毎に、領域の２つの検出されたＦＰの信頼度に基づく信頼度値が計算される。この信頼度は、擬似コード１８を実行することにより計算される。
****擬似コード１８****
confidenceregion = (confidenceA + confidenceB) / 2
ステップ１６０７で判定されるように、未処理のファインダパターン対が更に存在する場合、ステップ１６０２に戻る。存在しない場合、潜在的な２／３領域を見つける処理１２０３は最後のステップ１６０５で終了する。ステップ１２０３の処理は、メモリ３３３４に格納されてもよい判定された潜在的な２／３領域のリスト１２１２を設定する。
【００８８】
次に、対角タイプの潜在的な２／３領域を生成する処理１６０３について詳細に説明する。図１７Ａは、検出されたファインダパターン１７０１及び１７０２の対から形成される対角タイプの２／３領域１７０３の一例１７００を示す。１７００の領域に示すように、対角の場合、検出されたファインダパターンはＱＲコード領域の右上のＦＰ位置及び左下のＦＰ位置に対応する。
【００８９】
ファインダパターン対から潜在的な２／３領域を生成することは、実質的に、領域の損失するファインダパターンの２つの可能な場所を判定することを含む。これは、潜在的な２／３領域の範囲を判定する。図１８Ａに、損失するファインダパターンの２つの可能な場所が対角タイプの潜在的な２／３領域に対して判定される方法の一例１８００を示す。最初に、２つの検出されたファインダパターン１８０１、１８０２の一方が基準ファインダパターンとして選択される（この例において、ファインダパターン１８０１が選択される）。次に、２つのベクトル１８０４及び１８０６は、選択された基準ファインダパターン１８０１から他方の検出されたファインダパターン１８０２へのベクトル１８０３から４５°の角度オフセット１８０８で形成される。ベクトル１８０４及び１８０６の長さは、擬似コード１９に示すようにベクトル１８０３の長さから計算される。
****擬似コード１９****
vector_mag4604 = vector_mag4603 / 1.41
vector_mag4606 = vector_mag4603 / 1.41
尚、定数１．４１は、上記擬似コードにおいて２の平方根を近似する。
【００９０】
ベクトル１８０４及び１８０６の端点は、損失するファインダパターン１８０５及び１８０７の２つの可能な場所を判定する。判定される損失するファインダパターンの２つの可能な場所を使用して、潜在的な２／３領域は完全に規定され、ステップ１６０３が完了する。
【００９１】
次に、垂直タイプの２つの潜在的な２／３領域を生成する処理１６０４について、詳細に説明する。図１７Ｂは、検出されたファインダパターン１７１１及び１７１２の対から形成される垂直タイプの２つの２／３領域１７１３及び１７１４の一例を示す。１７１０に示すように、垂直タイプの２／３領域において、検出されたファインダパターンは、コード領域の一方側の２つの隣接するファインダパターン位置に対応する。このため、１７１０に示すように、単一の垂直タイプのファインダパターン対から形成される２つの潜在的な２／３領域が存在する。実質的に、検出されたファインダパターン対１７１１、１７１２に基づいて、領域１７１３及び１７１４のいずれかの損失する第３のファインダパターンを含むＱＲコードが存在する。このため、ステップ１６０４において、双方の潜在的な２／３領域が生成される。
【００９２】
ファインダパターン対に対して２つの潜在的な２／３領域を生成することは、本質的に、潜在的な２／３領域１７１３及び１７１４の各々に対して損失するファインダパターンの２つの可能な場所を判定することを含む。この処理は、全ての垂直タイプの潜在的な２／３領域に対して同一であり（即ち、１７１３及び１７１４の双方に対して同一である）、次に説明する。以下に説明する処理がファインダパターン対から形成される双方の潜在的な２／３領域（１７１３、１７１４等）に対して完了すると、ステップ１６０４が完了する。
【００９３】
図１８Ｂは、垂直タイプの潜在的な２／３領域の一例１８１０を示す。１８１１、１８１２等の垂直タイプのファインダパターン対に対して、２つの検出されたファインダパターン間のベクトル１８１３の両側に１つの垂直タイプの潜在的な２／３領域が形成される。１８１０においては、ファインダパターン対１８１１、１８１２から形成される２つの可能な潜在的な２／３領域のうち一方のみを示す。
【００９４】
潜在的な２／３領域１８１０に対して損失するファインダパターンの２つの可能な場所を判定する処理は、検出されたファインダパターン１８１１、１８１２の間のベクトル１８１３から９０°のオフセットで２つのベクトル１８１４及び１８１６を形成することから開始する。ベクトル１８１４及び１８１６の長さは、べクトル１８１３の長さと同一である。ベクトル１８１４及び１８１６の端点は、損失するファインパターン１８１５及び１８１７の２つの可能な場所を判定する。
真の２／３領域の検出
次に、真の２／３領域を見つける処理１２０４について、図１９を参照して更に詳細に説明する。３／３分割の説明において示したように、有効なＱＲコード領域は追加の検出されたファインダパターンを含むことができないが、「内部」ＦＰの検出信頼度がコード領域の検出されたファインダパターン対よりかなり低い場合は例外である。
【００９５】
初期ステップ１９０１において、先に判定された潜在的な２／３領域のリスト１２１２が入力される。
【００９６】
次のステップ１９０２において、潜在的な２／３領域１９１０は、ステップ１９０１で入力されたリスト１２１２から選択される。
【００９７】
次のステップ１９０３において、潜在的な２／３領域１９１０が高い信頼度の追加のファインダパターンを含むかが判定される。本質的には、潜在的な２／３領域を形成するファインダパターン以外の全ての検出されたファインダパターンがチェックされ、それらが潜在的な２／３領域の範囲内にあるかが判定される。
【００９８】
特定のＦＰが潜在的な２／３領域内にあるかを判定する処理は、本質的に、３／３分割に対して上述した処理と同一である。この処理を潜在的な２／３領域に適用するために、検出されたＦＰの場所及び損失するＦＰの場所は、最初に左上、右上、左下及び右下の標準的なＦＰ位置ラベルに割り当てられる必要がある。次に、標準的なＦＰ位置ラベルを検出されたＦＰの場所及び可能な損失するＦＰの場所に割り当てる処理について、図２０Ａ及び図２０Ｂを参照して垂直タイプ及び対角タイプの潜在的な２／３領域に対して説明する。
【００９９】
対角タイプの潜在的な２／３領域２０００を図２０Ａに示す。追加のファインダパターン２００９は、潜在的な２／３領域内にあるかを判定するためにチェックされる。最初に、損失するファインダパターンの場所２００３、２００４の一方には、左上のＦＰの位置が任意に割り当てられる。次に、他方の可能な損失するＦＰの場所には、右下のＦＰの位置が割り当てられる。２つの検出されたＦＰ２００１、２００２には、右上のＦＰ及び左下のＦＰの位置が割り当てられることになる。追加のＦＰ２００９が潜在的な２／３領域２０００内に存在するかを判定する処理は、以下の情報を使用して３／３分解に対して説明した方法により実行される。
（１）左上のＦＰ２００３と右上のＦＰ２００１との間のベクトル２００５及び左上のＦＰ２００３と左下のＦＰ２００２との間のベクトル２００６
（２）右下のＦＰ２００４と右上のＦＰ２００１との間のベクトル２００７及び右下のＦＰ２００４と左下のＦＰ２００２との間のベクトル２００８
（３）左上のＦＰ２００３からチェックされる追加のファインダパターン２００９までのベクトル２０１０及び右下のＦＰ２００４から追加のファインダパターン２００９までのベクトル２０１１。
【０１００】
垂直タイプの潜在的な２／３領域２０２０を図２０Ｂに示す。追加のファインダパターン２０２９は、潜在的な２／３領域内にあるかを判定するためにチェックされる。最初に、検出されたファインダパターンの場所２０２２、２０２３の一方には、左上のＦＰの位置が任意に割り当てられる。次に、他方の検出されたＦＰの場所には、左下のＦＰの位置が割り当てられる。２つの可能な損失するＦＰの場所２０２１、２０２４には、右上のＦＰ及び右下のＦＰの位置が割り当てられることになる。追加のＦＰ２０２９が潜在的な２／３領域２０２０内に存在するかを判定する処理は、以下の情報を使用して、３／３分解に対して上述した方法により実行される。
（１）左上のＦＰ２０２３と右上のＦＰ２０２１との間のベクトル２０２５及び左上のＦＰ２０２３と左下のＦＰ２０２２との間のベクトル２０２６
（２）右下のＦＰ２０２４と右上のＦＰ２０２１との間のベクトル２０２７及び右下のＦＰ２０２４と左下のＦＰ２０２２との間のベクトル２０２８
（３）左上のＦＰ２０２３からチェックされる追加のファインダパターン２０２９までのベクトル２０３０及び右下のＦＰ２０２４から追加のファインダパターン２０２９までのベクトル２０３１。
【０１０１】
追加のＦＰが潜在的な２／３領域内に存在するかを判定する上述の方法において、潜在的な２／３領域の範囲は、２／３領域の２つの可能な損失するファインダパターンの公称予測位置に基づいていた。内部ＦＰチェックに対して潜在的な２／３領域の範囲を規定するために、別の方法が使用されても良い。１つの代替方法は、潜在的な２／３領域の範囲が可能な限り小さくなる（許容される許容差内）ように損失するファインダパターンの可能な場所を判定する際に許容差tolerancemagnitude及びtoleranceangleを適用することである。これは、上述した方法より保守的な方法であり、反りのために予想より小さなＱＲコード領域が得られる可能性がある。これは、有効なＱＲコード領域が内部ＦＰチェックにより誤って除去されるような状況である偽陰性を減少する。
【０１０２】
ＱＲコードがそれらを取り囲む４モジュールサイズ分の静穏領域を含む必要があるということは、ステップ１９０３の内部ＦＰチェックの目的で潜在的な２／３コード領域を拡大するために活用される。これは、真の２／３領域として識別される偽陽性２／３領域の数を減少する。一般に、追加のファインダパターンは、コード領域の検出されたファインダパターンの中心の１１モジュールサイズ内では発生できない。これは、４モジュール分の静穏ゾーン及び２つのハーフファインダパターン（それぞれが３．５モジュール）の双方を考慮に入れる。内部ＦＰチェックに対して使用される潜在的な２／３領域のサイズは、領域の四隅を１１モジュールサイズ分だけ外側に移動することにより拡大される。
【０１０３】
潜在的な２／３領域が追加の検出されたファインダパターンを含むと判定される場合、追加の検出されるファインダパターンの信頼度が領域の検出されたファインパターンの信頼度より非常に低いかが判定される。このチェックは、擬似コード２０を実行することにより達成される。
****擬似コード２０****
if 
(
confidencefp
＜
(
0.75
X
min(confidenceA, confidenceB)
)
):
check passed
else:
check failed
図１９に戻ると、潜在的な２／３領域が潜在的な領域の検出されたファインダパターンに類似する信頼度の追加の検出されたファインダパターンを含まないことがステップ１９０３で判定された場合、次のステップ１９０４において、潜在的な２／３領域は真の２／３領域としてメモリ３３３４に保存される。
【０１０４】
ステップ１９０６でテストされるように、未処理の潜在的な２／３領域が更に存在する場合、ステップ１９０２に戻る。或いは、全ての潜在的な２／３領域が処理された場合、真の２／３領域のリスト１２１４を形成する処理１２０４は最後のステップ１９０５で終了する。
【０１０５】
真の３／３領域のリスト６０８及び真の２／３領域のリスト１２１４は、分解処理４０４から出力されるような上述の（予測された）ＱＲコード領域４１６を共に形成する。
復号化処理
復号化処理４０５について、図２１を参照して説明する。復号化処理４０５は、３／３領域（６０８）及び２／３領域（１２１４）の各々から情報を抽出しようとする。検出されたファインダパターンは、複数の３／３領域及び２／３領域により共有されても良い。これは、ステップ４０４の結果、３／３領域及び２／３領域の各々における符号化データの存在がまだ未知であるためである。即ち、ステップ４０４で生成される領域４１６はＱＲコードとして確定されていないが、領域はＱＲコードを含む可能性が高い。
【０１０６】
ステップ４０５において、データが領域から正常に抽出された場合に領域はＱＲコードとして確定される。更に、ＱＲコードは他のＱＲコードとファインダパターンを共有しなくても良い。従って、ＱＲコード領域が正常に復号化されると、ファインダパターンを正常に復号化されたコード領域と共有する任意の残りの領域は処理されない。このように、処理時間は、ＱＲコードを形成できない領域を復号化しようとすることに浪費されない。
【０１０７】
復号化処理４０５は初期ステップ２１０１で開始し、３／３領域及び２／３領域の１つ又は複数のリストが入力される。
【０１０８】
次のステップ２１０２において、全ての３／３領域が処理される。コード領域から符号化情報を抽出しようとすることを含むこの処理ステップの詳細については後述する。
【０１０９】
次のステップ２１０３において、全ての２／３領域は同様に処理される。
【０１１０】
復号化処理４０５は、最後のステップ２１０４で終了する。
【０１１１】
ステップ２１０２で採用される３／３領域を処理する処理については、図２２を参照して詳細に説明する。
【０１１２】
初期ステップ２２０１において、３／３領域のリストは受信される。
【０１１３】
次のステップ２２０２において、３／３領域はそれらの領域信頼度によりソートされ、より高い信頼度を有する領域がより低い信頼度を有する領域より前に処理されることを保証する。
【０１１４】
次のステップ２２０３において、ステップ２２０２で作成されたリストの次の残りの３／３領域が選択される。
【０１１５】
次のステップ２２０４において、領域を復号化しようとする。復号化は、ＱＲコードの符号化コンテンツを識別するために領域の３つのＦＰを使用する。特に、３つのＦＰの各々の場所は、コード領域のデータモジュールがサンプリングされ且つ符号化データが抽出されるデータモジュール位置のグリッドを規定するために使用される。コードの全ての３つのＦＰが取得された後にデータモジュールをサンプリングし且つＱＲコードから符号化データを抽出する処理は、従来技術において周知であるため、更に説明する必要はない。
【０１１６】
領域が正常に復号化される場合、現在の領域とＦＰと共有するこれから処理される任意の３／３領域は、次のステップ２２０５で廃棄される。
【０１１７】
更に、ステップ２２０５の後のステップ２２０６において、現在の領域とＦＰを共有するこれから処理される任意の２／３領域も廃棄される。
【０１１８】
ステップ２２０８でテストされるように、これから処理される３／３領域が存在する場合、ステップ２２０３に継続する。ステップ２２０４の復号化が失敗した場合、ステップ２２０８のテストが後続する。
【０１１９】
全ての３／３領域が処理されると、処理２１０２は最後のステップ２２０７で終了する。
【０１２０】
ステップ２１０３で採用される２／３領域の処理については、図２３を参照して詳細に説明する。
【０１２１】
初期ステップ２３０１において、残りの２／３領域のリストが受信される。尚、いくつかの２／３領域はステップ２２０６で廃棄されている場合がある。
【０１２２】
次のステップ２３０２において、２／３領域は、それらの領域信頼度によりソートされ、より高い信頼度を有する領域がより低い信頼度を有する領域の前に処理されることを保証する。
【０１２３】
次のステップ２３０３において、ステップ２３０２で作成されたリストの次の残りの２／３領域が選択される。
【０１２４】
次のステップ２３０４において、第３のＦＰが後で詳細に説明される処理で見つけられる。
【０１２５】
損失するＦＰがステップ２３０４において正常に見つけられる場合、次のステップ２３０５に進み、ステップ２３０３からの２つの選択された検出されたファインダパターン及びステップ２３０４で検出された第３のファインダパターンを使用して、ステップ２２０４で採用された処理と同一の復号化処理で領域を復号化しようとする。復号化データは、例えば出力変数３３６２としてメモリ３３３４に格納されても良い。
【０１２６】
復号化が成功した場合、ステップ２３０６において、正常に復号化された領域とＦＰを共有するこれから処理される任意の２／３領域は、ステップ２２０６で採用された処理と同様の処理で除去される。
【０１２７】
ステップ２３０８でテストされるように、これから処理される２／３領域が存在する場合、ステップ２３０３に継続する。ステップ２３０４の検出又はステップ２３０５の復号化が失敗した場合、ステップ２３０８のテストが後続する。
【０１２８】
全ての２／３領域が処理されると、処理２１０３は最後のステップ２３０７で終了する。
損失するＦＰの検出
テンプレート相関は、画像中の特徴を検出し且つそれらの位置を特定する周知の非常に高いロバスト性を有する方法である。本発明の状況において、ＱＲ ＦＰを検出し且つそれらの位置を特定するのが望ましい。しかし、テンプレート相関は、いくつかの基本的な欠点を有する。第１に、本発明の状況において、テンプレート相関は、ＱＲ ＦＰのサイズが事前に決定されることを必要とする。第２に、テンプレート相関は、ＱＲ ＦＰの回転の向きが事前に決定されることを必要とする。これらの２つの制約は、テンプレート相関を実現する任意のＱＲ ＦＰ検出システムの機能性を大きく制限する。印刷／走査されたＱＲコードの特定の例において、走査済画像にはＱＲコードの回転位置ずれがほぼ常に存在する。
【０１２９】
上記２つの説明した制約に加え、テンプレート相関は計算に費用がかかる動作である。その結果、走査済画像全体に対してテンプレート相関を採用するＱＲ ＦＰ検出システムは非実際的に遅い。
【０１３０】
しかし、本発明者は、ロバスト性を利用し且つ上述の制約を克服するようにテンプレート相関を利用するＱＲ ＦＰ検出システムを開発した。一般的に、本発明で開示されるシステムは、先に実行されたＣＣＡにより収集された情報を採用して、探索されるＦＰに適応されるテンプレートを形成し、それにより相関強度を最大にする。実質上、印刷／走査サイクルにより導入される任意の歪み及び位置ずれは、既に検出された２つのＦＰに対する影響から推定可能である。この情報は、損失する損失したＦＰをより効率的に且つより正確に探索するために使用される。
【０１３１】
更に、画像中の小さな探索領域は、既に検出された２つのＦＰの場所から推定されても良い。これらの探索領域は、第３の損失するＦＰの位置が特定される可能な領域である。従って、計算に費用がかかるテンプレート相関の動作は画像の小さな部分に制限され、その結果、はるかに効率的な検出システムが得られる。
【０１３２】
ステップ２３０４で採用される損失するＦＰを検出する処理について、図２４を参照して説明する。
【０１３３】
処理は、初期ステップ２４０１で開始し、２／３領域が入力される。
【０１３４】
次のステップ２４０２において、パターンマッチングテンプレートは、２／３領域の既に検出された２つのＦＰを参照して形成される。パターンマッチングテンプレートを形成する２つの効果的な方法については、後で詳細に説明する。
【０１３５】
次のステップ２４０３において、候補探索領域が形成される。候補探索領域は、第３の損失するＦＰが存在してもよい小さな画像領域である。候補探索領域を形成する処理２４０３については後述する。
【０１３６】
次のステップ２４０４において、ステップ２４０２で生成されたパターンマッチングテンプレートは、ステップ２４０３で形成された各候補探索領域に適用される。このステップは、テンプレート相関により第３の損失するＦＰを検出しようとする。損失するＦＰが検出され、ステップ２４０４が成功した場合、２／３領域は「完了」したと判定される。即ち、全ての３つのＦＰが検出され、ＱＲコードに符号化されたデータが抽出されても良い。従って、損失するＦＰが検出された場合、ステップ２４０５に継続し、「完了した」領域は処理２３０４から出力されるリストに追記される。損失するＦＰが検出されなかった場合、２／３領域は有効なＱＲコードを形成せず、廃棄される。損失するＦＰを検出する処理２３０４は、ステップ２４０６で終了する。
テンプレートの形成−メタデータから
ステップ２４０２で採用されても良いＣＣＡ情報からパターンマッチングテンプレートを形成する１つの処理について、ステップ２４０２ａとして図２５を参照して詳細に説明する。
【０１３７】
処理２４０２ａは、初期ステップ２５０１で開始し、２／３領域が入力される。
【０１３８】
次のステップ２５０２において、２／３領域の既に検出された２つのＦＰに対するＣＣＡからの情報が取得される。上述のように、ＣＣＡは検出されたＦＰに関する以下の情報を提供する。
（１）ＦＰの中心の座標
（２）ＦＰの黒色モジュールのサイズ
（３）ＦＰの白色モジュールのサイズ
（４）ＦＰの回転
（５）ＦＰの信頼度
（６）ＦＰのバウンディングボックス
ＦＰを形成する黒色及び白色モジュールのサイズは、ドットゲインの効果の指示を与える。従って、ＱＲコード領域の３つのＦＰのうちの２つが検出された場合、ドットゲイン情報は第３の損失するＦＰの位置を特定するために使用される。２つの検出されたＦＰの間のモジュールサイズの平均を取得するのが有用である。これらの平均は、擬似コード２１を実行することにより計算されても良い。
****擬似コード２１****
average_module_sizeblack = 
(module_sizeblack, fp0 + module_sizeblack, fp1) / 2
average_module_sizewhite = 
(module_sizewhite, fp0 + module_sizewhite, fp1) / 2
次のステップ２５０３において、ＣＣＡから取得される情報は、パターンマッチングテンプレートを生成するために使用される。ステップ２５０３において、ＱＲ ＦＰのテンプレート２７００（図２７から分かる）は、擬似コード２２のように以下の黒色の幅及び白色の幅の比率に準拠してメモリ３３３４に形成される。ラベル「average_module_size」は、表現の便宜上「ams」と略される。
****擬似コード２２****
amsblack : amswhite : 3 x amsblack : amswhite : amsblack
****擬似コード２２****
average_module_sizeblack:
average_module_sizewhite:
3 x average_module_sizeblack:
average_module_sizewhite:
average_module_sizeblack
図２７で分かるように、ＦＰテンプレート２７００の外側の黒色領域２７０１は、average_module_sizeblackの線幅２７０４を有する。更に白色領域２７０２はaverage_module_sizewhiteの幅２７０５を有する。最後に、内側の黒色領域２７０３は、average_module_sizeblackの３倍の幅２７０６を有する。
【０１３９】
その後、テンプレート２７００は既に検出されているＦＰの角度を考慮して回転される。これは、図２８において回転されたテンプレート２８００を参照すると分かる。ここで、２つの検出されたＦＰ間、anglefp0とanglefp1との平均角度２８０１（angleaverage）は擬似コード２３を実行することにより計算される。
****擬似コード２３****
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
指定された角度だけテンプレートを回転することの詳細な説明は、補間を含むアフィン変換等の種々の周知の方法が採用されてもよいため本明細書において提供しない。
【０１４０】
ドットゲイン情報及び角度回転情報を取り入れたテンプレート２８００が形成されると、ＣＣＡ情報からパターンマッチングテンプレートを形成する処理２４０２ａは、最後のステップ２５０４で終了する。
テンプレートの形成−切り抜き及び平均化
図２６は、ステップ２４０２で採用されてもよいパターンマッチングテンプレートを形成する別の方法２４０２ｂを示す。本明細書において、テンプレートは、入力画像又は２値化画像４１０、４１２から既に検出されている２つのＦＰを切り抜き、それらの既に検出されている２つのＦＰを変倍及び平均することにより作成される。
【０１４１】
処理２４０２ｂは、初期ステップ２６０１で開始し、２／３領域が入力される。
【０１４２】
次のステップ２６０２において、２／３領域における既に検出されている２つのＦＰは、各ＦＰのバウンディングボックス情報を使用して取得された画像からトリミングされる。２つのトリミングされた画像は、高さ及び幅が僅かに異なる可能性があるため、ステップ２６０２において変倍が採用され、検出されている２つのＦＰの平均高さ及び幅に双方の画像を変倍する。ここでも、この目的を達成するためにアフィン変換が使用されても良い。
【０１４３】
次のステップ２６０３において、ＦＰの２つの変倍表現の各画素は、２つの画素輝度を合計し且つその合計を２で除算することにより平均される。結果として、印刷／走査動作により導入される任意のノイズ及び歪み効果を含む検出されたＦＰの平均化表現であるテンプレートが得られる。
【０１４４】
テンプレート２４０２を形成する処理２４０２ｂは、最後のステップ２６０４で終了する。
探索領域
次に、第３のファインダパターンを潜在的に含む候補探索領域を形成する処理２４０３について、図２９Ａ〜図３０を参照して詳細に説明する。
【０１４５】
図２９Ｂは、垂直に配向された２／３領域２９１０の一例を示し、図２９Ａは、対角に配向された２／３領域２９００の一例を示す。探索領域を生成する処理２４０３は、垂直又は対角に配向された２／３コード領域がステップ２４０３で処理されるかに依存して異なる。双方のタイプの２／３領域に対する適切な処理について以下に説明する。
【０１４６】
図２９Ｂの垂直に配向された２／３領域において、２つの矩形の探索領域２９１３及び２９１４は、検出されたファインダパターン２９１１及び２９１２付近又は近傍に形成される。これは、検出された各ファインダパターン２９１１及び２９１２の中心を通り且つ線２９１５に垂直である２つの線２９１６及び２９１７を形成することにより達成されても良い。線２９１６及び２９１７は、図３０を参照して上述する処理により探索領域２９１３及び２９１４の場所を規定する。尚、図２９Ｂに示す２／３領域２９１０は、ステップ４０４において検出された２つのファインダパターン２９１１及び２９１２から形成される２つの可能な２／３領域の一方である。別の２／３領域は、ファインダパターン２９１１及び２９１２の左側に形成されるが、その２／３領域に対する探索領域は、図２９Ｂに示す領域２９１０と同様の方法で形成される。
【０１４７】
図２９Ａの対角に配向された２／３領域２９００において、２つの矩形の探索領域２９０３及び２９０４は、検出されたファインダパターン２９０１及び２９０２付近又は近傍に形成される。本明細書において、２つの線２９０５及び２９０７は、検出された２つのファインダパターン２９０１及び２９０２の中心を通る線２９０６に対して４５°で形成される。これらの線２９０５及び２９０７の双方とも、検出された２つのファインダパターン２９０１、２９０２のうち一方の中心を通る必要がある。中心のＦＰの選択は任意である。これらの線２９０５及び２９０７は、図３０を参照して次に説明される処理により探索領域２９０３及び２９０４の場所を規定する。
【０１４８】
図３０は、線３００２上で位置が特定される検出されたファインダパターン３００１及び近傍の探索領域３０１７を示す。図３０は、探索領域が２／３領域のファインダパターンとファインダパターン及び探索領域の中心を通る周知の線とに基づいて形成される方法を示す。図２９の垂直に配向されたコード領域２９１０に戻ると、図３０に示す構成はファインダパターン２９１１及び近傍の探索領域２９１３（線２９１６上）に対応し、或いはファインダパターン２９１２及び近傍の探索領域２９１４（線２９１７上）に対応する。図２９Ａの対角に配向されたコード領域２９００を参照すると、図３０の構成は、中心のファインダパターン２９０１及び近傍の探索領域２９０３又は２９０４（それぞれ線２９０７及び２９０５上）に対応する。
【０１４９】
探索領域３０１７の中心３０１３は、損失するファインダパターンの予想される場所に対応する。ファインダパターン３００１と探索領域３０１７の中心３０１３との間の距離３０１５は、処理されているコード領域の近傍のファインダパターンの間の公称距離（Dnomとして示される）である。コード領域２９１０等の垂直に配向されたコード領域において、公称距離Dnomは線２９１５に沿うファインダパターン２９１１及び２９１２の中心間の距離である。これは、擬似コード２４により表される。
****擬似コード２４****
Dnom, normal = distance(第１の検出されたＦＰから第２の検出されたＦＰ)
コード領域２９００等の対角に配向されたコード領域において、公称距離Dnomは、線２９０６に沿うファインダパターン２９０１及び２９０２の中心の間の距離を１．４１で除算したものである。これは、擬似コード２５により表される。
****擬似コード２５****
Dnom, diagonal = 
distance(第１の検出されたＦＰから第２の検出されたＦＰ) 
/ 
1.41
尚、上記で使用される定数１．４１は２の平方根を近似する。
【０１５０】
矩形の探索領域３０１７の範囲は、領域が制御点３００７、３００８、３００９、３０１０、３０１１及び３０１２の全てを含む一方で可能な限り小さくなるように規定される。尚、矩形の探索領域は、線３００２の角度に関係なく、使用される座標系の軸（例えば、３０２０及び３０２１）に平行辺により常に配向される。これは、そのような矩形の垂直に配向された探索領域により、後で行われるテンプレートマッチング処理が容易に実現されるためである。
【０１５１】
矩形の探索領域３０１７の範囲を規定する点の場所は、未検出のファインダパターン３０１３の予想される場所に対して大きさの許容差tolerancemagnitude及び角度許容差toleranceangleの双方を適用することに基づく。点３００９は、長さDmax３０１６の線３００２に沿うファインダパターン３００１からのベクトル３００４の端点として見つけられる。長さDmaxは以下のように計算可能である。
****擬似コード２６****
Dmax = (1 + tolerancemagnitude) x Dnom
点３０１２は、ファインダパターン３００１から距離Dmin３０１４のところでベクトル３００４に沿う点として見つけられる。距離Dminは、以下のように計算される。
****擬似コード２７****
Dmax = (1 - tolerancemagnitude) x Dnom
ベクトル３００３は、ベクトル３００４を線３００２からtoleranceangle x pi / 2 ３００６だけ回転させることにより見つけられる。点３００７及び３００８は、このベクトルに沿って距離Dmin及びDmaxのところでそれぞれ見つけられる。点３０１０及び３０１１は、線３００２から異なる方向にtoleranceangle x pi / 2 ３００６だけ回転されたベクトル３００５に沿って同様に見つけられる。
【０１５２】
この実現例において、座標系の軸に平行辺を有する矩形の探索領域が使用されるが、本明細書で説明する方法に類似する方法を使用して形成される任意の探索領域が代わりに使用されてもよいことが当業者には理解されるだろう。本明細書で説明される構成は、探索領域が損失するファインダパターンの予想される場所及び適用されたいくつかの許容差に基づいて形成されるべきであり、その結果、潜在的なコード領域と同様のサイズの探索領域（即ち、ページ全体よりはるかに小さい）が得られることを示す。本発明の説明される実現例において、大きさ及び角度許容差が使用され、矩形の探索領域はそれらの許容差により規定された領域に適合される。本発明から逸脱せずに、任意の形状の探索領域を規定するために、損失するファインダパターンの予想される場所に対して許容差を適用する別の手段が採用されてもよいことが考えられる。
テンプレートの適用
ステップ２４０４において、ステップ２４０２で形成されたテンプレートは、テンプレート相関処理の際にステップ２４０３で識別された探索領域に適用される。
【０１５３】
２次元（２Ｄ）相関は、画像中の要求される特徴を検出し且つその位置を特定する周知の方法である。２Ｄ相関は、２Ｄ相関マップを与えるために探索領域に含まれるコンテンツにテンプレートを渡すことを含む。相関マップの各点は、その時点におけるテンプレートの類似性及び重なり合う探索領域を示す。従って、相関マップの急なピークは、テンプレートに類似する特徴が探索領域のコンテンツ中にピークの座標において存在することを示す。
【０１５４】
ステップ２４０４において、ステップ２４０２で形成されるＦＰテンプレートとの２Ｄ相関は、ステップ２４０３により指定される各探索領域に適用され、第３のＦＰが存在するかが判定される。第３のＦＰが存在するかを判定する際、所定のピーク強度閾値が適用される。探索領域のいずれかの相関マップの最大のピークが所定の閾値より大きい場合、ＦＰはその探索領域においてピークの場所に存在すると判定される。ＦＰが双方の探索領域において見つけられる場合、２／３領域の第３のＦＰは、対応する相関マップにおいてより高いピークを有するＦＰであると判定される。第３のＦＰが正常に見つけられた場合、ステップ２４０５に進み、完全なＱＲ領域を出力する。所定の相関ピーク閾値より大きい強度の相関ピークがステップ２４０３により指定された探索領域のうちいずれの領域でも見つけられない場合、テンプレートマッチング処理２４０４は失敗したと考えられ、ステップ２４０６に進み、処理２３０４は終了する。
【０１５５】
ステップ２４０４で適用されるテンプレート相関の別の方法は、１次元相関（説明した２Ｄ相関方法の代わりに）を含む。１次元相関は、ステップ２４０２で形成された説明した２Ｄパターンマッチングテンプレートを通して「スライス」を得ることを含む。「スライス」は、テンプレートと同一の回転角angleaverageで配向されるテンプレートの中心点を通る断面である。その後、行毎の探索が探索領域にわたり実行される。探索がテンプレート「スライス」に類似する画素線を与える場合、第３のＦＰは正常に見つけられたと考えられる。更に、探索は回転角angleaverageに垂直な方向に実行されても良い。
別の実現例
ＱＲコード検出及び復号化に対する別の実現例は、ＱＲコードの固有の特徴を利用し、２／３領域において損失するＦＰを検出する処理を助長する。
【０１５６】
この別の実現例において、損失するＦＰを検出する処理２３０４は、図３２に示す処理２３０４ａに変更される。処理２３０４ａは追加の領域確定ステップ３２０１を含み、他のステップは上記で説明し且つ番号を付けたステップと同一である。
【０１５７】
領域確定ステップ３２０１の第１の例において、クロッキングパターンが必要とされる。図３１に示すように、ＱＲコードはＦＰ間にわたるクロッキングパターン３１０２を含む。これらのクロッキングパターン３１０２は、左上のＦＰから左下のＦＰ及び右上のＦＰまでの直線である交互になっている黒色モジュール及び白色モジュールから構成される。従って、既に検出されている２つのＦＰの各々から離れる方向に誘導する交互になっている黒色モジュール及び白色モジュールの線形的な推移を検出するために、単純なチェックが実行されても良い。クロッキングパターンに類似する交互になっている黒色モジュール及び白色モジュールが検出される場合、領域確定ステップ３２０１は成功し、上述のステップ２４０２が後続する。検出されない場合、領域確定ステップ３２０１は失敗し、ステップ２４０６が後続する。
【０１５８】
領域確定ステップ３２０１の第２の例は、コード領域の周波数特性を検査する。ＱＲコードモジュールサイズは、既に検出されている２つのＦＰから計算されても良い。従って、周波数解析技術（２Ｄフーリエ変換等）は、コード領域の黒色モジュール及び白色モジュールの周波数が検出されたＦＰの周波数とマッチングするかを判定するために使用されても良い。特に、コード領域のエネルギーはＱＲコードモジュールサイズにマップする周波数に集中されると予想される。その場合、領域確定ステップ３２０１は成功し、ステップ２４０２が後続する。周波数がマッチングしない場合、領域確定ステップ３２０１は失敗し、ステップ２４０６が後続する。
【０１５９】
ＱＲコード検出及び復号化に対する更に別の実現例は、図３１に示すようなＱＲコード中のバージョン情報３１０４を利用し、ＦＰがＱＲコードバージョン１〜４０に準拠するかをチェックするステップ１３０７（図１３）のチェックを助長する。バージョン６より大きいＱＲコードは、コードのバージョンをＱＲオードファインダパターンの近傍で符号化する。バージョン情報は誤差補正され、周知の方法を使用して復号化されても良い。ＱＲコードモジュールサイズ（検出されたＦＰから計算される）を仮定すると、ＱＲコードバージョンは、画素数でのＱＲコードの物理的サイズを判定するために使用されても良い。従って、ステップ１３０７において、検出されたＦＰ間の距離がＱＲコードの物理的サイズ（バージョン情報を復号化することにより判定される）と整合性があるかを判定するためのチェックが行われても良い。
結論
ＣＣＡ自体は、ファインダパターン検出に対する不完全なツールである。ＣＣＡは、高速で安価である一方、トポロジにおける損失があるファインダパターン、例えば内部の構成要素１０３が外部の構成要素１０１に連結されることが見つけられるか又は外側の構成要素と切断又は中断されているファインダパターンを検出できない。しかし、ＣＣＡをテンプレートマッチングと組み合わせ且つその組み合わせをファインダパターンが予想される領域に限定することにより、本発明者は、ＣＣＡの利点（サイズ、回転及びドットゲインに対するロバスト性）がテンプレートマッチングの利点（トポロジの損失に対するロバスト性）と組み合わされる一方でそれらの対応する欠点を回避することを見つけた。この方法により、損失するファインダパターンの位置は確実に特定され、効率的なＱＲコード復号化を可能にする。先の復号化は、計算に費用がかかるか又は誤差の影響を受け易かった。
目標特徴検出システム
テキスト又は図等の他のコンテンツを含んでもよい画像において目標特徴の存在を検出し且つその場所を判定するための構成が開示される。
有効な目標特徴の説明
次に、有効な目標特徴を、図１を参照して説明する。図１は、２つの異なる輝度レベルの領域を有する目標特徴１００として考えられてもよいものを示す。簡潔にするために、より低い輝度の領域は黒色で示され、より高い輝度の領域は白色で示される。目標特徴１００は、連続した白色領域１０２により全体を囲まれる連続した黒色領域１０３から構成され、白色領域１０２全体は、連続した黒色領域１０１内に囲まれる。しかし、本発明は、図示する構成に限定されない。最も内側の領域１０３は白色であってもよく、その外側の領域１０２は黒色であってもよいことが理解されるべきである。従って、このように黒色領域及び白色領域（即ち、より暗い領域及びより明るい領域）が交互に維持される限り、構成は有効な目標特徴である。更に有効な目標は、目標特徴１００に示すような３つの交互になった黒色領域及び白色領域に限定されず、４つ以上の別個の領域から構成されても良い。例えば図３４の特徴３４００は有効な目標特徴であり、６つの別個の黒色領域及び白色領域（３４０１、３４０２、３４０３、３４０４、３４０５、３４０６）を含む。
目標特徴検出の説明
図１の目標特徴１００は、テキスト又は図等の他のコンテンツを含む文書に埋め込まれても良い。更に文書は、複数の関心目標特徴を含んでも良い。この文書は、図３５に示すデジタル画像３５００を形成するために印刷及び走査されても良い。デジタル画像３５００は、デジタルカメラから等、走査以外の方法で取得されても良い。印刷／走査処理は、デジタル画像３５００が原稿の不完全な表現になるようにノイズ及び歪みを導入する可能性がある。従って、デジタル画像３５００の目標特徴３５０１の表現には、ノイズ及び歪みがある可能性がある。上述した構成は、目標特徴３５０１がノイズ及び歪みに影響を受けた場合でもデジタル画像３５００において目標特徴を検出し且つそれらの位置を特定する。
【０１６０】
次に、デジタル画像３５００において目標特徴３５０１を検出し且つその位置を特定する処理３６００について、図３６を参照して説明する。目標特徴を検出し且つその位置を特定する処理３６００は、コンピュータシステム３３００がステップ４０１で開始した時にソフトウェアアプリケーションを実行することにより行われるのが好ましい。ステップ４０１において、デジタル画像３５００は、例えばプロセッサ３３０５によりＨＤＤ３３１０から検索されることにより入力される。
【０１６１】
処理３６００の次のステップ３６０２において、プロセッサ３３０５は、２値化処理を実行することによりデジタル画像３５００から図３７に示す２値化画像３７００を作成する。
【０１６２】
次のステップ３６０３において、プロセッサ３３０５は、ステップ３６０２で作成された２値化画像を利用して、２値化画像３７００に対して連結成分解析を実行する。連結成分解析処理３６０３は、黒色領域及び白色領域を含む２値化画像３７００において特徴を識別するように動作し、それによりその２つの表現が可能になる。これは、有効な目標特徴に対する要件である。連結成分解析処理３６０３により識別される２値化画像３７００における特徴は、候補目標特徴と呼ばれる。連結成分処理３６０３の間、候補目標特徴の幾何学的特性に対応する低レベル計測値がプロセッサ３３０５により計算される。これらの低レベル計測値及び計測値の集合については、後で詳細に説明する。
【０１６３】
次のステップ３６０４において、候補目標特徴の各低レベル計測値は、候補目標特徴と関連付けられるサイズ情報、位置情報及び類似性スコアを判定するために使用される。類似性スコアは、候補目標特徴が要求される目標特徴１００にどの程度類似しているかを判定する。従って、実際には候補目標特徴がノイズ及び歪みにより僅かに破損した目標特徴１００である場合、その候補目標特徴の類似性スコアは高い。その一方で、候補目標特徴が目標特徴１００とは幾何学的に異なる場合、候補目標特徴は低い類似性スコアを有する。サイズ情報、位置情報及び類似性スコアについては後で詳細に説明する。
【０１６４】
次のステップ３６０５において、後処理ステップは、候補目標特徴のサイズ情報、位置情報及び類似性スコアに適用され、実行されている特定の実現例に依存して種々の目的を達成する。この後処理ステップは実現例毎に異なり、その詳細については後述する。
【０１６５】
目標特徴を検出し且つそれらの位置を特定する処理３６００は、次の最後のステップ３６０６で終了する。
閾値処理の説明
画像の２値化ステップ３６０２を実行する種々の方法が存在する。例示的な一実現例において、２値化画像３７００がデジタル画像３００から作成されるステップ３６０２は、適応方法を使用して実行され、その詳細については図３８を参照して次に説明する。説明した２値化ステップ３６０２は、画像をモザイク状の画素のタイルに分割し、タイルの近傍の画素毎に適切な閾値を計算する。最小輝度値mintile及び最大輝度値maxtileがタイル毎に格納される。一例として、デジタル画像３５００は、幅が３２画素及び高さが３２画素のタイルに分割される。図３９は、デジタル画像３５００がタイル３９０１に分割される方法を示す。本明細書で説明する２値化ステップ３６０２は、プロセッサ３３０５によりソフトウェアで実現されてもよく、或いはＡＳＩＣ等のコンピュータ３３０１の一部として形成されるハードウェア論理を使用し且つプロセッサ３３０５の制御下で動作することにより実現されてもよいロバスト性を有する効率的なアルゴリズムである。ここでも、入力画像から２レベル画像を生成する任意の２値化方法がこのステップにおいて使用されてもよいことが理解されるべきである。
【０１６６】
図３８の２値化ステップ３６０２は、最初のステップ３８０１から開始し、デジタル画像３５００が入力される。デジタル画像３５００は、左上の画素から開始して１度に１画素処理される。デジタル画像３５００は、画素処理の順序がある行の最も左側の画素から開始して同一行の最も右側の画素まで進むようにラスタ形式で処理される。その後、処理は、次の行で再度開始し、一番下の行が処理されるまで同一の左から右への処理フローを繰り返す。この初期ステップ３８０１において、タイルバッファはメモリ３３０６等に設定される。タイルバッファは、タイルの最小輝度値mintile及び最大輝度値maxtileの一時レコードとしての役割を果たす。図４０を参照すると、タイルバッファ４０００が示され、タイルメモリ４００１はタイル３９０１に対する最小輝度値及び最大輝度値を格納する。タイルバッファ４０００は、２次元配列として考えられ、各要素は、ｘ指標xtile及びｙ指標ytileにより一意的に識別されても良い。
【０１６７】
次のステップ３８０２において、処理順序で次の画素が取得される。タイルの最大輝度値及び最小輝度値は、取得された（又は対象）画素の輝度に従って更新される。更新されるタイルは、対象画素のｘ座標xpixel及びｙ座標ypixelから取得される。２値化方法３８００の１つの面は、２値化される画素の前のいくつかの走査線のタイル情報を収集する能力である。タイル情報が収集される２値化される画素の前の走査線数は、パラメータheightforwardにより指定される。更新されるタイル３９０１のタイルｘ指標xtile及びタイルｙ指標ytileは、以下のように計算されても良い。
【０１６８】
xtile = floor(xpixel/widthtile)
ytile = floor((ypixel - heightforward)/heighttile)
更新されるタイルは、xtile及びytileにより一意に識別され、タイルバッファ４０００の対応するタイルメモリ４００１はアクセスされる。
【０１６９】
アクセスされたタイルメモリの最大輝度値及び最小輝度値は、対象画素の輝度値を参照して更新される。輝度値が最小輝度値より小さい場合、アクセスされたタイルメモリの最小画素輝度値は対象画素の輝度値と置換される。或いは、対象画素の輝度値が最大輝度値より大きい場合、アクセスされたタイルメモリの最大画素輝度値は対象画素の輝度値と置換される。
【０１７０】
このように、デジタル画像３５００のタイルの最大輝度値及び最小輝度値は、現在２値化されている画素の前のいくつかの走査線だけ更新される。２値化画像３７００は、判定されると、メモリ３３０６又は３３１０に格納されても良い。
【０１７１】
次のステップ３８０３において、閾値はプロセッサ３３０５により対象画素を取り囲む近傍のタイルから計算される。実質上、タイルのスライディングウィンドウは、２値化される各対象画素の周囲に形成される。一例として、スライディングウィンドウは幅widthwindow = 5及び高さheightwindow = 2を有する。図４１は、タイルを含むデジタル画像３５００上に重ね合わされ且つタイル４１０１を含むスライディングウィンドウ４１００を示す。対象画素の対応するウィンドウは、対象画素の座標xpixel及びypixelから計算されても良い。
【０１７２】
スライディングウィンドウ４１００の一番上の範囲に対応するタイルのｙ指標ytileは、プロセッサ３３０５により以下のように計算されても良い。
【０１７３】
ytile = floor(ypixel/heighttile) - heightwindow
スライディングウィンドウ４１００の一番下の範囲に対応するタイルのｙ指標ytileは、以下のように計算されても良い。
【０１７４】
ytile = floor(ypixel/heighttile)
スライディングウィンドウの最も左側の範囲に対応するタイルのｘ指標xindexは、以下のように計算されても良い。
【０１７５】
xtile = floor(xpixel/widthtile) - floor((widthwindow - 1)/2)
スライディングウィンドウ４１００の最も右側の範囲に対応するタイルのｘ指標xindexは、プロセッサ３３０５により以下のように計算されても良い。
【０１７６】
xtile = floor(xpixel/widthtile) + floor((widthwindow - 1)/2)
対象画素の対応するスライディングウィンドウ４１００が取得されると、対象画素の閾値は、スライディングウィンドウ４１００内の各タイル４１０１の最小輝度値mintile及び最大輝度値maxtileから計算されても良い。
【０１７７】
例示的な閾値は、各タイルの閾値の加重平均である。重み付きタイル閾値thrtileは、タイル毎に以下の式を評価してプロセッサ３３０５により計算される。
【０１７８】
thrtile = ((maxtile + mintile)/2) x (maxtile - mintile)
更にタイル重みweightthrは、タイル４１０１毎に以下の式から計算される。
【０１７９】
weighttile = maxtile - mintile
従って、対象画素に対する適切な閾値thrfinalは以下の式から見つけられる。
【０１８０】
【数１】
2010170539.tif 000003
【０１８１】
スライディングウィンドウ４１００の全ての画素は同様の輝度を有し、全てが暗い画素であるか又は明るい画素である場合がある。この場合、計算される閾値thrfinalは過度に小さいか又は過度に大きい。従って、２値化画像３７００における結果として得られる領域は、同様の黒色領域又は白色領域の代わりにノイズに類似する黒画素及び白画素を含む。これらの例が発生するのを最小限にするために、計算された閾値thrfinalは所定の範囲（例えば、５０〜２１０）内で変動してもよいが、閾値がこの範囲を超える場合、最も近い範囲内の値が代わりに使用される。
【０１８２】
次のステップ３８０４において、ステップ３８０３で計算された閾値は、２値化画像３７００の２値白画素又は２値黒画素を生成するために使用される。対象画素の輝度がステップ３８０３で計算された閾値thrfinalより小さい場合、２値化画像３７００の対応する画素は黒色に設定される。閾値thrfinal以上である場合、２値化画像３７００の対応する画素は白色に設定される。
【０１８３】
ステップ３８０６においてプロセッサ３３０５により判定されるように処理する画素が更に存在する場合、処理順序で次の画素に対してステップ３８０２、３８０３及び３８０４が繰り返される。存在しない場合、２値化ステップ３６０２はステップ３８０５で終了する。
【０１８４】
尚、説明する２値化ステップ３６０２は、ＦＰＧＡ又はＡＳＩＣ等の個別のハードウェア論理素子アレイを使用して実行されても良い。そのような一実現例において、メモリの使用を低減するのが望ましいだろう。これを達成するために、タイルバッファ４０００はメモリ効率が更に良い実現例と置換されても良い。図４２を参照すると、メモリ効率の良いタイルバッファ１０００は、heightwindow + 1行のタイル記憶素子のみを含む（heightforwardはheighttileより小さいと仮定する）。タイルが閾値計算のために参照されない場合、タイルの対応するタイルメモリは閾値計算に必要とされる記憶素子と置換される。
連結成分解析（ＣＣＡ）の説明
ステップ３６０３は、ステップ３６０２で作成された２値化画像に対して連結成分解析（ＣＣＡ）を実行する。本明細書において説明されるＣＣＡの方法は、所定の目標特徴を検出するように特に構成される効率的なアルゴリズムである。説明するＣＣＡ方法は、２値化画像３７００で見つけられる黒色連結成分（ＣＣ）のグループを出力する。特徴１００等の目標特徴が検出される場合、ＣＣＡはＣＣの対を出力する。ＣＣの対において、一方のＣＣは他方のＣＣ内に完全に含まれ且つ他方のＣＣと区別される。目標特徴３４００が使用される場合、ＣＣＡはＣＣのトリプレットを出力する。ＣＣのトリプレットにおいて、１つのＣＣは第２のＣＣ内に完全に含まれ且つ第２のＣＣと区別され、第２のＣＣは第３のＣＣ内に完全に含まれ且つ第３のＣＣと区別される。更に本明細書で説明するＣＣＡ方法は、各ＣＣと関連付けられる低レベル計測値を収集する。簡潔にするために、目標特徴１００を検出する方法について説明するが、そのような方法は上述したように全ての有効な目標特徴を検出するために容易に拡張できる。
【０１８５】
次に、ステップ３６０３で実行されるＣＣＡの方法について、図４３を参照して説明する。方法３６０３は初期ステップ４３０１で開始し、２値化画像３７００が入力される。ＣＣＡ方法３６０３は、上述の２値化方法と同様に２値化画像３７００をラスタ形式で処理する。これは、ＣＣＡ処理が画像３７００の一番上の走査線の最も左側の画素から開始し、画像の全ての画素が処理されるまで継続することを意味する。ＣＣＡ方法は、走査線の黒画素のランを見つけ且つそれらのランを先の行のランから形成されるＣＣに追加することにより行毎にＣＣを構築する。尚、任意の特定の走査線において、ＣＣは、走査線のＣＣの「クレーム」と呼ばれる画素の１つ以上の未結合のランを含む。ＣＣとそのクレームとまだＣＣに割り当てられていないランとの間の関係を図４４に示す。図４４は、走査線４４０３において２つのクレーム４４０１及び４４０２を含むＣＣ４４００を示す。本明細書において、ラン４４０５は、クレーム４４０１及び従ってＣＣ４４００に結合される走査線４４０４において見つけられる。
【０１８６】
次のステップ４３０２において、現在の走査線上の次の一続きの黒画素（ランと呼ばれる）は、プロセッサ３３０５により要求される。そのようなランが見つけられる場合、現在の画素ポインタは新しいランの開始場所まで移動される。先の画素（xstart_run - 1における）が白色であり且つxstart_runの画素が黒色である場合、ランはｘ座標xstart_runから開始するように規定される。先の画素（xend_run - 1における）が黒色であり且つxend_runの画素が白色である場合、ランはｘ座標xend_runで終了するように規定される。ステップ４３０２が現在の走査線上で次の行を見つけられなかった場合、現在の画素ポインタは走査線の最後の画素に設定される。
【０１８７】
次のステップ４３０３において、現在の画素ポインタの後方に範囲を有する先の走査線のクレームは終了する。これは、そのようなクレームが現在の走査線に継続せず、重なり合うランが見つからないためである。終了するクレームがＣＣの最後の終了していないクレームでもある場合、ＣＣは終了する。ＣＣが終了する場合、終了するＣＣが子ＣＣであるかを判定するためのチェックが実行される。親ＣＣが存在する場合、即ち終了されるＣＣの左右において走査線上にクレームを有するＣＣが存在する場合、ＣＣは子ＣＣであると判定される。この条件が満たされる場合、終了されるＣＣは子ＣＣとしてマーク付けされ、対応する親ＣＣにより参照される。
【０１８８】
或いは、終了されるＣＣは親ＣＣであっても良い。本明細書において、終了されるＣＣが子ＣＣを参照するかを判定するためのチェックが実行される。子ＣＣを参照する場合、ＣＣは次の評価ステップ３６０４に対して出力される。
【０１８９】
最後に、ＣＣが親ＣＣに囲まれておらず、ＣＣが親ＣＣでない場合、ＣＣは更なる処理のために出力されない。この場合、メモリ３３０６等のＣＣと関連付けられる任意のメモリがクリアされ、ＣＣに対する任意の参照は廃棄される。
【０１９０】
ステップ４３０２において、ラン（即ち、白画素に囲まれる走査線上の一続きの黒画素）が見つけられる場合、ステップ４３０４において、そのランはプロセッサ３３０５により処理される。ランの処理の詳細については後述する。
【０１９１】
現在処理されている走査線上に更に画素が存在する場合、ステップ４３０２からの処理フローが繰り返される。存在しない場合、２値化画像３７００における次の走査線（存在する場合は）が選択され（ステップ４３０５において）且つ処理される。
【０１９２】
これから処理される走査線が存在しない場合、ステップ３８０３で採用されてもよいＣＣＡの方法が最後のステップ４３０６において終了する。
【０１９３】
次に、ステップ４３０４で採用されるランを処理する方法について、図４５を参照して詳細に説明する。方法は、初期ステップ４５０１から開始し、処理されるランが入力される。
【０１９４】
ランが既存のクレームと結合されない場合、ステップ４５０２において、新しいＣＣ及びクレームが初期化される。
【０１９５】
新たに作成されるクレームを初期化するために、現在の走査線yscanline上のクレームの最も左側の範囲はxstart_runに設定される。同様に、現在の走査線上のクレームの最も右側の範囲はxend_runに設定される。
【０１９６】
新しいＣＣを初期化するために、ＣＣの一番上の範囲ycc_topは現在の走査線のｙ座標yscanlineに設定される。ＣＣの最も左側の範囲xcc_leftは、xstart_runに設定され、ＣＣの最も右側の範囲xcc_rightはxend_runに設定される。他の全ての低レベルＣＣ計測値は、ステップ４５０３に関連して後述する方法により更新される前にゼロに初期化される。
【０１９７】
ランが先の走査線上の単一の既存のクレームに結合される場合、ステップ４５０３において、既存のクレームは新しいランの範囲を含むように変更され、クレームのＣＣは更新される。
【０１９８】
しかし、ランが複数の既存のクレームに結合され且つそれらのクレームが種々のＣＣを参照する場合、マージステップ４５０４において、全てのＣＣはマージされて単一のＣＣを形成する。更に、クレームは新しいランの範囲を含むようにマージされる。いくつかのＣＣをマージする処理の詳細については後述する。
【０１９９】
ＣＣは、ステップ３６０４において高レベル計測値を計算するために使用されるいくつかの関連する低レベル計測値を有する。しかし、ステップ４５０３で累積された低レベル計測値は更新可能であるため、ハードウェアでの実装に適する。定例ベル計測値は以下を含むが、それらに限定されない。
−ＣＣの最も左側の範囲xcc_left
−ＣＣの最も右側の範囲xcc_right
−ＣＣの一番上の範囲ycc_top
−ＣＣの一番下の範囲ycc_bottom
−ＣＣの大きさmasscc
−ＣＣの穴部の大きさmasscc_hole
−ＣＣの傾斜の正弦成分sincc
−ＣＣの傾斜の余弦成分coscc
−ＣＣの傾斜の累積重みweightcc。
【０２００】
ＣＣに対する上記計測値のうち最初の４つを更新する処理は、アプリケーションコードにより表される場合にプロセッサ３３０５により実行されてもよい以下の擬似コードにより最適に表される。
****擬似コード２８****
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)
ＣＣの穴部の大きさは、ＣＣにより囲まれる白画素数の近似値である。ＣＣが現在更新されているクレーム（例えば、現在の走査線上の最も左側の範囲xstart_runを有するclaimcurrent）の左側にクレーム（例えば、現在の走査線上の最も右側の範囲xclaim_left_endを有するclaimleft）を有する場合、ＣＣの穴部の大きさは単純に以下の擬似コードにより更新される。
****擬似コード２９****
masscc_hole = masscc_hole + (xstart_run - xclaim_left_end - 1)
所定の画素位置におけるＣＣの傾斜は、取得されるか又は例えばプロセッサ３３０５により実行されるソフトウェアで実現されるソーベルフィルタ等の周知の方法を使用して判定される。ソーベルフィルタは、対象画素の近傍の１画素内の画素輝度を検査し、画素位置における傾斜を近似する。水平方向の傾斜gradienthorz、垂直方向の傾斜gradientvert及び傾斜ベクトルの大きさgradientmagnitudeは、ソーベルフィルタを使用して従来技術において周知の式により計算されても良い。
【０２０１】
所定の画素位置における傾斜ベクトルは、「第１の象限」にある同等の角度、即ちπ/2を法とする角度に変換される。これは、後のステップで計算される直線の辺を有する形状に対する回転角を与える。
【０２０２】
更に、傾斜ベクトルの正弦成分及び余弦成分は、所定の画素位置における傾斜ベクトルの大きさにより重み付けされる。
【０２０３】
ＣＣの傾斜の正弦、余弦及び重み成分を更新するソフトウェアを表す擬似コードは以下の通りである。
****擬似コード３０****
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
ステップ４５０４において、ランが２つ以上のクレームと重なり合う場合、ＣＣ及びクレームはマージされる。実質上、低レベルＣＣ計測値は全てのＣＣから集約され、重なり合うクレームは見つけられたランの範囲とマッチングする単一のクレームで置換される。
【０２０４】
マージされたＣＣの最も左側の範囲は、マージされる全てのＣＣの最も左側の座標になる。同様に、マージされたＣＣの一番上の範囲、最も右側の範囲及び一番下の範囲は、マージされる全てのＣＣの一番上の範囲、最も右側の範囲及び一番下の範囲を見つけることにより判定される。
【０２０５】
マージされるＣＣの大きさmassmerged_ccは、マージされる全てのＣＣの大きさを合計することにより見つけられる。同様に、masshole_cc等の全ての他の低レベル計測値は、マージされる全てのＣＣから合計され、マージされるＣＣに対する各計測値を判定しても良い。
【０２０６】
ＣＣが更新されると又はマージされると、或いは新しいＣＣが初期化されると、ステップ４３０４で採用されるランを処理する方法は最後のステップ４５０５において終了する。
形状計測値の評価の説明
図３６のステップ３６０３の出力は、潜在的に目標特徴１００であっても良い候補特徴のリストである。ステップ３６０３により出力される各候補特徴は、上述のように収集及び更新される対応する低レベル計測値を有する。ステップ３６０４において、低レベル計測値は高レベル形状計測値を計算するために使用される。形状計測値は、候補特徴の幾何的配置に密接に関連付けられる。
【０２０７】
ステップ３６０４で採用される各候補特徴に対する形状計測値を評価する方法について、図４６を参照して詳細に説明する。初期ステップ４６０１において、対応する低レベル計測値を有する候補特徴が入力される。これは、プロセッサ３３０５に対してメモリ３３０６又はＨＤＤ３３１０における記憶位置からそのようなデータを検索することを含んでも良い。次のステップ４６０２において、中間計測値が候補特徴毎にプロセッサ３３０５により計算される。中間計測値は、形状計測値の計算を容易にする。次のステップ４６０３において、形状計測値の集合は、各候補特徴の低レベル計測値及び中間計測値から計算される。各形状計測値については、後で詳細に説明する。次のステップ４６０４において、各形状計測値は正規化され、正規化形状計測値を生成する。次のステップ４６０５において、各正規化形状計測値は所定の重みと乗算され、重み付き形状計測値を生成する。形状計測値を評価する方法は、最後のステップ４６０６において終了する。
【０２０８】
次に、ステップ４６０２及び４６０３について詳細に説明する。しかし、ステップ４６０４及び４６０５の詳細は種々の実現例の間で変更されるため、後で説明する。
【０２０９】
次に、ステップ４６０２で計算される各中間計測値について、図４７を参照して詳細に説明する。候補特徴４７００は、子ＣＣ４７０１及び親ＣＣ４７０２から構成される。子ＣＣ４７０１に対応する計測値には「child」の下付き文字を与え、親ＣＣ４７０２に対応する計測値には「parent」の下付き文字を与える。例えば計測値は、ｘ及びｙの場所、モジュールサイズ、幅、高さ、平均の辺の長さ及び回転角を含む。
【０２１０】
個々のＣＣのｘ及びｙの場所は、以下の式を評価してプロセッサ３３０５により判定されても良い。
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
候補特徴のｘ及びｙの場所であるxcandidate_feature及びycandidate_featureは、以下の式を評価してプロセッサ３３０５により判定されても良い。
【０２１１】
xcandidate_feature = (xchild_centre + xparent_centre) / 2
ycandidate_feature = (ychild_centre + yparent_centre) / 2
目標特徴のモジュールサイズ（画素数）は、外側の黒色領域１０１の線幅と同等であり、これは囲まれた白色領域１０２の幅と同等であるべきである。従って、後処理の目的で検出された候補特徴のモジュールサイズを判定するのが望ましい。しかし、ある程度歪みのある画像において、黒色領域及び白色領域のモジュールサイズは等しくないため、平均モジュールサイズはプロセッサ３３０５により黒色領域及び白色領域から計算される。
【０２１２】
module_size_black = sqrt(massparent/24)
module_size_white = sqrt((hole_massparent - masschild)/16)
module_size = (module_size_black + module_size_white)/2
尚、「sqrt」は平方根関数を示す。
【０２１３】
子ＣＣの幅４７０３であるwidthchildは、以下の式により判定される。
【０２１４】
widthchild = xchild_cc_right - xchild_cc_left + 1
子ＣＣの高さ４７０４であるheightchildは、以下の式により判定される。
【０２１５】
heightchild = ychild_cc_bottom - ychild_cc_top + 1
子ＣＣの平均の辺の長さaverage_sidechildは、以下の式により判定される。
【０２１６】
average_sidechild = (widthchild + heightchild) / 2
親ＣＣの幅４７０５であるwidthparentは、以下の式を使用してプロセッサ３３０５により判定される。
【０２１７】
widthparent = xparent_cc_right - xparent_cc_left + 1
親ＣＣの高さ１５０６であるheightparentは、以下の式を実行してプロセッサ３３０５により判定される。
【０２１８】
heightparent = yparent_cc_bottom - yparent_cc_top + 1
親ＣＣの平均の辺の長さaverage_sideparentは、以下の式により判定される。
【０２１９】
average_sideparent = (widthparent + heightparent) / 2
更に、候補特徴４７００の回転角１５０７であるanglecandidate_featureは、以下の擬似コードの例示的なコードを実行してプロセッサ３３０５により判定されても良い。
****擬似コード３１****
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を示す。
【０２２０】
次に、ステップ４６０３で計算される各形状計測値について詳細に説明する。しかし、形状計測値は、辺長比、幅及び高さの比、平均の辺長比、大きさの比、閉じた大きさ、剛率、同心性、直線性、平均の直線性及びバウンディングボックスの剛率である本明細書で説明される計測値に限定されない。
【０２２１】
子ＣＣ及び親ＣＣの辺長比である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は、以下の式を評価してプロセッサ３３０５により判定されても良い。
【０２２５】
mass_ratio = masschild / massparent
子ＣＣ及び親ＣＣの閉じた大きさであるclosed_masschild及びclosed_massparentは、以下の式により判定されても良い。
【０２２６】
closed_masschild = masschild + hole_masschild
closed_massparent = massparent + hole_massparent
子ＣＣ及び親ＣＣの剛率であるsoliditychild及びsolidityparentは、以下の式により判定されても良い。
【０２２７】
soliditychild = masschild / closed_masschild
solidityparent = massparent / closed_massparent
候補特徴の同心性は、以下の擬似コードの例示的なコードを実行してプロセッサ３３０５により判定されても良い。
****擬似コード３２****
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_centres2 + y_distbetween_centres2)
尚、「sqrt」は平方根関数を示し、上付き文字の数字「２」は２乗を示す。
【０２２８】
子ＣＣ及び親ＣＣの直線性であるrectilinearitychild及びrectilinearityparentは、以下の式により判定されても良い。
【０２２９】
rectilinearitychild = sqrt(sin2 anglechild_cc + cos2 anglechild_cc) / weightchild_cc
rectilinearitychild = sqrt(sin2 anglechild_cc + cos2 anglechild_cc) / weightchild_cc
候補特徴の平均の直線性であるrectilinearitycandidate_featureは、以下の式を表すコードを実行してプロセッサ３３０５により判定されても良い。
【０２３０】
rectilinearitycandidate_feature = 
sqrt(sin2 anglecandidate_feature + cos2 anglecandidate_feature) 
/
weightcandidate_feature
子ＣＣの「バウンディングボックス」剛率は、子ＣＣのバウンディングボックスのサイズが周知の大きさを有する回転された子ＣＣの好適なバウンディングボックスとどの程度マッチングするかの尺度である。実際には、子ＣＣの大きさ及び候補特徴の回転角は、予想されるバウンディングボックスのサイズを計算するために使用される。この予想されるサイズは、実際のバウンディングボックスのサイズと比較され、「バウンディングボックス」剛率計測値を与える。子ＣＣのバウンディングボックス剛率であるbounding_box_soliditychildを計算する方法は、以下の擬似コードにより表される。
****擬似コード３３****
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を使用して親ＣＣに対して計算されることは、当業者には認識されるだろう。
ＱＲコード復号化における目標特徴検出
目標特徴検出の第１の実現例において、目標特徴を検出する処理３６００が適用され、図４８の４８００として示すＱＲコードを検出及び復号化する。ＱＲコード４８００は、最初に３つの「ファインダパターン」４８０１、４８０２及び４８０３の各々の場所を取得することにより復号化される。
【０２３１】
次に、ＱＲコード復号化に対する目標特徴を検出する（この場合、ファインダパターン４８０１、４８０２及び４８０３を検出する）処理３６００について、ステップ３６０４及び３６０５を詳細に示すことにより説明する。
【０２３２】
単一の類似性スコアを生成するためのステップ３６０４で適用されるような形状計測値を評価する方法について、更に詳細に説明する。方法はサブステップ４６０４を含み、形状計測値は正規化される。ステップ４６０４において、各形状計測値は、プロセッサ３３０５により０〜１の値に正規化される。正規化された値１は、候補特徴がその計測値に対する目標特徴に幾何学的に類似することを示す。従って、正規化された値０は、候補特徴がその計測値に対する目標特徴に幾何学的に類似しないことを示す。更に、正規化ステップ４６０４は、計測値が広範な所定の範囲外にある候補特徴を廃棄する。
【０２３３】
各形状計測値は、目標特徴の幾何学的属性に厳密にマッチングする理想値を有する。例えば、目標特徴１０１の内部構成要素が正方形であるため、目標特徴１００のside_ratiochildの理想値は１である。以下の表は、この実現例に従って各形状計測値に対する有効な範囲を概略的に示す。
┌─────────────┬───┬───┬─────────┐
│計測値                    │最小値│理想値│最大値            │
├─────────────┼───┼───┼─────────┤
│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は以下の擬似コードにより判定される。
****擬似コード３４****
max_dist_x = widthchild / 2
max_dist_y = heightchild / 2
max_concentricity = sqrt(max_dist_x2 + max_dist_y2)
正規化された形状計測値は、以下の擬似コードに従って各形状計測値から生成される。
****擬似コード３５****
if metric ＜ metric_ideal:
normalized_metric = 
(metric - metric_mininum)
/ 
(metric_ideal - metric_minimum)
else:
normalized_metric = 
1
-
(
(metric - metric_ideal)
/
(metric_maximum - metric_ideal)
)
ステップ４６０５において、正規化された形状計測値は、数学的に組み合わされ（乗算及び加算により）、単一の類似性スコアを生成する。以下の擬似コードは、形状計測値を組み合わせる処理を表す。
****擬似コード３６****
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  │
└───────────────────┴────┘
上記で規定された重みは、大きなデータセットの統計分析により取得された。データセットは、ポジティブセットとして周知の実際の目標特徴を含む画像及びネガティブセットとして周知の目標特徴に類似する特徴を含む画像を含む。上記重み（類似性スコアを生成するために適用される場合）は、ポジティブテストセットとネガティブテストセットとの間の類似性スコア平均値の有用な分離を提供する。
【０２３５】
類似性スコアが各候補特徴から生成されると、それらの候補特徴は後処理ステップ４６０５に出力される。この実現例に対する後処理ステップ４６０５を図４９に示す。後処理ステップは初期ステップ４９０１から開始し、候補特徴のリストが入力される。
【０２３６】
次のステップ４９０２において、候補特徴のリストは「分解」されて、候補領域を判定する。候補領域は、潜在的にＱＲコードを含んでもよい２次元領域である。ＱＲコードは、２次元コードの左上の隅、右上の隅及び左下の隅に配置される３つのファインダパターンを含む。従って、候補領域は同様の配置の３つの候補特徴を有する。
【０２３７】
３つの候補特徴のグループが候補領域を形成するように適切に構成されるかを判定するための一連のチェックが実行される。これらのチェックは、２つの所定の許容差toleranceangle及びtolerancemagnitudeに対して行われる。一例として、toleranceangleは０．２であり、tolerancemagnitudeも０．２である。候補特徴を候補領域に分解する方法の詳細については後述する。
【０２３８】
次のステップ４９０３において、ステップ４９０２で生成された候補領域のリストは検査され、追加の候補特徴を含む候補領域を除去する。このステップの詳細については後述する。
【０２３９】
ステップ４９０２において候補特徴が候補領域に分解され、追加の候補特徴を含む領域が除去されると、ステップ４９０４において候補領域は復号化される。ＱＲコードを復号化し且つファインダパターンのトリプレット（分解された候補特徴）であった符号化データを抽出する処理は、従来技術において周知であるため、本明細書においては説明しない。しかし、復号化処理の最終的な出力はＱＲコードに２次元的に符号化されたデータである。最後に、３８０５で適用される後処理ステップ（本実現例の状況において）はステップ４９０５で終了する。
【０２４０】
次に、ステップ４９０２で実行される候補特徴を候補領域に分解する方法について、図５０を参照して説明する。方法は初期ステップ５００１で開始し、全ての検出された候補特徴が入力される。
【０２４１】
次のステップ５００２において、３つの候補特徴のグループが取得される。グループの各候補特徴には、候補領域の仮定される位置が割り当てられる。これは、本ステップにおいて、３つの候補特徴の各グループが仮定された位置の構成毎に１回、合計３回選択されることを意味する。これらの候補特徴は、CFtl、CFtr及びCFblと呼ばれる。これらは、それぞれ左上の隅、右上の隅及び左下の隅の候補特徴に対応する。
【０２４２】
次のステップ５００３において、３つの候補特徴が同様のモジュールサイズを有するかを判定するためのチェックが行われる。モジュールサイズは、目標特徴１００の親ＣＣの線幅（画素数）を示す。同様のモジュールサイズに対するチェックは、以下の擬似コードにより表されても良い。
****擬似コード３７****
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
次のステップ５００４において、正方形のＱＲコードに準拠して、候補特徴の間の距離が等しいかを判定するためのチェックが行われる。このチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード３８****
vector_xtl-tr = xtl - xtr
vector_ytl-tr = ytl - ytr
vector_magtl-tr = sqrt(vector_xtl-tr2 + vector_ytl-tr2)
vector_xtl-bl = xtl - xbl
vector_ytl-bl = ytl - ybl
vector_magtl-bl = sqrt(vector_xtl-bl2 + vector_ytl-bl2)
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
次のステップ５００５において、左上の候補特徴から他の２つの候補特徴にわたるベクトルが適切に直交するかを判定するためのチェックが行われる。候補領域中の右上の位置及び左下の位置への候補特徴の仮定される割り当てが正確であるかを判定するための更なるチェックが行われる。これらのチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード３９****
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
次のステップ５００６において、候補特徴の回転角が同様であるかを判定するためのチェックが行われる。
【０２４３】
尚、候補特徴毎に計算される回転角はp/2ラジアンを法とする。従って、候補特徴の回転角の間の最小偏差を判定するために調整が行われる。このチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード４０****
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
次のステップ５００６において、候補特徴の回転角が候補領域の回転と同様であるかを判定するためのチェックが行われる。候補領域の回転角は、左上の候補特徴と右上の候補特徴との間のベクトルの角度として規定される。このチェックは、以下の擬似コードを実行することにより行われても良い。
****擬似コード４１****
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は、４象限逆正接関数を示す。
【０２４４】
ステップ５０１０でテストされるようにステップ５００３〜５００７の全てのチェックを通過した場合、次のステップ５００８において候補領域は出力するための候補領域のリストに追加される。
【０２４５】
ステップ５０１１でテストされるようにこれから処理される候補領域が更に存在する場合、ステップ５００２からの処理が繰り返される。存在しない場合、候補特徴から候補領域を分解する方法は、最後のステップ５００９で終了する。
【０２４６】
ステップ４９０３において、出力するためのリストの各候補領域が処理され、候補特徴は、領域の候補特徴が存在する２次元領域に存在するかをチェックする。有効なＱＲコードは、その隅にのみファインダパターンを含む。従って、追加の候補特徴が候補領域内で見つけられる場合、候補領域は有効なＱＲコードではなく且つ除去されるべきである。次に、内部候補特徴を含む候補領域を削除する処理４９０３について、図５１を参照して詳細に説明する。処理は初期ステップ５１０１で開始し、候補特徴のリスト及び候補領域のリスト（ステップ５００８の間に作成される）が入力される。
【０２４７】
次のステップ５１０２において、候補領域が選択される。
【０２４８】
次のステップ５１０３において、候補特徴が選択される。本明細書において、ステップ５１０１で入力されたリストから全ての候補特徴が選択されても良い。しかし、高い類似性スコア（候補領域を形成する特徴に対して）を有する候補特徴のみが選択される場合、システム全体は更に高いロバスト性を有するだろう。一例として、候補特徴は、その類似性スコアが候補領域の特徴の最小の類似性スコアの２／３より大きい場合に十分に高い類似性スコアを有する。
【０２４９】
次のステップ５１０４において、選択された候補特徴の位置が候補領域内で特定されるかを判定するためのチェックが実行される。このチェックについては、図５２を参照して最適に説明される。図５２において、候補領域は平行四辺形５２００に外挿される（vector_angletl-tr及びvector_angletl-trが直交しない場合）。選択された候補特徴５２０１の中心（xcandidate_feature及びycandidate_featureにより規定される）が平行四辺形５２００内に存在する場合、選択された候補領域は、内部候補特徴を含むと判定される。領域の３つの候補特徴の中心により直接規定される平行四辺形を図５２に示すが、例えば領域２０００へのバッファ領域の追加により形成される更に大きな平行四辺形が使用可能であることが理解されるべきである。
【０２５０】
候補領域が内部候補特徴を含むと判定される場合、候補領域は復号化処理４９０４に出力される候補領域のリストから除去される（ステップ５１０５において）。
【０２５１】
リスト中に更なる候補特徴が存在する場合、ステップ５１０３からの処理が繰り返される。
【０２５２】
或いは、処理される候補領域がリスト中に残っている場合、ステップ５１０２からの処理が繰り返される。
【０２５３】
或いは、処理される候補領域が残っていない場合、内部候補特徴を含む候補領域を削除する処理は最後のステップ５１０６で終了する。
著作権記号検出における目標特徴検出
目標特徴検出の第２の実現例において、目標特徴を検出する処理３６００が適用され、図５３の著作権記号(c)５３００を検出する。著作権記号５３００が白色領域５３０２に完全に囲まれる黒色領域５３０１（即ち、文字「ｃ」）を含み、白色領域５３０２が黒色領域５３０３（即ち、円）により完全に囲まれるため、著作権記号５３００が有効な目標特徴であることは明らかである。
【０２５４】
次に、目標特徴（この場合、著作権記号）を検出する処理３６００について、ステップ３６０４及び３６０５を詳細に示すことにより説明する。更に、上記実現例で既に説明したステップを参照する。
【０２５５】
本実現例の状況において、単一の類似性スコアを生成するために形状計測値３６０４を評価する方法について更に詳細に説明する。形状計測値が０〜１の範囲に正規化されるステップ４６０４は、上記実現例に対して説明されたステップ４６０４の説明と類似する。しかし、目標特徴の幾何学的配置がＱＲコードのファインダパターンと非常に異なるため、形状計測値に対する理想的な最小値及び最大値は異なる。また、いくつかの形状計測値は、著作権記号を検出することに関連しないため、本実現例において使用される必要がない。
【０２５６】
形状計測値に対する理想的な最小値及び最大値は、以下の表において与えられる。以下の表に一覧表示されない計測値は、本実現例に関連せず且つ計算されない。
┌───────────┬───┬───┬─────────┐
│計測値                │最小値│理想値│最大値            │
├───────────┼───┼───┼─────────┤
│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               │
└───────────┴───┴───┴─────────┘
正規化された形状計測値が数学的に組み合わされる次のステップ４６０５は、本実現例においては上記のステップと異なる。本実現例において、全ての正規化形状計測値は最初に所定の重みと乗算される。その後、全ての重み付き正規化形状計測値は合計され、最終的な類似性スコアを生成する。以下の表は、正規化計測値毎に重みを一覧表示する。
┌──────────────┬────┐
│  重み                      │  値    │
├──────────────┼────┤
│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  │
└──────────────┴────┘
本実現例における形状計測値評価処理３６０４の残りは、先の実現例において説明した処理と同一である。
【０２５７】
次に、候補特徴を後処理するステップ３６０５について図５４を参照して説明する。候補特徴の後処理の方法３６０５は初期ステップ５４０１で開始し、検出された候補特徴のリストが入力される。
【０２５８】
次のステップ５４０２において、候補特徴が選択される。
【０２５９】
次のステップ５４０３において、選択された候補特徴の類似性スコアは所定の閾値と比較される。この例において、閾値は０．４８に設定される。類似性スコアが閾値より大きい場合、候補特徴は検出結果として出力される。ステップ５４０５でテストされるように、処理される候補特徴が残っている場合、ステップ５４０２からの処理が繰り返される。これから処理される候補特徴が存在しないと、候補特徴を後処理する方法３６０５は最後のステップ５４０４で終了する。
登録商標記号検出における目標特徴検出
目標特徴検出の第３の実現例において、目標特徴を検出する処理３６００が適用され、図５５の登録商標記号(R)５５００を検出する。登録商標記号５５００が白色領域５５０２により完全に囲まれる黒色領域５５０１（即ち、文字「Ｒ」）を含み、白色領域５５０２が黒色領域５５０３により完全に囲まれるため、登録商標記号５５００が有効な目標特徴であることは明らかである。
【０２６０】
次に、目標特徴（この場合、登録商標記号）を検出する処理３６００について、上記の第２の実現例を参照して説明する。登録票記号を検出する方法と著作権記号を検出する方法とは、使用される形状計測値、ステップ４６０４で判定される計測値の正規化及びステップ４６０５における計測値の重み付けのみが異なる。
【０２６１】
正規化ステップ４６０４に対しては、以下の理想値、最小値及び最大値が適切である。以下の表に一覧表示されない形状計測値は、登録商標記号検出には使用されない。
┌───────────┬───┬───┬─────────┐
│計測値                │最小値│理想値│最大値            │
├───────────┼───┼───┼─────────┤
│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               │
└───────────┴───┴───┴─────────┘
ステップ４６０５において、形状計測値は、単一の類似性スコアを生成するために、重みと乗算され且つ合計される。登録商標記号を検出するために、ステップ４６０４で正規化される形状計測値は以下の重みと乗算される。
┌──────────────┬────┐
│  重み                      │  値    │
├──────────────┼────┤
│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  │
└──────────────┴────┘
上述したように、一般に上記構成は適切にプログラムされたコンピュータシステム３３００に実現される。コンピュータシステム３３００において、画像は文書から走査されるか又は入力され（通信ネットワーク３３２０、３３２２を介して電子ファイルにより）、画像は著作権記号(C)又は登録商標記号(R)などの目標特徴の存在を検出するためにコンピュータシステム３３００により処理される。上述の方法は、システムのコンピュータ可読記憶媒体（例えば、ＨＤＤ３３１０）に格納され、システムのプロセッサ３３０５により読み出され且つ実行されて入力画像に対して動作するソフトウェアに組み込まれる。特定の実現例は、著作権で保護される作品又は登録商標を含む作品の不適切な複製を防止するようにそれらの構成を複写機に含むようにしても良い。システム３３００は複写機と考えられても良く、例えばスキャナ３３２７及びプリンタ３３１５は複写機の電気機械入力及び出力を表し、コンピュータ３３０１は複写機のコンピュータ化制御器を表す。例えば目標特徴の候補領域が識別されると、目標特徴はプロセッサ３３０５を使用してＨＤＤ３３１０からの可能な目標特徴の格納されたアレイと比較される。比較の結果は、複写機における走査済画像の印刷により文書をコピーするか又は文書のコピーを中止するために使用される。例えば著作権記号が検出される場合、複写機は、スキャナ３３２６による文書の走査により行われるコピー動作を中止し、文書の著作権侵害を潜在的に回避する。目標特徴が特別なコードである場合、そのような目標特徴は、ＨＤＤ３３１０に格納されるその特別なコードを含む複写機によってのみそのような文書のコピーを許可するために使用されても良い。このように、目標特徴の検出は、複写機機能を選択的に有効又は無効にするために使用される。
【産業上の利用可能性】
【０２６２】
上述の構成はコンピュータ及びデータ処理業界に適用可能であり、特に文書中のＱＲコードの検出及び復号化に対して適用可能である。構成は、文書の認証に有用であり、特に著作権で保護される作品又は登録商標を保持する作品の不適切な複製を防止するのに有用である。
【０２６３】
上述において、本発明のいくつかの実施形態のみを説明したが、本発明の趣旨の範囲から逸脱せずに変形及び／又は変更が行われても良い。実施形態は、例示するものであり限定するものではない。
【図１】
2010170539.tif 000004
【図２Ａ】
2010170539.tif 000005
【図２Ｂ】
2010170539.tif 000006
【図３】
2010170539.tif 000007
【図４】
2010170539.tif 000008
【図５】
2010170539.tif 000009
【図６】
2010170539.tif 000010
【図７】
2010170539.tif 000011
【図８Ａ】
2010170539.tif 000012
【図８Ｂ】
2010170539.tif 000013
【図８Ｃ】
2010170539.tif 000014
【図９】
2010170539.tif 000015
【図１０Ａ】
2010170539.tif 000016
【図１０Ｂ】
2010170539.tif 000017
【図１０Ｃ】
2010170539.tif 000018
【図１１】
2010170539.tif 000019
【図１２】
2010170539.tif 000020
【図１３】
2010170539.tif 000021
【図１４Ａ】
2010170539.tif 000022
【図１４Ｂ】
2010170539.tif 000023
【図１５Ａ】
2010170539.tif 000024
【図１５Ｂ】
2010170539.tif 000025
【図１５Ｃ】
2010170539.tif 000026
【図１６】
2010170539.tif 000027
【図１７Ａ】
2010170539.tif 000028
【図１７Ｂ】
2010170539.tif 000029
【図１８Ａ】
2010170539.tif 000030
【図１８Ｂ】
2010170539.tif 000031
【図１９】
2010170539.tif 000032
【図２０Ａ】
2010170539.tif 000033
【図２０Ｂ】
2010170539.tif 000034
【図２１】
2010170539.tif 000035
【図２２】
2010170539.tif 000036
【図２３】
2010170539.tif 000037
【図２４】
2010170539.tif 000038
【図２５】
2010170539.tif 000039
【図２６】
2010170539.tif 000040
【図２７】
2010170539.tif 000041
【図２８】
2010170539.tif 000042
【図２９Ａ】
2010170539.tif 000043
【図２９Ｂ】
2010170539.tif 000044
【図３０】
2010170539.tif 000045
【図３１】
2010170539.tif 000046
【図３２】
2010170539.tif 000047
【図３３Ａ】
2010170539.tif 000048
【図３３Ｂ】
2010170539.tif 000049
【図３４】
2010170539.tif 000050
【図３５】
2010170539.tif 000051
【図３６】
2010170539.tif 000052
【図３７】
2010170539.tif 000053
【図３８】
2010170539.tif 000054
【図３９】
2010170539.tif 000055
【図４０】
2010170539.tif 000056
【図４１】
2010170539.tif 000057
【図４２】
2010170539.tif 000058
【図４３】
2010170539.tif 000059
【図４４】
2010170539.tif 000060
【図４５】
2010170539.tif 000061
【図４６】
2010170539.tif 000062
【図４７】
2010170539.tif 000063
【図４８】
2010170539.tif 000064
【図４９】
2010170539.tif 000065
【図５０】
2010170539.tif 000066
【図５１】
2010170539.tif 000067
【図５２】
2010170539.tif 000068
【図５３】
2010170539.tif 000069
【図５４】
2010170539.tif 000070
【図５５】
2010170539.tif 000071
【外国語明細書】
2010170539.tif 000072
2010170539.tif 000073
2010170539.tif 000074
2010170539.tif 000075
2010170539.tif 000076
2010170539.tif 000077
2010170539.tif 000078
2010170539.tif 000079
2010170539.tif 000080
2010170539.tif 000081
2010170539.tif 000082
2010170539.tif 000083
2010170539.tif 000084
2010170539.tif 000085
2010170539.tif 000086
2010170539.tif 000087
2010170539.tif 000088
2010170539.tif 000089
2010170539.tif 000090
2010170539.tif 000091
2010170539.tif 000092
2010170539.tif 000093
2010170539.tif 000094
2010170539.tif 000095
2010170539.tif 000096
2010170539.tif 000097
2010170539.tif 000098
2010170539.tif 000099
2010170539.tif 000100
2010170539.tif 000101
2010170539.tif 000102
2010170539.tif 000103
2010170539.tif 000104
2010170539.tif 000105
2010170539.tif 000106
2010170539.tif 000107
2010170539.tif 000108
2010170539.tif 000109
2010170539.tif 000110
2010170539.tif 000111
2010170539.tif 000112
2010170539.tif 000113
2010170539.tif 000114
2010170539.tif 000115
2010170539.tif 000116
2010170539.tif 000117
2010170539.tif 000118
2010170539.tif 000119
2010170539.tif 000120
2010170539.tif 000121
2010170539.tif 000122
2010170539.tif 000123
2010170539.tif 000124
2010170539.tif 000125
2010170539.tif 000126
2010170539.tif 000127
2010170539.tif 000128
2010170539.tif 000129
2010170539.tif 000130
2010170539.tif 000131
2010170539.tif 000132
2010170539.tif 000133
2010170539.tif 000134
2010170539.tif 000135
2010170539.tif 000136
2010170539.tif 000137
2010170539.tif 000138
2010170539.tif 000139
2010170539.tif 000140
2010170539.tif 000141
2010170539.tif 000142
2010170539.tif 000143
2010170539.tif 000144
2010170539.tif 000145
2010170539.tif 000146
2010170539.tif 000147
2010170539.tif 000148
2010170539.tif 000149
2010170539.tif 000150
2010170539.tif 000151
2010170539.tif 000152
2010170539.tif 000153
2010170539.tif 000154
2010170539.tif 000155
2010170539.tif 000156
2010170539.tif 000157
2010170539.tif 000158
2010170539.tif 000159
2010170539.tif 000160
2010170539.tif 000161
2010170539.tif 000162
2010170539.tif 000163
2010170539.tif 000164
2010170539.tif 000165
2010170539.tif 000166
2010170539.tif 000167
2010170539.tif 000168
2010170539.tif 000169
2010170539.tif 000170
2010170539.tif 000171
2010170539.tif 000172
2010170539.tif 000173
2010170539.tif 000174
2010170539.tif 000175
2010170539.tif 000176
2010170539.tif 000177
2010170539.tif 000178
2010170539.tif 000179
2010170539.tif 000180
2010170539.tif 000181
2010170539.tif 000182
2010170539.tif 000183
2010170539.tif 000184
2010170539.tif 000185
2010170539.tif 000186
2010170539.tif 000187
2010170539.tif 000188
2010170539.tif 000189
2010170539.tif 000190
2010170539.tif 000191
2010170539.tif 000192
2010170539.tif 000193
2010170539.tif 000194
2010170539.tif 000195
2010170539.tif 000196
2010170539.tif 000197
2010170539.tif 000198
2010170539.tif 000199
2010170539.tif 000200
2010170539.tif 000201
2010170539.tif 000202
2010170539.tif 000203
2010170539.tif 000204
2010170539.tif 000205
2010170539.tif 000206
2010170539.tif 000207
2010170539.tif 000208
2010170539.tif 000209
2010170539.tif 000210
2010170539.tif 000211
2010170539.tif 000212
2010170539.tif 000213
2010170539.tif 000214
2010170539.tif 000215
2010170539.tif 000216
2010170539.tif 000217
2010170539.tif 000218
2010170539.tif 000219
2010170539.tif 000220
2010170539.tif 000221
2010170539.tif 000222
2010170539.tif 000223
2010170539.tif 000224
2010170539.tif 000225
2010170539.tif 000226
2010170539.tif 000227
2010170539.tif 000228
2010170539.tif 000229
2010170539.tif 000230
2010170539.tif 000231
2010170539.tif 000232
2010170539.tif 000233
2010170539.tif 000234