(A)第1の実施形態
以下、本発明による画像処理装置及び方法、並びに、画像形成装置の第1の実施形態を、図面を参照しながら詳述する。
(A−1)第1の実施形態の構成
図1(a)は、第1の実施形態の画像形成装置1の機能的構成について示したブロック図である。図1(b)は、第1の実施形態の画像形成装置1を構成するブロック拡大・縮小部120の機能的構成について示したブロック図である。
画像形成装置1は、画像入力部10、前フィルタ処理部20、拡大・縮小処理部100、後フィルタ処理部30、画像出力部50、及び画像メモリ60を有している。
なお、画像形成装置1では、画像入力部10及び画像出力部50を除いた構成要素(前フィルタ処理部20、拡大・縮小処理部100、後フィルタ処理部30及び画像メモリ60)によりこの実施形態の画像処理装置を構成することができる。また、画像形成装置1では、少なくとも、拡大・縮小処理部100については、ハードウェア(例えば、ASIC等の集積回路)により構成されているものとする。
画像入力部10は、当該画像形成装置1で処理する画像の入力を受付ける機能を担っている。画像入力部10が、入力画像を保持する方法については限定されないものであるが、例えば、スキャナやホストPC等の外部装置から、ネットワークや各種インタフェース(例えば、USB等)を介して入力される画像を取得するようにしてもよい。そして、画像入力部10は取得した画像のデータを画像メモリ60に格納する。図1では、画像入力部10が入力を受付けた画像を画像G101と図示している。
前フィルタ処理手段としての前フィルタ処理部20は、画像G101に対して、拡大・縮小処理部100の処理前に行われるフィルタ処理を行うものである。前フィルタ処理部20は、画像メモリ60に格納された画像G101のデータに対して、フィルタ処理を行い、処理後の画像データを画像メモリ60に書き込む。前フィルタ処理部20は、例えば、ガウシアンフィルタや原稿のスクリーン箇所等を判定する判定処理で構成され、入力原稿と出力原稿のスクリーン干渉によるモアレ発生を抑えるためのフィルタ処理を行う。図1では、前フィルタ処理部20が処理した後の画像を画像G102と図示している。
拡大・縮小処理部100は、前フィルタ処理部20で処理された画像G102について、拡大又は縮小の処理(サイズ変更処理)を行うものであり、ブロック読み出し部110、ブロック拡大・縮小部120、及びブロック書き出し部130を有している。図1では、拡大・縮小処理部100が処理した後の画像を画像G103として図示している。
拡大・縮小処理部100が行う拡大・縮小に係る倍率(以下、「設定倍率」と呼ぶ)は、例えば、ユーザの操作により決定するようにしてもよいし、外部装置(例えば、スキャナやホストPC等)からの指示に基づいて決定するようにしてもよい。
ブロック画像読み出し手段としてのブロック読み出し部110は、前フィルタ処理部20で処理され、画像メモリ60に書き込まれた1ページの画像G102のデータを、水平(幅)方向(以下、「X方向」とも呼ぶ)および垂直(縦)方向(以下、「Y方向」とも呼ぶ)に複数に分割したブロック画像として順次読み出し、ブロック拡大・縮小部120に供給する。
図2は、ブロック読み出し部110で行われる画像のブロック単位の分割について示した説明図である。
図2で示すように、ブロック読み出し部110では、1ページの画像G102について、X方向にN個、Y方向にM個に分割されたブロック画像がM×N個生成される。ブロック読み出し部110は、各ブロック画像を読み出す際に、左上の画素より順番にX方向にライン走査され順次読み出すものとする。具体的には、ブロック読み出し部110は、図2に示す左上のブロック画像(0、0)から(0、1)、・・・(0、N)、(1、0)、・・・(M、N)の順に読み出されるものとする。ブロック読み出し部110は、ブロック単位で画像の読み出しを行う際には、X方向の読み出し位置と、Y方向の読み出し位置を逐次変更して行う。
上述の通り、拡大・縮小処理部100では、画像G102をブロック画像単位で拡大・縮小の処理を行うが、単純に図2に示すように画像G102を分割して、拡大・縮小の処理を行うと、各ブロック画像の境界周辺の画質が劣化する(1ページ分の画像単位で処理した場合と異なる画素値となる)恐れがある。そのため、この実施形態のブロック読み出し部110は、拡大・縮小の処理を行う対象のブロック画像(図2に示すブロック画像)の周辺の画素も含めた画像を読み出すものとする。すなわち、拡大・縮小処理部100は、各画像ブロック画像について、隣接ブロックと重複部分を持つように読み出すものとする。ブロック読み出し部110の各ブロック画像の読み出し処理の具体例については、後述する動作説明で詳述する。
サイズ変更手段及びブロック管理手段としてのブロック拡大・縮小部120は、ブロック読み出し部110で読み出された各ブロック画像に対して任意倍率の拡大・縮小処理(サイズ変更処理)を行う。ブロック拡大・縮小部120は、X方向の拡大・縮小を行うX方向拡大・縮小部121とY方向の拡大・縮小を行うY方向拡大・縮小部122で構成され、入力されたブロック画像に対して最初にX方向の拡大・縮小を行い、次にY方向の拡大・縮小を行うものとする。
X方向拡大・縮小部121は、X方向拡大・縮小カウンタ121aと、X方向出力カウンタ121bを備えている。
X方向拡大・縮小部121は、入力ブロック画像を構成するX方向の任意の1ラインについて、出力ブロック画像のラインに変換する際に、X方向出力カウンタ121bを用いて、出力ブロック画像側の処理中の画素を管理する。そして、X方向拡大・縮小部121は、X方向拡大・縮小カウンタ121aを用いて、X方向出力カウンタ121bで示される画素と、入力ブロック画像に係るライン上の画素との相対的な位置関係を管理する。
X方向拡大・縮小部121のX方向拡大・縮小カウンタ121aの値は、ライン先頭(ブロック画像のライン先頭)で、ブロック画像毎にあらかじめ決定されたカウンタ初期値に設定される。そして、X方向拡大・縮小部121は、入力ブロック画像のラインを、X方向拡大・縮小カウンタ121aにしたがって拡大・縮小し、出力するライン(出力ブロック画像側のライン)の画素数をX方向出力カウンタ121bでカウントする。そして、X方向拡大・縮小部121は、X方向出力カウンタ121bによりあらかじめ決定された所定の値の範囲内の画素のみを出力することで、入力されたブロック画像をX方向に拡大・縮小する。そしてX方向拡大・縮小部121は、X方向に拡大・縮小処理されたブロック画像をY方向拡大・縮小部122に入力する。
Y方向拡大・縮小部122は、X方向拡大・縮小部121と同様、Y方向拡大・縮小カウンタ122aと、Y方向出力カウンタ122bを備えている。
Y方向拡大・縮小部122のY方向拡大・縮小カウンタ122aの値は、ライン先頭(ブロック画像のライン先頭)で、ブロック画像毎にあらかじめ決定されたカウンタ初期値に設定される。そして、Y方向拡大・縮小部122は、入力ブロック画像のラインを、Y方向拡大・縮小カウンタ122aにしたがって拡大・縮小し、出力する画素数(出力ブロック画像側のライン数)を、Y方向出力カウンタ122bでカウントする。そして、Y方向拡大・縮小部122は、Y方向出力カウンタ122bによりあらかじめ決定された所定の値の範囲内の画素(ライン)のみを出力することで、入力されたブロック画像をY方向に拡大・縮小し、出力ブロック画像としてブロック書き出し部130へ供給する。
なお、Y方向拡大・縮小部122は、単純縮小以外の拡大・縮小方法(例えば、補間拡大・縮小法)により、拡大・縮小処理を行う場合には、1ブロック画像分のメモリ(ラインメモリ)を複数備える必要がある。
サイズ変更画像生成手段としてのブロック書き出し部130は、ブロック拡大・縮小部120で拡大・縮小が行われたブロック画像を画像メモリ60(画像G103の領域)に順次書き込む。ブロック書き出し部130へ入力されるブロック画像は、前段の処理(ブロック拡大・縮小部120の処理)により、ブロック間で重複する画素がカットされる。
また、各ブロックの幅と高さは一定となっているので、ブロック書き出し部120は、X方向とY方向に一定の間隔でブロック画像を画像メモリ60に書き出すことで1ページ分の画像G103のデータを作成する。
後フィルタ処理手段としての後フィルタ処理部30は、拡大・縮小処理部100の処理後に行われるフィルタ処理を行うものであり、画像メモリ60から拡大・縮小部10によって入力された画像G103のデータを読み出してフィルタ処理を行い、処理後の画像のデータを画像メモリ60に書き込む。後フィルタ処理部30は、例えば、色変換処理やエッジ強調処理等で構成され、画像データをCMYKの4色に変換し、原稿中の文字等をくっきりだすためにエッジ強調を行うなどのフィルタ処理を行う。図1では、後フィルタ処理部30が処理した後の画像をG104として図示している。
画像出力部50は、後フィルタ処理部30が生成した画像G104のデータを画像メモリ60より読み出して出力する機能を担っている。画像出力部50による出力手段は限定されないものであり、例えば、画像G104を、電子写真式の画像形成部(印刷部)により記録媒体(印刷用紙等)に印刷出力(画像形成)するようにしてもよい。
なお、この実施形態では、説明を簡易にするため、画像形成装置1で処理される各画像(G101〜G104)を構成する各画素の画素値は1つの成分(例えば、明度)で示される画像であるものとして説明するが、画像形成装置1で処理される各画像の成分の数は限定されないものである。例えば、画像形成装置1で処理される各画像を、R、G、Bの3つの成分で示される場合、3つの成分画像についてそれぞれ拡大・縮小処理等を行い、画像出力部50で3つの成分画像に基づいた出力を行うようにしてもよい。
(A−2)第1の実施形態の動作
次に、以上のような構成を有する第1の実施形態の画像形成装置1の動作(実施形態の画像処理方法)を説明する。
(A−2−1)画像形成装置1全体の動作の概要
図3は、画像形成装置1の全体の動作について示したフローチャートである。
まず、画像形成装置1では、画像入力部10に画像データが入力されて、画像メモリ60に、画像G101として書き込まれたものとする。そして、拡大・縮小処理部100に設定倍率がセットされたものとする(S101)。
ここでは、画像G101は、幅7680画素、高さ5120画素の画像であるものとする。またここでは、拡大・縮小処理部100に設定倍率として133%(133/100で拡大)が設定された場合と、41%(41/100で縮小)が設定された場合とで、場合分けして説明する。
次に、前フィルタ処理部20により画像G101に対して前フィルタ処理が実行され、画像メモリ60に処理後の画像G102が書き込まれる(S102)。なお、前フィルタ処理部20の処理では画像サイズの変化はないものとする(すなわち、画像G102のサイズは、画像G101と同じであるものとする)。
そして、拡大・縮小処理部100(ブロック拡大・縮小部120)により、拡大・縮小処理を行う画像G102のサイズと、設定倍率に基づいて、拡大・縮小に係る各パラメータ算出等の準備が行われる(S103)。
そして、拡大・縮小処理部100により、ブロック単位で、読み出し処理、拡大・縮小処理、及び書き出し処理が実行され、画像メモリ60に処理後の画像G103が書き込まれる(S104)。
そして、後フィルタ処理部30により、拡大・縮小処理後の画像G103について後フィルタ処理が実行され、画像メモリ60に処理後の画像G104が書き込まれる(S105)。なお、後フィルタ処理部30の処理では画像サイズの変化はないものとする(すなわち、画像G104のサイズは、画像G103と同じであるものとする)。
そして、画像出力部50により、後フィルタ処理後の画像G104が出力されることになる(S106)。
(A−2−2)拡大・縮小に係る各パラメータ算出(ステップS103)
次に、上述のステップS103において、ブロック拡大・縮小部120で行われるパラメータ算出処理の詳細について、図4のフローチャートを用いて説明する。
まず、ブロック拡大・縮小部120は、画像G102と設定倍率に基づいて、拡大・縮小処理後に出力する画像G103のサイズ(1ページの出力画像の幅と高さ)を算出する(S201)。具体的には、ブロック拡大・縮小部120は、以下の(1)、(2)式により、画像G103のサイズを算出することができる。
なお、以下の(1)、(2)式において、XOは出力する画像G103の幅(X方向)の画素数である。また、XIは、処理対象の画像G102の幅(X方向)の画素数である。さらにYOは出力する画像G103の高さ(Y方向)の画素数である。さらにまた、YIは、処理対象の画像G102の高さ(Y方向)の画素数である。また、xratio、yratioは、それぞれX方向、Y方向に係る設定倍率の分子である。さらに、xbase、ybaseは、それぞれX方向、Y方向の設定倍率の分母である。
XO=(XI)×(xratio)/(xbase)…(1)
YO=(YI)×(yratio)/(ybase)…(2)
なお、ブロック拡大・縮小部120は、上記の(1)、(2)式の計算を行う際に、小数点以下の値が発生する場合は小数点以下を切り捨てるものとする。なお、以下に記載の数式は特に断りなく小数点以下を切り捨てて演算を行うものとして説明する。
ここでの例では、上述の通り、入力する画像G102のサイズは、幅7680、高さ5120であり、設定倍率は133%である。したがって、出力する画像G103の幅XOは、上記の(1)式により、7680×133/100=10214となる。また、出力する画像G103の高さYOは、上記の(2)式により、5120×133/100=6809となる。また、設定倍率を41%とした場合、出力する画像G103の幅XOは7680×41/100=3148、高さYOは、5120×41/100=2099となる。
次に、ブロック拡大・縮小部120は、ブロック拡大・縮小部120に入力される入力ブロック画像のサイズと、ブロック拡大・縮小部120から出力される出力ブロック画像のサイズを算出する(S102)。言い換えると、第1の実施形態では、入力ブロック画像のサイズは、ブロック読み出し部110が画像G102から読み出すブロック画像のサイズとなる。また、第1の実施形態では、出力ブロック画像のサイズは、ブロック書き出し部130が画像G103に書き出すブロック画像のサイズとなる。
ブロック拡大・縮小部120が算出する、入力ブロック画像及び出力ブロック画像のサイズは、設定倍率と、拡大・縮小処理部100を構成する各処理部で処理可能なブロック画像サイズの上限によって変動する。上述のブロック画像サイズ(ブロック画像の幅又は高さ)の上限は、例えば、ブロック拡大・縮小部120が備えるメモリ(例えば、ラインメモリ)等のリソースで保持可能な画素数が上限となる。例えば、ブロック拡大・縮小部120は、各画像ブロックについて、X方向及びY方向のライン単位で処理するため、ブロック拡大・縮小部120が備えるメモリに格納可能な画素数が、処理するブロック画像の幅及び高さの上限となる。そして、ここでは、ブロック拡大・縮小部120のラインメモリで保持可能な画素数は、256であるものとする。また、以下では、各ブロック画像の幅と高さは同一の画素数であるものとするが、各ブロック画像の幅と高さの比率は限定されないものである。
以上のように、ブロック拡大・縮小部120は、拡大・縮小処理部100がブロック画像単位で処理する際の処理上限を超えないように、拡大・縮小処理部100に入力するブロック画像のサイズを決定する。
以下では、ブロック拡大・縮小部120で処理する出力ブロック画像について、幅及び高さの上限をいずれも256画素とする。したがって、ブロック拡大・縮小部120では、入力ブロック画像について拡大処理をする場合、拡大処理後に幅及び高さが256を超えないように、入力ブロック画像のサイズを決定する必要がある。
具体的には、ブロック拡大・縮小部120は、例えば、以下のような処理により、適切な入力ブロック画像及び出力ブロック画像のサイズを決定することができる。
まず、ブロック拡大・縮小部120が出力するブロック画像サイズは上述の条件であれば幅256、高さ256となる。上述の幅、高さは、拡大・縮小部120のX方向出力カウンタ121bとY方向出力カウンタ122bのカウント上限の値として用いる。したがって、ブロック読み出し部110で読み出すブロック画像サイズは、以下の(3)、(4)式で決定することができる。
以下の(3)、(4)式において、inbw、inbhはブロック拡大・縮小部120に入力されるブロック画像の幅、高さである。また、outbw、outbhはブロック拡大・縮小部120が出力するブロック画像の幅、高さである。さらに、nulwR、nulhDはブロック拡大・縮小部120での拡大・縮小時にブロック画像の右端と下端に発生する無効画素(隣接するブロック画像と重複する部分の領域)の幅、高さを表す。ブロック拡大・縮小部120が行う拡大・縮小に補間拡大・縮小法が用いられる場合、nulwR、nulhDには、例えば、「1」を適用することができる。
inbw=(outbw×xbase+xratio−1)
/xratio+nulwR …(3)
inbh=(outbh×ybase+yratio−1)
/yratio+nulhD …(4)
ここでの例では、上述の通り、入力する画像G102のサイズは、幅7680、高さ5120であり、設定倍率は133%である。したがって、入力ブロック画像の幅及び高さは194となる。また、設定倍率を41%とした場合、入力ブロック画像の幅及び高さは626となる。
次に、ブロック拡大・縮小部120は、ステップS202で算出した入力ブロック画像のサイズに基づいて、画像G102に対するブロック画像の分割数を算出する(S203)。
具体的には、ブロック拡大・縮小部120は、以下の(5)、(6)式により、画像G102に対するX方向およびY方向の分割数を算出することができる。
(X方向分割数)=(XO−1)/(outbw)+1 …(5)
(Y方向分割数)=(YO−1)/(outbh)+1 …(6)
ここでの例では、上述の通り、入力する画像G102のサイズは、幅7680、高さ5120である。したがって、設定倍率が133%(133/100)の場合、入力ブロック画像の幅及び高さは194であるため、X方向の分割数は40、Y方向の分割数は27となる。また、設定倍率を41%(41/100)とした場合、入力ブロック画像の幅及び高さは626であるため、X方向の分割数は13、Y方向の分割数は9となる。
そして、次に、ブロック拡大・縮小部120は、ブロック画像ごとに、X方向拡大・縮小カウンタ121a、及びY方向拡大・縮小カウンタ122aの初期値と、ブロック読み出し部110が読み出す各ブロック画像のX方向とY方向の読み出し位置を算出する(S204)。Y方向拡大・縮小カウンタ122aの初期値、Y方向拡大・縮小カウンタ122aの初期値、X方向の読み出し位置、及びY方向の読み出し位置はそれぞれ以下の(7)〜(14)式で算出することができる。
以下の(7)〜(14)式において、xno、ynoは、それぞれX方向のブロック番号、Y方向のブロック番号を表す。また、xcnt0[?]、ycnt0[?]は、それぞれ、X方向のブロック番号に対応するX方向拡大・縮小カウンタ121aの初期値、Y方向のブロック番号に対応するY方向拡大・縮小カウンタ122aの初期値をあらわす。
なお、上述の「?」は任意のブロック番号を表すものである(以下同様)。さらに、xpoS0[?]、ypoS0[?]は、それぞれ、X方向のブロック番号に対応するX方向の読み出し位置、Y方向のブロック番号に対応するY方向の読み出し位置をあらわす。さらにまた、outbw、outbhは、上述のステップS202で算出した、出力ブロック画像の幅、高さである。また、以下の(7)〜(14)式における「%」は剰余演算を表す演算子である。ブロック拡大・縮小部120は、以下の(7)〜(14)式を用いて、X方向であれば左端のブロックから順番に、Y方向であれば最上段のブロックから順番に拡大・縮小カウンタの初期値と読み出し位置を算出する。
[X方向の拡大・縮小カウンタの算出式]
xcnt0[0]=0 …(7)
xcnt0[xno]=
(outbw×xbase+xcnt0[xno−1])%xratio…(8)[Y方向の拡大・縮小カウンタの算出式]
ycnt0[0]=0…(9)
ycnt0[yno]=
(outbh×ybase+ycnt0[yno−1])%yratio…(10)
[X方向の読み出し位置]
xpoS0[0]=0 …(11)
xpoS0[xno]=xpoS0[xno−1]
+(outbw×xbase+xcnt0[xno−1])/xratio…(12)
[Y方向の読み出し位置]
ypos0[0]=0 …(13)
ypos0[yno]=ypoS0[yno−1]
+(outbh×ybase+ycnt0[yno−1])/yratio…(14)
以上のように、ブロック拡大・縮小部120では、拡大・縮小に係る各パラメータが算出される。
(A−2−3)ブロック読み出し部110による入力ブロック画像の読み出し処理
次に、上述のステップS104において、ブロック読み出し部110で行われる入力ブロックの読み出し処理の詳細について、図5を用いて説明する。
図5は、ブロック読み出し部110が、上述のステップS103で決定したパラメータに従って、拡大・縮小処理部100に入力される画像G102を、入力ブロック単位で読み出す場合の処理について示した説明図である。なお、図5では、入力する画像G102のサイズは、幅7680、高さ5120、設定倍率が133%の場合について示している。
図5(a)で示されるように、ブロック読み出し部110で読み出される入力ブロック画像は、隣接する入力ブロック画像と、重複部分を持つように読み出される。図5(a)では、入力される画像G102の最も左の画素のX方向の位置を0、最も上の画素のY方向の位置を0として表している。そして、ブロック読み出し部110が分割する入力ブロック画像のX方向の読み出し開始位置についてはX方向のブロック番号0、1、2、3、4、・・・に対応して、0、192、384、577、769、・・・となる。また、ブロック読み出し部110が分割する入力ブロック画像のY方向の読み出し開始位置については、Y方向のブロック番号0、1、・・・に対応して、0、192、・・・となる。例えば、X方向のブロック番号が2、Y方向のブロック番号が1の入力ブロック画像であれば、X方向とY方向の読み出し位置は(384、192)になる。また、読み出される各入力ブロック画像のサイズは、全ての入力ブロック画像で共通である(図5(b)の例では、幅194×高さ194)。そして、ブロック読み出し部110は、各入力ブロック画像について、各入力ブロック画像のX方向とY方向のブロック番号にしたがって、X方向とY方向の読み出し位置を変更しながら読み出し、読み出した入力ブロック画像をブロック拡大・縮小部120に供給する。
(A−2−4)ブロック拡大・縮小部120による拡大・縮小処理
次に、上述のステップS104において、ブロック拡大・縮小部120で行われる各入力ブロック画像に対する拡大・縮小処理について説明する。
図6は、ブロック拡大・縮小部120で行われる各入力ブロック画像に対する拡大・縮小処理の例について示した説明図である。図6では、図5に示す入力ブロック画像(幅194×高さ194)について、設定倍率を133%とする拡大・縮小処理が行われ、出力ブロック画像(幅256×高さ256)に変換される場合の例について示している。
まず、ブロック拡大・縮小部120では、図6(a)に示す入力ブロック画像(幅194×高さ194)について、X方向拡大・縮小部121により、X方向に拡大されたブロック画像(ブロック画像サイズは幅256×高さ194)が生成される(図6(b)参照)。
そして、ブロック拡大・縮小部120では、X方向について拡大処理されたブロック画像(図6(b)に示す画像ブロック)について、Y方向拡大・縮小部122により、Y方向に拡大されたブロック画像(ブロック画像サイズは幅256×高さ256)が生成される(図6(c)参照)。そして、ブロック拡大・縮小部120では、Y方向拡大・縮小部122により処理されたブロック画像が、出力ブロック画像として、ブロック書き出し部130に供給される。
次に、X方向拡大・縮小部121の処理の詳細について説明する。
上述のX方向拡大・縮小部121による処理では、X方向拡大・縮小カウンタ121aが、各ブロック画像のライン先頭で、当該ブロック画像に係るX方向のブロック番号に対応する拡大・縮小カウンタの初期値(xcnt0[xno])に設定される。例えば、X方向のブロック番号が2であれば128に設定される。上述の拡大・縮小カウンタにしたがってライン毎に拡大処理が行われ、X方向出力カウンタ121bが所定の値(例では256)になるまで拡大して出力される。また、図6(d)に示すように、X方向の拡大・縮小処理においては、ブロック画像右端に余分な画素(無効画素)がある場合は無視(除外)される。
次に、Y方向拡大・縮小部122の処理の詳細について説明する。
上述のY方向拡大・縮小部122による処理では、Y方向拡大・縮小カウンタ122aが各ブロック画像の先頭ラインで、当該ブロック画像に係るY方向のブロック番号に対応する拡大・縮小カウンタの初期値(ycnt0[yno])に設定される。例えば、Y方向のブロック番号が1であれば64に設定される。上述の拡大・縮小カウンタにしたがって、ライン毎に拡大処理が行われ、出力カウンタが所定の値(例では256)になるまで拡大して出力する。また、図6(e)に示すように、X方向の拡大・縮小処理においては、ブロック下端に余分な画素(無効画素)がある場合は無視(除外)される。
そして、上述のX方向拡大・縮小部121による1ライン分の拡大・縮小処理は、具体的には、図8のようなフローチャートにより表すことができる。Y方向拡大・縮小部122の処理についても、処理対象となるラインの方向が異なるだけで、X方向拡大・縮小部121とほぼ同様の処理を適用することができるため、フローチャートを用いた説明については省略する。
図8において、xocntはX方向出力カウンタ121b、xcntはX方向拡大・縮小カウンタ121a、xcnt0は処理対象のブロック画像に係るX方向拡大・縮小カウンタ121aの初期値を表すものとする。また、図8において、xicntは、参照する入力ブロック画像側のX方向のライン上の位置(画素)を管理するカウンタである。さらに、図8において、vo[xocnt]は、出力ブロック画像側のX方向のライン上で、xocntの位置の画素値(左端から数えてxocnt番目の画素の画素値)を示している。
まず、X方向拡大・縮小部121は、入力ブロック画像からX方向の1ライン分の画素値を抽出したものとする。そして、X方向拡大・縮小部121は、各変数の初期化(xocnt=0、xcnt=xcnt0、xicnt=0)を行う(S301)。
そして、X方向拡大・縮小部121は、xcnt(拡大・縮小カウンタの値)がxratio(設定倍率の分子の値)より小さいか否かを判定する。X方向拡大・縮小部121は、xcntがxratioよりも小さい場合は、後述するステップS303の処理から動作し、そうでない場合には、後述するステップS305の処理から動作する。
上述のステップS302で、xcntがxratioよりも小さいと判定された場合は、X方向拡大・縮小部121は、出力画素の画素値vo[xocnt]を求めて、xocntをインクリメント(1加算)し、さらに、xcntにxbaseを加算する処理を行う(S303)。
ここで、出力画素の画素値vo[xocnt]は、例えば、補間拡大・縮小法であれば、以下の(15)式により求めることができる。なお、以下の(15)式において、vi[xicnt]は、入力ブロック画像側のX方向のライン上で、xicntの位置の画素値(左端から数えてxicnt番目の画素の画素値)を示している。また、vi[xicnt+1]は、入力ブロック側のX方向のライン上で、xicnt+1の位置の画素値(左端から数えてxicnt+1番目の画素の画素値)を示している。
vo[xocnt]=
((vi[xicnt])×(xratio−xcnt)
+(vi[xicnt+1])×(xcnt))/(xbase)…(15)
そして、X方向拡大・縮小部121は、xcntの値がxratio以上であるか否かを判定し、xcntの値がxratio以上の場合のみ、xcntからxratioを減算する処理、及び、入力画素位置の更新処理(xicntのインクリメント)を行う(S305)。
そして、X方向拡大・縮小部121は、出力カウンタxocntの値が、outbw(1出力ブロック画像におけるX方向のラインの出力画素数)に達したか否かが判定される(S306)。X方向拡大・縮小部121は、xocntがoutbwに達している場合には、当該ラインに係る処理を終了し、xocntがoutbwに達していない場合には、上述のステップS302に戻って当該ラインに係る処理を継続する。
X方向拡大・縮小部121は、各ブロック画像に係るすべてのX方向のラインについて上述のフローチャートの処理を行って、入力ブロック画像についてX方向に拡大・縮小を行うことができる。
(A−2−5)ブロック書き出し部130による書き出し処理
次に、上述のステップS104において、ブロック書き出し部130で行われるブロック画像の書き出し処理について説明する。
図7は、ブロック書き出し部130による画像メモリ60へのブロック画像の書き出し動作について示した説明図である。
図7に示すように、ブロック書き出し部130に入力されたブロック画像はX方向とY方向に一定の間隔(X方向については256、Y方向については256)で1ページ分の画像G103として、画像メモリ60に書き込まれる。
(A−3)第1の実施形態の効果
第1の実施形態によれば、以下のような効果を奏することができる。
画像形成装置1では、ページ幅又は高さ分(出力する画像G104の幅又は高さ)の画素を保持するラインメモリではなく、ページを分割したブロック画像の幅分の画素を保持するラインメモリで、任意倍率の拡大・縮小処理を行うことができる。したがって、画像形成装置1では、入力又は出力する画像のサイズ(画素数)が大きくなっても、メモリ等のリソースを追加せずに(効率的に)処理することができる。
(B)第2の実施形態
以下、本発明による画像処理装置及び方法、並びに、画像形成装置の第2の実施形態を、図面を参照しながら詳述する。
(B−1)第2の実施形態の構成
第1の実施形態では、拡大・縮小処理部100の前段及び後段でフィルタ処理が行われ、各フィルタ処理において、それぞれ画像メモリ60に対する画像データの読み出し及び書込みが発生している。したがって、第1の実施形態の画像形成装置1では、画像メモリ60にフィルタ処理ごとに画像データを保持するためのメモリ領域を確保する必要がある。また、画像処理装置において、画像データを記憶するメモリは、通常、DRAM等の大規模なメモリが一つだけ使用されることが考えられ、単位時間当たりにアクセス可能なデータ量は有限となる。したがって、第1の実施形態の画像形成装置1において、画像メモリ60に対する画像データの読込回数及び書込み回数を低減することにより、効率的な画像処理が可能となる。
そこで、図9に示す第2の実施形態の画像形成装置1Aでは、フィルタ処理についてもブロック画像単位で行うことにより、画像メモリ60へのアクセス回数を低減する構成となっている。
図9(a)は、第2の実施形態に係る画像形成装置1Aの機能的構成について示したブロック図であり、上述の図1(a)と同一又は対応する部分には、同一又は対応する符号を付している。図9(b)は、第2の実施形態に係る画像形成装置1Aが備えるブロック拡大・縮小部120Aの機能的構成について示したブロック図である、上述の図1(b)と同一又は対応する部分には、同一又は対応する符号を付している。
以下では、第2の実施形態について、第1の実施形態との差異を説明する。
第2の実施形態の画像形成装置1Aは、画像入力部10、拡大・縮小処理部100A、画像出力部50及び画像メモリ60を有している。また、拡大・縮小処理部100Aには、前段から順に、ブロック読み出し部110A、前フィルタ処理部140、ブロック拡大・縮小部120A、後フィルタ処理部150、ブロックカット処理部160、及びブロック書き出し部130Aが配置されている。以下では、拡大・縮小処理部100A内でブロック画像を処理する各構成要素(ブロック読み出し部110A、前フィルタ処理部140、ブロック拡大・縮小部120A、後フィルタ処理部150、ブロックカット処理部160、及びブロック書き出し部130A)を総称して「ブロック画像処理部」と呼ぶものとする。
すなわち、第2の実施形態の画像形成装置1Aでは、拡大・縮小処理部100Aに、ブロック単位で前フィルタ処理及び後フィルタ処理を行う構成要素が挿入されている点で、第1の実施形態と異なっている。具体的には、第2の実施形態の画像形成装置1Aでは、拡大・縮小処理部100Aにおいて、ブロック読み出し部110Aとブロック拡大・縮小部120Aとの間に、ブロック画像単位で前フィルタ処理を行う前フィルタ処理部140が挿入されている。また、第2の実施形態の拡大・縮小処理部100Aでは、ブロック拡大・縮小部120Aとブロック書き出し部130Aとの間に、ブロック単位で後フィルタ処理を行う後フィルタ処理部150、及び、後フィルタ処理に利用した不要部分をカットするブロックカット処理部160が挿入されている。なお、ブロック読み出し部110Aは、入力された画像G101について直接ブロック画像の読み出しを行う点で、第1の実施形態と異なっている。したがって、第2の実施形態では、拡大・縮小処理部100Aにより画像処理装置が構成されている。
これにより、第2の実施形態の画像入力部10Aでは、第1の実施形態と異なり、前フィルタ処理を行った画像G102及び、拡大・縮小処理後の画像G103を画像メモリ60に書き込まずに処理を完了することができるので、メモリアクセスの点で効率的な処理が可能となる。
ブロック読み出し部110Aは、ブロック拡大・縮小部120Aで決定されたパラメータに従って、画像G101をブロック画像単位で読み出し、前フィルタ処理部140に供給する。
そして、第2の実施形態における前フィルタ処理手段としての前フィルタ処理部140は、ブロック画像単位でフィルタ処理を行い、フィルタ処理したブロック画像を、ブロック拡大・縮小部120Aに供給する。前フィルタ処理部140が行う、具体的なフィルタ処理については、種々の画像データのフィルタ処理(ブロック画像単位のフィルタ処理)を適用することができるため、詳しい説明を省略する。
ブロック拡大・縮小部120Aは、前フィルタ処理部140から供給されたブロック画像について、拡大・縮小処理を行って、後フィルタ処理部150に供給する。そして、ブロック拡大・縮小部120Aは、X方向拡大・縮小部121A及びY方向拡大・縮小部122Aを有している。X方向拡大・縮小部121A(Y方向拡大・縮小部122A)では、前フィルタ処理部140の挿入に伴って、X方向スキップカウンタ121c(Y方向スキップカウンタ122c)が追加されている点で、第1の実施形態と異なっている。X方向スキップカウンタ121c及びY方向スキップカウンタ122cは、ブロック拡大・縮小部120Aに入力される各ブロック画像の左端と上端の無効画素(第1の無効領域)をスキップする(除外する;無視する)ためのカウンタであり、出力カウンタと同様、ブロック画像のライン先頭でリセットされる。
そして、ブロック拡大・縮小部120Aは、入力されたブロック画像について、上述のスキップカウンタ(X方向スキップカウンタ121c、Y方向スキップカウンタ122c)によりスキップされた領域を除外した領域について、第1の実施形態と同様の拡大・縮小処理を実行して、拡大・縮小処理後のブロック画像を、後フィルタ処理部150に供給する。
そして、第2の実施形態における後フィルタ処理手段としての後フィルタ処理部150は、後フィルタ処理部150から供給されたブロック画像について、後フィルタ処理を行い、後フィルタ処理したブロック画像を、ブロックカット処理部160に供給する。後フィルタ処理部150が行う、具体的なフィルタ処理については、種々の画像データのフィルタ処理(ブロック画像単位のフィルタ処理)を適用することができるため、詳しい説明を省略する。
そして、ブロックカット手段としてのブロックカット処理部160は、後フィルタ処理部150から供給されたブロック画像について、後フィルタ処理で発生するブロック画像外周の無効画素(第2の無効領域)をカット(除外)する処理を行い、ブロック書き出し部130Aに供給する。
そして、ブロック書き出し部130Aは、ブロックカット処理されたブロック画像について、画像メモリ60(画像G104の領域)に順次書き込み、画像G104のデータを作成する。ブロック書き出し部130Aが、個々のブロック画像について行う書き出し処理自体は、第1の実施形態と同様の処理であるため、詳しい説明は省略する。
(B−2)第2の実施形態の動作
次に、以上のような構成を有する第2の実施形態の画像形成装置1Aの動作(実施形態の画像処理方法)を説明する。
(B−2−1)画像形成装置1A全体の動作の概要
図10は、画像形成装置1Aの全体の動作について示したフローチャートである。
まず、画像形成装置1Aでは、画像入力部10に画像G101のデータが入力されて、画像メモリ60に、画像G101として書き込まれたものとする。そして、拡大・縮小処理部100Aに設定倍率がセットされたものとする(S401)。
ここでは、画像G101は、幅7680画素、高さ5120画素の画像であるものとする。またここでは、拡大・縮小処理部100に設定倍率として133%設定された場合と、41%が設定された場合とで、場合分けして説明する。
そして、拡大・縮小処理部100A(ブロック拡大・縮小部120A)により、拡大・縮小処理を行う画像G101のサイズと、設定倍率に基づいて、拡大・縮小に係る各パラメータ算出等の準備が行われる(S402)。
そして、拡大・縮小処理部100Aにより、ブロック単位で、読み出し処理、前フィルタ処理、拡大・縮小処理、後フィルタ処理、ブロックカット処理、及び書き出し処理が行われ、画像メモリ60に処理後の画像G104が書き込まれる(S403)。
そして、画像出力部50により、処理後の画像G104が出力されることになる(S404)。
(B−2−2)拡大・縮小に係る各パラメータ算出(ステップS402)
次に、上述のステップS402において、ブロック拡大・縮小部120Aで行われるパラメータ算出処理の詳細について説明する。
ここでは、前フィルタ処理部140、ブロック拡大・縮小部120A、後フィルタ処理部150は、それぞれ、288、264、262画素分の画素を保持するラインメモリを備え、前記の画素数が各処理部における出力可能なブロック画像幅の上限があるものとする。また、ここでは、前フィルタ処理部140では注目画素を中心に25×25の画素参照を行うフィルタ処理が行われ、後フィルタ処理部150では注目画素を中心に7×7の画素参照を行うフィルタ処理が行われるものとする。
ブロック拡大・縮小部120Aによるパラメータ算出処理も、上述の図4のフローチャートにより説明することができる。
まず、ステップS201において、ブロック拡大・縮小部120Aは、画像G101と設定倍率に基づいて、拡大・縮小処理後に出力する画像G104のサイズ(1ページの出力画像の幅と高さ)を、第1の実施形態と同様に上記の(1)、(2)式を用いて算出する。
ここでの例では、上述の通り、入力する画像G101のサイズは、幅7680、高さ5120であり、設定倍率は133%である。したがって、出力する画像G104の幅XOが10214、高さがYOが6809となる。さらに、設定倍率を41%とした場合、出力する画像G104の幅XOが3148、高さYOが2099となる。
次に、ステップS202で、ブロック拡大・縮小部120は、拡大・縮小処理部100A内の各ブロック画像処理部で入出力されるブロック画像のそれぞれについてサイズの算出を行う。
入出力ブロック画像サイズは、拡大・縮小処理部100Aの各ブロック画像処理部における入出力ブロック画像の幅と高さであり、第2の実施形態では、ブロック読み出し部110Aで読み出すブロック画像サイズ、前フィルタフィルタ処理部20が出力するブロック画像サイズ、ブロック拡大・縮小部120Aが出力するブロック画像サイズ、後フィルタ処理部150が出力するブロック画像サイズ、及びブロックカット処理部160が出力するブロック画像サイズ(ブロック書き出し部130で書き出すブロック画像サイズ)が該当する。なお、拡大・縮小処理部100Aが算出するブロック画像サイズは、拡大・縮小の倍率と各ブロック画像処理部で出力可能ブロック画像サイズの上限と各ブロック画像処理部で発生するブロック画像外周の無効部分の画素幅と高さによって変動する。
図11は、第2の実施形態の例において、拡大・縮小処理部100Aの各ブロック画像処理部で出力可能なブロック画像サイズの上限と、ブロック画像外周で発生する無効部分の画素幅と高さを示した説明図である。
ブロック画像幅の上限については、上述した通り、前フィルタ処理部140、ブロック拡大・縮小部120A、及び後フィルタ処理部150に設定されるものであり、それぞれ、288、264、262である。ブロック画像高さの上限については、第1の実施形態と同様の制約を仮定し、ブロック書き出し部130の書き出しにおいて256の高さ制限があるものとする。
また、ブロック画像外周に発生する無効画素は、前フィルタ処理部140、後フィルタ処理部20、及びブロック拡大・縮小部120Aで発生する。具体的には、ここでの例では、前フィルタ処理部140では左端と右端と上端と下端に12画素発生し、後フィルタ処理部150では左端と右端と上端と下端に3画素発生し、ブロック拡大・縮小部120Aでは右端と下端に1画素(補間拡大・縮小法を用いた場合)発生するものとする。
このように、上述のステップS202において、ブロック拡大・縮小部120Aでは、拡大・縮小処理部100A内の各ブロック画像処理部で入出力されるブロック画像サイズ上限と、ブロック画像外周で発生する無効画素数と、設定倍率とを用いて、各ブロック画像処理部における出力ブロック画像サイズが算出される。
図12は、ブロック拡大・縮小部120Aが、上述のステップS202で各パラメータを算出する動作について示したフローチャートである。
図12における変数pは、ブロック拡大・縮小部120Aが拡大・縮小処理部100A内の構成要素(各処理段)に係る処理番号を管理するために用いられる変数である。pは、図11における処理番号に該当する。したがって、図11に示すように、ブロック読み出し部110Aでは、1段目(最前段)の処理段(p=0)がブロック読み出し部110A、2段目の処理段(p=1)が前フィルタ処理部140、3段目の処理段(p=2)がブロック拡大・縮小部120A、4段目の処理段(p=3)が後フィルタ処理部150、5段目の処理段(p=4)がブロックカット処理部160、6段目(最後段)の処理段(p=5)がブロック書き出し部130Aとなっている。
まず、ブロック拡大・縮小部120Aは、最後段の処理の出力ブロック画像サイズを仮決めする(S501)。この場合、ブロック拡大・縮小部120Aが仮決めに使用する値は、例えば、上述のステップS201で求めた出力画像サイズを用いるものとする。
次に、ブロック拡大・縮小部120Aは、pに最後段の処理番号として「5」を設定する(S502)。
次に、ブロック拡大・縮小部120Aは、処理番号pの処理の出力ブロック画像サイズを算出する(S503)。ここで各ブロック画像処理部における出力ブロック画像サイズの算出を行うことになるが、ブロック拡大・縮小部120Aの出力ブロック画像サイズは前段の処理の出力ブロック画像サイズから算出することができないため、各ブロック画像処理部における出力ブロック画像サイズの算出はその後段の処理における出力ブロック画像サイズより順に算出する必要がある。第2の実施形態における各処理番号ごと(ブロック画像処理部ごと)の出力ブロック画像サイズの算出は、以下の(16)〜(27)式によりもとめることができる。
[ブロック書き出し部130A、p=5]
outbw[p]=任意の値 …(16)
outbh[p]=任意の値 …(17)
[ブロックカット処理部160、p=4]
outbw[p]=outbw[p+1] …(18)
outbh[p]=outbh[p+1] …(19)
[後フィルタ処理部150、p=3]
outbw[p]=
outbw[p+1]+nulwL[p]+nulwR[p] …(20)
outbh[p]=
outbh[p+1]+nulhU[p]+nulhD[p] …(21)
[ブロック拡大・縮小部120A、p=2]
outbw[p]=outbw[p+1] …(22)
outbh[p]=outbh[p+1] …(23)
[前フィルタ処理部140、p=1]
outbw[p]=
(outbw[p+1]×xbase+xratio−1)/xratio
+nulwL[p]+nulwR[p]+nulwL[p+1]
+nulwR[p+1] …(24)
outbh[p]=
(outbh[p+1]×ybase+yratio−1)/yratio
+nulhU[p]+nulhD[p]+nulhU[p+1]
+nulhD[p+1] …(25)
[ブロック読み出し部110A、p=0]
outbw[p]=outbw[p+1] …(26)
outbh[p]=outbh[p+1] …(27)
上式のように各ブロック画像処理部における出力ブロック画像の幅(outbw[p])と出力画像の高さ(outbw[p])が算出される。なお、最後段の処理であるブロック書き出し部130の出力ブロック画像サイズは、直近にステップS501、又はS506で決定された値とする。
そして、ブロック拡大・縮小部120Aは、各処理番号pに係る出力ブロック画像サイズが、各ブロック画像処理部において出力可能なブロック画像サイズの上限を超えていないかを判定し(S504)、上限を超えていると判定した場合には後述するステップS505から動作し、そうでない場合には、後述するステップS506から動作する。
そして、処理番号pに係る出力ブロック画像サイズが、上述の上限を超えている場合、ブロック拡大・縮小部120Aは、最後段の出力ブロック画像サイズの変更(例えば、幅及び高さで1画素ずつ小さいサイズへの変更)を行ってから(S506)、上述のステップS502に戻って動作する。
そして、ブロック拡大・縮小部120Aは、処理番号pに係る出力ブロック画像サイズが、上述の上限を超えていない場合、全ての処理番号について、出力ブロック画像サイズの算出が終了したか否かを判定(pが0かを判定)する(S505)。
ブロック拡大・縮小部120Aは、全ての処理番号について出力ブロック画像サイズの算出が終了した場合には処理を終了し、そうでない場合には、pをデクリメント(1減算)して(S507)、上述のステップS503から動作する。
以上のように、ブロック拡大・縮小部120Aは、拡大・縮小処理部100A内の各ブロック画像処理部の出力ブロック画像のサイズを、最後段の処理部から順に算出し、全ての処理部について制限内になるまで上述の図12のフローチャートのループ処理を繰り返す。
上述の図11の制限に基づいて、ブロック拡大・縮小部120Aが、上述の図12のフローチャートの処理を行い、各ブロック画像処理部の出力ブロック画像のサイズを算出した結果は、例えば、図13のような内容となる。
そして、ステップS203において、ブロック拡大・縮小部120Aは、上述のステップS202で算出した入力ブロック画像のサイズに基づいて、第1の実施形態と同様の処理により、画像G101に対するブロック画像の分割数を算出する。
ここでの例では、上述の通り、入力する画像G101のサイズは、幅7680、高さ5120である。したがって、設定倍率が133%の場合、入力ブロック画像の幅及び高さは194であるため、X方向の分割数は40、Y方向の分割数は27となる。また、設定倍率を41%とした場合、入力ブロック画像の幅及び高さは626であるため、X方向の分割数は13、Y方向の分割数は9となる。
そして、ステップS204において、ブロック拡大・縮小部120Aは、ブロック画像ごとに、X方向拡大・縮小カウンタ121a、及びY方向拡大・縮小カウンタ122aの初期値と、ブロック読み出し部110が読み出す各ブロック画像のX方向とY方向の読み出し位置を算出する。ブロック拡大・縮小部120AによるステップS204の処理は、第1の実施形態とほぼ同様であるが、前フィルタ処理部140と後フィルタ処理部150が、拡大・縮小処理部100Aに挿入されたことを考慮して、各値を求める必要がある。
第2の実施形態において、Y方向拡大・縮小カウンタ122aの初期値、Y方向拡大・縮小カウンタ122aの初期値、X方向の読み出し位置、及びY方向の読み出し位置はそれぞれ以下の(28)〜(31)式で算出することができる。
以下の(28)〜(31)式において、bnulwとbnulhは、ブロック拡大・縮小部120Aの処理でブロック画像左端と上端に発生する無効画素数を表している。また、anulwとanulhはブロック拡大・縮小部120Aの後段の処理でブロック画像左端と上端に発生する無効画素数を表している。
[X方向の拡大・縮小カウンタの算出式]
xcnt0[0]=(xratio−(anulw×xbase)%xratio)%xratio …(28)
[Y方向の拡大・縮小カウンタの算出式]
ycnt0[0]=(yratio−(anulh×ybase)%yratio)%yratio …(29)
[X方向の読み出し位置]
xpos0[0]= −(anulw×xbase+xratio−1)
/xratio−bnulw …(30)
[Y方向の読み出し位置]
ypos0[0]=−(anulh×ybase+yratio−1)
/yratio−bnulh …(31)
以上説明したS201〜S204で算出したパラメータを使用して、拡大・縮小処理部100Aを動作させることで、1ページの画像データを複数のブロックに分割して任意倍率の拡大・縮小と前後のフィルタ処理を行うことができる。
(B−2−3)ブロック読み出し部110Aによる入力ブロック画像の読み出し処理
次に、上述のステップS403において、ブロック読み出し部110Aで行われる入力ブロックの読み出し処理の詳細について、図14を用いて説明する。
図14は、ブロック読み出し部110Aが、上述のステップS403で決定したパラメータに従って、拡大・縮小処理部100Aに入力される画像G101を、入力ブロック単位で読み出す場合の処理について示した説明図である。なお、図14では、入力する画像G101のサイズは、幅7680、高さ5120、設定倍率が133%の場合について示している。
図14に示すように、ブロック読み出し部110Aで読み出されるブロック画像は、隣接ブロックと重複部分を持つように読み出される。図14では、読み出す1ページの画像データの最も左の画素のX方向の位置を0、最も上の画素のY方向の位置を0としている。そして、ブロック読み出し部110Aが、分割するブロック画像のX方向とY方向の読み出し開始位置は、X方向の読み出し開始位置についてはX方向のブロック番号0、1、2、3、4、・・・に対応して、−15、178、370、563、755、・・・となり、Y方向の読み出し開始位置についてはY方向のブロック番号0、1、・・・に対応して、−15、178となる。例えば、X方向のブロック番号が2、Y方向のブロック番号が1であれば、X方向とY方向の読み出し位置は(370、178)になる。また、図14では、ブロック読み出し部110Aにより読み出される各ブロック画像のサイズは、全てのブロック画像で共通である(例では、幅222×高さ222)。なお、図14に示すように、ブロック読み出し部110Aは、ページの外周近辺で読み出されるブロック画像については、ページ外の領域より読み出す必要があり、上述のページ外の領域のデータは、白データ(白色の画素値)で置換したり、ページ外との境界に位置する画素を使って置換するようにしてもよい。
そして、ブロック読み出し部110Aは、各ブロック画像について、各ブロック画像のX方向とY方向のブロック番号にしたがって、X方向とY方向の読み出し位置を変更しながら読み出し、読み出したブロック画像を前フィルタ処理部140に供給する。
(B−2−4)ブロック拡大・縮小部120Aによる拡大・縮小処理
次に、上述のステップS403においてブロック拡大・縮小部120Aで行われる処理の詳細について説明する。
図15は、ブロック拡大・縮小部120Aで行われる各ブロック画像に対する処理の例について示した説明図である。なお、図15では、入力する画像G101のサイズは、幅7680、高さ5120、設定倍率が133%の場合について示している。
前フィルタ処理部140に入力されたブロック画像(図15(a)参照、ブロック画像のサイズは幅222×高さ222)は、前フィルタ処理部140で、注目画素を中心に25×25の画素参照を行うフィルタ処理が行われ、フィルタ処理された画像がブロック拡大・縮小部120Aに供給される。
前フィルタ処理部140によるフィルタ処理により前フィルタ処理部140の処理後のブロック画像は、図15(b)に示すように左端、右端、上端、下端に無効な画素が各12画素発生する。
そして、ブロック拡大・縮小部120Aに入力されたブロック画像は、拡大・縮小部で拡大処理が行われ、拡大されたブロック画像が、後フィルタ処理部150に供給される。
ブロック拡大・縮小部120Aに入力されたブロック画像(幅222×高さ222)は、まず、X方向拡大・縮小部121AによりX方向について拡大され(図15(c)参照、ブロック画像サイズは幅262×高さ222)、さらに、Y方向拡大・縮小部122Aにより、Y方向ついて拡大されて出力される(図15(d)参照、ブロック画像サイズは幅262×高さ262)。
X方向拡大・縮小部121Aによる前記のX方向の拡大では、X方向拡大・縮小カウンタ121aが各ブロックのライン先頭で、当該ブロック画像のX方向のブロック番号に対応する初期値に設定される。例えば、X方向のブロック番号が2であれば94に設定される。ブロック左端よりカウントが開始されるX方向スキップカウンタ121cが所定の値(例では12)になるまで入力画素を無視した後(前段の処理で発生したブロック左端の無効画素12画素は前記の動作により削除される)、X方向拡大・縮小カウンタ121aにしたがってライン毎拡大が行われ、X方向出力カウンタ121bが所定の値(例では262)になるまで拡大して出力する(図15(e)参照、前記の動作により前段の処理で発生したブロック右端の無効画素12画素および余分な画素が削除される)。
Y方向拡大・縮小部122AによるY方向の拡大では、Y方向拡大・縮小カウンタ122aが各ブロックの先頭ラインで、当該ブロック画像のY方向のブロック番号に対応する初期値に設定される。例えば、Y方向のブロック番号が1であれば30に設定される。ブロック上端よりカウントが開始されるY方向スキップカウンタ122cが所定の値(例では12)になるまで入力画素を無視した後(前段の処理で発生したブロック上端の無効画素12画素は前記の動作により削除される)、Y方向拡大・縮小カウンタ122aにしたがって拡大が行われ、Y方向出力カウンタ122bが所定の値(例では262)になるまで拡大して出力する(図15(f)参照、前記の動作により前段の処理で発生したブロック下端の無効画素12画素および余分な画素が削除される)。
以上説明したように、ブロック拡大・縮小部120Aは入力されるブロック画像を拡大するとともに、前段の前フィルタ処理部140のフィルタ処理により生じたブロック画像端部の無効画素を削除し、各ブロック画像のサイズを同じ大きさにして出力する。出力されたブロック画像は後フィルタ処理部150に供給される。
(B−2−5)後フィルタ処理部150及びブロックカット処理部160の処理
次に、上述のステップS403において、後フィルタ処理部150及びブロックカット処理部160で行われる処理の詳細について説明する。
図16は、後フィルタ処理部150及びブロックカット処理部160で行われる各ブロック画像に対する処理の例について示した説明図である。
後フィルタ処理部150に入力されたブロック画像(図16(a)参照、ブロック画像のサイズは幅262×高さ262)は、後フィルタ処理部150で注目画素を中心に7×7の画素参照を行うフィルタ処理を行われる。そして、後フィルタ処理部150で、後フィルタ処理された画像が、ブロックカット処理部160に供給される。後フィルタ処理部150による後フィルタ処理により、処理後のブロック画像には、図16(b)に示すように、左端、右端、上端、及び下端に無効な画素が各3画素発生する。
ブロックカット処理部160に入力されたブロック画像(ブロック画像のサイズは幅262×高さ262)は、ブロックカット処理部160で前段の処理で発生したブロック画像端部の無効画素(例では左端、右端、上端、下端に各3画素)が削除(カット)され、無効画素がカットされたブロック画像(図16(c)参照;サイズは幅256×高さ256)がブロック書き出し部130Aに供給される。
(B−2−6)ブロック書き出し部130Aによる書き出し処理
ブロック書き出し部130Aは、第1の実施形態と同様の処理により、供給されたブロック画像をX方向とY方向に一定の間隔(X方向については256、Y方向については256)で画像メモリ60に書き込み、1ページ分の画像G104のデータを作成する。
(B−3)第2の実施形態の効果
第2の実施形態によれば、第1の実施形態の効果に加えて以下のような効果を奏することができる。
第2の実施形態では、前フィルタ処理及び後フィルタ処理についても、ブロック拡大・縮小部120Aで、ブロック画像単位に処理している。したがって、第1の実施形態の画像形成装置1では、図1に示すように画像データが入力されてから出力されるまで、画像メモリ60に対して4つ画像データ(G101〜G104)の処理(読み書き)が発生しているが、第2の実施形態の画像形成装置1Aでは、図9に示すように、2つの画像データ(G101、G104)の処理だけで処理が完了する。
したがって、第2の実施形態の画像形成装置1Aでは、第1の実施形態よりも、画像メモリ60へのアクセス量を低減して処理を高速化することができる。また、第2の実施形態の画像形成装置1Aでは、画像メモリ60に確保必要な容量を低減することができる。
(C)第3の実施形態
以下、本発明による画像処理装置及び方法、並びに、画像形成装置の第3の実施形態を、図面を参照しながら詳述する。
(C−1)第3の実施形態の構成
図17は、本発明の第3の実施形態における画像形成装置の構成を示す概略図であり、上述の図9と同一又は対応する部分に同一又は対応する符号を付している。
以下、第3の実施形態について第2の実施形態と異なる点について説明する。
第3の実施形態では、拡大・縮小処理部100Aが拡大・縮小処理部100Bに置き換わっている点で第2の実施形態と異なっている。また、第3の実施形態の拡大・縮小処理部100Bでは、ブロック拡大・縮小部120Aがブロック拡大・縮小部120Bに置き換わり、さらに、前解像度変換部170、後解像度変換部180、及び量子化処理部190が追加されている点で第2の実施形態と異なっている。また、第3の実施形態のブロック拡大・縮小部120Bでは、X方向拡大・縮小部121A及びY方向拡大・縮小部122Aが、X方向拡大・縮小部121B及びY方向拡大・縮小部122Bに置き換わっている点で第2の実施形態と異なっている。
拡大・縮小処理部100Bでは、ブロック読み出し部110Aと前フィルタ処理部140との間(ブロック拡大・縮小部120Bより前段の位置)に、前解像度変換部170が挿入されている。また、拡大・縮小処理部100Bでは、後フィルタ処理部150とブロックカット処理部160との間(ブロック拡大・縮小部120Bより後段の位置)に、後解像度変換部180が挿入されている。さらに、拡大・縮小処理部100Bでは、ブロックカット処理部160とブロック書き出し部130Aとの間(ブロック拡大・縮小部120Bより後段の位置)に、量子化処理部190が挿入されている。
第1の実施形態や第2の実施形態の前フィルタ処理部140で特定の解像度の画像データに対して処理を行いたい場合には解像度変換処理(逓倍の解像度変換または逓倍分の1の解像度変換)を前フィルタ処理の前に行う必要がある(例えば、画像データの縦と横の解像度を同じにすることで原稿のスクリーン判定やモアレ発生を抑えるフィルタ処理について縦横で同じ処理にできるので処理設定や構成が簡易になる)。また、後フィルタ処理部150の処理後の画像データの解像度や画素当たりのビット数が画像出力部50の期待する解像度や画素当たりのビット数と異なる場合には後フィルタ処理の後に解像度変換(逓倍の解像度変換)や量子化処理を行う必要がある。前記の解像度変換や量子化処理についておのおの画像メモリから画像データの読み出しや書き出しを行った場合には、画像メモリに必要なサイズが大きくなるうえに、処理速度の低下を招く。そのため、第3の実施形態では、ブロック拡大・縮小部120B及び前フィルタ処理部140の前段に前フィルタ処理部140を挿入して、切り出されたブロック画像について出力したいサイズのブロック画像と比率だけを合せる解像度変換をおこなっている。そして、第3の実施形態では、ブロック拡大・縮小部120B及び後フィルタ処理部150の後段に、後解像度変換部180を挿入して、ブロック拡大・縮小部120Bから出力されたブロック画像について出力したいサイズの画像に変換する解像度変換をしている。
前解像度変換部170は、ブロック読み出し部110Aより入力されるブロック画像データの解像度変換(逓倍の解像度変換または逓倍分の1の解像度変換)を行うものである。前解像度変換部170は、例えば、入力された横300DPI×縦600DPIの解像度のブロック画像データを横600DPI×縦600DPIの解像度の画像データに変換する。そして、解像度が変換されたブロック画像データは前フィルタ処理部140に供給される。
ブロック拡大・縮小部120BのX方向拡大・縮小部121B及びY方向拡大・縮小部122Bは、前解像度変換部170の追加に伴い、X方向とY方向の画像ブロック毎にスキップ幅を微調整する値(以下、「微調整スキップ値」と呼ぶ)により微調整されたスキップ幅を、スキップカウンタ(X方向スキップカウンタ121c、Y方向スキップカウンタ122c)にセットする点で第2の実施形態と異なっている。
言い換えると、ブロック拡大・縮小部120B(X方向拡大・縮小部121B及びY方向拡大・縮小部122B)は、第2の実施形態と同様、入力されたブロック画像の左端と上端の画素について、スキップカウンタが所定の値の範囲の画素を無視して残りの画素のみを拡大・縮小カウンタにしたがって拡大・縮小し、出力カウンタが所定の値の範囲内の場合のみ出力を行うよう動作する。但し、ブロック拡大・縮小部120Bは、スキップカウンタの値により無視する所定の値の範囲は、全ての画像ブロックで共通の所定値に、X方向とY方向のブロック毎の微調整スキップ値を加算した値の範囲を無視(スキップ)する処理(以下、この微調整処理を「スキップ値微調整処理」とも呼ぶものとする)するものとする。言い換えると、ブロック拡大・縮小部120Bでは、ブロックごとにスキップカウンタに設定される値が可変となる(共通の所定値に対して微調整(補正)された値が設定される)。
図18は、X方向拡大・縮小部121Bの動作の例について示した説明図である。図18では前解像度変換がない場合と前解像度変換がある場合(X方向の解像度を2倍に変換)のそれぞれについて、ブロック拡大縮小部120Bに入力されるブロック画像のX方向の読み出し位置とX方向のスキップ範囲を記載する。
図18(a)〜図18(c)は、それぞれ異なる画像ブロック(X方向の読み出し位置が−14、178、371のブロック画像(X方向0、1、2番目のブロック画像))について、X方向拡大・縮小部121Bがスキップ値微調整処理をおこなわずに、X方向の読み出し位置を設定した場合(第2の実施形態と同様の処理を行った場合の処理)について示した説明図である。図18(d)〜図18(f)は、それぞれ図18(a)〜図18(c)と同様の画像ブロックについて、X方向拡大・縮小部121Bがスキップ値微調整処理を行った上で、X方向の読み出し位置を設定した場合について示した説明図である。
図18(a)〜図18(c)に示すように、X方向の読み出し位置が−14、178、371のブロック画像(X方向0、1、2番目のブロック画像)をX方向拡大・縮小部121Bで左端の12画素を無視して拡大・縮小を行う場合には、前解像度変換がない場合については、X方向スキップカウンタ121cで無視する所定の値の範囲を12とすれば良い。
しかし、前記と同様の処理を前解像度変換部170でX方向の解像度を2倍に変換して行う場合には、前解像度変換がない場合の読み出し位置を1/2した位置より読み出せば良いが、整数とならない位置(2番目のブロックの読み出し位置371を1/2すると185.5になる)からは読み出せないため、X方向の読み出し位置−7、89、185から読み出す。したがって、0番目と1番目のブロック画像については、前解像度変換がない場合と同様、スキップカウンタで無視する所定の値の範囲を12とすれば良いが、2番目のブロック画像は、ブロック拡大縮小部120Bで換算した読み出し位置が1ずれるため、スキップカウンタで無視する所定の値の範囲を13とする必要がある。前記の所定の値とのずれ分をX方向とY方向のブロック毎の微調整スキップ値に設定することで、前解像度変換部170による解像度変換に対応できる。
後解像度変換部180は、後フィルタ処理部150より入力される画像データの解像度変換(逓倍の解像度変換)を行うものであり、例えば、入力された横600DPI×縦600DPIの解像度の画像データを横600DPI×縦1200DPIの解像度の画像データに変換する。後解像度変換部180は、解像度を変換したブロック画像をブロックカット処理部160に供給する。
量子化処理部190は、ブロックカット処理部160より供給されたブロック画像に対して量子化処理を行う。例えば、量子化処理部190に供給された画素当たり8bitのブロック画像をあらかじめ設定された閾値等と比較することで画素当たり1bitの画像データに量子化するようにしてもよい。1bitに量子化された画像データは8画素単位で8bitのデータにまとめられ、ブロック書き出し部130Aへ供給される。例えば、画像出力部50が電子写真式のプリンタ等である場合には、画像処理装置1に、量子化処理部190を搭載し、現像剤(トナー剤)の色ごとの画像データを生成することができる。
(C−2)第3の実施形態の動作
次に、以上のような構成を有する第3の実施形態の画像形成装置1Bの動作(実施形態の画像処理方法)を説明する。以下では、第3の実施形態の画像形成装置1Bの動作について、第2の実施形態の動作との差異を中心に説明する。
(C−2−1)画像形成装置1B全体の動作の概要
図19は、画像形成装置1Bの全体の動作について示したフローチャートである。
まず、画像形成装置1Aでは、画像入力部10に画像G101のデータが入力されて、画像メモリ60に、画像G101として書き込まれたものとする。そして、拡大・縮小処理部100Bに設定倍率がセットされたものとする(S501)。
ここでは、画像G101は、幅7680画素、高さ5120画素の画像であるものとする。またここでは、拡大・縮小処理部100Bに設定倍率として133%設定された場合と、41%が設定された場合とで、場合分けして説明する。
次に、拡大・縮小処理部100Bにより、拡大・縮小処理を行う画像G101のサイズと、設定倍率に基づいて、拡大・縮小に係る各パラメータ算出等の準備が行われる(S502)。
次に、拡大・縮小処理部100Bの各処理部により、ブロック単位で、読み出し処理、前フィルタ処理、前解像度変換処理、拡大・縮小処理、後フィルタ処理、後解像度変換処理、ブロックカット処理、量子化処理、及び書き出し処理が行われ、画像メモリ60に処理後の画像データG104が書き込まれる(S503)。
そして、画像出力部50により、処理後の画像データG104が出力されることになる(S504)。
(C−2−2)拡大・縮小に係る各パラメータ算出(ステップS502)
次に第3の実施形態の拡大・縮小部300に必要なパラメータの算出方法について、幅3840ピクセル、高さ5120ピクセルの画像データ(横300DPI×縦600DPI)を133%の倍率で拡大する場合と41%の倍率で縮小する場合を例に挙げ説明する。
また、前フィルタ処理部140では注目画素を中心に25×25の画素参照を行うフィルタ処理が行われ、後フィルタ処理部150では注目画素を中心に5×5の画素参照を行うフィルタ処理が行われ、前解像度変換部170ではX方向の解像度を2倍にする処理が行われ、後解像度変換部180ではY方向の解像度を2倍にする処理が行われ、量子化処理部190では画素当たり8bitの画像データを画素当たり1bitの画像データに変換する処理が行われるものとする。
さらに、前フィルタ処理部140、ブロック拡大・縮小部120B、後フィルタ処理部150、後解像度変換処理部330は、それぞれ、288、264、262、262画素分の画像を保持するラインメモリを備え、各処理部における出力可能なブロック幅は前記の値が上限であるものとする。
拡大・縮小処理部100Bの各部位に必要なパラメータの算出方法の全体処理について図20のフローチャートを用いて説明する。
まず、ステップS601において、ブロック拡大・縮小部120Bは、画像G101と設定倍率に基づいて、拡大・縮小処理後に出力する画像データG104のサイズ(1ページの出力画像の幅と高さ)を算出する。
第3の実施形態のブロック拡大・縮小部120Bでは、拡大・縮小によるサイズ変動に加え、前解像度変換部170、後解像度変換部180、量子化処理部190の各処理部によるサイズ変動を考慮する必要がある。以下の説明では、上述の各処理部のX方向の入力画像幅と出力画像幅(BYTE数)の比をxbase、xratio、Y方向の入力画像高さと出力画像高さの比をybase、yratioとして説明する。なお、以下では、上述の各処理部のそれぞれに係る、前記の各パラメー夕(xbase、xratio、ybase、yratio)については、図21の表の通りとなっているものとする。
したがって、ブロック拡大・縮小部120Bでは、前記の各パラメー夕(xbase、xratio、ybase、yratio)について、上述の各処理部のパラメータを累乗して、処理全体でのX方向倍率の分母(以下、「xbase_t」と呼ぶ)と分子(以下、「xratio_t」と呼ぶ)、Y方向倍率の分母(以下、「ybase_t」と呼ぶ)と分子(以下、「xratio_y」と呼ぶ)を求める。そして、ブロック拡大・縮小部120Bは、拡大・縮小処理後に出力する画像データG104のサイズ(1ページの出力画像の幅と高さ)を、以下の(32)、(33)式を用いて算出する。
なお、以下の(32)、(33)式において、XOは出力する画像データG104の幅(X方向)の画素数である。また、XIは、処理対象の画像G101の幅(X方向)の画素数である。さらにYOは出力する画像データG104の高さ(Y方向)の画素数である。さらにまた、YIは、処理対象の画像G101の高さ(Y方向)の画素数である。
XO=(XI)×(xratio_s)/(xbase_s)…(32)
YO=(YI)×(yratio_s)/(ybase_s)…(33)
前述した入力画像G101(幅3840、高さ5120)を133%に拡大する場合の例では、出力画像幅XOが3840×(2×133×1×1)/(1×100×1×8)=1276、出力画像高さYOが5120×(1×133×2×1)/(1×100×1×1)=13619となる。また、41%に縮小する場合の例では、出力画像幅XOが3840×(2×41×1×1)/(1×100×1×8)=393、出力画像高さYOが5120×(1×41×2×1)/(1×100×1×1)=4198となる。
次に、ステップS602において、ブロック拡大・縮小部120Bは、入力ブロック累積無効サイズを算出する。入力ブロック累積無効サイズは、各処理部に入力されるブロック画像に含まれる無効画素のサイズであり、各処理部において、各処理部の上流(前段)の処理部で発生する無効画素のサイズを累積することで求まる。また、各処理部では、前段の処理部が解像度変換を行う処理の場合には、その解像度変換の内容も考慮する必要がある。さらに、各処理部では、前段の処理部がブロック拡大・縮小部120Bやブロックカット処理部160である場合は、その処理部で累積して発生した無効画素は削除されるため0となる。したがって、下式を使って上流のブロック読み出し部110Aから順番に算出を行うことで各処理部の累積無効サイズを算出できる。
したがって、ブロック拡大・縮小部120Bでは、「前段の処理部がブロック拡大・縮小部120Bやブロックカット処理部160である場合」には、左端、右端、上端、下端のそれぞれの累積無効サイズを、以下の(34)式〜(37)式により求めることができる。
以下の(34)式〜(37)式のnulwL、nulwR、nulhU、nulhDは各処理部で発生する無効画素のサイズである(図21の表参照)。第3の実施形態の動作例(図21の表に従う例)においては、各処理部の左端/右端/上端/下端の累積無効サイズは、ブロック読み出し部110Aと前解像度変換部170で0/0/0/0、前フィルタ処理部140で0/1/0/0、ブロック拡大縮小部120Bが12/13/12/12、後フィルタ処理部150で0/0/0/0、後解像度変換部180で2/2/2/2、ブロックカット処理部160で2/2/4/4、量子化処理部190とブロック書き出し部130Aで0/0/0/0となる。なお、前記の累積無効サイズの左端と上端の値の範囲がブロック拡大縮小部120Bにおいてブロック画像の左端と上端で(微調整スキップ値による無視する部分を除く)無視する範囲である。
[前段処理部がブロック拡大縮小部120B又はブロックカット処理部160以外の場合]
(左端累積無効サイズ)=
((前段処理部の左端累積無効サイズ)×(前段処理部のxratio)
+(前段処理部のxbase)−1)/(前段処理部のxbase)
+(前段処理部のnulwL) …(34)
(右端累積無効サイズ)=
((前段処理部の右端累積無効サイズ)×(前段処理部のxratio)
+(前段処理部のxbase)−1)/(前段処理部のxbase)
+(前段処理部のnulwR) …(35)
(上端累積無効サイズ)=
((前段処理部の上端累積無効サイズ)×(前段処理部のyratio)
+(前段処理部のybase)−1)/(前段処理部のybase)
+(前段処理部のnulhU) …(36)
(下端累積無効サイズ)=
((前段処理部の下端累積無効サイズ)×(前段処理部のyratio)
+(前段処理部のybase)−1)/(前段処理部のybase)
+(前段処理部のnulhD) …(37)
上述のように、前段の処理部がブロック拡大・縮小部120Bやブロックカット処理部160である場合は、その処理部で累積して発生した無効画素は削除されるため0となるため、左端、右端、上端、下端のそれぞれの累積無効サイズは、以下の(38)式〜(41)式のようになる。
[前段処理部がブロック拡大縮小部120Bまたブロックカット処理部160の場合]
(左端累積無効サイズ)=0 …(38)
(右端累積無効サイズ)=0 …(39)
(上端累積無効サイズ)=0 …(40)
(下端累積無効サイズ)=0 …(41)
次にS603では、拡大・縮小処理部100Bは、各処理部の入出力ブロック画像サイズを算出する。拡大・縮小処理部100Bは、第2の実施形態とほぼ同様の処理(上述の図4のステップS202、図12のフローチャートの処理)により、各処理部における出力ブロック画像サイズを最後段の処理部より算出し、算出した各処理部における出力ブロック画像サイズが全ての処理部で制限内になるまで算出を繰り返し行うことで、各処理部における出力ブロック画像サイズを算出する。なお、第3の実施形態の拡大・縮小処理部100Bでは、前解像度変換部170、後解像度変換部180、量子化処理部190が追加されたことで、各処理部における出力ブロック画像に係る算出処理を変更する必要があるため、以下ではその差異部分を中心に説明する。
第3の実施形態における各処理番号ごと(ブロック画像処理部ごと)の出力ブロック画像サイズについて、上述の図12のフローチャートに従って算出すると以下の(42)〜(47)式により求めることができる。
なお、以下の(42)式〜(47)式において、inc_nulwL/R[p]、inc_nulhU/D[p]は、上述のステップS602で求めた各処理部の左端/右端/上端/下端の累積無効サイズである。また、outbw[p]、outbh[p]は、第2の実施形態と同様、各処理部で出力するブロック画像の幅と高さである。
ブロック書き出し部130Aの出力ブロックサイズは、以下の(42)式、(43)式のように任意の値を設定することができる。
outbw[p]=任意の値 …(42)
outbh[p]=任意の値 …(43)
後フィルタ処理部150、及び前フィルタ処理部140の出力ブロックサイズは以下の(44)式、(45)式により求めることができる。
outbw[p]=(outbw[p+1]×xbase[p+1]
+xratio[p+1]−1)/xratio[p+1]
+inc_nulwL[p+1]+inc_nulwR[p+1]
+nulwL[p+1]+nulwR[p+1]…(44)
outbh[p]=(outbh[p+1]×ybase[p+1]
+yratio[p+1]−1)/yratio[p+1]
+inc_nulhU[p+1]+inc_nulhD[p+1]
+nulhU[p+1]+nulhD[p+1]…(45)
量子化処理部190、ブロックカット処理部160、後フィルタ処理部150、ブロック拡大縮小部120B、前解像度変換部170、及びブロック読み出し部110Aの出力ブロックサイズは以下の(46)式、(47)式により求めることができる。
outbw[p]=(outbw[p+1]×xbase[p+1]
+xratio[p+1]−1)/xratio[p+1]…(46)
outbh[p]=(outbh[p+1]×ybase[p+1]
+yratio[p+1]−1)/yratio[p+1]…(47)
以上のような処理により、拡大・縮小処理部100Bで算出される各処理部の出力ブロック画像サイズは、例えば、図22のようになる。
ステップS604では、ブロック拡大縮小部120Bは、X方向およびY方向の分割数を算出する(第1の実施形態と同様)。第3の実施形態においては、133%に拡大する場合の例では、X方向の分割数は40、Y方向の分割数は54、41%に縮小する場合の例では、X方向の分割数は33、Y方向の分割数は17になる。
ステップS605では、拡大・縮小処理部100Bは、各処理部に係るストライド値を算出する。ストライド値とは、拡大・縮小処理部100Bの各処理部に入力されるブロック画像のデータの中で、隣接ブロックと重複なく出力される部分(最終的にブロック書き出し部130Aで書き込まれる有効部分)の幅と高さである。拡大・縮小処理部100Bは、各処理部におけるストライド値は、ブロック書き出し部130Aが出力するブロック画像サイズを用いて、例えば、以下の(48)式〜(51)式を用いて求めることができる。
なお、以下の(48)式〜(51)式において、xstride[p]、ystride[p]はそれぞれ、各処理部のX方向とY方向のストライド値である。
ブロック書き出し部130Aのストライド値は、以下の(48)式、(49)式を用いて求めることができる。
xstride[p]=(出力ブロック幅) …(48)
ystride[p]=(出力ブロック幅) …(49)
ブロック書き出し部130Aのストライド値は、以下の(48)式、(49)式を用いて求めることができる。
拡大・縮小処理部100Bを構成するブロック書き出し部130A以外の各処理部のストライド値は、以下の(50)式、(51)式を用いて求めることができる。
xstride[p]=(xstride[p+1]×xbase[p]
+xratio[p]−1)/xratio[p] …(50)
ystride[p]=(ystride[p+1]×ybase[p]
+yratio[p]−1)/yratio[p] …(51)
以下、拡大・縮小処理部100Bで、133%に拡大する場合と41%に縮小する場合とに分けて、各処理部のX方向とY方向のストライド値について説明する。
まず、拡大・縮小処理部100Bで、133%に拡大する場合の各処理部のX方向でのストライド値(xstride)、及びY方向のストライド値(ystride)の例について説明する。この場合、ブロック書き出し部130A及び量子化処理部190では、xstride=32、ystride=256となる。また、この場合、ブロックカット処理部160では、xstride=256、ystride=256となる。さらに、この場合、後解像度変換部180及び後フィルタ処理部150では、xstride=256、ystride=128となる。さらにまた、ブロック拡大縮小部120B、及び前フィルタ処理部140では、xstride=193、ystride=97となる。また、前解像度変換部170、及びブロック読み出し部110Aでは、xstride=97、ystride=97となる。
次に、拡大・縮小処理部100Bで、41%に縮小する場合の各処理部のX方向でのストライド値(xstride)、及びY方向のストライド値(ystride)の例について説明する。この場合、ブロック書き出し部130A、及び量子化処理部190では、xstride=12、ystride=256となる。また、この場合、ブロックカット処理部160では、xstride=96、ystride=256となる。さらに、この場合、後解像度変換部180、及び後フィルタ処理部150では、xstride=96、ystride=128となる。さらにまた、この場合、ブロック拡大縮小部120B、及び前フィルタ処理部140では、xstride=235、ystride=313となる。また、この場合、前解像度変換部170、及びブロック読み出し部110Aでは、xstride=118、ystride=313となる。
次に、ステップS606では、拡大・縮小処理部100Bは、ブロック画像毎のX方向とY方向の拡大・縮小カウンタ初期値、ブロック読み出し部110Aが読み出す各ブロック画像のX方向とY方向の読み出し位置、及びブロック画像毎のX方向とY方向の微調整スキップ値を算出する。拡大・縮小処理部100Bは、例えば、以下の(52)式〜(65)式を用いて、上述の各値を算出することができる。
なお、以下の(52)式〜(65)式において、xno、ynoはX方向のブロック番号とY方向のブロック番号をあらわし、xcnt[]、ycnt[]はX方向の拡大・縮小カウンタの初期値とY方向の拡大・縮小カウンタをあらわす。また、xpos0[]、ypos0[]はX方向の読み出し位置とY方向の読み出し位置をあらわす。さらに、modw[]、modh[]はX方向の微調整スキップ値とY方向の微調整スキップ値をあらわす。さらにまた、xstride、ystirdeはブロック拡大縮小部120Bの後段処理部のストライド値をあらわす。また、xbase、xratioはブロック拡大縮小部120BのX方向の倍率の分母と分子をあらわし、ybase、yratioはブロック拡大縮小部120BのY方向の倍率の分母と分子をあらわす。さらに、bnulwとbnulhはブロック拡大縮小部120Bに入力されるブロック画像に含まれる左端と上端の無効画素の幅と高さ(左端累積無効サイズと上端累積無効サイズと同じ)である。さらにまた、anulwとanulhはブロック拡大縮小部120Bの後段の処理でブロック画像に発生する無効画素数をあらわす。
拡大・縮小処理部100Bは、例えば、以下の(52)式、(53)式を用いて、ブロック画像毎のX方向の拡大・縮小カウンタ初期値を求めることができる。
xcnt0[0]=(xratio−(anulw×xbase)
%xratio)%xratio …(52)
xcnt0[xno]=(xstride×xbase+xcnt0[xno−1])
%xratio …(53)
拡大・縮小処理部100Bは、例えば、以下の(54)式、(55)式を用いて、ブロック画像毎のX方向の拡大・縮小カウンタ初期値を求めることができる。
ycnt0[0]=(yratio−(anulh×ybase)
%yratio)%yratio …(54)
ycnt0[yno]=(ystride×ybase+ycnt0[yno−1])
%yratio …(55)
拡大・縮小処理部100Bは、例えば、以下の(56)式〜(57)式を用いて、ブロック読み出し部110Aが読み出す各ブロック画像のX方向の読み出し位置を求めることができる
xpos0’[0]=−(anulw×xbase+xratio−1)
/xratio−bnulw …(56)
xpos0’[xno]=xpos0’[xno−1]
+(xstride×xbase+xcnt0[xno−1])
/xratio …(57)
xpos0[xno]=(xpos0’[xno]
×(前解像度変換部170のxbase))
/(前解像度変換部170のxratio) …(58)
拡大・縮小処理部100Bは、例えば、以下の(59)式〜(61)式を用いて、ブロック読み出し部110Aが読み出す各ブロック画像のX方向の読み出し位置を求めることができる。
ypos0’[0]=−(anulh×ybase+yratio−1)
/yratio−bnulh …(59)
ypos0’[yno]=ypos0’[yno−1]
+(ystride×ybase+ycnt0O[yno−1])
/yratio …(60)
ypos0[yno]=(ypos0’[yno]
×(前解像度変換部170のybase))
/(前解像度変換部170のyratio) …(61)
拡大・縮小処理部100Bは、例えば、以下の(62)式、(63)式を用いて、X方向の微調整スキップ値を求めることができる。
modw[0]=((anulw×xbase+xratio−1)
/xratio)%(前解像度変換部170のxratio)
modw[xno]=(modw[xno−1] …(62)
+(xstride×xbase+xcnt0[xno−1])
/xratio)%(前解像度変換部170xのratio) …(63)
拡大・縮小処理部100Bは、例えば、以下の(64)式、(65)式を用いて、Y方向の微調整スキップ値を求めることができる。
modh[0]=((anulh×ybase+yratio−1)
/yratio)%(前解像度変換部170のyratio)
modh[yno]=(modh[yno−1] …(64)
+(ystride×ybase+ycnt0[yno−1])
/yratio)%(前解像度変換部170のyratio) …(65)
以上のように、ブロック拡大・縮小部120Bでは、上記の式を用いて、第1、第2の実施形態と同様に、X方向であれば左端のブロックから順番に、Y方向であれば上端のブロックから順番に上述の各値を算出する。
画像処理装置1では、以上説明したステップS601〜S606で算出したパラメータを使用して、拡大・縮小処理部100Bを動作させることで、1ページの画像データを複数のブロックに分割して任意倍率の拡大・縮小と前後のフィルタ処理と前後の解像度変換処理と量子化処理を行うことができる。
次に、拡大・縮小処理部100Bが、上述のステップS601〜S606で算出した各パラメータを用いた具体的な動作(133%に拡大する場合の例)について説明する。
まず、ブロック読み出し部110Aの動作について図23を用いて説明する。
図23は、拡大・縮小処理部100Bで133%の拡大処理を実行する場合において、ブロック読み出し部110Aにより、画像メモリ60に記憶された1ページの画像をX方向とY方向に分割したブロック画像として読み出す動作の具体例である。
図23に示すように、で示すように、ブロック読み出し部110Aで読み出されるブロック画像は隣接ブロックと重複部分を持つように読み出される。ブロック読み出し部110Aで、読み出す1ページの画像データの最も左の画素のX方向の位置を0、最も上の画素のY方向の位置を0とすると、分割したブロック画像のX方向とY方向の読み出し開始位置は、X方向の読み出し開始位置についてはX方向のブロック番号0、1、2、3、4、・・・に対応して、−7、89、185、281、378、・・・とY方向の読み出し開始位置についてはY方向のブロック番号0、1、・・・に対応して、−14、82となる。例えば、X方向のブロック番号が2、Y方向のブロック番号が1であれば、X方向とY方向の読み出し位置は(185、82)になる。また、読み出される各ブロック画像のサイズは、全てのブロック画像で共通である(例では、横112×縦125)。なお、ページの外周近辺で読み出されるブロック画像については、ページ外の領域より読み出す必要があり、前記のページ外の領域のデータは、白データ(ダミーデータ)で置換したり、ページ外との境界に位置する画素を使って置換する。
ブロック読み出し部110Aは、各ブロック画像について、各ブロック画像のX方向とY方向のブロック番号にしたがって、X方向とY方向の読み出し位置を変更しながら読み出し、読み出したブロック画像を前解像度変換部170に供給する。
前解像度変換部170に入力されたブロック画像(ブロック画像のサイズは横112×縦125)は、前解像度変換部170でX方向に2倍に拡大され、拡大された画像が前フィルタ処理部140に供給される。
図24は、前解像度変換部170で1つのブロック画像に対して実行される処理について示した説明図である。
図24(a)は、前解像度変換部170に供給されるブロック画像について示した説明図である。図24(b)は、前解像度変換部170で解像度の拡大処理(X方向の拡大処理)が行われたブロック画像について示した説明図である。図24(c)は、前フィルタ処理部140における画像ブロックの処理について示した説明図である。
図24(a)、図24(b)に示すように、解像度変換後のブロック画像のサイズは横224×縦125になる。また、この実施形態では、前解像度変換部170は、上述の拡大処理(X方向の解像度を2倍拡大する処理)を線形補間拡大法で行うものとする。この場合、前解像度変換部170は、ブロック画像の右端に1画素無効画素が発生する(右端の1画素は右隣りの画素を参照できないため)。
そして、図24(c)に示すように、前フィルタ処理部140に入力されたブロック画像(ブロック画像のサイズは横224×縦125)は、前フィルタ処理部140により、注目画素を中心に25×25の画素参照を行うフィルタ処理が施される。そして、前フィルタ処理部140は、そのフィルタ処理後のブロック画像を、ブロック拡大・縮小部220に供給する。図23(c)に示すように、上述のフィルタ処理により前フィルタ処理部140の処理後のブロック画像には、左端、右端、上端、下端に無効な画素が各12画素発生する。また、上述の通り、右端については前段の前解像度変換部170でも無効画素が1画素発生するため、前解像度変換部170と前フィルタ処理部140とで、あわせて13画素が無効画素となる。
ブロック拡大・縮小部220に供給されたブロック画像は、ブロック拡大縮小部120Bで拡大・縮小処理(ここでは133%拡大の処理)が行われ、拡大されたブロック画像が後フィルタ処理部150に供給される。
図25は、ブロック拡大・縮小部120Bで実行される画像ブロックに対する拡大処理の例について示した説明図である。
図25(a)は、ブロック拡大・縮小部120Bに供給されたブロック画像について示した説明図である。図25(b)は、ブロック拡大・縮小部120BでX方向について拡大処理されたブロック画像の例について示した説明図である。図25(c)は、ブロック拡大・縮小部120BでY方向について拡大処理されたブロック画像の例について示した説明図である。図25(d)は、ブロック拡大・縮小部120Bで行われるX方向の拡大処理の例について示した説明図である。図25(e)は、ブロック拡大・縮小部120Bで行われるY方向の拡大処理の例について示した説明図である。
図25(a)〜図25(c)に示すように、ブロック拡大・縮小部120Bに供給されたブロック画像(横224×縦125)は、まず、X方向拡大・縮小部121BによりX方向について拡大され(ブロック画像サイズは横260×縦125)、次にY方向拡大・縮小部122BによりY方向ついて拡大されて出力される(ブロック画像サイズは横260×縦125)。
図25(d)に示すように、X方向拡大・縮小部121Bで行われるX方向の拡大では、X方向のX方向拡大・縮小カウンタ121aが各ブロック画像のライン先頭で、当該ブロックのX方向のブロック番号に対応する拡大・縮小カウンタの初期値に設定される。X方向拡大・縮小部121Bでは、例えば、X方向のブロック番号が2であれば、X方向拡大・縮小カウンタ121aが61に設定される。
X方向拡大・縮小部121Bは、ブロック画像の左端よりカウントが開始されるX方向スキップカウンタ121cが全ブロックで共通の所定の値(ここでの例では12)と、当該ブロック画像のX方向のブロック番号に対応する微調整スキップ値(例では1)の合計値(ここでの例では12+1=13)になるまで入力画素を無視した後(前段の処理で発生したブロック画像左端の無効画素12画素と読み出し位置の都合により発生する余分な1画素は前記の動作により削除される)、及びX方向拡大・縮小カウンタ121aにしたがってライン毎に拡大が行われる。そして、X方向拡大・縮小部121Bは、X方向出力カウンタ121bが所定の値(ここでの例では、260)になるまで拡大して出力する(前記の動作により前段の処理で発生したブロック右端の無効画素12画素および余分な画素が削除される)。
Y方向拡大・縮小部122Bは、Y方向の拡大処理を行う際に、Y方向拡大・縮小カウンタ122aが各ブロックの先頭ラインで当該ブロック画像のY方向のブロック番号に対応するY方向拡大・縮小カウンタ122aの初期値に設定される。例えば、Y方向のブロック番号が1であれば、Y方向拡大・縮小カウンタ122aの初期値は98に設定される。Y方向拡大・縮小部122Bは、ブロック上端よりカウントが開始されるスキップカウンタが所定の値(例では12)になるまで入力画素を無視した後(前段の処理で発生したブロック上端の無効画素12画素は前記の動作により削除される)、Y方向拡大・縮小カウンタ122aにしたがって拡大が行われる。そして、Y方向拡大・縮小部122Bでは、Y方向出力カウンタ122bが所定の値(例では132)になるまで拡大して出力する(前記の動作により前段の処理で発生したブロック画像下端の無効画素12画素および余分な画素が削除される)。
以上のように、ブロック拡大・縮小部120Bは供給されるブロック画像を拡大するとともに、前段の前フィルタ処理部140のフィルタ処理により生じたブロック画像端部の無効画素と読み出しの都合により発生する余分な画素を削除する。そして、ブロック拡大・縮小部120Bは、各ブロック画像のサイズを同じ大きさにして出力する。そして、ブロック拡大・縮小部120Bから出力されるブロック画像は後フィルタ処理部150に供給される。
図26は、後フィルタ処理部150、後解像度変換部180、及びブロックカット処理部160によるブロック画像の処理について示した説明図である。
図26(a)は、後フィルタ処理部150に供給されるブロック画像について示した説明図である。図26(b)は、後フィルタ処理部150で後フィルタ処理されたブロック画像について示した説明図である。図26(c)は、後解像度変換部180により解像度変換されたブロック画像について示した説明図である。図26(d)は、ブロックカット処理部160により一部がカット処理されたブロック画像について示した説明図である。
図26(a)、図26(b)に示すように、後フィルタ処理部150は、供給されたブロック画像(ブロック画像のサイズは横260×縦132)について、注目画素を中心に5×5の画素参照を行うフィルタ処理を行う。そして、後フィルタ処理部150は、そのフィルタ処理されたブロック画像を後解像度変換部180に供給する。図26(b)に示すように、後フィルタ処理部150によるブロック画像のフィルタ処理により、処理後のブロック画像には、左端、右端、上端、下端に無効な画素が各2画素発生する。
図26(c)に示すように、後解像度変換部180は、供給されたブロック画像(ブロック画像のサイズは横260×縦132)について、Y方向に2倍に拡大し、拡大さしたブロック画像を、ブロックカット処理部160に供給する。図26(c)に示すように、後解像度変換部180により解像度変換されたブロック画像のサイズは、横260×縦264になる。また、この実施形態では、後解像度変換部180は、ブロック画像について、上述の2倍拡大処理を単純拡大法により行うようにしてもよい。この場合、後解像度変換部180により拡大処理されるブロック画像で、その拡大処理に伴って無効となる画素は発生しない。なお、後解像度変換部180により拡大処理されたブロック画像の上端および下端の無効画素については、前記のY方向の拡大によって引き伸ばされるため、上端および下端で各4画素の無効画素が発生することになる。
図26(d)に示すように、ブロックカット処理部160は、供給されたブロック画像(ブロック画像のサイズは横260×縦264)について、前段の処理で発生したブロック画像端部の無効画素(ここでは、左端及び右端に各2画素、上端及び下端に各4画素)が削除(カット)される。そして、ブロックカット処理部160は、無効画素がカットされたブロック画像(ブロック画像のサイズは横256×縦256)を、ブロック書き出し部130Aに供給する。
ブロック書き出し部130Aは、第1の実施形態、第2の実施形態と同様、供給されたブロック画像をX方向とY方向に一定の間隔(X方向については256、Y方向については256)で画像メモリ60に書き込み、1ページ分の画像データG104を作成する。
(C−3)第3の実施形態の効果
第3の実施形態によれば、以下のような効果を奏することができる。
第3の実施形態の画像処理装置1Bでは、任意倍率の拡大・縮小処理(拡大・縮小処理部100B)の前後で、解像度変換や量子化処理(前解像度変換部170、後解像度変換部180、及び量子化処理部190による処理)を行う場合でも、第2の実施形態と同様に、画像メモリ60から画像データの読み出しや書き出しについては、2つの画像データ(G101、G104)の処理だけで良い。したがって、第3の実施形態の画像形成装置1Bでは、任意倍率の拡大・縮小処理の前後で、解像度変換や量子化処理を行う場合に、第2の実施形態と同様に、画像メモリ60へのアクセス量を低減して処理の高速化及び必要なメモリ容量の低減を実現することができる。言い換えると、第3の実施形態の画像処理装置1Bでは、任意倍率の拡大・縮小処理の前後で、解像度変換や量子化処理を行う場合に、像画像メモリ60で必要となるメモリ容量を小さくでき、処理を高速化できる。
また、第3の実施形態の画像処理装置1Bでは、解像度変換処理(前解像度変換部170、後解像度変換部180による処理)により、画像入力部10が出力する画像データの解像度や画像出力部50が期待する画像データの解像度に合わせて処理を行うことが可能である。
(D)第4の実施形態
以下、本発明による画像処理装置及び方法、並びに、画像形成装置の第4の実施形態を、図面を参照しながら詳述する。
(D−1)第4の実施形態の構成
図27は、本発明の第4実施形態における画像形成装置1Cの機能的構成を示すブロック図であり、上述の図17と同一又は対応する部分に同一又は対応する符号を付している。
第4の実施形態では、拡大・縮小処理部100Bが拡大・縮小処理部100Cに置き換わり、サムネイル画像出力部70が追加されている点で第3の実施形態と異なっている。そして、第3の実施形態のブロック拡大・縮小部120Cには、サイズ再変更手段としてのサムネイル縮小部200、及び再変更画像生成手段としてのサムネイル書き出し部210が追加されている点で第3の実施形態と異なっている。
例えば、本発明の画像処理装置を複合機に適用した場合を想定する。そして、当該画像処理装置で、印刷用紙(媒体)に印刷(画像形成)するための画像出力部の他に、ディスプレイ(オペレーションパネルのタッチパネルディスプレイ)等の表示装置を備える場合、スキャンした原稿のサムネイル(縮小画像)を当該ディスプレイに表示出力する構成が必要となる場合がある。この場合、当該画像処理装置ででは、印刷用紙に印刷するために必要な画像データの他に、ディスプレイに表示するためのサムネイルの画像データも生成する必要がある。
そこで、第4の実施形態の画像処理装置1Cは、画像出力部50とは異なる形式の画像データを生成して出力するための構成要素として、サムネイル縮小部200、サムネイル書き出し部210、及びサムネイル画像出力部70を有している。
ここでは、例として、画像出力部50は、印刷用紙(媒体)に印刷(画像形成)する画像形成手段として機能するものとする。そして、サムネイル画像出力部70は、サムネイル画像(画像出力部50に供給される画像データG104に対応する縮小画像)をディスプレイに表示出力する表示出力手段として機能するものとして説明する。すなわち、サムネイル画像出力部70では、画像出力部50で出力される画像よりも小さいサイズに縮小された画像が出力されるものとして説明する。
サムネイル縮小部200は、ブロックカット処理部160から供給されるブロック画像についてブロック画像毎にサムネイル用の縮小を行い、縮小を行ったブロック画像をサムネイル書き出し部210に供給する。
サムネイル書き出し部210は、サムネイル縮小部200で縮小されたブロック画像を、画像メモリ60に順次書き込み、1画面分の画像データG201として生成する。
サムネイル書き出し部210に入力されるブロック画像は、前段の処理(この実施形態ではブロック処理部230)の動作により、ブロック間で重複する画素がカットされる。また、サムネイル書き出し部210に供給される各ブロック画像の幅と高さは一定となっているので、サムネイル書き出し部210は、X方向とY方向に一定の間隔でブロック画像を画像メモリ60に書き出すことで1ページ分の画像データG201を作成することができる。
サムネイル画像出力部70としてのディスプレイは、例えば、コピー機や複合機等のオペレーションパネル等に用いられる表示装置であり、サムネイル書き出し部210が書き出した画像データG201を画像メモリ60より読み出し、画像データG201に対応するサムネイル画像を表示出力する。
図28は、サムネイル画像出力部70のディスプレイに表示される画像データG201に基づく画像について示した説明図である。
なお、ここでは、例えば、ユーザ操作(例えば、画像処理装置1Cが備えるサムネイル画像出力部70としてのディスプレイ等を含むオペレーションパネルに対する操作)に応じて、ブロック拡大・縮小部120Cに設定される画像データG104の倍率を受付けるようにしてもよい。
図28(a)、図28(b)、図28(c)は、それぞれ、ブロック拡大・縮小部120Cに設定する倍率(例えば、ユーザに指定された倍率)を100%、41%、133%とした場合に、サムネイル画像出力部70に表示される画像データG201の画像について示している。
すなわち、サムネイル縮小部200では、入力されるブロック画像を、サムネイル画像出力部70のディスプレイのサイズ(垂直方向及び水平方向の画素数)に応じた解像度に縮小する(通常ディスプレイに表示される画像の解像度は印刷に用いられる画像の解像度より低いため縮小のみ行われる)。サムネイル縮小部200のディスプレイの解像度は、適用するデバイスによって異なるため、サムネイル縮小部200では、任意倍率の縮小を行う必要が生じる。しかし、サムネイル縮小部200が、完全に任意の倍率での縮小を行うことに対応してしまうと、出力するブロック画像のサイズがブロック画像毎に変わったり、前段のブロック拡大縮小部120B同様にブロック毎に拡大・縮小カウンタの初期値等が必要となる等複雑な構成(例えば、ブロック拡大・縮小部120Bと同様の公正)が必要となる。そのため、サムネイル縮小部200では、下記のように、入力されるブロック画像のサイズに基づいて、倍率の分母を決定し、決定した倍率の分母と目標とする倍率(ユーザから設定を受付けた倍率、すなわち、ブロック拡大・縮小部120Cに設定される倍率)より倍率の分子を決定することが好ましい。
なお、以下の(66)式〜(69)式において、xbase_t、xratio_tは、それぞれサムネイル縮小部200に適用されるX方向の倍率の分母と分子の値を表している。また、ybase_t、yratio_tは、それぞれサムネイル縮小部200に適用されるY方向の倍率の分母と分子の値を表している。さらに、xscale、yscaleは、それぞれ、サムネイル縮小部200で目標となるX方向の倍率、Y方向の倍率を示している。ここでは、xscale、yscaleに、それぞれサムネイル縮小部200に供給されるブロック画像の解像度(すなわち、画像出力部50に供給される画像データG104の解像度)と、サムネイル画像出力部70のディスプレイの解像度との比率に基づく倍率が適用されるものとする。
(サムネイル縮小部200のX方向の倍率分母xbase_t)=
(サムネイル縮小部200に入力されるブロック幅) …(66)
(サムネイル縮小部200のX方向の倍率分子xratio_t)=
(サムネイル縮小部200のX方向の倍率分母xbase_t)
×(目標とするX方向の倍率xscale) …(67)
(サムネイル縮小部200のY方向の倍率分母ybase_t)=
(サムネイル縮小部200に入力されるブロック高さ) …(68)
(サムネイル縮小部200のY方向の倍率分子yratio_t)=
(サムネイル縮小部200のY方向の倍率分母ybase_t)
×(目標とするY方向の倍率yscale) …(69)
サムネイル縮小部200では、上記の倍率を適用することで、ブロック毎の拡大・縮小カウンタの初期値は全てのブロックで一定となる。したがって、サムネイル縮小部200は、X方向の縮小カウンタとY方向の縮小カウンタのみの簡易な構成でX方向とY方向について各々任意倍率に近い縮小処理を行うことができる(サムネイル画像は、ユーザに対して補助的な表示を行うのが目的であり、前記の表示装置が期待する解像度に近い解像度に縮小できれば支障がない)。
(D−2)第4の実施形態の動作
以下では、第4の実施形態の画像形成装置1Cの動作について、第3の実施形態の動作との差異を中心に説明する。第4の実施形態では、上述の通り、第3の実施形態の画像形成装置1Bに、サムネイル画像の処理構成(サムネイル縮小部200、サムネイル書き出し部210、及びサムネイル画像出力部70)が追加されただけであるので、これらの構成要素の動作についてのみ説明する。
まず、サムネイル縮小部200で行われるX方向とY方向の縮小処理の詳細について、図29のフローチャートを用いて説明する。
図29のフローチャートは、サムネイル縮小部200が行うブロック画像の1ライン分のデータについてのX方向の縮小処理を説明するものである。なお、図29において、xcnt_tは、サムネイル縮小部200の処理で用いられる縮小カウンタである。
まず、ステップS701では、サムネイル縮小部200は、ライン先頭で縮小カウンタxcnt_tを0にリセットする。
ステップS702で、サムネイル縮小部200は、縮小カウンタxcnt_tの値が倍率の分子(xratio_t)の値より小さいか判定を行い、小さければステップS703へ進み画素の出力を行い、それ以外の場合は画素の出力を行わずにステップS705へ進む。
ステップS703では、サムネイル縮小部200は、画素の出力を行い、縮小カウンタxcnt_tに倍率の分母値xbase_tを加算し、ステップS704へ進む。サムネイル縮小部200が出力する画素(画素値)は、例えば、単純縮小法であれば現画素となる。
ステップS704では、サムネイル縮小部200は、上述のSステップ703で更新された縮小カウンタxcnt_tの値が倍率の分子の値xbase_t以上であるか判定を行い、xbase_t以上であればステップS705(入力画素位置の更新)へ進み、それ以外の場合はステップS706へ進む。
ステップS705では、サムネイル縮小部200は、縮小カウンタxcnt_tの値から倍率の分子xrasio_tの値を減算し、入力画素位置を更新し(現画素の右隣りの画素を次の現画素とし)、ステップS706へ進む。
ステップS706では、サムネイル縮小部200は、1ライン終了したか判定(処理中のラインの全ての画素を出力したか否かの判定)を行い、1ライン終了した場合は1ライン処理を終了し(次の入力画素ラインの処理を行う)、達していない場合は上述のステップS702に戻る。
以上のように、サムネイル縮小部200は、1つのブロック画像の全てのX方向のラインについて縮小処理を行う。サムネイル縮小部200は、同様の処理を各ブロック画像のX方向及びY方向について行い、各ブロック画像を縮小して出力することになる。
次に、ブロック拡大・縮小部120Cの全体の具体的動作について説明する。
以下の動作説明では、第3の実施形態と同様に、幅3840ピクセル、高さ5120ピクセルの画像データG101(横300DPI×縦600DPI)を133%の倍率で拡大する場合と41%の倍率で縮小する場合を例に挙げ説明する。
なお、以下では、また、xbase_t、xratio_tは、それぞれX方向の倍率の分母と分子の値を表すものとする。また、ybase_t、yratio_tは、それぞれY方向の倍率の分母と分子の値を表すものとする。
また、以下の動作説明では、第3の実施形態と同様、前フィルタ処理部140では注目画素を中心に25×25の画素参照を行うフィルタ処理が行われ、後フィルタ処理部150では注目画素を中心に5×5の画素参照を行うフィルタ処理が行われ、前解像度変換部170ではX方向の解像度を2倍にする処理が行われ、後解像度変換部180ではY方向の解像度を2倍にする処理が行われ、量子化処理部190では画素当たり8bitの画像データを画素当たり1bitの画像データに変換する処理が行われるもとする。また、以下の動作説明では、前フィルタ処理部140、ブロック拡大・縮小部120B、後フィルタ処理部150、後解像度変換処理部330は、それぞれ、288、264、262、262画素分の画像データ(画素値)を保持するラインメモリを備え、各処理部における出力可能なブロック幅は前記の値が上限であるものとする。
なお、拡大・縮小処理部100Cのサムネイル縮小部200、サムネイル書き出し部210以外の処理部に必要なパラメータの算出や動作については、第3の実施形態と同様であるので説明を省略する。
また、以下では、拡大・縮小処理部100Cのサムネイル縮小部200およびサムネイル書き出し部210の動作について、サムネイル画像出力部70の期待する画像データの解像度(ディスプレイの仕様としての解像度)が横60DPI、縦60DPIであった場合を例に挙げ説明する。
ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル縮小部200に供給されるブロック画像サイズ(ブロックカット処理部160から出力されるブロック画像のサイズ)は、横256×縦256(上述の図22(a)に記載の通り)となる。また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、サムネイル縮小部200に供給されるブロック画像サイズは、横96×縦256(上述の図22(b)に記載の通り)となる。
ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル縮小部200で適用される倍率の分母は、X方向の倍率の分母xbase_tが256、Y方向の倍率の分母ybase_tが256となる。また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、サムネイル縮小部200で適用される倍率の分母は、X方向の倍率の分母xbase_tが96、Y方向の倍率の分母ybase_tが256となる。
ここでは、上述の通りサムネイル縮小部200に供給されるブロック画像の解像度は横600DPI、縦1200DPIである。したがって、この場合、サムネイル縮小部200で行う縮小のX方向の目標倍率xscaleは0.1、Y方向の目標倍率yscaleは0.05となる。
したがってここでは、ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル縮小部200で適用されるX方向の倍率の分子xratio_tは256×0.1=25、Y方向の倍率の分子yratio_tは256×0.05=12となる。また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、X方向の倍率の分子xratio_tは96×0.1=9、Y方向の倍率の分子yratio_tは256×0.05=12となる。
したがって、ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル縮小部200で行うX方向の縮小の倍率の値(xratio_t/xbase_t)が0.09765625、Y方向の縮小の倍率の値(yratio_t/ybase_t)が0.046875となる。また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、サムネイル縮小部200で行うX方向の縮小の倍率の値(xratio_t/xbase_t)が0.09375、Y方向の縮小の倍率の値(yratio_t/ybase_t)が0.046875となる。
したがって、ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル縮小部200が出力するブロック画像サイズは、横25×縦12となる。
また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、サムネイル縮小部200が出力するブロック画像サイズは、横9×縦12となる。
そして、サムネイル縮小部200が出力するブロック画像が、サムネイル書き出し部210に供給される。
ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル書き出し部210は、X方向に25、Y方向に12の一定の間隔で画素値(各ブロック画像の画素値)をメモリ60に書き出し、1ページ分のサムネイル表示用の画像データG201を作成する。また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、サムネイル書き出し部210は、X方向に9、Y方向に12の一定の間隔で画素値(各ブロック画像の画素値)をメモリ60に書き出し、1ページ分のサムネイル表示用の画像データG201を作成する。
以上の処理により、ブロック拡大・縮小部120Cで133%の拡大処理が行われる場合、サムネイル表示用の画像データG201の画像は、横998×縦639の画像となる。また、ブロック拡大・縮小部120Cで41%の縮小処理が行われる場合、サムネイル表示用の画像データG201の画像は、横296×縦197の画像となる。
(D−3)第4の実施形態の効果
第4の実施形態によれば、以下のような効果を奏することができる。
第4の実施形態の画像処理装置1Cでは、印刷用の画像データとサムネイル用の画像データなど複数の異なる解像度の画像データを作成する場合においても、各々を作成するためだけにメモリ60から、画像データを読み込んで処理する必要がない。
例えば、第1〜第3の実施形態において、画像出力部50とは別に、画像出力部50が期待する画像データと解像度等が異なる画像データを期待する画像出力部(例えば、サムネイル画像出力部70)があった場合、各ブロック画像の処理部は、その解像度等が異なる画像出力部が期待する画像データに係るブロック画像についても処理する必要がある。しかし、第4の実施形態の画像処理装置1Cでは、ブロックカット処理部160までの段は、画像出力部50とサムネイル画像出力部70とで共有しているため、それ以後の段の処理部(サムネイル縮小部200、サムネイル書き出し部210)のみを備えることにより、サムネイル画像出力部70が期待する解像度の画像データを生成することができる。
したがって、画像処理装置1Cでは、複数の異なる解像度の画像データを作成する場合において、画像メモリ60で必要となるメモリ容量の低減や、処理の高速化を実現することができる。
また、画像処理装置1Cにおいて、作成されるサムネイル用の画像データは、ユーザの倍率指定等の処理結果が反映されたデータとなるので、ユーザが取得する印刷等の内容を適切に表示出力することができる。
(D)他の実施形態
本発明は、上記の各実施形態に限定されるものではなく、以下に例示するような変形実施形態も挙げることができる。
(D−1)上記の各実施形態の画像形成装置としては、例えば、コピー機、複合機、FAX等の画像データに対して任意倍率を含む画像処理を行う装置に適用可能である。
また、本発明の画像処理装置で処理した画像を出力する手段は、印刷等の画像形成に限定されず、ディスプレイに表示出力したり、電子データとして外部装置(例えばホストPC等)や記録媒体(例えば、CD−ROMやHDD等)に記録するようにしてもよい。例えば、上記の各実施形態の画像形成装置に搭載された画像処理装置は、画像形成装置に限定されず、他の画像処理を行う装置(例えば、デジタルカメラ、スキャナ、デジタルビデオレコーダ等)に適用するようにしてもよい。
(D−2)上記の各実施形態の画像形成装置(画像処理装置)では、画像をブロック画像に分割する際に、X方向及びY方向について拡大・縮小処理を行っているが、いずれか一方の方向(X方向又はY方向)に対してのみ拡大・縮小処理を行うようにしてもよい。その場合、当該画像形成装置(画像処理装置)では、拡大・縮小処理を行う方向(X方向又はY方向)についてのみブロック画像単位の分割を行うようにしてもよい。(D−3)上記の各実施形態の画像形成装置(画像処理装置)において、前フィルタ処理部及び又は後フィルタ処理部については、省略するようにしてもよい。
(D−3)第3の実施形態では、前解像度変換部170、後フィルタ処理部150、及び量子化処理部190を有しているが、これらのうち一部を省略するようにしてもよい。