(57)【要約】【課題】  点対称性を有しない位置検出マークを含む二次元コードを表わすコード画像の位置を精度良く特定するための手法を開示すること。【解決手段】  画像解析装置は、二次元コードを含む原稿の読取りによって生成される対象画像データを取得する。二次元コードは、二次元コードの位置を検出するためのマークを含み、マークは、マークの中心点を基準とした点対称性を有しない。画像解析装置は、対象画像データによって表わされる対象画像の中から、マークに含まれる第１の非背景領域を表わす画像の候補である非背景候補画像を特定し、非背景候補画像内の基準点を特定し、基準点を通過する対象線分を特定することによって、マークを表わす画像の候補であるマーク候補画像の向きを示す角度を特定する。そして、画像解析装置は、対象画像内における二次元コードを表わすコード画像の位置を特定し、コード画像を利用した所定処理を実行する。【選択図】図２
2019003229.tif 000002
【特許請求の範囲】
【請求項１】
画像解析装置であって、
二次元コードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記二次元コードは、前記二次元コードの位置を検出するためのマークを含み、前記マークは、前記原稿の背景色とは異なる非背景色を有するＮ個（前記Ｎは２以上の整数）の非背景領域と、前記背景色を有するＭ個（前記Ｍは１以上の整数）の背景領域と、を含み、前記マークは前記マークの中心点を基準とした点対称性を有さず、前記マークの前記中心点を通過する対象直線上の（Ｎ＋Ｍ）本の線分であって、前記Ｎ個の非背景領域のそれぞれに重なるＮ本の線分と、前記Ｍ個の背景領域のそれぞれに重なるＭ本の線分と、を含む前記（Ｎ＋Ｍ）本の線分の長さの比は、所定の比である、前記取得部と、
前記対象画像データによって表わされる対象画像の中から、前記マークに含まれる前記Ｎ個の非背景領域のうちの第１の非背景領域を表わす画像の候補である非背景候補画像を特定する画像特定部と、
前記非背景候補画像を利用して、前記非背景候補画像内の基準点を特定する基準点特定部と、
前記基準点を通過する複数本の線分の中から対象線分を特定することによって、前記マークを表わす画像の候補であるマーク候補画像の向きを示す角度を特定する角度特定部であって、前記対象線分上の（Ｎ＋Ｍ）本の線分であって、前記非背景色を有するＮ個の非背景画像のそれぞれに重なるＮ個の線分と、前記背景色を有するＭ個の背景画像のそれぞれに重なるＭ個の線分と、を含む前記（Ｎ＋Ｍ）本の線分の長さの比は、前記所定の比に一致又は近似する、前記角度特定部と、
前記マーク候補画像の前記角度を利用して、前記対象画像内における前記二次元コードを表わすコード画像の位置を特定する位置特定部と、
前記コード画像の前記位置が特定される場合に、前記コード画像を利用した所定処理を実行する所定処理実行部と、
を備える画像解析装置。
【請求項２】
前記マークに含まれる前記Ｎ個の非背景領域は、矩形形状を有する前記第１の非背景領域と、前記第１の非背景領域とは異なる形状を有する第２の非背景領域と、を含み、
前記二次元コードは、前記二次元コードの３個の隅部に位置する３個の第１種の前記マークを含み、
前記第１種のマークは、前記第１の非背景領域が前記第２の非背景領域よりも前記二次元コードの中心に近いマークであり、
前記画像特定部は、複数個の前記非背景候補画像を特定し、
前記基準点特定部は、前記複数個の非背景候補画像のそれぞれについて前記基準点を特定し、
前記角度特定部は、複数個の前記基準点のそれぞれについて前記対象線分を特定することによって、複数個の前記マーク候補画像の向きを示す複数個の前記角度を特定し、
前記位置特定部は、
前記複数個のマーク候補画像の中に、第１の角度を有する第１のマーク候補画像と、前記第１の角度との差分が９０度に一致又は近似する第２の角度を有する第２のマーク候補画像と、前記第２の角度との差分が９０度に一致又は近似する第３の角度を有する第３のマーク候補画像と、を含む３個のマーク候補画像が存在するのか否かを判断し、
前記３個のマーク候補画像が存在すると判断される場合に、前記３個のマーク候補画像を含む前記コード画像の前記位置を特定する、請求項１に記載の画像解析装置。
【請求項３】
前記マークに含まれる前記Ｎ個の非背景領域は、矩形形状を有する前記第１の非背景領域と、前記第１の非背景領域とは異なる形状を有する第２の非背景領域と、を含み、
前記二次元コードは、前記二次元コードの３個の隅部に位置する３個の第１種の前記マークを含み、
前記第１種のマークは、前記第１の非背景領域が前記第２の非背景領域よりも前記二次元コードの中心に近いマークであり、
前記画像特定部は、複数個の前記非背景候補画像を特定し、
前記基準点特定部は、前記複数個の非背景候補画像のそれぞれについて前記基準点を特定し、
前記角度特定部は、複数個の前記基準点のそれぞれについて前記対象線分を特定することによって、複数個の前記マーク候補画像の向きを示す複数個の前記角度を特定し、
前記位置特定部は、
前記複数個のマーク候補画像の中に、直角三角形の３個の頂点を構成する３個の前記基準点を有する３個のマーク候補画像が存在するのか否かを判断し、
前記３個のマーク候補画像が存在すると判断される場合に、前記３個のマーク候補画像を含む前記コード画像の前記位置を特定する、請求項１又は２のいずれか一項に記載の画像解析装置。
【請求項４】
前記二次元コードは、さらに、前記二次元コードの１個の隅部に位置する１個の第２種の前記マークを含み、
前記第２種のマークは、前記第１の非背景領域が前記第２の非背景領域よりも前記二次元コードの中心から遠いマークであり、
前記位置特定部は、さらに、
前記３個のマーク候補画像が存在すると判断される場合に、前記３個のマーク候補画像の前記３個の基準点を利用して、前記第２種のマークの候補であるマーク候補画像の基準点が位置すべき予想点を特定し、
前記複数個のマーク候補画像の中に、前記予想点に一致又は近似する特定の基準点を有する特定のマーク候補画像が存在するのか否かを判断し、
前記特定のマーク候補画像が存在すると判断される場合に、前記３個のマーク候補画像と前記特定のマーク候補画像とを含む前記コード画像の前記位置を特定する、請求項３に記載の画像解析装置。
【請求項５】
前記位置特定部は、さらに、
前記特定のマーク候補画像が存在すると判断される場合に、前記特定のマーク候補画像の角度と、前記３個のマーク候補画像のうち、前記特定のマーク候補画像の対角に位置する対角のマーク候補画像の角度と、が一致又は近似するのか否かを判断し、
前記特定のマーク候補画像の前記角度と前記対角のマーク候補画像の前記角度とが一致又は近似すると判断される場合に、前記３個のマーク候補画像と前記特定のマーク候補画像とを含む前記コード画像の前記位置を特定する、請求項４に記載の画像解析装置。
【請求項６】
前記対象画像は、第１方向に沿ったｉ個（前記ｉは２以上の整数）の画素と、前記第１方向に直交する第２方向に沿ったｊ個（前記ｊは２以上の整数）の画素と、を含む（ｉ×ｊ）個の画素によって構成され、
前記（ｉ×ｊ）個の画素は、前記第２方向に沿って並ぶｊ本の画素ラインを含み、
前記画像特定部は、
前記第２方向の第１側から第２側に向かって、前記ｊ本の画素ラインのそれぞれについて、当該画素ラインの中に対象画素グループが存在するのか否かを判断する存在判断処理であって、前記対象画素グループは、前記非背景色を表わす非背景画素グループと、前記背景色を表わす背景画素グループと、が交互に並ぶ（Ｎ＋Ｍ）個の画素グループであって、各グループの画素数の比が前記所定の比に一致又は近似する前記（Ｎ＋Ｍ）個の画素グループである、前記存在判断処理を順次実行し、
前記第２方向の前記第１側からｋ本目（前記ｋは１以上前記ｊ未満の各整数）の画素ラインについての前記存在判断処理において、前記対象画素グループが存在すると判断される場合に、当該対象画素グループ内の前記第１の非背景領域に対応する第１の画素グループを特定するための特定情報を記憶し、
前記第２方向の前記第１側から（ｋ＋１）本目の画素ラインについての前記存在判断処理において、前記対象画素グループが存在すると判断され、かつ、当該対象画素グループ内の前記第１の非背景領域に対応する第２の画素グループが前記第１の画素グループに隣接する場合に、前記特定情報を更新して、前記第２の画素グループをさらに特定するための更新済みの特定情報を記憶し、
記憶済みの前記特定情報によって特定される複数個の画素グループの個数が閾値以上になる場合に、当該特定情報によって特定される前記複数個の画素グループを含む前記非背景候補画像を特定する、請求項１から５のいずれか一項に記載の画像解析装置。
【請求項７】
前記対象直線は、前記対象直線上の前記（Ｎ＋Ｍ）個の線分の長さの比が前記所定の比である唯一の直線であると共に、前記第１の非背景領域の中心点を通過し、
前記基準点特定部は、前記非背景候補画像の中心点を前記基準点として特定する、請求項１から６のいずれか一項に記載の画像解析装置。
【請求項８】
前記角度特定部は、
前記基準点を通過する複数本の直線の中から、前記非背景候補画像に重なる最短又は最長の線分を有する第１の直線を特定し、
前記第１の直線上の２本の線分と、前記基準点を通過すると共に前記第１の直線に直交する第２の直線上の２本の線分と、を含む前記複数本の線分を特定し、
前記複数本の線分のそれぞれについて、当該線分上における前記非背景色を有する各非背景画像の長さと、当該線分上における前記背景色を有する各背景画像の長さと、を含む複数個の長さの比と、前記所定の比と、の近似の程度を示す指標値を算出し、
前記複数本の線分について算出される複数個の前記指標値を利用して、前記対象線分を特定する、請求項７に記載の画像解析装置。
【請求項９】
前記マークに含まれる前記Ｎ個の非背景領域は、矩形形状を有する前記第１の非背景領域と、前記第１の非背景領域とは異なる形状を有する第２の非背景領域と、を含み、
前記二次元コードは、前記二次元コードの３個の隅部に位置する３個の第１種の前記マークを含み、
前記第１種のマークは、前記第１の非背景領域が前記第２の非背景領域よりも前記二次元コードの中心に近いマークであり、
前記画像特定部は、複数個の前記非背景候補画像を特定し、
前記基準点特定部は、前記複数個の非背景候補画像のそれぞれについて前記基準点を特定し、
前記角度特定部は、複数個の前記基準点のそれぞれについて前記対象線分を特定することによって、複数個の前記マーク候補画像の向きを示す複数個の前記角度を特定し、
前記画像解析装置は、さらに、
前記複数個のマーク候補画像の中に、所定条件を満たす２個のマーク候補画像が存在するのか否かを判断する条件判断部であって、（１）前記２個のマーク候補画像の２個の前記基準点を結ぶ直線が伸びる方向が所定方向に一致又は近似し、かつ、（２）前記２個のマーク候補画像の２個の前記角度が一致又は近似し、又は、前記２個のマーク候補画像の前記２個の角度の差分が１８０度に一致又は近似する場合に、前記所定条件は満たされる、前記条件判断部と、
前記所定条件を満たす前記２個のマーク候補画像が存在すると判断される場合に、前記２個のマーク候補画像を含む前記対象画像内の所定領域をデコードして、前記所定領域が前記コード画像を含むのか否かを判断するデコード判断部と、を備え、
前記所定処理実行部は、さらに、前記所定領域が前記コード画像を含むと判断される場合に、前記コード画像を利用した前記所定処理を実行する、請求項１から８のいずれか一項に記載の画像解析装置。
【請求項１０】
画像解析装置のためのコンピュータプログラムであって、
前記画像解析装置のコンピュータを、以下の各部、即ち、
二次元コードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記二次元コードは、前記二次元コードの位置を検出するためのマークを含み、前記マークは、前記原稿の背景色とは異なる非背景色を有するＮ個（前記Ｎは２以上の整数）の非背景領域と、前記背景色を有するＭ個（前記Ｍは１以上の整数）の背景領域と、を含み、前記マークは前記マークの中心点を基準とした点対称性を有さず、前記マークの前記中心点を通過する対象直線上の（Ｎ＋Ｍ）本の線分であって、前記Ｎ個の非背景領域のそれぞれに重なるＮ本の線分と、前記Ｍ個の背景領域のそれぞれに重なるＭ本の線分と、を含む前記（Ｎ＋Ｍ）本の線分の長さの比は、所定の比である、前記取得部と、
前記対象画像データによって表わされる対象画像の中から、前記マークに含まれる前記Ｎ個の非背景領域のうちの第１の非背景領域を表わす画像の候補である非背景候補画像を特定する画像特定部と、
前記非背景候補画像を利用して、前記非背景候補画像内の基準点を特定する基準点特定部と、
前記基準点を通過する複数本の線分の中から対象線分を特定することによって、前記マークを表わす画像の候補であるマーク候補画像の向きを示す角度を特定する角度特定部であって、前記対象線分上の（Ｎ＋Ｍ）本の線分であって、前記非背景色を有するＮ個の非背景画像のそれぞれに重なるＮ本の線分と、前記背景色を有するＭ個の背景画像のそれぞれに重なるＭ本の線分と、を含む前記（Ｎ＋Ｍ）本の線分の長さの比は、前記所定の比に一致又は近似する、前記角度特定部と、
前記マーク候補画像の前記角度を利用して、前記対象画像内における前記二次元コードを表わすコード画像の位置を特定する位置特定部と、
前記コード画像の前記位置が特定される場合に、前記コード画像を利用した所定処理を実行する所定処理実行部と、
として機能させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書では、二次元コードを表わすコード画像を含む対象画像を解析する画像解析装置を開示する。
【背景技術】
【０００２】
二次元コードに含まれる位置検出マークを利用して、原稿に印字された二次元コードの位置を特定するための技術が知られている（例えば、下記の特許文献１〜３）。二次元コードの位置検出マークは、二次元コードの規格に応じて、様々な形状を有しており、その形状に適した手法で位置検出マークが検出される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−２５４０３７号公報
【特許文献２】特開２００７−８６９３６号公報
【特許文献３】特開２００７−９４５８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本明細書では、点対称性を有しない位置検出マークを含む二次元コードを表わすコード画像の位置を精度良く特定するための新たな手法を開示する。
【課題を解決するための手段】
【０００５】
本明細書によって開示される画像解析装置は、二次元コードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記二次元コードは、前記二次元コードの位置を検出するためのマークを含み、前記マークは、前記原稿の背景色とは異なる非背景色を有するＮ個（前記Ｎは２以上の整数）の非背景領域と、前記背景色を有するＭ個（前記Ｍは１以上の整数）の背景領域と、を含み、前記マークは前記マークの中心点を基準とした点対称性を有さず、前記マークの前記中心点を通過する対象直線上の（Ｎ＋Ｍ）本の線分であって、前記Ｎ個の非背景領域のそれぞれに重なるＮ本の線分と、前記Ｍ個の背景領域のそれぞれに重なるＭ本の線分と、を含む前記（Ｎ＋Ｍ）本の線分の長さの比は、所定の比である、前記取得部と、前記対象画像データによって表わされる対象画像の中から、前記マークに含まれる前記Ｎ個の非背景領域のうちの第１の非背景領域を表わす画像の候補である非背景候補画像を特定する画像特定部と、前記非背景候補画像を利用して、前記非背景候補画像内の基準点を特定する基準点特定部と、前記基準点を通過する複数本の線分の中から対象線分を特定することによって、前記マークを表わす画像の候補であるマーク候補画像の向きを示す角度を特定する角度特定部であって、前記対象線分上の（Ｎ＋Ｍ）本の線分であって、前記非背景色を有するＮ個の非背景画像のそれぞれに重なるＮ本の線分と、前記背景色を有するＭ個の背景画像のそれぞれに重なるＭ本の線分と、を含む前記（Ｎ＋Ｍ）本の線分の長さの比は、前記所定の比に一致又は近似する、前記角度特定部と、前記マーク候補画像の前記角度を利用して、前記対象画像内における前記二次元コードを表わすコード画像の位置を特定する位置特定部と、前記コード画像の前記位置が特定される場合に、前記コード画像を利用した所定処理を実行する所定処理実行部と、を備える。
【０００６】
上記の二次元コードに含まれるマークは、点対称性を有さず、かつ、上記の所定の比を有する。このようなマークを検出するために、上記の画像解析装置は、基準点を通過する複数本の線分の中から上記の所定の比に対応する対象線分を特定することによってマーク候補画像の向きを示す角度を特定し、当該角度を利用してコード画像の位置を特定する。従って、画像解析装置は、点対称性を有しないマークを含む二次元コードを表わすコード画像の位置を精度良く特定することができる。
【０００７】
上記の画像解析装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを格納するコンピュータ読取可能記録媒体も新規で有用である。
【図面の簡単な説明】
【０００８】
【図１】本実施例のハードウェア構成を模式的に示す。
【図２】ＰＣ（Personal Computerの略）によって実行されるドライバ処理のフローチャートを示す。
【図３】マーク候補画像検出処理のフローチャートを示す。
【図４】連結情報解析処理のフローチャートを示す。
【図５】矩形領域候補画像を特定するための手法を説明するための説明図を示す。
【図６】マーク候補画像の角度を特定するための手法を説明するための説明図を示す。
【図７】３マークデコード処理のフローチャートを示す。
【図８】３マークデコード処理を説明するための説明図を示す。
【図９】２マークデコード処理のフローチャートを示す。
【図１０】２マークデコード処理を説明するための説明図を示す。
【発明を実施するための形態】
【０００９】
（ＰＣ１０の構成；図１）
ＰＣ１０は、ＬＡＮ（Local Area Networkの略）を介して、スキャナ５０と通信可能に接続されている。ＰＣ１０は、操作部１２と、表示部１４と、ネットワークインターフェース１６と、制御部３０と、を備える。以下では、インターフェースのことを「Ｉ／Ｆ」と記載する。操作部１２は、マウス、キーボード等を含む。ユーザは、操作部１２を操作することによって、様々な指示をＰＣ１０に入力することができる。表示部１４は、様々な情報を表示するためのディスプレイである。ネットワークＩ／Ｆ１６は、ＬＡＮに接続されている。
【００１０】
制御部３０は、ＣＰＵ３２とメモリ３４とを備える。メモリ３４は、ＲＯＭ（Read Only Memoryの略）、ＲＡＭ（Random Access Memoryの略）等によって構成される。ＣＰＵ３２は、メモリ３４に格納されている各種のプログラムに従って、様々な処理（例えば後述の図２の処理）を実行するプロセッサである。プログラムは、図示省略のＯＳ（Operating Systemの略）プログラム、ドライバプログラム３６等を含む。
【００１１】
ドライバプログラム３６は、スキャナ５０のベンダによって提供され、スキャナ５０に関連する処理を実行するためのプログラムである。ドライバプログラム３６は、例えば、スキャナ５０と共に出荷されるメディアからＰＣ１０にインストールされてもよいし、スキャナ５０のベンダによって提供されるインターネット上のサーバからＰＣ１０にインストールされてもよい。
【００１２】
ＣＰＵ３２は、ユーザから操作部１２に対するスキャン実行操作を受け付ける場合に、ドライバプログラム３６に従って、原稿１１２の読取りをスキャナ５０に実行させるためのスキャン指示１００をスキャナ５０に供給する。スキャン指示１００は、読取解像度、原稿のサイズ等の読取設定を含む。これにより、スキャナ５０は、読取設定に従って原稿１１２の読取りを実行して、スキャンデータ１１０を生成する。そして、スキャナ５０は、スキャンデータ１１０をＰＣ１０に供給する。この結果、ＣＰＵ３２は、スキャナ５０からスキャンデータ１１０を取得する。
【００１３】
本実施例では、特に、ＣＰＵ３２は、ユーザから、原稿１１２に含まれる二次元コード１１４をデコードするためのデコード操作を受け付けることができる。二次元コード１１４を含む原稿１１２は、例えば、オフィスの書類、病院のカルテ等である。例えば、オフィスの書類に含まれる二次元コードは、当該書類を表わすスキャンデータの保存先のフォルダを特定するための文字、記号等に対応する。例えば、病院のカルテに含まれる二次元コードは、患者を特定するための文字、記号等に対応する。ＣＰＵ３２は、上記のデコード操作を受け付け、かつ、スキャンデータ１１０を取得する場合に、ドライバプログラム３６に従って、スキャンデータ１１０によって表わされるスキャン画像の中から本実施例の二次元コードである漢信コード１１４を表わす漢信コード画像の位置を特定して、漢信コード画像を利用した所定処理を実行する。所定処理は、例えば、漢信コード１１４のデコード結果が示すメモリ３４内のフォルダにスキャンデータ１１０を格納する格納処理、デコード結果が示す患者の情報とスキャンデータ１１０とをメモリ３４内の医療用アプリケーション（図示省略）に出力する出力処理、デコード結果が示す送信先にスキャンデータ１１０を送信する送信処理等を含む。
【００１４】
ここで、漢信コードについて説明しておく。漢信コードは、主に中国で使用されている二次元コードであり、英語では「Chinese-sensible code」と表記される。また、漢信コードの規格は、「中華人民共和国国家標準  ＧＢ／Ｔ２１０４９−２００７」に記述されている。図１に示すように、漢信コード１１４は、漢信コード１１４の位置を検出するための４個の位置検出マーク（以下では単に「マーク」と称する）１１５Ａ，１１５Ｂ，１１５Ｃ，１１６と、情報領域１１７と、を含む。情報領域１１７は、コード化された情報（即ち文字、記号等）が記述される領域である。
【００１５】
４個のマーク１１５Ａ〜１１５Ｃ，１１６は、漢信コード１１４の４個の隅部に位置する。各マーク１１５Ａ等は、同じ形状を有する。ここでは、マーク１１５Ａの形状を詳しく説明する。マーク１１５Ａの外形は、正方形である。マーク１１５Ａは、原稿１１２の背景色（例えば白色）とは異なる非背景色（例えば黒色）を有する３個の非背景領域１３０と、背景色を有する２個の背景領域１４０と、を含む。３個の非背景領域１３０は、正方形である矩形領域１３２と、矩形領域１３２の２辺に対向するＬ字形状を有する第１対向領域１３４と、第１対向領域１３４に対向するＬ字形状を有する第２対向領域１３６と、を含む。２個の背景領域１４０は、矩形領域１３２と第１対向領域１３４との間に位置する第１間隙領域１４２と、第１対向領域１３４と第２対向領域１３６との間に位置する第２間隙領域１４４と、を含む。
【００１６】
マーク１１５Ａは、マーク１１５Ａの中心点１２５を基準とした点対称性を有しない。即ち、マーク１１５Ａは、中心点１２５を中心として回転すると、回転角度に応じた異なる向きを有する。例えば、マーク１１５Ａが時計回りに９０度回転すると、マーク１１５Ｂの向きになり、マーク１１５Ａが時計回りに１８０度回転すると、マーク１１５Ｃの向きになる。
【００１７】
符号１２０は、マーク１１５Ａの中心点１２５を通過する直線である。具体的には、直線１２０は、マーク１１５Ａの対角線に相当し、さらに、矩形領域１３２の中心点１３３を通過する。符号１１８Ａ，１１８Ｂ，１１８Ｃは、３個の非背景領域１３２，１３４，１３６のそれぞれに重なる直線１２０上の３本の線分である。符号１１９Ａ，１１９Ｂは、２個の背景領域１４２，１４４のそれぞれに重なる直線１２０上の２本の線分である。これらの５本の線分１１８Ａ〜１１８Ｃ，１１９Ａ，１１９Ｂの長さの比は、線分１１８Ａの側から見ると「１：１：１：１：３」であり、線分１１８Ｃの側から見ると「３：１：１：１：１」である。以下では、「１：１：１：１：３」又は「３：１：１：１：１」のことを「所定の比」と呼ぶ。直線１２０は、マーク１１５Ａの中心点１２５を通過するあらゆる直線のうち、５本の線分１１８Ａ〜１１８Ｃ，１１９Ａ，１１９Ｂの長さの比が上記の所定の比である唯一の直線である。
【００１８】
他の各マーク１１５Ｂ，１１５Ｃ，１１６も、マーク１１５Ａと同じ形状を有する。ここで、３個のマーク１１５Ａ〜１１５Ｃのそれぞれでは、矩形領域１３２が他の非背景領域（即ち第１及び第２対向領域１３４，１３６）よりも漢信コード１１４の中心に近く、マーク１１６では、矩形領域１３２が他の非背景領域１３４，１３６よりも漢信コード１１４の中心から遠い。以下では、矩形領域が他の非背景領域よりも漢信コード１１４の中心に近いマーク（即ち１１５ａ〜１１５Ｃ）、矩形領域が他の非背景領域よりも漢信コード１１４の中心から遠いマーク（即ち１１６）のことを、それぞれ、「第１種のマーク」、「第２種のマーク」と呼ぶことがある。即ち、漢信コード１１４は、３個の第１種のマーク１１５Ａ〜１１５Ｃと、１個の第２種のマーク１１６と、を含む。漢信コード１１４の左上、右上、及び、右下の３個の隅部に３個の第１種のマーク１１５Ａ〜１１５Ｃが位置し、かつ、漢信コード１１４の左下の１個の隅部に１個の第２種のマーク１１６が位置する状態（即ち図１の状態）が、規格上において漢信コード１１４が正立している状態である。
【００１９】
（ＰＣ１０のドライバプログラム３６の処理；図２）
続いて、図２を参照して、ＣＰＵ３２が、ユーザから上記のデコード操作を受け付ける場合に、ドライバプログラム３６に従って実行するドライバ処理の内容を説明する。
【００２０】
Ｓ１０では、ＣＰＵ３２は、スキャナ５０から、ネットワークＩ／Ｆ１６を介して、漢信コード１１４を含む原稿１１２を表わすスキャンデータ１１０を取得する。スキャンデータ１１０は、複数個の画素によって構成され、各画素は、２５６階調（即ち「０〜２５５」）の画素値（具体的には、Ｒ値、Ｇ値、及び、Ｂ値）を示す。なお、ＣＰＵ３２は、スキャンデータ１１０の解像度が予め設定された所定値（例えば、３００ｄｐｉ（dot per inchの略））より大きい場合に、当該解像度を所定値になるように縮小してもよい。
【００２１】
Ｓ１５では、ＣＰＵ３２は、スキャンデータ１１０に対する輝度値変換処理を実行する。具体的には、ＣＰＵ３２は、スキャンデータ１１０を構成する複数個の画素のそれぞれについて、当該画素が示す画素値（即ちＲ値とＧ値とＢ値）をＳ１５内の数式に従って輝度値（即ちＹ値）に変換して、２５６階調の輝度値（即ち「０〜２５５」）を示す新たな画素を生成する。これにより、輝度値を示す複数個の新たな画素によって構成される輝度画像データが生成される。本実施例では、読取対象の原稿１１２は、白色（即ちＲ＝Ｇ＝Ｂ＝２５５）の背景を有する。従って、原稿１１２の背景を示す輝度値（即ちＹ値）は、通常、２５５になり、原稿の背景以外を示す輝度値は、通常、２５５未満の値になる。
【００２２】
Ｓ２０では、ＣＰＵ３２は、Ｓ１５で生成された輝度画像データに対する二値化処理を実行する。具体的には、ＣＰＵ３２は、輝度画像データを構成する複数個の画素のそれぞれについて、当該画素が示す輝度値を「１」又は「０」に変換して、「１」又は「０」を示す新たな画素を生成する。より具体的には、ＣＰＵ３２は、輝度値が予め決められている閾値（例えば２００）以下である場合には、「１」を示す新たな画素を生成し、輝度値が閾値より大きい場合には、「０」を示す新たな画素を生成する。即ち、原稿１１２の背景を表わす画素が「０」で表現され、原稿１１２の背景以外を表わす画素が「１」で表現される。これにより、「１」又は「０」を示す複数個の新たな画素によって構成される二値画像データが生成される。以下では、「１」を示す画素、「０」を示す画素のことを、それぞれ、「ＯＮ画素」、「ＯＦＦ画素」と呼ぶ。
【００２３】
Ｓ２５では、ＣＰＵ３２は、Ｓ２０で生成された二値画像データに対するマーク候補画像検出処理（図３参照）を実行する。マーク候補画像検出処理は、二値画像データによって表わされる二値画像の中から、漢信コード１１４のマーク１１５Ａ等を表わす画像の候補であるマーク候補画像を検出するための処理である。
【００２４】
Ｓ３０では、ＣＰＵ３２は、３マークデコード処理（図７参照）を実行する。３マークデコード処理は、Ｓ２５で検出された複数個のマーク候補画像のうちの３個のマーク候補画像に基づいて、漢信コード１１４を表わす漢信コード画像をデコードするための処理である。
【００２５】
Ｓ３５では、ＣＰＵ３２は、２マークデコード処理（図９参照）を実行する。２マークデコード処理は、Ｓ２５で検出された複数個のマーク候補画像のうちの２個のマーク候補画像に基づいて、漢信コード画像をデコードするための処理である。
【００２６】
Ｓ４０では、ＣＰＵ３２は、Ｓ３０及びＳ３５のデコード処理の結果を利用して所定処理を実行する。上述したように、所定処理は、例えば、メモリ３４内のフォルダにスキャンデータ１１０を格納する格納処理、スキャンデータ１１０をメモリ３４内の所定のアプリケーション（例えば医療用アプリケーション）に出力する出力処理、スキャンデータ１１０を外部に送信する送信処理等である。Ｓ４０が終了すると、図２の処理が終了する。
【００２７】
（マーク候補検出処理；図３）
図３を参照して、図２のＳ２５のマーク候補画像検出処理の内容を説明する。図３は、Ｓ２０で生成された二値画像データによって表わされる二値画像１６０の一部を示す。二値画像１６０では、実線の輪郭を有する領域、実線の輪郭を有しない領域が、それぞれ、ＯＮ画素、ＯＦＦ画素である。
【００２８】
二値画像１６０は、二値画像１６０の左右方向（即ちＸ方向）に沿ったｉ個（ｉは２以上の整数）の画素と、二値画像１６０の上下方向（即ちＹ方向）に沿ったｊ個（ｊは２以上の整数）の画素と、を含む（ｉ×ｊ）個の画素によって構成されている。また、（ｉ×ｊ）個の画素は、上下方向に沿って並ぶｊ本の画素ラインを含む。各画素ラインは、左右方向に沿って並ぶｉ個の画素によって構成されている。Ｓ１００では、ＣＰＵ３２は、処理対象の画素ライン（以下では「対象ライン」と呼ぶ）のＹ座標ｊを「０」に設定する。
【００２９】
Ｓ１０５では、ＣＰＵ３２は、対象ラインを利用して、対象ライン情報を生成する。対象ライン情報は、左から順に、連続するＯＮ画素の個数と、連続するＯＦＦ画素の個数と、が交互に並ぶ数字配列を示す。ＣＰＵ３２は、対象ラインを左側から右側に向かって走査して、連続するＯＮ画素の個数及び連続するＯＦＦ画素の個数を順次特定する。そして、ＣＰＵ３２は、特定済みの各個数を含む数字配列を示す対象ライン情報を決定する。なお、対象ラインを構成する最も左側の画素（即ち「ｉ＝０」に対応する画素）がＯＦＦ画素である場合には、ＣＰＵ３２は、対象ライン情報を構成する最も左の数字（即ち、連続するＯＮ画素の個数）として「０」を特定する。
【００３０】
例えば、二値画像１６０では、「ｊ＝０」に対応する対象ラインはＯＦＦ画素のみによって構成されるので、ＣＰＵ３２は、対象ライン情報として数字配列（０，ｉ）を生成する。また、例えば、「ｊ＝５」に対応する対象ラインは、左から順に、０個のＯＮ画素、５個のＯＦＦ画素、２個のＯＮ画素、２個のＯＦＦ画素、２個のＯＮ画素、２個のＯＦＦ画素、６個のＯＮ画素・・・を含む。このために、ＣＰＵ３２は、対象ライン情報として数字配列（０，５，２，２，２，２，６，・・・）を生成する。
【００３１】
Ｓ１０８では、ＣＰＵ３２は、Ｓ１０５で生成された対象ライン情報から１個の配列グループを選択する。配列グループは、対象ライン情報に含まれる複数個の数字のうちの連続する５個の数字を示すグループであって、ＯＮ画素に対応する数字を最も左側の数字として含むグループである。例えば、ＣＰＵ３２は、「ｊ＝５」に対応する対象ライン情報（０，５，２，２，２，２，６・・・）を生成する場合には、１回目のＳ１０８において、配列グループ「０，５，２，２，２」を選択する。そして、ＣＰＵ３２は、２回目のＳ１０８（即ち、後述のＳ１１８でＮＯを経たＳ１０８）において、配列グループ「２，２，２，２，６」を選択する。なお、ＣＰＵ３２は、５個未満の数字によって構成される対象ライン情報（例えば「ｊ＝０」に対応する対象ライン情報）を生成する場合には、Ｓ１０８〜Ｓ１１８をスキップして、Ｓ１２０に進む。
【００３２】
Ｓ１１０では、ＣＰＵ３２は、Ｓ１０８で選択された配列グループが対象画素グループであるのか否かを判断する。ここで、対象画素グループは、漢信コード１１４のマーク（例えば１１５Ａ）を表わす画素グループの候補であり、具体的には、連続する５個の数字の比が上記の所定の比（即ち、３：１：１：１：１又は１：１：１：１：３）に一致又は近似する配列グループである。例えば図１のマーク１１５Ａにおいて、矩形領域１３２を通過する左右方向に伸びる線分１５０を想定する。当該線分１５０上において、矩形領域１３２の長さと、第１間隙領域１４２の長さと、第１対応領域１３４の長さと、第２間隙領域１４４の長さと、第２対応領域１３６の長さと、の比は、上記の所定の比「３：１：１：１：１」である。従って、選択済みの配列グループに含まれる連続する５個の数字の比が上記の所定の比に一致又は近似する場合には、当該配列グループは、矩形領域１３２を通過する左右方向に伸びる線分１５０の候補、即ち、マークを表わす画素グループの候補（即ち対象画素グループ）であると言える。
【００３３】
具体的には、ＣＰＵ３２は、選択済みの配列グループに含まれる５個の数字の比と上記の所定の比との近似の程度を示す指標値であるマッチング指数を算出する。ＣＰＵ３２は、まず、選択済みの配列グループに含まれる５個の数字のうち、１以上の最小の数字が「１」になるように、当該５個の数字の比を算出する。例えば、「ｊ＝５」に対応する対象ライン情報内の１回目の配列グループ「０，５，２，２，２」について、ＣＰＵ３２は、比「０：２．５：１：１：１」を算出する。次いで、ＣＰＵ３２は、算出済みの比について、所定の比「３：１：１：１：１」に対する差分値と、所定の比「１：１：１：１：３」に対する差分値と、の双方を算出する。差分値は、所定の比を構成する５個の数字と算出済みの比を構成する５個の数字との差分の絶対値の和である。ＣＰＵ３２は、例えば、算出済みの比「０：２．５：１：１：１」と所定の比「３：１：１：１：１」との差分値として、「３（＝３−０）」と「１．５（＝２．５−１）」と「０（＝１−１）」と「０（＝１−１）」と「０（＝１−１）」との和である「４．５」を算出する。また、ＣＰＵ３２は、算出済みの比「０：２．５：１：１：１」と所定の比「１：１：１：１：３」との差分値として、「１（＝１−０）」と「１．５（＝２．５−１）」と「０（＝１−１）」と「０（＝１−１）」と「２（＝３−１）」との和である「４．５」を算出する。そして、ＣＰＵ３２は、算出済みの２個の差分値のうち、「０」に近い差分値をマッチング指数として特定する。上記の例では、２個の差分値が共に「４．５」であるので、ＣＰＵ３２は、「４．５」をマッチング指数として特定する。上記の説明から明らかなように、マッチング指数は、「０」に近い程、上記の所定の比に近似することを意味する。
【００３４】
また、例えば、「ｊ＝５」に対応する対象ライン情報内の２回目の配列グループ「２，２，２，２，６」について、ＣＰＵ３２は、まず、比「１：１：１：１：３」を算出する。次いで、算出済みの比「１：１：１：１：３」と所定の比「３：１：１：１：１」との差分値として、「２（＝３−１）」と「０（＝１−１）」と「０（＝１−１）」と「０（＝１−１）」と「２（＝３−１）」との和である「４」を算出する。また、ＣＰＵ３２は、算出済みの比「１：１：１：１：３」と所定の比「１：１：１：１：３」との差分値として、「０（＝１−１）」と「０（＝１−１）」と「０（＝１−１）」と「０（＝１−１）」と「０（＝３−３）」との和である「０」を算出する。この場合、ＣＰＵ３２は、マッチング指数として「０」を特定する。なお、本実施例では、上記のようにしてマッチング指数が特定されるが、変形例では、異なる手法を利用してマッチング指数が特定されてもよい。例えば、ＣＰＵ３２は、算出済みの比「０：２．５：１：１：１」と所定の比「３：１：１：１：１」とのマッチング指数として、各数字の割合の和（例えば（０／３）＋（２．５／１）＋（１／１）＋（１／１）＋（１／１））を算出してもよい。
【００３５】
ＣＰＵ３２は、選択済みの配列グループについて特定されるマッチング指数が所定範囲に含まれる場合に、当該配列グループが対象画素グループであると判断して（Ｓ１１０でＹＥＳ）、Ｓ１１５に進み、選択済みの配列グループについて特定されるマッチング指数が所定範囲に含まれない場合に、当該配列グループが対象画素グループでないと判断して（Ｓ１１０でＮＯ）、Ｓ１１５をスキップしてＳ１１８に進む。ここで、所定範囲は、例えば、０以上１以下の範囲である。例えば、ＣＰＵ３２は、上記の１回目の配列グループ「０，５，２，２，２」について、マッチング指数として「４．５」を特定するので、当該配列グループが対象画素グループでないと判断する。一方、ＣＰＵ３２は、上記の２回目の配列グループ「２，２，２，２，６」について、マッチング指数として「０」を特定するので、当該配列グループが対象画素グループであると判断する。
【００３６】
Ｓ１１５では、ＣＰＵ３２は、連結情報の生成又は更新を実行する。連結情報は、マーク１１５Ａ等に含まれる矩形領域１３２の候補である候補グループを特定するための情報である。具体的には、ＣＰＵ３２は、まず、Ｓ１１０でＹＥＳと判断された配列グループ（即ち対象画素グループ）を構成する５個の数字の中から、最大のＯＮ画素数を示す１個の数字を特定する。上述したように、例えば図１のマーク１１５Ａでは、線分１５０上の各領域１３２〜１３６，１４２，１４４の長さのうちの矩形領域１３２の長さが最大になる。従って、上記の線分１５０の候補である対象画素グループを構成する５個の数字のうちの最大のＯＮ画素数に対応する画素グループは、矩形領域１３２の候補である。ＣＰＵ３２は、最大のＯＮ画素数を示す１個の数字に対応するＯＮ画素グループを矩形領域１３２の候補である候補グループとして決定し、当該候補グループを特定するための連結情報を生成又は更新する。例えば、ＣＰＵ３２は、対象画素グループ「２，２，２，２，６」について、最大のＯＮ画素数「６」に対応するＯＮ画素グループ１６２（即ち連続する６個のＯＮ画素）である候補グループを特定するための連結情報を生成又は更新する。
【００３７】
連結情報は、複数個のパラメータＰ１〜Ｐ４を含む。Ｐ１は、今回の候補グループの中心座標である。Ｐ２は、連結済みの候補グループの個数（以下では「Ｙ方向の連結数」と呼ぶ）である。Ｐ３は、１個以上の候補グループのうちの最上の候補グループの中心座標である。Ｐ４は、今回の候補グループの画素数である。ＣＰＵ３２は、Ｓ１１５において、今回の対象ラインから特定された候補グループと、過去の対象ラインから特定されたいずれかの候補グループと、を連結不可能である場合には、今回の候補グループを特定するための新たな連結情報を生成する。一方、ＣＰＵ３２は、連結可能である場合には、過去の候補グループを特定するための連結情報を更新して、今回の候補グループをさらに特定するための更新済みの連結情報を生成する。ＣＰＵ３２は、新たな連結情報を生成すべきか、生成済みの連結情報を更新すべきか、を以下のようにして判断する。ＣＰＵ３２は、現在の対象ラインのＹ座標ｊと、対象ライン情報内の数字配列のうちの今回の候補グループの数字（例えばｊ＝５の２回目の配列グループの「６」）と、を参照すれば、今回の候補グループの位置と画素数とを知ることができる。また、ＣＰＵ３２は、過去に生成された連結情報に含まれるパラメータＰ１，Ｐ４を参照すれば、当該連結情報によって特定される最下の候補グループの位置と画素数とを知ることができる。そして、ＣＰＵ３２は、今回の候補グループが、過去に生成された各連結情報によって特定されるいずれの最下の候補グループにも隣接しない場合には、連結不可能であると判断する。この場合、ＣＰＵ３２は、今回の候補グループを特定するための新たな連結情報を生成する。一方、ＣＰＵ３２は、今回の候補グループが、過去に生成されたある連結情報によって特定される最下の候補グループに隣接する場合には、連結可能であると判断する。この場合、ＣＰＵ３２は、当該ある候補グループを特定するための連結情報を更新して、今回の候補グループをさらに特定するための更新済みの連結情報を生成する。
【００３８】
例えば、「ｊ＝５」に対応する対象ラインから今回の候補グループ（即ち６個のＯＮ画素）１６２が特定される状況を想定する。この場合、「ｊ＝４」に対応する対象ラインにおいて、今回の候補グループ１６２に隣接する候補グループが存在しない。このために、Ｓ１１５では、新たな連結情報（以下では「特定の連結情報」と呼ぶ）が生成される。特定の連結情報は、Ｐ１＝（１６，５）、Ｐ２＝１、Ｐ３＝（１６，５）、Ｐ４＝６を含む。その後、「ｊ＝６」に対応する対象ラインから今回の候補グループ１６４が特定される場合には、今回の候補グループ１６４が、特定の連結情報によって特定される最下の候補グループ１６２に隣接する。従って、Ｓ１１５では、今回の候補グループ１６４に従って特定の連結情報が更新される。具体的には、Ｐ１が（１６，５）から（１６，６）に更新され、Ｐ２が「１」から「２」に更新される。同様に、「ｊ＝７」に対応する対象ラインから候補グループ１６６が特定される場合には、今回の候補グループ１６６が、特定の連結情報によって特定される最下の候補グループ１６４に隣接する。従って、Ｓ１１５では、今回の候補グループ１６６に従って特定の連結情報が更新される。具体的には、Ｐ１が（１６，６）から（１７，７）に更新され、Ｐ２が「２」から「３」に更新される。
【００３９】
Ｓ１１８では、ＣＰＵ３２は、対象ライン情報に含まれる全ての配列グループをＳ１０８で選択したのか否かを判断する。ＣＰＵ３２は、全ての配列グループを選択していないと判断する場合（Ｓ１１８でＮＯ）に、Ｓ１０８に戻り、全ての配列グループを選択したと判断する場合（Ｓ１１８でＹＥＳ）に、Ｓ１２０に進む。
【００４０】
Ｓ１２０では、ＣＰＵ３２は、連結情報解析処理（図４参照）を実行する。連結情報解析処理は、各連結情報を解析して、マーク１１５Ａ等の候補であるマーク候補画像を特定するためのマーク候補画像情報を記憶する処理である。
【００４１】
Ｓ１２５では、ＣＰＵ３２は、二値画像１６０を構成する全ての画素ラインに対する処理が終了したのか否かを判断する。ＣＰＵ３２は、全ての画素ラインに対する処理が終了していない場合（Ｓ１２５でＮＯ）に、Ｓ１３０において、処理対象の画素ラインのＹ座標ｊをインクリメントして、新たな対象ラインに対応するＳ１０５以降の各処理を再び実行する。これにより、ＣＰＵ３２は、二値画像１６０の上側から下側に向かってＳ１０５〜Ｓ１２０の処理を順次繰り返す。一方、ＣＰＵ３２は、全ての画素ラインに対する処理が終了した場合（Ｓ１２５でＹＥＳ）に、図３の処理を終了する。
【００４２】
（連結情報解析処理；図４〜図６）
続いて、図４〜図６を参照して、図３のＳ１２０の連結情報解析処理の内容を説明する。Ｓ１５０では、ＣＰＵ３２は、生成済みの１個以上の連結情報の中から１個の連結情報（以下では「対象連結情報」と呼ぶ）を選択する。なお、ＣＰＵ３２は、メモリ３４内に１個の連結情報も存在しない状況では、Ｓ１５０〜Ｓ１８５をスキップする。
【００４３】
Ｓ１５５では、ＣＰＵ３２は、対象連結情報の連結数Ｐ２が閾値以上であるのか否かを判断する。本実施例では、当該閾値が「３」に設定されている。ＣＰＵ３２は、連結数Ｐ２が閾値以上であると判断する場合（Ｓ１５５でＹＥＳ）に、Ｓ１６０に進み、連結数Ｐ２が閾値未満であると判断する場合（Ｓ１５５でＮＯ）に、Ｓ１８５に進む。例えば、図３に示される「ｊ＝７」の連結情報が対象連結情報である場合には、ＣＰＵ３２は、連結数Ｐ２（即ち「３」）が閾値以上であると判断して、Ｓ１６０に進む。
【００４４】
Ｓ１６０では、ＣＰＵ３２は、マーク１１５Ａ等の矩形領域１３２を表わす画像の候補である矩形候補画像の仮の中心線を特定する。具体的には、ＣＰＵ３２は、まず、対象連結情報に含まれるパラメータＰ３に基づいて、対象連結情報によって特定される最上の候補グループの位置を知ることができる。次いで、ＣＰＵ３２は、二値画像１６０において、当該最上の候補グループの上側に隣接するＯＮ画素グループが存在するのか否かを確認する。そして、ＣＰＵ３２は、ＯＮ画素グループが存在することが確認できた場合には、当該ＯＮ画素グループの上側に隣接するＯＮ画素グループがさらに存在するのか否かを確認することを繰り返す。例えば、図５（Ａ）では、対象連結情報は、実線で示される３個の候補グループ２００を特定するための情報である。ＣＰＵ３２は、パラメータＰ３（１６，５）に基づいて、３個の候補グループ２００のうちの最上の候補グループの位置を知ることができる。そして、ＣＰＵ３２は、二値画像１６０において、当該最上の候補グループの上側に隣接するＯＮ画素グループ２２０が存在することを確認する。ＣＰＵ３２は、ＯＮ画素グループ２２０の上側に隣接するＯＮ画素グループがさらに存在しないことを確認する。
【００４５】
次いで、ＣＰＵ３２は、対象連結情報に含まれるパラメータＰ１に基づいて、対象連結情報によって特定される最下の候補グループの位置を知ることができる。次いで、ＣＰＵ３２は、二値画像１６０において、当該最下の候補グループの下側に隣接するＯＮ画素グループが存在するのか否かを確認する。そして、ＣＰＵ３２は、ＯＮ画素グループが存在することが確認できた場合には、当該ＯＮ画素グループの下側に隣接するＯＮ画素グループがさらに存在するのか否かを確認することを繰り返す。図５（Ａ）の例では、ＣＰＵ３２は、パラメータＰ１（１７，７）に基づいて、３個の候補グループ２００のうちの最下の候補グループの位置を知ることができる。そして、ＣＰＵ３２は、二値画像１６０において、当該最下の候補グループの下側に隣接するＯＮ画素グループ２３０が存在することを確認し、ＯＮ画素グループ２３０の下側に隣接するＯＮ画素グループ２４０がさらに存在することを確認する。ＣＰＵ３２は、ＯＮ画素グループ２４０の下側に隣接するＯＮ画素グループがさらに存在しないことを確認する。
【００４６】
対象連結情報によって特定される３個の候補グループ２００と、確認済みの３個のＯＮグループ２２０，２３０，２４０と、の組み合わせは、マーク１１５Ａ等の矩形領域１３２を表わす矩形候補画像である。次いで、ＣＰＵ３２は、３個の候補グループ２００のそれぞれの中点Ｐ１，Ｐ３，Ｐ５と、３個のＯＮグループ２２０，２３０，２４０のそれぞれの中点Ｐ６，Ｐ７，Ｐ８と、に対して最小二乗法を適用することによって、仮の中心線ＳＬ１を特定する。
【００４７】
なお、変形例では、矩形候補画像の仮の中心線は、以下のように特定されてもよい。即ち、ＣＰＵ３２は、３個の候補グループ２００のそれぞれの中点Ｐ１，Ｐ３，Ｐ５と、候補グループ２００の上側に存在するＯＮ画素グループ２２０の中点Ｐ６と、に対して最小二乗法を適用して、仮の中心線を特定してもよい。この場合、ＣＰＵ３２は、候補グループ２００の下側にＯＮ画素グループ２３０，２４０が存在することを確認せずに済む。また、別の変形例では、ＣＰＵ３２は、３個の候補グループ２００のそれぞれの中点Ｐ１，Ｐ３，Ｐ５に対して最小二乗法を適用して、仮の中心線を特定してもよい。この場合、ＣＰＵ３２は、候補グループ２００の上側及び下側にＯＮ画素グループ２２０〜２４０が存在することを確認せずに済む。
【００４８】
Ｓ１６５では、ＣＰＵ３２は、矩形候補画像の１辺の長さ及び中心座標を特定する。具体的には、ＣＰＵ３２は、まず、Ｓ１６０で特定された仮の中心線と矩形候補画像との２つの交点を特定する。そして、ＣＰＵ３２は、２つの交点の長さ（即ち画素数）を矩形候補画像の一辺の長さとして特定し、２つの交点の中点を矩形候補画像の中心座標として特定する。例えば、Ｓ１６０で図５（Ａ）の直線ＳＬ１が特定される場合には、ＣＰＵ３２は、直線ＳＬ１と矩形候補画像の上辺との交点である上端ＵＥと、直線ＳＬ１と矩形候補画像の下辺との交点である下端ＬＥと、を特定する。そして、ＣＰＵ３２は、上端ＵＥと下端ＬＥとの間の長さＬ１を矩形候補画像の１辺の長さとして特定し、上端ＵＥと下端ＬＥとを結ぶ線分の中点Ｃ１を矩形候補画像の中心座標として特定する。
【００４９】
Ｓ１７０では、ＣＰＵ３２は、矩形候補画像に重なる長さが最短の直線を特定する。具体的には、ＣＰＵ３２は、Ｓ１６５で特定された中心座標から上下方向に伸びる直線を０度の探索線として決定し、当該探索線から１度刻みで９０度まで各探索線を決定する。次いで、ＣＰＵ３２は、各探索線について、矩形領域画像に重なる長さ（即ち画素数）を算出する。そして、ＣＰＵ３２は、算出済みの長さが最長である探索線の角度を特定し、特定済みの角度から４５度が減算された角度を有する直線を、矩形候補画像に重なる長さが最短の直線として特定する。例えば、図５（Ｂ）の例では、ＣＰＵ３２は、０度から９０度の間の各探索線の中から、矩形候補画像２５０に重なる長さが最長である探索線２６０を特定する。探索線２６０は、矩形候補画像２５０の対角線に一致する。そして、ＣＰＵ３２は、探索線２６０の角度である４０度から４５度が減算された３５５度を有する直線２７０を、矩形候補画像２５０に重なる長さが最短の直線として特定する。なお、変形例では、ＣＰＵ３２は、矩形候補画像２５０に重なる長さが最短の直線２７０を特定する代わりに、矩形候補画像２５０に重なる長さが最長の直線２６０を特定してもよい。
【００５０】
Ｓ１７５では、ＣＰＵ３２は、マーク１１５Ａ等を表わす画像の候補であるマーク候補画像の角度を特定する。具体的には、ＣＰＵ３２は、まず、Ｓ１６５で特定された中心座標を通過する４本の直線を特定する。４本の直線は、Ｓ１７０で特定された直線と、当該直線を４５度、９０度、又は、１３５度回転させた３本の直線と、を含む。次いで、ＣＰＵ３２は、４本の直線のそれぞれについて当該直線上の２本の線分を特定することによって、８本の線分を特定する。次いで、ＣＰＵ３２は、８本の線分のそれぞれについて、当該線分上における各ＯＮ画素グループの長さ（即ち連続するＯＮ画素の個数）と、当該線分上における各ＯＦＦ画素グループの長さ（即ち連続するＯＦＦ画素の個数）と、を含む複数個の長さの比と、上記の所定の比（例えば３：１：１：１：１）と、の近似の程度を示す指標値であるマッチング指数を算出する。次いで、ＣＰＵ３２は、８本の線分のうちの１本の線分を処理線分として特定し、時計回り方向において処理線分に隣り合う線分と、反時計回り方向において処理線分に隣り合う線分と、を特定する。ＣＰＵ３２は、特定済みの３本の線分について算出された３個のマッチング指数の和を算出する。同様に、ＣＰＵ３２は、他の各線分を処理線分として特定し、マッチング指数の和を算出する。そして、ＣＰＵ３２は、マッチング指数の和が最も小さい処理線分の角度をマーク候補画像の角度として特定する。
【００５１】
例えば、図６（Ａ）に示されるように、まず、Ｓ１６５で特定された中心座標Ｃ１を通過する４本の直線、即ち、Ｓ１７０で特定された直線２７０と、直線２７０を４５度、９０度、又は、１３５度回転させた３本の直線２８０，２９０，３００と、が特定される。次いで、図６（Ｂ）に示されるように、直線２７０において、中心座標Ｃ１から下側に第１所定距離進んだ位置と、中心座標Ｃ１から上側に第２所定距離進んだ位置と、を結ぶ線分３１０が特定される。ここで、第１所定距離及び第２所定距離は、８本の線分のうちの３本の線分のそれぞれが、３個の非背景領域１３２，１３４，１３６を表わす３個の非背景画像と、２個の背景領域１４２，１４４を表わす２個の背景画像と、の全てに重なるように、予め決められている。例えば、第１所定距離は、Ｓ１６５で特定される矩形候補画像の１辺の長さであり、第２所定距離は、当該１辺の長さの３倍の距離である。また、図６（Ｃ）に示されるように、直線２７０において、中心座標Ｃ１から上側に第１所定距離進んだ位置と、中心座標Ｃ１から下側に第２所定距離進んだ位置と、を結ぶ線分３５０が特定される。これにより、１本の直線２７０上の２本の線分３１０，３５０が特定される。ここで、線分３１０の角度、線分３５０の角度は、それぞれ、３５５度、１７５度である。一般的に言うと、１本の直線上の２本の線分は以下のようにして特定される。即ち、直線上において、中心座標から第１側に第１所定距離進んだ位置と、中心座標から第２側に第２所定距離進んだ位置と、を結ぶ第１の線分と、当該直線上において、中心座標から第２側に第１所定距離進んだ位置と、中心座標から第１側に第２所定距離進んだ位置と、を結ぶ第２の線分と、が特定される。
【００５２】
同様に、図６（Ａ）に示される他の３本の直線２８０，２９０，３００のそれぞれについて、当該直線上の２本の線分が特定され、この結果、図６（Ｂ）及び（Ｃ）に示されるように、６本の線分３２０〜３４０，３６０〜３８０が特定される。合計では、８本の線分３１０〜３８０が特定される。
【００５３】
８本の線分３１０〜３８０のそれぞれについて、図３のＳ１１０と同様の手法で、マッチング指数が算出される。例えば、図６（Ｂ）の線分３１０について、まず、線分３１０上における非背景画像（即ち連続するＯＮ画素の個数）の長さ３１１，３１３，３１５が特定され、さらに、線分３１０上における背景画像（即ち連続するＯＦＦ画素の個数）の長さ３１２，３１４が特定される。そして、５個の長さ３１１〜３１５の比と上記の所定の比とのマッチング指数が算出される。同様に、他の線分３２０〜３７０のそれぞれについて、マッチング指数が算出される。
【００５４】
次いで、例えば、処理線分として線分３１０が特定される場合には、処理線分３１０に隣り合う２本の線分３２０，３８０が特定され、特定済みの３本の線分３１０，３２０，３８０のそれぞれのマッチング指数の和が算出される。同様に、他の線分３２０〜３８０のそれぞれが処理線分として順次特定され、マッチング指数の和が算出される。図６の例では、処理線分３８０である場合には、処理線分３８０に隣り合う２本の線分３１０，３７０が特定され、これらの３本の線分３１０，３７０，３８０のそれぞれが、マークを表わす３個の非背景画像及び２個の背景画像の全てを通過する。従って、３本の線分３１０，３７０，３８０のそれぞれのマッチング指数の和が最小になり、処理線分３８０の角度、即ち、直線２７０の角度である３５５度から４５度が減算された３１０度が、マーク候補画像の角度として特定される。
【００５５】
Ｓ１８０では、ＣＰＵ３２は、マーク候補画像情報をメモリ３４に記憶させる。マーク候補画像情報は、Ｓ１６５で特定された矩形候補画像の１辺の長さ及び中心座標と、Ｓ１７５で特定されたマーク候補画像の角度と、を含む。
【００５６】
Ｓ１８５では、ＣＰＵ３２は、Ｓ１５０でメモリ３４内の全ての連結情報を選択したのか否かを判断する。ＣＰＵ３２は、全ての連結情報を選択していない場合（Ｓ１８５でＮＯ）に、Ｓ１５０に戻り、Ｓ１５５以降の処理を再び実行する。これにより、ＣＰＵ３２は、複数個のマーク候補画像情報をメモリ３４に記憶させることができる。一方、ＣＰＵ３２は、全ての連結情報を選択した場合（Ｓ１８５でＹＥＳ）に、図４の処理を終了する。
【００５７】
（３マークデコード処理；図７及び図８）
続いて、図７及び図８を参照して、図２のＳ３０の３マークデコード処理の内容を説明する。Ｓ２００では、ＣＰＵ３２は、３個のマーク候補画像を選択可能であるのか否かを判断する。具体的には、ＣＰＵ３２は、メモリ３４内に３個以上のマーク候補画像情報（図４のＳ１８０）が記憶されているのか否かを判断する。ＣＰＵ３２は、メモリ３４内に３個以上のマーク候補画像情報が記憶されていると判断する場合（Ｓ２００でＹＥＳ）に、３個のマーク候補画像情報を選択し、Ｓ２０５に進む。以下では、ここで選択されたマーク候補画像情報のことを「対象マーク候補画像情報」と呼ぶ。一方、ＣＰＵ３２は、メモリ３４内に３個以上のマーク候補画像情報が記憶されていないと判断する場合（Ｓ２００でＮＯ）に、図７の処理を終了する。
【００５８】
Ｓ２０５では、ＣＰＵ３２は、３個の対象マーク候補画像情報に含まれる３個の中心座標が直角二等辺三角形の３個の頂点を構成するのか否かを判断する。具体的には、ＣＰＵ３２は、３個の中心座標を利用して、第１の中心座標と第２の中心座標との間の距離を算出し、第１の中心座標と第３の中心座標との間の距離を算出し、第２の中心座標と第３の中心座標との間の距離を算出する。そして、ＣＰＵ３２は、算出済みの３個の距離の比が「１：１：ルート２」に一致する場合には、３個の中心座標が直角二等辺三角形の３個の頂点を構成すると判断して（Ｓ２０５でＹＥＳ）、Ｓ２１０に進む。一方、ＣＰＵ３２は、算出済みの３個の距離の比が「１：１：ルート２」に一致しない場合には、３個の中心座標が直角二等辺三角形の３個の頂点を構成しないと判断して（Ｓ２０５でＮＯ）、Ｓ２５０に進む。
【００５９】
上述したように、漢信コード１１４が正方形を有し、かつ、３個の第１種のマーク１１５Ａ〜１１５Ｃが同じ形状を有し、かつ、３個の第１種のマーク１１５Ａ〜１１５Ｃのそれぞれでは、矩形領域１３２が第１及び第２対向領域１３４，１３６よりも漢信コード１１４の中心に近い。このために、図８に示されるように、３個の第１種のマーク１１５Ａ〜１１５Ｃ内の３個の矩形領域１３２の３個の中心点Ｃ１〜Ｃ３は、直角二等辺三角形の３個の頂点を構成する。従って、３個の対象マーク候補画像情報についてＳ２０５でＹＥＳと判断されることは、３個の対象マーク候補画像情報が３個の第１種のマーク１１５Ａ〜１１５Ｃに対応することを示す１つの条件を満たすことを意味する。
【００６０】
Ｓ２１０では、ＣＰＵ３２は、３個の対象マーク候補画像情報が特定の向き関係を有するのか否かを判断する。具体的には、ＣＰＵ３２は、３個の対象マーク候補画像情報が、第１の角度と、第１の角度との差分が９０度に一致又は近似する第２の角度と、第２の角度との差分が９０度に一致又は近似する第３の角度と、を含むのか否かを判断する。ここでの「近似」は、本実施例では、９０度±５度の範囲を意味するが、変形例では、他の範囲（例えば±１度の範囲、±１０度の範囲等）であってもよい。ＣＰＵ３２は、３個の対象マーク候補画像情報に含まれる３個の角度が上記の第１〜第３の角度の条件を満たす場合には、特定の向き関係を有すると判断して（Ｓ２１０でＹＥＳ）、Ｓ２１５に進み、当該３個の角度が上記の第１〜第３の角度の条件を満たさない場合には、特定の向き関係を有しないと判断して（Ｓ２１０でＮＯ）、Ｓ２５０に進む。
【００６１】
上述したように、３個の第１種のマーク１１５Ａ〜１１５Ｃが同じ形状を有し、かつ、３個の第１種のマーク１１５Ａ〜１１５Ｃのそれぞれでは、矩形領域１３２が第１及び第２対向領域１３４，１３６よりも漢信コード１１４の中心に近い。このために、例えば、図８に示されるように、３個の第１種のマーク１１５Ａ〜１１５Ｃのそれぞれの角度は、３１０度、４０度、及び、１３０度のように、９０度間隔になる。従って、３個の対象マーク候補画像情報についてＳ２１０でＹＥＳと判断されることは、３個の対象マーク候補画像情報が３個の第１種のマーク１１５Ａ〜１１５Ｃに対応することを示す１つの条件を満たすことを意味する。
【００６２】
Ｓ２１５では、ＣＰＵ３２は、３個の対象マーク候補画像情報に含まれる３個の辺の長さが等しいのか否かを判断する。ＣＰＵ３２は、３個の対象マーク候補画像情報に含まれる３個の辺の長さが等しい場合に、Ｓ２１５でＹＥＳと判断してＳ２２０に進み、当該３個の辺の長さが等しくない場合に、Ｓ２１５でＮＯと判断してＳ２５０に進む。
【００６３】
上述したように、３個の第１種のマーク１１５Ａ〜１１５Ｃは同じ正方形である。従って、３個の対象マーク候補画像情報についてＳ２１５でＹＥＳと判断されることは、３個の対象マーク候補画像情報が３個の第１種のマーク１１５Ａ〜１１５Ｃに対応することを示す１つの条件を満たすことを意味する。そして、３個の対象マーク候補画像情報について上記のＳ２０５〜Ｓ２１５の全てでＹＥＳと判断されることは、３個の対象マーク候補画像情報が３個の第１種のマーク１１５Ａ〜１１５Ｃに対応することを示す全ての条件を満たすことを意味する。
【００６４】
Ｓ２２０では、ＣＰＵ３２は、３個の対象マーク候補画像情報に含まれる１辺の長さと３個の中心座標とを利用して、予想点を特定する。具体的には、メモリ３４は、対象マーク候補画像情報に含まれる１辺の長さに基づいて、第２種のマーク１１６内の矩形領域１３２の中心点と、第２種のマーク１１６の対角に位置する第１種のマーク１１５Ｂ内の矩形領域１３２の中心点と、の間の距離を算出するための比率を記憶している。ＣＰＵ３２は、対象マーク候補画像情報に含まれる１辺の長さと、上記の比率と、を利用して、上記の距離を算出する。次いで、ＣＰＵ３２は、３個の中心座標を利用して、Ｓ２０５で特定された直角二等辺三角形の頂角を構成する頂点を通過し、かつ、当該直角二等辺三角形の斜辺に直交する直線を特定する。そして、ＣＰＵ３２は、特定済みの直線上において、直角二等辺三角形の頂角を構成する頂点から算出済みの距離だけ進んだ位置を予想点として特定する。
【００６５】
図８の例では、ＣＰＵ３２は、対象マーク候補画像情報に含まれる辺の長さＬ１と、メモリ３４内の上記の比率と、を利用して、距離Ｌ２を算出する。次いで、ＣＰＵ３２は、３個の中心座標Ｃ１〜Ｃ３を利用して、直角二等辺三角形の頂角を構成する頂点Ｃ２を通過し、かつ、当該直角二等辺三角形の斜辺に直交する直線ＳＬ２を特定する。そして、ＣＰＵ３２は、特定済みの直線ＳＬ２上において、直角二等辺三角形の頂角を構成する頂点Ｃ２から算出済みの距離Ｌ２だけ進んだ位置Ｃ４を予想点として特定する。
【００６６】
Ｓ２２５では、ＣＰＵ３２は、複数個のマーク候補画像情報の中に、Ｓ２２０で特定された予想点の座標に一致又は近似する中心座標を含む特定のマーク候補画像情報が存在するのか否かを判断する。ここでの「近似」は、本実施例では、５画素以内の距離を意味するが、変形例では、例えば他の閾値（例えば２画素以内、１０画素以内等）が利用されてもよい。ＣＰＵ３２は、特定のマーク候補画像情報が存在する場合に、Ｓ２２５でＹＥＳと判断してＳ２３０に進み、特定のマーク候補画像情報が存在しない場合に、Ｓ２２５でＮＯと判断してＳ２５０に進む。Ｓ２２５でＹＥＳと判断されることは、特定の対象マーク候補画像情報が第２種のマーク１１６に対応することを示す１つの条件を満たすことを意味する。
【００６７】
Ｓ２３０では、ＣＰＵ３２は、上記の特定のマーク候補画像情報が特定の向き関係を有するのか否かを判断する。具体的には、ＣＰＵ３２は、特定のマーク候補画像情報に含まれる角度と、３個の対象マーク候補画像情報のうち、対角のマーク候補画像に対応する対角のマーク候補画像情報に含まれる角度と、が一致又は近似するのか否かを判断する。対角のマーク候補画像は、特定のマーク候補画像情報に対応する特定のマーク候補画像の対角に位置するマーク候補画像である。ここでの「近似」は、本実施例では、±５度の範囲を意味するが、変形例では、他の範囲（例えば±１度の範囲、±１０度の範囲等）であってもよい。ＣＰＵ３２は、２つの角度が一致又は近似すると判断する場合（Ｓ２３０でＹＥＳ）に、Ｓ２３５に進み、２つの角度が一致又は近似しないと判断する場合（Ｓ２３０でＮＯ）に、Ｓ２５０に進む。
【００６８】
図８に示されるように、第２種のマーク１１６の角度（例えば４０度）と、３個の第１種のマーク１１５Ａ〜１１５Ｃのうち、第２種のマーク１１６の対角に位置する第１種のマーク１１５Ｂの角度（例えば４０度）と、は一致する。従って、Ｓ２３０でＹＥＳと判断されることは、特定の対象マーク候補画像情報が第２種のマーク１１６に対応することを示す１つの条件を満たすことを意味する。そして、上記のＳ２２５及びＳ２３０でＹＥＳと判断されることは、特定の対象マーク候補画像情報が第２種のマーク１１６に対応することを示す全ての条件を満たすことを意味する。即ち、上記のＳ２０５〜Ｓ２１５及びＳ２２５〜Ｓ２３０の全てでＹＥＳと判断されることは、３個の対象マーク候補画像情報と特定のマーク候補画像情報とが４個のマーク１１５Ａ〜１１５Ｃ，１１６に対応することを示す全ての条件を満たすことを意味する。即ち、これにより、３個の対象マーク候補画像情報によって特定される３個の対象マーク候補画像（即ちマーク１１５Ａ〜１１５Ｃを表わす３個の画像）と、特定の対象マーク候補画像情報によって特定される特定のマーク候補画像（即ちマーク１１６を表わす１個の画像）と、が特定される。
【００６９】
Ｓ２３５では、ＣＰＵ３２は、二値画像１６０の中から、３個の対象マーク候補画像と特定のマーク候補画像とを含む漢信コード画像の位置を特定する。メモリ３４は、第１種のマーク１１５Ａ等の矩形領域１３２の中心点の座標と、矩形領域１３２の１辺の長さと、当該第１種のマークの角度と、に基づいて、当該第１種のマークの最も外側の頂点の座標を算出するための第１の数式を記憶している。また、メモリ３４は、第２種のマーク１１６の矩形領域１３２の中心点の座標と、矩形領域１３２の１辺の長さと、当該第２種のマークの角度と、に基づいて、当該第２種のマークの最も外側の頂点の座標を算出するための第２の数式を記憶している。ＣＰＵ３２は、３個の対象マーク候補画像情報のそれぞれについて、当該対象マーク候補画像情報に含まれる中心座標、１辺の長さ、及び、角度を上記の第１の数式に代入することによって、各第１種のマークの最も外側の頂点の座標を算出する。また、ＣＰＵ３２は、特定のマーク候補画像情報に含まれる中心座標、１辺の長さ、及び、角度を上記の第２の数式に代入することによって、第２種のマークの最も外側の頂点の座標を算出する。そして、ＣＰＵ３２は、算出済みの４個の座標を漢信コード画像の位置として特定する。
【００７０】
図８の例では、ＣＰＵ３２は、１個の対象マーク候補画像情報に含まれる中心座標Ｃ１、矩形領域の１辺の長さ、及び、角度３１０度に基づいて、第１種のマーク１１５Ａの最も外側の頂点の座標Ｃ１１を特定する。同様に、ＣＰＵ３２は、他の２個の第１種のマーク１１５Ｂ，１１５Ｃのそれぞれについて、当該第１種のマークの最も外側の頂点の座標Ｃ１２，Ｃ１３を特定する。また、ＣＰＵ３２は、特定のマーク候補画像情報に含まれる中心座標Ｃ４、矩形領域の１辺の長さ、及び、角度４０度に基づいて、第２種のマーク１１６の最も外側の頂点の座標Ｃ１４を特定する。
【００７１】
上述したように、ＣＰＵ３２は、３個の対象マーク候補画像を利用して特定のマーク候補画像を特定し（Ｓ２２０〜Ｓ２３０）、３個の対象マーク候補画像と特定のマーク候補画像とを含む漢信コード画像の位置を特定する（Ｓ２３５）。このために、ＣＰＵ３２は、特定のマーク候補画像を特定しない場合と比較して、漢信コード画像の位置を精度良く特定することができる。
【００７２】
Ｓ２４０では、ＣＰＵ３２は、特定済みの漢信コード画像の位置に基づいて二値画像１６０から漢信コード画像を切り出して、当該漢信コード画像に対するデコード処理を実行する。デコード処理は、漢信コード画像のうち、情報領域１１７（図１参照）を表わす情報領域画像から文字、記号等の組合せを特定するための処理である。
【００７３】
Ｓ２４５では、ＣＰＵ３２は、３個の対象マーク候補画像情報と特定のマーク候補画像情報とをメモリ３４内から削除する。これにより、同じ漢信コード画像の位置が再度特定されることを防ぐことができる。
【００７４】
Ｓ２５０では、ＣＰＵ３２は、マーク候補画像情報の全ての組み合わせがＳ２００で選択されたのか否かを判断する。ＣＰＵ３２は全ての組み合わせが選択されたと判断する場合（Ｓ２５０でＹＥＳ）に、図７の処理を終了し、全ての組み合わせが選択されてないと判断する場合（Ｓ２５０でＮＯ）に、Ｓ２００に戻り、３個のマーク候補画像情報の異なる組み合わせを選択する。
【００７５】
（２マークデコード処理；図９及び図１０）
続いて、図９及び図１０を参照して、図２のＳ３５の２マークデコード処理について説明する。図１０（Ａ）は、漢信コードが正立状態から時計回り方向に４５度回転した状態を示す。このような漢信コードを表わす漢信コード画像がスキャンデータ１１０に含まれる場合には、図２のＳ２５において、２個のマーク４００Ｂ，４１０を表わす２個のマーク候補画像を検出することができるが、残りの２個のマーク４００Ａ，４００Ｃを表わす２個のマーク候補画像を検出することができない。いずれの対象ラインを利用して図３の処理を実行しても、２個のマーク４００Ａ，４００Ｃを表わす２個のマーク候補画像について、Ｓ１１０において、上記の所定の比（即ち「１：１：１：１：３」）に一致又は近似する各画素グループを含む対象画素グループが特定されないからである。上述したように、図２のＳ３０では、３個の第１種のマーク４００Ａ〜４００Ｃに対応する３個のマーク候補画像情報がなければ、漢信コード画像の位置を特定することができない。また、図１０（Ｂ）〜（Ｄ）に示すように、漢信コードが正立状態から時計回り方向に１３５度、２２５度、又は、３１５度傾いている場合も、２個のマーク（即ち、マーク５００Ａ及び５００Ｂ、マーク５００Ｃ及び５００Ｄ、マーク５００Ｅ及び５００Ｆ）を表わすマーク候補画像しか検出されず、漢信コード画像の位置を特定することができない。従って、図９の２マークデコード処理によって漢信コード画像をデコードする必要がある。
【００７６】
図９のＳ３００では、ＣＰＵ３２は、２個以上のマーク候補画像情報がメモリ３４内に記憶されているのか否かを判断する。なお、ここでの判断の対象のマーク候補情報は、図７のＳ２４５で削除されたマーク候補画像情報を含まない。ＣＰＵ３２は、メモリ３４内に２個以上のマーク候補画像情報が記憶されていると判断する場合（Ｓ３００でＹＥＳ）に、２個のマーク候補画像情報を選択し、Ｓ３０５に進む。以下では、ここで選択されたマーク候補画像情報のことを「対象マーク候補画像情報」と呼ぶ。一方、ＣＰＵ３２は、メモリ３４内に２個以上のマーク候補画像情報が記憶されていないと判断する場合（Ｓ３００でＮＯ）に、図９の処理を終了する。
【００７７】
Ｓ３０５では、ＣＰＵ３２は、２個の対象マーク候補画像情報に含まれる２個の中心座標を結ぶ直線の傾きが０度に一致又は近似するのか否かを判断する。即ち、ＣＰＵ３２は、当該直線が伸びる方向が左右方向に一致又は近似するのか否かを判断する。ここでの「近似」は、本実施例では、０度の±５度の範囲を意味するが、変形例では、他の範囲（例えば±１度の範囲、±１０度の範囲等）であってもよい。ＣＰＵ３２は、直線の傾きが０度に一致又は近似すると判断する場合（Ｓ３０５でＹＥＳ）に、Ｓ３１０に進み、直線の傾きが０度に一致又は近似しないと判断する場合（Ｓ３０５でＮＯ）に、Ｓ３４０に進む。
【００７８】
図１０（Ａ）に示されるように、２個のマーク４００Ｂ，４１０の２個の矩形領域の２個の中心座標Ｃ５，Ｃ６を結ぶ直線の傾きは０度であり、当該直線は左右方向に伸びている。図１０（Ｂ）〜（Ｄ）でも、２個のマーク５００Ａ，５００Ｂ等の２個の矩形領域の２個の中心座標を結ぶ直線の傾きは０度である。従って、２個の対象マーク候補画像情報についてＳ３０５でＹＥＳと判断されることは、２個の対象マーク候補画像情報が図１０（Ａ）〜（Ｄ）の２個のマーク４００Ｂ，４１０等に対応することを示す１つの条件を満たすことを意味する。
【００７９】
Ｓ３１０は、２個の対象マーク候補画像情報が利用される点を除いて、Ｓ２１５と同様である。ＣＰＵ３２は、２個の対象マーク候補画像情報に含まれる２個の辺の長さが等しい場合（Ｓ３１０でＹＥＳ）に、Ｓ３１５に進み、当該２個の辺の長さが等しくない場合（Ｓ３１０でＮＯ）に、Ｓ３４０に進む。従って、２個の対象マーク候補画像情報についてＳ３１０でＹＥＳと判断されることは、２個の対象マーク候補画像情報が図１０（Ａ）〜（Ｄ）の２個のマーク４００Ｂ，４１０等に対応することを示す１つの条件を満たすことを意味する。
【００８０】
Ｓ３１５では、ＣＰＵ３２は、２個の対象マーク候補画像情報が特定の位置関係を有するのか否かを判断する。具体的には、ＣＰＵ３２は、２個の対象マーク候補画像情報に含まれる２個の角度が一致又は近似する、又は、当該２個の角度の差分が１８０度に一致又は近似するのか否かを判断する。ここでの「近似」は、本実施例では、±５度の範囲を意味するが、変形例では、他の範囲（例えば±１度の範囲、±１０度の範囲等）であってもよい。ＣＰＵ３２は、２個の角度が一致又は近似すると判断する場合、又は、２個の角度の差分が１８０度に一致又は近似すると判断する場合（Ｓ３１５でＹＥＳ）に、Ｓ３２０に進み、２個の角度が一致又は近似せず、かつ、２個の角度の差分が１８０度に一致又は近似しないと判断する場合（Ｓ３１５でＮＯ）に、Ｓ３４０に進む。
【００８１】
図１０（Ａ）に示されるように、２個のマーク４００Ｂ，４１０の２個の角度は９０度で一致する。同様に、図１０（Ｃ）でも、２個のマーク５００Ｃ，５００Ｄの２個の角度は２７０度で一致する。また、図１０（Ｂ）に示されるように、２個のマーク５００Ａ，５００Ｂの２個の角度の差分は１８０度に一致する。同様に、図１０（Ｄ）でも、２個のマーク５００Ｅ，５００Ｅの２個の角度の差分は１８０度に一致する。従って、２個の対象マーク候補画像情報についてＳ３１５でＹＥＳと判断されることは、２個の対象マーク候補画像情報が図１０（Ａ）〜（Ｄ）の２個のマーク４００Ｂ，４１０等に対応することを示す１つの条件を満たすことを意味する。
【００８２】
Ｓ３２０では、ＣＰＵ３２は、二値画像１６０から、２個の対象マーク候補画像情報によって表わされる２個の対象マーク候補画像を含む所定領域を特定する。ＣＰＵ３２は、Ｓ３１５で２個の角度が一致又は近似すると判断する場合に、２個の対象マーク候補画像情報が、第１種のマークに対応するマーク候補画像情報と、第２種のマークに対応するマーク候補画像情報を含むと判断し、図７のＳ２３５と同様に、上記の第１の数式と第２の数式とを利用して、第１種のマークの最も外側の頂点の座標と、第２種のマークの最も外側の頂点の座標と、を算出する。また、ＣＰＵ３２は、Ｓ３１５で２個の角度の差分が１８０度に一致又は近似すると判断する場合に、２個の対象マーク候補画像情報が、２個の第１種のマークに対応するマーク候補画像情報を含むと判断し、上記の第１の数式を利用して、２個の第１種のマークの最も外側の頂点の２個の座標を算出する。次いで、ＣＰＵ３２は、算出済みの２個の座標を結ぶ線分に等しい長さを有し、かつ、当該線分の中点を通過し、かつ、当該線分に直交する線分を特定する。そして、ＣＰＵ３２は、算出済みの２個の座標と、特定済みの線分の両端の２個の座標と、によって囲まれる領域を所定領域として特定する。
【００８３】
図１０（Ａ）の例では、ＣＰＵ３２は、第１の数式を利用して、第１種のマーク４００Ｂの最も外側の頂点の座標Ｃ１６を算出し、第２の数式を利用して、第２種のマーク４１０の最も外側の頂点の座標Ｃ１８を算出する。次いで、ＣＰＵ３２は、算出済みの２個の座標Ｃ１６，Ｃ１８を結ぶ線分４２０に等しい長さを有し、かつ、線分４２０の中点を通過し、かつ、線分４２０に直交する線分４３０を特定する。これにより、ＣＰＵ３２は、算出済みの２個の座標Ｃ１６，Ｃ１８と、特定済みの線分４３０の両端の２個の座標Ｃ１５，Ｃ１７と、によって囲まれる領域を所定領域として特定する。
【００８４】
Ｓ３２５では、ＣＰＵ３２は、二値画像１６０から特定済みの所定領域を切り出して、所定領域をデコードする。ただし、図１０の処理では、２個のマークに対応する２個の対象マーク候補画像情報のみから所定領域が特定されるので、所定領域が漢信コード画像を含むことが保証されない。即ち、所定領域が漢信コード画像を含む場合には、所定領域のデコードが成功するが、所定領域が漢信コード画像を含まない場合には、所定領域のデコードが成功しない。
【００８５】
Ｓ３３０では、ＣＰＵ３２は、Ｓ３２５のデコード処理が成功したのか否かを判断する。具体的には、ＣＰＵ３２は、デコード処理によって文字、記号等を特定することができた場合には、デコード処理が成功した（即ち所定領域が漢信コード画像を含む）と判断して（Ｓ３３０でＹＥＳ）、Ｓ３３５に進む。一方、ＣＰＵ３２は、デコード処理によって文字、記号等を特定することができなかった場合には、デコード処理が成功しなかった（即ち所定領域が漢信コード画像を含まない）と判断して（Ｓ３３０でＮＯ）、Ｓ３４０に進む。
【００８６】
Ｓ３３５では、ＣＰＵ３２は、メモリ３４から２個の対象マーク候補画像情報を削除する。Ｓ３４０は、Ｓ２５０と同様である。ＣＰＵ３２は、マーク候補画像情報の全ての組み合わせが選択されたと判断する場合（Ｓ３４０でＹＥＳ）に、図９の処理を終了し、全ての組み合わせが選択されていないと判断する場合（Ｓ３４０でＮＯ）に、Ｓ３００に戻り、２個のマーク候補画像情報の異なる組み合わせを選択する。
【００８７】
上述のように、ＣＰＵ３２は、３マークデコード処理を実行した後に、２マークデコード処理を実行する。これにより、ＣＰＵ３２は、３マークデコード処理によって漢信コード画像の位置を特定することができない場合でも、２マークデコード処理によって漢信コード画像をデコードしてデコード結果を得ることができる。
【００８８】
（本実施例の効果）
本実施例では、漢信コード１１４（図１参照）に含まれる各マーク１１５Ａ〜１１５Ｃ，１１６は、点対称性を有さず、かつ、上記の所定の比を有する。このようなマーク１１５Ａ等を検出するために、ＰＣ１０は、矩形領域候補画像の中心座標Ｃ１を通過する複数本の線分３１０〜３８０（図６参照）の中から上記の所定の比に対応する線分３８０を特定することによって、マーク候補画像の向きを示す角度３１０度を特定し、当該角度を利用して漢信コード画像の位置を特定する（図７のＳ２３５）。従って、ＰＣ１０は、点対称性を有しないマーク１１５等を含む漢信コード１１４を表わす漢信コード画像を精度良く特定することができる。
【００８９】
例えば、マークを表わす参照画像を利用して二値画像１６０に対してパターンマッチングを実行することによって、マーク候補画像の位置を特定する比較例を想定する。原稿１１２に含まれる漢信コード１１４のサイズが不明であるので、比較例の手法によると、参照画像を拡大又は縮小しながらパターンマッチングを実行しなければならない。また、原稿１１２において漢信コード１１４が傾いている可能性もあるし、原稿１１２が傾いた状態でスキャンされるとスキャン画像内において漢信コード画像が傾く可能性もある。従って、比較例の手法によると、参照画像を回転させながらパターンマッチングを実行しなければならない。このために、比較例の手法によると、マーク候補画像の位置を特定するのに長時間を要する。これに対し、本実施例によると、パターンマッチングを実行せずに済むので、マーク候補画像の位置を特定するための処理時間が短くて済む。
【００９０】
（対応関係）
ＰＣ１０が、「画像解析装置」の一例である。漢信コード１１４が、「二次元コード」の一例であり、３個のマーク１１５Ａ〜１１５Ｃ、１個のマーク１１６が、それぞれ、「３個の第１種のマーク」、「１個の第２種のマーク」の一例である。図２のＳ２０で生成される二値画像データ、二値画像１６０が、それぞれ、「対象画像データ」、「対象画像」の一例である。３個の非背景領域１３０、２個の背景領域１４０、矩形領域１３２、対向領域１３４，１３６が、それぞれ、「Ｎ個の非背景領域」、「Ｍ個の背景領域」、「第１の非背景領域」、「第２の非背景領域」の一例である。矩形候補画像が、「非背景候補画像」の一例である。図１の直線１２０、３本の線分１１８Ａ〜１１８Ｃ、２本の線分１１９Ａ，１１９Ｂが、それぞれ、「対象直線」、「Ｎ個の線分」、「Ｍ個の線分」の一例である。図４のＳ１６５で特定される矩形領域候補画像の中心座標Ｃ１が、「基準点」の一例である。図６の線分３８０が、「対象線分」の一例である。
【００９１】
図８において、マーク１１５Ａに対応するマーク候補画像、マーク１１５Ｂに対応するマーク候補画像、マーク１１５Ｂに対応するマーク候補画像が、それぞれ、「第１のマーク候補画像」、「第２のマーク候補画像」、「第３のマーク候補画像」の一例である。図３のＳ１１５で生成又は更新される連結情報が、「特定情報」の一例である。図６の直線２７０、２本の線分３１０，３５０が、直線２９０、２本の線分３３０，３７０が、それぞれ、「第１の直線」、「第１の直線上の２本の線分」、「第２の直線」、「第２の直線上の２本の線分」の一例である。マッチング指数が、「指標値」の一例である。二値画像１６０の左右方向（即ちＸ方向）、上下方向（即ちＹ方向）が、それぞれ、「第１方向」、「第２方向」の一例である。上側、下側が、それぞれ、「第１側」、「第２側」の一例である。また、二値画像１６０の左右方向（即ちＸ方向）が、「所定方向」の一例である。
【００９２】
図２のＳ１０〜Ｓ２０で実行される処理が、「取得部」によって実行される処理の一例である。図３のＳ１００〜Ｓ１２０で実行される処理が、「画像特定部」によって実行される処理の一例である。図４のＳ１６５で実行される処理が、「基準点特定部」によって実行される処理の一例である。Ｓ１７５で実行される処理が、「角度特定部」によって実行される処理の一例である。Ｓ３０で実行される処理が、「位置特定部」によって実行される処理の一例である。Ｓ４０で実行される処理が、「所定処理実行部」によって実行される処理の一例である。
【００９３】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【００９４】
（変形例１）ＣＰＵ３２は、図２のＳ２０において、異なる閾値を利用して複数個の二値画像データを生成し、複数個の二値画像データのそれぞれについて図２のＳ２０〜Ｓ３５の処理を実行してもよい。これにより、例えば、漢信コードの非背景領域と背景領域との輝度差が小さい場合でも、漢信コード画像の位置を適切に特定することができる。
【００９５】
（変形例２）図７のＳ２０５〜Ｓ２１５の処理のいずれかを省略してもよい。一般的に言うと、位置特定部は、複数個のマーク候補画像の中に第１〜第３のマーク候補画像を含む３個のマーク候補画像が存在するのか否かを判断しなくてもよいし、複数個のマーク候補画像の中に直角三角形の３個の頂点を構成する３個の基準点を有する３個のマーク候補画像が存在するのか否かを判断しなくてもよい。
【００９６】
（変形例３）図４のＳ１７０が省略されてもよい。この場合、ＣＰＵ３２は、Ｓ１６０で特定された矩形候補画像の仮の中心線をＳ１７０の直線として利用して、Ｓ１７５で８本の線分を特定し、各線分のマッチング指数を算出してもよい。別の変形例では、ＣＰＵ３２は、Ｓ１６５の中心座標を通過する１度間隔の３６０本の線分を特定し、各線分のマッチング指数を算出してもよい。この場合、ＣＰＵ３２は、マッチング指数がゼロに一致又は近似する複数本の線分のうちの真ん中の線分の角度をマーク候補画像の角度として特定してもよい。どちらの変形例でも、Ｓ１７０の処理を省略することができる。一般的に言うと、角度特定部は、基準点を通過する複数本の直線の中から、非背景候補画像に重なる最短又は最長の線分を有する第１の直線を特定しなくてもよい。
【００９７】
（変形例４）図７のＳ２４０が実行されなくてもよい。例えば、４個の漢信コードを含む原稿が存在することを想定する。この場合、ＣＰＵ３２は、４個の漢信コードを表わす４個の漢信コード画像の位置を特定する。そして、ＣＰＵ３２は、スキャンデータ１１０によって表わされるスキャン画像のうち、４個の漢信コード画像によって囲まれる領域をトリミングしてもよい。この場合、漢信コード画像のデコードは必要ない。本変形例では、複数個の漢信コード画像によって囲まれる領域のトリミングが、「所定処理」の一例である。
【００９８】
（変形例５）変形例では、図４のＳ１７５において、ＣＰＵ３２は、４本の線分３１０，３３０，３５０，３７０のみを特定してもよい。この場合、ＣＰＵ３２は、４本の線分のそれぞれについてマッチング指数を算出し、４本の線分うち、マッチング指数の和が最も小さい隣り合う２本の線分を特定し、当該２本の線分の中間の角度をマーク候補画像の角度として特定してもよい。また、別の変形例では、ＣＰＵ３２は、４本の線分３２０，３４０，３６０，３８０のみを特定してもよい。この場合、ＣＰＵ３２は、４本の線分のそれぞれについてマッチング指数を算出し、４本の線分うち、マッチング指数が最も小さい１本の線分を特定し、当該１本の線分の角度をマーク候補画像の角度として特定してもよい。一般的に言うと、角度特定部は、第１の直線上の２本の線分と、第２の直線上の２本の線分と、を含む少なくとも４本の線分を特定すればよい。
【００９９】
（変形例６）「二次元コード」は、漢信コード１１４でなくてもよく、点対称性を有しない（即ち向きを有する）他の二次元コードであってもよい。この場合、「対象直線」は、対象直線上の（Ｎ＋Ｍ）個の線分の長さの比が所定の比である唯一の直線でなくてよいし、第１の非背景領域の中心点を通過しなくてもよい。また、基準点特定部は、非背景候補画像の中心点を基準点として特定しなくてもよい。例えば、対象直線が、非背景候補画像の中心点を通過せず、非背景候補画像のある頂点を通過する場合には、基準点特定部は、非背景候補画像の当該頂点を基準点として特定してもよい。
【０１００】
（変形例７）図２〜図４、図７及び図９の各処理は、スキャナ５０によって実行されてもよく、Ｓ４０において、デコード結果がスキャナ５０からＰＣ１０に送信されてもよい。即ち、「画像解析装置」は、スキャナであってもよい。一般的に言うと、「画像解析装置」は、画像の解析を実行可能なあらゆる装置（例えば、多機能機、スマートフォン等）を含む。
【０１０１】
（変形例８）上記の実施例では、ＰＣ１０のＣＰＵ３２がドライバプログラム３６（即ちソフトウェア）を実行することによって、図２〜図４、図７及び図９の各処理が実現される。これに代えて、図２〜図４、図７及び図９の各処理のうちの少なくとも１つの処理は、論理回路等のハードウェアによって実現されてもよい。
【０１０２】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【０１０３】
１０：ＰＣ、１２：操作部、１４：表示部、１６：ネットワークインターフェース、３０：制御部、３４：メモリ、３６：ドライバプログラム、５０：スキャナ、１００：スキャン指示、１１０：スキャンデータ、１１２：原稿、１１４：漢信コード、１１５Ａ〜１１５Ｃ、１１６、４００Ａ〜４００Ｃ、４１０、５００Ａ〜５００Ｆ：位置検出マーク、１１７：情報領域、１１８Ａ〜１１８Ｃ、１１９Ａ、１１９Ｂ、１５０、３１０〜３８０、４２０、４３０：線分、１２５、１３３：中心点、１３０：非背景領域、１３２：矩形領域、１３４：第１対向領域、１３６：第２対向領域、１４０：背景領域、１４２：第１間隙領域、１４４：第２間隙領域、１６０：二値画像、１６２、１６４、１６６、２００：候補グループ、２７０、２８０、２９０、３００：直線、２５０：矩形候補画像、２６０：探索線
【図１】
2019003229.tif 000003
【図２】
2019003229.tif 000004
【図３】
2019003229.tif 000005
【図４】
2019003229.tif 000006
【図５】
2019003229.tif 000007
【図６】
2019003229.tif 000008
【図７】
2019003229.tif 000009
【図８】
2019003229.tif 000010
【図９】
2019003229.tif 000011
【図１０】
2019003229.tif 000012