(57)【特許請求の範囲】
【請求項１】
画像解析装置であって、
一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得部と、
前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定部と、
特定済みの前記バーコード画像に関係する出力処理を実行する出力部と、を備え、
前記特定部は、
前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定部であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定部と、
前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索部と、
前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定部と、を備え、
前記端部決定部は、前記原稿の端と前記一次元バーコードの端とが近接することに起因して、前記バー候補領域の前記第１側又は前記第２側において、前記背景領域のうち、前記特定方向に沿った前記閾値未満の長さを有する部分背景領域しか存在しない場合に、前記余白領域が存在しないにも関わらず、前記部分背景領域に隣接する前記非背景領域と、前記部分背景領域と、の間の境界位置を、前記１次元バーコードの前記第１の端部位置又は前記第２の端部位置として決定し、
前記特定部は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する、画像解析装置。
【請求項２】
画像解析装置であって、
一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得部と、
前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定部と、
特定済みの前記バーコード画像に関係する出力処理を実行する出力部と、を備え、
前記特定部は、
前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定部であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定部と、
前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索部と、
前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定部と、を備え、
前記対象画像は、第１方向に沿った２個以上の画素と、前記第１方向に直交する第２方向に沿った２個以上の画素と、を含む複数個の画素によって構成され、
前記複数個の画素は、前記原稿の背景を表わす背景画素と、前記原稿の背景以外を表わす非背景画素と、を含み、
前記複数個の画素は、前記第２方向に沿って並ぶｊ個（前記ｊは２以上の整数）のライン画素グループを含み、
前記候補決定部は、
前記ｊ個のライン画素グループのうちの対象ライン画素グループから、連続する１個以上の非背景画素によって構成される部分グループと、連続する１個以上の背景画素によって構成される部分グループと、が隣接する複数個の部分グループを選択し、
選択済みの前記複数個の部分グループが所定の条件を満たす場合に、前記複数個の部分グループのうちの１個の部分グループであって、連続する１個以上の非背景画素によって構成される前記１個の部分グループを、前記１次元バーコードの前記２種以上の幅に関係する前記特徴に整合する前記領域として特定し、
前記特定部は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する、画像解析装置。
【請求項３】
前記特徴に整合する前記領域は、前記第１方向に沿って連続する１個以上の前記非背景画素によって構成される第１種の部分候補領域を含み、
前記候補決定部は、
前記ｊ個のライン画素グループのうちの第１のライン画素グループの中に前記第１種の部分候補領域が存在し、かつ、前記第１のライン画素グループに隣接する第２のライン画素グループの中に前記第１種の部分候補領域が存在し、かつ、前者の前記第１種の部分候補領域と後者の前記第１種の部分候補領域とが隣接する場合に、前者の前記第１種の部分候補領域と後者の前記第１種の部分候補領域とが関連付けられている関連領域を決定し、
前記関連領域を含む前記バー候補領域を決定する、請求項２に記載の画像解析装置。
【請求項４】
前記候補決定部は、
前記第２方向の第３側から第４側に向かって、前記ｊ個のライン画素グループのそれぞれについて、当該ライン画素グループの中に前記第１種の部分候補領域が存在するのか否かを判断する存在判断処理を順次実行し、
前記第２方向の前記第３側からｍ番目（ｍは１以上ｊ未満の各整数）のライン画素グループについての前記存在判断処理において、前記第１種の部分候補領域が存在すると判断される場合に、前記ｍ番目のライン画素グループ内の前記第１種の部分候補領域のみを含む前記関連領域を決定し、
前記第２方向の前記第３側から（ｍ＋１）番目のライン画素グループについての前記存在判断処理において、前記第１種のグループが存在すると判断され、かつ、前記（ｍ＋１）番目のライン画素グループ内の前記第１種の部分候補領域が前記関連領域に隣接する場合に、前記（ｍ＋１）番目のライン画素グループ内の前記第１種の部分候補領域をさらに含む前記関連領域を決定する、請求項３に記載の画像解析装置。
【請求項５】
前記候補決定部は、
前記ｍ番目のライン画素グループについての前記存在判断処理において、２個以上の前記第１種の部分候補領域が存在すると判断される場合に、前記２個以上の第１種の部分候補領域のそれぞれについて、当該第１種の部分候補領域のみを含む前記関連領域を決定し、
前記２個以上の第１種の部分候補領域を含む２個以上の前記関連領域のうちの第１の関連領域を先に利用して、前記第１の関連領域を含む前記バー候補領域を決定し、
前記第１の関連領域を含む前記バー候補領域を含む前記バーコード画像が特定され、かつ、特定済みの前記バーコード画像が前記２個以上の関連領域のうちの第２の関連領域を含む場合に、前記第２の関連領域を含む新たなバー候補領域を決定しない、請求項４に記載の画像解析装置。
【請求項６】
前記候補決定部は、
前記（ｍ＋１）番目のライン画素グループ内の前記第１種の部分候補領域が前記関連領域に隣接しない場合に、前記（ｍ＋１）番目のライン画素グループに含まれる１個以上の背景画素であって、前記関連領域に隣接する前記１個以上の背景画素を含む特定領域をさらに含む前記関連領域を決定し、
前記第２方向に沿って連続する前記特定領域の個数が第１の所定数未満である場合に、前記関連領域の決定を継続し、
前記第２方向に沿って連続する前記特定領域の個数が前記第１の所定数以上である場合に、前記関連領域の決定を終了して、前記関連領域を含む前記バー候補領域を決定しない、請求項４又は５に記載の画像解析装置。
【請求項７】
前記候補決定部は、前記第２方向の前記第３側からｎ番目（ｎは１以上ｊ未満の整数）のライン画素グループについての前記存在判断処理を実行することに応じて、前記関連領域内の前記第２方向に沿って並ぶ画素数が第２の所定数に達する場合に、前記第２方向の前記第３側から（ｎ＋１）番目のライン画素グループについての前記存在判断処理を実行することなく、前記（ｎ＋１）番目のライン画素グループに含まれる１個以上の非背景画素であって、前記関連領域に隣接する前記１個以上の非背景画素によって構成される第２種の部分候補領域をさらに含む前記関連領域を決定する、請求項４から６のいずれか一項に記載の画像解析装置。
【請求項８】
前記特定方向は、前記バー候補領域に含まれる１個以上の前記第１種の部分候補領域と１個以上の前記第２種の部分候補領域とが並ぶ方向に直交する方向である、請求項７に記載の画像解析装置。
【請求項９】
前記第１種の幅は、前記２種以上の幅のうちの第２種の幅よりも大きく、
前記候補決定部は、前記ｊ個のライン画素グループのうちの対象ライン画素グループに含まれる５個の部分グループから得られる３個のパラメータｎｃ、ｍｉｎ、及び、ｍａｘが、式「ｎｃ／ｍｉｎ＜第１の所定値」を満たさず、かつ、式「ｍａｘ／ｍｉｎ＞第２の所定値」を満たさない場合に、前記５個の部分グループのうちの特定の部分グループが、前記１次元バーコードの前記２種以上の幅に関係する前記特徴に整合すると判断し、
前記５個の部分グループは、
連続する１個以上の非背景画素によって構成される第１の部分グループと、
前記第１の部分グループに隣接する第２の部分グループであって、連続する１個以上の背景画素によって構成される前記第２の部分グループと、
前記第２の部分グループに隣接する第３の部分グループであって、連続する１個以上の非背景画素によって構成される前記第３の部分グループと、
前記第３の部分グループに隣接する第４の部分グループであって、連続する１個以上の背景画素によって構成される前記第４の部分グループと、
前記第４の部分グループに隣接する第５の部分グループであって、連続する１個以上の非背景画素によって構成される前記第５の部分グループと、を含み、
前記パラメータｎｃは、前記第３の部分グループの画素数であり、
前記パラメータｍｉｎは、前記５個の部分グループのうちの最小の画素数であり、
前記パラメータｍａｘは、前記５個の部分グループのうちの最大の画素数であり、
前記第１の所定値及び前記第２の所定値は、前記１次元バーコードの前記２種以上の幅に基づいて予め決定されており、
前記特定の部分グループは、前記第３の部分グループである、請求項３から８のいずれか一項に記載の画像解析装置。
【請求項１０】
前記第１種の幅は、前記２種以上の幅のうちの第２種の幅よりも大きく、
前記探索部は、前記第２種の幅に相当する長さに第３の所定値を乗算することによって得られる前記閾値を決定する、請求項１から９のいずれか一項に記載の画像解析装置。
【請求項１１】
前記出力部は、特定済みの前記バーコード画像をデコードして、デコード結果を出力する前記出力処理を実行する、請求項１から１０のいずれか一項に記載の画像解析装置。
【請求項１２】
画像解析装置のためのコンピュータプログラムであって、
前記画像解析装置に搭載されるコンピュータに、以下の各処理、即ち、
一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得処理であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得処理と、
前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定処理と、
特定済みの前記バーコード画像に関係する出力処理と、を実行させ、
前記特定処理は、
前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定処理であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定処理と、
前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索処理と、
前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定処理と、を含み、
前記端部決定処理は、前記原稿の端と前記一次元バーコードの端とが近接することに起因して、前記バー候補領域の前記第１側又は前記第２側において、前記背景領域のうち、前記特定方向に沿った前記閾値未満の長さを有する部分背景領域しか存在しない場合に、前記余白領域が存在しないにも関わらず、前記部分背景領域に隣接する前記非背景領域と、前記部分背景領域と、の間の境界位置を、前記１次元バーコードの前記第１の端部位置又は前記第２の端部位置として決定し、
前記特定処理は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する、コンピュータプログラム。
【請求項１３】
画像解析装置のためのコンピュータプログラムであって、
前記画像解析装置に搭載されるコンピュータに、以下の各処理、即ち、
一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得処理であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得処理と、
前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定処理と、
特定済みの前記バーコード画像に関係する出力処理と、を実行させ、
前記特定処理は、
前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定処理であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定処理と、
前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索処理と、
前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定処理と、を含み、
前記対象画像は、第１方向に沿った２個以上の画素と、前記第１方向に直交する第２方向に沿った２個以上の画素と、を含む複数個の画素によって構成され、
前記複数個の画素は、前記原稿の背景を表わす背景画素と、前記原稿の背景以外を表わす非背景画素と、を含み、
前記複数個の画素は、前記第２方向に沿って並ぶｊ個（前記ｊは２以上の整数）のライン画素グループを含み、
前記候補決定処理は、
前記ｊ個のライン画素グループのうちの対象ライン画素グループから、連続する１個以上の非背景画素によって構成される部分グループと、連続する１個以上の背景画素によって構成される部分グループと、が隣接する複数個の部分グループを選択し、
選択済みの前記複数個の部分グループが所定の条件を満たす場合に、前記複数個の部分グループのうちの１個の部分グループであって、連続する１個以上の非背景画素によって構成される前記１個の部分グループを、前記１次元バーコードの前記２種以上の幅に関係する前記特徴に整合する前記領域として特定し、
前記特定処理は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書では、対象画像の中から一次元バーコードを表わすバーコード画像を特定するための画像解析装置を開示する。
【背景技術】
【０００２】
下記の各特許文献に開示されているように、画像内の一次元バーコードを特定するための様々な技術が知られている。例えば、特許文献１の技術では、画像データの全領域が順次走査され、黒パターン及び白パターンが交互に出現する仮バーコード領域が抽出される。そして、仮バーコード領域の中に所定のバーのパターンが存在するのか否かが判定され、真のバーコード領域が抽出される。具体的には、２本の黒バーとそれらの間の白バーとによって構成されるガードバーのパターンがメモリに予め登録されており、仮バーコード領域の両端部のそれぞれにおいて、登録済みのガードバーのパターンが存在するのか否かが判定される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−１６７０１号公報
【特許文献２】特開平５−１０１２１４号公報
【特許文献３】特開平９−２５１５０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術では、仮バーコード領域の両端部のそれぞれにおいて、ガードバーのパターンマッチングが実行される。このために、真のバーコード領域を抽出するための処理時間が長くなり得る。本明細書では、一次元バーコードを表わすバーコード画像を特定するための処理時間を短縮し得る技術を提供する。
【課題を解決するための手段】
【０００５】
本明細書によって開示される画像解析装置は、一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得部と、前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定部と、特定済みの前記バーコード画像に関係する出力処理を実行する出力部と、を備え、前記特定部は、前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定部であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定部と、前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索部と、前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定部と、を備え、前記特定部は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する。
【０００６】
上記の構成によると、画像解析装置は、対象画像の中から決定されるバー候補領域の第１側及び第２側のそれぞれにおいて余白領域を探索することによって、一次元バーコードの第１の端部位置及び第２の端部位置を決定する。従って、バー候補領域の第１側及び第２側のそれぞれにおいて、２本以上のバーによって構成されるガードバーのパターンマッチングを実行せずに済む。このために、バーコード画像を特定するための処理時間を短縮し得る。
【０００７】
上記の画像解析装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを格納するコンピュータ読取可能記録媒体も新規で有用である。
【図面の簡単な説明】
【０００８】
【図１】本実施例のハードウェア構成を模式的に示す。
【図２】ＰＣ（Personal Computerの略）によって実行されるドライバ処理のフローチャートを示す。
【図３】バーコード処理のフローチャートを示す。
【図４】連結情報生成処理のフローチャートを示す。
【図５】連結情報の生成及び更新を説明するための説明図を示す。
【図６】バーコード画像特定処理のフローチャートを示す。
【図７】バーコードの端部位置の決定手法を説明するための説明図を示す。
【図８】図７とは異なる決定手法を説明するための説明図を示す。
【図９】バーコード画像の特定及び削除を説明するための説明図を示す。
【図１０】連結情報削除処理のフローチャートを示す。
【発明を実施するための形態】
【０００９】
（ＰＣ１０の構成；図１）
ＰＣ１０は、ＬＡＮ（Local Area Networkの略）を介して、スキャナ５０と通信可能に接続されている。ＰＣ１０は、操作部１２と、表示部１４と、ネットワークインターフェース１６と、制御部３０と、を備える。操作部１２は、マウス、キーボード等を含む。ユーザは、操作部１２を操作することによって、様々な指示をＰＣ１０に入力することができる。表示部１４は、様々な情報を表示するためのディスプレイである。ネットワークインターフェース１６は、ＬＡＮに接続されている。
【００１０】
制御部３０は、ＣＰＵ３２とメモリ３４とを備える。メモリ３４は、ＲＯＭ（Read Only Memoryの略）、ＲＡＭ（Random Access Memoryの略）等によって構成される。ＣＰＵ３２は、メモリ３４に格納されている各種のプログラムに従って、様々な処理（例えば後述の図２の処理）を実行するプロセッサである。プログラムは、図示省略のＯＳ（Operating Systemの略）プログラム、ドライバプログラム３６等を含む。
【００１１】
ドライバプログラム３６は、スキャナ５０のベンダによって提供され、スキャナ５０に関連する処理を実行するためのプログラムである。ドライバプログラム３６は、例えば、スキャナ５０と共に出荷されるメディアからＰＣ１０にインストールされてもよいし、スキャナ５０のベンダによって提供されるインターネット上のサーバからＰＣ１０にインストールされてもよい。
【００１２】
ＣＰＵ３２は、ユーザから操作部１２に対するスキャン実行操作を受け付ける場合に、ドライバプログラム３６に従って、原稿の読取りをスキャナ５０に実行させるためのスキャン指示１００をスキャナ５０に供給する。スキャン指示１００は、読取解像度、原稿のサイズ等の読取設定を含む。これにより、スキャナ５０は、読取設定に従って原稿の読取りを実行して、スキャンデータ１１０を生成する。そして、スキャナ５０は、スキャンデータ１１０をＰＣ１０に供給する。この結果、ＣＰＵ３２は、スキャナ５０からスキャンデータ１１０を取得する。
【００１３】
本実施例では、特に、ＣＰＵ３２は、ユーザから、原稿に含まれる一次元バーコードをデコードするためのデコード操作を受け付けることができる。一次元バーコードは、文字、記号等の組合せが複数本のバーによって表現されたものである。一次元バーコードを含む原稿は、例えば、オフィスの書類、病院のカルテ等である。例えば、オフィスの書類に含まれる一次元バーコードは、当該書類を表わすスキャンデータの保存先のフォルダを特定するための文字、記号等に対応する。例えば、病院のカルテに含まれる一次元バーコードは、患者を特定するための文字、記号等に対応する。ＣＰＵ３２は、上記のデコード操作を受け付け、かつ、スキャンデータ１１０を取得する場合に、ドライバプログラム３６に従って、スキャンデータ１１０によって表わされるスキャン画像１１２の中から一次元バーコードを表わすバーコード画像１１４を特定し、バーコード画像１１４のデコードを実行する。そして、ＣＰＵ３２は、デコード結果に応じた処理を実行する。例えば、ＣＰＵ３２は、デコード結果が示すメモリ３４内のフォルダにスキャンデータ１１０を格納したり、デコード結果が示す患者の情報とスキャンデータ１１０とをメモリ３４内の医療用アプリケーション（図示省略）に出力したりする。
【００１４】
ここで、一次元バーコード（以下では単に「バーコード」と呼ぶ）について説明しておく。ＪＡＮ（Japanese Article Numberの略）コード、ＥＡＮ（European Article Numberの略）コード、ＩＴＦ（Interleaved Two of Fiveの略）コード、ＣＯＤＥ３９、ＣＯＤＥ１２８、ＮＷ−７（ＣＯＤＥＢＡＲ）等の様々な規格のバーコードが知られている。いずれの規格のバーコードも、異なる２種以上の幅を有する２種以上のバー（即ちいわゆる黒バー）の組合せである複数本のバーと、２本のバーの間の空白（即ちいわゆる白バー）と、によって構成される。以下では、２種以上の幅を有する２種以上のバーのうち、最小の幅を有するバーのことを「細バー」と呼び、細バー以外のバーのことを「太バー」と呼ぶ。本実施例のドライバプログラム３６は、複数規格のバーコードをサポートしている。即ち、ドライバプログラム３６は、スキャン画像１１２の中に上記の複数規格のうちのいずれの規格のバーコードを表わすバーコード画像１１４が含まれていても、当該バーコード画像１１４を特定することができる。
【００１５】
バーコード画像１１４は、スキャン画像１１２のうちのごく一部を構成する。例えば、バーコード画像１１４は、スキャン画像１１２の大きさの１／４以下の大きさを有する。ドライバプログラム３６は、スキャン画像１１２の中から、かなり小さなバーコード画像１１４を迅速に特定することができる。
【００１６】
（ＰＣ１０のドライバプログラム３６の処理；図２）
続いて、図２を参照して、ＣＰＵ３２が、上記のデコード操作を受け付ける場合に、ドライバプログラム３６に従って実行するドライバ処理の内容を説明する。
【００１７】
Ｓ１０では、ＣＰＵ３２は、スキャナ５０から、ネットワークインターフェース１６を介して、バーコード画像１１４を含むスキャン画像１１２を表わすスキャンデータ１１０を取得する。スキャンデータ１１０は、複数個の画素データによって構成され、各画素データは、２５６階調（即ち「０〜２５５」）の画素値（具体的には、Ｒ値、Ｇ値、及び、Ｂ値）を示す。
【００１８】
Ｓ１２では、ＣＰＵ３２は、スキャンデータ１１０に対する輝度値変換処理を実行する。具体的には、ＣＰＵ３２は、スキャンデータ１１０を構成する複数個の画素データのそれぞれについて、当該画素データが示す画素値（即ちＲ値とＧ値とＢ値）をＳ１２内の数式に従って輝度値（即ちＹ値）に変換して、２５６階調の輝度値（即ち「０〜２５５」）を示す新たな画素データを生成する。これにより、輝度値を示す複数個の新たな画素データによって構成される輝度画像データが生成される。本実施例では、読取対象の原稿は、白色（即ちＲ＝Ｇ＝Ｂ＝２５５）の背景を有する。従って、原稿の背景を示す輝度値（即ちＹ値）は、通常、２５５になり、原稿の背景以外を示す輝度値は、通常、２５５未満の値になる。
【００１９】
Ｓ１４では、ＣＰＵ３２は、Ｓ１２で生成された輝度画像データに対する二値化処理を実行する。具体的には、ＣＰＵ３２は、輝度画像データを構成する複数個の画素データのそれぞれについて、当該画素データが示す輝度値を「１」又は「０」に変換して、「１」又は「０」を示す新たな画素データを生成する。より具体的には、ＣＰＵ３２は、輝度値が予め決められている閾値（例えば２００）以下である場合には、「１」を示す新たな画素データを生成し、輝度値が閾値以下である場合には、「０」を示す新たな画素データを生成する。即ち、原稿の背景を表わす画素データが「０」で表現され、原稿の背景以外を表わす画素データが「１」で表現される。これにより、「１」又は「０」を示す複数個の新たな画素データによって構成される二値画像データが生成される。以下では、「１」を示す画素データ、「０」を示す画素データのことを、それぞれ、「ＯＮ画素データ」、「ＯＦＦ画素データ」と呼ぶ。
【００２０】
図２には、Ｓ１４で生成される二値画像データによって表わされる二値画像の一例として、２種類の二値画像１２０Ａ，１２０Ｂが示されている。各二値画像１２０Ａ，１２０Ｂでは、ＯＮ画素データによって表わされるＯＮ画素、ＯＦＦ画素データによって表わされるＯＦＦ画素が、それぞれ、黒色、白色で表現されている。二値画像１２０Ａでは、バーコードを構成する各バーは、当該画像１２０Ａの長辺が伸びる方向に沿って伸びている。二値画像１２０Ｂでは、バーコードを構成する各バーは、当該画像１２０Ｂの短辺が伸びる方向に沿って伸びている。
【００２１】
Ｓ１６では、ＣＰＵ３２は、Ｓ１４で生成された二値画像データに対するバーコード処理を実行する。バーコード処理は、二値画像１２０Ａ等の中からバーコード画像を特定して、当該バーコード画像のデコードを実行するための処理である。Ｓ１６では、ＣＰＵ３２は、二値画像１２０Ａ等の短辺が伸びる方向に沿って並ぶ複数個の画素によって構成される画素グループを１本のラインとして扱って処理を実行する。この場合、ＣＰＵ３２は、二値画像１２０Ａに含まれるバーコード画像を特定することができるが、二値画像１２０Ｂに含まれるバーコード画像を特定することができない。
【００２２】
Ｓ１８では、ＣＰＵ３２は、Ｓ１４で生成された二値画像データに対する９０度の回転処理を実行して、回転済み画像データを生成する。
【００２３】
Ｓ２０では、ＣＰＵ３２は、Ｓ１８で生成された回転済み画像データに対するバーコード処理を実行する。Ｓ２０では、ＣＰＵ３２は、二値画像１２０Ａ等の長辺が伸びる方向に沿って並ぶ複数個の画素によって構成される画素グループを１本のラインとして扱って処理を実行する。この場合、ＣＰＵ３２は、二値画像１２０Ｂに含まれるバーコード画像を特定することができるが、二値画像１２０Ａに含まれるバーコード画像を特定することができない。
【００２４】
本実施例では、Ｓ１６のみならず、Ｓ１８及びＳ２０が実行されるので、原稿内でのバーコードの向きに関わらず、バーコード画像を適切に特定することができる。なお、変形例では、Ｓ１６でバーコード画像が特定されたら、Ｓ１８及びＳ２０が実行されなくてもよい。Ｓ２０が終了すると、図２の処理が終了する。
【００２５】
（バーコード処理；図３）
図３を参照して、図２のＳ１６又はＳ２０のバーコード処理の内容を説明する。Ｓ３０では、ＣＰＵ３２は、処理対象のライン（以下では「対象ライン」と呼ぶ）のＹ座標ｊを「０」に設定する。ラインは、二値画像１２０の左右方向（即ちＸ方向）に沿って並ぶ複数個の画素によって構成される画素グループである。図２のＳ１６では、二値画像１２０の短辺が伸びる方向がＸ方向であり、Ｓ２０では、二値画像１２０の長辺が伸びる方向がＸ方向である。図３の二値画像１２０では、実線の輪郭を有する領域、実線の輪郭を有さない領域が、それぞれ、ＯＮ画素、ＯＦＦ画素である。この点は、図４以降でも同様である。
【００２６】
Ｓ４０では、ＣＰＵ３２は、対象ラインを解析して連結情報をメモリ３４内に生成する（図４参照）。連結情報は、対象ラインを含む連続する１本以上のラインに存在する太バーの候補を表わす領域を示す情報である。
【００２７】
Ｓ５０では、ＣＰＵ３２は、生成済みの１個以上の連結情報の中から１個の連結情報（以下では「対象連結情報」と呼ぶ）を選択する。なお、ＣＰＵ３２は、メモリ３４内に１個の連結情報も存在しない状況では、Ｓ５０〜Ｓ８０をスキップする。
【００２８】
Ｓ５２では、ＣＰＵ３２は、対象連結情報が所定条件を満たすのか否かを判断する。ＣＰＵ３２は、対象連結情報が所定条件を満たすと判断する場合（Ｓ５２でＹＥＳ）には、Ｓ６０に進み、対象連結情報が所定条件を満たさないと判断する場合（Ｓ５２でＮＯ）には、Ｓ６０〜Ｓ６８をスキップしてＳ７０に進む。
【００２９】
Ｓ６０では、ＣＰＵ３２は、対象連結情報を利用して、二値画像１２０のうちの一部であるバーコード画像を特定する（図６参照）。
【００３０】
Ｓ６２では、ＣＰＵ３２は、Ｓ６０で特定されたバーコード画像を利用して、デコード処理を試行する。デコード処理は、バーコード画像に含まれる複数本のバーから文字、記号等の組合せ（以下では「データ列」と呼ぶ）を特定するための処理である。ＣＰＵ３２は、まず、バーコード画像から、各バーの幅（即ち連続するＯＮ画素の個数）と、２本のバーの間の各空白の幅（即ち連続するＯＦＦ画素の個数）と、を特定する。そして、ＣＰＵ３２は、ドライバプログラム３６がサポートしている複数規格のそれぞれについて、特定済みの各バーの幅と特定済みの各空白の幅とを利用して、数字、アルファベット、記号等を特定することを試行する。例えば、ＪＡＮコード又はＥＡＮコードでは、２本のバーの組合せが０〜９の数字のいずれかを示す。ＣＰＵ３２は、２本のバーのそれぞれの幅と、当該２本のバーの間の空白の幅と、に基づいて、当該２本のバーによって示される数字を特定する。ＣＰＵ３２は、複数本のバーから２個以上の数字によって構成されるデータ列を特定することを試行する。また、例えば、ＣＯＤＥ１２８では、３本のバーの組合せが、０〜９の数字、Ａ〜Ｕのアルファベット、及び、「！」，「％」等の記号のいずれかを示す。ＣＰＵ３２は、３本のバーのそれぞれの幅と、当該３本のバーの間の２個の空白のそれぞれの幅と、に基づいて、当該３本のバーによって示される数字等を特定する。ＣＰＵ３２は、複数本のバーから２個以上の数字、アルファベット、記号等によって構成されるデータ列を特定することを試行する。ＣＰＵ３２は、ドライバプログラム３６がサポートしている複数規格のそれぞれについて、当該規格に従ったデコード処理を順次実行する。
【００３１】
Ｓ６４では、ＣＰＵ３２は、Ｓ６２のデコード処理が成功したのか否かを判断する。具体的には、ＣＰＵ３２は、上記の複数規格のうちのある規格に従ったデコード処理において、全てのバーを利用してデータ列が得られる場合には、デコード処理が成功したと判断し（Ｓ６４でＹＥＳ）、当該データ列を利用した出力処理を実行して、Ｓ６６に進む。ここで、出力処理は、例えば、当該データ列によって示されるメモリ３４内のフォルダにスキャンデータ１１０を格納する処理、当該データ列によって示される情報（例えば患者の情報）とスキャンデータ１１０とをメモリ３４内の他のアプリケーション（例えば医療用アプリケーション）に出力する処理、当該データ列によって示される宛先（例えばＬＡＮ内の他の機器）にスキャンデータ１１０を送信する処理等を含む。一方、ＣＰＵ３２は、上記の複数規格に従ったいずれのデコード処理においても、少なくとも一部のバーから数字等が得られなかった場合には、デコード処理が失敗したと判断し（Ｓ６４でＮＯ）、Ｓ６６をスキップしてＳ６８に進む。
【００３２】
なお、変形例では、Ｓ６２のデコード処理が実行されなくてもよい。この場合、ＣＰＵ３２は、例えば、バーコード画像を表わす画像データをメモリ３４内の所定のフォルダに格納してもよいし、当該画像データを外部に送信してもよいし、当該画像データを他のアプリケーションに出力してもよいし、当該画像データを所定のファイル内の所定の位置に貼り付けてもよい。本実施例及び上記の変形例のいずれも、バーコード画像に関係する出力処理である。
【００３３】
Ｓ６６では、ＣＰＵ３２は、二値画像１２０の中からＳ６０で特定されたバーコード画像を削除する。具体的には、ＣＰＵ３２は、二値画像１２０の中から、バーコード画像を構成する各画素のうちのＯＮ画素をＯＦＦ画素に変更する。仮に、バーコード画像に対するデコード処理が成功した後に、当該バーコード画像を削除しなければ、現在の対象ラインよりも後の対象ラインに対応するＳ４０〜Ｓ６０において、当該バーコード画像が再び特定され得る。そして、当該バーコード画像に対するデコード処理（Ｓ６２）が再び実行され得る。これに対し、本実施例では、Ｓ６６においてバーコード画像を削除するので、当該バーコード画像が再び特定されることを抑制することができ、この結果、処理負荷を軽減させることができる。
【００３４】
Ｓ６８では、ＣＰＵ３２は、まず、対象連結情報を削除する。これにより、対象連結情報に対応する太バーに基づいてバーコード画像が特定された後に、同じ連結情報に基づいて同じバーコード画像が特定されることを抑制することができる。ＣＰＵ３２は、さらに、Ｓ６０で特定されたバーコード画像を構成する他の太バーに対応する連結情報内の後述のデコードフラグを「ＯＦＦ」から「ＯＮ」に変更する。これにより、対象連結情報に対応する太バーに基づいてバーコード画像が特定された後に、他の太バーに対応する連結情報に基づいて当該バーコード画像が再び特定されることを抑制することができる。この点については、後で再び説明する。
【００３５】
Ｓ７０では、ＣＰＵ３２は、Ｓ５０でメモリ３４内の全ての連結情報を選択したのか否かを判断する。ＣＰＵ３２は、全ての連結情報を選択していない場合（Ｓ７０でＮＯ）には、Ｓ５０に戻って他の連結情報を選択し、Ｓ５２〜Ｓ６８を再び実行する。一方、ＣＰＵ３２は、全ての連結情報を選択した場合（Ｓ７０でＹＥＳ）には、Ｓ８０において、不要な連結情報を削除する処理（図１０参照）を実行する。
【００３６】
Ｓ９０では、ＣＰＵ３２は、二値画像１２０を構成する全てのラインに対する処理が終了したのか否かを判断する。ＣＰＵ３２は、全てのラインに対する処理が終了していない場合（Ｓ９０でＮＯ）には、Ｓ９２において、処理対象のラインのＹ座標ｊをインクリメントして、新たな対象ラインに対応するＳ４０以降の各処理を再び実行する。一方、ＣＰＵ３２は、全てのラインに対する処理が終了した場合（Ｓ９０でＹＥＳ）には、図３の処理を終了する。
【００３７】
（連結情報生成処理；図４）
図４を参照して、図３のＳ４０の連結情報生成処理の内容を説明する。Ｓ１００では、ＣＰＵ３２は、対象ラインを利用して、対象ライン情報を生成する。対象ライン情報は、左から順に、連続するＯＮ画素の個数と、連続するＯＦＦ画素の個数と、が交互に並ぶ数字配列を示す。ＣＰＵ３２は、対象ラインを左側から右側に向かって走査して、連続するＯＮ画素の個数及び連続するＯＦＦ画素の個数を順次特定する。そして、ＣＰＵ３２は、特定済みの各個数を含む数字配列を示す対象ライン情報を決定する。なお、対象ラインを構成する最も左側の画素（即ち「ｉ＝０」に対応する画素）がＯＦＦ画素である場合には、ＣＰＵ３２は、対象ライン情報を構成する最も左の数字（即ち、連続するＯＮ画素の個数）として「０」を特定する。
【００３８】
例えば、図４の二値画像１２０では、「ｊ＝０」に対応する対象ラインはＯＦＦ画素のみによって構成されるので、ＣＰＵ３２は、対象ライン情報として数字配列（０，Ｌ（Ｌは対象ラインを構成する全画素数））を生成する。また、例えば、「ｊ＝５」に対応する対象ラインは、左から順に、０個のＯＮ画素、５個のＯＦＦ画素、２個のＯＮ画素、２個のＯＦＦ画素・・・を含む。このために、ＣＰＵ３２は、対象ライン情報として数字配列（０，５，２，２，２，２，６，４，２・・・）を生成する。
【００３９】
Ｓ１１０では、ＣＰＵ３２は、Ｓ１００で生成された対象ライン情報から１個の配列グループを選択する。配列グループは、対象ライン情報に含まれる複数個の数字のうちの連続する５個の数字を示すグループであって、ＯＮ画素に対応する数字を最も左側の数字として含むグループである。例えば、ＣＰＵ３２は、「ｊ＝５」に対応する対象ライン情報（０，５，２，２，２，２，６，４，２・・・）を生成する場合には、１回目のＳ１１０において、配列グループ（０，５，２，２，２）を選択する。そして、ＣＰＵ３２は、２回目のＳ１１０（即ち、後述のＳ１３０でＮＯを経たＳ１１０）において、配列グループ（２，２，２，２，６）を選択し、３回目のＳ１１０において、配列グループ（２，２，６，４，２）を選択する。なお、ＣＰＵ３２は、５個未満の数字によって構成される対象ライン情報（例えば「ｊ＝０」に対応する対象ライン情報）を生成する場合には、Ｓ１１０〜Ｓ１３０をスキップして、図４の処理を終了する。
【００４０】
Ｓ１１２では、ＣＰＵ３２は、Ｓ１１０で選択された配列グループの中に太バー候補が存在するのか否かを判断する。特に、ＣＰＵ３２は、選択済みの配列グループのうちの中央の値に対応する連続する１個以上のＯＮ画素（以下では「中央ＯＮ画素グループ」と呼ぶ）が、太バーを構成する画素グループの候補であるのか否かを判断する。具体的には、ＣＰＵ３２は、選択済みの配列グループから得られる３個のパラメータｎｃ，ｍｉｎ，ｍａｘが式（ａ）〜（ｃ）を満たすのか否かを判断する。ｎｃは、選択済みの配列グループのうちの中央の値、即ち、中央ＯＮ画素グループの画素数であり、例えば、配列グループ（２，２，６，４，２）のうちの「６」である。ｍｉｎ、ｍａｘは、それぞれ、選択済みの配列グループのうちの最小値、最大値である。
【００４１】
式（ａ）は、ｎｃ＝ｍｉｎである。上述したように、ＪＡＮ、ＥＡＮ等の様々な規格のバーコードが存在する。いずれの規格のバーコードでも、通常、バーコードは、１本以上の太バーと、１本以上の細バーと、２種以上の幅を有する２種以上の空白と、を含む。また、通常、細バーの幅と最小の空白の幅とは等しい。そして、バーコードにおいて、太バーと、当該太バーの両側の２本のバーと、当該太バーと当該２本のバーとの間の２個の余白と、が存在する特定の状況を想定する。このような状況では、通常、両側の２本のバーと上記の２個の余白とは、細バーと最小の空白とのうちの少なくとも一方を含む。従って、仮に、選択済みの配列グループが上記の特定の状況に相当するのであれば、中央ＯＮ画素グループの画素数ｎｃは、選択済みの配列グループのうちの最小値ｍｉｎよりも大きい。即ち、式（ａ）が満たされる場合には、ＣＰＵ３２は、選択済みの配列グループが上記の特定の状況に相当しない、即ち、中央ＯＮ画素グループが太バー候補でない、と判断する（Ｓ１１２でＮＯ）。
【００４２】
式（ｂ）は、ｎｃ／ｍｉｎ＜２である。いずれの規格のバーコードでも、通常、太バーの幅は、細バーの幅（即ち最小の空白の幅）の２倍以上である。従って、仮に、選択済みの配列グループが上記の特定の状況に相当するのであれば、中央ＯＮ画素グループの画素数ｎｃは、細バーの幅（即ち最小の空白の幅）に対応する画素数ｍｉｎの２倍以上になる。即ち、式（ｂ）が満たされる場合には、ＣＰＵ３２は、選択済みの配列グループが上記の特定の状況に相当しないと判断する（Ｓ１１２でＮＯ）。
【００４３】
式（ｃ）は、ｍａｘ／ｍｉｎ＞４である。いずれの規格のバーコードでも、通常、太バー又は最大の空白の幅は、細バーの幅（即ち最小の空白の幅）の４倍以下である。従って、仮に、選択済みの配列グループが上記の特定の状況に相当するのであれば、太バー又は最大の空白の幅に対応する画素数ｍａｘは、細バーの幅（即ち最小の空白の幅）に対応する画素数ｍｉｎの４倍以下になる。即ち、式（ｃ）が満たされる場合には、ＣＰＵ３２は、選択済みの配列グループが上記の特定の状況に相当しないと判断する（Ｓ１１２でＮＯ）。
【００４４】
ＣＰＵ３２は、式（ａ）〜（ｃ）のうちの少なくとも１つが満たされる場合には、選択済みの配列グループが上記の特定の状況に相当しない、即ち、中央ＯＮ画素グループが太バー候補でないと判断し（Ｓ１１２でＮＯ）、Ｓ１２０をスキップしてＳ１３０に進む。例えば、「ｊ＝５」に対応する対象ライン情報では、１回目の配列グループ（０，５，２，２，２）において、式（ｃ）が満たされるので（５／０＞４）、Ｓ１１２でＮＯと判断される。また、２回目の配列グループ（２，２，２，２，６）では、式（ａ）及び（ｂ）が満たされるので（２＝２、及び、２／２＜２）、Ｓ１１２でＮＯと判断される。一方、ＣＰＵ３２は、式（ａ）〜（ｃ）のいずれも満たされない場合には、配列グループが上記の特定の状況に相当する、即ち、中央ＯＮ画素グループが太バー候補である、と判断し（Ｓ１１２でＹＥＳ）、Ｓ１２０に進む。例えば、３回目の配列グループ（２，２，６，４，２）では、式（ａ）〜（ｃ）のいずれも満たされないので、Ｓ１１２でＹＥＳと判断される。本実施例では、複数規格のバーコードに共通する特徴（即ち各バーの幅の特徴）に整合する太バー候補を特定するので（即ちＳ１１２でＹＥＳ）、原稿がいずれの規格のバーコードを含んでいても、太バー候補を適切に特定することができる。
【００４５】
なお、変形例では、Ｓ１１２において、式（ａ）を利用しなくてもよい。式（ｂ）及び（ｃ）を利用すれば、通常、太バー候補が存在するのか否かを判断可能だからである。また、別の変形例では、式（ａ）〜（ｃ）とは異なる式が利用されてもよい。一般的に言うと、バーコードを構成する各バーの幅の特徴を利用した式が利用されればよい。
【００４６】
Ｓ１２０では、ＣＰＵ３２は、連結情報の生成又は更新を実行する。連結情報は、Ｓ１１２でＹＥＳと判断される中央ＯＮ画素グループ（以下では「候補グループ」と呼ぶ）に関係する情報であり、特に、複数個の候補グループをＹ方向に連結する（換言すると関連付ける）ための情報である。ＣＰＵ３２は、今回の対象ラインから特定された候補グループと、過去の対象ラインから特定されたいずれかの候補グループと、を連結不可能である場合には、今回の候補グループを含む新たな連結情報を生成する。一方、ＣＰＵ３２は、連結可能である場合には、過去の候補グループを含む連結情報が生成済みであるので、今回の候補グループの内容に従って当該連結情報を更新する。
【００４７】
Ｓ１３０では、ＣＰＵ３２は、対象ライン情報に含まれる全ての配列グループをＳ１１０で選択したのか否かを判断する。ＣＰＵ３２は、全ての配列グループを選択していない場合（Ｓ１３０でＮＯ）には、Ｓ１１０に戻り、新たな配列グループを選択し、全ての配列グループを選択した場合（Ｓ１３０でＹＥＳ）には、図４の処理を終了する。
【００４８】
（連結情報の生成又は更新；図５）
続いて、図５を参照して、図４のＳ１２０の処理の内容を説明する。連結情報は、複数個のパラメータＰ１〜Ｐ７を含む。Ｐ１は、１個以上の候補グループのうちの最上の候補グループの中心座標である。Ｐ２は、連結済みの候補グループの個数（以下では「Ｙ方向の連結数」と呼ぶ）である。Ｐ３は、今回の候補グループの左端座標である。Ｐ４は、今回の候補グループの画素数である。Ｐ５は、「ＯＮ」又は「ＯＦＦ」を示すデコードフラグである。「ＯＮ」は、当該デコードフラグを含む連結情報を利用したデコード処理（図３のＳ６２）が実行されたことを示し、ＯＦＦは、当該デコード処理が実行されていないことを示す。Ｐ６は、後述の図１０の処理でインクリメントされ得る余白数である。Ｐ７は、前回の候補グループに対する今回の候補グループの傾きである。
【００４９】
図５の二値画像１２０において、「ｊ＝５」に対応する対象ラインから今回の候補グループが特定される状況を想定する。この場合、「ｊ＝４」に対応する対象ラインにおいて、今回の候補グループを連結可能な候補グループが存在しない。このために、Ｓ１２０では、新たな連結情報が生成される。当該連結情報は、Ｐ１＝（１６，５）、Ｐ２＝１、Ｐ３＝１３、Ｐ４＝６、Ｐ５＝ＯＦＦ、Ｐ６＝０、及び、Ｐ７＝０を含む。次いで、「ｊ＝６」に対応する対象ラインから今回の候補グループが特定される場合には、今回の候補グループと前回の候補グループとが隣接するので、それらを連結可能である。従って、Ｓ１２０では、今回の候補グループに従って連結情報が更新される。具体的には、Ｐ２＝１からＰ２＝２に更新される（下線参照）。同様に、「ｊ＝７」〜「ｊ＝９」に対応する各対象ラインから各候補グループが特定される場合にも、Ｐ２が更新される。この結果、Ｐ２＝５になる（下線参照）。
【００５０】
次いで、「ｊ＝１０」に対応する対象ラインから今回の候補グループが特定される場合には、今回の候補グループと前回の候補グループとが隣接するので、それらを連結可能である。従って、Ｓ１２０では、今回の候補グループに従って連結情報が更新される。ただし、今回の候補グループの左端座標は、前回の候補グループの左端座標よりも左側に存在する。これは、スキャン画像１１２内で太バー（即ちバーコード）が傾いていることを意味する。この例では、Ｐ２＝５からＰ２＝６に更新され、Ｐ３＝１３からＰ３＝１２に更新され、Ｐ７＝０からＰ７＝−１に更新される（下線参照）。ここで、傾きＰ７は、現在の対象ラインの一つ前の対象ライン（例えばｊ＝９）において特定されたＰ３（例えば１２）から、現在の対象ライン（例えばｊ＝１０）において特定されたＰ３（例えば１３）を減算することによって得られる値である。また、変形例では、傾きＰ７は、数式「｛（Ｐ３＋Ｐ４／２）−（Ｐ１のＸ座標）｝／（ｊ−Ｐ１のＹ座標）」によって算出される値であってもよい。例えば、「ｊ＝１０」に対応する連結情報では、Ｐ７は、｛（１２＋６／２）−１６｝／（１０−５）＝−１／５である。
【００５１】
上述したように、ＣＰＵ３２は、図３のＳ５０において、生成済みの１個以上の連結情報の中から対象連結情報を選択し、Ｓ５２において、対象連結情報が所定条件を満たすのか否かを判断する。所定条件は、対象連結情報内のデコードフラグＰ５がＯＦＦを示し、かつ、対象連結情報内のＹ方向の連結数Ｐ２が予め決められている閾値Ｔｈ（例えば１０）以上であることである。仮に、対象連結情報が太バーを示す場合には、Ｙ方向の連結数Ｐ２が順次大きくなり、この結果、Ｓ５２でＹＥＳと判断されて、Ｓ６０に進む。一方、対象連結情報が太バー以外のオブジェクト（例えば文字等）を示す場合には、Ｙ方向の連結数Ｐ２が小さな値から更新されない。この場合、Ｓ５２でＮＯと判断されて、Ｓ６０〜Ｓ６８が実行されない。即ち、太バー以外のオブジェクトについて、Ｓ６０〜Ｓ６８が実行されないので、処理負荷が軽減される。
【００５２】
（バーコード画像特定処理；図６）
図６を参照して、図３のＳ６０のバーコード画像特定処理の内容を説明する。図６の二値画像１２０では、「ｊ＝１４」に対応するラインが現在の対象ラインであり、対象連結情報が示す複数個の候補グループが実線のＯＮ画素グループとして示されている。そして、対象連結情報内の連結数Ｐ２が閾値Ｔｈである１０に到達したので、図３のＳ５２において所定条件が満たされたと判断される。
【００５３】
Ｓ２００では、ＣＰＵ３２は、まず、対象ラインの１つ下のライン（例えば「ｊ＝１５」に対応するライン）から、連結済みの複数個の候補グループのうちの最下の候補グループ２５０に隣接する１個以上のＯＮ画素２６０を特定する。ここで特定される１個以上のＯＮ画素（以下では「隣接グループ」と呼ぶ）は、図４のＳ１１２でＹＥＳと判断されるものでなくてもよい。即ち、ＣＰＵ３２は、Ｓ１１２の判断を実行することなく、隣接グループ２６０を特定する。図６の例では、隣接グループ２６０が破線のＯＮ画素グループとして示されている。次いで、ＣＰＵ３２は、対象ラインの２つ下のライン（例えば「ｊ＝１６」に対応するライン）から、特定済みの隣接グループ２６０に隣接する１個以上のＯＮ画素である新たな隣接グループ２６２を特定する。ＣＰＵ３２は、隣接グループに隣接する新たな隣接グループが存在しなくなるまで、上記の処理を繰り返す。図６の例では、「ｊ＝１５」〜「ｊ＝１９」に対応する各ラインから隣接グループ２６０〜２６８が特定され、「ｊ＝２０」に対応するラインから隣接グループが特定されない。ＣＰＵ３２は、Ｓ２００の処理を実行することによって、連結済みの複数個の候補グループに対して、さらに、１個以上の隣接グループを連結する（即ち関連付ける）ことができる。複数個の候補グループと１個以上の隣接グループとの組合せは、太バーを構成するＯＮ画素グループを表わし、以下では、当該組合せのことを「太バーグループ（符号２００参照）」と呼ぶ。ＣＰＵ３２は、図４のＳ１１２の判断を実行することなく、隣接グループ２６０〜２６８を特定するので、太バーグループ２００を迅速に特定することができる。なお、ＣＰＵ３２は、１個の隣接グループも特定不可能である場合には、Ｓ２００を実行せずにＳ２０２に進む。
【００５４】
Ｓ２０２では、ＣＰＵ３２は、まず、太バーグループ２００を構成する最下の隣接グループ２６８の中心座標Ｐ８（図６の例では（１４，２０））を特定する。そして、ＣＰＵ３２は、対象連結情報内の座標Ｐ１（即ち最上の候補グループの中心座標）と、特定済みの座標Ｐ８と、を結ぶ線分の傾きを特定する。ここで特定される傾きは、スキャン画像１１２内において太バーが伸びる方向を示す。図６の例では、太バーが伸びる方向が二値画像１２０のＹ方向に一致しない。このように太バーが傾く原因として、以下の２個の原因が考えられる。１個目の原因は、印刷媒体に対してバーコードが傾いて印刷された結果として原稿が生成されることである。２個目の原因は、原稿内でバーコードが傾いていないが、原稿が傾いた状態で原稿の読取りが実行されることである。具体的には、スキャナ５０の透明板に対して原稿が傾いて載置される場合、又は、原稿が傾いた状態でスキャナ５０の自動原稿搬送機構によって原稿が搬送される場合には、原稿が傾いた状態で原稿の読取りが実行される。
【００５５】
Ｓ２１０では、ＣＰＵ３２は、Ｓ２０２で特定された座標Ｐ８及び傾きを利用して、基準ラインを特定する。図７を参照して、基準ラインについて説明する。ハッチングが付された矩形及び黒塗りの矩形は、基準ラインを構成するＯＮ画素を示し、白丸及び黒丸は、基準ラインを構成するＯＦＦ画素を示す。ＣＰＵ３２は、まず、太バーグループ２００を構成する複数個の候補グループのうちの最下の候補グループ（例えば図６の候補グループ２５０）のうち、座標Ｐ１と座標Ｐ８とを結ぶ線分と交差するＯＮ画素を基準画素ＢＰとして特定する。そして、ＣＰＵ３２は、基準画素ＢＰを通過する基準ラインであって、Ｓ２０２で特定された傾きに直交する傾きを有する基準ラインを特定する。基準ラインが伸びる方向（以下では「基準方向」と呼ぶ）は、バーコードの各バーが伸びる方向に直交する方向、即ち、バーコードの左右方向を意味する。
【００５６】
図６のＳ２１２では、ＣＰＵ３２は、Ｓ２１０で特定された基準ラインを利用して、基準余白数を決定する。図７を参照して、基準余白数について説明する。ＣＰＵ３２は、まず、基準ライン上の基準画素ＢＰを含むＯＮ画素グループの画素数（図７の例では６個）を特定する。次いで、ＣＰＵ３２は、特定済みのＯＮ画素グループの左側において、特定済みのＯＮ画素グループに隣接する基準ライン上のＯＦＦ画素グループの画素数（図７の例では２個）を特定する。そして、ＣＰＵ３２は、特定済みのＯＦＦ画素グループの左側において、特定済みのＯＦＦ画素グループに隣接する基準ライン上のＯＮ画素グループの画素数（図７の例では２個）を特定する。また、ＣＰＵ３２は、基準画素ＢＰを含むＯＮ画素グループの右側についても、同様に、ＯＦＦ画素グループの画素数及びＯＮ画素グループの画素数（図７の例では４個及び２個）を特定する。
【００５７】
次いで、ＣＰＵ３２は、特定済みの５個の数字（図７の例では左側から順に２，２，６，４，２）のうちの最小値（即ち２）を特定する。上述したように、バーコードにおいて、太バーと、当該太バーの両側の２本のバーと、当該太バーと当該２本のバーとの間の２個の余白と、が存在する特定の状況では、通常、両側の２本のバーと上記の２個の余白とは、細バーと最小の空白とのうちの少なくとも一方を含む。そして、通常、細バーの幅と最小の空白の幅とは等しい。従って、ここで特定される最小値は、バーコードを構成する細バー（即ち最小の空白）の幅に相当する画素数である。そして、ＣＰＵ３２は、上記の最小値に所定値（例えば７）を乗算することによって、基準余白数（例えば１４）を決定する。上記の所定値は、基準余白数が示す長さが、バーコードに含まれ得る最大の余白の幅よりも大きくなる値に予め設定されている。原稿は、通常、バーコードの左右両側に余白を含む。基準余白数は、当該余白を探索するためのパラメータである。即ち、基準余白数以上の長さを有する余白は、バーコードを構成する２本のバーの間の余白ではなく、バーコードの両側に存在する余白である。そして、バーコードの左右両側の余白を見つけることができれば、バーコードの左端及び右端の位置を特定することができる。
【００５８】
図６のＳ２１４では、ＣＰＵ３２は、Ｓ２１０で特定された基準ラインと、Ｓ２１２で決定された基準余白数と、を利用して、バーコードの両端座標を特定する。図７を参照して、この処理の内容について説明する。ＣＰＵ３２は、太バーグループ２００の左側及び右側のそれぞれにおいて、基準余白数以上の画素数（図７の例では１４）を有する余白領域（即ちＯＦＦ画素グループ）を基準ライン上で探索する。図７の例では、ＣＰＵ３２は、左側の余白領域及び右側の余白領域のそれぞれを見つけることができる。そして、ＣＰＵ３２は、見つかった左側の余白領域の右側において、当該余白領域に隣接する基準ライン上のＯＮ画素を、バーコードの左端を構成する左端画素ＣＬとして特定する。また、ＣＰＵ３２は、見つかった右側の余白領域の左側において、当該右側の余白領域に隣接する基準ライン上のＯＮ画素を、バーコードの右端を構成する右端画素ＣＲとして特定する。即ち、ＣＰＵ３２は、左端画素ＣＬ及び右端画素ＣＲを特定することによって、バーコードの左右の端部位置を特定することができる。なお、変形例では、ＣＰＵ３２は、見つかった左側の余白領域のうちの最も右側のＯＦＦ画素と、見つかった右側の余白領域のうちの最も左側のＯＦＦ画素と、を特定してもよい。一般的に言うと、ＣＰＵ３２は、バーコードと余白領域との間の境界位置を特定すればよい。
【００５９】
例えば、バーコードが原稿の左端又は右端に近い位置に存在する場合には、バーコードの左側又は右側に大きな余白が存在しない可能性がある。例えば、図８の例では、原稿の左端とバーコードの左端とが近接することに起因して、太バーグループ２００の左側には、基準余白数未満の４個のＯＦＦ画素によって構成される小さな余白領域しか存在しない。この場合、ＣＰＵ３２は、基準余白数以上の画素数を有する余白領域が存在しないにも関わらず、上記の小さな余白領域の右側において、当該小さな余白領域に隣接する基準ライン上のＯＮ画素を左端画素ＣＬとして特定する。具体的には、ＣＰＵ３２は、まず、太バーグループ２００の左側において、基準余白数以上の画素数を有する余白領域が基準ライン上に存在しないと判断する。この場合、ＣＰＵ３２は、さらに、基準ライン上における二値画像１２０の左端と、基準ライン上の最も左側に存在するＯＮ画素ＣＬと、の間の距離（この例では４画素）が、所定距離（例えば１０画素）未満であるのか否かを判断する。ＣＰＵ３２は、上記の距離が所定距離未満であると判断する場合には、原稿の左端とバーコードの左端とが近接することに起因して、小さな余白領域しか存在しないと判断して、左端画素ＣＬを特定する。
【００６０】
図示省略しているが、原稿の右端とバーコードの右端とが近接することに起因して、太バーグループ２００の右側に小さな余白領域しか存在しない場合にも、同様に、右端画素ＣＲが特定される。このように、ＣＰＵ３２は、原稿の端とバーコードの端とが近接することに起因して、小さな余白領域しか存在しない場合でも、バーコードの端部位置を適切に特定することができる。なお、変形例では、ＣＰＵ３２は、二値画像１２０の端を考慮しなくてもよい。即ち、ＣＰＵ３２は、小さな余白領域しか存在しない場合に、左端画素ＣＬ又は右端画素ＣＲを特定せず、バーコード画像を特定しなくてもよい。
【００６１】
図６のＳ２１６では、ＣＰＵ３２は、Ｓ２１４で特定された左端画素ＣＬから、左側に所定長さ（例えば３画素）だけ離れた基準ライン上の画素を特定する。これは、バーコードの左端位置を左側に拡大した位置を特定することに等しい。従って、ここで特定される画素のことを「拡大左端画素ＥＬ」（図７、図８参照）と呼ぶ。同様に、ＣＰＵ３２は、Ｓ２１４で特定された右端画素ＣＲから、右側に上記の所定長さだけ離れた基準ライン上の画素を、拡大右端画素ＥＲ（図７、図８参照）として特定する。このように拡大された画素ＥＬ，ＥＲを特定することによって、次のＳ２２０の処理において、バーコードの左端及び右端を確実に含むバーコード画像を特定することができる。なお、変形例では、ＣＰＵ３２は、拡大された画素ＥＬ，ＥＲを特定せずに、左端画素ＣＬ及び右端画素ＣＲを利用して、バーコード画像を特定してもよい。
【００６２】
Ｓ２２０では、ＣＰＵ３２は、特定済みの４個の座標Ｐ１，Ｐ８，ＥＬ，ＥＲと、Ｓ２０２で特定された傾きと、を利用して、バーコード画像を特定する。図９を参照して、この処理の内容を説明する。ＣＰＵ３２は、まず、二値画像１２０から、４個の座標Ｐ１，Ｐ８，ＥＬ，ＥＲによって画定される矩形形状を有する領域を特定する。そして、ＣＰＵ３２は、上記の傾きが、バーコードが傾いていることを示す値である場合、即ち、Ｐ１のＸ座標とＰ８のＸ座標とが一致しない場合には、特定済みの領域を上記の傾きに応じて回転させることによって、各バーが伸びる方向とＹ方向とが一致するバーコード画像ＢＩを生成する。なお、ＣＰＵ３２は、上記の傾きが、バーコードが傾いていないことを示す値である場合、即ち、Ｐ１のＸ座標とＰ８のＸ座標とが一致する場合には、特定済みの領域を回転させることなく、特定済みの領域をバーコード画像ＢＩとして決定する。Ｓ２２０が終了すると、図６の処理が終了する。
【００６３】
上述したように、ＣＰＵ３２は、図３のＳ６０においてバーコード画像ＢＩを特定すると、バーコード画像ＢＩのデコード、削除等を実行し得る（Ｓ６２，Ｓ６６）。図９は、バーコード画像ＢＩが削除された後の二値画像１２０を示す。これにより、同じバーコード画像ＢＩが再び特定されることが抑制される。このために、処理負荷を軽減させることができる。
【００６４】
また、図３のＳ６８では、ＣＰＵ３２は、対象連結情報を削除し、さらに、フラグ変更処理を実行する。フラグ変更処理では、ＣＰＵ３２は、バーコード画像ＢＩが２個以上の太バーグループを含む場合、即ち、バーコード画像ＢＩが、対象連結情報が示す太バーグループとは異なる太バーグループを含む場合には、当該異なる太バーグループを示す連結情報内のデコードフラグＰ５を「ＯＦＦ」から「ＯＮ」に変更する。例えば、図７又は図８では、対象連結情報が示す太バーグループ２００とは異なる太バーグループ２１０が存在する。そして、図３のＳ４０では、２個の太バーグループ２００，２１０を示す２個の連結情報が生成済みである。ＣＰＵ３２は、Ｓ６８において、対象連結情報を削除することによって、太バーグループ２００に関係する処理が継続されることを抑制し、さらに、太バーグループ２１０を示す連結情報内のデコードフラグＰ５を「ＯＦＦ」から「ＯＮ」に変更する。これにより、太バーグループ２１０を示す連結情報についてＳ５２でＮＯと判断されるので、太バーグループ２１０に基づいてバーコード画像ＢＩが再び特定されることが抑制される。このために、処理負荷を軽減させることができる。なお、変形例では、連結情報はデコードフラグＰ５を含んでいなくてもよく、Ｓ６８が実行されなくてもよい。
【００６５】
（連結情報削除処理；図１０）
図１０を参照して、図３のＳ８０の連結情報削除処理の内容を説明する。この処理は、Ｓ６８で削除されない連結情報、即ち、太バー以外のオブジェクト（例えば文字等）を示す連結情報を削除するための処理である。
【００６６】
Ｓ３００では、ＣＰＵ３２は、メモリ３４内の１個以上の連結情報の中から１個の連結情報（以下では「特定連結情報」と呼ぶ）を選択する。なお、ＣＰＵ３２は、メモリ３４内に１個の連結情報も存在しない状況では、Ｓ３１０〜Ｓ３４０をスキップして、図１０の処理を終了する。
【００６７】
Ｓ３１０では、ＣＰＵ３２は、現在の対象ラインに対応する図３のＳ４０の処理を実行した際に、特定連結情報の生成又は更新が実行されたのか否かを判断する。特定連結情報の生成又は更新が実行されなかったということは、特定連結情報において、新たな候補グループが連結されなかったことを意味する。例えば、図１０の二値画像１２０では、「ｊ＝１１」に対応するラインが現在の対象ラインであり、対象ラインは、「ｊ＝１０」に対応する候補グループ３００に隣接するＯＮ画素を含んでいない。例えば、バーコードが印刷される際にバーコードの一部が適切に印刷されずに、太バーの一部が欠落している原稿が生成され得る。このような事象に起因して、候補グループ３００に新たな候補グループが連結されないことが起こり得る。ＣＰＵ３２は、特定連結情報の生成又は更新が実行されたと判断する場合（Ｓ３１０でＹＥＳ）には、Ｓ３２０〜Ｓ３３２をスキップしてＳ３４０に進み、特定連結情報の生成又は更新が実行されなかったと判断する場合（Ｓ３１０でＮＯ）には、Ｓ３２０に進む。
【００６８】
Ｓ３２０では、ＣＰＵ３２は、特定連結情報内の余白数Ｐ６をインクリメントする。次いで、Ｓ３２２では、ＣＰＵ３２は、特定連結情報内の連結数Ｐ２をインクリメントする。これらの処理によって、図１０の例では、余白数Ｐ６、連結数Ｐ２が、それぞれ、「１」、「７」にインクリメントされる。また、Ｓ３２２では、ＣＰＵ３２は、必要に応じて、特定連結情報内の左端座標Ｐ３を変更する。具体的には、ＣＰＵ３２は、実際には連結されないが、特定連結情報内の傾きＰ７に応じた仮想の候補グループ３１０が候補グループ３００に連結されると仮定する。仮想の候補グループ３１０は、特定連結情報内の画素数Ｐ４に一致する画素数を有する。図１０の例では、仮想の候補グループ３１０は、Ｘ印によって示される６個のＯＦＦ画素によって構成される。なお、仮想の候補グループ３１０は、ＯＦＦ画素のみによって構成されなくてもよく、ＯＮ画素を含んでいてもよい。傾きＰ７が「−１」を示すので、ＣＰＵ３２は、候補グループ３００よりも左側に位置する仮想の候補グループ３１０を決定する。この場合、ＣＰＵ３２は、特定連結情報内の左端座標Ｐ３を「１２」から「１１」に変更する。
【００６９】
Ｓ３３０では、ＣＰＵ３２は、Ｓ３２０でインクリメントされた余白数Ｐ６が閾値（例えば３）以上であるのか否かを判断する。ＣＰＵ３２は、余白数Ｐ６が閾値以上であると判断する場合（Ｓ３３０でＹＥＳ）には、Ｓ３３２において、特定連結情報を削除し、Ｓ３３４に進む。余白数Ｐ６が閾値以上であるということは、特定連結情報が太バー以外のオブジェクトを示す可能性が高いからである。特定連結情報が削除されるので、以降の処理において、特定連結情報に関する処理（例えば、図４のＳ１２０の更新、図３のＳ５０及びＳ５２等）が実行されない。このために、処理負荷を軽減させることができる。一方、ＣＰＵ３２は、余白数Ｐ６が閾値未満であると判断する場合（Ｓ３３０でＮＯ）には、Ｓ３３２をスキップしてＳ３４０に進む。この場合、ＣＰＵ３２は、以降の処理において、特定連結情報に関する処理を継続する。
【００７０】
Ｓ３４０では、ＣＰＵ３２は、Ｓ３００で全ての連結情報を選択したのか否かを判断する。ＣＰＵ３２は、全ての連結情報を選択していない場合（Ｓ３４０でＮＯ）には、Ｓ３００に戻って他の連結情報を選択し、Ｓ３１０〜Ｓ３３２を再び実行する。一方、ＣＰＵ３２は、全ての連結情報を選択した場合（Ｓ３４０でＹＥＳ）には、図１０の処理を終了する。
【００７１】
図１０の例では、「ｊ＝１２」に対応するラインにおいて、仮想の候補グループ３１０に隣接する候補グループ３２０が存在する。従って、図４のＳ１１２において、ＣＰＵ３２は、候補グループ３２０を特定する場合には、候補グループ３２０が仮想の候補グループ３１０に連結されるように、連結情報を更新する。具体的には、ＣＰＵ３２は、連結数Ｐ２を「７」から「８」に変更し、左端座標Ｐ３を「１１」から「１２」に変更し、余白数Ｐ６を「１」から「０」に変更し、傾きＰ７を「−１」から「１」に変更する（「ｊ＝１２」に対応する下線参照）。そして、ＣＰＵ３２は、当該連結情報について、図３のＳ５２でＹＥＳと判断する場合には、当該連結情報に基づいて、バーコード画像を特定することができる。このように、ＣＰＵ３２は、バーコードを構成する太バーの一部が欠落している場合でも、バーコード画像を適切に特定することができる。なお、変形例では、ＣＰＵ３２は、Ｓ３１０でＮＯと判断する場合に、Ｓ３２０〜Ｓ３３０を実行せずに、Ｓ３３２において、特定連結情報を削除してもよい。
【００７２】
（実施例の効果）
本実施例によると、ＰＣ１０は、二値画像１２０の中から決定される太バーグループ２００の右側及び左側のそれぞれにおいて基準余白数以上の画素数を有する余白領域を探索することによって、バーコードの右側及び左側のそれぞれの端部位置である左端画素ＣＬ及び右端画素ＣＲを特定する（図７、図８参照）。そして、ＰＣ１０は、左端画素ＣＬ及び右端画素ＣＲを利用して、太バーグループ２００を含むバーコード画像ＢＩを特定する（図９参照）。従って、ＰＣ１０は、太バーグループ２００の左側及び右側のそれぞれにおいて、２本以上のバーによって構成されるガードバーのパターンマッチングを実行せずに済む。このために、バーコード画像ＢＩを特定するための処理時間を短縮することができる。
【００７３】
また、上述したように、ＪＡＮ、ＥＡＮ等の様々な規格のバーコードが知られている。各バーのパターンマッチングを実行してバーコード画像ＢＩが原稿画像内のどこに位置するのかを特定する手法を採用すると、原稿に含まれるバーコードの規格がわからない状態では、複数規格のバーコードに対応する複数種類のパターンマッチングのそれぞれを実行しなければならない。このために、バーコード画像ＢＩの位置を特定するための処理時間が長くなってしまう。これに対し、本実施例では、ＰＣ１０は、複数規格のバーコードに共通する特徴（即ち各バーの幅の特徴）に整合する太バー候補である候補グループを特定し（即ち図４のＳ１１２でＹＥＳ）、当該候補グループを含む太バーグループ２００を決定する（Ｓ１２０、図６のＳ２００）。このために、ＰＣ１０は、原稿がいずれの規格のバーコードを含んでいても、複数規格のバーコードに対応する複数種類のパターンマッチングを実行せずに、二値画像１２０内での太バーグループ２００の位置を迅速に特定することができる。そして、通常、バーコードの周囲には余白が存在するので、ＰＣ１０は、太バーグループ２００の右側及び左側のそれぞれにおいて余白領域を探索して、バーコードの右側及び左側のそれぞれの端部位置を特定する。従って、ＰＣ１０は、バーコード画像ＢＩの位置を特定するために、複数規格のバーコードのそれぞれに対応する処理を実行せずに済み、バーコード画像ＢＩの位置を特定するための処理時間を短縮することができる。この結果、ＰＣ１０は、バーコード画像ＢＩに関係する出力処理を迅速に実行することができる。
【００７４】
（対応関係）
ＰＣ１０が、「画像解析装置」の一例である。図２のＳ１４で生成される二値画像データ、二値画像１２０，１２０Ａ，１２０Ｂが、それぞれ、「対象画像データ」、「対象画像」の一例である。ＯＦＦ画素、全てのＯＦＦ画素によって構成される領域、ＯＮ画素、全てのＯＮ画素によって構成される領域が、それぞれ、「背景画素」、「背景領域」、「非背景画素」、「非背景領域」の一例である。二値画像１２０の左右方向（即ちＸ方向）、上下方向（即ちＹ方向）が、それぞれ、「第１方向」、「第２方向」の一例である。左側、右側、上側、下側が、それぞれ、「第１側」、「第２側」、「第３側」、「第４側」の一例である。基準ラインが伸びる方向である基準方向が、「特定方向」の一例である。図７の左側の余白領域、右側の余白領域が、それぞれ、「第１の余白領域」、「第２の余白領域」の一例である。図８の左側の小さな余白領域が、「部分背景領域」の一例である。左端画素ＣＬ、右端画素ＣＲが、それぞれ、「第１の端部位置」、「第２の端部位置」の一例である。
【００７５】
太バーが、「第１種の幅を有する１本のバー」の一例である。図４のＳ１１２でＹＥＳと判断される候補グループ（例えば図６の符号２５０）、図６のＳ２００で連結される隣接グループ２６０〜２６８、図６のＳ２００で決定される太バーグループ（例えば図７の２００）が、それぞれ、「第１種の部分候補領域」、「第２種の部分候補領域」、「バー候補領域」の一例である。図４のＳ１１２が、「存在判断処理」の一例である。図４のＳ１１２でＹＥＳと判断されることが、「２種以上の幅に関係する特徴に整合する」の一例である。ラインが、「ライン画素グループ」の一例である。図５において、「ｊ＝５」に対応するライン、当該ライン内の候補グループ、「ｊ＝６」に対応するライン、当該ライン内の候補グループが、それぞれ、「第１のライン画素グループ」、「前者の第１種の部分候補領域」、「第２のライン画素グループ」、「後者の第１種の部分候補領域」の一例である。連結情報において関連付けられている各候補グループが、「関連領域」の一例である。図７及び図８の太バーグループ２００、太バーグループ２１０が、それぞれ、「第１の関連領域」、「第２の関連領域」の一例である。図１０の仮想の候補グループ３１０が、「特定領域」の一例である。
【００７６】
図１０のＳ３３０の閾値、図３のＳ５２の閾値が、それぞれ、「第１の所定数」、「第２の所定数」の一例である。図４のＳ１１２の式（ｂ）で利用される値「２」、式（ｃ）で利用される値「４」が、それぞれ、「第１の所定値」、「第２の所定値」の一例である。図６で基準余白数を決定するための所定値（例えば図７の所定値＝７）が、「第３の所定値」の一例である。なお、これらの所定数及び所定値は、適宜変更可能である。
【００７７】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【００７８】
（変形例１）ＣＰＵ３２は、図４のＳ１１２で候補グループを特定する場合に、連結情報を生成しなくてもよい。この場合、ＣＰＵ３２は、特定済みの候補グループのＹ座標をバーコードの上端位置として決定し、特定済みの候補グループから下方向に所定数の画素だけ離れた位置をバーコードの下端位置として決定してもよい。そして、ＣＰＵ３２は、特定済みの候補グループの右側及び左側のそれぞれおいて余白領域を探索してもよい。一般的に言うと、「候補決定部」は、関連領域を決定しなくてもよい。
【００７９】
（変形例２）ＣＰＵ３２は、図３のＳ６４でバーコード画像のデコード処理が成功する場合に、それ以降の対象ラインに関する処理を実行せずに、図３の処理を終了してもよい。この場合、１個目の対象ラインからバーコード画像のデコード処理が成功した際の対象ラインまでの複数個のラインが、「ｊ個のライン画素グループ」の一例である。即ち、「ｊ個のライン画素グループ」は、二値画像１２０のＹ方向の全画素数よりも少ない個数の画素グループであってもよい。
【００８０】
（変形例３）ＣＰＵ３２は、図６のＳ２００の処理を実行せずに、図４のＳ１１２の判断及びＳ１２０の処理を実行して、太バーグループを特定してもよい。即ち、「候補決定部」は、第２種の部分候補領域を含む関連領域を決定しなくてもよい。
【００８１】
（変形例４）ＣＰＵ３２は、図６のＳ２０２において、太バーグループの傾きを特定しなくてもよく、Ｓ２１０において、太バーグループの傾きに直交する基準ラインを特定しなくてもよい。この場合、例えば、ＣＰＵ３２は、Ｓ２１０において、現在の対象ラインを基準ラインとして特定してもよい。この場合、二値画像１２０の左右方向が、「特定方向」の一例である。
【００８２】
（変形例５）図４のＳ１１２において、ＣＰＵ３２は、太バー候補に代えて細バー候補が存在するのか否かを判断してもよい。例えば、中央の値ｎｃ＝ｍｉｎである場合には、ＣＰＵ３２は、中央ＯＮ画素グループを細バー候補として決定してもよい。ＣＰＵ３２は、他の各処理においても太バーに代えて細バーを利用して、バーコード画像を特定してもよい。即ち、「第１種の幅」は、２種以上の幅のうちの第２種の幅よりも小さくてもよい。また、本変形例では、中央の値ｎｃ＝ｍｉｎである場合が、「２種以上の幅に関係する特徴に整合する」の一例である。
【００８３】
（変形例６）図６のＳ２１２において、ＣＰＵ３２は、予め決められている画素数（例えば２０画素）を基準余白数として決定してもよい。即ち、「閾値」は、第２種の幅に相当する長さに所定値を乗算することによって決定されなくてもよい。
【００８４】
（変形例７）図２〜図１０の各処理は、スキャナ５０によって実行されてもよく、Ｓ６２において、デコード結果がスキャナ５０からＰＣ１０に送信されてもよい。即ち、「画像解析装置」は、スキャナであってもよい。一般的に言うと、「画像解析装置」は、画像の解析を実行可能なあらゆる装置（例えば、多機能機、スマートフォン等）を含む。
【００８５】
（変形例８）上記の実施例では、ＰＣ１０のＣＰＵ３２がドライバプログラム３６（即ちソフトウェア）を実行することによって、図２〜図１０の各処理が実現される。これに代えて、図２〜図１０の各処理のうちの少なくとも１つの処理は、論理回路等のハードウェアによって実現されてもよい。
【００８６】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
以下は、出願時の特許請求の範囲に記載されていた事項である。
（項目１）
画像解析装置であって、
一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得部であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得部と、
前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定部と、
特定済みの前記バーコード画像に関係する出力処理を実行する出力部と、を備え、
前記特定部は、
前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定部であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定部と、
前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索部と、
前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定部と、を備え、
前記特定部は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する、画像解析装置。
（項目２）
前記対象画像は、第１方向に沿った２個以上の画素と、前記第１方向に直交する第２方向に沿った２個以上の画素と、を含む複数個の画素によって構成され、
前記複数個の画素は、前記原稿の背景を表わす背景画素と、前記原稿の背景以外を表わす非背景画素と、を含み、
前記特徴に整合する前記領域は、前記第１方向に沿って連続する１個以上の前記非背景画素によって構成される第１種の部分候補領域を含み、
前記複数個の画素は、前記第２方向に沿って並ぶｊ個（前記ｊは２以上の整数）のライン画素グループを含み、
前記候補決定部は、
前記ｊ個のライン画素グループのうちの第１のライン画素グループの中に前記第１種の部分候補領域が存在し、かつ、前記第１のライン画素グループに隣接する第２のライン画素グループの中に前記第１種の部分候補領域が存在し、かつ、前者の前記第１種の部分候補領域と後者の前記第１種の部分候補領域とが隣接する場合に、前者の前記第１種の部分候補領域と後者の前記第１種の部分候補領域とが関連付けられている関連領域を決定し、
前記関連領域を含む前記バー候補領域を決定する、項目１に記載の画像解析装置。
（項目３）
前記候補決定部は、
前記第２方向の第３側から第４側に向かって、前記ｊ個のライン画素グループのそれぞれについて、当該ライン画素グループの中に前記第１種の部分候補領域が存在するのか否かを判断する存在判断処理を順次実行し、
前記第２方向の前記第３側からｍ番目（ｍは１以上ｊ未満の各整数）のライン画素グループについての前記存在判断処理において、前記第１種の部分候補領域が存在すると判断される場合に、前記ｍ番目のライン画素グループ内の前記第１種の部分候補領域のみを含む前記関連領域を決定し、
前記第２方向の前記第３側から（ｍ＋１）番目のライン画素グループについての前記存在判断処理において、前記第１種のグループが存在すると判断され、かつ、前記（ｍ＋１）番目のライン画素グループ内の前記第１種の部分候補領域が前記関連領域に隣接する場合に、前記（ｍ＋１）番目のライン画素グループ内の前記第１種の部分候補領域をさらに含む前記関連領域を決定する、項目２に記載の画像解析装置。
（項目４）
前記候補決定部は、
前記ｍ番目のライン画素グループについての前記存在判断処理において、２個以上の前記第１種の部分候補領域が存在すると判断される場合に、前記２個以上の第１種の部分候補領域のそれぞれについて、当該第１種の部分候補領域のみを含む前記関連領域を決定し、
前記２個以上の第１種の部分候補領域を含む２個以上の前記関連領域のうちの第１の関連領域を先に利用して、前記第１の関連領域を含む前記バー候補領域を決定し、
前記第１の関連領域を含む前記バー候補領域を含む前記バーコード画像が特定され、かつ、特定済みの前記バーコード画像が前記２個以上の関連領域のうちの第２の関連領域を含む場合に、前記第２の関連領域を含む新たなバー候補領域を決定しない、項目３に記載の画像解析装置。
（項目５）
前記候補決定部は、
前記（ｍ＋１）番目のライン画素グループ内の前記第１種の部分候補領域が前記関連領域に隣接しない場合に、前記（ｍ＋１）番目のライン画素グループに含まれる１個以上の背景画素であって、前記関連領域に隣接する前記１個以上の背景画素を含む特定領域をさらに含む前記関連領域を決定し、
前記第２方向に沿って連続する前記特定領域の個数が第１の所定数未満である場合に、前記関連領域の決定を継続し、
前記第２方向に沿って連続する前記特定領域の個数が前記第１の所定数以上である場合に、前記関連領域の決定を終了して、前記関連領域を含む前記バー候補領域を決定しない、項目３又は４に記載の画像解析装置。
（項目６）
前記候補決定部は、前記第２方向の前記第３側からｎ番目（ｎは１以上ｊ未満の整数）のライン画素グループについての前記存在判断処理を実行することに応じて、前記関連領域内の前記第２方向に沿って並ぶ画素数が第２の所定数に達する場合に、前記第２方向の前記第３側から（ｎ＋１）番目のライン画素グループについての前記存在判断処理を実行することなく、前記（ｎ＋１）番目のライン画素グループに含まれる１個以上の非背景画素であって、前記関連領域に隣接する前記１個以上の非背景画素によって構成される第２種の部分候補領域をさらに含む前記関連領域を決定する、項目３から５のいずれか一項に記載の画像解析装置。
（項目７）
前記特定方向は、前記バー候補領域に含まれる１個以上の前記第１種の部分候補領域と１個以上の前記第２種の部分候補領域とが並ぶ方向に直交する方向である、項目６に記載の画像解析装置。
（項目８）
前記第１種の幅は、前記２種以上の幅のうちの第２種の幅よりも大きく、
前記候補決定部は、前記ｊ個のライン画素グループのうちの対象ライン画素グループに含まれる５個の部分グループから得られる３個のパラメータｎｃ、ｍｉｎ、及び、ｍａｘが、式「ｎｃ／ｍｉｎ＜第１の所定値」を満たさず、かつ、式「ｍａｘ／ｍｉｎ＞第２の所定値」を満たさない場合に、前記５個の部分グループのうちの特定の部分グループが、前記１次元バーコードの前記２種以上の幅に関係する前記特徴に整合すると判断し、
前記５個の部分グループは、
連続する１個以上の非背景画素によって構成される第１の部分グループと、
前記第１の部分グループに隣接する第２の部分グループであって、連続する１個以上の背景画素によって構成される前記第２の部分グループと、
前記第２の部分グループに隣接する第３の部分グループであって、連続する１個以上の非背景画素によって構成される前記第３の部分グループと、
前記第３の部分グループに隣接する第４の部分グループであって、連続する１個以上の背景画素によって構成される前記第４の部分グループと、
前記第４の部分グループに隣接する第５の部分グループであって、連続する１個以上の非背景画素によって構成される前記第５の部分グループと、を含み、
前記パラメータｎｃは、前記第３の部分グループの画素数であり、
前記パラメータｍｉｎは、前記５個の部分グループのうちの最小の画素数であり、
前記パラメータｍａｘは、前記５個の部分グループのうちの最大の画素数であり、
前記第１の所定値及び前記第２の所定値は、前記１次元バーコードの前記２種以上の幅に基づいて予め決定されており、
前記特定の部分グループは、前記第３の部分グループである、項目２から７のいずれか一項に記載の画像解析装置。
（項目９）
前記第１種の幅は、前記２種以上の幅のうちの第２種の幅よりも大きく、
前記探索部は、前記第２種の幅に相当する長さに第３の所定値を乗算することによって得られる前記閾値を決定する、項目１から８のいずれか一項に記載の画像解析装置。
（項目１０）
前記端部決定部は、前記原稿の端と前記一次元バーコードの端とが近接することに起因して、前記バー候補領域の前記第１側又は前記第２側において、前記背景領域のうち、前記特定方向に沿った前記閾値未満の長さを有する部分背景領域しか存在しない場合に、前記余白領域が存在しないにも関わらず、前記部分背景領域に隣接する前記非背景領域と、前記部分背景領域と、の間の境界位置を、前記１次元バーコードの前記第１の端部位置又は前記第２の端部位置として決定する、項目１から９のいずれか一項に記載の画像解析装置。
（項目１１）
前記出力部は、特定済みの前記バーコード画像をデコードして、デコード結果を出力する前記出力処理を実行する、項目１から１０のいずれか一項に記載の画像解析装置。
（項目１２）
画像解析装置のためのコンピュータプログラムであって、
前記画像解析装置に搭載されるコンピュータに、以下の各処理、即ち、
一次元バーコードを含む原稿の読取りが実行されることによって生成される対象画像データを取得する取得処理であって、前記一次元バーコードは、２種以上の幅を有する複数本のバーによって構成され、前記対象画像データは、前記原稿の背景を表わす背景領域と、前記原稿の背景以外を表わす非背景領域と、を含む対象画像を表わす、前記取得処理と、
前記対象画像のうちの一部であるバーコード画像であって、前記一次元バーコードを表わす前記バーコード画像を特定する特定処理と、
特定済みの前記バーコード画像に関係する出力処理と、を実行させ、
前記特定処理は、
前記対象画像の中から、前記２種以上の幅のうちの第１種の幅を有する１本のバーの候補を表わすバー候補領域を決定する候補決定処理であって、前記バー候補領域は、前記１次元バーコードの前記２種以上の幅に関係する特徴に整合する領域を含む、前記候補決定処理と、
前記バー候補領域の特定方向の第１側及び第２側のそれぞれにおいて、前記背景領域のうち、前記特定方向に沿った閾値以上の長さを有する余白領域を探索する探索処理と、
前記バー候補領域の前記第１側において第１の余白領域が見つかる場合に、前記第１の余白領域の前記第２側において前記第１の余白領域に隣接する前記非背景領域と、前記第１の余白領域と、の間の境界位置を、前記１次元バーコードの第１の端部位置として決定し、前記バー候補領域の前記第２側において第２の余白領域が見つかる場合に、前記第２の余白領域の前記第１側において前記第２の余白領域に隣接する前記非背景領域と、前記第２の余白領域と、の間の境界位置を、前記１次元バーコードの第２の端部位置として決定する端部決定処理と、を含み、
前記特定処理は、前記第１の端部位置と前記第２の端部位置とを利用して、前記バー候補領域を含む前記バーコード画像を特定する、コンピュータプログラム。
【符号の説明】
【００８７】
１０：ＰＣ、１２：操作部、１４：表示部、１６：ネットワークインターフェース、３０：制御部、３２：ＣＰＵ、３４：メモリ、３６：ドライバプログラム、５０：スキャナ、１００：スキャン指示、１１０：スキャンデータ、１１２：スキャン画像、１１４：バーコード画像、１２０，１２０Ａ，１２０Ｂ：二値画像、２００，２１０：太バーグループ、２５０，３００，３２０：候補グループ、２６０〜２６８：隣接グループ、３１０：仮想の候補グループ、ＢＰ：基準画素、ＣＬ：左端画素、ＥＬ：拡大左端画素、ＣＲ：右端画素、ＥＲ：拡大右端画素、ＢＩ：バーコード画像
【図１】
0006607122.tif 000002
【図２】
0006607122.tif 000003
【図３】
0006607122.tif 000004
【図４】
0006607122.tif 000005
【図５】
0006607122.tif 000006
【図６】
0006607122.tif 000007
【図７】
0006607122.tif 000008
【図８】
0006607122.tif 000009
【図９】
0006607122.tif 000010
【図１０】
0006607122.tif 000011