A.実施例:
A−1:複合機200の構成
次に、実施の形態を実施例に基づき説明する。図1は、画像処理装置の一例である複合機200の構成を示すブロック図である。複合機200は、画像処理装置を制御するプロセッサの一例であるCPU210と、フラッシュメモリやハードディスクドライブなどの不揮発性記憶装置220と、DRAMなどの揮発性記憶装置230と、画像読取部240と、印刷実行部250と、タッチパネルや複数個のボタンを含む操作部260と、タッチパネルと重畳された液晶ディスプレイなどの表示部270と、ユーザの端末装置100などの外部装置と通信を行うためのインタフェースを含む通信部280と、を備えている。
画像読取部240は、CPU210の制御に従って、イメージセンサを用いて原稿を光学的に読み取ることによってスキャンデータを生成する。印刷実行部250は、CPU210の制御に従って、所定の方式(例えば、インクジェット、レーザー)によって用紙などの印刷媒体に画像を印刷する。
揮発性記憶装置230は、CPU210が処理を行う際に生成される種々の中間データを一時的に格納するバッファ領域231を提供する。不揮発性記憶装置220には、コンピュータプログラムCPが格納されている。コンピュータプログラムCPは、CPU210に複合機200の制御を実現させる制御プラグラムである。本実施例では、コンピュータプログラムCPは、複合機200の製造時に、不揮発性記憶装置220に予め格納される形態で提供される。これに代えて、コンピュータプログラムCPは、サーバからダウンロードされる形態で提供されても良く、DVD−ROMなどに格納される形態で提供されてもよい。CPU210は、コンピュータプログラムCPを実行することにより、後述する画像処理を実行することができる。
A−2:画像処理
図2は、画像処理のフローチャートである。この画像処理は、例えば、ユーザが、高圧縮PDFファイルの生成を指示した場合に実行される。高圧縮PDFファイルは、文字画像を表す圧縮済の文字画像データと、非文字画像を表す圧縮済の非文字画像データと、を含み、これらの複数個の画像データによって1個の画像を表すPDF形式の画像ファイルである。
S10、S20では、CPU210は、対象画像データとしての二値画像データを取得する。
S10では、CPU210は、ユーザが原稿台に設置した原稿を、画像読取部240を用いて読み取ることによって、スキャンデータを生成する。生成されたスキャンデータは、バッファ領域231(図1)に格納される。スキャンデータは、画素ごとの色をRGB値で表すRGB画像データである。1個の画素のRGB値は、例えば、赤(R)と緑(G)と青(B)との3個の色成分の階調値(以下、成分値とも呼ぶ)を含んでいる。本実施例では、各成分値の階調数は、256階調である。
図3は、画像処理で用いられる画像の一例を示す図である。図3(A)には、スキャンデータによって表されるスキャン画像SIの一例が示されている。スキャン画像SIは、図示しない複数の画素が、第1の方向D1と、第1の方向D1と直交する第2の方向D2と、に沿って、マトリクス状に配置されている。
図3(A)のスキャン画像SIは、背景Bgと、3個の非文字オブジェクトOb1〜Ob3と、4個の文字オブジェクトOb4〜Ob7と、を含んでいる。非文字オブジェクトは、例えば、写真オブジェクトや描画オブジェクトである。
S20では、CPU210は、スキャン画像SI内の複数個の画素をオブジェクトを示すオブジェクト画素と背景を示す背景画素とに分類するために、スキャン画像に対して二値化処理を実行して、二値画像データを生成する。具体的には、例えば、CPU210は、スキャン画像SIの背景Bgの色を示す背景色値を算出する。背景色値には、例えば、スキャンデータのRGBの3個の色成分のそれぞれの最頻値Rm、Gm、Bmによって表される色値(Rm、Gm、Bm)が用いられる。CPU210は、スキャン画像SI内の複数個の画素のうち、背景色値に比較的近いRGB値を有する画素を背景画素に分類し、その他の画素をオブジェクト画素に分類することによって、スキャンデータを二値化する。背景色値に比較的近いRGB値を有する画素は、例えば、Rm−dV≦R≦Rm+dV、かつ、Gm−dV≦G≦Gm+dV、かつ、Bm−dV≦B≦Bm+dVを満たすRGB値)を有する画素である。生成された二値画像データにおいて、例えば、ONの値は、オブジェクト画素を示し、OFFの値は、背景画素を示す。
図3(B)には、生成された二値画像データによって表される二値画像BIが示されている。図3(B)の二値画像BIは、複数個のオブジェクト画素によって構成されるオブジェクト領域として、スキャン画像SIの7個のオブジェクトOb1〜Ob7(図3(A))にそれぞれ対応する7個のオブジェクト領域BA1〜BA7を含んでいる。二値画像BIは、スキャン画像SIの背景Bgに対応する背景領域BA0を含んでいる。
S30では、CPU210は、二値画像データを用いて、オブジェクト領域と背景領域とを特定して、特定された領域にラベルを設定するラベリング処理を実行する。ラベリング処理の結果、ラベルの値を画素ごとに有するラベルデータが生成されて、バッファ領域241に格納される。
ラベリング処理では、連続する1個以上の同じ種類の画素を含む同種画素群が1個の領域として特定される。具体的には、連続する1個以上のオブジェクト画素を含む第1種の同種画素群が、1個のオブジェクト領域として特定され、連続する1個以上の背景画素を含む第2種の同種画素群が、1個の背景領域として特定される。本実施例では、「第1の画素と第2の画素とが連続している」とは、第1の画素の上下左右に接する4個の位置のいずれかに、第2の画素が位置していることを意味する。これに代えて、「第1の画素と第2の画素とが連続している」とは、第1の画素を中心とする縦3画素×横3画素の範囲に第2の画素が含まれることを意味しても良い。
図3(B)の例では、上述した7個のオブジェクト領域BA1〜BA7と、1個の背景領域BA0と、が特定される。これらの領域BA0〜BA7のそれぞれには、領域を識別する識別子として互いに異なるラベルが設定される。二値画像BIを構成する各画素は、スキャン画像SIを構成する各画素と一対一で対応しているので、二値画像BIにおいて、領域BA0〜BA7が特定されることは、スキャン画像SIにおいて、オブジェクトOb1〜Ob7、背景Bgが特定されること、と同義である。
S40では、CPU210は、特定された領域ごとに、領域内の画像の種類、すなわち、領域内のオブジェクトの種類が「文字」であるか否かを判断するオブジェクト属性判断処理を実行する。この処理は、公知の方法で行われるが、例えば、オブジェクト領域に含まれる色数が基準以下であり、かつ、オブジェクト領域に外接する最小矩形内の総画素数に対するオブジェクト画素の画素数が基準以下であるオブジェクト領域は、文字であると判断される。
S50では、CPU210は、高圧縮PDFファイルを生成する。具体的には、スキャンデータを用いて、文字であると判断されたオブジェクトOb4〜Ob6を示す文字画像TI(図3(C))を表す文字画像データと、文字以外のオブジェクトOb1〜Ob3と背景Bgとを含む非文字画像GI(図3(D))を表す非文字画像データと、が生成される。文字画像データは、二値画像データであり、例えば、FLATE圧縮方式により圧縮される。非文字画像データは、RGB画像データであり、例えば、JPEG圧縮方式で圧縮される。圧縮済の非文字画像データは、最下層のレイヤーとして表示させる画像データとして、PDFファイルに格納される。圧縮済の文字画像データは、非文字画像データより上位層のレイヤーとして表示する画像データとして、PDFファイルに格納される。圧縮済の文字画像データは、文字色値TC1および座標値CD1と関連付けて、PDFファイルに格納される。文字色値TC1は、文字の色を表すRRB値であり、座標値CD1は、非文字画像GIに対して、文字画像TIが配置されるべき位置を表す情報である。
高圧縮PDFファイルが生成されると、画像処理は終了される。生成された高圧縮PDFファイルは、例えば、不揮発性記憶装置220に保存され、ユーザの利用に供される。高圧縮PDFファイルは、例えば、PDFファイルの閲覧ソフトを用いて表示すると、スキャン画像SI(図3(A))を、再現することができる。
A−3.ラベリング処理
図2のS30のラベリング処理について説明する。図4は、ラベリング処理のフローチャートである。図5は、ラベリング処理で用いられる画像の一例を示す図である。説明の容易のために、図5(A)に示すように、縦5画素×横24画素(120個)の二値画像BIを示す二値画像データが処理対象であるとして、ラベリング処理を説明する。図5(A)の二値画像BI内のハッチングされた画素は、オブジェクト画素であり、ハッチングされていない画素は、背景画素である。なお、後述するラベル画像LIおよびライン情報LDについても、理解の容易のために、対応する二値画像BI内の画素がオブジェクト画素である画素には、ハッチングを付している。
S110では、CPU210は、初期状態のラベルデータをバッファ領域231内に準備する。ラベルデータは、スキャン画像SIおよび二値画像BIと同じ個数の画素を有するラベル画像を表すデータである。初期状態のラベルデータにおいて、各画素の値は、初期値(本実施例では、「0」)である。ラベルデータによって表されるラベル画像LI(図5(B))は、図5(A)の二値画像BIと同様に、縦5画素×横24画素のサイズを有している。
S120では、CPU210は、初期状態のラベル修正テーブルLATをバッファ領域231内に準備する。図6は、ラベル修正テーブルLATの一例を示す図である。本実施例では、詳細は後述するが、処理時間の短縮のために、ラベルデータにおいて、ラベルが設定された画素について、ラベルを修正する必要がある場合であっても、全ての画素にラベルを設定するまでは、ラベルの修正を行わない。その代わりに、ラベルを修正する必要がある場合には、ラベル修正テーブルLATに、修正ラベルを記録する。ラベル修正テーブルLATは、複数個のエントリを含んでいる。各エントリは、ラベルと、該ラベルに対応する修正ラベルと、を含んでいる。図6(A)の初期状態のラベル修正テーブルLATでは、各エントリにおいて、ラベルと修正ラベルとが一致している。例えば、図6(A)の上から2番目のエントリE2のラベルと修正ラベルとは、「2」である。ラベルと、修正ラベルと、が一致していることは、当該ラベルは、修正する必要がないことを意味している。
ラベル修正テーブルLATに含まれるエントリの個数ENは、設定される可能性があるラベルの個数の最大値と等しい。本実施例では、二値画像BIにおいて、オブジェクト画素と背景画素とが市松模様を形成するように配置された場合に、各画素がそれぞれ1個の領域としてラベルが設定される。このために、設定される可能性があるラベルの個数の最大値は、二値画像BIの画素数に等しい。したがって、図5(A)の二値画像BIが処理対象である場合には、120個のエントリを含むラベル修正テーブルLATが準備される。
S130では、二値画像BI内に含まれる第1の方向D1に沿った複数本のラインBL1〜BL5の中から、1本の注目ラインを選択する。本実施例のラベリング処理は、複数本のラインBL1〜BL5に対して、第2の方向D2の上流から下流に向かって順次に、処理が行われる。このために、図5(A)の例では、ラインBL1〜BL5が、符号の末尾の数字の順番に、1本ずつ注目ラインとして選択される。
S140では、CPU210は、注目ラインのライン情報LDを生成するライン情報生成処理を実行する。ライン情報LDは、1本のラインと対応する1ライン分の情報である。図5(C)には、図5(A)の二値画像BIの5本のラインBL1〜BL5に対応する5個のライン情報LD1〜LD5が図示されている。1個のライン情報LDは、対応するライン上のN個(Nは2以上の整数)の画素のそれぞれに対応するN個の値を含んでいる。例えば、図5(A)の5本のラインBL1〜BL5のそれぞれは、24個の画素を含んでいるので、図5(C)のライン情報LD1〜LD5のそれぞれは、24個の値を含んでいる。
図7は、ライン情報生成処理のフローチャートである。S210では、注目ライン上の複数個の画素の中から、1個の注目画素を選択する。本実施例では、注目ライン上のN個の画素の中のうち、第1の方向D1の最上流の画素が、最初の注目画素として選択される。以下では、特定の画素群(例えば、一ライン分の画素群や、一つのライン画素群)に含まれる第1の方向D1に沿って並ぶ複数個の画素のうち、第1の方向D1の最上流の画素を、先頭画素とも呼ぶ。例えば、図5(A)のラインBL1が、注目ラインである場合には、ラインBL1上の先頭画素P11が、最初の注目画素として選択される。
S220では、CPU210は、二値画像BIを参照して、注目ライン上において、注目画素から第1の方向D1に向かって同じ種類の画素が連続する個数である連続画素数RNを算出する。例えば、図5(A)のラインBL1の画素P11が注目画素である場合には、画素P11は背景画素であるので、画素P11から第1の方向D1に向かって背景画素が連続する個数である「7」が、連続画素数RNとして算出される。図5(A)のラインBL1の画素P12が注目画素である場合には、画素P12はオブジェクト画素であるので、画素P12から第1の方向D1に向かってオブジェクト画素が連続する個数である「3」が、連続画素数RNとして算出される。
S230では、CPU210は、注目画素がオブジェクト画素であるか否かを判断する。注目画素がオブジェクト画素である場合には(S230:YES)、S240にて、CPU210は、注目画素を含むライン画素群に対応するライン情報の値として、正の値を設定する。ここで、ライン画素群は、第1の方向D1に連続する1個以上の同じ種類の画素を含む画素群である。例えば、図5(A)のラインBL1の画素P12が注目画素である場合には、S240にて、ライン画素群G12に含まれる3個のオブジェクト画素に対応する3個の値RV12(図5(C))が、第1の方向D1の上流側から順に、3、2、1に設定される。
注目画素がオブジェクト画素でない場合には(S230:NO)、すなわち、注目画素が背景画素である場合には、S250にて、CPU210は、注目画素を含むライン画素群に対応するライン情報の値として、負の値を設定する。例えば、図5(A)のラインBL1の画素P11が注目画素である場合には、S250にて、ライン画素群G11に含まれる7個の背景画素に対応する7個の値RV11(図5(C))が、第1の方向D1の上流側から順に、−7、−6、−5、−4、−3、−2、−1に設定される。
以上の説明から解るように、ライン情報のN個の値の絶対値は、対応する画素のライン画素群における位置と、連続画素数RNと、に基づいて決定される。この結果、ライン情報のN個の値を、容易に適切に決定することができる。すなわち、ライン画素群に含まれる複数個の画素に対応する複数個のライン情報の値の絶対値は、第1の方向D1の上流側から順に、RN、(RN−1)、(RN−2)、...、1、に設定される。そして、ライン画素群に含まれる画素の種類が背景画素である場合には、負の値、すなわち、−RN、−(RN−1)、−(RN−2)、...、−1、に設定され、ライン画素群に含まれる画素の種類がオブジェクト画素である場合には、正の値、すなわち、RN、(RN−1)、(RN−2)、...、1、に設定される。
ライン情報のN個の値の絶対値は、対応するライン上にて、対応する画素から第1の方向D1に向かって同じ種類の画素が連続する個数を示している。また、ライン情報のN個の値の絶対値は、対応する画素を含むライン画素群の第1の方向D1の下流端の画素を「1」として、第1の方向D1の上流に向かって1ずつ増加している。ライン情報のN個の値の絶対値は、当該ライン画素群における対応する画素の第1の方向D1の位置を示していると言うことができる。また、ライン情報のN個の値の絶対値は、対応するライン上にて、対応する画素から第1の方向D1に向かって同じ種類の画素が連続する個数を示していると言うこともできる。例えば、図5(A)のラインBL1上の特定の画素Ptに対応するライン情報の値Vt(図5(C))は、−3である。この値Vt=−3を参照すると、この値Vtは負であるので、対応する画素Ptは、背景画素であることが解る。また、この値Vt=−3を参照すると、この値Vtの絶対値は3であるので、対応する画素Ptから第1の方向D1に3個の背景画素が連続することが解る。換言すれば、値Vt=−3を参照すると、対応する画素Ptから第1の方向D1に3個分だけ移動した位置に、画素Ptを含むライン画素群G11の第1の方向D1に隣接する別のライン画素群G12の先頭画素が位置することが解る。
S260では、CPU210は、注目ライン上の全ての画素に対応するライン情報の値を設定したか否かを判断する。全ての値が設定済でない場合には(S260:NO)、CPU210は、S210に戻って、注目ライン上においてライン情報の値が未設定である画素のうちの先頭画素を、次の注目画素として選択する。例えば、現在の注目画素が、ラインBL1の画素P11である場合には、S250にて画素P11を含むライン画素群G11内の全ての画素に対応するライン情報の値が設定されるので、次の注目画素は、ライン画素群G11に対して第1の方向D1に隣接する画素P12である。同様に、現在の注目画素が、ラインBL1の画素P12である場合には、次の注目画素は、画素P12を含むライン画素群G12の第1の方向D1に隣接する画素P13である。
全ての値が設定済である場合には(S260:YES)、すなわち、注目ライン上のN個の画素に対応するN個の値が設定済である場合には、CPU210は、ライン情報生成処理を終了する。例えば、注目ラインが図5(A)のラインBL1である場合には、ラインBL1の複数個の4個のライン画素群G11〜G14にそれぞれ対応するライン情報の値RV11〜RV14がそれぞれ設定される(図5(C))。注目ラインのライン情報を注目ライン情報とも呼ぶ。
図4のS140が終了すると、S150では、CPU210は、注目ライン情報のN個の値の中から1個の注目値を取得する。取得される注目値は、注目ラインに含まれる1個以上のライン画素群のうちの一つの注目ライン画素群の先頭画素に対応する値である。具体的には、最初の注目値は、注目ラインにおける第1の方向D1の最上流のライン画素群の先頭画素に対応する値である。2番目の注目値は、注目ラインにおける第1の方向D1の上流側から2番目のライン画素群の先頭画素に対応する値である。2番目以降の注目値は、現在の注目値を用いて取得される。
例えば、図5(A)の二値画像BIのラインBL1のライン情報LD1が、注目ライン情報である場合には、最初の注目値は、ライン画素群G11の先頭画素P11に対応する値V11であり、2番目の注目値は、ライン画素群G12の先頭画素P12に対応する値V12である。同様に、3、4番目の注目値はライン画素群G13、14の先頭画素P13、P14に対応する値V13、V14である。このように、注目ライン情報の1個の注目値は、一つのライン画素群と、一対一で対応しているので、1個の注目値を取得することは、一つの注目ライン画素群を決定することと同義である。
S160では、CPU210は、注目値に対応する注目ライン画素群に含まれる1個以上の画素にラベルを設定するラベル設定処理を実行する。図8は、ラベル設定処理のフローチャートである。図9は、ラベル画像LIの一例を示す図である。
S310では、CPU210は、注目値に基づいて、上側ラインのライン情報の参照範囲を決定する。上側ラインは、注目ラインに対して上側に隣接するライン、すなわち、注目ラインに対して第2の方向D2の反対方向に隣接するラインである。注目ラインが、二値画像BIの1行目のラインBL1である場合には、上側ラインが存在しないので、参照範囲は、決定されない。注目ラインが、二値画像BIの2行目以降のラインBL2〜BL5である場合には、上側ラインが存在するので、参照範囲が、決定される。
具体的には、参照範囲は、注目ライン画素群が位置する第1の方向D1の範囲である。すなわち、注目値に対応する画素の第1の方向D1の座標をX1とし、注目値の絶対値をX2とすると、参照範囲は、第1の方向D1の座標Xが、X1≦X≦(X1+X2−1)を満たす範囲である。例えば、図5(A)の4行目のラインBL4が注目ラインであり、ラインBL4のライン情報LD4(図5(C))の値V42が、注目値である場合、すなわち、値V42に対応する画素を含むライン画素群G42(図5(A))が注目ライン画素群である場合には、上側ラインのライン情報LD3の参照範囲は、図5(C)に示す10画素分の範囲RA32である。
S315では、CPU210は、注目値に対応する仮ラベルを新規の値に設定する。ここで、新規の値は、未使用のラベルのうちの最小値である。図9(A)には、ライン情報LD4(図5(C))の値V42が注目値である場合におけるS315の時点でのラベル画像LIが示されている。図9(A)のラベル画像LIにおいて、空欄の画素は、ラベル設定処理の処理対象とされていない画素である。実際には、これらの画素は、ラベルの初期値「0」を有しているが、ラベル設定処理の処理対象とされていないことを示すために、図9(A)では、空欄とされている。
図9(A)から解るように、この時点では、ラベル画像LIには、0〜6までのラベルが使用されているので、仮ラベルは、7に設定される。
S320では、上側ラインのライン情報から、上側ライン上の1個の画素に対応する1個の参照値を取得する。ライン情報LD4(図5(C))の値V42が注目値である場合には、参照範囲RA32の先頭の値V31が、最初の参照値として取得される。2番目以降の参照値は、参照範囲RA32内の複数個の値のうち、前回の参照値V42に対応する画素を含むライン画素群に対して隣接する画素に対応する値である。例えば、ライン情報LD4(図5(C))の値V42が注目値である場合には、2〜5番目の参照値は、それぞれ、図5(C)に示す値V32〜V35である。図5(C)から解るように、1個の参照値に対応する参照画素は、上側ライン上の一つのライン画素群の先頭画素である。このように、1個の参照値と上側ライン上の一つのライン画素群とは一対一で対応しているので、1個の参照値を取得することは、一つの参照ライン画素群を決定することと同義である。1番目の参照値V31に対応する画素P31と、2番目の参照値V32に対応する画素P32と、は連続していない。
S325では、CPU210は、取得された1個の参照値に対応する画素は、注目値に対応する画素と、同じ種類であるか否かを判断する。上述したように、ライン情報の値の正負の符号は、対応する画素の種類を表す。したがって、参照値と注目値との両方が正の値である場合、および、参照値と注目値との両方が負の値である場合には、参照値に対応する画素は、注目値に対応する画素と同じ種類であると判断される。参照値と注目値とのうちの一方が正の値であり、かつ、他方が負の値である場合には、参照値に対応する画素は、注目値に対応する画素と同じ種類でないと判断される。
参照値に対応する画素が注目値に対応する画素と同じ種類でない場合には(S325:NO)、注目ライン画素群に含まれる画素と、参照ライン画素群に含まれる画素と、が同じ種類でないことを意味する。したがって、この場合には、CPU210は、注目ライン画素群と、参照ライン画素群とは、一つの同種画素群を構成すると判断しない。すなわち、S330にて、CPU210は、参照ライン画素群は、注目ライン画素群と連結されるべき画素群、すなわち、連結対象の画素群でないと判断する。
一方、参照値に対応する画素が注目値に対応する画素と同じ種類である場合には(S325:YES)、注目ライン画素群に含まれる画素と、参照ライン画素群に含まれる画素と、が同じ種類であることを意味する。したがって、この場合には、CPU210は、注目ライン画素群と、参照ライン画素群とは、一つの同種画素群を構成すると判断する。すなわち、S335にて、CPU210は、参照ライン画素群は、連結対象の画素群であると判断する。
S340では、CPU210は、ラベルデータから参照値に対応するラベルを取得する。参照値に対応するラベルは、ラベルデータにおいて、参照値に対応する画素に設定されているラベルである。例えば、図5(C)のライン情報LD3の値V31が参照値である場合には、ラベル画像LIから対応するラベルとして、図9(A)のラベルL31の値である「4」が取得される。
S345では、CPU210は、ラベル修正テーブルLATから、S340で取得されたラベルに対応する修正ラベルが取得される。図6(B)には、ライン情報LD4(図5(C))の値V42が注目値である場合におけるS345の時点でのラベル修正テーブルLATが示されている。この場合には、図6(B)のラベル修正テーブルLATのエントリE4において、ラベル「4」に対応する修正ラベルは、「4」であるので、修正ラベルとして、「4」が取得される。
ここで、図6(D)のラベル修正テーブルLATを参照して、ラベル「6」の修正ラベルを取得する場合を例として、ラベルに対応する修正ラベルの取得の方法について補足の説明をする。先ず、ラベル「6」に対応するエントリE6が参照される。エントリE6では、ラベル「6」に、修正ラベルとして「5」が対応付けられている。この場合には、次に、ラベル「5」に対応するエントリE5が参照される。エントリE5では、ラベル「5」に、修正ラベルとして「1」が対応付けられている。この場合には、次に、ラベル「1」に対応するエントリE1が参照される。エントリE1では、ラベル「1」に、修正ラベルとして「1」が対応付けられている。そして、最終的に、ラベル「6」の修正ラベルとして、「1」が取得される。このように、ラベルと同じ値が修正ラベルとして対応付けられているエントリに到達するまで、エントリの参照を繰り返して、最終的な修正ラベルが取得される。上述したように、ラベル修正テーブルLATは、ラベルを修正する必要がある場合に、修正ラベルが記録されるテーブルであるので、修正ラベルは、この時点で、参照ライン画素群に設定されているラベルである、と言うことができる。
S350では、CPU210は、取得された修正ラベルは、現在の仮ラベルより小さいか否かを判断する。修正ラベルが仮ラベルより小さい場合には(S350:YES)、S355にて、CPU210は、仮ラベルの値を修正ラベルの値に変更する。修正ラベルが仮ラベル以上である場合には(S350:NO)、CPU210は、S355をスキップして、S360に処理を進める。この結果、注目ライン画素群と連結すべき1個以上の参照ライン画素群がある場合には、1個以上の参照ライン画素群に現時点で設定されているラベルのうち、最小のラベルが、仮ラベルとされる。
S360では、CPU210は、現在の参照値を用いて、次の参照値を決定する。現在の参照値の絶対値は、現在の参照値に対応する画素から次回の参照値に対応する画素までの画素数を示している。このために、現在の参照値に対応する注目ライン画素群に対して第1の方向D1に隣接するライン画素群の先頭画素に対応するライン情報の値を、適切に次ぎの参照値として決定することができる。したがって、CPU210は、現在の参照値の次の参照値を、現在の参照値に対応する画素と次の参照値に対応する画素との間に位置する画素の値を参照することなく、容易に決定することができる。ただし、S310で決定された現在の参照範囲内に次の参照値がない場合には、次の参照値は決定できない。例えば、現在の参照範囲が、図5(C)の参照範囲RA32であり、現在の参照値が、図5(C)の値V31である場合には、値V31「2」に従って、現在の参照値である値V32の位置から2画素分だけ第1の方向D1に移動した位置にある値V32が、次の参照値として決定される。現在の参照値が、図5(C)の値V32である場合には、値V32「−2」に従って、現在の参照値である値V32の位置から2画素分だけ第1の方向D1に移動した位置にある値V33が、次の参照値として決定される。また、現在の参照値が、図5(C)の値V35である場合には、値V35「5」に従って、現在の参照値である値V35の位置から5画素分だけ第1の方向D1に移動する。しかしながら、移動した位置にある値V38は、参照範囲RA32内に存在しないため、次の参照値が決定されない。
S365では、CPU210は、次の参照値はあるか否かを判断する。すなわち、CPU210は、S360にて次の参照値が決定できたか否かを判断する。次の参照値がある場合には(S365:YES)、CPU210は、S320に戻って、次の参照値を取得する。次の参照値がない場合には(S365:NO)、S370に処理を進める。
S370では、CPU210は、現在の注目値に対応する注目ライン画素群のラベルを仮ラベルの値に設定する。注目ライン画素群が図5(A)のライン画素群G42である場合には、連結対象であると判断される参照ライン画素群は、図5(A)の3個のライン画素群G31、G33、G34である。3個のライン画素群G31、G33、G34の修正ラベルは、図9(A)のラベル画像LI内の対応するラベルL31、L33、L34および図6(B)のラベル修正テーブルLATから解るように、「4」、「1」、「5」である。したがって、注目ライン画素群が図5(A)のライン画素群G42である場合には、注目ライン画素群のラベルは、「4」、「1」、「5」のうちの最小値である「1」に決定される。決定されたラベルは、ラベルデータに記録される。図9(B)の例では、ラベルデータによって表されるラベル画像LIにおいて、ライン画素群G42に対応する10個の値LG42が、「1」に設定されている。もし、注目ライン画素群と連結すべき参照ライン画素群が1個もない場合には、仮ラベルの値は、S315にて決定された新規の値のまま変更されないから、この場合には、注目ライン画素群のラベルは、新規の値、すなわち、上側ライン上のライン画素群のラベルのいずれとも異なる値に決定される。
なお、注目ラインが、二値画像BIの1行目のラインBL1である場合には、上述したように、上側ラインが存在しないために参照範囲が決定されない。このために、注目ラインがラインBL1である場合には、全ての注目値(すなわち、注目ライン画素群)についてのラベル設定処理において、S320〜S365は実行されず、S370において、注目ライン画素のラベルは、新規の値に決定される。
S375では、CPU210は、必要に応じて、ラベル修正テーブルLATの修正を行う。具体的には、連結対象であると判断される参照ライン画素群が2個以上存在する場合には、2個以上の参照ライン画素群のうち、最小ではない修正ラベルが設定されている参照ライン画素群のラベルは、最小である修正ラベルに修正される。例えば、注目ライン画素群が図5(A)のライン画素群G42である場合には、連結対象であると判断される3個のライン画素群G31、G33、G34のうち、最小ではない修正ラベルが設定されている2個のライン画素群G31、G34のラベル「4」、「5」は、最小である修正ラベル、すなわち、ライン画素群G33の修正ラベル「1」に修正される。具体的には、図6(C)に示すように、ラベル修正テーブルLATのエントリE4、E5において、ラベル「4」、「5」に、修正ラベル「1」がそれぞれ対応付けられる。S375が終了するとラベル設定処理は終了される。
ここで、理解のために、図5(C)のライン情報LD4の値V44が注目値である場合、すなわち、図5(A)のラインBL4のライン画素群G44が注目ライン画素群である場合のラベル設定処理について説明する。この場合には、図5(C)のライン情報LD3の値V37とV38が、参照値として用いられる。そして、S335にて、値V37に対応するライン画素群G34(図5(A))が、連結対象であると判断される。そして、S340にて、図9(B)のラベル画像LIから解るように、ライン画素群G34のラベル「5」がラベルデータから取得される。そして、S345にて、図6(C)のラベル修正テーブルLATのエントリE5から解るように、ラベル「5」に対応する修正ラベル「1」が取得される。この結果、S370にて、図9(C)に示すように、ライン画素群G44に対応する5個の値LG44が、「1」に設定される。なお、この場合には、連結対象と判断される2個以上の参照ライン画素群がないので、S375にて、ラベル修正テーブルLATの修正は行われない。
図4に戻って説明を続ける。S160のラベル設定処理が終了すると、S170では、CPU210は、現在の注目値を用いて、次の注目値を決定する。具体的には、上述した図8のS360にて、現在の参照値を用いて次の参照値を決定する際と同様の方法で、現在の注目値を用いて次の注目値が決定される。この結果、現在の注目値に対応する注目ライン画素群に対して第1の方向D1に隣接する画素に対応するライン情報の値が、次の注目値として決定される。したがって、CPU210は、現在の注目値の次の注目値を、現在の注目値と次の注目値との間の値を参照することなく、容易に決定することができる。ただし、注目ライン上の全ての画素のラベルが設定された場合には、次の注目値はないので、次の注目値は決定できない。
S180では、CPU210は、次の注目値はあるか否かを判断する。すなわち、CPU210は、S170にて次の注目値が決定できたか否かを判断する。次の注目値がある場合には(S180:YES)、CPU210は、S150に戻って、次の注目値を取得する。次の注目値がない場合には(S180:NO)、S185にて、CPU210は、上側ラインのライン情報LDをバッファ領域231から消去する。現在の注目ラインのライン情報LDは、次回のS130〜S180の処理にて、上側ラインのライン情報LDとして使用されるので、バッファ領域231に保持される。
S190にて、CPU210は、二値画像BI内の全てのラインを処理したか否かを判断する。未処理のラインがある場合には(S190:NO)、CPU210は、S130に戻って、未処理のラインを注目ラインとして選択する。全てのラインが処理された場合には(S190:YES)、CPU210は、S192にて、注目ラインのライン情報LDをバッファ領域231から消去して、S195に処理を進める。
S195に処理が進められた時点で、ラベルデータによって表されるラベル画像LIの全ての画素に、ラベルが設定されている。図9(C)には、S195の時点でのラベル画像LIが示されている。また、図6(D)には、この時点でのラベル修正テーブルLATが示されている。
S195では、CPU210は、ラベル修正テーブルLATを用いて、ラベルデータを修正する。具体的には、CPU210は、ラベル修正テーブルLATを参照して、ラベルデータで使用されている全てのラベルについて、最終的な修正ラベルを取得する。修正ラベルの取得方法は、上述した図8のS345にて、ラベルに対応する修正ラベルを取得する方法と同じである。すなわち、ラベル修正テーブルLATを参照して、ラベルと同じ値が修正ラベルとして対応付けられているエントリに到達するまで、エントリの参照を繰り返して、最終的な修正ラベルが取得される。例えば、図6(D)のラベル修正テーブルLATを参照して、ラベル「6」の修正ラベルを取得する場合には、先ず、ラベル「6」に対応するエントリE6が参照される。エントリE6では、ラベル「6」に、修正ラベルとして「5」が対応付けられているので、次に、ラベル「5」に対応するエントリE5が参照される。エントリE5では、ラベル「5」に、修正ラベルとして「1」が対応付けられているので、次に、ラベル「1」に対応するエントリE1が参照される。エントリE1では、ラベル「1」に、修正ラベルとして「1」が対応付けられているので、最終的に、ラベル「6」の修正ラベルとして、「1」が取得される。
図9(C)の例では、ラベルデータ(すなわち、ラベル画像LI)では、0〜8までの9種類のラベルが使用されている。図6(D)のラベル修正テーブルLATを参照して、0〜8までの9種類のラベルの修正ラベルとして、それぞれ、0、1、2、3、1、1、1、7、8が取得される。なお、最小のラベル「0」の修正ラベルは必ず「0」である。
これらの修正ラベルは、途中に不使用の数字がないように、整理される。例えば、0〜8までの9種類のラベルの修正ラベルは、最終的に、0、1、2、3、1、1、1、4、5に決定される。そして、ラベルデータの各画素のラベルは、対応する修正ラベルの値に変更される。図9(D)には、修正済のラベルデータによって表されるラベル画像LIが示されている。図9(D)のラベル画像LIでは、1個以上の連続する同じ種類の画素からなる同種画素群のそれぞれに、互いに異なるラベルが設定され、1個の同種画素群に含まれる1個以上の画素のそれぞれには、同じラベルが設定されていることが解る。
以上説明した実施例によれば、例えば、図5(C)の4行目のラインBL4が注目ラインである場合おいて、図4のS150にて、注目ラインBL4上の一つのライン画素群G42が、注目ライン画素群として決定される。そして、図8のS320にて、上側ラインであるラインBL3上の1個の画素P31に対応する1個の参照値V31が取得される。この参照値V31は、参照範囲RA32内の画素、すなわち、注目ライン画素群G42の1個の画素の第1の方向D1の位置に対応する上側ラインBL3上の画素P31に対応する値である。そして、図8のS325にて、取得された参照値V31を用いて、当該参照値V31に対応する画素P31を含むライン画素群G31と、注目ライン画素群G42と、が、連結すべき一つ同種画素群を構成するか否かが判断される。
図8のS360では、参照値V31を用いて、画素P31とは連続しない上側ラインBL3上の画素P32に対応する値V32が、次回の参照値として決定され、次回のS320にて当該参照値V32が、取得される。次回のS325にて、取得された参照値V32を用いて、当該参照値V32に対応する画素P32を含むライン画素群G32と、注目ライン画素群G42と、が、連結すべき一つ同種画素群を構成するか否かが判断される。そして、これらの判断の結果を用いて、注目ライン画素群G42に、ラベルが設定される(S330〜S355、S370など)。
上述したようにライン情報LD3は、上側ラインBL3上のN個の画素のそれぞれに対応するN個の値を含んでいる。すなわち、ライン情報LD3のN個の値は、上側ラインBL3内の画素と一対一で対応している。したがって、本実施例では、注目ライン画素群G42の第1の方向D1の位置に基づいてN個の値の中から最初の参照値V31を容易に取得できる。例えば、ライン情報LD3のN個の値のうち、参照値V31より第1の方向D1の上流側の2個の値を参照しなくても、最初の参照値V31を取得できる。さらに、参照値V31に対応する画素P31と次の参照値V32に対応する画素P32との間の画素に対応するライン情報LD3の値を取得することなく、最初の参照値V31を用いて、次の参照値V32を直接的に容易に取得できる。参照値V31の値(絶対値)が、対応する画素P32のライン画素群G31における第1の方向D1の位置を示しているからである。この結果、ラベリング処理の処理時間を短縮することができる。
より詳しく説明する。図10は、比較例のライン情報LDXの一例を示す図である。このライン情報LDXは、図5(A)の二値画像BIの3行目のラインBL3に対応するライン情報である。ライン情報LDXに含まれる8個の要素EL1〜EL8は、ラインBL3に含まれる8個のライン画素群に対応している。要素EL1〜EL8のそれぞれは、2個の値(A、B)を含んでいる。第1値Aは、対応するライン画素群の先頭の画素の第1の方向D1の座標を示している。第2値Bは、対応するライン画素群に含まれる画素の個数を示している。例えば、要素EL6を参照すれば、ラインBL3の先頭から6番目のライン画素群G34の先頭の第1の方向D1の座標は、11であり、5個の画素を含むことが解る。しかしながら、例えば、注目ラインがラインBL4であり、上側ラインがラインBL3である場合を考える。注目ラインBL4の注目ライン画素群G44(図5(A))の上側に隣接するライン画素群に対応する要素を、比較例のライン情報LDXから取得するためには、例えば、CPU210は、ライン情報LDXの要素EL1〜EL8を先頭から1個ずつ参照して、注目ライン画素群G44の第1の方向D1の座標に位置する上側ラインBL3上のライン画素群に対応する要素を探索する必要があった。これに対して、本実施例のライン情報LD3を参照すれば、ライン情報LD3は、上側ラインBL3に含まれるN個の画素に対応するN個の値を有しているから、注目ライン画素群G44の第1の方向D1の座標に位置する上側ラインBL3上の画素に対応するライン情報LD3の値を、他の値を参照することなく、直接に、参照値として取得できる。また、ライン情報LD3に含まれるN個の値のうちのいずれの値を最初に参照しても、次に参照すべき参照値を、最初の参照値の絶対値を用いて、容易に取得できる。例えば、最初の参照値を取得した後に、最初の参照値に対応する画素と、次の参照値に対応する画素との間の画素に対応する値が取得されることを回避することができる。この結果、本実施例では、ラベリング処理の処理時間を短縮することができる。
さらに、図10の比較例のライン情報LDXは、最大で、対応するライン上の画素の個数の2倍の個数の値を含み得る。例えば、オブジェクト画素と背景画素とが第1の方向D1に沿って交互に並ぶ場合には、各画素について1個の要素が必要となり、上述したように各要素は2個の値を含むからである。このために、1ライン分のライン情報LDXを生成する際には、当該最大の個数分のメモリ容量をバッファ領域231に確保しておく必要がある。これに対して本実施例のライン情報LDは、常に、対応するライン上の画素の個数の値を含む。したがって、1ライン分のライン情報LDを生成する際には、確保すべきメモリ容量は、比較例より少ない。この結果、ラベリング処理に要するメモリ容量を低減することができる。
さらに、本実施例のライン情報LDのN個の値は、対応するライン上にて、対応する画素から第1の方向D1に向かって同じ種類の画素が連続する個数である連続数を示している。この結果、CPU210は、ライン情報LDのいずれの値を最初の参照値としても、該参照値を用いて、容易に次の参照値を取得することができる。具体的には、CPU210は、最初の参照値によって示される連続数、すなわち、最初の参照値の絶対値を用いて、最初の参照値に対応する画素を含むライン画素群に対して第1の方向D1に隣接する画素に対応する値を、次の参照値として取得する(図8のS360、S320)。この結果、次の参照値を容易に取得できるので、ラベリング処理の処理速度をより向上することができる。
さらに、上記実施例では、ライン情報LDのN個の値のそれぞれは、対応する画素がオブジェクト画素である場合には正の値を有し、対応する画素が背景画素である場合には負の値を有している。すなわち、ライン情報LDのN個の値のそれぞれは、対応する画素の種類を示す種別情報を含んでいる、と言うことができる。そして、CPU210は、図8のS325、S330、S335にて、参照値に含まれる種別情報を用いて、注目ライン画素群と、参照ライン画素群と、が、一つの同種画素群を構成するか否かを判断する。この結果、ライン情報LDのN個の値から取得された参照値以外の情報を用いることなく、注目ライン画素群と、参照ライン画素群と、が、一つの同種画素群を構成するか否かを判断できる。この結果、ラベリング処理の処理速度をより向上することができる。
さらに、上記実施例のラベル設定処理では、複数個の参照ライン画素群のうちの少なくとも一つと、注目ライン画素群と、が、一つの同種画素群を構成すると判断される場合には、注目ライン画素群に、複数個の参照ライン画素群のうち、注目ライン画素群と一つの同種画素群を構成すると判断される一のライン画素群と同じラベルが設定される。具体的には、注目ライン画素群と一つの同種画素群を構成すると判断される1個以上の参照ライン画素群のうち、最小のラベルが設定されているライン画素群と同じラベルが、注目ライン画素群に設定される(図8のS335〜S355、S370)。複数個の参照ライン画素群のうちのいずれもが、注目ライン画素群と一つの同種画素群を構成しないと判断される場合には、注目ライン画素群に、複数個の参照ライン画素群とは異なるラベルが設定される(図8のS315、S330、S370)。この結果、同種画素群ごとに適切なラベルを設定することができる。
さらに、上記実施例の図4のラベリング処理では、CPU210は、図4のS150にて、例えば、注目ラインBL4上の複数個のライン画素群G42、G44のそれぞれを注目ライン画素群として決定する。そして、図8のラベル設定処理では、CPU210は、複数個の注目ライン画素群G42、G44のそれぞれについて、互いに異なる最初の参照値を用いて、注目ライン画素群と参照ライン画素群とが、一つの同種画素群を構成するか否かを判断する。例えば、注目ライン画素群G42の最初の参照値は、値V31であり、注目ライン画素群G44の最初の参照値は、値V37である。そして、CPU210は、複数個の注目ライン画素群G42、G44のそれぞれについて、互いに異なる2番目の参照値を用いて、注目ライン画素群と参照ライン画素群とが、一つの同種画素群を構成するか否かを判断する。例えば、注目ライン画素群G42の2番目の参照値は、値V32であり、注目ライン画素群G44の2番目の参照値は、値V38である。この結果、注目ライン上の複数個のライン画素群G42、G44のそれぞれに適切なラベルを設定することができる。
さらに、上記実施例の図8のラベル設定処理では、互いに異なるラベルをそれぞれ有する2個以上の参照ライン画素群と、注目ライン画素群と、が、一つの同種画素群を構成すると判断される場合には、注目ライン画素群に、一つの参照ライン画素群と同じラベルを設定する(S370)とともに、他の参照ライン画素群のラベルを、当該一つの参照ライン画素群と同じにするべきことを示す修理ラベル情報を、ラベル修正テーブルLATに記録する(S375)。そして、図4のラベリング処理のS195に示すように、注目ラインBL4と上側ラインBL3とを含む二値画像BI内の複数個のラインにラベルを設定した後に、ラベル修正テーブルLATを用いて、他の参照ライン画素群のラベルを修正する。この結果、最後に、一括して修正を要するラベルを修正するので、効率的に、適切なラベルを設定することができる。したがって、ラベリング処理の処理時間をより短縮することができる。
以上の説明から解るように、二値画像BIを表す二値画像データは、対象画像データの例である。上側ラインBL3は第1のラインの例であり、注目ラインBL4は第2のラインの例である。
B.変形例:
(1)上記実施例では、オブジェクト画素と背景画素とを分類するための二値画像データに対して、ラベリング処理が行われている。これに限らず、複数種類の画素を含む画像を表す画像データに対して、ラベリング処理が行われ得る。例えば、赤色の画素などの特定色の画素と、それ以外の画素と、を分類するための二値画像データに対して、ラベリング処理が行われても良く、3種類以上の画素を含む画像データに対して、ラベリング処理が行われても良い。また、上記実施例では、オブジェクト画素と背景画素との両方に対してラベルが設定されているが、2種類の画素の一方の画素、あるいは、3種類以上の画素の一部の種類の画素に対してのみラベルが設定されても良い。
(2)図7のライン情報生成処理に示すライン情報LDの生成手法は一例であり、これに限られない。例えば、CPU210は、図7の例とは逆に、注目ライン上の複数個の画素を、第1の方向D1の下流側から上流側に向かって、順次に注目画素として選択しても良い。この場合には、CPU210は、現在の注目画素が、前の注目画素と同じ種類の画素である場合には、前の注目画素に対応するライン情報LDの値の絶対値に1を加算した値を絶対値とし、かつ、前の注目画素に対応するライン情報LDの値と同じ符号を有する値を、現在の注目画素に対応するライン情報LDの値として決定する。そして、CPU210は、現在の注目画素が、前の注目画素と異なる種類の画素である場合には、絶対値が初期値「1」であり、かつ、前の注目画素に対応するライン情報LDの値と異なる符号を有する値を、現在の注目画素に対応するライン情報LDの値として決定する。こうすれば、上記実施例と同様に適切なライン情報LDを生成することができる。
(3)上記実施例では、ラベリング処理は、文字オブジェクトを特定して、高圧縮PDFファイルを生成するために行われているが、ラベリング処理の目的は、これに限られない。例えば、ラベリング処理は、特定の形状を有するオブジェクトを特定するためや、オブジェクトごとに適切な補正処理を行うために、写真、描画などの特定種類のオブジェクトを抽出するためなどに行われ得る。
(4)一般的には、例えば、図4のラベリング処理を含む画像処理を実現する画像処理装置は、複合機200に限らず、種々の装置であってよい。例えば、プリンタ、デジタルカメラ、スキャナなどの画像関連機器の内部のコンピュータ、汎用のパーソナルコンピュータやスマートフォンなどのユーザの端末装置、ネットワークに接続されたサーバ等によって、本実施例の画像処理が実行されても良い。また、ネットワークを介して互いに通信可能な複数個のコンピュータが、画像処理に要する機能を一部ずつ分担して、全体として、画像処理を実行してもよい。この場合、複数個のコンピュータの全体が、画像処理装置の例である。
(5)上記各実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部あるいは全部をハードウェアに置き換えるようにしてもよい。
以上、実施例、変形例に基づき本発明について説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれる。