(57)【特許請求の範囲】
【請求項１】
画像解析装置であって、
第１色と前記第１色とは異なる第２色とを有するコード画像を含む対象画像を表わす対象画像データを取得する取得部であって、前記コード画像は、第１方向に沿って平行に配置されるＮ個（前記Ｎは２以上の整数）のコード要素を含み、前記Ｎ個のコード要素のそれぞれは、前記第１色を有すると共に、前記第１方向に直交する第２方向に沿って平行に伸びる２本の第１辺を有する、前記取得部と、
前記対象画像データを構成する複数個の対象画素の中から、前記Ｎ個のコード要素のそれぞれについて、当該コード要素の輪郭を構成する各輪郭画素を特定する輪郭画素特定部と、
前記各輪郭画素を解析して、前記対象画像内での前記Ｎ個のコード要素の傾きである対象傾きを特定する傾き特定部と、
前記各輪郭画素と前記対象傾きとを利用して、前記Ｎ個のコード要素のそれぞれについて、当該コード要素の前記２本の第１辺に相当する２本の対象直線を特定することによって、（Ｎ×２）本の対象直線を特定する直線特定部と、
前記（Ｎ×２）本の対象直線によって画定される（Ｎ×２−１）個の領域のそれぞれについて、当該領域を画定する２本の対象直線の間の距離を特定する距離特定部であって、前記（Ｎ×２−１）個の領域のそれぞれは、前記（Ｎ×２）本の対象直線のうちの隣接する２本の対象直線の間の領域である、前記距離特定部と、
前記（Ｎ×２）本の対象直線によって画定される前記（Ｎ×２−１）個の領域のそれぞれについて、当該領域が前記第１色を有するのか前記第２色を有するのかを判定する領域判定部と、
前記（Ｎ×２−１）個の領域のうち、前記第１色を有すると判定されたＮ個の領域について特定されたＮ個の距離を利用して、前記コード画像の表現態様を決定する決定部と、
を備える画像解析装置。
【請求項２】
前記Ｎ個のコード要素のそれぞれは、四角形状を有し、
前記Ｎ個のコード要素のそれぞれは、さらに、前記第１方向に沿って伸びる少なくとも１本の第２辺を有し、
前記Ｎ個のコード要素は、互い異なる長さの前記第２辺を有する２種類以上の四角形画像を含み、
前記距離特定部は、前記Ｎ個のコード要素のそれぞれについて、当該コード要素が有する前記２本の第１辺の間の前記距離である前記第２辺の長さを特定し、
前記決定部は、前記Ｎ個のコード要素のそれぞれについて、当該コード要素について特定される前記第２辺の長さを利用して、当該コード要素が前記２種類以上の四角形画像のうちのいずれの種類であるのかを決定することによって、前記コード画像の前記表現態様を決定する、請求項１に記載の画像解析装置。
【請求項３】
前記輪郭画素特定部は、
前記複数個の対象画素に対応する複数個のエッジ強度を算出し、
前記複数個の対象画素の中から、所定のエッジ強度よりも高いエッジ強度を有する前記各輪郭画素を特定する、請求項１又は２に記載の画像解析装置。
【請求項４】
前記傾き特定部は、
前記対象画像内に仮想的に配置される複数本の仮想直線のそれぞれについて、当該仮想直線上の前記輪郭画素の個数である第１の個数を算出し、
前記複数本の仮想直線について算出される複数個の前記第１の個数を利用して、前記複数本の仮想直線が有する２個以上の傾きごとに、当該傾きを有する１本以上の仮想直線上の前記輪郭画素の累積の個数である第２の個数を算出し、
前記２個以上の傾きのうち、最大の前記第２の個数が算出される傾きを、前記対象傾きとして特定する、請求項１から３のいずれか一項に記載の画像解析装置。
【請求項５】
前記輪郭画素特定部は、直線の傾きを示す軸を含まない第１座標系において、前記各輪郭画素を特定し、
前記傾き特定部は、前記第１座標系とは異なる第２座標系であって、直線の傾きを示す軸を含む前記第２座標系において、前記第１の個数と前記第２の個数とを算出し、前記対象傾きを特定する、請求項４に記載の画像解析装置。
【請求項６】
前記直線特定部は、
前記複数本の仮想直線の中から、前記対象傾きを有する２本以上の仮想直線を特定し、
前記２本以上の仮想直線のうち、所定数以上の前記第１の個数が算出される（Ｎ×２）本の仮想直線を、前記（Ｎ×２）本の対象直線として特定する、請求項４又は５に記載の画像解析装置。
【請求項７】
前記輪郭画素特定部は、直線の傾きを示す軸を含まない第１座標系において、前記各輪郭画素を特定し、
前記直線特定部は、前記第１座標系とは異なる第２座標系であって、直線の傾きを示す軸を含む前記第２座標系において、前記２本以上の仮想直線を特定し、前記（Ｎ×２）本の対象直線を特定する、請求項６に記載の画像解析装置。
【請求項８】
前記傾き特定部は、前記Ｎ個のコード要素が有するＮセットの２本の第１辺であって、前記第２方向に沿って平行である前記Ｎセットの２本の第１辺が有する傾きである前記対象傾きを特定し、
前記直線特定部は、前記各輪郭画素と前記対象傾きとを利用して、前記Ｎ個のコード要素のそれぞれについて、当該コード要素が有する前記２本の第１辺に相当する前記２本の対象直線であって、前記対象傾きを有する前記２本の対象直線を特定する、請求項１から７のいずれか一項に記載の画像解析装置。
【請求項９】
前記画像解析装置は、さらに、
前記（Ｎ×２−１）個の領域のうち、前記第２色を有すると判定された（Ｎ−１）個の領域について特定された（Ｎ−１）個の距離である（Ｎ−１）個の余白長さのそれぞれが所定の範囲内である場合に、前記コード画像について決定される前記表現態様に基づいて、前記Ｎ個のコード要素の配置パターンが所定のパターンであると決定し、前記（Ｎ−１）個の余白長さのうちの少なくとも１個の余白長さが前記所定の範囲内でない場合に、前記Ｎ個のコード要素の配置パターンが前記所定のパターンでないと決定するパターン決定部を備える請求項１から８のいずれか一項に記載の画像解析装置。
【請求項１０】
前記取得部は、原稿画像を表わす原稿画像データから、前記原稿画像のうちの予め決められている一部の領域である前記対象画像を表わす前記対象画像データを抽出することによって、前記対象画像データを取得する、請求項１から９のいずれか一項に記載の画像解析装置。
【請求項１１】
画像解析装置のためのコンピュータプログラムであって、
前記画像解析装置に搭載されるコンピュータに、以下の各処理、即ち、
第１色と前記第１色とは異なる第２色とを有するコード画像を含む対象画像を表わす対象画像データを取得する取得処理であって、前記コード画像は、第１方向に沿って平行に配置されるＮ個（前記Ｎは２以上の整数）のコード要素を含み、前記Ｎ個のコード要素のそれぞれは、前記第１色を有すると共に、前記第１方向に直交する第２方向に沿って平行に伸びる２本の第１辺を有する、前記取得処理と、
前記対象画像データを構成する複数個の対象画素の中から、前記Ｎ個のコード要素のそれぞれについて、当該コード要素の輪郭を構成する各輪郭画素を特定する輪郭画素特定処理と、
前記各輪郭画素を解析して、前記対象画像内での前記Ｎ個のコード要素の傾きである対象傾きを特定する傾き特定処理と、
前記各輪郭画素と前記対象傾きとを利用して、前記Ｎ個のコード要素のそれぞれについて、当該コード要素の前記２本の第１辺に相当する２本の対象直線を特定することによって、（Ｎ×２）本の対象直線を特定する直線特定処理と、
前記（Ｎ×２）本の対象直線によって画定される（Ｎ×２−１）個の領域のそれぞれについて、当該領域を画定する２本の対象直線の間の距離を特定する距離特定処理であって、前記（Ｎ×２−１）個の領域のそれぞれは、前記（Ｎ×２）本の対象直線のうちの隣接する２本の対象直線の間の領域である、前記距離特定処理と、
前記（Ｎ×２）本の対象直線によって画定される前記（Ｎ×２−１）個の領域のそれぞれについて、当該領域が前記第１色を有するのか前記第２色を有するのかを判定する領域判定処理と、
前記（Ｎ×２−１）個の領域のうち、前記第１色を有すると判定されたＮ個の領域について特定されたＮ個の距離を利用して、前記コード画像の表現態様を決定する決定処理と、
を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書では、対象画像に含まれるコード画像を解析する画像解析装置を開示する。
【背景技術】
【０００２】
特許文献１には、互いに異なる幅を有する複数種類の四角形画像を含むパッチコードを検知するスキャナが開示されている。スキャナは、複数枚の原稿のうちの１枚の原稿にパッチコードが含まれる場合には、当該一枚の原稿を表わすスキャンデータの前後で、複数枚の原稿を表わすスキャンデータを区分けする。一方、スキャナは、複数枚の原稿のいずれにもパッチコードが含まれない場合には、スキャンデータを区分けしない。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−４４３１８号公報
【特許文献２】特開昭６２−８４３９１号公報
【特許文献３】特開平７−２２００８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術では、パッチコードが傾いた状態で印刷されている原稿がスキャンされる状況について、何ら考慮されていない。このような状況では、スキャン画像内でパッチコードが傾いてしまうので、スキャナがパッチコードを正確に検知できない可能性がある。また、特許文献１の技術では、原稿内でパッチコードが傾いていないが、原稿が傾いた状態でスキャンされる状況についても、何ら考慮されていない。このような状況でも、スキャン画像内でパッチコードが傾いてしまうので、スキャナがパッチコードを正確に検知できない可能性がある。
【０００５】
本明細書では、対象画像内で、上記パッチコードに代表されるようなコード画像が傾いていても、コード画像の表現態様を正確に決定することができる技術を提供する。
【課題を解決するための手段】
【０００６】
本明細書によって開示される画像解析装置は、コード画像を含む対象画像を表わす対象画像データを取得する取得部であって、前記コード画像は、第１方向に沿って平行に配置されるＮ個（前記Ｎは２以上の整数）のコード要素を含み、前記Ｎ個のコード要素のそれぞれは、前記第１方向に直交する第２方向に沿って平行に伸びる２本の第１辺を有する、前記取得部と、前記対象画像データを構成する複数個の対象画素の中から、前記Ｎ個のコード要素のそれぞれについて、当該コード要素の輪郭を構成する各輪郭画素を特定する輪郭画素特定部と、前記各輪郭画素を解析して、前記対象画像内での前記Ｎ個のコード要素の傾きである対象傾きを特定する傾き特定部と、前記各輪郭画素と前記対象傾きとを利用して、前記Ｎ個のコード要素のそれぞれについて、当該コード要素の前記２本の第１辺に相当する２本の対象直線を特定する直線特定部と、前記Ｎ個のコード要素について特定されるＮセットの前記２本の対象直線のそれぞれについて、当該１セットの２本の対象直線の間の距離を特定することによって、前記Ｎ個のコード要素のそれぞれについて、当該コード要素が有する前記２本の第１辺の間の距離を特定する距離特定部と、前記Ｎ個のコード要素のそれぞれについて特定される前記距離を利用して、前記コード画像の表現態様を決定する決定部と、を備える。
【０００７】
上記の構成によると、画像解析装置は、対象画像内での各コード要素の傾きである対象傾きを特定し、当該対象傾きを利用して特定されるＮセットの２本の対象直線を利用して、各コード要素が有する２本の第１辺の間の距離を特定する。そして、画像解析装置は、各コード要素について特定される各距離を利用して、コード画像の表現態様を決定する。従って、画像解析装置は、対象画像内でコード画像が傾いていても、コード画像の表現態様を正確に決定することができる。
【０００８】
上記の画像解析装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを格納するコンピュータ読取可能記録媒体も新規で有用である。
【図面の簡単な説明】
【０００９】
【図１】通信システムの構成を示す。
【図２】６種類のパッチコードを示す。
【図３】ＰＣのドライバプログラムの処理のフローチャートを示す。
【図４】対象画像及び二値化画像の一例を示す。
【図５】極座標変換処理の説明図を示す。
【図６】累積ヒストグラムの一例を示す。
【図７】傾きヒストグラムの一例を示す。
【図８】配置パターンＰ１が決定される例を示す。
【図９】配置パターンＰ３が決定される例を示す。
【図１０】原稿が汚れている例を示す。
【図１１】配置パターンＰ１が決定される例を示す。
【発明を実施するための形態】
【００１０】
（通信システム２の構成；図１）
図１に示されるように、通信システム２は、ＰＣ（Personal Computerの略）１００とスキャナ２００とを備える。ＰＣ１００とスキャナ２００とは、ＬＡＮ（Local Area Networkの略）４を介して、相互に通信可能である。
【００１１】
（ＰＣ１００の構成）
ＰＣ１００は、操作部１１０と、表示部１１２と、ネットワークインターフェース１１４と、制御部１２０と、を備える。操作部１１０は、マウス、キーボード等を含む。ユーザは、操作部１１０を操作することによって、様々な指示をＰＣ１００に入力することができる。表示部１１２は、様々な情報を表示するためのディスプレイである。ネットワークインターフェース１１４は、ＬＡＮ４に接続される。以下では、インターフェースのことを「Ｉ／Ｆ」と記載する場合がある。
【００１２】
制御部１２０は、ＣＰＵ１３０とメモリ１３２とを備える。ＣＰＵ１３０は、メモリ１３２に格納されている各種のプログラム（例えば、ＯＳ（Operating Systemの略）プログラム（図示省略）、ドライバプログラム１３４等）に従って、様々な処理（例えば後述の図３の処理）を実行するプロセッサである。ドライバプログラム１３４は、スキャナ２００のベンダによって提供され、スキャナ２００に関連する各種の処理を実行するためのプログラムである。ドライバプログラム１３４は、例えば、スキャナ２００と共に出荷されるメディアからＰＣ１００にインストールされてもよいし、スキャナ２００のベンダによって提供されるインターネット上のサーバからＰＣ１００にインストールされてもよい。
【００１３】
メモリ１３２は、ＲＯＭ（Read Only Memoryの略）、ＲＡＭ（Random Access Memoryの略）等によって構成されている。メモリ１３２は、ドライバプログラム１３４の他に、長さデータ１３６とパターンデータ１３８とを記憶する。長さデータ１３６は、パッチコードに関する長さを示すデータである。パターンデータ１３８は、パッチコードを構成する４個の矩形画像の配置パターンＰ１〜Ｐ６（即ち６種類のパッチコード）を示すデータである。メモリ１３２は、さらに、６種類のパッチコードに対応する６個のフォルダ（図示省略）を格納している。ＣＰＵ１３０は、スキャナ２００から原稿画像データを取得する場合に、当該６個のフォルダのうちのいずれかのフォルダに原稿画像データを格納することができる。
【００１４】
（スキャナ２００の構成）
スキャナ２００は、原稿をスキャンして原稿画像データを生成するスキャン機能を実行可能な周辺機器（即ち、ＰＣ１００の周辺機器）である。例えば、スキャナ２００は、原稿画像データをスキャナ２００自身のメモリに記憶させることができる。また、スキャナ２００は、原稿画像データをＰＣ１００に供給して、当該原稿画像データをＰＣ１００に格納させたり、当該原稿画像データに対する画像処理をＰＣ１００に実行させたりすることができる。
【００１５】
スキャナ２００は、ＬＡＮ４に接続されており、ＦＢ（Flat Bedの略）機構及びＡＤＦ（Auto Document Feederの略）機構（これらは図示省略）を備える。ＦＢ機構は、透明板と、一定の方向（以下では「配置方向」と呼ぶ）に沿って並んでいる複数個の光学素子と、を備える。各光学素子は、ＣＣＤイメージセンサ（Charge Coupled Device Image Sensor）であってもよいし、ＣＩＳ（Contact Image Sensor）であってもよい。複数個の光学素子は、上記の配置方向に直交する直交方向に移動可能である。従って、ＦＢ機構を利用すれば、透明板に載置された原稿を移動させずに、複数個の光学素子を上記の直交方向に移動させることによって、原稿のスキャンを実行することができる。ＡＤＦ機構は、上記の直交方向に原稿を移動させることができる。従って、ＡＤＦ機構を利用すれば、複数個の光学素子を移動させずに、原稿を上記の直交方向に移動させることによって、原稿のスキャンを実行することができる。
【００１６】
（パッチコードの配置パターン；図２）
続いて、図２を参照して、パッチコードについて説明する。パッチコードは、２個の大きな矩形と２個の小さな矩形とによって構成される。以下では、大きな矩形、小さな矩形のことを、それぞれ、「矩形（大）」、「矩形（小）」と呼ぶ。矩形（大）は、比較的長い短辺を有する矩形であり、矩形（小）は、比較的短い短辺を有する矩形である。矩形（大）の長辺の長さは、矩形（小）の長辺の長さに等しい。４個の矩形の並び方に応じて、６種類のパッチコードが存在する。各矩形の輪郭及び内部の色は、単一の色（本実施例では黒色）である。
【００１７】
パッチコードが印刷媒体に印刷されることによって、パッチコードを含む原稿が生成される。当該原稿がスキャナ２００によってスキャンされると、原稿画像を表わす原稿画像データが生成される。原稿画像データがＰＣ１００によって解析されると、原稿画像に含まれるパッチコード画像の種類が検出される。ＰＣ１００は、検出済みの種類に応じた処理を実行する。即ち、パッチコードは、パッチコードの種類に応じた処理をＰＣ１００に実行させるための画像である。
【００１８】
より具体的には、パッチコードの種類は、原稿画像データが格納されるべきＰＣ１００内のフォルダに対応する。ユーザは、ＰＣ１００内の各フォルダとパッチコードの各種類とが対応付けられているデータをＰＣ１００に予め登録しておく。そして、ユーザは、ＰＣ１００内の特定フォルダに原稿画像データが格納されることを望む場合に、まず、端末機器（例えばＰＣ１００等）を利用して、当該特定フォルダに対応する特定種類のパッチコードが付加された画像の印刷を図示省略のプリンタに実行させる。これにより、特定種類のパッチコードを含む原稿が生成される。次いで、ユーザは、ＰＣ１００のドライバプログラム１３４を利用して、当該原稿のスキャンをスキャナ２００に実行させる。この結果、スキャナ２００からＰＣ１００に原稿画像データが供給され、ＰＣ１００は、原稿画像データを解析して、特定種類のパッチコードを検出する。この場合、ＰＣ１００は、原稿画像データをメモリ１３２内の特定フォルダに格納する。
【００１９】
図２に示されるように、パッチコードＰＣは、原稿ＤＣの左側の長辺に沿って配置（即ち印刷）される。パッチコードＰＣが印刷媒体に印刷されて原稿ＤＣが生成される際に、印刷媒体に対してパッチコードＰＣが傾いて印刷される可能性がある。この場合、パッチコードＰＣの長辺が伸びる方向と、原稿ＤＣの長辺が伸びる方向と、が一致しない。即ち、原稿ＤＣ内でパッチコードＰＣが傾いてしまう。本実施例では、ＰＣ１００は、原稿ＤＣ内でパッチコードＰＣが傾いていても、パッチコードＰＣの種類を適切に検出することができる。
【００２０】
図２は、パッチコードＰＣの６個の配置パターンＰ１〜Ｐ６を示す。なお、各パッチコードＰＣの縦横比は、実際とは異なる縦横比として図示されている。例えば、配置パターンＰ１は、左側から順に、矩形（大）、矩形（大）、矩形（小）、矩形（小）が出現するパターンである。配置パターンＰ２は、左側から順に、矩形（大）、矩形（小）、矩形（小）、矩形（大）が出現するパターンである。同様に、他の各配置パターンＰ３〜Ｐ６も定義される。
【００２１】
パッチコードＰＣでは、４個の矩形が一定の方向に沿って平行に配置されている。以下では、４個の矩形が平行に配置されている方向を「第１方向」と呼ぶ。各矩形は、上記の第１方向に沿って平行に延びる２本の短辺と、第１方向に直交する方向（以下では「第２方向」と呼ぶ）に沿って平行に伸びる２本の長辺と、を有する。矩形（大）の短辺の長さは、４．７５ｍｍ〜５．２５ｍｍである。矩形（小）の短辺の長さは、１．７８ｍｍ〜２．２８ｍｍである。隣接する２個の矩形の間の余白の長さ（以下では「余白長さ」と呼ぶ）は、１．７８ｍｍ〜２．２８ｍｍである。
【００２２】
メモリ１３２内の長さデータ１３６（図１参照）は、矩形（大）の短辺の長さと、矩形（小）の短辺の長さと、余白長さと、を示す情報を含む。ただし、長さデータ１３６は、矩形（大）及び矩形（小）の長辺の長さを示す情報を含まない。長さデータ１３６では、実際の長さ（即ち「ｍｍ」で定義されている長さ）が、所定の解像度（本実施例では３００ｄｐｉ）を有する画像内での画素数に換算されている。具体的には、長さデータ１３６は、矩形（大）の短辺の長さ、矩形（小）の短辺の長さ、余白長さとして、それぞれ、５０〜８０画素、１５〜３５画素、１５〜３５画素を示す。
【００２３】
（ＰＣ１００のドライバプログラム１３４の処理；図３）
続いて、図３を参照して、ＰＣ１００のＣＰＵ１３０によってドライバプログラム１３４に従って実行される処理の内容を説明する。
【００２４】
Ｓ１０では、ＣＰＵ１３０は、ネットワークＩ／Ｆ１１４を介して、パッチコード画像を含む原稿画像を表わす原稿画像データをスキャナ２００から取得する。具体的には、まず、ユーザは、スキャナ２００のＡＤＦ機構又はＦＢ機構の透明板に原稿ＤＣを載置する。そして、ユーザは、ＰＣ１００を利用してドライバプログラム１３４を起動させ、スキャン実行指示をスキャナ２００に供給するための操作を操作部１１０に実行する。これにより、スキャナ２００が原稿ＤＣのスキャンを実行して、原稿画像データがスキャナ２００からＰＣ１００に供給される。原稿画像データは、複数個の画素データによって構成され、各画素データは、２５６階調（即ち「０〜２５５」）の画素値（具体的には、Ｒ値、Ｇ値、及び、Ｂ値）を示す。なお、本実施例では、スキャナ２００が利用可能な最低のスキャン解像度が３００ｄｐｉである。従って、原稿画像データは、３００ｄｐｉ以上の解像度を有する。
【００２５】
ここで、パッチコード画像の長辺が伸びる方向と、原稿画像の長辺が伸びる方向と、が一致しない可能性がある。即ち、原稿画像内でパッチコード画像が傾いている可能性がある。パッチコード画像が傾く原因として、例えば、以下の２個の原因が考えられる。１個目の原因は、上述したように、印刷媒体に対してパッチコードＰＣが傾いて印刷されることである。２個目の原因は、原稿内でパッチコードが傾いていないが、原稿が傾いた状態でスキャンが実行されることである。具体的には、ＦＢ機構の透明板に対して原稿ＤＣが傾いて載置されている状態でスキャンが開始される場合、又は、原稿が傾いた状態でＡＤＦ機構によって原稿が搬送される場合に、原稿が傾いた状態でスキャンが実行される。
【００２６】
Ｓ１２では、ＣＰＵ１３０は、原稿画像データから、原稿画像のうちの予め決められている一部の領域である対象画像を表わす対象画像データを抽出することによって、対象画像データを取得する。このように、原稿画像データ内の一部の対象画像データが以下の処理の対象になるので、原稿画像データの全てが以下の処理の対象になる構成と比べて、ＰＣ２００の処理負荷を軽減することができる。ただし、変形例では、原稿画像データの全てを対象画像データとして以下の処理の対象にしてもよい。
【００２７】
図４は、対象画像ＴＩの一例を示す。対象画像ＴＩは、原稿ＤＣ内の対象領域ＴＡ（図２参照）を表わす画像である。対象領域ＴＡは、原稿ＤＣの左上の頂点を含む矩形領域である。対象画像ＴＩは、パッチコード画像を構成する４個の矩形画像の一部である４個の四角形画像を含む。各四角形画像は黒色のベタ画像であり、各四角形画像の背景画像（即ち原稿の背景色）は白色である。各四角形画像は、第１方向に沿って伸びる１本の短辺を有すると共に、第２方向に沿って平行に伸びる２本の長辺を有する。図４の例では、原稿画像に対してパッチコード画像ＰＣＩが傾いているので、各四角形画像の他の１本の辺（即ち、上記の短辺に対向する辺、図４の下辺）は、第１の方向に平行に伸びていない。パッチコード画像ＰＣＩは、Ｘ軸及びＹ軸を含む直交座標系（以下では「ＸＹ座標系」と呼ぶ）で表現される。Ｘ軸は、原稿画像の左右方向に平行に伸びる軸であり、Ｙ軸は、原稿画像の上下方向に平行に伸びる軸である。Ｘ座標及びＹ座標は、パッチコード画像ＰＣＩ内の各画素の位置を表わす。
【００２８】
図３のＳ１４では、ＣＰＵ１３０は、対象画像データの解像度が３００ｄｐｉよりも高いのか否かを判断する。ＣＰＵ１３０は、対象画像データの解像度が３００ｄｐｉよりも高い場合（Ｓ１４でＹＥＳ）に、Ｓ１６に進み、対象画像データの解像度が３００ｄｐｉ以下である場合に（Ｓ１４でＮＯ）、Ｓ１６をスキップして、Ｓ２０に進む。
【００２９】
Ｓ１６では、ＣＰＵ１３０は、３００ｄｐｉよりも高い解像度を有する対象画像データを変換（即ちリサイズ）して、３００ｄｐｉの解像度を有する対象画像データを生成する。当該変換のための手法として、本実施例ではバイリニア（Bilinear）法を採用しているが、変形例では他の手法を採用してもよい。Ｓ１６のリサイズが実行されるので、対象画像データに対する以下の処理のための処理負荷を軽減することができる。
【００３０】
Ｓ２０では、ＣＰＵ１３０は、対象画像データに対する輝度値変換処理を実行する。具体的には、ＣＰＵ１３０は、対象画像データを構成する複数個の画素データのそれぞれについて、当該画素データが示す画素値（即ちＲ値とＧ値とＢ値）をＳ２０内の数式に従って輝度値（即ちＹ値）に変換して、２５６階調の輝度値（即ち「０〜２５５」）を示す新たな画素データを生成する。これにより、輝度値を示す複数個の新たな画素データによって構成される輝度画像データが生成される。
【００３１】
Ｓ２２では、ＣＰＵ１３０は、Ｓ２０で生成された輝度画像データに対するエッジ強度算出処理を実行する。具体的には、ＣＰＵ１３０は、輝度画像データを構成する複数個の画素データのそれぞれについて、Sobelフィルタを利用して、当該画素データが示す輝度値をエッジ強度に変換して、エッジ強度を示す新たな画素データを生成する。これにより、エッジ強度を示す複数個の新たな画素データによって構成されるエッジ画像データが生成される。なお、変形例では、ＣＰＵ１３０は、Sobelフィルタに代えて、１次微分フィルタ、２次微分フィルタ、ラプラシアンフィルタ等を利用して、エッジ強度を算出してもよい。
【００３２】
Ｓ２４では、ＣＰＵ１３０は、Ｓ２２で生成されたエッジ強度画像データに対する二値化処理を実行する。具体的には、ＣＰＵ１３０は、エッジ強度画像データを構成する複数個の画素データのそれぞれについて、当該画素データが示すエッジ強度を「１」又は「０」に変換して、「１」又は「０」を示す新たな画素データを生成する。より具体的には、ＣＰＵ１３０は、エッジ強度が予め決められている閾値（以下では「エッジ閾値」と呼ぶ）よりも大きい場合には、「１」を示す新たな画素データを生成し、エッジ強度がエッジ閾値以下である場合には、「０」を示す新たな画素データを生成する。これにより、「１」又は「０」を示す複数個の新たな画素データによって構成される二値画像データが生成される。以下では、「１」を示す画素データ、「０」を示す画素データのことを、それぞれ、「ＯＮ画素データ」、「ＯＦＦ画素データ」と呼ぶ。
【００３３】
図４は、二値画像データによって表わされる二値画像ＢＶＩの一例を示す。二値画像ＢＶＩでは、ＯＮ画素データによって表わされるＯＮ画素、ＯＦＦ画素データによって表わされるＯＦＦ画素が、それぞれ、黒色、白色で表現されている。各四角形画像の輪郭を構成する各画素がＯＮ画素であり、各四角形画像の輪郭を構成しない各画素がＯＦＦ画素である。即ち、ＯＮ画素は、各四角形画像の輪郭を表わす輪郭画素である。
【００３４】
図３のＳ３０では、ＣＰＵ１３０は、Ｓ２４で生成された二値画像データに対する極座標変換処理を実行して、ＸＹ座標系で表現される二値画像ＢＶＩを、極座標系で表現される二値画像ＢＶＩに変換する。即ち、ＣＰＵ１３０は、各ＯＮ画素（即ち各輪郭画素）の座標（Ｘ，Ｙ）を座標（ｒ，θ）に変換する。ｒ及びθは、数式「Ｘ＝ｒｃｏｓθ」及び「Ｙ＝ｒｓｉｎθ」を満たす値である。
【００３５】
Ｓ３０では、さらに、ＣＰＵ１３０は、極座標で表現される複数本の仮想直線ＶＬを利用して、各仮想直線ＶＬ上のＯＮ画素の個数を算出する。仮想直線ＶＬは、対象画像ＴＩ内に仮想的に配置される直線である。図５の右上の図は、１本の仮想直線ＶＬを示す。仮想直線ＶＬは、数式「ｒｃｏｓ（θ−θx）＝ｒx」で表現される。ｒxは、原点から仮想直線ＶＬまでの距離である。θxは、所定の直線とＸ軸とがなす角度である。所定の直線は、仮想直線ＶＬに垂直であり、かつ、原点を通過する。ＣＰＵ１３０は、仮想直線ＶＬ上のＯＮ画素の個数（図５の右上の図では２個）を算出し、ｒ軸及びθ軸を含むｒθ座標系において、座標Ｑx（２（即ち算出済みの個数），θx，ｒx）をプロットする。座標Ｑxがプロットされている様子は、図５の左上の図に示されている。
【００３６】
ＣＰＵ１３０は、他の各仮想直線についても、同様に、当該仮想直線ＶＬ上のＯＮ画素の個数を算出し、ｒθ座標系において、座標Ｑj（ｎ，θj，ｒj）をプロットする。ｊは、当該仮想直線を示す番号（例えば１以上の整数）であり、ｎは、算出済みのＯＮ画素の個数であり、θj及びｒjは、数式「ｒｃｏｓ（θ−θj）＝ｒj」で表現される当該仮想直線を特定するための定数である。図５の下の図は、複数本の仮想直線のうちの１０本の仮想直線ＶＬｊ（ｊは１〜１０の各整数）を示す。各仮想直線ＶＬ１〜ＶＬ８，ＶＬ１０は、数式「ｒｃｏｓ（θ−θ1）＝ｒj」で表現される。例えば、仮想直線ＶＬ１０については、１個のＯＮ画素が算出される。従って、座標Ｑ10（１，θ1，ｒ10）がプロットされる（図５の左上の図参照）。各仮想直線ＶＬ１〜ＶＬ８は、四角形画像の長辺に重なる直線である。従って、各仮想直線ＶＬ１〜ＶＬ８については、多数のＯＮ画素が算出される。例えば、仮想直線ＶＬ１については、１００個のＯＮ画素が算出される。従って、座標Ｑ1（１００，θ1，ｒ1）がプロットされる（図５の左上の図参照）。同様に、座標Ｑ2〜Ｑ8もプロットされる。また、仮想直線ＶＬ９は、数式「ｒｃｏｓ（θ−θ2）＝ｒ9」で表現される。仮想直線ＶＬ９は、四角形画像の短辺に重なる直線である。従って、仮想直線ＶＬ９についても、多数のＯＮ画素（本実施例では「３０個」）が算出される。従って、座標Ｑ9（３０，θ2，ｒ9）がプロットされる（図５の左上の図参照）。なお、以下では、仮想直線上のＯＮ画素の個数のことを「カウント数」と記載することがある。
【００３７】
図３のＳ３２では、ＣＰＵ１３０は、ｒθ座標系にプロットされた各座標を利用して累積ヒストグラムを作成し、累積ヒストグラムを利用して対象画像内での各四角形画像の傾きである対象傾きを特定する。
【００３８】
具体的には、ＣＰＵ１３０は、まず、同じ角度に対応する各カウント値の和（以下では「累積値」と呼ぶ）を算出する。例えば、図５の左上の図では、９個の座標Ｑ1〜Ｑ8，Ｑ10は、同じ角度θ1を有する。従って、ＣＰＵ３２は、同じ角度θ1を対応する各カウント値（即ち、「１００」、「９５」・・・「８５」、「１」）の和である累積値を算出する。そして、図６に示されるように、ＣＰＵ１３０は、角度θ1に対応する累積値を示すヒストグラムを生成する。同様に、ＣＰＵ１３０は、他の各角度（例えばθ2等）に対応する各累積値を示すヒストグラムを生成する。
【００３９】
次いで、ＣＰＵ１３０は、累積ヒストグラムのうちの最大の累積値に対応するθ1を対象傾きとして特定する。θ1は、各四角形画像の長辺に重なる仮想直線の傾きである。このように、本実施例では、対象画像内での各四角形画像の長辺の傾き（即ち対象傾き）を適切に特定することができる。また、上述したように、ｒθ座標系を利用して対象傾きを特定するので、ｘｙ座標系を利用して対象傾きを特定する構成と比べると、仮想直線の本数が少なくて済む。ｘｙ座標系において仮想直線を「ｙ＝ａｘ＋ｂ」で定義すると傾き「ａ」の値を無限に設定し得るが、ｒθ座標系では、仮想直線を定義するためのθの値を０〜３６０°の範囲内で設定することができるからである。従って、本実施例では、対象傾きを特定するための処理負荷が低くて済む。なお、変形例では、ｒθ座標系を利用せずに、ｘｙ座標系を利用して、対象傾きを特定し、さらに、それ以降の処理を実行してもよい。
【００４０】
図３のＳ３４では、ＣＰＵ１３０は、ｒθ座標系にプロットされた複数個の座標（図５の左上の図参照）と、Ｓ３２で特定された対象傾きと、を利用して、傾きヒストグラムを生成する。具体的には、ＣＰＵ１３０は、ｒθ座標系にプロットされた複数個の座標の中から対象傾きθ1を有する２個以上の座標Ｑ1〜Ｑ8，Ｑ10を特定し、特定済みの各座標を構成するｒj及びカウント数（１００、９５等）を示す傾きヒストグラムを生成する。対象傾きθ1を有する２個以上の座標Ｑ1〜Ｑ8，Ｑ10等を特定するということは、対象傾きθ1を有する２本以上の仮想直線ＶＬ１〜ＶＬ８，Ｖ１０等を特定することに等しい。図７の上の図は、傾きヒストグラムの一例を示す。
【００４１】
図３のＳ４０では、ＣＰＵ１３０は、Ｓ３４で生成された傾きヒストグラムを利用して、７個の距離を特定する。具体的には、まず、ＣＰＵ１３０は、傾きヒストグラムにおいて、カウント数の最大値（図７の上の図では「１００」）を特定し、当該最大値の半分であるカウント閾値（本例では「５０」）を算出する。そして、ＣＰＵ１３０は、傾きヒストグラムにおいて、カウント閾値以上のカウント数を有するｒj（本例では８個のｒj（ｒ1〜ｒ8））を特定する。ここで８個のｒjを特定するということは、通常、４個の四角形画像のそれぞれについて、当該四角形画像の２本の長辺に相当する２本の直線を特定することに等しい。なお、変形例では、ＣＰＵ１３０は、カウント閾値を利用せずに、カウント数が大きい方から順に８個のｒjを特定してもよい。
【００４２】
次いで、ＣＰＵ１３０は、特定済みの８個のｒj（即ちｒ1〜ｒ8）を利用して、原点からの距離が最も小さいｒ1と次に小さいｒ2との間の距離Ｄ１（即ち画素数）を算出する。同様に、ＣＰＵ１３０は、原点からの距離がｋ番目（ｋは２〜７の各整数）に小さいｒjと、（ｋ＋１）番目に小さいｒjと、の間の距離Ｄ2〜Ｄ7（即ち画素数）を算出する。
【００４３】
図３のＳ４２では、ＣＰＵ１３０は、Ｓ４０で特定された７個の距離Ｄ1〜Ｄ7のそれぞれについて、矩形（大）、矩形（小）、余白、又は、エラーを決定する。まず、ＣＰＵ１３０は、Ｓ２０で生成された輝度画像データを、モノクロ画像を表わすモノクロ画像データに変換する。具体的には、ＣＰＵ１３０は、輝度画像データ内の各画素データについて、当該画素データの輝度値が所定の輝度閾値よりも小さい場合（即ち当該画素データが黒色を示す場合）に、当該画素データを「１」に変換し、当該画素データの輝度値が所定の輝度閾値以上である場合（即ち当該画素データが白色を示す場合）に、当該画素データを「０」に変換する。これにより、「１」又は「０」を示す複数個の画素データによって構成されるモノクロ画像データが生成される。以下では、モノクロ画像データにおいて、「１」を示す画素、「０」を示す画素のことを、それぞれ、「ＯＮ画素」、「ＯＦＦ画素」と呼ぶ。図７の中央の図に示されるように、モノクロ画像ＭＩでは、４個の四角形画像の輪郭及び内部の各画素はＯＮ画素であり、４個の四角形画像の外部の各画素はＯＦＦ画素である。
【００４４】
次いで、ＣＰＵ１３０は、モノクロ画像ＭＩ内に３本の判定直線Ｌｘ，Ｌｙ，Ｌｚを配置する。各判定直線Ｌｘ，Ｌｙ，ＬｚとＸ軸とがなす角度は、ＸＹ座標系での対象傾きθ1に等しい。判定直線Ｌｘ、判定直線Ｌｙ、判定直線Ｌｚは、それぞれ、予め決められている異なるＹ座標を通過する。ＣＰＵ１３０は、ｒ1〜ｒ8を利用して、各判定直線Ｌｘ，Ｌｙ，Ｌｚ上の領域（即ち線分）Ａ1〜Ａ7を特定する。領域Ａ1は、判定直線とＹ軸との交点からの距離がｒ1〜ｒ2の範囲内の領域である。領域Ａ2は、判定直線とＹ軸との交点からの距離がｒ2〜ｒ3の範囲内の領域である。同様に、他の各領域Ａ3〜Ａ7が特定される。
【００４５】
次いで、ＣＰＵ１３０は、各判定直線について以下の処理を実行する。即ち、ＣＰＵ１３０は、各領域Ａ1〜Ａ7について、当該領域内の全ての画素の個数に対する当該領域内のＯＮ画素の個数の割合（以下では「ＯＮ画素率」と呼ぶ）が８０％以上であるのか否かを判断する。ＣＰＵ１３０は、ＯＮ画素率が８０％以上である領域を黒候補領域として特定する。黒候補領域は、黒色を示す矩形（大）又は矩形（小）に対応する可能性が高い領域である。一方、ＣＰＵ１３０は、ＯＮ画素率が８０％未満である領域を白候補領域として特定する。白候補領域は、余白に対応する可能性が高い領域である。例えば、判定直線Ｌｘについては、いずれの領域Ａ1〜Ａ7も白候補領域として特定される。また、各判定直線Ｌｙ，Ｌｚについては、各領域Ａ1，Ａ3，Ａ5，Ａ7が黒候補領域として特定され、各領域Ａ2，Ａ4，Ａ6が白候補領域として特定される。図７の下の図は、各判定直線Ｌｘ，Ｌｙ，Ｌｚにおける各領域Ａ1〜Ａ7が黒候補領域（即ち「Ｂ」）及び白候補領域（即ち「Ｗ」）のいずれであるのかを表わすテーブルを示す。
【００４６】
次いで、ＣＰＵ１３０は、少なくとも１本の判定直線上で黒候補領域であると特定された各領域Ａ1，Ａ3，Ａ5，Ａ7を黒領域であると判定する。一方、ＣＰＵ１３０は、全ての判定直線上で白候補領域であると特定された各領域Ａ2，Ａ4，Ａ6を白領域であると判定する。このように、本実施例では、３本の判定直線Ｌｘ，Ｌｙ，Ｌｚを利用して、各領域Ａ1〜Ａ7が黒領域及び白領域のいずれであるのかが判定される。例えば、仮に判定直線Ｌｘのみが利用される場合には、いずれの領域Ａ1〜Ａ7も白領域として誤って判定される。本実施例では、３本の判定直線Ｌｘ，Ｌｙ，Ｌｚが利用されるので、黒領域及び白領域を正確に判定することができる。
【００４７】
上述したように、Ｓ４０では、各領域Ａ1〜Ａ7に対応する各距離Ｄ1〜Ｄ7が特定され、Ｓ４２では、各領域Ａ1〜Ａ7が黒領域であるのか白領域であるのかが特定される。Ｓ４２では、ＣＰＵ１３０は、さらに、長さデータ１３６を利用して、各領域Ａ1〜Ａ7が、矩形（大）、矩形（小）、余白、及び、エラーのうちのいずれを示すのかを決定する。ＣＰＵ１３０は、黒領域と特定され、かつ、５０〜８０画素である距離が特定された領域について、矩形（大）を決定する。ＣＰＵ１３０は、黒領域と特定され、かつ、１５〜３５画素である距離が特定された領域について、矩形（小）を決定する。ＣＰＵ１３０は、白領域と特定され、かつ、１５〜３５画素である距離が特定された領域について、余白を決定する。ＣＰＵ１３０は、上記のいずれにも該当しない領域について、エラーを決定する。図８に示されるように、距離Ｄ1，Ｄ3が特定された領域Ａ1，Ａ3が矩形（大）を示し、距離Ｄ2，Ｄ4，Ｄ6が特定された領域Ａ2，Ａ4，Ａ6が余白を示し、距離Ｄ5，Ｄ7が特定された領域Ａ5，Ａ7が矩形（小）を示すことが決定される。
【００４８】
図３のＳ４４では、ＣＰＵ１３０は、Ｓ４２の決定の結果を利用して、各距離Ｄ1〜Ｄ7が、第１条件及び第２条件を含む所定の条件を満たすのか否かを判断する。第１条件は、７個の距離Ｄ1〜Ｄ7において、２個の距離が矩形（大）を示し、２個の距離が矩形（小）を示すことである。第２条件は、残りの３個の距離が余白を示すことである。ＣＰＵ１３０は、距離Ｄ1〜Ｄ7が所定の条件を満たす場合（Ｓ４４でＹＥＳ）に、Ｓ５０に進む。一方、ＣＰＵ１３０は、距離Ｄ1〜Ｄ7が所定の条件を満たさない場合（Ｓ４４でＮＯ）に、Ｓ４０に戻る。例えば、対象画像ＴＩが、矩形（大）及び矩形（小）とは異なる図形に対応する画像を含む場合には、Ｓ４２において、７個の距離Ｄ1〜Ｄ7のうちのある距離についてエラーが決定され得るので、Ｓ４４でＮＯと判断され得る。このように、ＣＰＵ１３０は、パッチコード画像ＰＣＩが規格外の画像である場合（Ｓ４４でＮＯ）に、配置パターンを決定しない（Ｓ５０を実行しない）。Ｓ４０に戻った後に、ＣＰＵ１３０は、距離Ｄ1〜Ｄ7のうち、エラーと決定された距離が除外されるように、新たな７個の距離を特定する。当該処理の詳細については後述する。
【００４９】
Ｓ５０では、ＣＰＵ１３０は、Ｓ４２の決定の結果を利用して、４個の四角形画像の配置パターン（即ちパッチコードの種類）を決定する。具体的には、ＣＰＵ１３０は、距離Ｄ1，Ｄ3，Ｄ5，Ｄ7によって示される２個の矩形（大）及び２個の矩形（小）の並び方に基づいて、配置パターンＰ１〜Ｐ６（図２参照）のうちのいずれかを決定する。図８の例では、距離Ｄ1，Ｄ3，Ｄ5，Ｄ7がそれぞれ、矩形（大）、矩形（大）、矩形（小）、矩形（小）を示すので、配置パターンＰ１が決定される。
【００５０】
Ｓ６０では、ＣＰＵ１３０は、Ｓ５０で決定された配置パターンに応じた処理を実行する。具体的には、ＣＰＵ１３０は、Ｓ５０で決定された配置パターンに対応するメモリ１３２内のフォルダを特定し、Ｓ１０で取得された原稿画像データを特定済みのフォルダに格納させる。
【００５１】
パッチコードを構成する４個の四角形画像の傾きを考慮せずに、パッチコードの種類を決定する比較例が想定される。比較例では、図７の中央のモノクロ画像ＭＩにＸ軸に平行な直線が配置され、当該直線上の原点に近い側（即ち左側）から、ＯＮ画素が連続する各領域（以下では「ＯＮ領域」と呼ぶ）が順次特定される。これにより、４個のＯＮ領域が特定される。そして、４個のＯＮ領域のそれぞれについて、当該ＯＮ領域を構成する画素数に基づいて、当該ＯＮ領域が矩形（大）及び矩形（小）のどちらに対応するのかが特定される。しかしながら、比較例では、４個の四角形画像の傾きを考慮していないので、ＯＮ領域を構成する画素数が四角形画像の短辺の長さよりも大きくなってしまう。このために、ＯＮ領域が矩形（大）及び矩形（小）のどちらに対応するのかが正確に特定されない可能性がある。
【００５２】
一方、本実施例によると、ＰＣ１００は、対象画像ＴＩ内での各四角形画像の傾きである対象傾きθ1を特定し、対象傾きθ1を利用して特定される４セットの２本の直線（即ちｒ1〜ｒ8に対応する８本の直線）を利用して、各四角形画像が有する２本の長辺の間の距離Ｄ1，Ｄ3，Ｄ5，Ｄ7を特定する（図３のＳ４０、図７の上の図）。そして、ＰＣ１００は、各四角形画像について特定される各距離Ｄ1，Ｄ3，Ｄ5，Ｄ7を利用して、当該四角形画像が矩形（大）及び矩形（小）のうちのいずれの種類であるのかを決定する（図３のＳ４２、図８）。即ち、ＰＣ１００は、対象画像ＴＩ内において各四角形画像が傾いていても、当該四角形画像が矩形（大）及び矩形（小）のうちのいずれの種類であるのかを正確に決定することができ、この結果、パッチコードの種類を正確に決定することができる（図３のＳ５０、図８）。
【００５３】
（配置パターンＰ３が決定される例；図９）
続いて、図９を参照して、図３のＳ５０で配置パターンＰ３が決定される例について説明する。図９の上の図は、配置パターンＰ３を有する４個の四角形画像を含む対象画像ＴＩを示す。図３のＳ３２で対象傾きが特定されるまでの処理の説明は省略する。
【００５４】
図９の中央の図は、図３のＳ３４で生成される傾きヒストグラムを示す。図３のＳ４０において、ｒ11〜ｒ18が特定され、７個の距離Ｄ11〜Ｄ17が特定される。Ｓ４２では、距離Ｄ11，Ｄ15について矩形（大）が決定され、距離Ｄ12，Ｄ14，Ｄ16について余白が決定され、距離Ｄ13，Ｄ17について矩形（小）が決定される。距離Ｄ11〜Ｄ17は、所定の条件を満たすので、Ｓ４４でＹＥＳと判断される。距離Ｄ11，Ｄ13，Ｄ15，Ｄ17が、それぞれ、矩形（大）、矩形（小）、矩形（大）、矩形（小）を示すので、Ｓ５０では、配置パターンＰ３が決定される。このように、ＰＣ１００は、対象画像ＴＩ内において各四角形画像が傾いていても、４個の矩形画像の配置パターンが配置パターンＰ３であることを正確に決定することができる（図３のＳ５０、図９の下の図）。
【００５５】
（原稿が汚れている例；図１０及び図１１）
続いて、図１０及び図１１を参照して、原稿が汚れている例について説明する。本例では、原稿が汚れていることに起因して、図３のＳ４４でＮＯと判断される。
【００５６】
図１０の対象画像ＴＩは、配置パターンＰ１を有するパッチコード画像ＰＣＩと、黒色の汚れを示す汚れ画像ＤＩと、を含む。汚れ画像ＤＩは、第２方向に沿って平行に伸びる２本の長辺を有する。当該２本の長辺の間の距離は、１５〜３５画素の範囲内である。当該２本の長辺のうち、原点から近い長辺、原点から遠い長辺をそれぞれ、「近位長辺」、「遠位長辺」と呼ぶ。また、汚れ画像ＤＩと、原点に最も近い四角形画像と、の間の距離は、３５画素よりも大きい。図３のＳ３２で対象傾きが特定されるまでの処理の説明は省略する。
【００５７】
図１０の中央の図は、図３のＳ３４で生成される傾きヒストグラムを示す。カウント閾値である５０よりも大きいカウント数を有するｒjが１０個存在するが、図３のＳ４０において、左側から順に８個のｒj（即ちｒ21〜ｒ28）が特定され、７個の距離Ｄ21〜Ｄ27が特定される。ｒ21，ｒ22は、それぞれ、原点から近位長辺までの距離、原点から遠位長辺までの距離である。従って、Ｄ21は、汚れ画像ＤＩの２本の長辺の間の距離である。Ｄ22は、汚れ画像ＤＩと、原点に最も近い四角形画像と、の間の距離である。図３のＳ４２では、Ｄ23，Ｄ25について矩形（大）が決定され、Ｄ24，Ｄ26について余白が決定され、Ｄ27について矩形（小）が決定される。また、汚れ画像ＤＩの２本の長辺の間の距離は、１５〜３５画素であるので、Ｄ21について短辺（小）が決定される。また、Ｄ22は３５画素よりも大きいので、Ｄ22についてエラーが決定される。Ｄ22が余白を示さない（即ち第２条件を満たさない）ので、Ｓ４４でＮＯと判断される。そのため、配置パターンが決定されず、Ｓ４０に戻る。
【００５８】
図１１では、図３のＳ４０で７個の距離が再び特定されて、配置パターンＰ１が決定される様子を示す。２回目のＳ４０では、ＣＰＵ１３０は、１回目のＳ４０で特定されたｒ21〜ｒ28のうちの左側の２個のｒj（即ちｒ21，ｒ22）を除外して、カウント閾値よりも大きいカウント数を有する８個のｒj（即ちｒ31〜ｒ38）を特定し、７個の距離Ｄ31〜Ｄ37を特定する。この結果、配置パターンＰ１が決定される。このように、本実施例では、汚れ画像ＤＩが存在する場合でも、パッチコードの種類を正確に特定することができる。
【００５９】
なお、比較例として、図３のＳ４２において、余白の長さを考慮しない構成が考えられる。この場合、図１０の例において、Ｄ21，Ｄ23，Ｄ25，Ｄ27によって示される２個の矩形（大）及び２個の矩形（小）の並び方に基づいて、配置パターンＰ４（図２参照）が誤って決定される。本実施例では、余白の長さが考慮されてＤ22がエラーと決定されるので、配置パターンが誤って特定されるのを抑制することができる。ただし、変形例では、余白の長さを考慮しない上記の比較例の構成が採用されてもよい。
【００６０】
（対応関係）
ＰＣ１００が、「画像解析装置」の一例である。パッチコード画像、四角形画像、図３のＳ２４のＯＮ画素、エッジ閾値、カウント閾値、１５〜３５画素がそれぞれ、「コード画像」、「コード要素」、「輪郭画素」、「所定のエッジ強度」、「所定数」、「所定の範囲」の一例である。４が「Ｎ」の一例である。各四角形画像の長辺、各四角形画像の短辺がそれぞれ、「第１辺」、「第２辺」の一例である。カウント数、累積値がそれぞれ、「第１の個数」、「第２の個数」の一例である。ＸＹ座標系、ｒθ座標系、θ軸がそれぞれ、「第１座標系」、「第２座標系」、「直線の傾きを示す軸」の一例である。図５の仮想直線ＶＬ１〜ＶＬ８，ＶＬ１０が、「２本以上の仮想直線」の一例である。配置パターンＰ１〜Ｐ６が、「所定のパターン」の一例である。
【００６１】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【００６２】
（変形例１）上記の実施例では、図３のＳ２４の二値画像ＢＶＩ（図４参照）において、全ての輪郭画素がＯＮ画素であるが、変形例では、全ての輪郭画素のうちの一部のみがＯＮ画素であってもよい。図３のＳ３２では、四角形画像のいずれか１本の長辺上の少なくとも２個の画素がＯＮ画素であれば、対象傾きが特定され得る。また、Ｓ４０では、各四角形画像について、各長辺上の少なくとも１個の画素がＯＮ画素であれば、７個の距離が特定され得る。即ち、少なくとも７個の画素がＯＮ画素であればよい。一般的に言うと、Ｎ個のコード要素の輪郭を構成する（２Ｎ＋１）個の「輪郭画素」が特定されていればよい。即ち、「輪郭画素特定部」は、コード要素の輪郭を構成する一部の輪郭画素のみを特定してもよい。
【００６３】
（変形例２）「コード要素」は、四角形状を有さなくてもよいし、「第２辺」を有さなくてもよい。例えば、「コード要素」が有する少なくとも１本の辺は曲線であってもよい。一般的に言うと、「コード要素」は、第２方向に沿って平行に伸びる２本の第１辺を有していればよい。
【００６４】
（変形例３）上記の実施例では、６種類のパッチコードＰＣが存在するが、これに代えて、例えば、同じ形状を有する４個の矩形によって構成される所定のコードを含む原稿がスキャンされてもよい。この場合、図３のＳ４２〜Ｓ５０において、原稿が所定のコードを含むのか否かが判断され、Ｓ６０において、原稿が所定のコードを含む場合には、原稿画像データを第１のフォルダに格納させ、原稿が所定のコードを含まない場合には、原稿画像データを第２のフォルダに格納させてもよい。即ち、「Ｎ個のコード要素」は、「２種類以上の四角形画像」を含まなくてもよい。
【００６５】
（変形例４）上記の実施例の技術は、バーコードを含む原稿がスキャンされる場合にも適用可能である。この場合、バーコードを構成する複数個の矩形画像が「Ｎ個のコード要素」の一例である。そして、図３のＳ４０〜Ｓ５０において、各矩形画像が表わす各数字が特定され、Ｓ６０において、特定済みの各数字の組合せに応じた処理（例えば当該組合せに対応するフォルダへの原稿画像データの格納）が実行されてもよい。
【００６６】
（変形例５）図３のＳ３２では、ＣＰＵ１３０は、累積ヒストグラムを生成せずに、対象傾きを特定してもよい。具体的には、ＣＰＵ１３０は、複数個のカウント数のうち、最大のカウント数を含む座標（図５の上の図ではＱ1）を特定し、当該座標に含まれるθ（本例ではθ1）を特定してもよい。即ち、「傾き特定部」は、第２の個数を算出しなくてもよい。
【００６７】
（変形例６）図３のＳ３２では、ＣＰＵ１３０は、最大の累積値に対応するθ（図６ではθ1）に代えて、２番目に大きな累積値に対応するθ（図６ではθ2）を対象傾きとして特定してもよい。そして、ＣＰＵ１３０は、Ｓ３４において傾きヒストグラムを作成する際に、対象傾きから９０°が減算された値（図６ではθ1）を利用してもよい。即ち、「対象傾き」は、Ｎセットの２本の第１辺が有する傾きでなくてもよい。
【００６８】
（変形例７）図３の各処理は、スキャナ２００によって実行されてもよく、Ｓ６０において、原稿画像データがスキャナ２００内のフォルダに格納されてもよい。即ち、「画像解析装置」は、スキャナであってもよい。一般的に言うと、「画像解析装置」は、画像の解析を実行可能なあらゆる装置（例えば、多機能機、スマートフォン等）を含む。
【００６９】
（変形例８）上記の実施例では、ＰＣ１００のＣＰＵ１３０がドライバプログラム１３４（即ち、ソフトウェア）を実行することによって、図３〜図１１の各処理が実現される。これに代えて、図３〜図１１の各処理のうちの少なくとも１つの処理は、論理回路等のハードウェアによって実現されてもよい。
【００７０】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【００７１】
２：通信システム、１１０：操作部、１１２：表示部、１１４：ネットワークインターフェース、１２０：制御部、１３０：ＣＰＵ、１３２：メモリ、１３４：ドライバプログラム、１３６：長さデータ、１３８：パターンデータ、２００：スキャナ、ＢＶＩ：二値画像、Ｄ1〜Ｄ37：距離、ＤＣ：原稿、ＤＩ：汚れ画像、Ｌｘ〜Ｌｚ：判定直線、ＭＩ：モノクロ画像、Ｐ１〜Ｐ６：配置パターン、ＰＣ：パッチコード、ＰＣＩ：パッチコード画像、ＴＡ：対象領域、ＴＩ：対象画像、ＶＬ１〜ＶＬ１０：仮想直線
【図１】
0006645143.tif 000002
【図２】
0006645143.tif 000003
【図３】
0006645143.tif 000004
【図４】
0006645143.tif 000005
【図５】
0006645143.tif 000006
【図６】
0006645143.tif 000007
【図７】
0006645143.tif 000008
【図８】
0006645143.tif 000009
【図９】
0006645143.tif 000010
【図１０】
0006645143.tif 000011
【図１１】
0006645143.tif 000012