(57)【要約】【課題】文書画像の傾きを加味して行領域または列領域を切り出す。【解決手段】コンピュータ１が行う画像再配置方法であって、読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出ステップと、前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定ステップと、前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得ステップと、を行う。【選択図】図１
2014085689.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが行う画像再配置方法であって、
読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出ステップと、
前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定ステップと、
前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得ステップと、を行うこと
を特徴とする画像再配置方法。
【請求項２】
請求項１に記載の画像再配置方法であって、
前記領域抽出ステップは、前記文書画像から、図表が含まれる図表領域を抽出し、
前記図表領域の周囲のキャプション候補領域に文字矩形が存在する場合、当該文字矩形をキャプションと判別し、前記キャプションを前記図表領域に統合するキャプション統合ステップを、さらに行うこと
を特徴とする画像再配置方法。
【請求項３】
請求項１または２に記載の画像再配置方法であって、
前記文字領域のＸ方向およびＹ方向のヒストグラムを生成し、Ｘ方向の背景のヒストグラムの連続する長さの平均が、Ｙ方向の背景のヒストグラムの連続する長さの平均より大きい場合、縦書きであると判別し、それ以外は横書きであると推定する文字方向推定ステップを、さらに行うこと
を特徴とする画像再配置方法。
【請求項４】
請求項１から３のいずれか一項に記載の画像再配置方法であって、
隣接する行または列の間隔が、大きい方の行の高さまたは列の幅に対して所定の割合以下であって、隣接する行の高さまたは列の幅の比が所定の割合以下の場合は、高さが小さい方の行または幅が小さい方の列はルビであると判別し、前記ルビを対象とする文字矩形に統合するルビ統合ステップを、さらに行うこと
を特徴とする画像再配置方法。
【請求項５】
請求項１から４のいずれか一項に記載の画像再配置方法であって、
連続する文字矩形の余白を、当該文字矩形に配分すること
を特徴とする画像再配置方法。
【請求項６】
請求項１から５のいずれか一項に記載の画像再配置方法であって、
前記文書画像から切り出した文字矩形または図表領域のオブジェクトの集合を、所定のオブジェクト数を基準として分割する分割ステップと、
分割した単位で、前記オブジェクトをディスプレイの表示領域の大きさに応じて生成した再配置領域に再配置する再配置ステップと、
前記再配置領域を前記ディスプレイの表示領域に応じて分割したリフローページをディスプレイに表示する表示ステップと、を行うこと
を特徴とする画像再配置方法。
【請求項７】
画像再配置システムであって、
読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出手段と、
前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定手段と、
前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得手段と、を備えること
を特徴とする画像再配置システム。
【請求項８】
コンピュータが実行する画像再配置プログラムであって、
前記コンピュータに、
読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出ステップと、
前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定ステップと、
前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得ステップと
を実行させるための画像再配置プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書画像から文字を切り出して配置する画像再配置方法、画像再配置システム、および画像再配置プログラムに関する。
【背景技術】
【０００２】
文書画像からの文字の切り出し方法として、画像中から行・列を検出して各行ごとに文字位置を特定する手法がある。文字の切り出しに際しては、一般的に、文字認識が行われている（例えば特許文献１参照）。しかし、文字認識には、多くの処理時間を要するとともに、認識誤りによって文字が置き換わるという問題がある。
【０００３】
そこで、文書画像中の文字を認識することなく、画像のまま文字を切り出し、表示領域の大きさに合わせて文字を画像のまま再配置（リフロー）して表示する技術が研究されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2006-235817号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
文書データをスキャンして文書画像とする際に、文書データが傾いた状態でスキャンされてしまう場合がある。この場合、文書画像の文字が傾いて斜めになっている状態で、文書画像の垂直方向または水平方向に列または行が存在するものとして処理すると、列として切り出した列領域または行として切り出した行領域に、余分な領域が含まれてしまう。そのため、画像として列領域または行領域から切り出した文字を再配置して表示した場合に、文字のがたつきや、見栄えが悪くなる可能性がある。なお、従来の再配置技術では、文書画像の傾きについては、考慮されていない。
【０００６】
本発明は上記事情に鑑みてなされたものであり、本発明の目的は、文書画像の傾きを加味して行領域または列領域を切り出す画像再配置方法、画像再配置システム、および画像再配置プログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明は、コンピュータが行う画像再配置方法であって、読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出ステップと、前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定ステップと、前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得ステップと、を行う。
【０００８】
本発明は、画像再配置システムであって、読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出手段と、前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定手段と、前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得手段と、を備える。
【０００９】
本発明は、コンピュータが実行する画像再配置プログラムであって、前記コンピュータに、読み込んだ文書画像から、複数の文字矩形を含む文字領域を抽出する領域抽出ステップと、前記文字領域を所定数に分割し、各分割領域毎に前景のヒストグラムを生成し、各分割領域で作成されるヒストグラムの位置のずれを用いて、画像の傾きを推定する傾き推定ステップと、前記傾きの分だけ各文字矩形の位置をずらして、前記文字領域のヒストグラムを生成し、前記ヒストグラムの幅の行領域または列領域を抽出し、当該行領域または列領域に含まれる文字矩形の高さまたは幅を、前記行領域の高さまたは前記列領域の幅に合わせる行・列取得ステップと、を実行させる。
【発明の効果】
【００１０】
本発明によれば、文書画像の傾きを加味して行領域または列領域を切り出す画像再配置方法、画像再配置システム、および画像再配置プログラムを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態に係る画像再配置システムを示す構成図である。
【図２】リフロー表示のイメージを示す図である。
【図３】クラスおよびオブジェクトの関係を示す図である。
【図４】矩形座標の表現方法を示す図である。
【図５】リフローデータ生成処理のフローチャートである。
【図６】網掛け領域の拡大図である。
【図７】2値化処理の結果を示す図である。
【図８】初期ラベリング結果の統合を示す図である。
【図９】キャプションエリア候補とヒストグラムとを示す図である。
【図１０】ラベルを用いたヒストグラムの作成を示す図である。
【図１１】画素の走査によるヒストグラムの作成を示す図である。
【図１２】キャプションエリアの設定を示す図である。
【図１３】キャプションと本文との判別を示す図である。
【図１４】文字領域の取得を示す図である。
【図１５】文字領域のヒストグラムを示す図である。
【図１６】傾き推定を説明するための図である。
【図１７】傾きを考慮した列の取得を説明するための図である。
【図１８】縦書きおよび横書きの読み順の並べ替えを示すものである。
【図１９】ルビの統合を示す図である。
【図２０】文字間隔の整形例を示す図である。
【図２１】列端の文字間隔の整形例を示す図である。
【図２２】最終的な切り出し結果を示す図である。
【図２３】リフローデータの一例を示す図である。
【図２４】リフロー表示処理のフローチャートである。
【図２５】リフローデータを分冊に区切る方法を示す図である。
【図２６】文字および図表の配列イメージを示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について説明する。
【００１３】
図１は、本発明の実施形態に係る画像再配置システムの全体構成を示す図である。図示する画像再配置システムは、レイアウト解析部１と、データ保存部２と、リフロー（再配置）表示部３とを備える。レイアウト解析部１は、画像としてスキャンされた文書データなどの画像（文書画像）を読み込み、様々な画面サイズのデバイスにおいて快適に読むことを実現するためのリフローデータを生成する。データ保存部２には、読み込んだ画像、および、生成したリフローデータを格納する。リフロー表示部３は、データ保存部２に格納されたデータを用いて、画像から切り出した文字や図表などを、画面サイズに合わせて再配置し、表示する。図２は、リフロー表示のイメージを示す図である。
【００１４】
図１に示すレイアウト解析部１は、処理対象となるデータを画像として読み込む画像読み込み部１１と、読み込まれた画像の2値化処理を行う2値化処理部１２と、2値化された画像で文字または図表と認識されたピクセルの連続した領域を抽出し、ラベルを付けるラベリング部１３と、ラベリング結果を用いて図表を示す領域を抽出する図表認識部１４と、図表として認識されなかった文字領域から行または列を認識し、文字情報の切り出しを行う文字切り出し部１５と、所定の場合にページ全体を図表領域にするなどのレイアウトを変換するレイアウト変換部１６と、読み込んだ画像の最終ページのバーコードを認識し、ISBNコードを取得するバーコード解析部１７と、各データを保存する記憶部１８とを備える。
【００１５】
また、図示するリフロー表示部３は、レンダリング部３１と、ディスプレイ３２と、タッチパネルなどの操作受付部３３とを備える。レンダリング部３１は、データ保存部２に格納された画像およびリフローデータを用いて、画像から切り出した文字や図表などを画面サイズに合わせて再配置し、ディスプレイ３２に表示する。ユーザは、例えば、ディスプレイ３２上に形成されたタッチパネルなどの操作受付部３２にタッチすることで、ページ捲り、ページ移動などの指示をリフロー表示部３に入力する。
【００１６】
上記説明した画像再配置システムには、例えば、ＣＰＵと、メモリと、ＨＤＤ等の外部記憶装置と、入力装置と、出力装置とを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、ＣＰＵがメモリ上にロードされた画像再配置システム用のプログラムを実行することにより、画像再配置システムの各機能が実現される。また、画像再配置システム用のプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００１７】
なお、レイアウト解析部１は、例えばPC、サーバなどのコンピュータに実装され、リフロー表示部３およびデータ保存部２は、例えばスマートフォン、タブレットなどの携帯端末などに実装することが考えられる。しかしながら、これに限定されず、例えば携帯端末などの1つのコンピュータが、レイアウト解析部１、データ保存部２およびリフロー表示部３を実装することとしてもよい。
【００１８】
次に、本実施形態のデータ構造について説明する。
【００１９】
図３に、主要なクラスとオブジェクトの関係を示す。IR Layout クラス３１は、読み込んだ画像のページ全体に関わるレイアウト情報を保持しており、1 または複数のIR Area クラス３２のデータと関連している。例えば、IR Layout クラス３１は、2 値化した結果、横書き領域、縦書き領域、図表領域の面積およびそれらの和（CHARH AREA, CHARV AREA, FIGURE AREA, SUM AREA）、文字領域取得に利用するY 方向のヒストグラムデータ、初期ラベリング結果の保持リスト（srcArea）、文字候補リスト（charCandidate）、文字領域リスト（charArea）、図表領域リスト（imageArea）などを保持する。
【００２０】
IR Area クラス３２は、画像中に複数存在する領域に関する情報を保持する。領域には”縦書き領域”、”横書き領域”、”図表領域”の3 種類が存在する。”縦書き領域”、”横書き領域”はさらに細かい単位のIR Column クラス３３のデータと関連している。IR Area クラス３２は、例えば、領域の種別（縦書き、横書き、図表）、領域の矩形座標データ、領域の縦書き・横書き判定用の領域内X 方向ヒストグラム、領域の縦書き・横書き判定用の領域内Y 方向ヒストグラム、領域に含まれる行・列のデータなどを保持する。
【００２１】
IR Column クラス３３は、”縦書き領域”、”横書き領域”に含まれる”列”または”行”に関する情報を保持する。例えば、IR Column クラス３３は、行・列の矩形座標データ、行・列に含まれる文字矩形のデータなどを保持する。IR Column クラス３３は、1 または複数のIR Cordinate クラス３４と関連している。
【００２２】
IR Cordinate クラス３４は、”列”または”行”に含まれる”文字矩形”の座標情報を保持する。また、段落位置についても合わせて管理する。その他に”縦書き”、”横書き”、”図表”領域および”行”、”列”の矩形座標の管理にも利用する。矩形座標は、図４ に示すように矩形左上の座標を基準とし、矩形の幅、高さを利用して管理する。例えば、IR Cordinate クラス３４は、文字か段落かの種別、文字矩形の左上X 座標、文字矩形の左上Y 座標、文字矩形の幅、文字矩形の高さなどを保持する。
【００２３】
本実施形態では、このように文書構造を階層的に管理して処理を行う。また、これらのデータは、レイアウト解析部１の記憶部１８に格納される。
【００２４】
次に、本実施形態の処理について説明する。
【００２５】
以下にリフローデータ生成処理と、リフロー表示処理について説明する。
【００２６】
＜リフローデータ生成処理＞  
図５は、レイアウト解析部１が行う、リフローデータ生成処理のフローチャートである。ここでは、画像読み込みからリフローデータを生成するまでについて説明する。
【００２７】
［Ｓ１１：画像の読み込み］
まず、画像読み込み部１１は、処理対象となるデータ（文書データなど）を、画像として読み込み、記憶部１８に記憶する。本実施形態では、例えば、プリミティブな画像処理にOpenCV を活用し、OpenCVは各種画像コーデックをサポートしているため、様々な形式（例えば、JPEG 形式、PNG 形式、TIFF 形式など）に対応可能であるものとする。なお、読み込みの際には、画像の2値化処理で使用するため、強制的にグレースケール画像として読み込むものとする。そして、読み込んだ画像のページ（画像ファイル）毎に、Ｓ１２からＳ１７の処理を行う。
【００２８】
［Ｓ１２：画像の2値化処理］
2値化処理部１２は、Ｓ１１で読み込まれた画像の2値化処理を行う。2値化処理は、濃淡がある画像（8bit 画像であれば0〜255）をある条件に従って、0 か1 の2値で表すように変換する処理のことである。ここでは、文字、もしくは図表がある部分を1、文字がない部分、すなわち背景を0 として認識するように2 値化を行う。画像の2値化処理により、画像の文字・図表部分（前景）と背景の分離を行うアルゴリズムについて、以下に説明する。
【００２９】
（１）前処理
最適な2 値化の結果を得るには、2 値化自体のアルゴリズム以外に前処理が重要である。本実施形態では、前処理として「背景の調整」と「網掛け領域の処理」の２つを行うものとする。
【００３０】
背景の調整については、後述する2値化処理では判別分析法を活用し、動的に閾値を決定し、2値化を行っている。このため、例えば白紙のページであったとしても、スキャニング時の問題で前景を検出してしまう可能性がある。そこで、本実施形態では、背景の輝度値は十分に明るいとを仮定し、例えば式１に示すように2値化を行う前に一定以上の輝度値lum［x,y］を持つ画素に対し、最大輝度値に変更する補正処理を行う。式１では、閾値の例として230に設定している。
【数１】
2014085689.tif 000003
【００３１】
網掛け領域の処理については、印刷文書には網掛けによる表現を多く見ることができる。単色の印刷の場合、網掛け領域は図６に示すように黒と白のドットが交互に繰り返されることで表現されており、2値化処理時に前景として網掛け領域全体を検出できない場合がある。
【００３２】
そこで、本実施形態では、ボックスフィルタをかけ画像をあらかじめ平滑化することにより、網掛け領域を前景として検出できるようにする。ボックスフィルタのカーネルは、式２に示すようにn×nを採用し、アンカーはカーネル中心として処理を行う。nは、画面の分解能に合わせて所定の値（例えば、3など）を設定するものとする。
【数２】
2014085689.tif 000004
【００３３】
（２）2値化処理
2値化とは、画像の各ピクセルを背景クラスと前景クラスに分ける処理である。本実施形態においては、2値化処理に判別分析法を活用し、閾値を決定しているが、判別分析法以外の手法を用いて2値化処理を行うこととしてもよい。判別分析法ではクラス間分散ω０ とクラス内分散ωｉの比で表される分離度Ｔが最大となる閾値を決定する。
【数３】
2014085689.tif 000005
【００３４】
図７に、2値化処理後の画像を示す。図表と文字が前景（白）として認識されていることが分かる。背景は、黒で表現されている。
【００３５】
［Ｓ１３：ラベリング処理］
ラベリング部１３は、Ｓ１２の2値化処理で検出された前景において、ピクセルの連結する成分毎に異なるラベルをつけていくラベリング処理を行う。すなわち、連結成分を囲む矩形をラベリング結果として抽出する。理想的には1文字もしくは1つの図表が、それぞれ1つの連結成分と認識される。例えば「日」という文字は1つの連結成分として得ることができる。このラベリングの結果を、初期ラベリング結果の保持リスト（srcArea）として記憶部１８に格納する。
【００３６】
しかしながら、日本語の文字は複数の連結成分に分かれることも稀ではない。例えば、「現」という字は2つの連結成分に分かれてしまう。また図表も、必ずしも1つの連結成分として取得することはできないため、各種の統合処理が必要となる。1つの文字が複数のラベルに分離されている場合に各々の矩形が重なるような場合がある。
【００３７】
そこで、例えば、図８のように重なりのある矩形の統合を行うことで、その後の処理を簡略化し、高速化を行うことができる。ここで、重なり合うラベルＡの矩形と、ラベルＢの矩形が統合前にそれぞれ（xa, ya, wa, ha）、(xb, yb, wb, hb)で表されているとする。なお、各ラベルの矩形は、図４で示したように、（矩形の左上x座標, 矩形の左上y座標, 矩形の幅, 矩形の高さ）で表すものとする。この場合、統合後のラベルの矩形は、以下のように変換する。
【００３８】
（min(xa,xb), min(ya,yb), max(xa + wa, xb + wb) - min(xa, xb), max(ya + ha, yb + hb) - min(ya, yb)) 
初期ラベリング結果の保持リスト（srcArea）に格納されたラベリング結果からラベル同士を比較し、矩形が重なる場合はこのように統合（一方を削除し、もう一方を更新）を行う。
【００３９】
［Ｓ１４：図表の認識処理］
図表認識部１４は、Ｓ１３で統合されたラベリング結果を用いて、図表を示す連結成分を抽出し、図表を表すラベルとそれ以外のラベルとに分ける。これは一般的に、図表が文字よりも大きいことなどのレイアウトに関する事前知識を活用して抽出を行う。また、図表と、それに紐づくキャプションは一体となってユーザに提示することが望ましいため、図表とそれに紐づくキャプションを示す連結成分の統合処理を行う。
【００４０】
（１）図表領域の取得
図表を表すラベルは、文字を表すラベルに比べて非常に大きいため、矩形サイズに閾値を設けることで容易に検出を行うことができる。本実施形態では、画像全体の面積の1% 以上の矩形面積の大きさを持つラベルを図表として認識し、記憶部１８の図表領域リスト（IR Layout::imageArea）に格納する。また図表として認識されなかったラベルは、文字候補として、記憶部１８の文字候補リスト（IR Layout::charCandidate）に格納する。
【００４１】
（２）キャプションの統合
図表とそれの説明であるキャプションは、一覧性を保つために1つの図表領域として統合することが必要である。ここでは、検出された図表とキャプションを統合する処理について説明する。すなわち、図表領域の周囲のキャプションエリア候補に、文字候補としてのラベルが存在する場合、当該文字候補のラベルをキャプションと判別し、当該キャプションを図表領域に統合する。以下に、キャプションの統合処理について説明する。
【００４２】
（ａ）キャプションエリア候補のヒストグラム生成
まず、検出された図表領域の周囲に、キャプションエリア候補を設定する。キャプションエリア候補は、図９に示すように図表領域７０の4 辺から等距離Lの範囲を設定する。図表領域の上端をTop領域７１、下端をBottom領域７２、左端をLeft領域７３、右端をRight領域７４とする。距離Lは、例えば、図表領域を表すパラメータを利用し、L = min(width,  height) としてもよい。すなわち、対象とする図表領域のwidth （幅）およびheight（高さ）の小さい方の値としてもよい。
【００４３】
本実施形態では、設定された4つのキャプションエリア候補で、前景のヒストグラムを計算する。Top 領域７１およびBottom 領域７２ではX 方向のヒストグラム、Left 領域７３およびRight 領域７４ではY 方向のヒストグラムを計算する。
【００４４】
図９に示すように、キャプション（前景）があるRight 領域７４とBottom 領域７２ではヒストグラムの山７５、７６ができる。キャプションがないTop 領域７１とLeft 領域７３ではヒストグラムは平坦となる。
【００４５】
なお、画像のX方向ないしY方向の各座標におけるその座標上に存在する前景（文字、文字矩形など）の指標となる値を計算することでヒストグラムを作成する。このヒストグラムの計算は、本実施形態では、図１０に示すように、記憶部１８の文字候補リスト（IR Layout::charCandidate）を活用して、文字候補として認識されたラベルの数をX 方向またはY 方向にカウントして、簡易的に計算することとする。図１０に示すように、文字領域に３つの文字矩形が存在する場合、X 方向またはY 方向に各座標上に存在するラベルの数を取得する。
【００４６】
具体的には、文字領域内の各ラベルの領域rについて、
X 方向のヒストグラムを作成する場合は、当該ラベルの領域rの左端≦i≦右端を満たす全てのiについてhx(i)に1を加え、
Y 方向のヒストグラムを作成する場合は、当該ラベルの領域rの上端≦i≦下端を満たす全てのjについてhx(j)に1を加える。
【００４７】
これにより、本実施形態では、精度を落とすることなく、高速な計算を実現する。
【００４８】
なお、ヒストグラムは、図１１に示すように、文字領域の画像の画素自身を走査することで作成してもよい。
【００４９】
（ｂ）キャプションエリアの設定と領域の更新
ヒストグラムの計算が終わった後、キャプションエリアを設定する。図１２のBottom 領域に示すように、ヒストグラムのランレングスを計算し、最も外側のヒストグラム８１のランの終端８２までをキャプションエリア８３として拡張する。
【００５０】
この際、図１２のTop 領域８４のようにヒストグラム８５は存在するものの、ヒストグラム８５のランがキャプションエリア候補８４を超えて存在する場合（ランがキャプションエリア候補内で収束しない場合）には、キャプションではないと判断し、図表領域の拡張を行わない。
【００５１】
また、図１３に示す例では、キャプションエリア候補のRight領域には、キャプションではない本文のラベル（文字候補）が存在する。この場合、図１２のTop 領域８４とは異なり、本文のラベルの隙間（行間）が、キャプションエリア候補の境界９１と一致する（重なる）場合がある。このとき、ヒストグラムの山ができ、ヒストグラムのランがキャプションエリア候補を超えて存在しない（ランがキャプションエリア候補内で収束している）と判別され、本文のラベルをキャプションとして誤検出してしまう問題がある。このため、本実施形態では、ヒストグラムのラン毎に、キャプションエリア候補の境界９２に重なるラベルがあるか否かをチェックする。ラベルがある場合、そのランに属する領域は、キャプションではないと判断する。図１３の場合、ラベル９３が境界９２に重なっているため、ラン９５に属する領域はキャプションではないと判断する。また、この処理において、文字間の隙間が境界９２と一致してしまう場合がある。そこで、境界９２の外側の一定範囲９４に文字候補として認識されたラベルがあるか否かもチェックし、ラベルがある場合は、そのランに属する領域は、キャプションではないと判断する。図１３では、ラン９６に対応する行の文字間が境界９２と一致しているが、範囲９４にラベルが含まれるため、ラン９６に属する領域はキャプションではないと判断する。境界と重なるラベル、境界の外側の一定範囲にあるラベルのいずれも存在しない場合、キャプションとして判断する。
【００５２】
以上のようにして、キャプションエリアを設定した後、記憶部１８の文字候補リスト（IR Layout::charCandidate）に格納されている文字候補領域でキャプションエリア内に存在している領域の削除を行い、図表領域をキャプションエリア分拡大して更新する。また取得した図表領域の面積の和を計算し、図表領域の面積（IR Layout::FIGURE AREA）に格納する（後々のレイアウト変換に利用する）。
【００５３】
以上により、Ｓ１４では、Ｓ１３のラベリング結果を、図表領域リスト（IR Layout::imageArea ）と、文字候補リスト（IR Layout::charCandidate）とに分ける。
【００５４】
［Ｓ１５：文字情報の切り出し］
文字切り出し部１５は、記憶部１８の文字候補リスト（IR Layout::charCandidate）を用いて、1 文字、1文字の矩形を切り出す処理を行う。
【００５５】
すなわち、図表およびキャプションとして認識されなかった文字候補のラベルは、文字を構成していると考えられる。まず、これらの文字を構成しているラベルの画像内分布より、文字領域を矩形として定義する。次に定義された文字領域内で文字が縦書きで書かれているか、もしくは横書きで書かれているかを、文字領域内のラベルの分布から推測する。定義された各文字領域内で縦書き・横書きが判別できた後に、縦書きの場合には列、横書きの場合には行の認識を行い、最後に1 文字、1 文字の切り出しを行う。以下に、これらの処理について説明する。
【００５６】
（１）文字領域の取得
まず、文字候補リスト（IR Layout::charCandidate）のデータを用いて、文字領域を取得する。一般的な書籍を対象と仮定すれば、縦方向で文書の領域を分割することができる。例えば、文書の上部から柱領域（章題などが書かれるエリア）、本文領域、ノンブル領域（ページ番号の書かれるエリア）のように分割して別の領域として考えることが可能である。そこで、文字候補リスト（IR Layout::charCandidate）を利用して、Y 方向の前景ヒストグラムを作成し、このランレングスを計算することで領域の縦分割を行う。
【００５７】
図１４に、縦分割の方法を示す。画像１０１の中で、柱領域１０２、本文領域１０３、ノンブル領域１０４が異なる領域として認識できていることが分かる。図表が入るページの場合にも文字候補リスト（IR Layout::charCandidate）を利用してヒストグラムを作成するため、図表部分１０５は無視してこの処理を行うことが可能である。
【００５８】
また、同じ領域でありながら、偶然、文字の切れ目が一致することにより、複数の領域に分割されてしまうことがある。これを防ぐため隣接領域が十分近い場合（例えば、30 ピクセル以内など）、領域の統合を行うこととする。
【００５９】
最終的に分割された領域に含まれる文字候補リスト（IR Layout::charCandidate）の矩形領域のX 方向最小値と最大値を求め、文字領域を決定する。具体的には、
文字候補の上端≧分割された文字領域の上端、
かつ、  文字候補の下端≦分割された文字領域の下端、
を満たす全ての文字候補の中で、最小の左端および最大の右端を、それぞれ文字領域の左端および右端とする。取得した文字領域は、記憶部１８の文字領域リスト（IR Layout::charArea）に格納しておく。
【００６０】
（２）文字方向の推定
取得された文字領域で、文字が縦書きで書かれているか、横書きで書かれているかを判定する。まず、図１５に示すように、取得された文字領域内でX 方向、Y 方向のヒストグラムを作成する。ヒストグラム作成後、X 方向、Y 方向の双方で、白ラン（連続する前景ヒストグラムの長さ）および黒ラン（連続する背景ヒストグラムの長さ）の平均を計算する。ただし、前景ヒストグラム、背景ヒストグラムとは、それぞれ、ヒストグラムの値が0より大きい部分、ヒストグラムの値が0である部分のことである。
【００６１】
ここでは、X 方向の白ランの平均をxwrun、黒ランの平均をxbrunとし、Y 方向の白ランの平均をywrun、黒ランの平均をybrun とする。
【００６２】
例えば、図１５に示すように、文字領域が縦書きである場合、ybrun はほとんどなくなる。縦書きをY 方向に射影すると文字がない部分はほとんど表れないためである。反対にxbrun は一定の値を持つことになる。なぜならば、行間に文字のないスペースが定期的に生じるためである。つまり、xbrun > ybrun の場合、基本的に縦書きと判定し、それ以外は横書きと判定する。
【００６３】
しかしながら、この条件には例外が存在する。それは、横書きで1行だけの場合である。複数行ある横書き領域の場合には上記の条件で問題がないが、1行だけの場合には、ybrun はほぼゼロとなり、xbrun は一定の値を持つため、縦書きと判定されてしまう。例えば、柱領域やノンブル領域はこのままだと縦書き領域と判定されてしまうことになる。
【００６４】
そこで、これを回避するために、以下の条件１および条件２を満たす場合には、横書きの1 行だと認識し、xbrun > ybrun であっても横書きと判定する。
【００６５】
条件１：文字領域の高さheigtと、ybrun が同程度の大きさである。例えば、以下の式を満たす場合、同程度であると判定する。
【数４】
2014085689.tif 000006
【００６６】
条件２：xwrun と、ywrun の大きさがあまり離れていない。例えば、以下の式を満たす場合、あまり離れていないと判定する。
【数５】
2014085689.tif 000007
【００６７】
条件１および条件２の例外条件を追加することで、文字領域の縦書き・横書きを正しく認識することができる。判定された縦書き・横書きの結果は記憶部１８のIR Area の領域の種別に格納しておく。
【００６８】
（３）傾き推定
文字領域の縦書き・横書きが判定できたら、縦書きの場合はX 方向のヒストグラムを利用して列を取得し、横書きの場合はY 方向のヒストグラムを利用して行の取得を行う。以降は簡単のため、文字領域が縦書きである場合について説明する。
【００６９】
取得された文字領域の中で最も大きい文字領域を特定し、当該文字領域をn分割する。縦書きの文字領域であれば横に分割し（X 方向の線で分割し）、横書きの文字領域であれば縦に分割する（Y 方向の線で分割する）。なお、文字領域の分割は、等分するのが望ましいが、等分でない場合は分割比率等を用いることとしてもよい。
【００７０】
図１６は、傾き推定を説明するための図である。ここでは、文字領域１２１を上下に2等分する場合を例として説明する。まず、分割した各領域１２２、１２３において、X方向の前景のヒストグラムを作成する。すなわち、上部領域１２２のヒストグラムhu(x)と、下部領域１２３のヒストグラムhd(x)とを作成する。なお、ヒストグラムは、前述した図１０または図１１の方法により作成する。Ｓ１１で読み込まれた画像が傾いている場合、その傾きに応じて、分割した領域１２２、１２３のヒストグラムのラン（山）の位置がずれる。そのため、以下のc(x)が最大となるx（傾きを補正するためにずらす量）を算出する。
【数６】
2014085689.tif 000008
【００７１】
なお、bu(i)は、上部領域１２２のヒストグラムhu(x)を2値化するものであって、ヒストグラムhu(i)が0より大きい場合（少なくとも1つの文字候補のラベルが存在する場合）は「+1」を設定し、それ以外（文字候補のラベルが1つも存在しない場合）は「-1」を設定する。なお、iは、x座標である。bd(i)は、下部領域１２３のヒストグラムhd(i)を2値化するものであって、bu(i)と同様である。
【００７２】
そして、算出したxを用いて画像の傾きsを、以下の式により推定する。
【００７３】
傾きs = x ÷ (文字領域の高さ ÷ 2)    
図１６に示す例では、2等分した場合の例であるため、上記式では(文字領域の高さ ÷ 2)としているが、分割数に応じて分割した領域間の距離を設定する。すなわち、分割領域のうち２つが選択されたとき、
傾きs＝x÷（｜一方の領域の中心のy座標−他方の領域の中心のy座標｜÷2）
とする。また、分割数が3以上の場合は分割領域の選択方法が複数通りあるため、例えばy座標が最も離れた２つを選択してもよいし、y座標が小さい方から２つを選択してもよい。一般的には分割領域の距離が離れている方が高精度になるため前者を用いるが、小説等でせりふが多い文字領域など、文字領域の下方まで文字が続かない行が多いときには後者の方がよい場合がある。さらに、分割領域の組み合わせを複数とって各々でsを算出し、その平均値や中央値をとってもよい。複数の組み合わせは、全ての組み合わせや、隣接する分割領域の組み合わせでもよいし、他の組み合わせでも構わない。
【００７４】
なお、本実施形態では、読み込んだ画像のページ全体の傾きを、ページ内で面積が最大の文字領域を用いて推定しているが、ページ内の文字領域毎に上記の方法により傾きを推定し、文字領域毎の傾きを保持することとしてもよい。ページ全体の傾きを推定する場合、最大の文字領域を用いることで、他の小さい文字領域における傾き推定の失敗を回避することができるとともに、処理時間を短縮することができる。一方、文字領域毎に傾きを推定する場合、画像に幾何学的な歪みが発生している場合（例えば、スキャンが曲がってる場合等）に、各文字領域単位で高精度な傾きを推定することができる。
【００７５】
（４）行・列の取得
文字領域の縦書き・横書きを判定し、傾きの推定を終えると、縦書きの場合はX 方向のヒストグラムを利用して列を取得、横書きの場合はY 方向のヒストグラムを利用して行の取得を行う。ここでは、文字領域が縦書きである場合について説明を行う。
【００７６】
まず、ヒストグラムの前景のランレングスを検出することで、列幅を取得していく。この際、極端に幅の小さい（3 ピクセル以下）場合は、誤検出だとして無視をする。
【００７７】
ここで、推定した傾きsを考慮したヒストグラムを再作成する。図１７（ａ）は、傾いた文字領域について再作成したヒストグラムの例である。図示する例では、推定した傾きsの分だけ文字候補のラベルの加算位置をずらしてヒストグラムを作成している。具体的には、各ラベルの領域rについて、その領域rの左端≦ i ≦ 右端を満たす全てのiについて、h（i + s * (領域rの上端)）に1を加える。これにより、傾きsの分だけ領域rの加算位置をずらしたヒストグラム１３１が作成される。
【００７８】
そして、図１７（ｂ）に示すように、作成されたヒストグラムの山の範囲に含まれる各ラベルの領域rを列に含め、当該列に含めた各ラベルの領域rの幅を、ヒストグラムのランレングス（幅）に合わせて、更新する。具体的には、各ラベルの領域rについて、
領域rの左端 ≦ ヒストグラムの左端 + s * 領域rの上端  かつ
領域rの右端 ≦ ヒストグラムの右端 + s * 領域rの上端
の場合、以下の処理を行う。
【００７９】
領域rを列に含め、領域rの左端を「ヒストグラムの左端 - s * 領域rの上端」に設定し、領域rの幅をヒストグラムのランレングスと同じにする。これにより、各ラベルの領域rの幅が、列幅と等しくなり、同じ列に格納されている文字候補をレンダリング時に並べやすくなる。
【００８０】
次に、取得した列幅の範囲に含まれる文字候補リスト（IR Layout::charCandidate）のデータのY 方向の最小値、最大値を利用して列の高さを取得して、列領域リスト（charArea.column ）として、列を表す矩形情報と、列に含まれる文字候補リスト（IR Layout::charCandidate） のデータとを記憶部１８に格納する。
【００８１】
本実施形態では、このように傾きを推定し、推定した傾きの分だけずらしてヒストグラムを生成する。これにより、列として切り出した列領域または行として切り出した行領域に、余分な領域が含まれることなく、本来の画像の列領域または行領域を正しく切り出すことができる。なお、文書画像が傾いている状態で、文書画像の垂直方向または水平方向に列または行が存在するものとして処理した場合は、作成したヒストグラムのランレングスが本来の列幅または行の高さより大きくなってしまい、結果として切り出した列領域または行領域に余分な領域が含まれてしまう。本実施形態では、傾きを推定することで、切り出した列領域または行領域に余分な領域が含まれることを回避することができる。
【００８２】
次に、文字候補、行・列領域、および文字領域の読み順への並び替えを行う。最後のデータ出力や文字の切り出しに備えて、ここまで取得したリストを読み順に並べ替えておく必要がある。図１８は、縦書きの場合と横書きの場合の読み順の並べ替えを示すものである。図１８では、数字が読み順を示している。図示するように、行・列に含まれる文字候補は、列の場合はパラメータy が小さい順、行の場合はパラメータx が小さい順に並べ替えておく。行・列領域のリストは、列の場合はパラメータx が大きい順、行の場合はパラメータy が小さい順に並べ替えておく。
【００８３】
文字領域リストは、まず画面全体の列面積（IR Layout::CHARV AREA ）および行面積（IR Layout::CHARH AREA）を取得し、画面全体が縦書きの構成か横書きの構成か判定を行う。すなわち、IR Layout::CHARV AREA > IR Layout::CHARH AREA で縦書き、それ以外で横書きであると判断する。
【００８４】
この判断結果によって、縦書きと判断された場合には、領域のY 方向が重なる場合、パラメータx が大きい順、それ以外の場合にはパラメータy が小さい順に並べ替える。横書きと判断された場合には、領域のY 方向が重なる場合、パラメータx が小さい順、それ以外の場合にはパラメータy が小さい順に並べ替える。
【００８５】
（５）ルビの統合
これまでに取得された行・列の中にはルビに当たるものも含まれている。ルビを単独でリフローして表示してしまうと、意味が通らなくなってしまうため、ルビはルビをつける対象の文字矩形と統合を行う。
【００８６】
ルビの特徴として、ルビをつける対象の文字矩形から距離が近い、ルビは対象の文字矩形に対し、列幅または行の高さが小さいことである。この2つの特徴を利用してルビを統合する。図１９にルビ統合の処理を示す。
【００８７】
ここでは、簡単のために縦書きの場合で説明する。この場合、ルビは文字の右側に付くことになる。いま、隣接する列の内、右側の列をCr、左側の列をCl としたとき、まず列間の距離l = Cr．x - (Cl．x + Cl．width)を計算する。この距離l が列幅Cl．width の半分以下である場合、十分距離が近いと判定する。さらに、列幅の比（Cr．Width /   Cl．width ）が0.5以下の場合に、列幅が隣接する列幅と比較して小さいと判定する。なお、ここで判定に用いた閾値（列幅の“半分”以下、列幅の比の“0.5”以下）は例示であって、これ以外の値を用いることとしてもよい。
【００８８】
この2つの判定により、ルビ列として判定された場合、ルビ列とY 方向で重なっている文字矩形をルビ列の右端まで拡張する。また、レンダリングの際の文字センタリングを容易にするため、ここで右端まで拡張した分と同じだけ左端も拡張する。
【００８９】
（６）文字の切り出し
日本語を構成する文字（漢字、ひらがな）は、1つ文字が1つの連結成分とはなっていないため、これまでの処理で得られた文字候補の矩形は、１つの文字が複数の矩形に分かれてしまうことが頻繁に起こる。そこで、１つの文字であると推定できる文字候補の矩形同士を統合し、さらにレンダリング時のリフロー配置を見易くするために改行の認識、文字間隔の整形を行う。
【００９０】
(a)文字矩形の統合
これまでの処理により、文字矩形は行・列に属し、行の場合、並び順はX方向の小さい順、矩形の高さは行の高さと等しくなっており、列の場合、並び順はY方向の小さい順、矩形の幅は列幅と等しくなっている（ルビと統合した矩形は除く）。すなわち、行の場合はY方向、列の場合はX方向での統合を考える必要はなく、並んでいる矩形を順に統合するかどうか判断すれば良いことになる。矩形の統合ルールとして日本語の文字の特徴、文字の幅と高さが同程度となることを利用した。
【００９１】
以降は簡単のため、列内の文字矩形統合（縦書き）について説明を行う。これは列毎に文字矩形の並び順の前後で矩形の統合を判断することで実現する。まず前後の矩形が一部重なる場合には無条件で統合を行う。矩形の重なりはＳ１３のラベリング処理ですでに行っているが、例えば、”い”という文字は初期のラベリング結果では左の部分と右の部分が重なっていないが、列に属した段階で幅を列幅に更新しているため、新たに矩形が重なることが生じる。
【００９２】
次に前後の矩形が重なっていない場合には矩形を統合した場合の矩形高さheightn を以下の式より算出する。
【数７】
2014085689.tif 000009
【００９３】
いま、列幅をcolumn_width としたときに、以下の式を満たす場合に統合を行う。なお、以下の式の右辺の“1.0”は例示であって、これ以外の値を用いることとしてもよい。
【数８】
2014085689.tif 000010
【００９４】
また、前後の文字矩形がルビを統合した矩形だった場合には統合を行う。これはビューワ側での禁則の関係で、一連のルビが付いた文字は複数の文字からなっていていても、1つの矩形として切り出す。なお、ルビを統合した矩形かどうかは列幅と矩形の幅が異なることから判断することができる。
【００９５】
(b)改行の認識
リフロー表示部３のレンダリング部３１でリフローを行う際に改行を把握していると、適切に改行を入れることができ、読み易さに寄与することができるため、段落の認識を行う。
【００９６】
行・列毎に文字の統合を行っていく際に、行・列に含まれている最後の文字矩形に到達した場合に改行が存在するかを認識する。簡単のため、縦書きについて説明すると、文字領域のY 方向下端と比較して、最後の文字矩形のY 方向下端、すなわち列のY 方向下端に距離がある場合に改行があると認識を行う。具体的には列幅のnd倍以上(例えば0.7 倍以上)の距離がある場合に改行があると考える。
【００９７】
さらに、改行があった後に次の文字列との間に大きな余白がある場合（例えば、見出しと本文の間など）にはもう1つ改行があると考えることとする。この場合、改行データを2回付加することとなる。大きな余白の定義は、次の列との距離が列幅のnｓ倍（例えば１倍）よりも大きい余白とする。
【００９８】
(c)文字間隔の整形
ここまでの処理で得られた矩形は、文字に外接する矩形であるため、文字間の余白が削られてしまっている。このままレンダリング部３１でリフローを行うと文字が詰まってしまう。そこで文字間の余白部分を連続する前後の文字矩形に配分する。余白は均等に存在するのではなく、前後の文字矩形の大きさによって変わるため、それを考慮して配分する。
【００９９】
図２０は、文字間隔の整形方法の一例を示す図である。簡略化のために縦書き領域の場合に絞って説明する。ここで、並び順で前後する文字矩形について考える。いま、連続する矩形の高さheighti とheighti+1 の比がheighti : heighti+1 = A : Bだったとする。このとき文字矩形i と文字矩形i + 1 の余白を、逆比B : A で配分することにする。なお、横書きの場合には、同様に文字の幅width を利用すれば良い。
【０１００】
なお、列端（先頭、末尾）の文字矩形については、上記の余白の配分方法を用いることができない。そのため、図２１に示すように、列端の文字の高さが小さい場合、余白の配分が行われず文字矩形の高さが小さいままであり、リフローを行う際にこの部分の文字間隔が極端に詰まってしまう。これを防止するため、列端の文字矩形の高さが所定値（例えば、列幅×0.8〜1.2程度）以下の場合、所定値まで文字矩形の高さ拡張する。なお、文字矩形の高さを所定値まで拡張する場合、先頭の文字矩形については、当該文字矩形の上端が文字領域からはみ出さないようにし、末尾の文字矩形については、当該文字矩形の下端が文字領域からはみ出さないようにする。
【０１０１】
図２２に、図表領域、文字矩形などの最終的な切り出し結果の一例を表示する。なお、文字列下の空欄の矩形は、改行を示す。
【０１０２】
［Ｓ１６：レイアウト変換］
これまでの文字や図表の情報の切り出し結果により、リフローデータを作成することができるが、対象とする画像のレイアウトによってはうまく機能しない場合がある。そこで、レイアウト変換部１６は、読み手の読みやすさを考慮して、解析された結果が一定条件下の場合には読み込んだ画像のページ全体を図表領域にするなどの、解析したレイアウトの結果を変更する処理を行う。
【０１０３】
（１）画像ページへの変換
一覧性が必要なページの場合や、取得したレイアウト解析結果が明らかに失敗している状況においては、無理やりリフローデータを生成するよりも、そのページは一枚の画像として表示した方が読み手の立場で考えると好ましい。具体的には下記のケースの場合、その読み込んだ画像を画像ページとしてページ全体を図表領域として、変換を行う。
【０１０４】
(a)図表が主体のページ
処理対象として文字が主体の文書を想定しているため、ページ中の文字領域面積と比較して、図表領域面積が大きな場合（表紙など）には、図表の一覧性を確保するために画像ページとして変換を行う。
【０１０５】
具体的にはレイアウト解析の過程で取得した各領域毎の面積（縦書き文字領域（CHARH AREA）、横書き文字領域（CHARV AREA）、図表領域（FIGURE AREA））を活用し、図表領域の面積が、文字領域の面積のn倍（例えば、1.5倍）より大きい場合に、図表が主体であると認識し、画像ページへ変換する。
【０１０６】
なお、本実施形態では、文字領域の面積を示すCHARH AREA、CHARV AREA は、いわゆる文字領域の面積ではなく、例えば縦書きであれば、文字領域中の列部分の面積の総和であるものとする（空白部分は領域面積と考えない）が、勿論、空白部分を含めた文字領域そのものの面積を使用してもよい。
【０１０７】
(b)目次ページ
目次ページは、一覧性が重要であること、また、文字に飾りが付いていることが多いため、正確に認識して切り出すことが難しい。そこで目次と認識できた場合には画像ページとして変換を行う。
【０１０８】
目次の判定には、目次ページは本の前半に登場すること、見出しが連続するため、行間が広く空く（改行が2 回続く）こととなる。そこで、ページ番号i がi < 50 かつ、ページに存在する行・列数COL_NUM と、改行の数BR_NUM を計測し、以下の式を満たす場合に、目次ページとして認識し、画像ページへと変換する。なお、このページの判定に用いた閾値“50”、“0.7”は例示であって、これ以外の値を用いることとしてもよい。
【数９】
2014085689.tif 000011
【０１０９】
(c)検出面積が極端に少ないページ
文字領域や図表領域として検出された領域が非常に少ないページ（例えば、章題だけが書いてあるページ）は一覧性が大事なことが多いため、画像ページへと変換する。具体的には、レイアウト解析により取得し各領域の面積の和（SUM_AREA = CHARH_AREA + CHARV_AREA + FIGURE_AREA）が、ページ全体の面積（PAGE AREA = X SIZE ・ Y SIZE）に対し、n%（例えば、5% ）以下の場合には、画像ページへと変換する。
【０１１０】
（２）ノンブル・柱の削除
リフローデータにした時点で紙書籍の”ページ”という概念がなくなるため、ページ番号が書かれているノンブル領域は必要のないデータとなる、また柱と呼ばれる章題などを書かれた領域についてもページ単位に付与されている情報であるため、リフローデータの生成には用いないことにする。
【０１１１】
そこで、レイアウト解析後にノンブル・柱に相当するデータについては削除を行う。ノンブル・柱の認識は、文字領域の位置を用いて行うものとする。すなわち、所定の範囲（例えば、画像の上下の端から、画像の高さのn%（例えば、20％））以内に存在している文字領域は、ノンブルまたは柱であると認識する。また、前記所定の範囲に存在する文字領域であって、かつ、当該文字領域に含まれる行または列が所定値（例えば、1〜3）以下の場合、ノンブルまたは柱であると認識することとしてもよい。
【０１１２】
また、前記所定の範囲に存在する文字領域であって、かつ、当該文字領域の横幅／画像の横幅が所定値以下の場合、ノンブルまたは柱であると認識することとしてもよい。
【０１１３】
［Ｓ１７：テンポラリ結果の出力］
Ｓ１６の処理後に、レイアウト変換部１６は、処理対象の画像の1ページ分の処理結果を記憶部１８に出力する。なお、Ｓ２０で最終的に出力するリフローデータは、Ｓ１１で読み込んだ全てのページの画像と1 対1 に対応するものであるが、Ｓ１７で一時的な結果を出力することで、読み込んだ画像の1 ページ目の画像ファイルから最終ページの画像ファイルまで逐次的に処理を行う必要がなくなるため、並列計算による処理速度の向上を実現することが可能になる。
【０１１４】
以上説明したＳ１２からＳ１７の処理は、読み込んだ画像の各ページ毎に行う。そのため、未処理のページが存在する場合は（Ｓ１８：ＮＯ）、Ｓ１２に戻り以降の処理を行うとともに、全てのページの処理が終了した場合は（Ｓ１８：ＹＥＳ）、Ｓ１９に進む。
【０１１５】
［Ｓ１９：バーコード解析］
本の背表紙にはバーコードがついており、バーコードを認識することで本の識別子であるISBN コードを取得する。ISBN コードを取得できれば音楽CD のCDDB からメタデータが取得できるのと同様に本のメタデータを取得し、Ｓ１１で読み込んだ画像のコンテンツの管理に役立てることができる。そこで、バーコード解析部１７は、所定のページの画像の中のバーコードを検出し、検出したバーコードからコード種別を判別し、ISBN-13 もしくはISBN-10 の情報のみを取得する。本実施形態では、背表紙は基本的に最終ページに存在すると仮定し、最終ページのみこの処理を行うこととするが、最終ページだけでなく、例えば、最終ページから数ページ（10ページ以下程度）にこの処理を行うこととしてもよい。
【０１１６】
なお、本実施形態では、バーコードの解析にZBar ライブラリを利用するものとする。ZBar ライブラリでは、ImageMagick を活用した画像の入出力を用意しているが、単純にグレースケール画像のメモリを渡すだけで動作可能であり、他の画像読み込みライブラリで代替が可能なため、すでにレイアウト解析のために読み込み済みの画像フォーマットを代わりに渡すことで処理を行う。
【０１１７】
［Ｓ２０：最終結果の出力］
Ｓ１１で読み込んだ画像の全てのページに対し、文字情報および図表の切り出しが行われた後に、Ｓ１７で出力したテンポラリ結果ファイルを統合し、1つのリフローデータとして記憶部１８に出力する。本実施形態では、リフロー表示部３のレンダリング部３１などのレンダリングエンジンで利用できるように、JSON 形式でリフローデータの出力を行う。JSON データは1 コンテンツに対し、1 つのJSONファイルとし、全てのページの解析結果を含んだものとして定義する。本実施形態では、高速化のために並列演算を行っており、逐次先頭からページ順に処理するわけではないため、各ページ毎の処理結果をテンポラリ結果としてＳ１７で出力し、それを最後に統合することで最終JSON ファイルを作成する。
【０１１８】
図２３は、リフローデータの一例を示すものである。
【０１１９】
リフローデータは、切り出した文字および図表のオブジェクト領域毎に設定される。具体的には、オブジェクト領域の種別と、読み込んだ画像のページＩＤと、オブジェクトの左上の座標（x，y）と、オブジェクト領域の幅、オブジェクトの高さなどを備える。オブジェクト領域の種別としては、例えば、0：文字、1：図表、2：改行などが考えられる。その他の種別として、改ページ、章区切り、縦書き文字、横書き文字などがあってもよい。また、オブジェクト領域の種別が改行の場合は、以降の要素を省略して出力する。なお、画像のページＩＤと、座標（x，y）は、読み込んだ画像のどのページのどの場所にオブジェクトがあるかを特定するために用いる。
【０１２０】
読み込んだ画像のページ毎に、読み順で文字、改行を出力し、最後に図表領域の出力を行い、最後に全てのページを統合することで1つのリフローデータを生成し、記憶部１８にする。
【０１２１】
次に、読み込んだ画像（以下、元画像）と、生成したリフローデータとを用いたリフロー表示処理について説明する。
【０１２２】
＜リフロー表示処理＞  
図２４は、スマートフォン、タブレット端末などに搭載されたリフロー表示部３が行う、リフロー表示処理のフローチャートである。
【０１２３】
Ｓ２１において、レンダリング部３１は、リフローデータ生成処理で生成されたリフローデータと、元画像とを読み込む。なお、リフロー表示部３は、レイアウト解析部１の記憶部１８に記憶された元画像およびリフローデータを、例えばネットワークなどを介して取得し、データ保存部２に格納する。
【０１２４】
Ｓ２２において、レンダリング部３１は、読み込んだリフローデータのオブジェクトの集合を、所定の位置で区切った分冊を生成する。すなわち、オブジェクトの集合を、所定のオブジェクト数を基準として分割する。図２５に示すように、分冊の作成には、2つの方法が考えられる。第１の方法は、所定のオブジェクト数でリフローデータを区切ることで、分冊を作成する。図２５（ａ）に示す例では、1000オブジェクト毎にリフローデータを区切る。すなわち、1から1000までのオブジェクトは分冊1とし、1001から2000までのオブジェクトは分冊2とする。
【０１２５】
第２の方法は、所定のオブジェクト数以降で、区切りのよいオブジェクトを検出した箇所で区切って、分冊を作成する。区切りのよいオブジェクトとしては、改行、図表などが考えられる。図２５（ｂ）に示す例では、1000オブジェクト以降で最初に区切りのよいオブジェクト（図示する例では改行）を検出した箇所で区切り、当該オブジェクトまでを分冊1とする。そして、分冊1の区切りの後から1000オブジェクト以降で最初に区切りのよいオブジェクト（図示する例では図表）を検出した箇所で区切り、当該オブジェクトまでを分冊2とする。
【０１２６】
Ｓ２３において、レンダリング部３１は、ユーザの操作対象の分冊に含まれる各オブジェクトを、リフローデータを用いて元画像から切り出し、ディスプレイ３２の表示領域（画面）の大きさに応じて生成した配置領域に、オブジェクトを順次、再配置する。そして、再配置領域をディスプレイの表示領域と等しいサイズに切り分けた（分割した）、リフローページを生成する。図２６は、文字および図表の配置・配列イメージを示すものである。縦書きの場合、オブジェクトを配置する領域のサイズは、例えば高さを表示領域の高さと等しく、幅は無制限とする。この配置領域に分冊の全ての文字を配置した後、配置領域を表示領域の幅と等しい長さ毎に区切り、その１区切りを１つのリフローページとする。
【０１２７】
本実施形態では、CSS3（http://www.w3.org/TR/jlreq/ja/）の多言語対応（CSS3  Writing Modes Module）を用いて、各文字のオブジェクトを所定の拡大率で日本語組版の要件に従って縦書きに配置するものとする。また、CSS2のdisplay:inline-block指定により、画像から切り出したオブジェクト領域を文字として取り扱うことができる。
【０１２８】
なお、図２４に示すように、オブジェクトの種別が改行の場合、無条件で改行し、以降のオブジェクトを次の列に改行する。また、CSS3の段組（CSS3 Multi-column Layout Module）を流用し、文章をリフローページ単位に分割する。また、図表のオブジェクトは、１行・列とし、拡大率は原則固定とする。但し、画面内に収まらない場合は、収まるサイズに拡大率を調整する。
【０１２９】
Ｓ２４において、レンダリング部３１は、Ｓ２３で配置した分冊の、ユーザが注目しているリフローページを、ディスプレイ３２に表示する。
【０１３０】
Ｓ２５で、操作受付部３３は、ユーザの操作（タッチパネルへのタッチなど）を受け付ける。ユーザ操作が、ページ捲りまたはジャンプなどのページ移動の操作の場合であって（Ｓ２６：ＹＥＳ）、移動先のリフローページがＳ２３で処理した分冊と同じ分冊内の場合は（Ｓ２７：ＮＯ）、Ｓ２３で生成されたリフローページの中の移動先のリフローページを表示する（Ｓ２４）。移動先のリフローページが別の分冊内の場合は（Ｓ２７：ＹＥＳ）、Ｓ２３に進み、移動先の分冊に含まれる各オブジェクを配置した全てのリフローページを生成し、その後、ユーザ操作で指定された移動先のリフローページを表示する（Ｓ２４）。
【０１３１】
なお、ページ捲りの場合は、同じ分冊内の場合、現在表示しているリフローページの単純に1つ前または1つ後ろのリフローページを表示する。分冊の端を超えて、1つ前または1つ後に移動する場合は、Ｓ２３で移動先の分冊のオブジェクトを全てリフローページに配置した後に、移動先のリフローページを表示する。
【０１３２】
ジャンプ操作は、移動先のページを元画像のページ番号で指定する。移動先としては指定した元画像のページの最初のオブジェクトが含まれるリフローページを、移動先として表示する。移動先が、異なる分冊の場合は、Ｓ２３で移動先の分冊のオブジェクトを全てリフローページに配置した後に、移動先のリフローページを表示する。
【０１３３】
ユーザ操作が、拡大・縮小操作の場合（Ｓ２８）、操作された拡大率に変更し（Ｓ２９）、Ｓ２３に進み、現在表示している分冊のオブジェクを変更後の拡大率で全てリフローページに再配置し、その後、操作前のリフローページの最初のオブジェクトが含まれる再配置後のリフローページを表示する（Ｓ２４）。
【０１３４】
ユーザ操作が、表示領域サイズの変更の場合（Ｓ３０）、変更後の表示領域サイズに変更し（Ｓ３１）、Ｓ２３に進み、現在表示している分冊のオブジェクを変更後の表示領域サイズのリフローページで再配置し、その後、操作前のリフローページの最初のオブジェクトが含まれる再配置後のリフローページを表示する（Ｓ２４）。表示領域サイズの変更には、例えば、ディスプレイ３２の向きを縦長から横長に変更すること、ディスプレイ３２の表示領域サイズを拡大したり、縮小することなどが考えられる。
【０１３５】
なお、ユーザ操作として、リフローページの表示と元画像のページの表示との切り替え操作があってもよい。例えば、現在表示しているリフローページの最初のオブジェクトが含まれる元画像のページをディスプレイ３２の表示領域に合わせて表示する、または、現在表示している元画像のページに含まれる最初のオブジェクトを含むリフローページを表示することが考えられる。
【０１３６】
以上説明した本実施形態では、文書画像を構成する各文字および図表を囲う矩形座標で構成されるリフローデータを生成し、表示側でディスプレイサイズに合わせてリフローデータを用いて文字画像をリフローさせることで、様々なディスプレイサイズで快適な読書をユーザに提供することができる。
【０１３７】
また、本実施形態では、読み込んだ画像の傾きを推定し、推定した傾きの分だけずらしてヒストグラムを生成する。これにより、列として切り出した列領域または行として切り出した行領域に、余分な領域が含まれることなく、本来の画像の列領域または行領域を正しく切り出すことができる。すなわち、画像として列領域または行領域から切り出した文字をリフローして表示した場合に、文字のがたつきが回避され、見栄えのよい、快適な読書をユーザに提供することができる。
【０１３８】
また、本実施形態では、図表とそのキャプションとを統合し、１つの図表領域として扱うため、リフロー表示の際に図表とキャプションとが分離して表示されてしまうという問題を解消することができる。
【０１３９】
また、本実施形態では、文字領域のX方向およびY方向のヒストグラムを作成することで、文字領域の縦書き・横書きを正しく判定することができる。
【０１４０】
また、本実施形態では、連続する文字矩形の余白を、当該連続する文字矩形に配分することで、文字間隔を整形することができる。
【０１４１】
また、本実施形態では、ルビとその対象とする文字とを統合し、１つの文字矩形として扱うため、リフロー表示の際にルビと対象とする文字とが分離して表示されてしまうという問題を解消することができる。
【０１４２】
また、本実施形態では、読み込んだ画像の列領域または行領域における改行を認識することで、読み込んだ画像における改行部分をリフロー表示においても維持することができる。これにより、読み込んだ画像おける改行部分がリフロー表示において改行でなくなった場合の文字のがたつきの発生を回避することができる。
【０１４３】
また、本実施形態では、生成したリフローデータを、所定のオブジェクト数で区切った分冊単位で、オブジェクトのリフローを行う。これにより、リフロー表示の際に、一度に多くのオブジェクトの処理を行わなくてすむため、処理時間、使用するメモリ量などのリソースを削減することができる。また、操作レスポンスの劣化を防止し、ユーザの利便性を向上することができる。
【０１４４】
なお、本発明は上記実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【符号の説明】
【０１４５】
１  ：レイアウト解析部
１１：画像読み込み部
１２：2値化処理部
１３：ラベリング部
１４：図表認識部
１５：文字切り出し部
１６：レイアウト変換部
１７：バーコード解析部
１８：記憶部
２  ：データ保存部
３  ：リフロー表示部
３１：レンダリング部
３２：ディスプレイ
３３：操作受付部
【図１】
2014085689.tif 000012
【図３】
2014085689.tif 000013
【図４】
2014085689.tif 000014
【図５】
2014085689.tif 000015
【図１０】
2014085689.tif 000016
【図１１】
2014085689.tif 000017
【図１３】
2014085689.tif 000018
【図１６】
2014085689.tif 000019
【図１７】
2014085689.tif 000020
【図１８】
2014085689.tif 000021
【図２１】
2014085689.tif 000022
【図２３】
2014085689.tif 000023
【図２４】
2014085689.tif 000024
【図２５】
2014085689.tif 000025
【図２６】
2014085689.tif 000026
【図２】
2014085689.tif 000027
【図６】
2014085689.tif 000028
【図７】
2014085689.tif 000029
【図８】
2014085689.tif 000030
【図９】
2014085689.tif 000031
【図１２】
2014085689.tif 000032
【図１４】
2014085689.tif 000033
【図１５】
2014085689.tif 000034
【図１９】
2014085689.tif 000035
【図２０】
2014085689.tif 000036
【図２２】
2014085689.tif 000037