以下、本発明を適用した実施形態を、添付図面を参照しながら説明する。
先ず、本発明の第1の実施形態について説明する。図1は、第1の実施形態に係る画像処理装置100の構成を示す図である。図1に示すように、第1の実施形態に係る画像処理装置100は、CPU回路部110、画像読み取り部120、画像処理部130及びプリンタ部140を備える。
画像読み取り部120は、レンズ122、CCDセンサ124及びアナログ信号処理部126を備える。CCDセンサ124は、レンズ122を介して原稿150の光学像が結像され、R(Red)、G(Green)及びB(Blue)のアナログ電気信号に変換する。
CCDセンサ124から出力された上記アナログ電気信号である画像情報は、アナログ信号処理部126に入力され、R、G及びBの色毎に補正処理等が行われた後にアナログ/デジタル変換(A/D変換)される。これにより、デジタル化されたフルカラー信号(以下、画像データと称す)が生成される。画像読み取り部120により生成された画像データは、画像処理部130に入力される。画像処理部130は、入力した画像データに対し、後述する入力補正処理、空間フィルタ処理、色空間変換、濃度補正処理及び中間調処理を施した後、プリンタ部140に出力する。プリンタ部140は、例えば、インクジェットヘッドやサーマルヘッド等を使用したラスタプロッタ等の印刷出力部(図示せず)を備えており、入力された画像データに基づいて紙上に画像を記録する。
CPU回路部110は、演算制御用のCPU112、固定データやプログラムを格納するROM114、データの一時保存やプログラムのロードに使用されるRAM116、及び、外部記憶装置118を備える。CPU回路部110は、画像読み取り部120、画像処理部130及びプリンタ部140を制御し、画像処理装置100のシーケンスを統括的に制御する。外部記憶装置118は、画像処理装置100の処理を制御するためのパラメータやプログラムを記憶するディスク等の記憶媒体であり、RAM116に一時保存されるデータやプログラム等は、外部記憶装置118からロードされる構成としてもよい。
図2は、図1に示す画像処理部130の主要な回路構成である画像処理コントローラ200の構成を示す図である。図2に示すように、画像処理コントローラ200は、入力インタフェース210、入力補正回路220、空間フィルタ回路230、色空間変換回路240、濃度補正回路250、中間調処理回路260及び出力インタフェース270を備える。
入力インタフェース210は、バス205を介してアナログ信号処理部126から画像データを入力する。入力補正回路220は、入力インタフェース210から画像データ215を入力する。なお、画像データ215は、輝度信号R、G、Bで構成されるデータである。入力補正回路220は、原稿150を読み取るセンサの特性のばらつきや原稿照明用ランプの配光特性を補正するための処理を、画像データ215に対して行う。
空間フィルタ回路230は、入力補正回路220から画像データ(輝度信号R、G、B)225を入力する。そして、空間フィルタ回路230は、入力した画像データ225に対して、平滑化やエッジ強調といった局所画像処理を複数回行う。
色空間変換回路240は、空間フィルタ回路230から画像データ(輝度信号R、G、B)235を入力する。そして、色空間変換回路240は、画像データ(輝度信号R、G、B)235を、濃度信号C(Cyan)、M(Magenta)、Y(Yellow)、K(Black)で構成される画像データに変換する。
濃度補正回路250は、色空間変換回路240から画像データ(濃度信号C、M、Y、K)245を入力する。そして、濃度補正回路250は、画像データ(濃度信号C、M、Y、K)245に対して濃度補正を行う。即ち、濃度補正回路250は、後段の中間調処理回路260で2値化されたときに濃度変化が起きないように、中間調処理の特性を考慮して予め濃度補正を行うものである。
中間調処理回路260は、濃度補正回路250から画像データ(濃度信号C、M、Y、K)255を入力する。そして、中間調処理回路260は、画像データ(濃度信号C、M、Y、K)255に対してスクリーン処理を行い、2値の中間調表現に変換する。これにより、2値の画像データ(印字信号C、M、Y、K)265が出力インタフェース270及びバス275を経由してプリンタ部140に出力される。
本実施形態では、1枚の画像データを複数のバンド(帯状)領域に分割し、各バンド領域を逐次的にバンドメモリに割り当てる。以下、この処理について説明する。
家庭用プリンタのような低コストの機器では、システムのメインメモリ(図1のRAM116に相当)の容量が小さく、1枚の画像データ全体をメインメモリに記憶できない場合が多い。そのため、図3(a)〜(d)に示すように、1枚の画像データ300全体を帯状(短冊状)に分割して、逐次的にその領域のみメインメモリに展開して各種の画像処理を行うことが一般的である。
以下では、この分割された細長い領域をバンド領域と称し、バンド領域が展開される記憶領域をバンドメモリと称し、バンド領域に分割する処理をバンド分割と称す。バンドメモリは、メインメモリ内に確保されると決まっているわけではなく、システム上のどの記憶領域に確保してもよいが、本実施形態では、説明を簡潔にするためにバンドメモリをメインメモリであるRAM116内に確保する場合を例に挙げて説明する。
本実施形態では、分割される前の画像データの座標系として、主走査方向及び副走査方向を定義し、分割された後のバンド領域の座標系として、長さ方向及び高さ方向を定義し、バンド領域を長さ×高さで表現する。バンド領域の長さは、必ず画像データの主走査方向の長さ及び副走査方向の高さの何れかの値となり、バンド領域の高さは任意の値となる。
先ず、画像処理部130は、図3(a)に示す第1のバンド領域301を、RAM116上のバンドメモリに展開させて画像処理を行う。次に、画像処理部130は、図3(b)に示す第2のバンド領域302を、第1のバンド領域301が展開されたバンドメモリに上書き展開して画像処理を行う。次に、画像処理部130は、図3(c)に示す第3のバンド領域303を、第2のバンド領域302が展開されたバンドメモリに上書き展開して画像処理を行う。最後に、画像処理部130は、図3(d)に示す第4のバンド領域304を、第3のバンド領域303が展開されたバンドメモリに上書き展開して画像処理を行う。
図3(a)〜(d)に示すように、バンド領域301〜304の長さは同じであるが、高さは同じである必要性はない。また、RAM116上におけるバンドメモリは、最も大きいバンド領域(図3の場合、第1〜第3のバンド領域301〜303)に応じて決定される。
上述したように、RAM116内のバンドメモリは1つの記憶領域に限定されるわけではない。例えば2つのバンドメモリA、BをRAM116内に確保してもよい。このようにした場合、先ず、画像処理部130は、第1のバンドメモリAに第1のバンド領域301を展開して第1の画像処理を行う。次に、画像処理部130は、第1のバンド領域301を第1のバンドメモリAから第2のバンドメモリBに移し、第1のバンドメモリAに第2のバンド領域302を展開させる。次に、画像処理部130は、第1のバンド領域301に対して第2の画像処理を行いながら、並列に第2のバンド領域302に対して第1の画像処理を行う。このように、バンド領域単位に画像データを分割して画像処理を行うことにより、パイプライン的な画像処理が可能となる。
バンド領域に対する画像処理は、RAM116から画像処理部130に対してバンド領域が投入され、バンド領域に含まれる画素データに対して各種画像処理が実行されることで完了する。しかし、RAM116から画像処理部130へのデータ転送には、少なくとも数サイクル必要となる。そのため、画素データの送信毎に数サイクル必要となると、バンド領域全体を処理するのにかかる時間が大幅に増加してしまう。そこで、画像処理部130にバンド領域の一部を記憶させておき、画像処理部130は、記憶しているバンド領域に対して各種画像処理を実行していく。これにより、データ転送にかかるレイテンシを低減する。本実施形態では、図4に示すように、第1のバンド領域410を長さ方向にM個に分割して得られる各ブロック領域411〜41Mを画像処理部130に記憶させながら、各種画像処理を実行していく。
次に、画像処理部130に記憶されたブロック領域に対する画像処理について説明する。画像処理部130は、記憶されたブロック領域に対して、入力補正回路220、空間フィルタ回路230、色空間変換回路240、濃度補正回路250及び中間調処理回路260における各処理を実行して、一連の画像処理を終える。このうち、入力補正回路220、色空間変換回路240、濃度補正回路250及び中間調処理回路260では、入力画像データと出力画像データとの画素数は同じである。一方、空間フィルタ回路230では、ブロック領域に対して空間フィルタ処理を複数回適用するため、入力画像データに対して出力画像データの長さ及び高さが小さくなる。従って、空間フィルタ回路230には、出力結果が得られるよう十分な画素数を持つブロック領域を入力として与える必要がある。
ここで、バンド領域を分割する際、図4に示すように、長さ方向に単純に分割して得られたブロック領域410〜41Mに空間フィルタ処理を実行すると、出力画像データが入力したブロック領域より小さくなる。このため、図5に示すように、各ブロック領域の処理結果511〜51Mが連続的に並ばず、バンド領域全体に対する出力結果が正しく得られない。そこで、特許文献1に開示されるように、処理対象のブロック領域に隣接するブロック領域の一部をオーバーラップ領域として付加して空間フィルタ処理を実行することにより、出力画像データを連続的に並べることを可能にする手法がある。しかし、オーバーラップ領域を付加すると、RAM116と画像処理部130との間で、処理対象のブロック領域に加えてオーバーラップ領域も転送することになり、画像データの通信にかかる時間が増加する。さらに、画像処理部130にオーバーラップ領域を保持するためのメモリ容量を追加する必要があり、回路規模も増大する。特に、空間フィルタ回路230において各ブロック領域に対して実行される空間フィルタ処理回数が増えると、オーバーラップ領域が増えるため、この問題が顕著に表れてくる。以下、これらの課題を解決する、本実施形態における空間フィルタ回路230の構成について詳細に説明する。
空間フィルタ回路230は、各ブロック領域に対して空間フィルタ処理を複数回適用する。以下では、説明を簡略化するため、3×3画素の空間フィルタ処理を3回行う場合について説明するが、本発明に適用可能な処理回数及び処理内容を限定するものではない。
図6は、空間フィルタ回路230の詳細な構成を示す図である。図6に示すように、空間フィルタ回路230は、制御部610、中間データバッファ620、ブロックデータバッファ630及び空間フィルタ演算部640を備える。以下、図6を参照しながら、空間フィルタ回路230の動作について説明する。
制御部610は、処理対象のブロック領域を入力すると、これをブロックデータバッファ630に格納する。ブロックデータバッファ630におけるブロック領域の格納が完了すると、空間フィルタ演算部640は、ブロックデータバッファ630からブロック領域を入力し、ブロック領域に対して空間フィルタ処理を行う。空間フィルタ演算部640の処理結果(以下、空間フィルタ処理結果と称す)は、ブロックデータバッファ630に格納される。同時に、空間フィルタ演算部640は、次のブロック領域を処理する際に必要となる中間データを中間データバッファ620に格納する。このようにして1段目の処理が完了する。
続けて、2段目の処理では、空間フィルタ演算部640は、ブロックデータバッファ630に格納されている1段目の空間フィルタ処理結果を入力し、1段目の空間フィルタ処理結果に対して空間フィルタ処理を行う。そして、空間フィルタ演算部640は、2段目の空間フィルタ処理結果をブロックデータバッファ630に格納するとともに、次のブロック領域を処理する際に必要となる中間データを中間データバッファ620に格納する。この処理が繰り返されることにより、2段目の処理、3段目の処理が完了する。
図4においてn=1以降のブロック領域411〜41Mを処理する際は、空間フィルタ演算部640への入力として、ブロックデータバッファ630に格納されている画像データに加え、中間データバッファ620に格納されている中間データも選択される。また、ブロックデータバッファ630は、空間フィルタ演算部640に入力される画像データや空間フィルタ処理結果を保持するBBa631及びBBb632を備えている。どちらのデータをBBa631又はBBb632で保持するかは、処理段数に応じて切り替えられる。
また、中間データバッファ620は、処理する回数分の中間データを保持できるよう、1段目の処理時に得られる中間データを保持するTMa621、2段目の処理時に得られる中間データを保持するTMb622、及び、3段目の処理時に得られる中間データを保持するTMc623を備える。各中間データは、空間フィルタ処理を実行した回数に応じて選択される。以上の動作は、制御部610によって包括的に制御される。
空間フィルタ演算部640によるバンド領域に対する空間フィルタ処理では、図4のn=0のブロック領域410に初期化工程が適用され、n=1〜Mのブロック領域411〜41Mに処理工程が順に適用される。以下では、n=0のブロック領域410を初期化工程領域と称し、n=1〜Mのブロック領域411〜41Mを処理工程領域と称す。以下、初期化工程、処理工程及びバンド分割について詳細に説明する。
初期化工程では、空間フィルタ演算部640において、初期化工程領域410に対して空間フィルタ処理を複数回適用するとともに、処理工程で必要となる中間データを中間データバッファ620に格納する処理が行われる。
以下、図7を参照しながら、初期化工程領域410に対する初期化工程について説明する。図7(a)の矩形701は、初期化工程領域を示している。空間フィルタ演算部640は、初期化工程領域701に対して空間フィルタ処理を行うことにより、図7(b)の1段目の空間フィルタ処理結果702を得る。同時に、空間フィルタの長さをfw画素とした場合、初期化工程領域701の右から(fw−1)画素中に含まれる領域701aが中間データaとして中間データバッファ620内のTMa621に保持される。以上が1段目の処理である。
次に、空間フィルタ演算部640は、1段目の空間フィルタ処理結果702に対して空間フィルタ処理を行うことにより、図7(c)の2段目の空間フィルタ処理結果703を得る。同時に、1段目の空間フィルタ処理結果702の右から(fw−1)画素中に含まれる領域702aが中間データbとして中間データバッファ620内のTMb622に格納される。以上が2段目の処理である。最後に、2段目の空間フィルタ処理結果703が中間データcとして中間データバッファ620内のTMc623に格納される。以上が3段目の処理である。
次に、図8のフローチャートを参照しながら、初期化工程について説明する。ステップS801において、空間フィルタ演算部640は、処理段数を示す変数rnに1をセットする。ステップS802において、空間フィルタ演算部640は、初期化工程に必要となる初期化工程領域をRAM116から取得する。
ステップS803において、空間フィルタ演算部640は、変数rnが所定の値に達したか否か、即ち、処理段数が所定の処理段数に達したか否かを判定する。変数rnが所定の値に達した場合、初期化工程は終了する。一方、変数rnが所定の値に達していない場合、処理はステップS804に移行する。
ステップS804において、空間フィルタ演算部640は、使用する中間データバッファ620及びブロックデータバッファ630の記憶領域を選択する。即ち、変数rnが1である場合、空間フィルタ演算部640は、図9の状態1に示すように、初期化工程領域701を格納する記憶領域としてBBa631を選択し、初期化工程領域701をBBa631に格納する。また、空間フィルタ演算部640は、図7の中間データa701aを格納する記憶領域としてTMa621を選択し、また、空間フィルタ演算部640は、初期化工程領域701に対する空間フィルタ処理結果を格納する記憶領域としてBBb632を選択する。
変数rnが2である場合、空間フィルタ演算部640は、中間データb702aを格納する記憶領域としてTMb622を選択し、1段目の空間フィルタ処理結果702を格納する領域としてBBb632を選択する。また、空間フィルタ演算部640は、2段目の空間フィルタ処理結果703を格納する記憶領域としてBBa631を選択する。
このようにブロックデータバッファ630に関しては、処理段数が1増える毎に、入力用の機能と出力用の機能とが切り替えられる。中間データバッファ620に関しては、処理段数が1増える毎に、処理段数に対応する中間データバッファ620が選択される。
ステップS805において、空間フィルタ演算部640は、ブロックデータバッファ630に格納されているデータに対して、rn段目の処理を行う。即ち、1段目の処理において、空間フィルタ演算部640は、BBa631に格納されている初期化工程領域701に対して空間フィルタ処理を行うことにより、1段目の空間フィルタ処理結果702を得る。そして、空間フィルタ演算部640は、図9の状態2に示すように、ステップS804で選択したBBb632に1段目の空間フィルタ処理結果702を格納するとともに、同じくステップS804で選択したTMa631に中間データa701aを格納する。
2段目の処理において、空間フィルタ演算部640は、BBb632に格納されている1段目の空間フィルタ処理結果702に対して空間フィルタ処理を行うことにより、2段目の空間フィルタ処理結果703を得る。そして、空間フィルタ演算部640は、図9の状態3に示すように、ステップS804で選択したBBa631に2段目の空間フィルタ処理結果703を格納する。このとき、既にBBa631には初期化工程領域701が格納されているが、空間フィルタ演算部640は、これを破棄して、2段目の空間フィルタ処理結果703を上書する。また、 空間フィルタ演算部640は、同じくステップS804で選択したTMb622に対して図7の中間データb702aを格納する。
3段目以降の処理も同様である。初期化工程では、初期化工程領域701に対して繰り返し空間フィルタ処理が行われるため、rn段目の空間フィルタ処理結果(例えば、2段目の空間フィルタ処理結果703)の画像データの大きさは、初期化工程領域701に比べて小さくなっている。例えば、3段目の処理において、2段目の空間フィルタ処理結果703が空間フィルタ処理を行うのに必要な画像データの大きさを有していない場合がある。このとき、空間フィルタ演算部640は、2段目の空間フィルタ処理結果703に対して空間フィルタ処理を行わず、図9の状態4に示すように、2段目の空間フィルタ処理結果703を中間データc703aとしてステップS804で選択したTMc633に格納する。その後、ステップS806において、空間フィルタ演算部640は、変数rnに1を加算し、処理はステップS803に移行する。
以上が初期化工程の手順となる。初期化工程では、この手順に従うことにより、中間データバッファ内のTMa621〜TMc623に処理工程で必要となる中間データが格納される。
次に、処理工程について説明する。処理工程では、中間データバッファ620に格納されている中間データの更新を行いつつ、処理工程領域と中間データとを組み合わせた画像データに対して空間フィルタ処理を複数回適用することにより、空間フィルタ処理結果を出力する。
n個目の処理工程領域に対する処理工程において、空間フィルタ演算部640は、n個目の処理工程領域とn−1個目の処理工程領域の処理で更新された中間データとを組み合わせた画像データに対して、空間フィルタ処理を複数回適用する。同時に、空間フィルタ演算部640は、中間データを、n+1個目の処理工程領域の処理工程で必要となる中間データに更新する。n個目の処理工程領域は、第1のブロック領域の例であり、n−1個目の処理工程領域(初期化処理工程領域)は、第2のブロック領域の例である。
以下、図10を参照しながら、処理工程領域411〜41Mに対する処理工程について説明する。図10は、処理工程の一例を説明するための図である。図10(a)の矩形1001は、n個目の処理工程領域を示しており、1001bは、TMa621に格納されているn−1個目の処理工程で得られた中間データを示している。
先ず、空間フィルタ演算部640は、1段目の処理を行う。即ち、空間フィルタ演算部640は、中間データ1001bを処理工程領域1001に隣接するよう組み合わせた画像データに対して空間フィルタ処理を行うことにより、図10(b)の1段目の空間フィルタ処理結果1002を得る。同時に、空間フィルタ演算部640は、空間フィルタの長さをfw画素とした場合、処理工程領域1001の右から(fw−1)画素中に含まれる領域1001aを中間データaとして中間データバッファ620内のTMa621に格納する。
次に、空間フィルタ演算部640は2段目の処理を行う。即ち、空間フィルタ演算部640は、1段目の処理と同様に、1段目の空間フィルタ処理結果1002と中間データb1002bとを組み合わせた画像データに対して空間フィルタ処理を行うことにより、図10(c)に示す2段目の処理結果1003を得る。同時に、空間フィルタ演算部640は、1段目の処理結果1002の右から(fw−1)画素中に含まれる領域1002aを中間データbとして中間データバッファ620内のTMb622に格納する。
次に、空間フィルタ演算部640は3段目の処理を行う。即ち、空間フィルタ演算部640は、1段目及び2段目の処理と同様に、2段目の空間フィルタ処理結果1003と中間データc1003bとを組み合わせた画像データに対して空間フィルタ処理を行うことにより、図10(d)に示す3段目の処理結果1004を得る。同時に、空間フィルタ演算部640は、2段目の処理結果1003の右から(fw−1)画素中に含まれる領域1003aを中間データcとして中間データバッファ620内のTMc623に格納する。
最後に、3段目の処理結果1004がn個目の処理工程領域に対して空間フィルタ処理を複数回適用した結果となり、空間フィルタ演算部640からRAM116等に出力される。
次に、図11のフローチャートを参照しながら、処理工程について説明する。ステップS1101において、空間フィルタ演算部640は、処理段数を示す変数rnに1をセットする。ステップS1102において、空間フィルタ演算部640は、処理工程領域を取得する。
ステップS1103において、空間フィルタ演算部640は、変数rnが所定の値に達したか否か、即ち、処理段数が所定の処理段数に達したか否かを判定する。変数rnが所定の値に達した場合、処理はステップS1107に移行する。一方、変数rnが所定の値に達していない場合、処理はステップS1104に移行する。
ステップS1107において、制御部610は、ブロックデータバッファ630に保持された空間フィルタ処理結果を出力する。ステップS1104において、空間フィルタ演算部640は、利用する中間データバッファ620及びブロックデータバッファ630の記録領域を選択する。即ち、1段目の処理において、空間フィルタ演算部640は、処理工程領域を格納する記憶領域としてBBa631を選択し、図12の状態1に示すように、処理工程領域をBBa631に格納する。また、空間フィルタ演算部640は、1段目の処理後に中間データを格納する領域としてTMa621を選択し、1段目の空間フィルタ処理結果を格納する領域としてBBb632を選択する。2段目の処理において、空間フィルタ演算部640は、2段目の処理後に中間データを格納する領域としてTMb622を選択し、2段目の空間フィルタ処理結果を格納する領域としてBBa631を選択する。
その後、処理はステップS1105に移行する。ステップS1105において、空間フィルタ演算部640は、中間データバッファ620に格納されている中間データと、ブロックデータバッファ630に格納されている処理工程領域とを組み合わせた画像データに対してrn段目の処理を行う。即ち、1段目の処理において、空間フィルタ演算部640は、BBa631に格納されている処理工程領域1001と中間データ1001bとを組み合わせた画像データに対して空間フィルタ処理を行うことにより、1段目の空間フィルタ処理結果1002を得る。そして、空間フィルタ演算部640は、図12の状態2に示すように、1段目の空間フィルタ処理結果1002をステップS1104にて選択したBBb632に格納し、同時に選択したTMa621に中間データaを上書きする。
2段目の処理において、空間フィルタ演算部640は、BBb632に格納されている1段目の空間フィルタ処理結果1002と、TMa621に格納されている中間データaとを組み合わせた画像データに対して2段目の空間フィルタ処理を行う。これにより、2段目の空間フィルタ処理結果1003が得られる。そして、空間フィルタ演算部640は、図12の状態3に示すように、2段目の空間フィルタ処理結果1003を、出力用バッファとして選択しているBBa631に格納する。このとき、BBa631には処理工程領域1001が格納されているが、空間フィルタ演算部640は、これを破棄して、2段目の空間フィルタ処理結果1003を上書きする。また同時に、空間フィルタ演算部640は、ステップS1103で選択したTMb622に中間データbを上書きする。
3段目の処理において、空間フィルタ演算部640は、BBa631に格納されている2段目の空間フィルタ処理結果1003と、TMb622に格納されている中間データbとを組み合わせた画像データに対して、3段目の空間フィルタ処理を行う。これにより、3段目の空間フィルタ処理結果1004が得られる。そして、空間フィルタ演算部640は、図12の状態4に示すように、3段目の空間フィルタ処理結果1004を、出力用バッファとして選択しているBBb632に格納する。このとき、BBb632には1段目の空間フィルタ処理結果1002が格納されているが、空間フィルタ演算部640は、これを破棄して、3段目の空間フィルタ処理結果1004を上書きする。また同時に、空間フィルタ演算部640は、ステップS1103で選択したTMc623に中間データcを上書きする。
ステップS1106において、空間フィルタ演算部640は、変数rnに1を加算する。そして、処理はステップS1103に移行する。以上が処理工程の手順となる。
以上の処理により、1段目の処理では入力をBBa631とし、出力をBBb632とし、2段目の処理では入力をBBb632とし、出力をBBa631とするように、段数が1増える毎にBBa631、BBb632の入出力の役割を切り替える。これにより、2つのBBのみで処理工程領域に対して空間フィルタ処理を複数回適用することが可能となる。
また、処理段数に応じた各中間データを中間データバッファ620で格納し、処理段数に応じて使用する中間データを選択することにより、処理工程領域にオーバーラップ領域を付加しなくても、空間フィルタ処理を複数回適用することを可能にしている。
従って、本実施形態によれば、少ないメモリ容量で、画像処理部130とRAM116との間の画素データの送受信を抑えることができる。
処理工程において、空間フィルタ演算部640は、複数段の空間フィルタ処理を行っている。次に、図13を参照しながら、図11におけるステップS1105のrn段目の空間フィルタ処理について詳細に説明する。ここでは、図10に示す処理工程領域1001と中間データa1001bとを組み合わせた画像データに対して空間フィルタ処理を行うことにより、1段目の空間フィルタ処理結果1002を得る場合を例に挙げて説明する。
ステップS1301において、空間フィルタ演算部640は、注目画素位置yが処理工程領域の高さbhを超えているか否かを判定する。注目画素位置yが処理工程領域の高さbhを超えている場合、処理は終了する。一方、注目画素位置yが処理工程領域の高さbhを超えていない場合、処理はステップS1302に移行する。
ステップS1302において、空間フィルタ演算部640は、注目画素位置xが処理工程領域の空間フィルタ処理可能な長さ(ew−(fw−1))を超えているか否かを判定する。注目画素位置xが処理工程領域の空間フィルタ処理可能な長さを超えている場合、処理はステップS1306に移行する。一方、注目画素位置xが処理工程領域の空間フィルタ処理可能な長さを超えていない場合、処理はステップS1303に移行する。
ステップS1303において、空間フィルタ演算部640は、注目画素位置から空間フィルタ処理領域を設定する。ここで、図14を参照しながら、この空間フィルタ処理領域の設定方法について3×3画素の空間フィルタ処理を行う場合を例に挙げて説明する。図14では、中間データバッファ620に保持されている中間データ(ここでは、1001b)と、ブロックデータバッファ630に保持されている処理工程領域(ここでは、1001)とを示している。(0,0)の領域から空間フィルタ処理が開始される。
先ず、空間フィルタ演算部640は、中間データの長さ方向に2画素、高さ方向に3画素の斜線領域(l)を選択する。そして、空間フィルタ演算部640は、処理工程領域の長さ方向に1画素、高さ方向に3画素の斜線領域(m)を選択する。空間フィルタ演算部640は、斜線領域(l)及び斜線領域(m)を長さ方向に順に並べて組み合わせることにより、3×3画素の空間フィルタ領域(n)(0,0)が生成される。
ステップS1304において、制御部610は、空間フィルタ領域(n)(0,0)を空間フィルタ演算部640に出力して、各画素値の平均値を求める空間フィルタ処理を実行させる。ステップS1305において、空間フィルタ演算部640は、空間フィルタ処理結果を出力用ブロックとして選択されているブロックデータバッファ(631、632のうちの出力用と選択されている方)に出力する。ここで、注目画素位置が(0,0)である場合、図15に示すように、(0,0)の位置に空間フィルタ処理結果が保持される。ステップS1305において、空間フィルタ演算部640は、処理領域を長さ方向xに1画素移動し、次の処理領域を処理していく。
ステップ1306において、空間フィルタ演算部640は、中間データバッファ620に格納されている中間データを更新する。図16はその例を示す図である。図16に示すように、空間フィルタ演算部640は、注目画素位置が長さ方向に3画素まで行った時、中間データの更新を行う。即ち、空間フィルタ演算部640は、処理工程領域の0行目の右から2画素中に含まれる領域を更新データとし、中間データバッファ上の高さ方向が0の更新領域に保持されているデータを破棄して、更新データを上書きする。
ステップS1307において、空間フィルタ演算部640は、長さ方向xを0にリセットし、高さ方向yに1加算して、処理を続ける。以上が図11のステップS1105に示す空間フィルタ処理の手順である。
次に、初期化工程領域と処理工程領域の長さ決定方法について説明する。バンド領域に対して空間フィルタ処理をrn回行う場合、空間フィルタ演算部640は、初期化工程時にn=0の初期化工程領域に対してfw × fhの平滑化処理である空間フィルタ処理を(rn−1)回実行し、中間データを保持する処理を行う。
ここで行われる空間フィルタ処理とは、長さがfw画素、高さがfh画素の画像領域に含まれる画素値の平均を求める処理であり、空間フィルタ処理結果は1画素の値となる。図17は、空間フィルタ処理の対象となる領域の長さがfw画素より大きい場合、又は、高さがfh画素より大きい場合の空間フィルタ処理の例を示す図である。ここでは、fw=3、fh=3、処理対象領域が長さ及び高さともに6画素である例を示している。
図17に示すように、空間フィルタ演算部640は、注目画素位置(0,0)の空間フィルタ処理領域から空間フィルタ処理を行う。次に、空間フィルタ演算部640は、空間フィルタ処理領域を長さ方向に1画素ずらして、注目画素位置(1,0)の空間フィルタ処理領域に対して空間フィルタ処理を行う。このように、空間フィルタ演算部640は、空間フィルタ処理領域を長さ方向に1画素ずつずらしながら0行目の処理を進めていく。空間フィルタ演算部640は、0行目の空間フィルタ処理が終わると、空間フィルタ処理領域を縦方向に1画素ずらし、注目画素位置(0,1)の空間フィルタ処理領域から空間フィルタ処理を行う。ここでも0行目の処理と同様に、空間フィルタ処理領域を長さ方向に1画素ずつずらしながら空間フィルタ処理が行われる。これを繰り返すことにより、画像領域全体に対する空間フィルタ処理が完了する。以上のような空間フィルタ処理により得られる空間フィルタ処理結果は、空間フィルタ処理の対象となる画像領域に対して長さが(fw−1)画素、高さが(fh−1)画素小さくなる。
ここで、初期化工程領域に空間フィルタ処理を行った場合、図7に示すように、出力される空間フィルタ処理結果702は、初期化工程領域701から長さが(fw−1)画素、高さが(fh−1)画素小さくなる。2段目の空間フィルタ処理結果703も同様に、1段目の空間フィルタ処理結果702より小さくなる。このため、(rn−1)回の空間フィルタ処理を実行する際、2段目の空間フィルタ処理結果703の斜線領域703aを出力できる初期化工程領域701の長さを設定しなければならない。本実施形態では、初期化工程領域701の長さinitwを(fw−1)× rnとすることにより、初期化工程に必要最低限の領域を設定することができる。ここで、ブロックデータバッファの容量を、初期化工程領域と1段目の空間フィルタ処理結果とを保持できるだけの容量に設定することにより、ブロックデータバッファの規模を最小限に設定することができる。
また、図10に示すように、処理工程において、空間フィルタ演算部640は、初期化工程や処理工程で保持した中間データa,b,c(例えば、1001a〜1003a)と処理工程領域(1001〜1003)とを組み合わせた画像データに対して空間フィルタ処理を行う。ここで、初期化工程で保持されるデータの最大容量は、初期化工程領域701と1段目の空間フィルタ処理結果702とが保持されるときであり、処理工程で保持されるデータの最大容量は、処理工程領域1001と1段目の空間フィルタ処理結果1002とが保持されるときとなる。この処理工程時に保持されるデータの最大容量が初期化工程時に保持されるデータの最大容量に収まるように設定することにより、初期化工程領域又は処理工程領域を保持するブロックデータバッファの容量を小規模にしつつ、バンド領域全体を処理することが可能となる。
ここで、初期化工程に必要なデータの最大容量は、バンド領域の高さをbhとすると、次の式で表される画素数となる。
また、処理工程に必要なデータの最大容量は、処理工程領域の長さをewとすると、次の式で表される画素数となる。
空間フィルタ演算部640は、処理工程に必要なデータ容量が初期化工程に必要なデータの最小容量に収まるようewを決定する。例えば、空間フィルタ演算部640は、処理工程領域の長さew画素を以下の式3で求め、小数点を切り捨てた値に決定する。
空間フィルタ演算部640は、以上の手順から初期化工程領域の長さを求め、ブロックデータバッファの容量を決定し、処理工程領域の長さを算出することにより、空間フィルタ演算部640に搭載するブロックデータバッファの容量を小規模にしつつ、バンド領域に対して空間フィルタ処理を行うことが可能となる。
次に、本発明の第2の実施形態について説明する。上述した第1の実施形態では、空間フィルタ回路230のブロックデータバッファ630に2つの記憶領域(BB)を配置し、中間データバッファ620に3つの記憶領域(TM)を配置した。これに対し、第2の実施形態では、図18に示すように、空間フィルタ回路230´にデータ保持部1820が一つしかない場合においてもデータ保持部1820を効率的に利用し、空間フィルタ処理の複数回適用を可能にする方法について説明する。
先ず、データ保持部1820上に確保するデータ容量の結果方法について述べ、続けてその利用方法について説明する。
データ保持部1820上に確保するデータ容量の決定方法を、空間フィルタ回路230´で実行する空間フィルタ回数がrn回、バンド領域の高さがobh画素、空間フィルタサイズが高さfh画素、長さfw画素であり、画素値を表すのに必要なビット数がk bitである場合について説明する。空間フィルタ回路230´は、中間データバッファに確保する容量を次の式4で算出する。
また、空間フィルタ回路230´は、ブロックデータバッファに確保する容量を次の式5で算出する。
空間フィルタ回路230´は、求めた中間データバッファ及びブロックデータバッファに必要な容量をデータ保持部1820上に確保し、確保したデータ保持部1820上の領域から、図19に示すように、TMa、TMb、TMc、・・・、BBa、BBbとして扱う記憶領域を決定する。図19では、各領域が隣接するアドレスに配置されるように示しているが、必ずしも各記憶領域が隣接している必要はない。
次に、空間フィルタ回路230´は、図18に示す構成において、空間フィルタ処理を実行する際、1段目の処理時には、入力するブロック領域の保存場所をデータ保持部1820上のBBaとして割り当てられた記憶領域に保存する。空間フィルタ回路230´は、そのブロック領域を空間フィルタ演算部640に入力して空間フィルタ処理を行う。そして、空間フィルタ回路230´は、空間フィルタ処理結果をデータ保持部1820上のBBbとして割り当てられた記憶領域に保存し、同時に、中間データaをデータ保持部1820上のTMaとして割り当てられた記憶領域に保存する。以上のように、第2の実施形態においては、空間フィルタ回路230´に1つのメモリに中間データバッファ、ブロックデータバッファとして利用するのに必要な容量を確保し、確保した記憶領域をTMa、TMb、TMc、・・・、BBa、BBbとして扱う。以上の操作を制御部1810で包括的に行う。
これによって、空間フィルタ回路に1つのデータ保持部1820しかない場合においても、メモリ容量の増加を抑えつつ、空間フィルタ処理の複数回適用を実現できる。また、データ保持部1820にマルチポートメモリを利用して、TMa及びBBaのデータを読出し、平滑化処理で処理した結果をBBbに書き出す等の処理を並列に動作させてもよい。
次に、本発明の第3の実施形態について説明する。ブロック領域の大きさをメモリと画像処理部間の転送で決められたバースト長から決めることもできる。例えば、一回のバースト転送で送受信できる画素数が8個だった場合には、ブロック領域の長さを8画素や16画素とする。このように、ブロック領域の長さを一回のバースト転送で送受信できる画素数の整数倍に設定する。これにより、ブロック領域の高さに関わらず、ブロック領域に含まれる画素数を一回のバースト転送で送受信できる画素数で割り切れる。従って、ブロック領域の転送が容易になり、効率のよい画素データの転送が可能になる。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。