図1は、本発明の1つの実施形態の画像処理装置10の概略構成の例を示すブロック図である。画像処理装置10は、画像入力部12、ユーザ入力部14、処理部16、記憶部18、及び出力部20を備える。
画像入力部12は、処理対象の画像データの入力を受け付けて処理部16に渡す。画像入力部12が受け付ける画像データは、例えば、画素ごとに白色及び黒色のいずれかを表す値を有する二値画像のデジタルデータである。画像入力部12は、例えば、スキャナなどの一般的なデジタル画像生成装置から画像データの入力を受け付ける。また例えば、画像入力部12は、インターネットやLAN(Local Area Network)などのネットワーク(図示しない)を介して画像処理装置10と接続されたコンピュータなどの情報処理装置から画像データの入力を受け付けてもよい。なお、以下の説明では、色などを表す数値を有する画素からなるデジタル画像データを単に「画像」と呼ぶ。
ユーザ入力部14は、ユーザによる指示の入力を受け付けて処理部16に渡す。ユーザ入力部14は、例えば、キーボード及びマウスなどの一般的な入力装置であってよい。
処理部16は、画像入力部12が受け付けた画像に対する処理を行う。処理部16は、縮小部160、拡大部162、縮小NGマスク作成部164、及び変形縮小部166を備える。
縮小部は、原画像を所定の縮小率で縮小する処理を行う。縮小部は、例えば、画像の縮小方法として用いられる一般的な縮小方法によって原画像を縮小する。
拡大部162は、縮小部が縮小した結果の画像(以下、「縮小結果画像」とも呼ぶ)を拡大する処理を行う。拡大部162は、縮小部が用いた縮小率の逆数を拡大率として用い、縮小部が用いた縮小方法に対応する方法によって縮小結果画像を拡大する。例えば、縮小部が原画像を1/2倍に縮小した場合、拡大部162は、当該縮小結果画像を2倍に拡大する。この拡大部162による拡大の結果の画像(以下、「拡大結果画像」とも呼ぶ)は、縮小部による縮小前の原画像と同じ大きさを有する。
縮小NGマスク作成部164は、縮小部の縮小処理によって情報欠落が生じ得る原画像中の領域を表すNGエリアを含む縮小NGマスクを作成する。縮小NGマスクは、原画像中の各画素に対応する画素を含む。縮小NGマスク中の各画素は、後述の変形縮小部166の処理で用いられる情報を有する。例えば、縮小NGマスク中の各画素は、当該画素がNGエリアに含まれる場合にONに設定され、当該画素がNGエリアに含まれない場合にOFFに設定されるNGマスク値を有する。縮小NGマスク作成部164は、NGエリア判定部1640及び縮小NGマスク補正部1642を備える。
NGエリア判定部1640は、縮小部の縮小処理によって情報欠落が生じ得る領域を判定する。NGエリア判定部1640は、例えば、縮小処理によって細線の消失又は線同士の潰れなどの画質の劣化が生じる領域をNGエリアとして判定する。NGエリア判定部1640は、例えば、拡大結果画像の各画素の値と原画像の各画素の値とを比較することでNGエリアを判定する。
縮小NGマスク補正部1642は、NGエリア判定部1640が判定したNGエリアを補正して、補正された縮小NGマスクを生成する。縮小NGマスク補正部1642が行う補正処理の内容の詳細は後述する。
変形縮小部166は、縮小NGマスク作成部164が作成した縮小NGマスクに従って原画像を縮小する。変形縮小部166は、例えば、縮小NGマスクが表す各種の領域について互いに異なる縮小率を用いて原画像を縮小する。例えば、変形縮小部166は、縮小NGマスクが表すNGエリアについては縮小率1.0で縮小し(つまり、縮小しない)、NGエリア以外の原画像の領域については、縮小部が用いた所定の縮小率で縮小する。
記憶部18は、処理部16における処理に必要な情報を記憶する記憶装置である。記憶部18は、例えば、処理部16の処理対象の画像、処理部16が行う処理で用いられる変数の値、及び処理部16が行う処理の手順を記述したプログラムなどを記憶する。
出力部20は、処理部16による処理の結果を出力する。例えば、出力部20は、処理部16による処理の結果として生成された画像を表示装置(図示しない)に対して出力し、当該画像を表示装置に表示させる。あるいは、例えば、出力部20は、処理結果の画像をネットワーク(図示しない)に対して出力することで、ネットワークを介して画像処理装置10に接続された装置に処理結果の画像を送ってもよい。
図2は、処理部16が行う処理の手順の例を示すフローチャートである。
図2を参照し、処理部16は、まずステップS1で、処理の対象である原画像を画像入力部12から取得する。本例では、原画像は、二値画像のデジタルデータであるとする。
次に、ステップS2で、処理部16は、処理方向を原画像の主走査方向に設定する。ステップS3以降、処理部16が備える各部は、現在の処理方向の画素線に対して各処理を行う。
ステップS3で、処理部16の縮小部は、現在の処理方向に所定の縮小率で原画像を縮小する。縮小部は、例えば、原画像の主走査方向の各画素線を1/f倍(1.0<f)に縮小する。この縮小率1/fの値は、例えばユーザによって指定された値であってよい。縮小部は、ユーザ入力部14を介して、ユーザが指定した縮小率1/fの値を取得できる。あるいは、縮小部は、予め設定されて記憶部18に記憶された縮小率1/fを用いてもよい。縮小部は、画像の縮小変換処理において一般的に用いられる方法で縮小処理を行う。例えば、原画像の各画素線から、縮小率1/fに応じて決定される一定の間隔で複数の画素を選択し、選択した各画素の値を、縮小結果画像の対応する画素線に含まれる各画素の値とする。縮小処理が終了すると、縮小部160は縮小結果画像を拡大部162に渡す。
ステップS4で、拡大部162は、縮小部から取得した縮小結果画像を拡大する。拡大部162は、設定された処理方向に、縮小部が用いた縮小率1/fの逆数で表される拡大率fで縮小結果画像を拡大する。例えば、拡大部162は、縮小結果画像の主走査方向の各画素線をf倍に拡大する。拡大部162は、縮小部が縮小処理(ステップS3)で用いた方法に対応する方法で拡大処理を行う。拡大部162の拡大処理(ステップS4)は、縮小処理(ステップS3)における変換の逆変換によって拡大結果画像を得るものであると言える。例えば、原画像の各画素線から一定間隔で選択された画素の値を縮小結果画像の画素線に含まれる各画素の値とする上述の例の方法で縮小処理が行われていた場合、拡大部162は、縮小結果画像の各画素線について、画素と画素との間に、拡大率fに応じて決定される所定の個数の画素を挿入した画素線を拡大結果画像の画素線とする。ここで、画素と画素との間に挿入される画素の値は、例えば、挿入される画素を挟む2つの画素のうちの一方と同じ値に設定しておけばよい。拡大処理が終了すると、拡大部162は、拡大結果画像を縮小NGマスク作成部164に渡す。
縮小処理(ステップS3)において何らかの情報欠落が生じていた場合、ステップS4で縮小結果画像を拡大した拡大結果画像は、縮小結果画像における情報欠落状態を維持するものとなる。例えば、図3を参照し、画素線Aは、原画像IMGOの主走査方向の1つの画素線である。画素線Bは、画素線Aを主走査方向(矢印Mの方向)に1/f倍に縮小した画素線である。つまり、画素線Bは、縮小結果画像において原画像IMGOの画素線Aに対応する画素線である。また、画素線Cは、画素線Bを主走査方向にf倍に拡大した画素線である。つまり、画素線Cは、拡大結果画像において原画像IMGOの画素線Aに対応する画素線Cである。
図3に例示する原画像IMGOの画素線Aでは、一点鎖線で囲んだ部分p1に4つの黒画素が配置されており、各黒画素とその隣の黒画素との間には1つの白画素が配置されている。一方、縮小結果画像の画素線Bでは、画素線Aの部分p1に対応する部分において、4つの黒画素が連続して配置されており、画素線Aにおいて黒画素と黒画素との間に配置されている白画素は消失している。これは、縮小処理によって白色の細線が消失し、原画像IMGOにおける4本の独立した黒線が潰れて1つの線として縮小結果画像に現れることを示す。また、画素線Aにおいて一点鎖線で囲んだ部分p2に存在する1つの黒画素は、画素線Bでは消失している。これは、原画像IMGOにおける黒色の細線が縮小結果画像において消失することを表す。そして、画素線Bを拡大した画素線Cにおいても、画素線Aの部分p1中の白画素に対応する白画素は存在せず、画素線Aの部分p2中の黒画素に対応する黒画素は存在しない。つまり、拡大結果画像の画素線Cには、縮小結果画像の画素線Bにおける情報欠落状態が反映されている。したがって、原画像IMGOの画素線Aと拡大結果画像の画素線Cとを比較することで、縮小処理によって情報欠落が生じた部分を判定できる。
再び図2を参照し、ステップS5で、縮小NGマスク作成部164は、原画像と拡大結果画像とを比較することで縮小NGマスクを作成する。
図4に、縮小NGマスク作成処理の詳細手順の例を示す。図2のステップS5が開始されると、処理部16の縮小NGマスク作成部164は、図4に例示する手順の処理を開始する。
図4を参照し、縮小NGマスク作成部164は、まず、縮小NGマスクの初期化を行う(ステップS50)。初期化処理では、縮小NGマスク作成部164は、例えば、原画像の各画素に対応する画素を含む縮小NGマスクを作成し、作成した縮小NGマスク中の全画素のNGマスク値をOFFに設定する。初期化処理の後、縮小NGマスク作成部164は、原画像の処理方向の画素線を1つ取得し(ステップS51)、この画素線に対応する画素線を拡大結果画像から取得する(ステップS52)。例えば、図3の例の画素線AをステップS51で原画像から取得した場合、ステップS52では、図3の例の画素線Cを拡大結果画像から取得する。
次に、ステップS54で、縮小NGマスク作成部164のNGエリア判定部1640は、原画像の対象画素線(ステップS51で取得)と、これに対応する拡大結果画像の画素線(ステップS52で取得)と、を比較して、両者の間の相違部分を求める。例えば、NGエリア判定部1640は、ステップS54で、原画像の画素線の各画素の値と、対応する拡大結果画像の画素線の各画素の値と、に対して論理演算のAND演算を行うことで、原画像の画素線の画素と拡大結果画像の画素線の画素とが異なる値を有する画素線上の位置を求める。
図5を参照し、線diffは、図3の例の原画像の画素線Aと、図3の例の拡大結果画像の画素線Cと、に対してNGエリア判定部1640がステップS54の処理を行った結果の例を示す。図5の線diffにおいて、斜線を引いた四角は、画素線A上の画素と、この画素の位置に対応する画素線C上の位置にある画素と、が互いに異なる値を有する(AND演算の結果はFALSE)画素位置を表す。この斜線を引いた四角で表される画素位置は、画素線Aと画素線Cとの間の相違部分である。また、線diffにおいて、斜線を引いた四角が配置されていない画素位置では、画素線A上の画素と画素線C上の画素とが同じ値を有する(AND演算の結果はTRUE)。
図4の説明に戻り、原画像の画素線と拡大結果画像の画素線との間の相違部分を求めた後、ステップS56で、NGエリア判定部1640は、拡大結果画像の画素線を同色の画素が連続する部分に分割する。例えば、図5の例の画素線Cは、c0,c1,c2,c3,c4に分割される。部分c1,c3は、黒画素が連続する部分であり、部分c0,c2,c4は、白画素が連続する部分である。
ステップS58では、NGエリア判定部1640は、ステップS56で分割した部分のうちの1つを選択する。
次にステップS60で、NGエリア判定部1640は、ステップS58で選択した分割部分に、原画像の画素線と拡大結果画像の画素線との間の相違部分が含まれるか否かを判定する。相違部分が含まれる場合、処理はステップS62に進み、相違部分が含まれない場合、処理はステップS64に進む。例えば、図5の画素線Cの部分c0がステップS58で選択された場合、原画像の画素線Aと拡大結果画像の画素線Cとの間の相違を表す線diffにおいて部分c0に対応する部分は、相違部分(斜線を引いた四角)を含まないので、ステップS60の判定の結果、ステップS64に進む。また例えば、図5の画素線Cの部分c1がステップS58で選択された場合、線diffにおいて部分c1に対応する部分は、相違部分を含むので、ステップS60の判定の結果、ステップS62に進む。
ステップS62で、NGエリア判定部1640は、縮小NGマスクにおいて原画像の画素線に対応する画素線について、処理対象の分割部分(ステップS58で選択)に対応する部分に含まれる少なくとも一部の画素のNGマスク値をONに設定する。NGエリア判定部1640は、例えば、縮小NGマスクの画素線において処理対象の分割部分に対応する部分に含まれる画素のうち、ステップS60で存在が確認された相違部分の画素位置に対応する位置に配置される画素と、この画素から所定の範囲内の位置に配置される画素と、についてNGマスク値をONに設定する。図5を参照し、画素線NGは、縮小NGマスクにおいて原画像の画素線Aに対応する画素線である。画素線NGにおいて、拡大結果画像の画素線Cの分割部分c1に対応する部分に含まれる全画素のNGマスク値がONに設定され、画素線Cの分割部分c2に対応する部分に含まれる画素のうち、相違部分に対応する位置及びその左隣の画素のNGマスク値がONに設定されている。このようにNGマスク値をONに設定された画素からなる領域がNGエリアであり、縮小部160の縮小処理(図2のステップS3)によって情報欠落が生じると判定された領域である。
ステップS62の後、処理はステップS64に進む。
ステップS64では、NGエリア判定部1640は、拡大結果画像の画素線のすべての分割部分について処理済みであるか否かを判定する。すべての分割部分について処理済みでない場合は、ステップS58に戻って未処理の分割部分を1つ選択し、ステップS60〜S64の処理を繰り返す。すべての分割部分について処理済みである場合、処理はステップS66に進む。
ステップS66で、NGエリア判定部1640は、原画像の処理方向の画素線のすべてについて処理済みであるか否かを判定する。すべての画素線について処理済みであれば、縮小NGマスク作成処理は終了し、すべての画素線について処理済みでなければ、ステップS51に戻って未処理の画素線が取得され、ステップS52以下の処理が繰り返される。
図6に、図4に例示する手順の縮小NGマスク作成処理によって生成される縮小NGマスクの例を示す。図6は、図3の例の原画像IMGOに対して図4に例示する手順の処理を行った場合の縮小NGマスクの例である。縮小NGマスクMSK中の斜線を引いた四角で表されるNGエリアa1,a2,a3は、それぞれ、原画像IMGOを縮小部160が縮小した場合に情報欠落が生じると判定された領域を表す。例えば、NGエリアa1,a3は、白色の細線が消失することにより原画像IMGO中の複数の黒色線同士が潰れてしまう領域を表し、NGエリアa2は、黒色の細線が消失する領域を示す。
図2の説明に戻り、縮小NGマスク作成処理(図2のステップS5、図4)が終了すると、縮小NGマスク作成部164の縮小NGマスク補正部1642は、縮小NGマスクを補正する処理を行う(ステップS7)。後述の変形縮小処理(ステップS8)では、原画像について、縮小NGマスクが表すNGエリアと、NGエリア以外の領域と、を異なる縮小率で処理方向に縮小するため、変形縮小後の画像において処理方向に画素ずれが生じ得る。例えば、図6を参照し、破線l1,l2,l3,l4,l5は、各NGエリアの上下方向(現在の処理方向Mと垂直な方向)の端部に対応する。図6の例の縮小NGマスクMSKに従って変形縮小処理を行うと、各破線l1,l2,l3,l4,l5の上下に位置する画素線に関して、変形縮小後の画像において処理方向に画素ずれが生じる。縮小NGマスク作成部164の縮小NGマスク補正部1642は、縮小NGマスクを補正し、変形縮小処理(ステップS8)によって画素ずれが生じる部分を減少させる。
図7に、縮小NGマスク補正処理の詳細手順の例を示す。図2の縮小NGマスク補正処理(ステップS7)が開始されると、縮小NGマスク補正部1642は、図7の例の手順の処理を開始する。
図7を参照し、まずステップS70で、縮小NGマスク補正部1642は、縮小NGマスク作成部164が作成した縮小NGマスク中に未処理のNGエリアが存在するか否かを判定する。縮小NGマスク中に未処理のNGエリアが存在すればステップS72に進み、存在しなければ処理を終了する。
例えば、縮小処理(図2のステップS3)において、いずれの画素線においても情報欠落が生じなかった場合、いずれの画素線についても縮小NGマスク作成処理でNGマスクがONに設定されることはなく(図4のステップS60で常にNO判定)、縮小NGマスクはNGエリアを含まないものとなる。この場合、縮小NGマスク補正処理が開始されてから1回目のステップS70の判定でNOに進み、ステップS72以降の処理は行われない。
ステップS72では、縮小NGマスク補正部1642は、縮小NGマスクから、未処理のNGエリアを1つ選択する。
次に、ステップS73で、縮小NGマスク補正部1642は、選択したNGエリアが処理方向と平行な辺を有する長方形になるように補正する。このために縮小NGマスク補正部1642は、例えば、選択したNGエリアを通る処理方向の画素線のうち、縮小NGマスクの外枠(原画像の外枠に対応)を表す長方形の処理方向の2辺のそれぞれに最も近い2本の画素線を検出する。同様に、選択したNGエリアを通る処理方向に対して垂直な方向の画素線のうち、縮小NGマスクの外枠の長方形の処理方向に対して垂直な方向の2辺のそれぞれに最も近い2本の画素線を検出する。そして、検出された4本の画素線が形成する長方形の範囲内に含まれるすべての画素のNGマスク値をONに設定することで、選択したNGエリアを長方形にする。
ステップS73の処理の具体例として、図8を参照し、縮小NGマスクMSK0のNGエリアaが処理対象である場合の処理を説明する。縮小NGマスク補正部1642は、NGエリアaを通る処理方向の画素線のうち、縮小NGマスクの外枠の長方形の処理方向の2辺に最も近い2本の画素線u,dと、縮小マスクの外枠の長方形の処理方向に対して垂直な方向の2辺に最も近い2本の画素線l,rと、の4本の画素線を検出する。そして、検出した画素線u,d,l,rによって形成される長方形の範囲内の画素のNGマスク値をONに設定する。ステップS73の処理により、選択したNGエリアをすべて含む最小の長方形がNGエリアとして設定される。
なお、図6の例のNGエリアa1,a2,a3のように、すでに処理方向と平行な辺を有する長方形であるNGエリアが選択された場合はステップS73の処理は省略できる。
ステップS74では、縮小NGマスク補正部1642は、選択されたNGエリアを表す長方形の上端の辺を含む画素線の1つ上の画素線において、NGマスク値がONに設定されている画素が含まれているか否かを判定する。なお、ここで、「上端の辺」は、NGエリアを表す長方形の処理方向の2辺のうちの1辺であり、上端の辺の「1つ上の画素線」は、上端の辺を含む画素線に隣り合う2本の処理方向の画素線のうち選択されたNGエリアを通らない画素線である。
NGエリアの上端の辺を含む画素線の1つ上の画素線にNGマスク値がONに設定されている画素が含まれていれば、ステップS74からステップS76に進み、当該1つ上の画素線において、選択されたNGエリアの位置に対応する画素のNGマスク値をONに設定する。すると、この画素線は、選択されたNGエリアの新たな上端の辺を含む画素線となる。その後、ステップS74の判定でNGエリアの上端の辺を含む画素線の1つ上の画素線がNGマスク値ONの画素を含まないと判定されるまで、ステップS74,S76の処理が繰り返される。ステップS74でNO判定されると、処理はステップS78に進む。
例えば、図6の例の縮小NGマスクMSKのNGエリアa1がステップS72で選択された場合、NGエリアa1の上端の辺を含む画素線の1つ上の画素線には、NGマスク値がONに設定されている画素は存在しない。よって、ステップS74の判定でNOに進み、ステップS78の判定が行われる。
また例えば、図6の例のNGエリアa3がステップS72で選択された場合、NGエリアa3の上端を含む画素線の1つ上の画素線は、NGエリアa1,a2を通るため、NGマスク値ONの画素を含む。よって、ステップS74の判定でYESに進み、ステップS76で、NGエリアa3の上端の辺を含む画素線の1つ上の画素線において、NGエリアa3の位置に対応する画素のNGマスク値がONに設定され、この画素線がNGエリアa3の新たな上端の辺を含む画素線となる。そして、ステップS74,S76の処理が繰り返されてNGエリアa3の上端の辺が破線l1の位置に達すると、ステップS74でNO判定されてステップS78に進む。
ステップS78では、ステップS72で選択されたNGエリアの下端の辺を含む画素線の1つ下の画素線において、NGマスク値がONに設定されている画素が含まれるか否かを判定する。なお、「下端の辺」は、選択されたNGエリアを表す長方形において上述の「上端の辺」と平行な他方の辺であり、下端の辺の「1つ下の画素線」は、下端の辺に隣り合う処理方向の2本の画素線のうち、選択されたNGエリアを通らない画素線である。下端の辺を含む画素線の1つ下の画素線にNGマスク値ONの画素が含まれていれば、ステップS78からステップS80に進み、当該画素線において、選択されたNGエリアの位置に対応する画素のNGマスク値をONに設定する。この画素線が選択されたNGエリアの新たな下端の辺を含む画素線となる。
例えば、図6の例のNGエリアa1がステップS72で選択された場合、NGエリアa1の下端の辺に相当する画素線の1つ下の画素線は、NGエリアa3を通るので、NGマスク値がONに設定されている画素を含む。この場合、ステップS78からステップS80へ進む。
ステップS80の後、ステップS78の判定でNGエリアの下端の辺に相当する画素線の1つ下の画素線がNGマスクONの画素を含まないと判定されるまで、ステップS78,S80の処理を繰り返し、ステップS78でNO判定されると、処理はステップS70に戻る。
図7に例示する手順の縮小NGマスク補正処理の結果、例えば、図9に示す補正縮小NGマスクMSK´が生成される。図9は、図6の例の縮小NGマスクMSKに対して、図7の例の縮小NGマスク補正処理を行った場合の補正縮小NGマスクの例である。図9を参照し、補正後の縮小NGマスクMSK´に含まれる各NGエリアa1´,a2´,a3´は、主走査方向Mに対して垂直な方向に同一の長さを有し、かつ、それぞれの上端の画素線及び下端の画素線が1直線上(それぞれ、破線l1,l5)に位置する。図9の例の補正縮小NGマスクMSK´によると、後述の変形縮小処理(図2のステップS8)において、各破線l1,l5の上下の画素線については主走査方向Mに画素ずれが生じ得るが、各破線l2,l3,l4の上下の画素線については画素ずれが生じることはない。
図2の説明に戻り、縮小NGマスク補正処理(ステップS7、図7)が終了すると、ステップS8で、変形縮小部166は、補正縮小NGマスクに従って原画像を縮小する。変形縮小部166は、例えば、補正縮小NGマスクが表すNGエリアについては、現在の処理方向に縮小率1.0で縮小し(つまり、縮小しない)、NGエリア以外の領域については、処理方向に1/f倍に縮小する。
以下、図10及び図11を参照し、変形縮小部166が行う変形縮小処理の例を説明する。図10を参照し、原画像IMGO及び補正縮小NGマスクMSK´は、それぞれ、図3の原画像IMGO及び図9の補正縮小NGマスクMSK´と同様である。変形縮小部166は、原画像IMGOの主走査方向Mの各画素線について、この画素線に対応する補正縮小NGマスクMSK´の画素線に含まれる各画素のNGマスク値を参照して変形縮小処理を行う。図10では、この変形縮小後の画像IMGMを原画像IMGOの下方に示す。図10に示す変形縮小後画像IMGM中、一点鎖線で囲んだ領域は、それぞれ、補正縮小NGマスクMSK´中の各NGエリアに対応する。また、図10では、原画像IMGOと変形縮小後画像IMGMとの間に、原画像IMGO中の画素線A、補正縮小NGマスクMSK´中で画素線Aに対応する画素線E、及び、変形縮小後画像IMGM中で画素線Aに対応する画素線Fを示す。
以下、原画像IMGOの画素線Aに対して変形縮小処理を行う場合を例にとって説明する。変形縮小部166は、まず、画素線Aに対応する補正縮小NGマスクMSK´の画素線Eを取得する。そして、画素線EにおいてNGマスク値がONに設定されている部分を検出し、このNGマスク値ONの部分に対応する画素線Aの部分を検出する。画素線Eは、NGエリアa1´,a2´,a3´を通るため、画素線E上で各NGエリアa1´,a2´,a3´に含まれる部分が検出される。画素線E上で検出された各NGエリアa1´,a2´,a3´の部分に対応する画素線Aの部分として、それぞれ、長さL2,L4,L6の部分が検出される。次に、変形縮小部166は、画素線Aについて、NGエリアに対応する部分(長さL2,L4,L6)は縮小率1.0で、NGエリアに対応する部分以外の部分(長さL1,L3,L5,L7)は縮小率1/fで主走査方向に縮小する処理を行う。ここで、長さL1,L3,L5,L7の各部分については、縮小部160が縮小処理(図2のステップS3)で用いた方法と同じ方法で縮小する。画素線Aを変形縮小した結果の画素線Fにおいて、画素線Aの長さL1,L3,L5,L7の各部分に対応する部分の長さは、それぞれ、L1/f,L3/f,L5/f,L7/fである。画素線Fにおいて、画素線Aの長さL2,L4,L6の各部分に対応する部分の長さは、それぞれ、L2,L4,L6のままである。
図11に、画素線Aを例に以上で説明した変形縮小処理を原画像IMGO中の全画素線のそれぞれについて行った結果の例を示す。図11を参照すると、原画像IMGOは、補正縮小NGマスクMSK´が表すNGエリア(一点鎖線で囲んだ領域)を含むか否かによって、一辺の長さが原画像IMGOの主走査方向の幅WOである長方形の領域(エリア1,エリア2,エリア3)に分割される。エリア1,エリア3は、NGエリアを含まず、エリア2は、NGエリアを含む。原画像の各画素線について上述の変形縮小処理を行った結果の各エリア1、エリア2、エリア3の幅をそれぞれ、W1,W2,W3とする。エリア1及びエリア3は、NGエリアを含まないため、全体として主走査方向に1/f倍に縮小され、W1=W3=WO/f=(L1+L2+L3+L4+L5+L6+L7)/fとなる。NGエリアを含むエリア2については、図10を参照して説明したように、縮小されない部分(L2,L4,L6)と1/f倍に縮小される部分(L1,L3,L5,L7)とを含むため、W2=L2+L4+L6+(L1+L3+L5+L7)/fとなる。よって、W1=W3<W2である。このままでは、W1又はW3とW2との間の差分に該当する領域(図11の破線で表す領域)には画素が存在しない。これらの領域については、例えば、背景色(この例では白色)の画素で補完する。あるいは、これらの領域に対応する画素線中の画素値の平均値を有する画素で補完してもよい。このように画素の補完処理を行うことで、幅W2を有する変形縮小後画像IMGM(図10参照)が生成される。
以上、変形縮小部166による変形縮小処理(図2のステップS8)の例を説明した。この例の変形縮小処理では、縮小処理(ステップS3)で情報欠落が生じた領域(NGエリア)については縮小せず、縮小処理で情報欠落が生じなかった領域(NGエリア以外の領域)については、当該縮小処理で用いられた方法及び縮小率と同じ方法及び縮小率を用いて縮小する。したがって、この例の変形縮小処理では、情報欠落は発生しない。
図2の説明に戻り、変形縮小処理(ステップS8)が終了すると、副走査方向について処理済みであるか否かを判定する(ステップS9)。処理済みでなければ、処理方向を副走査方向に設定し(ステップS10)、ステップS3以降の処理を行う。副走査方向について処理済みであれば、図2の例の手順の処理は終了する。
図12は、他の1つの実施形態の画像処理装置の概略構成の例を示すブロック図である。図12において、図1と同様の構成要素には同様の符号を付し、その詳細な説明を省略する。図12に例示する画像処理装置11の処理部17は、図1の例の画像処理装置10の処理部16の各構成要素に加えて、画像幅調整部168を備える。
画像幅調整部168は、変形縮小部166の変形縮小処理で情報欠落が生じない限度において、変形縮小後の画像の幅が目標の幅に近づくように、原画像中の各種の領域の縮小率又は縮小後の幅を決定する処理を行う。
画像幅調整部168は、画像幅算出部1680及び余白調整部1682を含む。画像幅算出部1680は、変形縮小部166による変形縮小を行った結果の画像の幅を算出する。例えば、画像幅算出部1680は、図11の例の幅W1,W2,W3の各値を算出する処理を行う。
余白調整部1682は、原画像中の余白を検出し、検出した余白について、変形縮小処理でNGエリア以外の領域の縮小に用いられる縮小率で縮小した場合よりも小さくなるように、検出した余白が余白の縮小率又は縮小後の幅を決定する処理を行う。
図13は、図12に例示する画像処理装置11の処理部17が行う処理の手順の例を示すフローチャートである。図13において、図2に例示する手順の処理と同様の処理を行う処理ステップには図2と同様の符号を付す。
図13を参照し、まず、処理部17は、原画像を取得し(ステップS1)、処理方向を主走査方向に設定する(ステップS2)。
次に、処理部17は、縮小率1/fを用いて補正縮小NGマスクを作成する(ステップS30)。縮小率1/fの値は、図2に例示する手順の処理と同様に、ユーザによって指定された値であってよいし、予め設定されて記憶部18に記憶された値であってもよい。ステップS30では、図2から図9を参照して説明したステップS3〜S7の処理と同様の処理によって補正縮小NGマスクが生成される。
ステップS40では、画像幅調整部168の画像幅算出部1680は、ステップS30の処理の結果として生成された補正縮小NGマスクに従って変形縮小部166が原画像を変形縮小した場合の変形縮小後の画像の幅を算出する。ここで、「画像の幅」とは、現在の処理方向の画像の大きさを意味する。画像幅算出部1680は、例えば、次の手順で画像幅を算出する。まず、画像幅算出部1680は、補正縮小NGマスクが表すNGエリアを含むか否かに従って、原画像の幅WOと同じ大きさの一辺を有する長方形の領域に、原画像を分割する。例えば図11の原画像IMGO及び補正縮小NGマスクの場合、原画像IMGOは、エリア1、エリア2、及びエリア3に分割される。次に、分割された領域それぞれから1つの画素線を選択し、補正縮小NGマスクに従って変形縮小処理を行った結果の各画素線の長さを算出する。この各画素線の長さは、分割された領域それぞれの変形縮小後の幅となる。図11の例では、原画像IMGOのエリア1、エリア2、エリア3それぞれの変形縮小後の幅W1,W2,W3が算出される。
ステップS42では、画像幅調整部168は、画像幅算出部1680がステップS40で求めた幅の最大値が原画像の幅WOの1/f倍以下であるか否かを判定する。図11の例では、ステップS40で算出される幅W1,W2,W3のうち最大値を有する幅W2が原画像の幅WOの1/f倍以下であるか否かを判定する。
変形縮小後の画像幅の最大値が原画像の幅の1/f倍を超えている場合、画像幅調整処理(ステップS44)に進む。
図14は、画像幅調整処理の詳細手順の一例を示すフローチャートである。
図14を参照し、まず、余白調整部1682は、変形縮小後の幅が最大となる原画像中の領域を対象エリアとする。例えば、図11の例のエリア2が対象エリアとなる。そして、対象エリアにおいて、補正縮小NGマスクが表すNGエリア以外の領域の中から、処理方向と垂直な方向の対象エリアの辺と同じ長さの一辺を有する長方形の余白を検出する(ステップS440)。ここで、「余白」とは、原画像の背景色の画素のみからなる部分を意味する。また、以下では、図14のステップS440で検出される余白を「縦余白」と呼ぶこともある。
図15を参照し、灰色の長方形bl1,bl2,bl3,bl4は、図11の例の原画像IMGOについてステップS440の処理を行った場合に検出される縦余白の例である。縦余白bl1,bl2,bl3,bl4は、それぞれ、エリア2の副走査方向(主走査方向Mに対して垂直な方向)の辺と同じ長さの一辺を有する。
再び図14を参照し、縦余白を検出した後、余白調整部1682は、検出した縦余白のそれぞれについて、変形縮小処理の後の幅が元の幅の1/f倍よりも小さくなるように縦余白の幅を調整する(ステップS442)。例えば、補正縮小NGマスクにおいて各縦余白に対応する領域について、変形縮小後の幅が1画素幅となるように変形縮小処理を行うよう指示する情報と関連付ける。あるいは、例えば複数の縦余白を検出した場合であれば、検出した縦余白同士の幅の比を維持した上で、元の縦余白の幅の1/f倍よりも小さい幅になるように変形縮小処理を行うよう指示する情報と、補正縮小NGマスクにおいて各縦余白に対応する領域と、を関連付けてもよい。
次に、ステップS444では、画像幅算出部1680は、ステップS422で調整された変形縮小後の縦余白の幅を用いて、変形縮小後の対象エリアの幅を算出する。例えば、図11のエリア2の例の場合、図15の各縦余白bl1,bl2,bl3,bl4の幅を1画素幅とし、NGエリアに該当する部分の幅をL2,L4,L6のまま、NGエリア及び縦余白のいずれにも該当しない部分の幅を元の幅の1/f倍として、変形縮小後のエリア2の幅を算出する。
次に、ステップS444で算出した対象エリアの幅が原画像の幅WOの1/f以下であるか否かを判定し(ステップS446)、目標の画像幅(WO/f)以下であれば処理を終了し、目標の画像幅(WO/f)を超えていればステップS448へ進む。
ステップS448では、処理部17は、出力部20を介して、縦余白の幅を調整した上で変形縮小処理を行ったとしても変形縮小後の画像の幅が目標の画像幅を超える旨を表す警告情報を出力する。例えば、この警告情報を表示装置(図示しない)に対して出力して表示させることで、縦余白調整済みの変形縮小後の画像幅が目標の画像幅を超える旨をユーザに知らせることができる。
ステップS450では、現在の縮小率1/fよりも大きな縮小率1/(f−α)を用いて、原画像について補正縮小NGマスクを作成する処理を再度実行するか否かを決定する。つまり、縮小部160において現在の縮小率1/fで縮小するよりも緩やかに原画像を縮小して補正縮小NGマスクを作成する処理を行うか否かを決定する。ここで、αの値は、例えば、図13の処理の開始時のfの値をfSTとして、次の式:
1/fST<1/(fST−α)<1.0
を満たすように、0<α<fST−1.0の範囲の定数に予め設定しておく。補正縮小NGマスク作成処理を再度実行することを決定すると、ステップS452でfの値をf−αに設定(つまり、縮小率1/fを1/(f−α)に設定)し、図13のステップS30に戻り、ステップS30以下の処理を再び行う。補正縮小NGマスク作成処理を再度実行しないことを決定すると、画像幅調整処理は終了する。
ステップS450の決定は、例えば、ユーザの指示に従って行う。例えば、ステップS448において、上述の警告情報とともに、新たな縮小率1/(f−α)を用いた補正縮小NGマスクの作成処理の実行をユーザが望むか否かを入力するようユーザに促す情報を表示装置に表示させ、ユーザが実行を望む旨を表す入力を受けた場合にステップS450からステップS452に進み、ユーザが実行を望まない旨を表す入力を受けた場合に処理を終了する。あるいは、例えば、ステップS450において、1/(f−α)が所定の値の範囲内あればYESに進み、所定の値の範囲外であればNOに進むようにしてもよい。この値の範囲は、例えば、縮小部160の縮小処理で用いる縮小率として適切な値の範囲0<1/(f−α)<1.0に設定しておく。ユーザが実行を望む旨を表す入力を受けたこと、及び、1/(f−α)の値が所定の範囲内であることの両方の条件が満たされる場合にステップS450でYESに進むようにしてもよい。
図13の説明に戻り、ステップS8では、補正縮小NGマスクに従って変形縮小を行う。画像幅調整処理により、補正縮小NGマスクにおいて、縦余白の縮小に関する指示情報が設定されていれば、変形縮小部166は、その指示情報に従って変形縮小後の縦余白の幅を決定する。補正縮小NGマスクの縦余白以外の領域については、NGマスク値のON又はOFFに応じて、図10及び図11を参照して説明した図2のステップS8の変形縮小処理と同様の処理を行う。
変形縮小処理の後、副走査方向について処理済みでなければ(ステップS9でNO)、処理方向を副走査方向に設定し(ステップS10)て、副走査方向についてステップS30以降の処理を行う。副走査方向について処理済みであれば(ステップS9でYES)、処理は終了する。
以上、図13及び図14に例示する手順の処理によると、変形縮小後の画像は、情報欠落が生じない限度において、図13の処理の開始時に設定されていた縮小率1/fで原画像を縮小した場合の幅に最も近い幅を有するものとなる。例えば、ユーザが指定した縮小率1/fを用いて図13の処理を開始した場合、情報欠落が生じない限度内で、ユーザの希望する画像サイズに最も近いサイズの変形縮小後画像が得られる。また例えば、情報欠落が生じることが確実である縮小率1/fを用いて図13の処理を開始した場合、情報欠落が生じない最小サイズの変形縮小後画像が得られる。
以下、図14、図16、及び図17を参照し、画像幅調整処理(図13のステップS44)の詳細手順の他の一例を説明する。
本例の画像幅調整処理において、画像幅調整部168は、まず、図14を参照して説明したステップS440〜ステップS448の処理を行う。縦余白の幅の調整後の対象エリアの変形縮小後の幅が目標の幅(WO/f)を超えている場合(ステップS446でNO)、その旨を表す警告情報を出力し(ステップS448)、画像幅調整部168は、図16に例示する手順の処理を開始する。
図16を参照し、まずステップS460で、目標縮小率1/fTに現在の縮小率1/fの値を代入する。次に、対象エリアに含まれるNGエリアの中から1つのNGエリアを選択し(ステップS462)、選択したNGエリアについて可能縮小率1/fminを決定する(ステップS464)。可能縮小率1/fminは、処理対象の画像について縮小部160の縮小処理を行った場合に情報欠落が生じない縮小率のうち、縮小後の画像の大きさが最小となる縮小率である。
可能縮小率決定処理(ステップS464)が開始されると、画像幅調整部168は、図17に例示する手順の処理を開始する。
図17を参照し、ステップS600で、0<1/(f−α)<1.0であるか否かが判定される。ここで、αの値は、例えば、図14を参照して説明したステップS450,S452の処理におけるαと同様、0<α<fST−1の範囲(fSTは、図13の処理の開始時のfの値)の定数に設定しておく。
ステップS600の判定でYESに進むと、ステップS602で、新たなfの値としてf−αが設定される。次に、図16のステップS462で選択されたNGエリアについて、縮小率1/fを用いて、補正縮小NGマスク作成処理(ステップS30)が行われる。ステップS30では、選択されたNGエリアを原画像として、縮小率1/fを用いて、図2から図9を参照して説明したステップS3〜ステップS7の処理を実行することで、選択されたNGエリアの補正縮小NGマスクが作成される。
ステップS30の後、選択されたNGエリアについて作成された補正縮小NGマスク中にNGエリアが存在するか否かが判定される(ステップS604)。ステップS604で、補正縮小NGマスク中にNGエリアが存在すると判定されると、処理はステップS600に戻り、ステップS600以下の処理を繰り返す。ステップS604で、補正縮小NGマスク中にNGエリアが存在しないと判定されると、fminの値として現在のfの値を設定し(ステップS606)、可能縮小率1/fminの値が決定され、図17の処理は終了する。
ステップS30で用いられる縮小率1/fの値は、選択したNGエリアに関する前回の補正縮小NGマスク作成処理に用いられた縮小率の値よりも大きい。したがって、ステップS604では、選択したNGエリアについて、ある縮小率を用いて縮小すると情報欠落が生じる場合に、より緩やかな縮小率で縮小した場合に情報欠落が生じるか否かを判定していると言える。
ステップS600,S602,S604を含む処理ループが繰り返されると、1/(f−α)の値が0<1/(f−α)<1.0の範囲外となる場合がある。この場合、ステップS600の判定でNOに進んでfの値として1.0が設定され(ステップS608)、ステップS606に進み、可能縮小率1/fminの値は1.0に決定される。
なお、図13のステップS30で原画像について作成された補正縮小NGマスクにおいて、図17の例の可能縮小率決定処理の対象となったNGエリアについて、決定された可能縮小率1/fminで変形縮小処理を行うことを指示する情報が設定される。
図16を再び参照し、可能縮小率決定処理(ステップS464,図17)が終了すると、ステップS466で、画像幅算出部1680は、変形縮小後の対象エリアの幅を算出する。ステップS466では、すでに可能縮小率決定処理を行ったNGエリアについては決定された可能縮小率1/fminで縮小し、可能縮小率決定処理を未だ行っていないNGエリアについては縮小率1.0で縮小して変形縮小を行った場合の対象エリアの幅が算出される。ステップS466では、さらに、図14のステップS442の縦余白調整処理の結果も考慮して対象エリアの幅が算出される。
ステップS466で算出した対象エリアの幅が原画像の幅WOの1/fT倍以下であれば、画像幅調整処理は終了し、算出した対象エリアの幅が目標の画像幅WO/fTを越えていれば、ステップS470に進む。ステップS470では、対象エリアに含まれるすべてのNGエリアについて処理済みであるか否かを判定する。未処理のNGエリアが存在すれば、ステップS474に進んでfの値としてfTの値を設定し、ステップS462に戻り、未処理のNGエリアを1つ選択して、ステップS464以下の処理を繰り返す。
ステップS470で、対象エリアに含まれるすべてのNGエリアについて処理済みであると判定すると、ステップS472で、画像幅調整部168は、出力部20を介して、対象エリア中のすべてのNGエリアを可能な限り縮小したとしても変形縮小後の画像幅が目標の画像幅を超える旨を表す情報を出力し、画像幅調整処理を終了する。
以上、図14、図16、及び図17を参照して説明した画像幅調整処理の例では、原画像においてNGエリアが存在することから変形縮小後の画像幅が目標画像幅を超える場合に、各NGエリアに関してより大きな縮小率を用いて縮小NGマスクを作成することで、当該NGエリアについて情報欠落が生じない可能縮小率を求める。そして、変形縮小処理(図13のステップS8)では、各NGエリアについて、縮小率1.0を用いる代わりに当該NGエリアの可能縮小率を用いて縮小する。縦余白の幅の調整(図14のステップS442)と各NGエリアの可能縮小率による縮小とを共に行うことで、情報欠落を生じることなく目標の画像幅以下の幅を有する変形縮小後画像が得られる場合がある。
また、以上では、図17の可能縮小率決定処理を画像幅調整処理の手順の一部として説明したが、原画像を処理対象として図17の可能縮小率決定処理を行ってもよい。原画像について図17の可能縮小率決定処理を行うと、原画像の可能縮小率を求めることができる。
また、図12の例の画像処理装置11の処理部17は、原画像の補正縮小NGマスクに含まれる各NGエリアについて、当該NGエリアを原画像として、上述の2つの例の画像幅調整処理のいずれかを含む図13の例の手順の処理を再帰的に実行することもできる。
以上で説明した各種の実施形態の変形縮小処理の例では、補正縮小NGマスクに従って、原画像中の異なる領域について異なる縮小率で縮小処理が行われる。したがって、上述の各種の例の変形縮小処理では、画像中の線の長さや太さなどが、原画像中の領域によって異なる比率で変換される場合がある。しかしながら、原画像における線と線との間の連結関係及び原画像中の線の存在は変形縮小処理後の画像においても保存される。したがって、例えば電気回路図など、要素同士の連結関係及び線の存在が図面に意味を与える画像に対して上述の各種の例の変形縮小処理を行うと、図面の表す情報の意味を変更することなく画像は縮小される。
以上で説明した実施形態の画像処理装置10,11は、典型的には、汎用のコンピュータにて上述の電子文書処理装置の各部の機能又は処理内容を記述したプログラムを実行することにより実現される。コンピュータは、例えば、ハードウエアとして、図18に示すように、CPU(中央演算装置)60、メモリ(一次記憶)62、各種I/O(入出力)インタフェース64などがバス66を介して接続された回路構成を有する。また、そのバス66に対し、例えばI/Oインタフェース64経由で、キーボードやマウスなどの入力装置68、及び、CRT(Cathode Ray Tube)や液晶ディスプレイなどの表示装置70が接続される。また、バス66には、I/Oインタフェース64を介して、HDD(ハードディスクドライブ)72や、CD、DVD、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブ74が接続される。このようなドライブ72,74は、メモリに対する外部記憶装置として機能する。実施形態の処理内容が記述されたプログラムがCDやDVDなどの記録媒体を経由して、又はネットワーク経由で、HDD72などの固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがメモリ62に読み出されCPU60により実行されることにより、上述の各種の実施形態の処理が実現される。
10,11 画像処理装置、12 画像入力部、14 ユーザ入力部、16,17 処理部、18 記憶部、20 出力部、62 メモリ、64 インタフェース、66 バス、68 入力装置、70 表示装置、72 HDD、74 ディスクドライブ、160 縮小部、162 拡大部、164 縮小NGマスク作成部、166 変形縮小部、168 画像幅調整部、1640 NGエリア判定部、1642 縮小NGマスク補正部、1680 画像幅算出部、1682 余白調整部。