(第1実施例)
(通信システム2の構成)
図1に示されるように、通信システム2は、多機能機10と画像処理サーバ50とを備える。多機能機10と画像処理サーバ50とは、インターネット4を介して、相互に通信可能である。多機能機10は、印刷機能、スキャン機能、コピー機能、FAX機能等を含む多機能を実行可能な周辺機器(即ち図示省略のPC(Personal Computerの略)等の周辺機器)である。画像処理サーバ50は、多機能機10のベンダによってインターネット4上に設けられるサーバである。
(多機能機10によって実行される各処理の概要)
多機能機10が実行可能なコピー機能は、モノクロコピー機能とカラーコピー機能とに分類されるが、本実施例では、カラーコピー機能に着目して説明する。カラーコピー機能は、通常カラーコピー機能と文字拡大カラーコピー機能とに分類される。多機能機10は、どちらのカラーコピー機能の実行指示がユーザから与えられる場合でも、まず、スキャン対象の画像を表わすシート(以下では「スキャン対象シート」と呼ぶ)をカラースキャンして、スキャン画像データSIDを生成する。スキャン画像データSIDは、多階調(例えば256階調)のRGBビットマップデータである。
スキャン画像データSIDによって表わされるスキャン画像SI(即ちスキャン対象シートに表現されている画像)は、白色の背景を有すると共に、テキストオブジェクトTOBと写真オブジェクトPOBとを含む。テキストオブジェクトTOBは、黒色の複数個の文字「A〜M」によって構成される3行の文字列を含む。複数個の文字「A〜M」のうちの3個の文字「FGH」は、黒色の修飾線によって修飾されている。修飾線は、3個の文字「FGH」の下側において、横方向に沿って伸びる一重線(即ち下線)である。なお、文字及び修飾線の色は、黒色とは異なる色(例えば赤色)でもよい。写真オブジェクトPOBは、文字を含まず、複数色によって構成される写真を含む。
なお、本実施例の各図では、便宜上、テキストオブジェクトTOBを構成する各文字列が、規則的な順序で並ぶアルファベット「A〜M」によって表現されているが、実際には、各文字列は、センテンスを構成している。各文字列(即ち1行の文字列)では、スキャン画像SI内の横方向の左側から右側に向かってセンテンスが進む。また、3行の文字列「A〜M」では、スキャン画像SI内の縦方向の上側から下側に向かってセンテンスが進む。なお、以下のいずれの画像(例えば後述の処理済み画像PI)においても、1行の文字列を構成する複数個の文字が並ぶ方向、当該方向に直交する方向を、それぞれ、「横方向」、「縦方向」と呼ぶ。また、左側から右側に向かってセンテンスが進むことから、横方向の左端、横方向の右端のことを、それぞれ、「先端」、「後端」と呼ぶ。
多機能機10は、ユーザから通常カラーコピー機能の実行指示が与えられる場合には、スキャン画像データSIDを利用して、ユーザによって設定されるコピー倍率に応じて、画像をシート(以下では「印刷対象シート」と呼ぶ)に印刷する。例えば、コピー倍率が等倍である場合には、多機能機10は、スキャン対象シートに表現されている画像と同じサイズを有する画像を印刷対象シートに印刷する。また、例えば、コピー倍率が画像の拡大を示す倍率である場合には、多機能機10は、スキャン対象シートに表現されている画像よりも大きいサイズを有する画像を印刷対象シートに印刷する。この場合、例えば、A4サイズのスキャン対象シートに表現されている画像が拡大されて、A3サイズの印刷対象シートに印刷される。この結果、2個のオブジェクトTOB,POBの全てが拡大されて表現されている画像が印刷対象シートに印刷される。
一方、多機能機10は、ユーザから文字拡大カラーコピー機能の実行指示が与えられる場合には、インターネット4を介して、スキャン画像データSIDを画像処理サーバ50に送信する。これにより、多機能機10は、インターネット4を介して、画像処理サーバ50から処理済み画像データPIDを受信し、処理済み画像データPIDによって表わされる処理済み画像PIを印刷対象シートに印刷する。特に、多機能機10は、スキャン対象シートと同じサイズ(例えばA4サイズ)を有する印刷対象シートに処理済み画像PIを印刷する。
処理済み画像PIでは、スキャン画像SIと比べて、写真オブジェクトPOBが拡大されずに、テキストオブジェクトTOBが拡大されて表現されている。従って、スキャン画像SI内の各文字のサイズが小さい場合でも、処理済み画像PIでは、各文字のサイズが大きくなるので、ユーザは、処理済み画像PI内の各文字を容易に認識することができる。また、処理済み画像PI内の各文字列「A〜M」のうちの先頭行の文字列「A〜F」の文字数(即ち「6」)は、スキャン画像SI内の各文字列「A〜M」のうちの先頭行の文字列「A〜E」の文字数(即ち「5」)とは異なる。また、スキャン画像SIと同様に、処理済み画像PI内の3個の文字「FGH」は、修飾線によって修飾されている。
(画像処理サーバ50の構成)
画像処理サーバ50は、多機能機10から受信されるスキャン画像データSIDに対して画像処理を実行して、処理済み画像データPIDを生成し、当該処理済み画像データPIDを多機能機10に送信する。画像処理サーバ50は、ネットワークインターフェース52と、制御部60と、を備える。ネットワークインターフェース52は、インターネット4に接続される。制御部60は、CPU62とメモリ64とを備える。CPU62は、メモリ64に格納されているプログラム66に従って、様々な処理(即ち図2等の処理)を実行するプロセッサである。
(画像処理サーバ50によって実行される各処理;図2)
続いて、図2を参照して、画像処理サーバ50のCPU62によって実行される各処理の内容を説明する。CPU62は、インターネット4を介して、多機能機10からスキャン画像データSIDを受信する場合に、図2の処理を開始する。
S100では、CPU62は、文字列解析処理(後述の図3参照)を実行して、スキャン画像SI内の3行の文字列「A〜M」を含むテキストオブジェクト領域TOAを決定する。そして、CPU62は、テキストオブジェクト領域TOA内の3個の帯状領域LAを決定する。
S200では、CPU62は、結合処理(後述の図6参照)を実行して、結合画像CIを表わす結合画像データを生成する。結合画像CIは、3個の帯状領域LAに含まれる3行の文字列が横方向に沿って直線状に結合(即ち連結)された1行の結合文字列「A〜M」を含む。
S300では、CPU62は、目標領域決定処理を実行して、スキャン画像SI内において目標領域TAを決定する。具体的には、CPU62は、まず、テキストオブジェクト領域TOAの左上の頂点に一致する左上の頂点を有するスペース領域を決定する。スペース領域は、テキストオブジェクト領域TOAのサイズ(即ち面積)よりも大きいサイズを有すると共に、他のオブジェクト領域(例えば写真オブジェクトPOBを含むオブジェクト領域)に重複しない。そして、CPU62は、スペース領域のアスペクト比に等しいアスペクト比を有する目標領域TAをスペース領域内に決定する。ここで、目標領域TAのサイズ(即ち面積)は、テキストオブジェクト領域TOAのサイズ(即ち面積)のα倍以下の最大のサイズである。αは、1より大きい値であり、例えば1.4である。目標領域TAの位置は、目標領域TAの左上の頂点がテキストオブジェクト領域TOAの左上の頂点に一致するように設定される。目標領域TAのアスペクト比は、通常、テキストオブジェクト領域TOAのアスペクト比とは異なる。スキャン画像SI内の目標領域TAは、処理済み画像PI内の目標領域TA(S500の処理済み画像PI参照)に一致する。従って、S300の処理は、処理済み画像PI内の目標領域TAを決定する処理に等しい。処理済み画像PI内の目標領域TAは、拡大されて表現される文字列「A〜M」が配置されるべき領域である。
S400では、CPU62は、再配置処理(後述の図9参照)を実行する。まず、CPU62は、再配置領域RAを決定する。そして、CPU62は、結合画像CIを表わす結合画像データを利用して、複数個の文字「A〜M」を再配置領域RA内に再配置することによって、再配置画像RIを表わす再配置画像データを生成する。
S500では、CPU62は、再配置画像RIを表わす再配置画像データを拡大して、拡大画像データを生成する。そして、CPU62は、拡大画像データを利用して、処理済み画像PIを表わす処理済み画像データPIDを生成する。処理済み画像PIでは各文字が拡大されて表現されるが、処理済み画像データPIDは、スキャン画像データSIDと同じ画素数を有する。
S600では、CPU62は、インターネット4を介して、処理済み画像データPIDを多機能機10に送信する。この結果、処理済み画像データPIDによって表わされる処理済み画像PIが多機能機10によって対象印刷シートに印刷される。
(文字列解析処理;図3)
続いて、図3を参照して、図2のS100で実行される文字列解析処理の内容を説明する。S110では、CPU62は、スキャン画像データSIDに対して二値化処理を実行して、スキャン画像データSIDと同じ画素数を有する二値データBD(図3では一部のみが示されている)を生成する。CPU62は、まず、スキャン画像データSIDを利用して、スキャン画像SIの背景色(本実施例では白色)を決定する。具体的には、CPU62は、スキャン画像データSID内の複数個の画素の画素値の頻度の分布を示すヒストグラムを生成する。そして、CPU62は、当該ヒストグラムを利用して、最高の頻度を有する画素値(以下では「最高頻度画素値」と呼ぶ)を特定することによって、背景色を決定する。次いで、CPU62は、スキャン画像データSID内の複数個の画素のそれぞれについて、当該画素の画素値が最高頻度画素値に一致する場合には、当該画素に対応する位置に存在する二値データBD内の画素の画素値として「0」を割り当て、当該画素の画素値が最高頻度画素値に一致しない場合には、当該画素に対応する位置に存在する二値データBD内の画素の画素値として「1」を割り当てる。この結果、二値データBDでは、テキストオブジェクトTOBに含まれる各文字(例えば「A」,「B」)及び修飾線を表わす各画素が画素値「1」を示し、写真オブジェクトPOBを表わす各画素が画素値「1」を示し、それ以外の各画素(即ち背景を表わす画素)が画素値「0」を示す。なお、以下では、二値データBD内の画素値「1」を示す画素、画素値「0」を示す画素のことを、それぞれ、「ON画素」、「OFF画素」と呼ぶ。
S120では、CPU62は、S110で生成された二値データBDに対してラべリング処理を実行して、二値データBDと同じ画素数を有するラベルデータLD(図3では一部のみが示されている)を生成する。具体的には、CPU62は、二値データBD内の複数個のON画素を2個以上のON画素群に分けて、当該2個以上のON画素群のそれぞれに異なる画素値(例えば「1」、「2」等)を割り当てる。1個のON画素群は、互いに隣接する2個以上のON画素によって構成される。即ち、CPU62は、ラべリング処理の対象の1個のON画素に隣接する8個の隣接画素の中に1個以上のON画素が含まれる場合には、当該対象の1個のON画素と、8個の隣接画素のうちの1個以上のON画素と、を同じON画素群として区分する(即ちグループ化する)。CPU62は、ラべリング処理の対象のON画素を変えながら各ON画素のグループ化を順次実行することによって、2個以上のON画素群を決定する。例えば、図3のラベルデータLDでは、文字「A」を表わす各ON画素(即ち1個のON画素群)に画素値「1」が割り当てられており、文字「B」を表わす各ON画素(即ち他の1個のON画素群)に画素値「2」が割り当てられている。
S130では、CPU62は、S120で生成されたラベルデータLDを利用して、上記の各ON画素群に対応する各単位領域を決定する。各単位領域は、対応する1個のON画素群に外接する矩形の領域である。CPU62は、例えば、図3のラベルデータLDを利用する場合には、画素値「1」が割り当てられているON画素群に外接する単位領域RE1(即ち文字「A」に対応する単位領域)と、画素値「2」が割り当てられているON画素群に外接する単位領域RE1(即ち文字「B」に対応する単位領域)と、を決定する。より具体的には、CPU62は、スキャン画像SIの中から、13個の文字「A」〜「M」に対応する13個の単位領域と、1個の修飾線に対応する1個の単位領域と、1個の写真オブジェクトPOBに対応する1個の単位領域と、を含む15個の単位領域を決定する。上記の単位領域の決定は、当該単位領域の各頂点を構成する各画素の位置をメモリ64に記憶することによって実行される。ただし、以下では、「領域(又は位置)の決定」に関する説明において、画素の位置をメモリ64に記憶することに関する説明を省略する。
S140では、CPU62は、S130で決定された単位領域を利用して、スキャン画像SI内のオブジェクト領域を決定する。具体的には、CPU62は、15個の単位領域を複数個の単位領域群に区分し、各単位領域群に対応する各オブジェクト領域を決定する。1個の単位領域群は、近傍に存在する1個以上の単位領域によって構成される。CPU62は、2個の単位領域の間の距離が所定の距離未満である場合に、当該2個の単位領域を同じ単位領域群に区分する。上記の所定の距離は、スキャン画像データSIDの解像度に応じて予め決められている。例えば、本実施例では、スキャン画像データSIDが300dpiの解像度を有しており、300dpiの解像度に対応する上記の所定の距離は、10画素である。そして、図3のラベルデータLDでは、文字「A」に対応する単位領域RE1と、文字「B」に対応する単位領域RE2と、の間の距離は、3画素である。従って、CPU62は、単位領域RE1と単位領域RE2とを同じ単位領域群に区分する。これにより、CPU62は、近傍に存在する各文字をグループ化することができる。より具体的には、CPU62は、スキャン画像SIについて、テキストオブジェクトTOB内の13個の文字「A」〜「M」と1個の修飾線とに対応する14個の単位領域を含む単位領域群と、1個の写真オブジェクトPOBに対応する1個の単位領域を含む単位領域群と、を含む2個の単位領域群を決定する。そして、CPU62は、2個の単位領域群のそれぞれについて、当該単位領域群に外接する矩形の領域をオブジェクト領域として決定する。このように、CPU62は、ラベルデータLD内のオブジェクト領域を決定することによって、スキャン画像SI内において、テキストオブジェクトTOB内の13個の文字「A」〜「M」と1個の修飾線とを含むオブジェクト領域TOAと、写真オブジェクトPOBを含むオブジェクト領域POAと、を含む2個のオブジェクト領域TOA,POAを決定する。
S150では、CPU62は、S140で決定された2個のオブジェクト領域TOA,POAのそれぞれについて、当該オブジェクト領域の種類を決定する。具体的には、CPU62は、各オブジェクト領域TOA,POAが、文字を含むテキストオブジェクト領域(以下では単に「テキスト領域」と呼ぶ)であるのか否かを判断する。CPU62は、まず、スキャン画像データSIDのうち、オブジェクト領域TOAを表わす部分画像データを構成する複数個の画素の画素値の頻度の分布を示すヒストグラムを生成する。そして、CPU62は、当該ヒストグラムを利用して、頻度がゼロより高い画素値の数(即ち、オブジェクト領域TOAで利用されている色の数)を算出する。CPU62は、算出済みの数が所定数(例えば「10」)未満である場合には、オブジェクト領域TOAがテキスト領域であると判断し、算出済みの数が上記の所定数以上である場合には、オブジェクト領域TOAがテキスト領域でないと判断する。オブジェクト領域TOAは、黒色の文字「A」〜「M」と、黒色の修飾線と、白色の背景と、を含む。従って、オブジェクト領域TOAに対応するヒストグラムでは、通常、黒色を示す画素値と白色を示す画素値とを含む2個の画素値のみの頻度がゼロより高い。このために、CPU62は、オブジェクト領域TOAがテキスト領域であると判断する。一方、例えば、写真オブジェクトPOBでは、通常、10色以上の色が利用されている。従って、オブジェクト領域POAに対応するヒストグラムでは、通常、頻度がゼロより高い画素値の数が上記の所定数以上になる。このために、CPU62は、オブジェクト領域POAが、テキスト領域ではなく、写真オブジェクト領域であると判断する。
S160では、CPU62は、S150で決定されたテキスト領域TOAに対して帯状領域決定処理(後述の図4参照)を実行して、テキスト領域TOA内の各帯状領域を決定する。ただし、CPU62は、写真オブジェクト領域POAに対して帯状領域決定処理を実行しない。
S180では、CPU62は、S160で決定された各帯状領域に対して修飾物解析処理(後述の図5参照)を実行して、各帯状領域が、文字列を含む文字列帯状領域であるのか、修飾線を含む修飾物帯状領域であるのか、を決定する。S180が終了すると、図3の処理が終了する。
(帯状領域決定処理;図4)
続いて、図4を参照して、図3のS160で実行される帯状領域決定処理の内容を説明する。以下では、スキャン画像SI内のテキスト領域TOAを例として、図4の処理の内容を説明する。スキャン画像SI内に複数個のテキストオブジェクトが含まれる場合には、テキストオブジェクト毎(即ちテキスト領域毎)に図4の処理が実行される。
S162では、CPU62は、テキスト領域TOAに対応する射影ヒストグラムを生成する。当該射影ヒストグラムは、二値データBD(S110参照)を構成する複数個の画素のうち、テキスト領域TOAを表わす各画素を横方向に射影する場合におけるON画素(即ち「1」を示す画素)の頻度の分布を示す。換言すると、当該射影ヒストグラムは、スキャン画像SIDを構成する複数個の画素のうち、テキスト領域TOAを表わす各画素を横方向に射影する場合における文字列及び修飾線を構成する画素(即ち黒色を表わす画素)の頻度の分布を示す。当該射影ヒストグラムでは、文字列及び修飾線が、頻度がゼロより高い範囲(以下では「高頻度範囲」と呼ぶ)で表わされる。また、当該射影ヒストグラムでは、2行の文字列の間の行間(例えば「A〜E」と「F〜J」の間の行間)、及び、文字列と修飾線との間の行間(例えば「F〜J」と修飾線の間の行間)が、頻度がゼロである範囲で表わされる。
S164では、CPU62は、S162で生成された射影ヒストグラムを利用して、1個以上の高頻度範囲に対応する1個以上の帯状領域を決定する。1個の帯状領域の縦方向の長さ(即ち縦方向の画素数)は、射影ヒストグラムにおける当該帯状領域に対応する高頻度範囲の縦方向の長さに等しい。また、1個の帯状領域の横方向の長さ(即ち横方向の画素数)は、テキスト領域TOAの横方向の長さに等しい。この結果、CPU62は、テキスト領域TOAの中から、文字列「A〜E」を含む帯状領域LA11と、文字列「F〜J」を含む帯状領域LA12と、修飾線を含む帯状領域LA13と、文字列「K〜M」を含む帯状領域LA14と、を含む4個の帯状領域LA11〜LA14を決定する。
続いて、CPU62は、S166〜S174の処理を実行して、各帯状領域LA11〜LA14に対応する各基準位置を決定する。基準位置は、図2のS200の結合処理において、各帯状領域に含まれる各文字列を結合するための基準となる位置である。
S166では、CPU62は、S164で決定された4個の帯状領域LA11〜LA14のうちの1個の帯状領域(以下では「対象帯状領域」と呼ぶ)を処理対象として決定する。以下では、帯状領域LA11が対象帯状領域として決定される場合を例として説明する。
S168では、CPU62は、対象帯状領域LA11の縦方向の全範囲ARの中から、縦方向の3画素分の評価範囲を設定する。対象帯状領域LA11に関する1回目のS168では、CPU62は、3画素のうちの最も上の画素が対象帯状領域LA11の縦方向の全範囲ARの中間位置に存在するように、1回目の評価範囲を設定する。対象帯状領域LA11に関する2回以降のS168では、CPU62は、前回の評価範囲から1画素だけ下側にずれるように、今回の評価範囲を設定する。なお、変形例では、評価範囲は、縦方向の3画素分の範囲でなくてもよく、縦方向の1画素分又は2画素分の範囲であってもよいし、縦方向の4画素分以上の範囲であってもよい。
S170では、CPU62は、今回の評価範囲について、合計下辺長さを算出する。合計下辺長さは、対象帯状領域LA11内の5個の文字「A」〜「E」に対応する5個の単位領域(図3のS130で決定済み)のうちの1個以上の単位領域の下辺XA〜XEが今回の評価範囲内に存在する場合に、当該1個以上の単位領域の下辺の長さの和である。図4の例では、1回目及び2回目の評価範囲では、1個の単位領域の下辺も存在しないので、CPU62は、合計下辺長さとして「0」を決定する。そして、p回目の評価範囲では、5個の下辺XA〜XEの全てが存在するので、CPU62は、5個の下辺XA〜XEの長さの和である合計下辺長さとして「1」以上の値を算出する。
S172では、CPU62は、対象帯状領域LA11の全ての評価範囲について、S168及びS170の処理が終了したのか否かを判断する。具体的には、CPU62は、対象帯状領域LA11の縦方向の全範囲ARの下端と、前回の評価範囲(例えばp回目の評価範囲)の下端と、が一致する場合には、全ての評価範囲について処理が終了したと判断して(S172でYES)、S174に進む。一方、CPU62は、全ての評価範囲について処理が終了していないと判断する場合(S172でNO)には、S168に戻り、評価範囲を新たに設定する。
S174では、CPU62は、複数個の評価範囲について算出された複数個の合計下辺長さに基づいて、対象帯状領域LA11の基準位置を決定する。具体的には、CPU62は、まず、複数個の評価範囲の中から、複数個の合計下辺長さのうちの最大の合計下辺長さが算出された1個の評価範囲(例えばp回目の評価範囲)を選択する。なお、CPU62は、複数個の評価範囲の中に、最大の合計下辺長さが算出された2個以上の評価範囲が存在する場合には、当該2個以上の評価範囲のうち、最初に設定された評価範囲を選択する。そして、CPU62は、選択済みの評価範囲の縦方向の中間位置を基準位置として決定する。即ち、図4の例では、対象帯状領域LA11の縦方向において、5個の下辺XA〜XEの近傍の位置、即ち、対象帯状領域LA11の最下端の近傍の位置が、基準位置として決定される。
S176では、CPU62は、全ての帯状領域LA11〜LA14について、S166〜S174の処理が終了したのか否かを判断する。CPU62は、処理が終了していないと判断する場合(S176でNO)には、S166において、未処理の帯状領域(例えばLA12)を処理対象として決定して、S168以降の各処理を再び実行する。この結果、4個の帯状領域LA11〜LA14に対応する4個の基準位置が決定される。そして、CPU62は、処理が終了したと判断する場合(S176でYES)には、図4の処理を終了する。
上述したように、本実施例では、基準位置を決定するために、各文字の単位領域の下辺の長さに着目している。従って、対象帯状領域LA11内の縦方向の全範囲ARのうちの比較的に上側の範囲では、通常、合計下辺長さが最大にならない。このために、S168では、対象帯状領域LA11の縦方向の全範囲ARの中間位置に1回目の評価範囲が設定され、その後、評価範囲を下側に移動させる。これにより、S168で設定される評価範囲の数を減らすことができ、この結果、基準位置を迅速に決定することができる。
また、図4に示される他の例では、S166で処理対象として決定される対象帯状領域は、小文字のアルファベットである6個の文字「d」〜「i」を含む。文字「i」以外の各文字については、1個の単位領域が決定されるが、文字「i」については、2個の単位領域が決定される。文字「g」の下辺Xgは、他の5個の文字の下辺Xd〜Xf,Xh,Xi2よりも下側に存在している。この例では、下辺Xi1を含む評価範囲と、下辺Xd〜Xf,Xh,Xi2を含む評価範囲と、下辺Xgを含む評価範囲と、のそれぞれについて、1以上の合計下辺長さが算出される。そして、下辺Xd〜Xf,Xh,Xi2を含む評価範囲について算出される合計下辺長さが最大になるので、当該評価範囲の中間位置が基準位置として決定される。このように、本実施例では、合計下辺長さが最大である評価範囲に基づいて基準位置が決定され、その基準位置に基づいて2行以上の文字列が結合される(図2のS200の結合画像CI参照)。このために、ユーザが、処理済み画像PI(図2のS500参照)内の文字列を構成する複数個の文字の並びを不自然に感じるのを抑制することができる。
(修飾物解析処理;図5)
続いて、図5を参照して、図3のS180で実行される修飾物解析処理の内容を説明する。以下では、スキャン画像SI内のテキスト領域TOAを例として、図5の処理の内容を説明する。スキャン画像SI内に複数個のテキストオブジェクトが含まれる場合には、テキストオブジェクト毎(即ちテキスト領域毎)に図5の処理が実行される。
S181では、CPU62は、テキスト領域TOAの4個の帯状領域LA11〜LA14の縦方向に沿った4個の長さh11〜h14を特定し、次いで、4個の長さh11〜h14の平均値haを算出する。
S182では、CPU62は、S181で算出された平均値haに1/2を乗算して、閾値Thを算出する。これにより、CPU62は、4個の長さh11〜h14に応じた閾値Thを設定することができる。閾値Thは、後述のS184の判断で利用される。なお、変形例では、閾値Thは、平均値haに等しい値であってもよいし、平均値haの1/3又は2/3であってもよい。即ち、閾値Thは、平均値ha以下の値であればよい。
S183では、CPU62は、4個の帯状領域LA11〜LA14のうちの1個の帯状領域(以下では「対象帯状領域」と呼ぶ)を処理対象として決定する。
S184では、CPU62は、対象帯状領域の縦方向の長さが、S182で算出された閾値Th以下であるのか否かを判断する。これにより、CPU62は、対象帯状領域が、文字列を含む文字列帯状領域であるのか、修飾線を含む修飾物帯状領域であるのか、を判断することができる。文字列帯状領域(例えばLA11,LA12,LA14)の縦方向の長さは、通常、閾値Thよりも大きい。従って、CPU62は、対象帯状領域の縦方向の長さが閾値Thよりも大きいと判断する場合(S184でNO)には、対象帯状領域が文字列帯状領域であると判断する。また、修飾物帯状領域(例えばLA13)の縦方向の長さは、通常、閾値Th以下である。従って、CPU62は、対象帯状領域の縦方向の長さが閾値Th以下であると判断する場合(S184でYES)には、対象帯状領域が修飾物帯状領域であると判断する。
CPU62は、対象帯状領域が文字列帯状領域であると判断する場合(S184でNO)には、S195をスキップしてS198に進む。一方、CPU62は、対象帯状領域が修飾物帯状領域であると判断する場合(S184でYES)には、S195において、対象帯状領域と上行の帯状領域とを結合する。上行の帯状領域は、対象帯状領域の上側において、対象帯状領域の隣に存在する帯状領域である。具体的には、CPU62は、対象帯状領域と上行の帯状領域との双方に外接する領域を新たな帯状領域として決定する。また、CPU62は、新たな帯状領域の基準位置として、対象帯状領域の基準位置ではなく、上行の帯状領域の基準位置を利用する。例えば、CPU62は、対象帯状領域である帯状領域LA13と、上行の帯状領域である帯状領域LA12と、を結合して、新たな帯状領域LA12’を決定する。この際に、CPU62は、新たな帯状領域LA12’の基準位置として、上行の帯状領域LA12の基準位置を利用し、対象帯状領域LA13の基準位置を利用しない(即ち、対象帯状領域LA13とその基準位置をメモリ64から消去する)。
上述したように、本実施例では、CPU62は、対象帯状領域が修飾物帯状領域LA13であると判断する場合には、修飾物帯状領域LA13と文字列帯状領域LA12とを結合して、新たな帯状領域LA12’を決定する。これにより、文字列「F〜J」と修飾線との双方が1個の帯状領域LA12’内に含まれることになる。この結果、以降の処理では、CPU62は、文字列「F〜J」と修飾線とを分けて扱うのではなく、文字列「F〜J」と修飾線とを1行の修飾文字列として扱うことになる。なお、以下では、帯状領域LA12’のことを「修飾文字列帯状領域」と呼ぶことがある。また、修飾文字列帯状領域LA12’では、修飾物帯状領域LA13の基準位置ではなく、文字列帯状領域LA12の基準位置が利用される。そして、その基準位置に基づいて2行以上の文字列が結合されるので(図2のS200の結合画像CI参照)、ユーザが、処理済み画像PI(図2のS500参照)内の文字列を構成する複数個の文字の並びを不自然に感じるのを抑制することができる。
S198では、CPU62は、対象テキスト領域TOAに含まれる全ての帯状領域LA11〜LA14について、S183〜S195の処理が終了したのか否かを判断する。CPU62は、処理が終了していないと判断する場合(S198でNO)には、S183において、未処理の帯状領域(例えばLA12)を処理対象として決定して、S184以降の各処理を再び実行する。そして、CPU62は、処理が終了したと判断する場合(S198でYES)には、図5の処理を終了する。図5の例では、4個の帯状領域LA11〜LA14に基づいて、3個の帯状領域LA11,LA12’,LA14が決定される。
(結合処理;図6)
続いて、図6を参照して、図2のS200で実行される結合処理の内容を説明する。S210では、CPU62は、スキャン画像SI内の1個以上のテキスト領域のうちの1個のテキスト領域(以下では「対象テキスト領域」と呼ぶ)を処理対象として決定する。以下では、テキスト領域TOAが対象テキスト領域として決定される場合を例として説明する。
S220では、CPU62は、対象テキスト領域TOAに含まれる3行の文字列「A〜M」が結合されている結合画像CIを表わす結合画像データを生成する。具体的には、CPU62は、まず、スキャン画像データSIDの中から、テキスト領域TOAについて決定された3個の帯状領域LA11,LA12’,LA14(図5参照)を表わす3個の部分画像データを取得する。そして、CPU62は、図6の(1)〜(3)に示されるように、各部分画像データを利用して、結合画像データを生成する。以下では、(1)〜(3)の内容を詳しく説明する。
(1)に示されるように、CPU62は、最も上の帯状領域LA11を表わす第1の部分画像データの後端と、上から2番目の帯状領域LA12’を表わす第2の部分画像データの先端と、を結合して、中間画像MI1を表わす中間画像データを生成する。中間画像MI1は、帯状領域LA11内の文字列「A〜E」と、帯状領域LA12’内の文字列「F〜J」と、が結合された文字列「A〜J」を含む。この際に、CPU62は、結合される2行の文字列の間に横方向の所定の長さの余白(即ち「E」と「F」の間の余白)が形成されるように、当該余白を表わす画素、より具体的には、スキャン画像SI内の背景色を有する画素を補充して、中間画像データを生成する。即ち、CPU62は、当該余白を表わす画素を介して、第1及び第2の部分画像データを結合する。さらに、CPU62は、2個の帯状領域LA11,LA12’について決定された2個の基準位置(図4のS174参照)が縦方向の同じ位置に存在するように、第1及び第2の部分画像データを結合する。帯状領域LA12’が文字列「F〜J」のみならず装飾線を含むので、帯状領域LA12’の縦方向の長さは、帯状領域LA11の縦方向の長さよりも大きい。従って、中間画像MI1では、帯状領域LA11に対応する部分(即ち「A〜E」)と、帯状領域LA12’に対応する部分(即ち「F〜J」)と、の間に段差が形成されている。
次いで、(2)に示されるように、CPU62は、(1)の中間画像データの後端と、最も下の帯状領域LA14を表わす第3の部分画像データの先端と、を結合して、中間画像MI2を表わす中間画像データを生成する。(1)と同様に、CPU62は、所定の余白を表わす画素を介して、(1)の中間画像データと第3の部分画像データとを結合する。また、CPU62は、3個の帯状領域LA11,LA12’,LA14について決定された3個の基準位置が縦方向の同じ位置に存在するように、(1)の中間画像データと第3の部分画像データとを結合する。中間画像MI2では、帯状領域LA12’に対応する部分(即ち「F〜J」)と、帯状領域LA14に対応する部分(即ち「K〜M」)と、の間に段差が形成されている。
最後に、(3)に示されるように、CPU62は、中間画像MI2に外接する矩形形状を有する結合画像CIが形成されるように、中間画像MI2を表わす中間画像データに余白領域を表わす画素、より具体的には、スキャン画像SI内の背景色を有する画素を補充する。これにより、帯状領域LA11に対応する部分(即ち「A〜E」)と帯状領域LA12’に対応する部分(即ち「F〜J」)との間の段差、及び、帯状領域LA12’に対応する部分(即ち「F〜J」)と帯状領域LA14に対応する部分(即ち「K〜M」)との間の段差がなくなり、矩形形状を有する結合画像CIを表わす結合画像データが完成する。
なお、仮に、帯状領域LA12と帯状領域LA13とが結合されていなければ(即ち図5の処理が実行されなければ)、S220において、以下の処理が実行され得る。即ち、まず、帯状領域LA11内の文字列「A〜E」と帯状領域LA12内の文字列「F〜J」とが横方向に沿って直線状に並ぶように2行の文字列が結合され、その後、文字列「A〜J」と帯状領域LA13内の修飾線とが横方向に沿って直線状に並ぶように、文字列と修飾線とが結合される。この場合、文字列「A〜J 」が得られる。そして、文字列「A〜J 」と文字列「K〜M」とが横方向に沿って直線状に並ぶように、2行の文字列が結合される。この結果、最終的に得られる結合文字列は、「A〜J K〜M」である。即ち、文字列「FGH」が修飾線によって修飾されていない結合文字列が得られる。これに対し、本実施例では、帯状領域LA12と帯状領域LA13とが結合されて、1個の修飾文字列帯状領域LA12’が決定される(図5のS195)。これにより、CPU62は、帯状領域LA12内の文字列「F〜J」と帯状領域LA13内の修飾線とを1行の修飾文字列として扱って、S220の結合を実行することができる。この結果、文字列「FGH」が修飾線によって修飾されている結合文字列「A〜M」を含む結合画像CIを表わす結合画像データが生成される。
なお、図5の例では、英語の文字列に修飾線が付されている状況が想定されているが、英語ではなく、日本語、中国語等の他の言語に修飾線が付されている場合でも、文字列と修飾線とが1行の修飾文字列として扱われて、文字列が修飾線によって修飾されている文字列を表わす結合画像データが生成される。
S230では、CPU62は、S220で生成された結合画像データを利用して分断候補位置決定処理(後述の図7参照)を実行して、結合画像データを分断するための候補の位置を決定する。
S250では、CPU62は、スキャン画像SI内の全てのテキスト領域について、S210〜S230の処理が終了したのか否かを判断する。CPU62は、処理が終了していないと判断する場合(S250でNO)には、S210において、未処理のテキスト領域を処理対象として決定する。そして、CPU62は、処理が終了したと判断する場合(S250でYES)には、図6の処理を終了する。
(分断候補位置決定処理;図7)
続いて、図7を参照して、図6のS230で実行される分断候補位置決定処理の内容を説明する。以下では、英語のセンテンス「I said I have a dream.」を含む結合画像CIを表わす結合画像データが利用される場合を例として、処理の内容を説明する。当該センテンスのうち、「I said」には修飾線が付されておらず、「I have a dream.」には修飾線が付されている。
S234では、CPU62は、結合画像データに対して二値化処理を実行する。当該二値化処理の内容は、図3のS110と同様である。
S236では、CPU62は、S234で生成された二値データを利用して、結合画像データに対応する射影ヒストグラムを生成する。当該射影ヒストグラムは、二値データを構成する各画素を縦方向に射影する場合におけるON画素(即ち「1」を示す画素)の頻度の分布を示す。当該射影ヒストグラムでは、各文字及び修飾線が、頻度がゼロより高い範囲で表わされ、2個の文字の間の余白部分(例えば、「I said」において、「I」と「s」の間の余白部分、「s」と「a」の間の余白部分等)が、頻度がゼロである範囲で表わされる。
S238では、CPU62は、結合画像CI内において、文字構成画素が存在する領域と、文字構成画素が存在しない領域と、を区別するための閾値を設定する。具体的には、CPU62は、原則として、ゼロを閾値として設定する。ただし、CPU62は、S236で生成された射影ヒストグラムの中に1個以上の連続範囲が存在する場合には、1個以上の連続範囲を選択して、選択済みの1個以上の連続範囲のそれぞれについて、当該連続範囲内の頻度の最小値(即ちゼロより大きい値)を閾値として決定する。即ち、CPU62は、連続範囲についてゼロより大きい値を閾値として決定し、連続範囲以外の範囲についてゼロを閾値として決定する。連続範囲は、例えば、センテンスの中に修飾線が含まれる場合に、当該修飾線を表わす範囲である。修飾線がON画素で表わされるので、射影ヒストグラム内の修飾線に対応する範囲は、頻度がゼロより大きくなり、かつ、横方向に比較的に長くなる。このために、本実施例では、CPU62は、頻度がゼロより高く、かつ、所定の長さ以上の横方向の長さを有する範囲を、連続範囲として選択する。上記の所定の長さは、スキャン画像データSIDの解像度に応じて予め決定されている。例えば、スキャン画像データSIDの解像度が300dpiである場合には、上記の所定の長さは50画素であり、解像度が600dpiである場合には、上記の所定の長さは100画素である。上記の所定の長さは、装飾線の存在を特定可能な長さであればどのような値であってもよいが、例えば、1個の文字の横方向の長さよりも大きい値である。ここで決定される閾値は、後述のS240及びS244で利用される。
S240では、CPU62は、S236で生成された射影ヒストグラムと、S238で決定された閾値と、を利用して、1個の中間余白領域を処理対象として決定する。中間余白領域は、2個の文字の間の余白部分に対応する領域である。具体的には、中間余白領域は、S238で決定された閾値よりも高い頻度を有する2個の領域に挟まれた領域であって、当該閾値以下の頻度を有する領域である。例えば、図7の結合画像CIでは、修飾線が付されていない文字列「I said」に対応する領域について、頻度ゼロが閾値として決定される。この場合、例えば、ゼロより高い頻度を有する2個の領域(即ち「I」の領域と「s」の領域)に挟まれた領域BA1(即ち頻度ゼロである領域BA1)が、中間余白領域である。1回目のS240では、CPU62は、最も先端側(即ち左側)に存在する1個の中間余白領域(図7の結合画像CIでは領域BA1)を処理対象として決定する。そして、2回目以降のS240では、CPU62は、前回の処理対象の中間余白領域の右側に存在する1個以上の中間余白領域のうち、最も先端側に存在する1個の中間余白領域(例えば「said」のうちの「s」と「a」の間の領域)を今回の処理対象として決定する。
S242では、CPU62は、処理対象の中間余白領域の横方向の長さがh/4未満であるのか否かを判断する。ここで、「h」は、結合画像CIの縦方向の長さ(即ち縦方向の画素数)である。
CPU62は、処理対象の中間余白領域の横方向の長さがh/4以上であると判断する場合(S242でNO)、換言すれば、当該中間余白領域が比較的に大きいと判断する場合には、S246において、当該中間余白領域の右端を分断候補位置として決定する。このように、1個の文字内の位置ではなく、余白領域が分断候補位置として決定されるので、1個の文字(例えば「A」)が分断されてしまうことを抑制することができる。また、中間余白領域の右端が分断候補位置として決定される理由は、以下のとおりである。例えば、1行の文字列に含まれる2個の中間余白領域のそれぞれの右端で当該文字列が分断されて、縦方向に沿って並ぶ3行目の文字列が再配置される状況を想定する。この場合、2行目及び3行目の文字列の左側に余白が形成されないので、2行目及び3行目の文字列の先端を揃えることができる。このように、2行目以降の文字列の先端を揃えることができるので、再配置される複数行の文字列の見た目を美しくすることができる。なお、変形例では、S246において、CPU62は、中間余白領域の右端以外の位置(例えば、左端、中間位置等)を分断候補位置として決定してもよい。S246が終了すると、S248に進む。
一方、CPU62は、処理対象の中間余白領域の横方向の長さがh/4未満であると判断する場合(S242でYES)、換言すれば、当該中間余白領域が比較的に小さいと判断する場合には、S244において、左側隣接領域と右側隣接領域との少なくとも一方の横方向の長さがh/2未満であるのか否かを判断する。左側(又は右側)隣接領域は、処理対象の中間余白領域の左側(又は右側)で当該中間余白領域に隣接する領域であって、S238で決定された閾値よりも高い頻度を有する領域である。例えば、「said」のうちの「s」と「a」との間の中間余白領域では、「s」に対応する領域、「a」に対応する領域が、それぞれ、左側隣接領域、右側隣接領域である。
CPU62は、左側隣接領域と右側隣接領域との双方の横方向の長さがh/2以上であると判断する場合(S244でNO)、例えば、左側隣接領域と右側隣接領域との双方に比較的に大きな文字(例えば、アルファベットの大文字、漢字、日本語の仮名等)が存在する場合には、S246において、中間余白領域の右端を分断候補位置として決定する。一方、CPU62は、左側隣接領域と右側隣接領域との少なくとも一方の横方向の長さがh/2未満であると判断する場合(S244でYES)、例えば、左側隣接領域と右側隣接領域との少なくとも一方に比較的に小さな文字(例えばアルファベットの小文字)又は記号(例えば、カンマ、ピリオド、引用符号等)が存在する場合には、S246を実行せずに、S248に進む。即ち、CPU62は、今回の処理対象の中間余白領域を分断候補位置として決定しない。
S248では、CPU62は、結合画像CIに含まれる全ての中間余白領域について、S240〜S246の処理が終了したのか否かを判断する。CPU62は、処理が終了していないと判断する場合(S248でNO)には、S240において、未処理の中間余白領域を処理対象として決定して、S242以降の各処理を再び実行する。そして、CPU62は、処理が終了したと判断する場合(S248でYES)には、図7の処理を終了する。
(分断位置決定処理の具体例;図8)
続いて、図8を参照して、図7の分断位置決定処理の具体例を説明する。ケースAの結合画像は、図7の結合画像CIと同じものである。「I said」のうちの「I」と「s」の間の領域BA1が1個目の処理対象の中間余白領域として決定される(S240)。中間余白領域BA1は、単語「I」と単語「said」の間の余白(いわゆるスペース)に相当し、通常、h/4以上の横方向の長さを有する(S242でNO)。従って、中間余白領域BA1が分断候補位置として決定される(S246)。2個の英単語「I」,「said」の間の余白で文字列が分断されて改行されても、ユーザが分断後の各文字列を読み難いと感じる可能性が低いので、本実施例では、中間余白領域BA1が分断候補位置として決定される。
次いで、「I said」のうちの「s」と「a」の間の領域BA2が2個目の処理対象の中間余白領域として決定される(S240)。中間余白領域BA2は、1個の英単語「said」を構成する2個の文字(即ち「s」と「a」)の間の余白に相当し、通常、h/4未満の横方向の長さを有する(S242でYES)。また、中間余白領域BA2の左側隣接領域、右側隣接領域は、それぞれ、「said」のうちの「s」、「a」に相当し、通常、h/2未満の横方向の長さを有する(S244でYES)。従って、中間余白領域BA2が分断候補位置として決定されない。1個の英単語(例えば「said」)を構成する2個の文字(例えば「s」と「a」)の間の余白で文字列が分断されて改行されると、ユーザが分断後の各文字列を読み難いと感じる可能性が高いので、本実施例では、中間余白領域BA2が分断候補位置として決定されない。
上記と同様に、3個目以降の各中間余白領域についても、当該中間余白領域が分断候補位置であるのか否かが決定される。また、修飾線が付されている文字列「I have a dream.」に対応する連続範囲については、ゼロより大きい閾値以下の頻度を有する領域(例えば「I」と「h」の間の領域)が中間余白領域として決定される(S240)。また、当該連続範囲については、当該閾値よりも大きい頻度を有する領域(例えば、「I」に対応する領域、「h」に対応する領域等)が、隣接領域として決定される(S244)。このように、本実施例では、修飾線に対応する連続範囲について、ゼロより大きい閾値が決定されるので、修飾線を考慮して、中間余白領域と隣接領域とを適切に決定することができる。ケースAでは、結果として、センテンス「I said I have a dream.」について、5個の分断候補位置が決定される。
なお、ケースAでは、2個の英単語の間の余白が分断候補位置として決定される例を想定している。ただし、例えば、日本語の文章と文章との間に1文字分のスペースが挿入されている場合でも、当該スペースは、通常、S242でNOと判断され、分断候補位置として決定される(S246)。英語及び日本語とは異なる言語についても、比較的に大きい余白が存在する場合には、当該余白は、通常、分断候補位置として決定される。
ケースBの結合画像は、日本語の文字列を含む。中間余白領域B5は、括弧C1と平仮名C2(即ち「あ」)の間の余白に相当し、通常、h/4未満の横方向の長さを有する(S242でYES)。また、右側隣接領域(即ち平仮名C2)は、通常、h/2以上の横方向の長さを有するが、左側隣接領域(即ち括弧C1)は、通常、h/2未満の横方向の長さを有する(S244でYES)。従って、中間余白領域BA5が分断候補位置として決定されない。括弧と文字の間の余白で文字列が分断されて改行されると、ユーザが分断後の各文字列を読み難いと感じる可能性が高いので、本実施例では、中間余白領域BA5が分断候補位置として決定されない。
中間余白領域BA6は、1個の平仮名C3(即ち「い」)を構成する左側の線と右側の線の間の余白に相当し、通常、h/4未満の横方向の長さを有する(S242でYES)。また、左側隣接領域(即ち平仮名C3を構成する左側の線)と右側隣接領域(即ち平仮名C3を構成する右側の線)とは、通常、h/2未満の横方向の長さを有する(S244でYES)。従って、中間余白領域BA6が分断候補位置として決定されない。1個の平仮名C3が分断されて改行されると、ユーザが1個の平仮名C3を認識することができないので、本実施例では、中間余白領域BA6が分断候補位置として決定されない。なお、平仮名「い」のみならず、平仮名C8〜C10(即ち「け」、「に」、「は」)、片仮名C11(即ち「ハ」)、漢字C12(即ち「卵」)についても、1個の文字の間に余白が形成され得るが、当該余白も、通常、分断候補位置として決定されない(S244でYES)。
中間余白領域BA7は、平仮名C4(即ち「う」)と平仮名C5(即ち「え」)の間の余白に相当し、通常、h/4未満の横方向の長さを有する(S242でYES)。左側隣接領域(即ち平仮名C4)と右側隣接領域(即ち平仮名C5)とは、通常、h/2以上の横方向の長さを有する(S244でNO)。従って、中間余白領域BA7が分断候補位置として決定される(S246)。日本語の2個の文字の間の余白で文字列が分断されて改行されても、ユーザが分断後の各文字列を読み難いと感じる可能性が低いので、本実施例では、中間余白領域BA7が分断候補位置として決定される。
中間余白領域BA8は、平仮名C6(即ち「お」)と句点C7(即ち「。」)の間の余白に相当し、通常、h/4未満の横方向の長さを有する(S242でYES)。左側隣接領域(即ち平仮名C6)は、通常、h/2以上の横方向の長さを有するが、右側隣接領域(即ち句点C7)は、通常、h/2未満の横方向の長さを有する(S244でYES)。従って、中間余白領域BA8が分断候補位置として決定されない。文字と句点の間の余白で文字列が分断されて改行されると、ユーザが分断後の各文字列を読み難いと感じる可能性が高いので、本実施例では、中間余白領域BA8が分断候補位置として決定されない。なお、同様に、文字と読点(即ち「、」)の間の余白も、通常、分断候補位置として決定されない(S244でYES)。
(再配置処理;図9)
続いて、図9を参照して、図2のS400で実行される再配置処理の内容を説明する。S410では、CPU62は、スキャン画像SI内の1個以上のテキスト領域のうちの1個のテキスト領域(例えばTOA)を処理対象として決定する。以下では、S410で処理対象として決定されるテキスト領域のことを「対象テキスト領域」と呼ぶ。また、対象テキスト領域について決定された目標領域(例えば図2のS300のTA)のことを「対象目標領域」と呼ぶ。また、対象テキスト領域に含まれる各文字列が結合された結合画像(例えば図2のS200のCI)、当該結合画像を表わす結合画像データのことを、それぞれ、「対象結合画像」、「対象結合画像データ」と呼ぶ。
S420では、CPU62は、決定されるべき再配置領域(図2のS400のRA参照)の候補である候補再配置領域の横方向の長さW(即ち横方向の画素数W)の初期値、縦方向の長さH(即ち縦方向の画素数H)の初期値として、それぞれ、対象テキスト領域の横方向の長さOPx、縦方向の長さOPyを設定する。
S430では、CPU62は、候補再配置領域の縦方向の長さHに対する横方向の長さWの比W/Hが、対象目標領域の縦方向の長さTHに対する横方向の長さTWの比TW/TH未満であるのか否かを判断する。
CPU62は、比W/Hが比TW/TH未満であると判断する場合(S430でYES)には、S432において、候補再配置領域の横方向の現在の長さWに予め決められている固定値β(例えば1画素)を加算して、候補再配置領域の横方向の新たな長さWを決定する。S432が終了すると、S440に進む。
一方、CPU62は、比W/Hが比TW/TH以上であると判断する場合(S430でNO)には、S434において、候補再配置領域の横方向の現在の長さWから予め決められている固定値β(例えば1画素)を減算して、候補再配置領域の横方向の新たな長さWを決定する。S434が終了すると、S440に進む。なお、本実施例では、S432及びS434において、同じ固定値βが利用されるが、変形例では、S432の固定値とS434の固定値とは異なる値であってもよい。
S440では、CPU62は、スキャン画像データSIDの解像度に応じて、縦方向に沿った行間の長さm(即ち行間の画素数m)を決定する。例えば、CPU62は、スキャン画像データSIDの解像度が300dpiである場合には、行間の長さmとして1画素を決定し、スキャン画像データSIDの解像度が600dpiである場合には、行間の長さmとして2画素を決定する。即ち、CPU62は、スキャン画像データSIDの解像度が高くなる程、大きい行間の長さmを決定する。この構成によると、CPU62は、スキャン画像データSIDの解像度に応じた適切な大きさを有する行間の長さmを決定することができる。なお、変形例では、スキャン画像データSIDの解像度に関わらず、行間の長さmとして同じ値が採用されてもよい。
S450では、CPU62は、対象結合画像データと、S432又はS434で決定された候補再配置領域の横方向の新たな長さWと、に基づいて、行数決定処理を実行する(後述の図10参照)。行数決定処理では、CPU62は、対象結合画像(例えば図2のCI)に含まれる複数個の文字(例えば「A〜M」)を候補再配置領域内に再配置する場合における行数を決定する。
(行数決定処理;図10)
図10に示されるように、S451では、CPU62は、対象結合画像(例えば図10内のCI)の横方向の長さIWが、候補再配置領域の横方向の長さW以下であるのか否かを判断する。CPU62は、長さIWが長さW以下であると判断する場合(S451でYES)には、S452において、「1」を行数として決定する。対象結合画像CIに含まれる全ての文字「A〜M」が横方向に沿って直線状に並んだ状態で、全ての文字「A〜M」が候補再配置領域内に収まるからである。S452が終了すると、図10の処理が終了する。
一方、CPU62は、長さIWが長さWより大きいと判断する場合(S451でNO)には、対象結合画像CIに含まれる複数個の文字「A〜M」を複数行に分断して配置する必要がある。このために、CPU62は、S453及び454を実行して、図6のS230で決定された複数個の分断候補位置(例えば図10内の対象結合画像CIに付された複数個の矢印参照)の中から、1個以上の分断候補位置を選択する。
S453では、CPU62は、選択長さSWが候補再配置領域の横方向の長さW以下の最大の長さになるように、複数個の分断候補位置の中から1個の分断候補位置を選択する。1個の分断候補位置も未だに選択されていない状態では、選択長さSWは、対象結合画像CIの先端(即ち左端)と、選択されるべき分断候補位置と、の間の横方向の長さである。また、1個以上の分断候補位置が既に選択されている状態では、選択長さSWは、直近に選択された分断候補位置と、当該分断候補位置よりも後端側(即ち右側)に存在する新たに選択されるべき分断候補位置と、の間の横方向の長さである。図10の例では、文字「F」と文字「G」との間の分断候補位置が選択される。
S454では、CPU62は、残存長さRWが候補再配置領域の横方向の長さW以下であるのか否かを判断する。残存長さRWは、直近に選択された分断候補位置と、対象結合画像の後端と、の間の横方向の長さである。CPU62は、残存長さRWが長さWよりも大きいと判断する場合(S454でNO)には、S453に戻り、複数個の分断候補位置の中から。直近に選択された分断候補位置よりも後端側に存在する分断候補位置を新たに決定する。
一方、CPU62は、残存長さRWが長さW以下であると判断する場合(S454でYES)には、S455において、選択済みの分断候補位置の数に「1」を加算することによって得られる数を行数として決定する。S455が終了すると、図10の処理が終了する。
(再配置処理の続き;図9)
図9のS460では、CPU62は、S460内の数式に従って、候補再配置領域の縦方向の新たな長さHを決定する。S460内の数式において、「m」はS440で決定された行間の長さであり、「n」はS450で決定された行数であり、「h」は対象結合画像データの縦方向の長さである(図10内の結合画像CIのh参照)。
S470では、CPU62は、候補再配置領域のアスペクト比W/Hが対象目標領域のアスペクト比TW/THに近似するのか否かを判断する。具体的には、CPU62は、候補再配置領域のアスペクト比W/Hが、対象目標領域のアスペクト比TW/THに基づいて設定される所定範囲内に含まれるのか否かを判断する。上記の所定範囲は、対象目標領域のアスペクト比TW/THから値γを減算することによって得られる値と、対象目標領域のアスペクト比TW/THに値γを加算することによって得られる値と、の間の範囲である。なお、値γは、予め決められている固定値であってもよいし、TW/THに所定の係数(例えば0.05)を乗算することによって得られる値であってもよい。
CPU62は、候補再配置領域のアスペクト比W/Hが対象目標領域のアスペクト比TW/THに近似しないと判断する場合(S470でNO)には、S430〜S460の各処理を再び実行する。これにより、CPU62は、候補再配置領域の横方向の新たな長さWと縦方向の新たな長さHとを決定して、S470の判断を再び実行する。
一方、CPU62は、候補再配置領域のアスペクト比W/Hが対象目標領域のアスペクト比TW/THに近似すると判断する場合(S470でYES)には、S480において、まず、横方向の長さWと縦方向の長さHとを有する候補再配置領域を再配置領域(例えば図2のRA)として決定する。そして、CPU62は、図10のS453で1個以上の分断候補位置を選択済みである場合には、当該1個以上の分断候補位置で対象結合画像データを分断して、2個以上の分断画像を表わす2個以上の分断画像データを生成する。次いで、CPU62は、2個以上の分断画像が縦方向に沿って並ぶように、2個以上の分断画像データを再配置領域内に配置する。この際に、CPU62は、縦方向に沿って隣接する2個の分断画像の間にS440で決定された行間が形成されるように、2個の分断画像データを配置する。この結果、例えば、図2のS400に示されるように、複数個の文字「A」〜「M」が再配置領域RA内に再配置されている再配置画像RIを表わす再配置画像データが生成される。再配置画像RI内の複数個の文字「A」〜「M」のサイズは、スキャン画像SI内の複数個の文字「A」〜「M」のサイズに等しい。
S490では、CPU62は、全てのテキスト領域について、S410〜S480の処理が終了したのか否かを判断する。CPU62は、処理が終了していないと判断する場合(S490でNO)には、S410において、未処理のテキスト領域を処理対象として決定して、S420以降の各処理を再び実行する。そして、CPU62は、処理が終了したと判断する場合(S490でYES)には、図9の処理を終了する。
(具体的なケース;図11)
続いて、図11を参照して、図2のS400の再配置処理(図9参照)とS500の拡大処理について、具体的なケースを説明する。(1)に示されるように、候補再配置領域の横方向の長さWの初期値、縦方向の長さHの初期値として、それぞれ、対象テキスト領域TOAの横方向の長さOPx、縦方向の長さOPyが設定される(図9のS420)。本ケースでは、W/HがTW/TH未満である。即ち、対象目標領域TAは、対象テキスト領域TOAと比べると、横長の形状を有する。この場合、候補再配置領域を横長の形状にしていけば、候補再配置領域のアスペクト比が対象目標領域TAのアスペクト比に近づくことになる。従って、(2)に示されるように、候補再配置領域の横方向の現在の長さWに固定値βが加算されて、候補再配置領域の横方向の新たな長さWが決定される(S432)。この場合、行数として、文字列「A〜E」と文字列「F〜J」と文字列「K〜M」とを含む3行が決定される(S450)。そして、候補再配置領域の縦方向の新たな長さHが決定される(S460)。
(2)の状態では、候補再配置領域のアスペクト比W/Hが対象目標領域TAのアスペクト比TW/THに近似しないので(S470でNO)、(3)に示されるように、候補再配置領域の横方向の現在の長さWに固定値βが再び加算されて、候補再配置領域の横方向の新たな長さWが再び決定される(S432)。この場合、行数として、文字列「A〜F」と文字列「G〜L」と文字列「M」とを含む3行が決定される(S450)。即ち、候補再配置領域の横方向の長さWが大きくなったことに起因して、候補再配置領域内の1行の文字列を構成することが可能な最大の文字数が増える。そして、候補再配置領域の縦方向の新たな長さHが決定される(S460)。
(3)の状態では、候補再配置領域のアスペクト比W/Hが対象目標領域TAのアスペクト比TW/THに近似する(S470でYES)。従って、(4)に示されるように、(3)の候補再配置領域が再配置領域RAとして決定される(S480)。次いで、対象結合画像CIを表わす対象結合画像データが分断されて、3個の分断画像DI1〜DI3を表わす3個の分断画像データが生成される(S480)。そして、3個の分断画像DI1〜DI3が縦方向に沿って並び、かつ、隣接する2個の分断画像の間に長さmを有する行間が形成されるように、3個の分断画像データが再配置領域RA内に配置される。この結果、再配置画像RIを表わす再配置画像データが生成される(S480)。
次いで、再配置画像データが拡大されて、拡大画像を表わす拡大画像データが生成される(図2のS500)。具体的には、再配置画像RIの対角線が伸びる方向に再配置画像RIが拡大され、その結果、拡大画像を表わす拡大画像データが生成される。例えば、再配置領域RAのアスペクト比W/Hが対象目標領域TAのアスペクト比TW/THに等しい場合には、拡大画像の4個の辺の全てが、対象目標領域TAの4個の辺に一致する。即ち、この場合、拡大画像のサイズが目標領域TAのサイズに一致する。ただし、例えば、再配置領域RAのアスペクト比W/Hが対象目標領域TAのアスペクト比TW/THに等しくない場合には、再配置画像RIを徐々に拡大していく過程において、拡大画像のいずれかの辺が対象目標領域TAのいずれかの辺に一致した段階で、再配置画像RIの拡大が終了する。即ち、この場合、拡大画像のサイズが目標領域TAのサイズよりも小さくなる。
続いて、(5)に示されるように、再配置画像RIを表わす再配置画像データが拡大された拡大画像データが、スキャン画像データSIDの目標領域TA内に上書きされる(図2のS500)。この結果、処理済み画像PIを表わす処理済み画像データPIDが完成する。
図11に示されるように、(1)のスキャン画像SIでは、修飾線は、文字列「FGH」の近傍に配置されている。そして、文字列「F〜J」と修飾線が1行の修飾文字列として扱われるので、結合画像CIでも、修飾線は、文字列「FGH」の近傍に配置されている。即ち、スキャン画像SI内での文字列「FGH」と修飾線との修飾関係が維持されている結合画像CIが得られる。また、結合画像CIから(4)の再配置画像RIが生成され、再配置画像RIから(5)の処理済み画像PIが生成されるので、再配置画像RI及び処理済み画像PIでも、修飾線は、文字列「FGH」の近傍に配置されている。即ち、スキャン画像SI内での文字列「FGH」と修飾線との修飾関係が維持されている再配置画像RI及び処理済み画像PIが得られる。
また、(1)のスキャン画像SIでは、符号h1、符号h2は、それぞれ、修飾線が付されている文字列「FGH」の縦方向の長さ、文字列「FGH」と修飾線との間の縦方向の長さ(以下では単に「間隔の長さ」と呼ぶ)である。文字列「F〜J」と修飾線が1行の修飾文字列として扱われるので、結合画像CIでも、文字列「FGH」の縦方向の長さ、間隔の長さは、それぞれ、h1、h2である。同様に、(4)の再配置画像RIでも、文字列「FGH」の縦方向の長さ、間隔の長さは、それぞれ、h1、h2である。また、(5)の拡大画像PIでは、拡大された文字列「FGH」の縦方向の長さ、拡大された間隔の長さは、それぞれ、h1×t、h2×tである(tは拡大倍率である)。従って、いずれの画像SI,CI,RI,PIにおいても、文字列「FGH」の縦方向の長さに対する間隔の長さの比は、h2/h1である。即ち、各画像SI,CI,RI,PIにおいて、文字列「FGH」の縦方向の長さに対する間隔の長さの比は等しい。
(第1実施例の効果)
本実施例によると、図5に示されるように、画像処理サーバ50は、4個の帯状領域LA11〜LA14の縦方向に沿った4個の長さh11〜h14に基づいて、4個の帯状領域LA11〜LA14の中から修飾物帯状領域LA13を特定する(S184でYES)。そして、画像処理サーバ50は、修飾物帯状領域LA13を文字列帯状領域LA12に結合して、修飾文字列帯状領域LA12’を決定する(S195)。これにより、画像処理サーバ50は、文字列帯状領域LA12内の文字列「F〜J」と、修飾物帯状領域LA13内の修飾線と、を1行の修飾文字列として扱うことができる。この結果、図6に示されるように、画像処理サーバ50は、文字列「FGH」が修飾線によって修飾されている結合文字列「A〜M」を含む結合画像CIを表わす結合画像データを生成することができる。特に、画像処理サーバ50は、2個以上の文字を含み得る帯状領域を単位として処理を実行して、結合画像データを生成する。従って、画像処理サーバ50は、スキャン画像SI内の1個の文字を単位として処理を実行せずに済み、この結果、結合画像データを迅速に生成することができる。このように、画像処理サーバ50は、スキャン画像SI内での文字列「FGH」と修飾線との修飾関係が維持されている結合画像CIを表わす結合画像データを迅速に生成することができる。そして、図11に示されるように、画像処理サーバ50は、結合画像データを利用して再配置画像データ及び処理済み画像データPIDを生成するので、スキャン画像SI内での文字列「FGH」と修飾線との修飾関係が維持されている再配置画像RI及び処理済み画像PIを表わす再配置画像データ及び処理済み画像データPIDを適切に生成することができる。
(対応関係)
画像処理サーバ50が、「画像処理装置」の一例である。スキャン画像SI、結合画像CIが、それぞれ、「原画像」、「対象画像」の一例である。図11では、スキャン画像SIにおいて、3行の文字列「A〜M」、文字列「FGH」、修飾線が、それぞれ、「M行の文字列」、「被修飾文字」、「修飾物」の一例である。図5では、4個の帯状領域LA11〜LA14、3個の帯状領域LA11,LA12,LA14、1個の帯状領域LA13が、それぞれ、「複数個の帯状領域」、「M個の主帯状領域」、「副帯状領域」の一例である。また、帯状領域LA12が、「近傍主帯状領域」の一例である。図5のS182の閾値Thが、「設定値」の一例である。図4では、S162で生成される射影ヒストグラム、S170で算出される合計下辺長さが、それぞれ、「第2の射影ヒストグラム」、「評価値」の一例である。また、横方向、左側、右側が、それぞれ、「第1方向」、「第1方向の第1側」、「第1方向の第2側」の一例である。縦方向、上側、下側が、それぞれ、「第2方向」、「第2方向の第1側」、「第2方向の第2側」の一例である。
(第2実施例;図12)
本実施例では、図5のS181及びS182の処理に代えて、図12のS181及びS182の処理が実行される。即ち、本実施例では、閾値Thを設定するための手法が第1実施例とは異なる。
S181では、CPU62は、長さ(即ち画素数)を示す横軸と出現頻度を示す縦軸とによって画定される平面上に、4個の帯状領域LA11〜LA14の4個の長さh11〜h14の出現頻度を示す各点を上記の平面上にプロットして、当該各点を直線で結んだグラフ(即ち図12内のグラフ)を生成する。当該グラフでは、3個の範囲R1〜R3が得られる。範囲R1は、1個の修飾物帯状領域LA13の1個の長さh13の出現頻度(即ち「1」)を示す点がピークを構成する範囲である。範囲R2は、出現頻度ゼロを示す範囲である。範囲R3は、3個の文字列帯状領域LA11,LA12,LA14の3個の長さh11,h12,h14の出現頻度(即ち「3」)を示す点がピークを構成する範囲である。より具体的には、範囲R3は、最高の出現頻度(即ち「3」)を含む範囲である。
S182では、CPU62は、S181で生成されたグラフを利用して、最高の出現頻度(即ち「3」)を含み、かつ、出現頻度がゼロより高い範囲R3を特定し、次いで、横軸が示す長さが範囲R3よりも小さく、かつ、出現頻度がゼロである範囲R2を特定する。そして、CPU62は、横軸上の範囲R2と範囲R3との境界の位置に対応する長さを閾値Thとして設定する。
本実施例では、修飾物帯状領域の数(図12の例では1個)が、文字列帯状領域の数(図12の例では3個)よりも少ないという状況を想定している。そして、出現頻度がゼロである範囲R2と最高の出現頻度を含む範囲R3との境界の位置に対応する長さを閾値Thとして設定すれば、修飾物帯状領域と文字列帯状領域とを区別することができる。即ち、修飾物帯状領域LA13の長さh13は、通常、閾値Th以下であり(範囲R1参照)、各文字列帯状領域LA11,LA12,LA14の各長さh11,h12,h14は、通常、閾値Thよりも大きい(範囲R3参照)。従って、本実施例でも、S184において、画像処理サーバ50は、対象帯状領域が、修飾物帯状領域であるのか、文字列帯状領域であるのか、を適切に判断することができる。本実施例では、範囲R3、範囲R2が、それぞれ、「第1の範囲」、「第2の範囲」の一例である。
(第3実施例;図13)
本実施例では、図5のS181及びS182の処理に代えて、図13のS181及びS182の処理が実行される。本実施例では、修飾物帯状領域の数が、文字列帯状領域の数よりも多い状況でも、対象帯状領域が、修飾物帯状領域であるのか、文字列帯状領域であるのか、を適切に判断することができる。
S181は、図12の第2実施例のS181と同様である。ただし、修飾物帯状領域の数が多いので、各修飾物帯状領域の各長さの出現頻度を示す点がピークを構成する範囲R4が、最高の出現頻度を含む。範囲R5は、出現頻度ゼロを示す範囲である。範囲R6は、各文字列帯状領域の各長さの出現頻度を示す点がピークを構成する範囲である。
S182では、CPU62は、S181で生成されたグラフを利用して、出現頻度がゼロより高い複数個の範囲R4,R6のうち、横軸が示す長さが最大である範囲R6を特定し、次いで、横軸が示す長さが範囲R6よりも小さく、かつ、出現頻度がゼロである範囲R5を特定する。そして、CPU62は、横軸上の範囲R5と範囲R6との境界の位置に対応する長さを閾値Thとして設定する。
本実施例によると、修飾物帯状領域の数が、文字列帯状領域の数よりも多くても、閾値Thを適切に設定することができる。本実施例では、範囲R6、範囲R5が、それぞれ、「第1の範囲」、「第2の範囲」の一例である。
(第4実施例;図14)
本実施例では、図5の修飾物解析処理に代えて、図14の修飾物解析処理が実行される。図14に示されるように、本実施例では、スキャン画像SIは、日本語のセンテンスを含む。当該センテンスは、漢字を含む文字列C22(即ち「私の名前は」)を含んでおり、当該文字列の上側に平仮名のルビC21(即ち「なまえ」)が付されている。即ち、ルビは、漢字を修飾するための修飾物である。この場合、図4のS164では、3個の帯状領域LA21〜LA23が決定される。帯状領域LA21は、ルビC21を含み、修飾物帯状領域である。また、帯状領域LA22,LA23は、それぞれ、文字列C22,C23を含む文字列帯状領域である。
S181〜S184は、図5のS181〜S184と同様である。従って、S181では、3個の帯状領域LA21〜LA23の縦方向に沿った3個の長さh21〜h23の平均値haが算出され、S182では、閾値Thが算出される。ルビを含む帯状領域LA21の縦方向の長さh21は、通常、閾値Th以下である。CPU62は、対象帯状領域が修飾物帯状領域(例えばLA21)であると判断する場合(S184でYES)には、S196において、対象帯状領域と下行の帯状領域とを結合する。下行の帯状領域は、対象帯状領域の下側において、対象帯状領域の隣に存在する帯状領域である。そして、本実施例では、CPU62は、修飾物帯状領域であると判断される帯状領域LA21と、下行の帯状領域である帯状領域LA22と、を結合して、1個の修飾文字列帯状領域LA22’を決定する。この際に、CPU62は、修飾文字列帯状領域LA22’の基準位置として下行の帯状領域LA22の基準位置を利用し、帯状領域LA21の基準位置を利用しない。S198は、図5のS198と同様である。
仮に、帯状領域LA21と帯状領域LA22とが結合されなければ、図6のS220では、文字列C22(即ち「名前」)がルビC21によって修飾されていない結合文字列が得られる。これに対し、本実施例では、帯状領域LA22’内に文字列C22とルビC21との双方が含まれることになり、以降の処理では、文字列C22とルビC21とが1行の修飾文字列として扱われる。この結果、図6のS220では、文字列C22がルビC21によって修飾されている結合文字列が得られる。従って、画像処理サーバ50は、スキャン画像SI内の修飾関係が維持されている結合画像CIを表わす結合画像データを適切に生成することができる。また、画像処理サーバ50は、スキャン画像SI内の修飾関係が維持されている処理済み画像PIを表わす処理済み画像データを適切に生成することができる。
本実施例では、2行の文字列C22,C23、ルビC21、ルビC21が付されている漢字が、それぞれ、「M行の文字列」、「修飾物」、「被修飾文字」の一例である。3個の帯状領域LA21〜LA23、2個の帯状領域LA22,LA23、1個の帯状領域LA21が、それぞれ、「複数個の帯状領域」、「M個の主帯状領域」、「副帯状領域」の一例である。また、帯状領域LA22が、「近傍副帯状領域」の一例である。
(第5実施例;図15)
本実施例では、図5の修飾物解析処理に代えて、図15の修飾物解析処理が実行される。図15に示されるように、本実施例では、スキャン画像SIは、日本語のセンテンスを含む。第4実施例(図14参照)と同様に、当該センテンスは、漢字を含む文字列C33とルビC32とを含む。また、当該センテンスは、文字列C33を修飾するための修飾線を含む。この場合、図4のS164では、5個の帯状領域LA31〜LA35が決定される。帯状領域LA32は、ルビC32を含み、修飾物帯状領域である。帯状領域LA34は、修飾線を含み、修飾物帯状領域である。また、各帯状領域LA31,LA33,LA35は、それぞれ、文字列C31,C33,C35を含む文字列帯状領域である。
S181〜S184は、図5のS181〜S184と同様である。CPU62は、対象帯状領域が修飾物帯状領域(例えばLA32,LA34)であると判断する場合(S184でYES)には、S185において、距離d1と距離d2とを算出する。距離d1は、対象帯状領域と上行の帯状領域との間の縦方向に沿った距離である。距離d2は、対象帯状領域と下行の帯状領域との間の縦方向に沿った距離である。
S186では、CPU62は、距離d1が距離d2未満であるのか否かを判断する。CPU62は、距離d1が距離d2未満であると判断する場合(S186でYES)には、S195において、対象帯状領域と上行の帯状領域とを結合する。一方、CPU62は、距離d1が距離d2以上であると判断する場合(S186でNO)には、S196において、対象帯状領域と下行の帯状領域とを結合する。S195、S196は、それぞれ、図5のS195、図14のS196と同様である。また、S198は、図5のS198と同様である。
本実施例では、帯状領域LA32が修飾物帯状領域であると判断される対象帯状領域である場合には、CPU62は、帯状領域LA31と帯状領域LA32との間の距離d1と、帯状領域LA32と帯状領域LA33との間の距離d2と、を算出する(S185)。そして、CPU62は、距離d1が距離d2以上であると判断するので(S186でNO)、帯状領域LA32を下行の帯状領域LA33に結合して、1個の修飾文字列帯状領域を決定する(S196)。また、帯状領域LA34が修飾物帯状領域であると判断される対象帯状領域である場合には、CPU62は、帯状領域LA34と上記の修飾文字列帯状領域との間の距離d1と、帯状領域LA34と帯状領域LA35との間の距離d2と、を算出する(S185)。そして、CPU62は、距離d1が距離d2未満であると判断するので(S186でYES)、帯状領域LA34を上行の帯状領域である上記の修飾文字列帯状領域に結合して、新たな1個の修飾文字列帯状領域LA33’を決定する(S195)。このように、CPU62は、距離d1及び距離d2に基づいて、修飾物帯状領域と判断される対象帯状領域を上行の帯状領域及び下行の帯状領域のどちらに結合すべきかを適切に決定することができる。
最終的に得られる修飾文字列帯状領域LA33’は、文字列C33とルビC32と修飾線との全てを含むことになり、以降の処理では、これらの全てが1行の修飾文字列として扱われる。従って、画像処理サーバ50は、スキャン画像SI内の修飾関係が維持されている結合画像CIを表わす結合画像データを適切に生成することができる。この結果、画像処理サーバ50は、スキャン画像SI内の修飾関係が維持されている処理済み画像PIを表わす処理済み画像データを適切に生成することができる。本実施例では、例えば、帯状領域LA32が修飾物帯状領域であると判断される対象帯状領域である場合に、上行の帯状領域LA31、下行の帯状領域LA33が、それぞれ、「第1の主帯状領域」、「第2の主帯状領域」の一例である。そして、距離d1、距離d2が、それぞれ、「第1の距離」、「第2の距離」の一例である。
(第6実施例;図16)
本実施例では、図5の修飾物解析処理に代えて、図16の修飾物解析処理が実行される。本実施例では、スキャン画像SIは、図15の第5実施例と同じ日本語のセンテンスを含む。
S181〜S184は、図5のS181〜S184と同様である。CPU62は、対象帯状領域が修飾物帯状領域(例えばLA32,LA34)であると判断する場合(S184でYES)には、S187において、対象帯状領域に対応する射影ヒストグラムを生成する。具体的には、CPU62は、まず、スキャン画像データSIDの中から、対象帯状領域を表わす部分画像データを取得し、当該部分画像データに対して二値化処理を実行する。当該二値化処理の内容は、図3のS110と同様である。そして、CPU62は、二値データを利用して、射影ヒストグラムを生成する。当該射影ヒストグラムは、二値データを構成する各画素を縦方向に射影する場合におけるON画素(即ち「1」を示す画素)の頻度の分布を示す。当該射影ヒストグラムでは、ルビ又は修飾線が、頻度がゼロより高い範囲で表わされる。
S188では、CPU62は、S187で生成された射影ヒストグラムを利用して、修飾物帯状領域に含まれる修飾物が、修飾線であるのか、ルビであるのか、を判断する。具体的には、CPU62は、射影ヒストグラムが特定の分布を示す場合には、修飾物が修飾線であると判断し、射影ヒストグラムが特定の分布を示さない場合には、修飾物がルビであると判断する。上記の特定の分布は、修飾線の特徴を示す分布であり、ゼロより高い頻度値が横方向に沿って所定の長さ以上に亘って連続する分布である。上記の所定の長さは、修飾線の存在を特定可能な長さであればどのような値であってもよいが、例えば、1個の文字の横方向の長さよりも大きい値である。なお、変形例では、特定の分布は、ゼロより高い一定の頻度値が横方向に沿って所定の長さ以上に亘って連続する分布であってもよい。
CPU62は、修飾物が修飾線であると判断する場合(S188で「修飾線」)には、S195において、対象帯状領域と上行の帯状領域とを結合する。一方、CPU62は、修飾物がルビであると判断する場合(S188で「ルビ」)には、S196において、対象帯状領域と下行の帯状領域とを結合する。S195、S196は、それぞれ、図5のS195、図14のS196と同様である。また、S198は、図5のS198と同様である。
本実施例では、CPU62は、修飾物帯状領域であると判断される対象帯状領域に対応する射影ヒストグラムを利用して、修飾線とルビとを判別することができる。例えば、帯状領域LA32に対応する射影ヒストグラムが特定の分布を示さないので、CPU62は、帯状領域LA32内の修飾物がルビであると判断することができる。また、例えば、帯状領域LA34に対応する射影ヒストグラムが特定の分布を示すので、CPU62は、帯状領域LA34内の修飾物が修飾線であると判断することができる。このように、CPU62は、修飾物帯状領域であると判断される対象帯状領域に対応する射影ヒストグラムを利用して、対象帯状領域を上行の帯状領域及び下行の帯状領域のどちらに結合すべきかを適切に決定することができる。本実施例では、S187で生成される射影ヒストグラムが、「第1の射影ヒストグラム」の一例である。
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
(変形例1)CPU62は、結合画像CI(図11)を表わす結合画像データを生成することなく、再配置画像RIを表わす再配置画像データを生成してもよい。具体的には、CPU62は、スキャン画像データSIDから、3個の帯状領域LA11,LA12’,LA14(図5参照)を表わす3個の部分画像データを取得する。そして、CPU32は、帯状領域LA12’を表わす第2の部分画像データを分断して、文字列「F」を表わす第1の分断画像データと、文字列「G〜J」を表わす第2の分断画像データと、を生成する。また、CPU62は、帯状領域LA14を表わす第3の部分画像データを分断して、文字列「KL」を表わす第3の分断画像データと、文字列「M」を表わす第4の分断画像データと、を生成する。次いで、CPU62は、帯状領域LA11を表わす第1の部分画像データと第1の分断画像データとを結合して、文字列「A〜F」を表わす第1の中間画像データを生成し、第2の分断画像データと第3の分断画像データとを結合して、文字列「G〜L」を表わす第2の中間画像データを生成する。そして、CPU62は、文字列「A〜F」と文字列「G〜L」と文字列「M」とが縦方向に沿って並ぶように、第1の中間画像データと第2の中間画像データと第4の分断画像データとを再配置領域RA内に再配置して、再配置画像RIを表わす再配置画像データを生成する。本変形例では、再配置画像データが、「対象画像データ」の一例である。なお、上記の各実施例では、再配置画像データが拡大されて処理済み画像データPIDが生成されるが、再配置画像データがそのままスキャン画像データSID内に上書きされることによって、処理済み画像データが生成されてもよい。本変形例では、処理済み画像データが、「対象画像データ」の一例であると考えることもできる。
(変形例2)「修飾線」は、一重線でなくてもよく、二重線、破線、波線等であってもよい。また、例えば、図14の第4実施例では、日本語の漢字に平仮名のルビC21が付される状況を想定している。これに代えて、例えば、中国語の漢字にピンインのルビが付されていてもよい。即ち、「漢字」は、日本語の漢字に限られず、中国語の漢字も含む。また、「修飾物」は、上記の各実施例で例示されるもの(即ち、修飾線、漢字に付されるルビ)に限られず、例えば、文字の上側に付されるベクトル、日本語の片仮名(例えばソフトウェア)の上側に付される平仮名のルビ(例えばそふとうぇあ)等であってもよい。また、「修飾物」は、例えば、第1の言語(例えば英語のsoftware)の上側に付される第2の言語のルビ(例えば日本語のソフトウェア)等であってもよい。
(変形例3)例えば、縦方向の上側から下側に向かって、第1の文字列、当該第1の文字列を修飾するための修飾線、ルビ、当該ルビが付されている漢字を含む第2の文字列が順に並んでいる状況を想定する。このような状況では、図15の修飾物解析処理において、CPU62は、修飾線を含む帯状領域が修飾物帯状領域であると判断する(S184でYES)。次いで、S185では、CPU62は、修飾線を含む修飾物帯状領域と第1の文字列を含む文字列帯状領域との間の距離d1を算出し、さらに、修飾線を含む修飾物帯状領域とルビを含む修飾物帯状領域との間の距離ではなく、修飾線を含む修飾物帯状領域と第2の文字列を含む文字列帯状領域との間の距離d2を算出する。この場合、CPU62は、距離d1が距離d2未満であると判断し(S186でYES)、第1の文字列を含む文字列帯状領域と、修飾線を含む修飾物帯状領域と、を結合する(S195)。また、CPU62は、ルビを含む帯状領域が修飾物帯状領域であると判断する(S184でYES)。次いで、S185では、CPU62は、ルビを含む修飾物帯状領域と修飾線を含む修飾物帯状領域との間の距離ではなく、ルビを含む修飾物帯状領域と第1の文字列を含む文字列帯状領域との間の距離d1を算出し、さらに、ルビを含む修飾物帯状領域と第2の文字列を含む文字列帯状領域との間の距離d2を算出する。この場合、CPU62は、距離d1が距離d2以上であると判断し(S186でNO)、第2の文字列を含む文字列帯状領域と、ルビを含む修飾物帯状領域と、を結合してもよい(S196)。本変形例では、修飾線を含む修飾物帯状領域とルビを含む修飾物帯状領域とが「副帯状領域」の一例である。また、第1の文字列を含む文字列帯状領域、第2の文字列を含む文字列帯状領域が、それぞれ、「第1の主帯状領域」、「第2の主帯状領域」の一例である。
(変形例4)図4のS166〜S174では、最大の合計下辺長さが算出された評価範囲内の中間位置が基準位置として決定される。これに代えて、CPU62は、最大の合計下辺長さが算出された評価範囲内の最上端の位置又は最下端の位置を基準位置として決定してもよい。本変形例では、評価範囲内の最上端の位置又は最下端の位置が、「最大の評価値に対応する1個の評価範囲のうちの第2方向に沿った特定位置」の一例である。また、別の変形例では、CPU62は、例えば、対象帯状領域の縦方向の予め決められた位置(例えば、中間位置、上端位置、下端位置等)を基準位置として決定してもよい。即ち、「基準位置」は、M行の文字列を結合するための基準の位置であればよい。
(変形例5)上記の実施例では、画像処理サーバ50が、スキャン画像データSIDに対して画像処理(即ち図2のS100〜S500の各処理)を実行して処理済み画像データPIDを生成し、当該処理済み画像データPIDを多機能機10に送信する(S600)。これに代えて、多機能機10が、スキャン画像データSIDに対して画像処理を実行して処理済み画像データPIDを生成してもよい(即ち画像処理サーバ50が存在しなくてもよい)。本変形例では、多機能機10が、「画像処理装置」の一例である。
(変形例6)画像処理サーバ50によって実行される画像処理の対象は、スキャン画像データSIDでなくてもよく、文書作成ソフト、表編集ソフト、描画作成ソフト等によって生成されるデータであってもよい。即ち、「原画像データ」は、スキャン対象シートのスキャンによって得られるデータに限られず、他の種類のデータであってもよい。
(変形例7)上記の実施例では、スキャン画像SIは、横方向の左側から右側に向かってセンテンスが進むと共に、縦方向の上側から下側に向かってセンテンスが進む文字列(即ち横書きの文字列)を含む。これに代えて、スキャン画像SIは、縦方向の上側から下側に向かってセンテンスが進むと共に、横方向の右側から左側に向かってセンテンスが進む文字列(即ち縦書きの文字列)を含んでいてもよい。この場合、画像処理サーバ50は、図4のS162及びS164において、横方向の射影ヒストグラムに基づいて、通常、帯状領域を決定することができない。従って、画像処理サーバ50は、縦方向の射影ヒストグラムを生成して、帯状領域を決定する。その後、画像処理サーバ50は、横方向の代わりに縦方向を利用し、縦方向の代わりに横方向を利用して、上記の実施例と同様の処理を実行すればよい。本変形例では、縦方向、上側、下側が、それぞれ、「第1方向」、「第1方向の第1側」、「第1方向の第2側」の一例である。横方向、右側、左側が、それぞれ、「第2方向」、「第2方向の第1側」、「第2方向の第2側」の一例である。
(変形例8)上記の実施例では、画像処理サーバ50のCPU62がプログラム66(即ちソフトウェア)を実行することによって、図2〜図16の各処理が実現される。これに代えて、図2〜図16の各処理のうちの少なくとも1つの処理は、論理回路等のハードウェアによって実現されてもよい。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。