以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
<第1実施形態>
●装置構成
図1(a)は、本実施形態に係る画像処理装置の全体構成例を示すブロック図である。同図に示すように本実施形態の画像処理装置は、CPU回路部100、画像読み取り部120、映像入力部130、画像処理部150、映像表示部160、画像印刷部170、等を備える。以下、これら構成による動作の概要について説明する。
画像読み取り部120は、レンズ124、CCDセンサ126、及びアナログ信号処理部127等を有する。すなわち、レンズ124を介してCCDセンサ126に原稿110の画像情報が結像され、CCDセンサ126によりその画像情報がR(Red)、G(Green)、B(Blue)のアナログ電気信号に変換される。アナログ電気信号に変換された画像情報は、アナログ信号処理部127に入力され、R、G、Bの色毎に補正等が行われた後にアナログ/デジタル変換(A/D変換)されることで、デジタル化されたフルカラーのデジタル画像信号(画素値)が生成される。生成されたデジタル画像信号は映像入力部130へ入力され、その後、DMAC(Direct Memory Access Controller)192へ入力される。
DMAC192は、CPU102によって予め動作が設定されており、入力されたデジタル画像信号を共有バス190を介してCPU回路部100のRAM106や外部記憶装置108に記憶させる。なお、複数の画素についてのデジタル画像信号を1枚の画像を形成するように集合させたデータを、以下では画像データと呼ぶ。本実施形態では、デジタル画像信号は画像データの形式でRAM106等に記憶されるものとする。画像処理を行う場合、CPU102はDMAC194を起動してRAM106等に記憶された画像データを読み出させ、処理の対象となる画素に対応するデジタル画像信号を画像処理部150に入力させる。
画像処理部150は例えば、入力されたデジタル画像信号に対して、スキャナなどのセンサ・デバイスの読み取り素子の個体差の補正や、入力ガンマ補正などの色補正等を行って画像データを作成する画像データ処理装置である。そしてDMAC196が、これらの画像処理が施された画像データをRAM106や外部記憶装置108に格納する。なお、DMAC196は以下のように制御される。例えばCPU102が予めDMAC196の動作を設定し、また、CPU102がDMAC196を起動する。なおDMAC196の動作としては、例えば処理後の画像データをRAM106へ書き込むように設定しておく。このように画像処理部150は、入力されたデジタル画像信号に対し、入力色補正処理、空間フィルタ処理、色空間変換、濃度補正処理、及び中間調処理等、画像を印刷するための画像処理を施す。そして、印刷可能な画像データを作成した後、その画像データをDMAC196によりRAM106等に格納させる。
DMAC198は、RAM106に格納された画像処理済みの画像データを読み出して、画像印刷部170へ出力する。画像印刷部170は例えばプリンタである。DMAC198の設定は例えばCPU102が行う。画像印刷部170は、インクジェットヘッドやサーマルヘッド等を使用した印刷出力部(不図示)を備え、入力された画像データのデジタル画像信号に基づいて記録紙上に画像を記録する。
なお、ここでは画像読み取り部120で読み取った原稿110の画像データを、画像印刷部170にて印刷出力する例を示したが、本発明はこの例に限らない。例えば、映像入力部130や映像表示部160等を用いることにより、入力された映像に対し所望の画像(映像)処理を施し、処理後の映像をディスプレイなどの映像表示装置(不図示)に表示してもよい。
CPU回路部100は、演算制御用のCPU102、固定データやプログラムを格納するROM104、データの一時保存やプログラムのロードに使用されるRAM106、及び外部記憶装置108等を備える。CPU回路部100は、画像読み取り部120、画像処理部150、及び画像印刷部170等を制御し、本実施形態の画像処理装置のシーケンスを統括的に制御する。外部記憶装置108は、本実施形態の画像処理装置が使用するパラメータやプログラム、補正データを記憶するディスク等の記憶媒体である。またRAM106のデータやプログラム等は、外部記憶装置108からロードされる構成としてもよい。また本実施形態では、DMAC194,196を介して画像処理部150とのデータ転送を行うが、この転送データの格納先はRAM106に限らず外部記憶装置108であってもよい。そしてRAM106や外部記憶装置108に確保した転送データの格納先などを、以下ではグローバルバッファと総称する。
次に、画像データに画像処理を施す画像処理部150の詳細構成およびその動作について、図1(b)を用いて説明する。なお図1(b)では理解を容易とするために、グローバルバッファからの画像データの読み出しを行うDMAC194と、同じく書き込みを行うDMAC196が、画像入力部1521、画像出力部1523のそれぞれに含まれるように示している。
まずCPU102がDMAC194を起動し、DMAC194はグローバルバッファから画像データを読み出す。この画像データの構造については後述する。読み出された画像データは、入力ポート151を介して、画像処理部150の画像入出力部152へ入力される。画像入出力部152において画像入力部1521は、入力された画像データを取得すると、中間バッファ制御部1522に含まれる一時記憶部(中間バッファ)に、該取得した画像データを記憶させる。そして画像入力部1521は、中間バッファに一時的に記憶された画像データを読み出しながら画素値を生成し、入力画素値155として画像処理実行部153へ入力する。なお、中間バッファ制御部1522に含まれる一時記憶部(中間バッファ)は、前述のグローバルバッファに対比してローカルバッファと総称してもよい。
画像処理実行部153は、入力画素値155に対して所定の画像処理を実行し、その結果として得られた出力画素値156を画像入出力部152へ出力する。なお、画像処理実行部153における処理の詳細については後述する。入力画素値155および出力画素値156は1つ以上の画素値であって、複数の画素値が入力画素値155として入力され、それに対して1つの画素値が出力画素値156として出力されてもよい。
画像入出力部152において画像出力部1523は、処理後の出力画素値156から出力画像データを生成して、中間バッファ制御部1522内の記憶部(中間バッファ)に記憶する。画像出力部1523は、中間バッファに一時的に記憶された処理後の画像データを読み出し、出力画像データとして出力ポート154を介してDMAC196から送出する。DMAC196は上述したようにCPU102によって既に起動されており、受け取った出力画像データをRAM106へ書き込む。
このように画像処理部150は、画像入出力部152がDMAC194を介して画像データを取得し、画像処理実行部153で該画像データに対するデータ処理を実行する。そして、データ処理後の画像データを、画像入出力部152がDMAC196を介して出力する。すなわち画像処理部150は、画像処理装置内に含まれる画像データにデータ処理を施し、処理後の画像データを画像処理装置へ戻す役割を担う。また画像入出力部152は、データの入出力の調節を行うデータ入出力制御装置としての役割を有する。
次に、画像処理部150の画像処理実行部153について、詳細に説明する。画像処理実行部153は、画像処理回路(1)1531〜画像処理回路(P)1537のP個の画像処理回路と、インターコネクト1530とで構成される。P個の画像処理回路とインターコネクト1530とは、入力ポート1532,1535,…,1538、および出力ポート1533,1536,…,1539等のポートを介して互いに接続される。各画像処理回路は、それぞれが1つの画像処理を行う。画像処理とは例えば、入力色補正処理、色空間変換、濃度補正処理、中間調処理、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換、クロマ・アップサンプリング等のいずれかである。各画像処理回路は、パイプライン回路等のハードウェアで実現されてもよいし、プロセッサとプログラム(ソフトウェア)等で実現されてもよい。そして、対応する入力ポートから入力画素値155を受け取り、処理を施した後に、対応する出力ポートから処理後の出力画素値156を出力する。
インターコネクト1530は、クロスバーやリングバス等の接続手段で実現されており、入力ポートと出力ポートの接続先を任意に切り替えることができる。したがって、CPU102がこれらポートの接続先の指定を設定することで、インターコネクト1530は、例えばP個の画像処理回路の実行順序を変更し、または一部の処理をバイパスすることができる。このように画像処理実行部153は、アプリケーションに応じて、各種の処理を取捨選択して組み合せ、所望の画像処理を実現する。
●バンド処理
以下、本実施形態における画像データの領域分割手法として、画像データを1次元分割したバンド領域ごとに処理を行うバンド処理について説明する。
以下、本実施形態におけるバンド処理について、図3を用いて説明する。バンド処理では、図3(a)に示されるように、1枚の画像データ300を帯状のバンド領域301〜304に分割し、この領域毎に逐次、画像処理を行う。なおバンド領域は、画像データを主走査方向または副走査方向のいずれかに分割したものであるから、バンド領域と画像データとは、主走査方向または副走査方向のいずれかにおいて長さが一致する。図3(a)の例では、画像データは副走査方向に対して分割され、画像データとバンド領域とでは、主走査方向で同一の長さを有し、副走査方向では異なる長さを有する。以下、この分割された細長い領域をバンド領域と呼び、バンド領域が展開される記憶領域をバンドメモリ、画像データを分割する行為をバンド分割と呼ぶ。バンドメモリは、システム上の適切な記憶領域に確保されれば良いが、ここでは説明を簡潔にするために、バンドメモリをRAM106内の記憶領域(グローバルバッファ)として確保するとする。
また以下では、図3(b)に示すように、画像データの座標系(主走査方向-副走査方向)を、長さ方向と高さ方向という座標系(バンド領域座標系)によって定義し、バンド領域を長さ×高さで表現する。バンド領域の長さ、すなわちバンド領域の長さ方向の一辺の大きさは、画像データの主走査方向の長さ、または副走査方向の長さの何れかの値とする。また、バンド領域の高さ、すなわちバンド領域の高さ方向の一辺の大きさは任意の値となる。図3(a)の例では、長さ方向は主走査方向であり、高さ方向は副走査方向である。これに対し、図3(d)に示すように画像データを主走査方向において分割した場合、図3(e)に示すように、長さ方向が副走査方向となり、高さ方向が主走査方向となる。図3(d)のようなバンド分割は、例えば画像データの主走査方向の大きさが副走査方向の大きさより大きい場合に行うようにしてもよい。
図3(a)に示すバンド処理では、まず第1のバンド領域301を、RAM106上のバンドメモリに展開して画像処理を行う。次に第2のバンド領域302を、第1のバンド領域301が展開されたRAM106上のバンドメモリに上書き展開して、画像処理を行なう。さらにその後、第3のバンド領域303を、第2のバンド領域302が展開されたRAM106上のバンドメモリに上書き展開し、画像処理を行なう。そして最後に第4のバンド領域304を、第3のバンド領域303が展開されたRAM106上のバンドメモリに上書き展開して画像処理を行なう。図3(a)からも分かるように、バンド領域301〜304は長さは同じであるが、高さは同じでなくても良い。したがって、バンドメモリの高さは、高さ方向の一辺の大きさが最も大きいバンド領域(図3(a)ではバンド領域301〜303)に応じて決定される。
なお本実施形態のバンド処理では、各バンド領域間で隙間なく空間フィルタ処理等の局所(近傍)画像処理を行なうために、図3(c)に示すように、各バンド領域が、隣接する領域との境界で一部分が互いに重なり合うように設定される。
●画像データ構造
以下、本実施形態における画像データの構造について詳細に説明する。本実施形態では上述したように、画像データはRAM106内の記憶領域(グローバルバッファ)に一時的に格納される。一般的にメインメモリであるRAM106は安価なDRAMで構成されることが多い。したがって、本実施形態のようにDMACを介して画像データを読み書きする場合、DRAMが性能を落とさずに読み書きできる単位で画像データを取り扱うことが望ましい。
図4Aに、DRAMで構成されるRAM106における画像データの格納例、および画像データのデータ構造例を示す。同図の例では、RAM106(DRAM)上にデータ領域(IMG_AREA_STR_ADDRからIMG_AREA_END_ADDRまでの領域)が確保され、ここに画像処理に必要な種々の画像データが格納される。図4Aは、点順次形式の画像データの格納例として、RAM106のデータ領域に、S5_IMG425とS6_IMG426の2種の画像データが格納された例を示している。この例では、DRAMの性能を落とさずに画像データの読み書きができるように、格納される画像データの容量の最小単位を、408に示すように32bit×8wordの32Byteとしている。すなわち、画像データS5_IMG425とS6_IMG426の格納容量は32Byteの整数倍となる。
次に、画像データの構造について詳細に説明する。画像データ440(S5_IMG425等)は、点順次形式でR(Red),G(Green),B(Blue)の色成分ごとの画素値を有する。画像データ440は32Byte単位の領域データからなり、各領域(例えば領域442)は、444で示すように、複数個(この例では8個)の画素値がパッキングされている。したがって画像データ440は、8M×N画素のサイズからなる。そして、444に含まれる8つの画素値のそれぞれには、446で示すようにそれぞれ10bitのR,G,Bの値がパッキングされている。なお、446における残りの2bitは、DRAMへのアクセスを簡単にするために、データを格納しない無効データとする。なお、図4Aでは画像データの最小単位を、データ領域442のように縦1画素、横8画素からなる32Byteとして定めた例を示したが、もちろん最小単位はこの例に限らず、例えば縦2画素、横4画素を最小単位としても良い。
●画像データの入出力
以下、本実施形態における、RAM106から画像入出力部152への、または画像入出力部152からRAM106への画像データの入出力処理について、図2Aを用いて詳細に説明する。本実施形態の画像処理装置は、1つの画像データ300からバンド領域301(幅Bdl×高さBdh)を抜き出し、入力画像データとしてRAM106に格納する。このバンド領域の入力画像データは、図4Aで説明したように、RAM106で取り扱いやすくなるよう、210に示す32Byteを単位としたデータ構造からなる。
図2Aにおいて、CPU102は、DMAC194に指示信号221を送信する。するとDMAC194は、このバンド領域の入力画像データ210を、図1に示した共有バス190を介してRAM106から読み出し、画像処理部150へ入力する。入力画像データ210は、上述したデータ構造にしたがって、幅32Byte×高さBdh_inの処理単位で、領域(1)211から領域(M)219までのM個の画素領域(小領域)に分けられる。そして、DMAC194は、このM個の小領域の入力画像データを、小領域(1)211から小領域(M)219まで順次読み出し、画像処理部150に入力する。画像処理部150は、この小領域の入力画像データを受け取り、この小領域単位で画像処理を実行する。なお、画像処理部150における処理単位の大きさに応じて、バンドの小領域ごとに読出し処理を行ってもよいし、バンドの全部の画素領域を一度に読出してもよい。
上述したCPU102からDMAC194への指示信号には、例えば、「読み出し先の先頭アドレス」、「連続読み出し量(32Byte単位のデータを連続何回読み出すか)」、「インクリメント・アドレス」および「繰り返し回数」の項目が含まれる。例えば、図4Aに示した点順次形式の画像データであれば、指示信号に含まれる各項目の内容は以下のようになる。
・「先頭アドレス」:S5_IMG_STR_ADDR
・「連続読み出し量」:1回(32Byte)
・「インクリメント・アドレス」:1ラインのデータ量=32Byte×M
・「繰り返し回数」:バンド領域の高さ=Bdh_in回
この指示信号によれば、先頭アドレスS5_IMG_STR_ADDRから、まず32Byteのデータすなわち小領域(1)211の第1行目が読み出される。そして、次のデータを取得するため、アドレスを32Byte×Mだけ増加させることで、小領域(2)〜(M)の1行目のデータの読み出しが飛ばされて、小領域(1)211の第2行目の32Byteのデータを読み出すこととなる。そして、繰返し数Bdh_in回、すなわち、小領域(1)211のBdh_in行分のデータを読み出すことにより、小領域(1)211の全てのデータが読み出される。小領域(2)〜小領域(M)の入力画像データの読み出しでは、「先頭アドレス」を順次32ByteずつずらしてDMAC194を動作させる。このように本実施形態の画像処理装置では、所望する小領域の入力画像データをRAM106からDMA転送で読み出す。
画像入出力部152の画像入力部1521は、DMAC194から入力画像データを受け取りながら、そのデータを中間バッファ制御部1522へ転送する。中間バッファ制御部1522は、中間バッファ調停回路230と中間バッファ232とで構成される。中間バッファ232は、入力画像データを格納する領域である入力領域234と、後述する出力画像データを格納する領域である出力領域236とで構成される。CPU102は、中間バッファ232の入力領域および出力領域の先頭アドレスを、それぞれ入力領域先頭アドレスおよび出力領域先頭アドレスとして予め設定しておく。なお、画像入力部1521から入力された入力画像データは、まず中間バッファ調停回路230へ入力される。
中間バッファ調停回路230は、受け取った入力画像データを、中間バッファ232の入力領域234へ一時的に格納する。通常、中間バッファ232はSRAM等の記憶装置で実現される。例えば、中間バッファ232の1ワードあたりのビット長が256ビット(32Byte)長であれば、入力領域234で記憶するべきワード数はバンド領域の高さに相当し、DMA転送の繰り返し回数であるBdh_inワードとなる。また、中間バッファ232の1ワードあたりのビット長が64ビット(8Byte)長であれば、32Byte長のデータを受けるのに4ワード必要となる。したがってこの場合、入力領域234で記憶すべきワード数は、バンド領域の高さ(DMA転送の繰り返し回数)Bdh_inを4倍したワード数となる。つまり、入力領域234の容量は、1回のDMA転送の単位である小領域(処理単位)の入力画像データが格納できる容量である。なお、DMAC194は、DMA転送や1つのバンド領域の入力画像データの転送が完了すると、その旨を割り込み信号222を用いてCPU102へ通知してもよい。
その後、画像入力部1521は、中間バッファ調停回路230を介して、一時的に記憶された小領域の入力画像データを読み出し、1画素ずつ入力画素値155を順次生成して、画像処理実行部153へ入力する。なお、画像入力部1521と画像出力部1523とは非同期で動作しても良く、例えば入力画像データにおける小領域(1)211と小領域(2)の一部を用いて、出力画像データの小領域(1)251が生成され、出力されても良い。なお、画像入力部1521と画像出力部1523にはそれぞれ、本実施形態の特徴をなすポインタ管理部1542,1544が設けられているが、この動作については後述する。
画像処理実行部153は、入力された1つ以上の画素からなる画素領域に画像処理を施す。具体的な画像処理としては例えば、複数の画素からなる画素領域に対して、所定の重み係数を乗算し、それらの値を全て加算することにより、1つの出力画素を得る。そして、画素領域をバンド領域の高さ方向にスライドさせながらこのような処理を進め、高さ方向に1列分の画素値を出力すると、次の列の画素を出力するための処理を実行する。処理後の画素値は1画素ずつ、画像入出力部152の画像出力部1523へ出力される。
画像出力部1523では、処理後の出力画素値156から出力画像データを生成し、32Byte単位で、中間バッファ調停回路230を介して中間バッファ232の出力領域236へ格納する。ここで、生成済みの出力画像データのデータ構造は図4Aに示す点順次形式のままであるが、出力画像データ250ではその形式が変わっていてもよい。画像処理実行部153では、入力画素領域のサイズと出力画素領域のサイズが異なる様々な画像処理が実行されるため、入力画像データ210と出力画像データ250の画素数は異なる。したがって、出力画像データ250の出力バンド領域の高さおよび幅は入力画像データ210とは異なり、高さBdh_out、幅8×Nとなる。このように、入力画像データ210と出力画像データ250では、バンド領域の高さが異なるため、処理単位である小領域の容量が異なる。さらにバンド領域の幅も異なるため、小領域の数もM個からN個に変化する。
このように、入力画像データ210と出力画像データ250とでは、バンド領域の高さおよび小領域の個数が異なるものの、データ構造は同一であるため、中間バッファ232の出力領域236の容量は、入力領域234の容量と同様の考え方で設定できる。例えば、中間バッファ232の1ワードあたりのビット長が256ビット(32Byte)長であれば、出力領域236で記憶すべきワード数は、出力バンドの高さと同じBdh_outワードとなる。また、中間バッファ232の1ワードあたりのビット長が64ビット(8Byte)長であれば、出力領域236で記憶すべきワード数は、先の出力バンドの高さであるBdh_outを4倍したワード数となる。
画像出力部1523は、例えば、Bdh_out個の画素が4列分入力され、小領域(1)251の出力画像データが中間バッファ232の出力領域236に揃った時点で、画像処理実行部153からの出力画素値156の受け取りを停止する。そして、出力領域236の出力画像データを順次読み出し、DMAC196へ送出する。そしてDMAC196は、CPU102からの指示信号225に従って、処理後の画像データをRAM106へ書き込む。同様の動作を小領域(2)から小領域(N)まで順次実行し、出力バンド領域の出力画像データをすべてRAM106へ書き戻す。
●複数バンド処理におけるDMA転送の課題
本実施形態の画像処理装置では、以上説明した方法によってバンド単位でのデータ処理を行う。しかしながら、このように複数バンドに対するデータ処理を行う際に、DMA転送において以下のような問題が発生する。以下、解像度変換処理を行う場合を例として、複数バンドを処理する際に発生するDMA転送の課題について説明する。なお以下では、DMA転送先をグローバルバッファ(前述のRAM106や外部記憶装置108内の記憶領域)として説明する。
まず画像処理装置は、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換を含め、様々な画像処理を内包している。そして画像処理装置は、それらの内包する処理をアプリケーションに応じて取捨選択して組み合せ、装置全体で所望の高画質化を実現する。図1(b)に示す画像処理実行部153には、これらの様々な画像処理が、画像処理回路(1)1531〜画像処理回路(P-1)1537として実装されている。これら複数の画像処理回路を組合せて、複雑な画像処理を上述した領域分割(バンド処理)手法により実現する場合、以下の点に注意する必要がある。
空間フィルタ処理のように二次元領域の処理画素を用いた演算を行う場合、処理後の画像に対しフィルタ径に対応する周辺画素を累積した画像を画像処理回路に入力する必要がある。そしてこのような二次元領域を参照する画像処理が複数回あれば、その都度、周辺画素を累積し、すべての周辺画素を累積した、より広い範囲の画像を入力しなければならない。解像度変換処理も、このような二次元領域を参照する画像処理の1つであり、解像度変換の場合はさらに、処理の前後で出力する画像の大きさが変化する。
ここで解像度変換による拡大処理を例として、DMA転送の問題について、図5(a)を用いて具体的に説明する。ここでは画像処理実行部153が、縦5画素、横5画素の二次元領域の画像を参照して解像度変換を行う画像処理回路を備えるとする。図5(a)の例では、バンド高さが11ラインの入力画像を画像処理実行部153に入力している。この11ライン分の入力画像には、解像度変換において周辺画素として参照される上端2ライン、下端2ライン分を含んでいる。つまり、入力画像のある主走査位置では、バンド高さ11画素のうち、上端2画素と下端2画素を省いた7画素が実際に解像度変換(拡大)される。すなわち、上端2画素と下端2画素は解像度変換の演算の際に参照されるだけで、周辺画素そのものが出力画素として生成されるわけではない。
以下、図5(a)を用いて、第1バンド、第2バンド、第3バンドの順に解像度変換(拡大)する場合における、バンド高さの変化について説明する。なお図5(a)の例では、拡大率が1.37倍に設定されている。
まず第1バンドである11ラインの入力画像のうち、上記の7ラインが1.37倍されて、10ラインの出力となっている。実際には7ラインが1.37倍されると9.6ラインとなるが、これが整数に丸められて10ラインの出力となる。これは、最終的に出力画像はグローバルバッファに記憶されるため、小数点以下の画素については整数化して扱う必要があるためである。
次に第2バンドでも11ラインの画像を入力する。このとき、第1バンドと第2バンドの画像処理の結果が連続するように、第1バンドと第2バンドの入力画像は、図5(a)に示すように、周辺画素である2ラインを重複させる。第2バンドについても第1バンドと同様に周辺画素を除いた7ラインが1.37倍されて9.6ラインの出力となる。ここで、第1バンドと第2バンドの本来の出力ラインの合計は19.2ラインとなるが、第1バンドで丸めにより既に10ラインを出力しているので、第2バンドの出力は9ラインとなる。そして第3バンドでも同様の拡大処理を行うが、このとき第3バンドの出力は再び10ラインとなる。
以上のように、入力画像のバンド高さを一定にしてバンド分割による解像度変換を行う場合、その変換倍率によって、出力画像のバンド高さはバンド毎に変化する。ここで図5(b)に、解像度変換として縮小処理(0.39倍)を行う場合における、第1バンドから第3バンドまでの出力画像のバンド高さの例を示す。図5(b)の縮小処理によれば、図5(a)に示した拡大処理の場合と同様に、入力画像の7ラインが出力画像では3ラインまたは2ラインとなり、出力画像のバンド高さがバンド毎に変化することが分かる。
上述したように、解像度変換の出力画像は小領域ごとにDMA転送されてグローバルバッファに記憶されるが、このDMA転送を行うための設定(「開始アドレス」や「繰り返し回数」)は、解像度変換の倍率によってはバンド毎に一様ではなくなる。そのためDMA転送の設定は困難となり、例えばDMA転送の開始アドレスは、転送毎に固定値を加算する等の単純な演算では算出できない。このような場合、DMA転送の設定値をバンド毎にファームウェアで計算する必要があり、バンド毎にファームウェアから画像処理の入力/出力DMACにパラメータを逐次設定する必要がある。そして設定後に入力/出力DMACを起動して、画像処理を動作させる。そのため、ファームウェアを動作させるCPU102は、画像処理部150をバンド領域の単位で定期的に算出、設定、起動を行う必要があり、また画像処理部150の画像処理完了の割り込みを待つ必要がある。システム構成にもよるが、CPU102がこのような画像処理完了の割り込みを受信して割り込み要因を調べて次の動作に戻るために数msの時間を要することも珍しくない。その結果CPU102は、画像処理部150の制御と同期(待ち合わせ)のために、ある程度の処理負荷が常にかかっている状態となり、画像処理の間は解放されない。
本実施形態の画像処理装置では、上述したDMA転送の問題を解決するために、グローバルバッファに格納される入力/出力の画像データを管理するためのラインポインタを導入する。ラインポインタはすなわち、グローバルバッファにおけるバンド領域の上端ライン位置を示す。本実施形態ではラインポインタを用いることで、以下に説明するような、画像処理に特化した第1〜第3のDMA機能を備える。
●第1のDMA機能(「開始アドレス」の自動計算機能)
まず第1のDMA機能として、ラインポインタを用いてDMA転送の「開始アドレス」を自動計算する機能を有する。ここで、グローバルバッファにおける画像データの格納領域とラインポインタの関係について、図6Aを用いて説明する。図6Aでは、1ページ(1画面)分の画像データに相当する記憶領域がグローバルバッファに割り当てられており、その先頭アドレスがページ左上の画像データを記憶するように、予め設定されている。図6Aには、入力画像データを記憶する領域BIと、出力画像データを記憶する領域BOとが別々に用意されており、互いが重ならないように、グローバルバッファに確保されている。上述したようにバンド領域ごとに順次画像処理が繰り返されるため、図6Aには、時間経過に伴って入力画像データのバンド領域(a)〜(d)と、出力画像データのバンド領域(x)〜(xa)が遷移する旨が示されている。各バンド領域の上端のライン位置を一時的に記憶するため、図2Aに示した画像入力部1521と画像出力部1523のそれぞれが、ポインタ管理部1542と1544を備えている。ポインタ管理部1542と1544はすなわち、ラインポインタを保持するレジスタ(不図示)を有する。
DMA転送を行う際には、DMA転送の開始アドレスを算出する必要がある。本実施形態では、一時的に記憶されたラインポインタを利用して、DMA転送の開始アドレスを下式に従って算出する。
DMA転送の開始アドレス=先頭アドレス+インクリメント・アドレス×ラインポインタ …(1)
ここで図6Aを用いて一連のバンド処理を説明する。まず、第1バンド領域(a)を画像データとして入力する。このときのラインポインタline_v_ptr(a)は"0"である。そのため、画像データ入力のDMA転送の開始アドレスは、式(1)から、図6Aに示す「入力バッファの先頭アドレス」となる。そして、入力された画像データを処理し、第1バンド領域(x)を画像データとして出力する。このときのラインポインタline_v_ptr(x)も"0"である。この画像データ出力のDMA転送の開始アドレスについても、入力時と同様に、図6Aに示す「出力バッファの先頭アドレス」となる。
次に、第2バンド領域(b)を画像データとして入力する。このときのラインポインタline_v_ptr(b)は、図5(a)の例でば"+7"となる。ここで、フィルタ処理等の画像処理に必要な周辺画素を省いたバンド高さは、拡大、縮小、等倍のいずれの場合においても常に7ラインである。したがって、第1バンド(a)から第2バンド(b)へのラインポインタの変更量(遷移量)は、処理によらず+7ラインとなる。そのため、画像データ入力のDMA転送の開始アドレスは、式(1)から、「入力バッファの先頭アドレス+「インクリメント・アドレス」×7」となる。
一方、画像処理後に出力される第2バンド領域(y)のラインポインタline_v_ptr(y)は、図5(a)の拡大例では"+10"となり、図5(b)の縮小例では"+3"となり、また等倍の例では"+7"となる。これは、画像処理後に出力されるバンド領域は重複することなくグローバルバッファに書き込まれるためであり、出力バンド領域の高さそのものが、第1バンド(a)から第2バンド(b)へのラインポインタの変更量(遷移量)となる。そのため、第2バンド領域を出力する際のDMA転送の開始アドレスは式(1)から、拡大処理の場合は「出力バッファの先頭アドレス+「インクリメント・アドレス」×10」となる。同様に縮小処理の場合は「出力バッファの先頭アドレス+「インクリメント・アドレス」×3」となる。同様に等倍処理の場合は「出力バッファの先頭アドレス+「インクリメント・アドレス」×7」となる。
さらに、第3バンド領域(c)/(z)の画像データを入力/出力するが、画像データ入力に関しては第2バンド領域の動作と同様であるため、説明を割愛する。画像データ出力については、第3バンド領域(z)のラインポインタline_v_ptr(z)は図5(a)の拡大例では"+9"となり、図5(b)の縮小例では"+2"となり、また等倍の例では"+7"となる。上述したように、処理後のバンド領域の高さの変動に伴い、ラインポインタも一様な変更量(遷移量)にはならない。ラインポインタの管理の詳細については後述するが、出力時のDMA転送の開始アドレスは、ラインポインタに従い式(1)から自動算出される。
●第2のDMA機能(「繰り返し回数」の自動計算機能)
本実施形態の画像処理装置はさらに、第2のDMA機能として、画像出力部1523におけるDMA転送の「繰り返し回数」の自動計算機能を有する。以下、図8を用いて、本実施形態の画像処理装置における全体制御シーケンスを追いながら、DMA転送の繰り返し回数を、受信ライン数として算出することで設定する方法を説明する。
まずCPU102は上述したように、画像入力部1521に対し、「入力バッファの先頭アドレス」、「連続読み出し量」、「インクリメント・アドレス」、「繰り返し回数」と、ラインポインタの初期値"0"を初期設定する。また、入力バンド領域のラインポインタの変更量については、上述した周辺画素を除いた入力バンド領域の高さ"+7"のように常に一様であるから、予め初期設定しておくことができる。
同様に、画像出力部1523に対し、「出力バッファの先頭アドレス」、「連続読み出し量」、「インクリメント・アドレス」、「繰り返し回数」と、ラインポインタの初期値"0"を初期設定する。しかしながら、出力バンド領域の「繰り返し回数」やラインポインタの変更量は一様でないため、本実施形態では後述する方法で自動設定する。例えば「繰り返し回数」の初期設定として、自動設定を許可する旨を示すような値を設定しておけば良い。その後、画像入力部1521と画像出力部1523を起動する(S810)。
起動した画像入力部1521はDMAC194を起動し、DMAC194は初期設定から開始アドレスを自動算出して、入力バンド領域の画像データを読み出す(LOAD)。そして読み出した画像データの読み出しライン数を算出し(S820)、中間バッファ制御部1522を介して中間バッファ232の入力領域234に読み出した画像データを書き込む(WRITE)。小領域の画像データをすべて読み出して中間バッファ232への書き込みが終了すると、図8に示すLOAD動作を完了する。
すると画像入力部1521は、読み出したライン数に基づき、送信部1541の送信ライン数を保持するレジスタを書き換える(S830)。
そして送信部1541を起動し、送信部1541は中間バッファ制御部1522から小領域の画像データを読み出し、画素値に変換して画像処理実行部153に送信することで、図8に示す送信動作を終了する。これにより画像処理実行部153では、小領域の画像データに対する所望の画像処理が行われる(S850)。
このとき、起動された画像出力部1523はすぐに受信部1543を起動し、画像処理実行部153から画像処理後の画素値が入力されるまで待機する。そして処理後の画素値が入力されると受信動作を開始し、入力される処理後の画素値の数をカウントして、画素値毎の座標を算出する。詳細には、処理後に入力される画素値には、小領域における縦方向の位置情報(上端/下端等)を示すフラグを有しており、該位置情報に基づき、画素値ごとの座標を算出することができる。なお、この座標とは、小領域における画素位置を決定できるものであればよいため、出力画像における座標であってもよいし、バンド領域内の座標であってもよい。そして座標の算出に伴い、小領域ごとに受信ライン数を算出する(S860)。そして、受信した画素を所望の画像データに変換し、中間バッファ制御部1522を介して中間バッファ232の出力領域236に書き込む(WRITE)。小領域の画像データをすべて書き込むと、図8に示す受信動作を完了する。
そして画像出力部1523は、算出した受信ライン数で、DMAC196の「繰り返し回数」を書き換える(S870)。本実施形態のDMAC194,196は、初期設定により「繰り返し回数」の自動設定が許可されていれば受信ライン数への書き換えを実行し、許可されていなければ初期設定された「繰り返し回数」を保持する。したがって、DMAC194では画像データ転送の「繰り返し回数」は一定であるから「繰り返し回数」を保持し、DMAC196では画像データ転送の「繰り返し回数」は一定ではないので「繰り返し回数」を自動設定するように制御できる。
その後、画像出力部1523はDMAC196を起動し、中間バッファ制御部1522を介して中間バッファ232の出力領域236から画像データを読み出す(READ)。そして、DMAC196は上記初期設定から開始アドレスを自動算出して、出力バンド領域の画像データをグローバルバッファに書き込む(STORE)。小領域の画像データをすべて書き込むと、図8に示すSTORE動作を完了する。
このように画像出力部1523では、DMA転送の実行前に、受信部1543で受信ライン数を算出することで、DMA転送の「繰り返し回数」を自動算出する。したがって、解像度変換によって出力バンド領域のバンド高さが変動しても、DMA転送の直前に、この変動に追従してDMA転送量を算出し、DMA転送を実行することができる。
また、中間バッファ232を介して、画像入力部1521がLOAD動作と送信動作を連動させ、画像出力部1523が受信動作とSTORE動作を連動させる。そして、画像入力部1521がDMAC194を起動し、画像出力部1523がDMAC196を起動するため、画像入力部1521と画像出力部1523はそれぞれ、画像処理の動作状況に合わせてDMA転送の設定値を変更することができる。
●第3のDMA機能(ラインポインタ管理機能)
本実施形態の画像処理装置はさらに、第3のDMA機能として、ラインポインタの管理機能を有する。以下、図7Aを用いて、本実施形態におけるラインポインタ管理を伴うデータ転送処理について説明する。図7Aに示す処理は、画像入力部1521と画像出力部1523の各々において実行されるが、ここでは、主に画像出力部1523による処理として詳細に説明を行う。
図8のS810に示したような初期設定(S710)を行った後、1バンドの処理を開始する(S712)。まず、ポインタ管理部1544に保持されているラインポインタから、上記(1)式により開始アドレスを算出する(S714)。そして、小領域の画像処理を開始する(S720)。小領域(処理単位)毎のLOAD、送信、受信、STOREの各動作は、図8を用いて説明した通りであり、図8に示すDMAC情報の書き換え(S870)のタイミングで、小領域単位の情報を書き換える(S730)。小領域単位の情報を書き換えた後、該当する小領域の開始アドレスや繰り返し回数をDMACに設定する(S734)。該当する小領域はバンドの長さ方向(副走査方向)に走査していくため、まずバンド領域の開始アドレスを算出し、小領域の位置に合わせて「連続読み出し量」から小領域の開始アドレスを算出する。そして求めた開始アドレスをDMAC196に再設定していく。繰り返し回数に関しては上述した通りである。その後、小領域のDMA動作を行って(S736)、小領域の画像処理を完了する(S740)。
S740での小領域の画像処理完了により、1バンド分のすべての小領域の処理が完了するのであれば(S750のYES)、1バンドの処理が完了したとする。一方、1バンド分のすべての小領域の処理が完了していなければ(S750のNO)、S720に戻って次の小領域の処理を繰り返す。
1バンドの処理が完了したならば(S750のYES)、1バンド単位の情報を書き換える(S760)。具体的には、ポインタ管理部1542や1544に保持されているラインポインタを更新する。画像入力部1521のポインタ管理部1542では、ラインポインタの値に、予め初期設定で設定された変更量("+7")を加算して、ラインポインタを更新する。画像出力部1523のポインタ管理部1544では、ラインポインタの値に、小領域単位の情報の書き換え(S730)で使用した受信ライン数を加算して、ラインポインタを更新する。これで、1バンドの処理を完了する(S780)。
そして、所定のバンド数分の画像処理が完了していれば(S790のYES)、画像処理の完了とする。一方、所定のバンド分の画像処理が完了していないのであれば(S790のNO)、S712に戻って次のバンド処理を繰り返す。次バンドの処理を行う際には、S760と同様に所定の変更量(遷移量)か受信ライン数によって、ラインポインタが適切に更新されるため、バンド先頭の開始アドレスの算出(S714)により、適切な開始位置からバンド処理を再開できる。
以上のように本実施形態の画像処理装置においては、第1〜第3のDMA機能として、ラインポインタに基づくDMA転送「開始アドレス」の自動計算機能、DMA転送の「繰り返し回数」の自動計算機能、ラインポインタ管理機能、を有する。これにより、画像入力部1521が中間バッファ232を介してLOAD動作と送信動作を連動することができ、画像出力部1523が中間バッファ232を介して受信動作とSTORE動作を連動することができる。これら動作の連動により、画像処理の動作状況に連動しながら、CPU102を介在することなく、複数バンドの画像処理を連続的に実行することができる。
●本実施形態の効果
従来の画像処理装置では、解像度変換によりバンド毎に入力/出力画像の画素数が変わることに対し、ファームウェアでの事前計算によってDMAの設定を行っていた。対して本実施形態では、画像処理の入力/出力DMACが画像処理の結果に追従して動作することができるため、CPUによる画像処理部の設定、起動、同期などの制御が不要となる。その結果、CPUと画像処理部との待ち合せ時間が削減でき、画像処理全体を高速化できる。また上述したファームウェアによる一連の制御処理をCPUがバンド毎に実行する必要が無くなるため、CPUの制御負荷を減らすことができる。
以上説明したように本実施形態によれば、画像処理部への画像データの転送を効率化して画像処理全体を高速化し、CPUの処理負荷を軽減することができる。
<変形例>
本実施形態における中間バッファを、2バンク構成の記憶手段に拡張することができる。例えば図2Bに示すように、中間バッファ制御部1522を、記憶領域Aと記憶領域Bからなる2バンク構成とする。このような2バンク構成にすることにより、中間バッファ制御部1522は小領域(処理単位)を同時に2つまで格納できる。そして動作状況に応じて、記憶領域を入れ替える(バンクチェンジ)。上述したように、中間バッファ制御部1522が1バンク構成であれば、入力画像データのLOAD動作と、入力画像データから画素値を生成する送信動作とを時分割で行っていた。また、出力画素値から出力画像データを生成する受信動作と、出力画像データのSTORE動作とを時分割で行っていた。本変形例では中間バッファ制御部1522を2バンク構成とすることで、入力画像データから画素値を生成する間にも、次の小領域(処理単位)の入力画像データを受け取れる。また、出力画素値から出力画像データを生成する間にも、生成済みの出力画像データを出力できる。したがって、DMAC194と送信部1541の処理を並列化でき、またDMAC196と受信部1543の処理を並列化できる。つまり、図8に記載した「LOAD動作」と「送信動作」とを同時動作させ、「STORE動作」と「受信動作」とを同時動作させることが可能となる。
本変形例では、処理前と処理後の2種の画像データを同時に入出力するので、中間バッファの入力領域と出力領域がそれぞれのバンク(バンクAとバンクB)に分けられる。したがって、入力領域と出力領域のそれぞれについての先頭アドレスを、CPU102が予め設定しておけばよい。処理を簡単に行うためには、バンクAとバンクBの先頭アドレスは1セットあればよい。そして各バンクの容量は、処理前と処理後の画像データの入力バンド高さと出力バンド高さの最大値をもとに算出すればよい。
このように本変形例によれば、画像処理部で同時に扱う複数種の画像データに対し、各々に中間バッファを割り当てることで、画像処理を高速化することができる。
<第2実施形態>
以下、本発明にかかる第2実施形態について説明する。なお、第2実施形態における画像処理装置の構成は上述した第1実施形態と同様であるため、説明を省略する。上述した第1実施形態では、RAM106や外部記憶装置108のグローバルバッファに1ページ(1画面)分の入力/出力の画像データを記憶するための記憶容量を備えていた。しかしながら、製品の製造コストを抑えるためには、RAM106や外部記憶装置108にグローバルバッファとして1ページ分の画像データを記憶するに十分な記憶容量を備えられない場合もある。第2実施形態では、グローバルバッファが1ページ分の容量に満たない場合であっても、グローバルバッファをリング式のバッファ(以下、リングバッファと称する)として使用することで、1ページ分の画像処理を可能とする。
図6Bにリングバッファを用いたバンド処理の例を示す。処理中の画像データのライン位置がバッファの下端(line_v_thr)に到達すると、ライン位置をバッファの上端("0")に戻して循環させるように制御する必要がある。このような循環制御を行うことで、1ページ分を処理するために必要となる記憶容量を、1ページの全体分よりも小さく抑えるこができる。図6Bの例ではグローバルバッファに、入力画像データを記憶する領域BIrと、出力画像データを記憶する領域BOrが、互いに重ならない記憶領域(リングバッファ)として確保されている。図6Bにおいてもバンド領域ごとに順次画像処理が繰り返されるため、図6Aと同様に、時間の経過に伴って入力画像データのバンド領域(a)〜(d)と出力画像データのバンド領域(x)〜(xa)が遷移する旨が示されている。そして、第1実施形態と同様に、各バンド領域の上端のライン位置を一時的に記憶するため、画像入力部1521と画像出力部1523はそれぞれのポインタ管理部1542,1544でラインポインタを管理している。
図6Bにおいて、入力画像データのバンド領域(c)と出力画像データのバンド領域(z)は、処理の途中でリングバッファの記憶容量が不足する。あるバンド領域がリングバッファ下端に到達すると、その後のバンド領域はリングバッファ上端からデータ記憶がなされるため、バンド領域(c)は(c-0)と(c-1)に分割され、バンド領域(z)は(z-0)と(z-1)に分割されてしまう。そこで第2実施形態では、データ転送処理の手順が第1実施形態とは変わってくる。
●ラインポインタ管理機能
以下、図7Bを用いて、第2実施形態においてリングバッファを用いる際の、ラインポインタ管理を伴うデータ転送処理について説明する。なお以下では、リングバッファを用いることによる第1実施形態からの変更点のみを説明し、第1実施形態と同様の処理については説明を省略する。
図7Bにおいて、小領域単位の情報を書き換えた後(S730)、該当する小領域の開始アドレスや繰り返し回数をDMACに設定するのに先立ち、ラインポインタがリングバッファの下端に到達するか否かを判定する(S732)。すなわち、DMA転送の「繰り返し回数」は小領域のバンド高さ(副走査方向のライン長)を示すため、ラインポインタにバンド高さを加算したライン位置が、リングバッファの下端のライン位置(line_v_thr)よりも大きくなるか否かを判定する。加算したライン位置がリングバッファ下端と同じか小さいとき(S732のNO)、第1実施形態と同様の処理(S734,S736)を行う。一方、加算したライン位置がリングバッファ下端より大きいとき(S732のYES)、DMA転送を2回起動する。
1回目のDMA転送では、「開始アドレス」は第1実施形態と同様に設定するが、「繰り返し回数」はラインポインタからリングバッファ下端のライン位置(line_v_thr)までの値として設定する(S772)。そして、1回目のDMA転送を行う(S773)。この1回目のDMA転送により、分割された小領域の上部分(バンド領域(C-0)や(z-0)が転送される。
次に2回目のDMA転送では、ラインポインタをリングバッファ上端のライン位置を示す"0"として、「開始アドレス」を算出する。また、「繰り返し回数」としては、1回目のDMA転送の「繰り返し回数」をバンド高さから差し引いた残りの数を設定する(S774)。そして2回目のDMA転送を行う(S775)。この2回目のDMA転送により、分割された小領域の下部分(バンド領域(C-1)や(z-1)が転送される。このように第2実施形態では、リングバッファ境界を跨ぐときにDMA転送が分割されない。
その後、1バンドの処理が完了したならば(S750のYES)、ポインタ管理部1542や1544に保持されているラインポインタを更新するのに先立ち、ラインポインタがリングバッファ下端に到達するか否かを判定する(S770)。この判定はS732と同様である。すなわち、ラインポインタにバンド高さを加算したライン位置が、リングバッファ下端と同じか小さいとき(S770のNO)、第1実施形態と同様にラインポインタを更新する(S760)。一方、加算したライン位置がリングバッファ下端より大きいとき(S770のYES)、リングバッファ上端(ライン位置"0")からの2回目のDMA転送を実行した際に設定した「繰り返し回数」から1を減じた値に、ラインポインタを更新する(S778)。そして1バンドの処理を完了する(S780)。
このようにリングバッファに対し、所定の変更量(遷移量)か受信ライン数に従ってラインポインタが適切に更新されるため、バンド先頭の開始アドレスの算出(S714)により、適切な開始位置からバンド処理を再開できる。
以上説明したように第2実施形態によれば、リングバッファに対応したラインポインタ管理機能を備えることで、入力/出力画像データを格納するグローバルバッファの記憶容量を削減することができる。
<第3実施形態>
以下、本発明にかかる第3実施形態について説明する。なお、第3実施形態における画像処理装置の構成は上述した第1実施形態と同様であるため、説明を省略する。上述した第1および第2実施形態では、処理対象である画像データが図4Aに示す点順次形式をなす例を示した。第3実施形態では、さらに異なるデータ形式の画像データを処理する例を示す。
第3実施形態における画像データの構造および格納例を図4Bに示す。図4Bは、面順次形式の画像データの格納例として、RAM(DRAM)106のデータ領域に、S0_IMG420からS3_IMG423までの4種の画像データが格納された例を示している。この4種のデータは、画像読み取り部120で読み取られた画像データに対して色空間変換や濃度補正処理を施した後、第1色K(Black)、第2色M(Magenta)、第3色C(Cyan)、第4色Y(Yellow)のデータに変換したものである。そしてDRAMの性能を落とさずに画像データの読み書きができるように、各々格納される画像データの容量の最小単位を、第1実施形態と同様に、408に示すように32bit×8wordの32Byteとしている。すなわち、画像データS0_IMG420からS3_IMG423の格納容量は32Byteの整数倍となる。
次に、画像データの構造について詳細に説明する。画像データ430は、第1色K(Black)の画像データ(S0_IMG420)を示しており、32M×Nbitのサイズからなる。画像データ430は32Byte単位の領域データからなり、各領域(例えば領域432)は、434で示すように、複数個(この例では8個)の32bit長がパッキングされている。そして、1つの32bit長データには、436で示すようにそれぞれ8bit長のK(Black)の色要素が複数個(この例では4つ)パッキングされている。残りの第2色M〜第4色Yまでの画像データについても、同様の構造からなる。
●画像データの入出力方法
以下、第3実施形態における、グローバルバッファから画像入出力部152への、または画像入出力部152からグローバルバッファへの画像データの入出力方法について、第1実施形態と同様に図2Aを用いて詳細に説明する。第3実施形態では、図4Bに示す面順次形式の画像データを処理する場合、第1色Kから第4色Yの4種の画像データについて、第1実施形態で説明した小領域(処理単位)ごとにグローバルバッファから読み出す。例えば、図2Aに示す小領域(1)211に対応する画像データついては、DMAC194の先頭アドレスとして、図4Bに示す以下の4種のアドレスを順に切り替えて設定し、DMA転送を4回実行する。これにより、第1色K〜第4色Yの色ごとにDMA転送が行われる。
・先頭アドレス[1回目]:S0_IMG_STR_ADDR
・先頭アドレス[2回目]:S1_IMG_STR_ADDR
・先頭アドレス[3回目]:S2_IMG_STR_ADDR
・先頭アドレス[4回目]:S3_IMG_STR_ADDR
そして、上記4種のアドレスに従って読み出した4種(4色)の画像データの全てを、一旦、中間バッファ232へ格納する。そして、4種の画像データの所定位置(座標)における4つの色要素を読み出し、これらを1つにまとめて点順次形式の画素値(C,M,Y,K)として、画像処理実行部153へ入力すればよい。また、画像処理実行部153による処理後の点順次形式の画素値(C,M,Y,K)から4つの色要素を取り出し、出力領域内の4種の出力画像データの領域に各々格納する。当然ながら、出力画像データのグローバルバッファへの書き出しについても、4回のDMA転送が必要となる。
●ラインポインタ管理機能
第3実施形態では、グローバルバッファに対する画像データの入出力の際に、面順次形式の画像データに応じた面数分、すなわち4回のDMA転送が必要となることから、上述した第1および第2実施形態の処理手順に対してDMA動作の回数が変わる。
以下、図7Cを用いて、第3実施形態において面順次形式の画像データを処理する際の、ラインポインタ管理と伴うデータ転送処理について説明する。図7Cは、第2実施形態において図7Bに示した処理手順に対し、面順次形式の画像データを扱う第3実施形態に特有の処理(S738,S739)を加えたものである。以下では、第2実施形態からの変更点のみを説明し、第1および第2実施形態と同様の処理については説明を省略する。
図7Cにおいて、小領域単位のDMA動作(S736)の後、面順次形式の面数(色数)に応じた回数(以下、DMA面数)分のDMA動作を行う(S738)。上記の例では4種(4色)の画像データであるため、DMA動作が4回未満のときは(S738のNO)、所定の回数が完了するまでDMA動作を繰り返し、DMA動作を4回行えばDMA動作を完了とする(S738のYES)。
なお、ポインタ管理部1542,1544は予め、DMA面数分のラインポインタを備えており、1バンド分の小領域の処理完了に伴い、DMA面数分のラインポインタを更新する(S739)。
なお図7Cは、第2実施形態の図7Bに示した処理手順に対し、第3実施形態に特有の処理(S738,S739)を加えた例を示したが、第1実施形態を示す図7Aに対し、S738,S739を加えることも可能である。
以上説明したように第3実施形態では、入力/出力画像データの面数に対応したラインポインタ管理機能を備えるため、様々な画像データの形式に対応して柔軟に画像処理を実現することができる。
<他の実施形態>
上述した第1〜第3実施形態を応用することによって、本発明はさらに多種多様な画像処理に対応することができる。
例えば、解像度変換により、バンドを構成する小領域(処理単位)の個数が入力M個から出力N個に変わった場合、受信動作中に画像処理の最後の画素を検出すれば、最後の小領域を受信した旨が検出できる。最後の小領域を検出した後、図8に示すDMAC情報(繰り返し回数)の書き換え(S870)の際に小領域の数を変更すれば、DMA転送を途中で打ち切って完了することができる。つまり、画像処理後のバンド領域を構成する小領域の数を予め算出して初期設定しておかなくても、本発明の手法により、処理する小領域の数を自動的に追従することができる。
また、本発明では小領域ごとに受信ライン数を算出(S860)できる。したがって、上述した解像度変換のようなバンド領域単位の大きさの変動だけでなく、処理後の画像の大きさが小領域ごとに変動するような場合にも、小領域ごとにDMA転送の設定値を切り替えることで対応できる。例えば、主走査方向に沿って歪みを補正する画像の曲がり補正のような処理に、本発明を適用することができる。
また、映像処理などで使用されるIP変換なども、本発明の適用対象となる。IP変換とは、副走査方向に画素が間引かれたインターレース画像を、時間軸方向に複数フレームを用いて1フレームの画素が間引かれていないプログレッシブ画像を合成する処理である。例えば、2フレームのインターレース画像から1フレームのプログレッシブ画像を合成する場合、入力画像の総画素数と出力画像の画素数は同じとなる。しかしながら高品位なIP変換では、3〜5フレームのインターレース画像から1フレームのプログレッシブ画像を合成することになるので、入力画像より出力画像の方が画素数は少なくなる。例えばIP変換では、ユーザが選択した動作モード(画質モード)により入力画像と出力画像の画素数の関係が変わるため、入力画像データのDMA面数をインターレース画像のフレーム数とし、出力画像データのDMA面数を1フレームとすればよい。つまり、第1実施形態と第3実施形態とを組み合わせることで対応することができる。
上述したように近年の画像処理装置は、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換を含め、様々な画像処理を内包する。そして画像処理装置は、装置全体で所望の高画質化を実現するために、それら画像処理をアプリケーションに応じて取捨選択し、組み合わせて用いることが多い。このような画像処理装置において本発明の手法を用いることで、入力画像データのラインポインタの変更量(遷移量)を一定にしつつ、出力画像データのDMAC情報については処理後の画像データの大きさに追従して自動設定(変更)できる。その結果、様々な画像処理を組み合わせて実行する場合でも、本発明を適用することで、分割された領域ごとにDMAC情報を設定し、DMACを起動し、DMACと同期(待ち合わせ)するCPU102の負荷を軽減できる。
また、上述した第1〜第3実施形態では、画像データに対する領域分割手法として、バンド処理を行う場合を例として説明した。本発明は、他の領域分割手法であるブロック(タイル)処理についても、同様に適用可能である。ブロック処理では、主走査方向と副走査方向に沿って画像データを2次元でタイル領域に分割する。上記各実施形態における小領域(処理単位)が、この2次元分割されたタイル領域に相当し、複数の小領域を順次読み出す手法はブロック処理そのものである。そして、上記各実施形態では、ラインポインタやリングバッファの閾値(下端ライン位置)をバンド高さ方向に沿って備える例を示したが、さらに、バンド長さ方向に沿ったカラムポインタとリングバッファの閾値(例えば右端位置)を備える。そして、1次元的なポインタ管理を2次元的に拡張することで、本発明の手法をバンド処理からタイル処理に拡張することができる。
また、例えば第1実施形態では、画像処理として図5(a)の拡大処理や図5(b)の縮小処理、すなわち解像度変換処理を例に挙げたが、図5(c)に示す等倍処理のように出力ライン数が一様な場合においても、本発明は適用可能である。つまり、解像度変換(拡大または縮小)を行わない画像処理に対しても、本発明の手法はそのまま適用可能である。
また、上記各実施形態では画像データの読み書きの単位を32Byteとして説明した。しかしながら、グローバルバッファの構成や該バッファを実現する記憶装置(DRAM、フラッシュROM、ハードディスク、SSD等)の種類、そして実行する画像処理の種類等によって、この単位は変更可能である。読み書きの単位が変わったとしても、画像データを記憶するローカルバッファ(中間バッファ)に記憶される画素数が変わるだけであるため、本発明はそのまま適用可能である。
また、画像データにおける32Byte単位のデータ構造を、画像入力部1521と画像出力部1523とで、異なる画像形式として組み合せてもよい。例えば、画像入力部1521と画像出力部1523は、点順次形式(図4A)と面順次形式(図4B)の所望の組合せにおいて動作できる。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。