以下、添付の図面を参照して本発明の好適な実施例を説明する。
(第1実施例)
図1は、第1実施例の画像処理装置の全体構成の一例を示すブロック図である。図1において、画像読み取り部120は、レンズ124、CCDセンサ126、及びアナログ信号処理部127等を有する。画像読み取り部120において、レンズ124を介しCCDセンサ126に結像された原稿110の画像情報が、CCDセンサ126によりR(Red),G(Green),B(Blue)のアナログ電気信号に変換される。アナログ電気信号に変換された画像情報は、アナログ信号処理部127に入力され、R,G,Bの各色毎に補正等が行われた後にアナログ/デジタル変換(A/D変換)される。こうして、デジタル化されたフルカラー信号(デジタル画像信号という)が生成される。生成されたデジタル画像信号は、CPU102によって予め動作を設定されたダイレクトメモリアクセスコントローラ(DMAC)192により、共有バス190を介してCPU回路部100のRAM106にデジタル画像データとして格納される。
次にCPU102は、画像処理部150の起動レジスタに所定の値をセットして画像処理部150を起動する。画像処理部150は、コマンドリストをROM104やRAM106(メインメモリ)や外部記憶装置108から取得する。本実施例では、後述のディスプレイリストがコマンドリストとして用いられる。そして、画像処理部150は、取得したディスプレイリストに従って画像処理部150内部の画像処理回路等のレジスタ設定を行い、デジタル画像データをRAM106(メインメモリ)や外部記憶装置108から読み込む。そして入力されたデジタル画像信号に対し、スキャナなどのセンサデバイスの読み取り素子の個体差の補正と入力ガンマ補正などの色補正を行い、読み取り画像を正規化して一定水準のデジタル画像データを作成する。画像処理部150は、これら処理が施されたデジタル画像信号を、上述のディスプレイリストに従ったレジスタ設定値に応じてRAM106(メインメモリ)に格納させる。
また、例えば、画像処理部150は入力されたデジタル画像信号に対し、入力色補正処理、空間フィルタ処理、色空間変換、濃度補正処理、及び中間調処理などの印刷のための画像処理を施し、印刷可能なデジタル画像データを作成する。そして、上述と同様に、画像処理部150は、作成したデジタル画像データをRAM106に格納する。最後にCPU102は、DMAC198を用いて、RAM106に格納された画像処理済みのデジタル画像データを読み出して画像印刷部170(プリンタ)へ出力する。この画像印刷部170は、たとえば、インクジェットヘッドやサーマルヘッド等を使用したラスタプロッタ等の印刷出力部(図示せず)を備えて構成され、入力されたデジタル画像信号により紙上に画像を記録する。
CPU回路部100は、演算制御用のCPU102、固定データやプログラムを格納するROM104、データの一時保存やプログラムのロードに使用されるRAM106、及び外部記憶装置108等を備える。CPU回路部100は、画像読み取り部120、画像処理部150、及び画像印刷部170等を制御し、本実施例の画像処理装置のシーケンスを統括的に制御する。外部記憶装置108は、本実施例の画像処理装置が使用するパラメータやプログラムや補正データを記憶するディスク等の記憶媒体であり、RAM106のデータやプログラム等は、外部記憶装置108からロードされる構成としても構わない。
まず、図1の画像読み取り部120による読み取り画像に対して、センサデバイスの読み取り素子の個体差を補正する補正処理をバンド領域を単位としたバンド処理を用いて行う場合について説明する。バンド処理では、デジタル画像データの座標系(主走査方向−副走査方向)として、図3の(e)に示すように、長さ方向、高さ方向という新たな座標系(バンド領域座標系)を定義し、バンド領域を長さ×高さで表現する。また、バンド領域の長さは、デジタル画像データの主走査方向の幅、もしくは副走査方向の高さの何れかの値となり、バンドの高さは任意の値となる。例えば、主走査方向に複数のバンド領域を確保した場合のバンド領域の長さは、デジタル画像データの副走査方向の高さとなる。
バンド処理では、図3の(a)に示す第1のバンド領域301を、メインメモリ上のバンドメモリに展開して画像処理を行う。次に、図3の(b)に示す第2のバンド領域302を第1のバンド領域301が展開されたバンドメモリに上書き展開して画像処理を行う。さらに、図3の(c)に示す第3のバンド領域303を第2のバンド領域302が展開されたバンドメモリに上書き展開して画像処理を行う。最後に、図3の(d)に示す第4のバンド領域304を第3のバンド領域303が展開されたバンドメモリに上書き展開して画像処理を行う。図3の(a)〜(d)で明らかなように、バンド領域301〜304の長さは同じであるが、高さは同じである必要性は無い。メインメモリに確保される記憶領域であるところのバンドメモリの高さは、高さ方向のサイズが最も大きいバンド領域(図3の場合、第1〜第3のバンド領域301〜303)によって決定される。
図19の(a)は、スキャナなどの画像読み取り装置による読み取り画像に対して、センサデバイスの読み取り素子の個体差を補正する補正処理を説明する図である。この補正処理に必要な情報は、センサデバイスの読み取り素子ごとの読み取り最小値データ(補正データ1002)と読み取り最大値データ(補正データ1001)である。補正画像処理1006では、これらの情報を元に補正対象である読み取り画像1003を画素データ(画素値)ごとに、例えば下記(式1)を用いた演算により補正し、補正部分画像1007を得る。
(式1) X=(P−MIN)/(MAX−MIN)×1023
ここで、読み取り画素値 :P,読み取り最小値 :MIN,読み取り最大値 :MAX,補正画素値 :X(Xは10bitのデジタル信号)とする。
そして、この処理を読み取り画像1003について繰り返すことにより、補正画像1005を得る。つまり補正処理に必要なデータは、画素ごとに異なる補正データ1001,1002と読み取り画像の画素データ(入力部分画像1004)という3種の異なる情報である。スキャナのセンサデバイスが、画素ごとの読み取り素子を1ラインにまとめたものであるラインセンサの場合には、このセンサが副走査方向に移動することで2次元画像の読み取りを行う。このような読み取り方式の場合、主走査方向に対しては、画素ごとに異なる最小値データと最大値データが並び、副走査方向に対しては、主走査位置が同一の画素の場合、同一の最小値データと最大値データとなる。
上記の画像処理の場合、センサデバイスの読み取り素子ごとの読み取り最小値データと読み取り最大値データが必要であり、これらの種々のデータは一時的に前述のRAM106に格納されている。図4を用いてRAM106への画像データの格納のし方を説明する。
図4中のIMG_AREA_STR_ADDRからIMG_AREA_END_ADDRまでが画像処理に必要な種々のデータを格納する領域である。図示の一例では、この領域にS0_IMGからS5_IMGまで6種のデータが格納されている状態である。DRAMの性能を落とさずにデータをアクセスできるように、各々格納されるデータの容量の最小単位は、408に示すように32bit×8wordの32Byteとなっている。当然ながら、S0_IMGからS5_IMGまでの画像データの格納容量は、32Byteの整数倍となる。たとえば、2次元の画像データの場合、最大画像領域(window'sarea)440に相当する領域がメモリ上の420(422,424,426)で示される。また、そこに収まるS0_IMG(image's area)430の領域がメモリ上の410で示される領域に格納されている。スキャナのラインセンサデバイス450が原稿490に対して副走査方向(v)に移動しながら原稿を読み取る場合にラインセンサデバイス450の主走査方向(h)に補正データ(MAX)470と補正データ(MIN)475が分布している。図4の例では、RAM106上のS4_IMG460とS5_IMG465に補正データ(MAX)470と補正データ(MIN)475がそれぞれ格納されている。
さらに図6を用いてバンド単位の画像データのデータ構造を詳しく説明する。500は前述のS0_IMG(image’sarea)430の領域のデジタル画像データを示している。510の領域は前述の32Byte単位のデータであり、その中に520で示す8画素のデータがパッキングされている。また1つの画素データは、530で示すように10bitのR(Red),G(Green),B(Blue)データがパッキングされている。なお、図示の例では、残りの2bitは、DRAMによるデータアクセスを簡単にするために確保されているものであり、無効データとして処理には使用されない。図の太枠500の範囲は、8M×Nの大きさの画像を意味する。また前述のS4_IMG460とS5_IMG465に格納されている、スキャナ・センサデバイスの補正データの場合、1ラインのラインセンサであるため、座標(0,0)から(8M,0)の範囲のデータとなる。
次に図5を用いてRAM106へのディスプレイリストの格納のし方を説明する。図5中のDPL_AREA_STR_ADDRからDPL_AREA_END_ADDRまでが画像処理に必要な種々の描画コマンドを格納する領域である。図示の例では、この領域にDPL(1)からDPL(3)まで3種のディスプレイリストが格納されている状態が示されている。DRAMの性能を落とさずにデータをアクセスできるように、各々格納されるデータの容量の最小単位は、406に示すように32bit×8wordの32Byteとなっている。当然ながら、DPL(1)からDPL(3)までのディスプレイリストの格納容量は、32Byteの整数倍となる。CPU102は、選択されたアプリケーションやユーザ操作などによって使用するディスプレイリストをDPL(1)からDPL(3)の中から選択して、異なる画像処理を実行する。
さらに図7を用いてメインメモリとしてのRAM106へ格納されているディスプレイリストに含まれるコマンドのデータ構成例について詳しく説明する。本実施例では、ディスプレイリストを構成するコマンドは、64bit長のコマンドとなっており、32Byte単位のデータ520に4つのコマンドが格納される。またディスプレイリストを構成するコマンドは、レジスタ制御コマンド540、データ取得コマンド542、終了コマンド546のように少なくとも3種存在する。なお、データ取得コマンド542は画像処理入力回路220により生成され、画像処理回路へ送出されるコマンド(詳細は後述する)である。各コマンドは上位8bitのオペコード(opcode)により識別され、下位56bitは各コマンドにより用途が異なる。これらのコマンドは図1に記載の画像処理部150で機能する。以下、画像処理部150の構成例である図2の(a)を用いて各コマンドの動作について説明する。
まずディスプレイリストを構成する各コマンドは、画像処理部150の各種画像処理回路(画像処理入力回路220、画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270、画像処理出力回路280)で機能する。画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270は、内部バスによりシリーズに接続されている。各コマンドは、その入力順に内部バス225、235、245、・・・、265、275を介して画像処理入力回路220、画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270、画像処理出力回路280へと送出される。各コマンドは各画像処理回路により、内部情報を書き換えられることはあるが、コマンド自体が途中で削除されることはない。
レジスタ制御コマンド540は、画像処理部150の各種画像処理回路のレジスタに対して値を読み書きするためのコマンドであり、1bit情報“rw”が“0”のときはレジスタリードコマンド、“rw”が“1”のときはレジスタライトコマンドとなる。7bitの回路識別情報“ip_id”は、上記の各種画像処理回路を区別、特定する情報である。例えば画像処理入力回路220は“0”、画像処理回路(1)230は“1”、画像処理回路(2)240は“2”、画像処理回路(P)270は“P”、画像処理出力回路280は“30”であるとする。また16bit情報“address”は、上記の各種画像処理回路ごとの所有するレジスタの番地を示す情報である。例えば、“rw=1、ip_id=1、address=0x0、data=0xF”であるレジスタ制御コマンドの場合を考える。このレジスタ制御コマンドは、画像処理入力回路220では、回路識別情報“ip_id”が異なるので無視され、内部バス225を通って画像処理回路(1)230に入力される。画像処理回路(1)230では、回路識別情報“ip_id”が同一であるので、同レジスタライトコマンドが有効となり、画像処理回路(1)230の“address=0x0”番地のレジスタに、“data=0xF”が書き込まれる。画像処理回路(1)230は同レジスタ・ライト・コマンドを削除せず、そのまま内部バス235を介して次の画像処理回路(2)240へ入力される。画像処理回路(2)240以降の回路では回路識別情報“ip_id”が異なるため、同レジスタライトコマンドは無視され、最後に画像処理出力回路280で無視された後、同レジスタライトコマンドは画像処理出力回路280により削除される。また“rw=0、ip_id=2、address=0x4、data=0x0”であるレジスタリードコマンドの場合、前述のレジスタライトコマンド同様、回路識別情報“ip_id=2”である画像処理回路(2)240以外では無視される。同レジスタリードコマンドは回路識別情報“ip_id”が同一である画像処理回路(2)240で有効となる。そして、“address=0x4”番地のレジスタ値が読み出され、同レジスタリードコマンドの“data”領域がこの読み出された値に置き換わり、内部バス245を介して後段の画像処理回路に送られる。画像処理出力回路280では、前述のレジスタライトコマンドと異なり、“data”だけが抜き取られるか、同レジスタリードコマンドそのものが、CPU102がアクセス可能なメモリ領域に出力(記憶)される。
データ取得コマンド542は、画像処理入力回路220と画像処理出力回路280の動作を制御するコマンドである。画像処理入力回路220は、データ取得コマンドを受け取り、前述のレジスタ制御コマンドにて予め設定されたレジスタ値に従い、DMAC(Read)210を起動してメインメモリからデジタル画像データや補正データを取得する。ここで、DMACに予め設定されたレジスタ値とは、例えば、レジスタ制御コマンドにより設定された読出し開始アドレスと読出し回数である。次に、画像処理入力回路220は、このデータ取得コマンドを画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270、画像処理出力回路280へ内部バスを介して送る。このように、データ取得コマンドを下流へ送ることにより、例えば、レジスタ制御とデータ処理を時分割で動作を切り換えるときに、切り替え制御を容易に実現することが可能となる。そして、画像処理入力回路220は、DMAC210を用いて取得したデジタル画像データや補正データをデータ処理コマンド544の形式に変換する。そして、画像処理入力回路220は、データ処理コマンド544を画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270、画像処理出力回路280へ内部バスを介して送る。
また画像処理出力回路280は、データ取得コマンドを受け取り、その後に続くデータ処理コマンドのRGB領域から情報を抜き出し、所定のパッキングを行い、32Byte単位のデータに変換する。そして、画像処理出力回路280は、レジスタ制御コマンドにて予め設定されたレジスタ値にしたがってDMAC(Write)290を起動して32Byte単位の処理後のデジタル画像データをRAM106へ書き出す。
データ処理コマンド544は、画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270を用いて画像処理を実行するためのコマンドである。画像処理を実行する前に予め画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270には、前述のレジスタライトコマンドにより所定のレジスタ値が設定されている。データ処理コマンド544は、8bitのデータ処理識別情報“step”を含む。また、画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270には、処理すべきデータ処理コマンドを識別するためのデータ処理識別情報“step”が設定されている。そして、各画像処理回路は、入力されたデータ処理コマンドのデータ処理識別情報“step”が自身の同一のデータ処理識別情報と同一のデータ処理コマンドのみ画像処理を行い、それ以外のデータ処理コマンドは無視する。各画像処理回路は、データ処理コマンドの各16bitのR、G、B領域の画像データを抜き出し、所定の画像処理を行い、処理結果をデータ処理コマンドの各16bitのR、G、B領域に格納して内部バスを介して後段の画像処理回路に送る。各画像処理回路(1)230、画像処理回路(2)240〜画像処理回路(P)270が一連の画像処理を行うことで、パイプライン的に並列処理を行う。終了コマンド546は、ディスプレイリストの終了を示すコマンドであり、画像処理出力回路280は、このコマンドを受け取った後、CPU102に対して終了割り込みを出力する。
次に、図2の(a)と図8A、図8B、図8C、図9、図10、図11A、図11Bを用いて画像処理部150の動作とディスプレイリストの関係についてさらに詳しく説明する。前述の画像読み取り部120により読み取られた読み取り画像(デジタル画像データ)と補正データは図4および図6で説明したようにRAM106に格納されている。まずCPU102は、RAM106に格納されたデジタル画像データを画像処理するために、図8Aに示すようなディスプレイリストを作成する(S710)。そして、CPU102は、作成したディスプレイリストを、RAM106の図5に記載のディスプレイリスト格納領域DPL(2)に書き込む(S712)。次にCPU102は、図2の(a)の画像処理部150を制御するための専用バス202を介して、ディスプレイリストの先頭アドレスであるDPL_STR_ADDRと連続転送量であるDPL_DMA_LENGTHとを設定する(S714)。さらに、CPU102は、専用バス202を介してディスプレイリストの読み出し動作を起動するレジスタ(Kickレジスタ)に“0x1”を書き込む(S716)。なお、本明細書では、前述のようなディスプレイリストに従った画像処理を画像処理部150のPULL型動作と呼ぶこととする。その後、CPU102は、画像処理出力回路280から画像処理の終了割り込みが入力されるまで解放される(S718、S719)。
画像処理入力回路220は、DMAC(Read)210の設定と起動を行う(S720,S722)ことにより、ダイレクトメモリアクセスによりディスプレイリストを取得する。すなわち、画像処理入力回路220は、DMAC210を用いてRAM106のDPL_STR_ADDR番地を先頭アドレスとして連続するDPL_DMA_LENGTH(例えが1KByte)分のディスプレイリストを読み出す(S780)。画像処理入力回路220は、DMAC210からの入力を受けて、読み出したディスプレイリストを画像処理入力回路220内のバッファ660に一旦記憶する。画像処理入力回路220はバッファ660に記憶されたディスプレイリストを先頭から1コマンドずつ取り出して解析する(S724)。そして、取り出したコマンドがレジスタ制御コマンドであり回路識別情報“ip_id”が“0”の場合、画像処理入力回路220は当該レジスタ制御コマンドを処理した後に後段の画像処理回路へ送出する(S726,S730)。また、取り出したコマンドがレジスタ制御コマンドであり回路識別情報“ip_id”が“0”でない場合、画像処理入力回路220は何も処理せずに当該レジスタ制御コマンドを後段の画像処理回路へ送出する(S726,S730)。後段の画像処理回路(1)230から画像処理回路(P)270においても、回路識別情報“ip_id”によりレジスタ制御コマンドに対応した処理(レジスタライト、レジスタリード)が行われる(S740)。そして、画像処理出力回路280も同様のレジスタ設定処理を行った後(S750)に、レジスタリードコマンドに記述されている、読み出されたレジスタ値のみをDMAC(Write)290を用いてRAM106へ書き込む(S790)。
図8Aのディスプレイリスト例の550、552、554はレジスタライトコマンド(rw=1)である。すなわち、画像処理入力回路220、画像処理回路(1)230〜画像処理回路(P)270、画像処理出力回路280の画像処理時のレジスタ値を設定するためのレジスタライトコマンドがディスプレイリスト冒頭に並ぶ。このレジスタライトコマンドですべての回路の所望のレジスタ設定が完了すると、データ取得コマンド556が画像入力回路に取り込まれる。画像処理入力回路220は解析したコマンドがデータ取得コマンドであった場合は、当該コマンドをそのまま後段の画像処理回路(1)へ送る(S728、S732)。また、このとき、画像処理入力回路220は、データ取得コマンドが記憶されていたバッファ660のアドレスを内部のテンポラリレジスタに退避して、ディスプレイリスト解析を一旦中断する。そして、先に設定されたレジスタ値にしたがってDMAC(Read)210の設定と起動を行い(S732)、ダイレクトメモリアクセスにより画像データを取得する。すなわち、DMAC210は、RAM106の先頭アドレスS0_IMG_STR_ADDR番地から後述する所定の連続数で所定の繰り返し回数だけデジタル画像データを読み出す(S782)。
画像処理入力回路220は、DMAC(Read)210からの入力を受けて、読み出したデジタル画像データを画像処理入力回路220のバッファ660に一時的に記憶する。そして、画像処理入力回路220は、バッファに記憶されたデジタル画像データを、先頭から所定画素数ずつ取り出して、データ処理コマンド544に変換して後段の画像処理回路へ送出する(S734)。画像処理入力回路220にディスプレイリストが入力されたときの図8Aと、画像処理入力回路220から出力されたコマンド例である図8Bを比べてみると以下のことがわかる。すなわち、図8Bではデータ取得コマンド570の後にデータ処理コマンド572や574が挿入されており、これらのコマンドはメモリから読み出されたデジタル画像データ559がコマンドに変換されたものである。なお、図8Bにおいて、step=0,1,2はそれぞれ「補正データ(MAX)」「補正データ(MIN)」「画像データ」を表している。また、データ処理コマンド574のstep=Mは、補正処理には関係ない別種の画像処理のデータコマンドを表しており、Mとして0,1,2以外の数値が用いられる。また、図8Bにおいて、データ処理コマンド572はstep=0,1,2,0,1,2,…の繰り返しとなっているが、補正データ(MAX)と補正データ(MIN)を最初に転送した後、画像データを繰り返すようにしてもよい。この場合、step=0,1,2,2,2,2…のようになる。
後段の画像処理回路(1)230から画像処理回路(P)270は、先に設定されたレジスタ値に従い画像処理を行い、R,G,Bデータを変更して(S744)画像処理出力回路280へ送出する。画像処理出力回路280は、R,G,Bデータをデータ処理コマンドから抜き出し(S754)、所定の形式でパッキングする(S754)。そして、パッキングを完了したら、画像処理出力回路280は、先に設定されたレジスタ値に従いDMAC(write)290にレジスタ設定と起動を行う(S756,S758)。この結果、DMAC290により、画像処理後のデジタル画像データ598(図8C)がRAM106に書き込まれる(S792)。
以上のように、ディスプレイリストのデータ取得コマンドをトリガとして、CPU102の介在なしに、画像処理入力回路220によって必要な種々のデータがRAM106から取得される。そして、画像処理回路によって処理され、画像処理出力回路280により処理結果がRAM106へ書き出される。なお、図11A,図11Bでは記載を簡潔にするため、1つのデータ取得コマンドに対して1回のDMAC(Read)と1回のDMAC(Write)の起動となっているが、本発明はこれに限られるものではない。例えば、画像処理入力回路220と画像処理出力回路280のレジスタ設定により、一度に取得するデジタル画像データの画素数を少なく指定することができる。このような設定によれば、1つのデータ取得コマンドに対してDMAC210,295を複数回起動し、少量のデジタル画像データずつ、分割してデータ処理を行うことが可能である。このような場合、後述に詳細説明する画像処理入力回路220と画像処理出力回路280のバッファ容量を小さくできるという利点がある。
データ取得コマンドに対する種々のデータの取得が終了したら(S736)、中断していたディスプレイリストの解析を再開する(S736、S724)。図8Aのディスプレイリスト例では、データ取得コマンド556の後に、レジスタリードコマンド558が続いている。これらのコマンドは、画像処理後の画像処理回路(1)230から(P)270のステイタス値を読み出すためにある。レジスタリードコマンドに対しては、画像処理出力回路280において、レジスタリードコマンド590の形式のままRAM106へ退避してもよいし、読み出されたレジスタ値だけ抜き出した形式のデータ592をRAM106へ退避してもよい(図8C)。CPU102はRAM106のこれらのデータを参照して画像処理部150の動作状況を知ることができる。
図8Aのディスプレイリスト例の最後に終了コマンド(不図示)があり、画像処理入力回路220はこの終了コマンドを後段の画像処理回路へ送出する(S739)。各画像処理回路も終了コマンドを後段に送出し(S749)、画像処理出力回路280は終了コマンドを受け取ると、CPU102へ画像処理の終了割り込みを通知する(S759)。CPU102は終了割り込みを受け付けると、本処理を終了する(S719)。そして、画像処理部150は、これまで説明したディスプレイリストに応じた一連の自律的な動作を行った後、再びCPU102から起動されるまで待機する。
1つのディスプレイリストにデータ取得コマンドが複数回、挿入されている場合、前述のデータ取得コマンドの動作をその回数分繰り返すことで複数バンド領域に対する画像処理を実現できることは言うまでもない。図18は、本実施例によるCPU102の、画像処理時の処理を説明する図である。CPU102は、RAM106に対してディスプレイリスト(DPL)を書き込み(S901)、画像処理部150のkickレジスタに起動を指示する値を書き込む(S902)。以降、画像処理部150は、RAM106からDPLや画像データを自立的に読み出し、画像処理を遂行する。したがって、CPU102は、画像処理部150に起動を指示した後は、当該画像処理から解放され、CPU102の処理負荷は軽減される。
また画像処理回路(1)230から画像処理回路(P)270の動作をまとめたものを図12と図17に記載すると共に、画像処理について簡単に説明する。画像処理回路では、図11BのS740、S742、S744において図12に示す処理が実行される。すなわち、画像処理回路の制御部8001は、上段の回路よりコマンドを入力すると、当該コマンドを解析し、それがレジスタ制御コマンドかデータ処理コマンドかを判定する(S7001,S7002,S7003)。レジスタ制御コマンドの場合、当該コマンドのip_idが自身のIP_IDレジスタに登録されている値と一致するかを判定し、一致していなければ、当該コマンドをそのまま下流へ送出する(S7004、S7007)。コマンドのip_idが自身のIP_IDレジスタに登録されている値と一致した場合は、当該コマンドのrwによりレジスタリードコマンドかレジスタライトコマンドかを判定する(S7005)。レジスタライトコマンドであった場合はコマンドにしたがって指定されたデータを指定されたドレスへ書き込み、コマンドを下流へ送出する(S7006、S7007)。レジスタリードコマンドであった場合は、指定されたアドレスから読み出したデータを当該コマンドのdata領域に書き込み、下流へ送出する(S7008,S7009,S7007)。
一方、データ処理コマンドであった場合は、当該コマンドのstepが自身のSTEP_REGと一致するかを判断し、一致しなければそのまま当該コマンドを下流へ送出する(S7010でNO、S7007)。一致した場合は、制御部8001は当該コマンドのR,G,Bデータ(或いは補正データ)を演算部8002に投入し、演算部8002は所定のデータ処理を実行する(S7011)。そして、制御部8001は、処理後のデータを当該データ処理コマンドのデータに置き換えて、下流へ送出する(S7012)。なお、データ取得コマンドの場合は、そのままコマンドを下流へ送出するのみなので、図示を省略している。例えば上記補正処理の場合、画像処理入力回路220は前述のデータ取得コマンドをトリガとして、読み取り画像と補正データを、DMAC(read)210を起動してRAM106から読み出す。そして、図6で説明したパッキングされた読み取り画像と補正データ(MAX)と補正データ(MIN)から1画素単位の画素データ(画素値)として取り出し、データ処理識別情報“step”を付加する。そして、画像処理入力回路220は、読み取り画像、補正データ(MAX)、補正データ(MIN)の順でデータ処理コマンドに変換して内部バス225を介して出力する。なお、図17において、A(1)_REG、A(2)_REG、B(1)_REG等は、それぞれの演算部が演算をするときに必要となる、画像処理に固有の設定値である。
画像処理回路(1)230から画像処理回路(P)270のうちのいずれかにおいて、上記(式1)で示したセンサデバイスの読み取り素子の個体差の補正が行われる。また、画像処理回路(1)230から画像処理回路(P)270のうちのいずれかにおいて、入力色補正処理、空間フィルタ処理、色空間変換、濃度補正処理、及び中間調処理のような画像処理が行われる。例えば、画像処理回路(1)230が(式1)で示したセンサデバイスの読み取り素子の個体差の補正を行う回路であるとする。この場合、画像処理回路(1)230は、異なるデータ処理識別情報“step”が付加された読み取り画像と補正データ(MAX)と補正データ(MIN)を順番に受け取り、データ処理識別情報“step”によりデータの意味を区別して(式1)の演算を行う。そして、補正後のR,G,Bをデータ処理コマンドのR,G,Bに置き換えて後段の画像処理回路へ送る。このときデータ処理識別情報“step”を別の値に置き換えてもよい。画像処理回路の制御部8001には、予め設定されたSTEP_REGレジスタにより、受け取るべきデータ処理コマンドが設定されている。上記補正の例では、読み取り画像と補正データ(MAX)と補正データ(MIN)に指定された3つのデータ処理識別情報“step”がSTEP_REGレジスタに設定されている。また画像処理後に置き換えるデータ処理識別情報“step”も同レジスタにより指定されている。
本実施例では、バンド処理に特化した画像処理を行うことで、空間フィルタ処理などの局所(近傍)画像処理における遅延メモリの省容量化を実現し手いる。更に、複数の画像データ、もしくは、および補正データを参照した画像データの補正処理や画像処理を実現する。このような目的を達成するために、本実施例ではデジタル画像データの座標系(主走査方向−副走査方向)とは異なるバンド領域座標系で画像処理が行なわれる。
図9、図10は、本実施例の画像処理装置を用いた場合にRAM106から画像処理入力回路220に前述のディスプレイリストや画像データや補正データを入力する方法について詳細に説明している。ディスプレイリスト605や画像データ600がRAM106に格納されている。600は画像データの全体像であり、そのうちバンド領域610を抜き出し、画像処理を行う。処理対象となるバンド領域610は、620と630で示されるようにバンド領域座標系でバンド領域の高さBdhが16ライン(16画素)であり、バンド領域の長さBdlが8×M画素である。まず、図10の(a)のCPU102は制御バス685を介してRAM106のディスプレイリスト605の先頭アドレスと連続読み出し量(32Byte単位のデータを連続何回読み出すか)、インクリメントアドレスと繰り返し回数を設定する。図示の例では、先頭アドレスは図5のDPL(2)領域のDPL_STR_ADDRとなり、連続読み出し量はDPL_DMA_LENGTH回(32Byte)、繰り返し数は1回である(繰り返し数が1回なのでインクリメントアドレスは、0でよい)。なお、図9では、補正データの取得に関して記載を省略したが、図19(a)で示したように、補正データも画像データと同様にRAM106から読み出される。
また図10の(a)のようにDMAC210と画像処理入力回路220の間には、両モジュールからデータアクセス可能な共有バッファ660が存在する。そこでCPU102は、制御バス685を介してDMAC210に取得データのディスプレイリストの書き込み先である、共有バッファの書き込み先頭アドレスも指示する。図示の例では、661に一時保存するため、DPL_BUF_STR_ADDRが書き込み先頭アドレスとして設定されるアドレスとなる。DMAC210は画像処理入力回路220からの指示を受け、RAM106のディスプレイリスト605を読み出し(650)、共有バス694を介して共有バッファ660の領域661に格納する。その後、画像処理入力回路220はディスプレイリスト605の解析を実行する。
ディスプレイリスト605のレジスタ制御コマンドにより、RAM106のバンド領域610の先頭アドレスと連続読み出し量(32Byte単位のデータを連続何回読み出すか)、インクリメントアドレスと繰り返し回数が設定される。図示の例では、先頭アドレスは図4のS0_IMG_STR_ADDRとなり、連続読み出し量は1回(32Byte)、インクリメントアドレスは、1ラインのデータ量である、32Byte×Mとなり、繰り返し数は16回である。またレジスタ制御コマンドにより取得するデジタル画像データの書き込み先である、共有バッファの書き込み先頭アドレスも指示する。図示の例では、共有バッファ660の領域662にデータを一時保存するため、S0_BUF_STR_ADDRが設定される。DMAC210は画像処理入力回路220からの指示を受け、RAM106に格納されている画像データのバンド領域630の領域(1)640から領域(M)645のいずれかを読み出す(650)。そして、共有バス694を介して共有バッファ660の領域662に取得データを格納する。
画像処理入力回路220は、共有バッファ660に対して、チップセレクト信号、アドレス信号などの制御信号674を介してリードアクセスしリードデータ672を取得する。そして、1画素単位の画素データ(画素値)を選び出し、前述したデータ処理コマンドに変換して画像処理部の内部バス676(図2の(a)記載の225に相当)に出力する。なお、共有バッファ660は、図10の(b)の665に示すように、2つ以上のバッファ666と667で構成しても良い。前述の図10の(a)の例では、DMAC210と画像処理入力回路220で1つのバッファを共有しているため、共有バッファ660への書き込みと、共有バッファ660からの読み出しを時分割で動作させていた。これに対して、図10の(b)の6共有バッファ665のような構成にすると、画像処理入力回路220が共有バッファ667から画素データの取得処理をしている間に、DMAC210は共有バッファ666にRAM106から所望のデータを転送できる。すなわち、ダブルバンク方式のバッファが構成されるため、DMAC210と画像処理入力回路220の処理を並列的に実行できる。なお、画像データのバンド領域610を画像処理するためには、領域(1)640から領域(M)645まで同様の動作をM回繰り返せばよい。
以上のようにディスプレイリストに従い、所定のレジスタ設定が行われ、RAM106から共有バッファへの画像データの取得が実行される。また、あと2つの補正データに関してもDMAC210に設定する繰り返し回数が1回(つまり、バンド領域の高さが1ライン)として画像データと同様の動作で順次必要なデータを取得するようにディスプレイリストを作成する。なお、上記では、1画素ラインを有するラインセンサに関して行われる1次元の補正処理を説明したが、本発明はこれに限られるものではない。例えば、上記に類似した補正処理として薄型テレビで使用される2次元表示デバイスに対する補正処理がある。2次元表示デバイスの場合、2次元に敷き詰められた表示素子の個体差が異なるため、2次元の補正データを用いて補正処理を施すことになるが、本発明が適用可能であることは明らかである。
(第2実施例)
実施例1と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
まず、図19の(b)、図19の(c)に示す合成処理1020やI/P変換1030について考える。図19の(b)は、複数のレンダリング画像を合成データ(α値)に応じて画像合成する画像処理を示している。合成対象のレンダリング画像が2枚のとき、例えば下記(式2)のような合成式を用いて各画素ごとに合成処理を施す。ここで合成データ(α値)は、レンダリング画像の画素すべてにおいて同一の場合もあれば、レンダリング画像の画素ごとに異なる2次元の合成データ(α値)の場合もある。後者のような合成データ(α値)の場合は、
(式2) X=P2×A+P1×(1024−A)/1024
ここで、第1レンダリング画像の画素値 :P1,第2レンダリング画像の画素値 :P2,合成データの画素毎のα値 :A,合成後の画素値 :X,(α値が10bitのデジタル信号の場合)とする。なお、図19の(b)は、後者の合成処理の一例を示している。また、上記のような合成処理では、合成対象のレンダリング画像の枚数がNの場合、処理に必要な画素データと合成データ(α値)の枚数が上述の例と異なることは言うまでもない。図19の(b)では、2枚の画像1051,1052と合成データ1053を用いて合成画像1054が生成される様子が示されている。
また、図19の(c)は、動画像のインターレース/プログレッシブ変換(以下、I/P変換と略称する)のように、時間軸方向に連続した複数フィールド画像を参照して適応的な空間フィルタ処理を施す処理を示す。一般的にI/P変換のように複数フィールド画像を参照するような画像処理では、より多くのフィールド画像を用いて適応処理した方が高品位な画像処理を施せる。しかしながら複数フィールド画像は、画像処理回路が実装される半導体チップ(ASICなど)と接続された安価なDRAMなどの外部メモリに記憶されていることが一般的である。したがって、I/P変換のために外部メモリから毎回複数フィールド画像を読み出し、I/P変換回路に入力する必要がある。
ここで、フルハイビジョン解像度のフィールド画像を3枚までI/P変換のために読み出せるメモリ帯域の画像処理装置を仮定する。この画像処理装置においてNTSC(720×480i)のような低解像度の動画像をI/P変換するのであれば、前述のフルハイビジョン解像度の動画像より多くのフィールド画像を参照して高品位なI/P変換ができることは明らかである。なお、図19の(c)は、3フィールド対応もしくは5フィールド対応のI/P変換の一例を示している。以上のようなI/P変換では、使用可能なメモリ帯域が一定の場合、できるだけ高品位な画像処理を行うために、解像度や参照フィールド数に応じて柔軟に画像処理方法を切り替えることが重要となる。
以上のような補正処理の第1実施例との違いは、図1の映像入力部130を介して種々のデータが入力されること、および映像表示部160によりディスプレイなどの表示装置に処理後のデータが出力されることである。本実施例では、画像データを画像処理する場合に必要となる複数の画像データや合成データは、第1実施例と違い、2次元のデータとなっている。また第1実施例の補正データ(MAXおよびMIN)のように副走査方向に同一のデータ値を繰り返すことはない。そのため図4のS1_IMGやS2_IMGやS3_IMGのように処理対象であるS0_IMGと同様に座標系440と同じ格納のし方となる。説明を簡潔にするために第2実施形でも種々の画像データおよび合成データは図6のデータフォーマットであると仮定する。
上記条件にあるディスプレイリストを作成することで、上記画像処理が実現される。CPU102は、画像処理に必要となる種々のデータの個数をデータ取得数Sとして設定する。レンダリング画像2枚の合成処理のときは、必要なデータは、処理対象の画像データ1枚に合成対象の画像データと合成データ2枚の計3種のデータであり、S=3である。また、フィールド画像3枚に対するI/P変換の場合は、処理対象の時間のフィールド画像に対し、過去、未来の1フィールドずつの画像データが必要となり、計3種のデータとなり、S=3である。また、フィールド画像5枚に対するI/P変換の場合は、処理対象の時間のフィールド画像に対し、過去、未来の2フィールドずつの画像データが必要となり、計5種のデータとなり、S=5である。
次にバンド領域の高さおよび共有バッファの読み出し先頭アドレスを算出する。前述のフォーマットにより32Byte単位のデータが画像データの1ラインを表し、本実施例の場合、この1ラインの画像データを処理するためにその他の画像データおよび合成データも32Byte(1ライン)となる。そこで共有バッファの容量が256bit(32Byte)×BLワードであり、BLラインの種々のデータを保持できると仮定して以下の算出を説明する。画像データの最小転送単位は32Byte(共有バッファの1ワード(1ライン)に相当)であり、この画像データを処理するための種々のデータの最小転送単位は32Byte(共有バッファの1ワード(1ライン)に相当)である。つまり、画像データの最小転送単位32Byteを処理するために、レンダリング画像2枚の合成処理のときは32Byte×3の種々のデータが必要となる。フィールド画像3枚に対するI/P変換の場合も同様である。フィールド画像5枚に対するI/P変換のときは、32Byte×5の種々のデータが必要となる。そこでバンド領域の高さ(ライン数)は以下の結果となる。
レンダリング画像2枚の合成処理
BLライン/(1ライン+2ライン)=BL/3
フィールド画像3枚に対するI/P変換
BLライン/(1ライン+2ライン)=BL/3
フィールド画像5枚に対するI/P変換
BLライン/(1ライン+4ライン)=BL/5
すなわち、バッファライン数BLを画像データの最小転送単位32Byte(共有バッファの1ワード(1ライン)に相当)とそれを処理するために必要なデータの最小転送単位との合計値で除算した値がバンド領域の高さとなる。
共有バッファの先頭アドレスは、上記バンド領域の高さ(ライン数)ずつ等間隔に配置されたアドレスとなる。上記バンド高さの設定に従い、ディスプレイリストのレジスタ制御コマンドを生成してRAM106のディスプレイリスト格納領域にディスプレイリストを保存する。
以上のように、第1、第2実施例によれば、DMACの転送終了割り込みと画像処理部の画像処理終了割り込みの度にDMACのレジスタ設定と起動と画像処理のレジスタ設定を行う処理からCPUが解放される。そのため、CPUのDMAC制御のための処理負荷が軽減される。また、遅延メモリの省容量化を実現しつつ、局所画像処理の回路規模の削減と、処理の高速化を達成できる。
(第3実施例)
次に第3実施例について説明する。実施例1、2と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。図2(b)は、第3実施例による画像処理部150の構成例を示すブロック図である。第3実施例の画像処理部150では、画像処理CPU250と、画像処理入力回路220、画像処理出力回路280及び画像処理CPU250からアクセス可能なRAM252及びROM254が、がブリッジを介して接続されている。画像処理入力回路220は、図13に記載のレジスタ群を有するコマンドレジスタがあり、画像処理入力回路220は画像処理CPU250から専用バスを介したレジスタ設定により、レジスタ制御コマンドやデータ処理コマンドを生成する。そして、画像処理入力回路220の後段にある画像処理回路(1)230から(P)270に送り、画像処理CPU250が所望する画像処理演算を画像処理回路(1)230から(P)270のいずれかを用いて実現することができる。これから説明する画像処理は、画像処理部150とは別の画像処理をしている画像処理CPU250によって生成されたコマンドが画像処理部150の演算リソースを一時的に使用するという特徴を持つ。前述のディスプレイリストに従った画像処理部150の自律的な動作であるPULL型動作の画像処理と区別して、画像処理CPU250のPUSH型動作の画像処理と呼称する。
画像処理入力回路220のコマンドレジスタ2100は、図13に示すようなコマンドレジスタ群を有する。CMD_REPEATレジスタには、画像処理CPU250により1回に生成されるレジスタ制御コマンドもしくはデータ処理コマンドの数が指定される。CMD_UPPERレジスタは64bit長のコマンドの上位32bitを表し、CMD_LOWERレジスタは下位32bitを表し、2つを連結して1つの64bit長のコマンドとなる。CMD_OFS_ADDRレジスタはアドレスの増分を示し、CMD_BUF_STR_ADDRはデータテーブル2101の先頭アドレスを示す。
次に、画像処理CPU250の基本的な動作を図14のフローチャートにより説明する。また、画像処理入力回路220によるコマンドの生成処理を図15のフローチャートにより説明する。更に、画像処理CPU250と画像処理部150の連係動作について図16A、図16Bにより説明する。
まず、画像処理CPU250は、図13に示したCMD_REPEAT、CMD_UPPER、CMD_LOWER、CMD_OFS_ADDR、CMD_BUF_STR_ADDR等の各種レジスタの設定をおこなう(S7101、S7301)。また、このとき、必要であればコマンド生成に使用するデータテーブルの設定を行う(S7102)。データテーブルには、レジスタライトコマンドに対応したデータ値やデータ処理コマンドの処理対象データが保持される。その後、画像処理CPU250がCMD_ORDERレジスタに“0x1”を書き込むと(S7103,S7302)、画像処理入力回路220(“PushCMD Order”シーケンサ)が動作する。そして、画像処理入力回路220は、CMD_REPEATレジスタにおいて指定された回数分、所望のコマンドを生成し、後段の画像処理回路(1)230から(P)270へ出力する(S7320、S7322)。コマンド生成完了時には、画像処理入力回路220は終了コマンドを自動的に生成して、後段の画像処理回路(1)230へ送出する(S7324)。S7400〜S7424の処理は上記S7301〜S7324と同様である。但し、S7420ではデータ処理コマンドが生成され、画像処理回路へ送出される。
画像処理回路(1)230から画像処理回路(P)270はオペコード“opcode”、回路識別情報“ip_id”、データ処理識別情報“step”に基づき、必要な処理を行い、後段に送出する(S7340、S7344、S7440、S7444)。画像処理回路の動作は第1実施例で説明したとおりである。そして、画像処理出力回路280は、コマンドがレジスタ制御コマンドのリードコマンドであれば、レジスタリード値を画像処理CPU250からアクセスできるRAM106(メインメモリ)やRAM252へ格納する(S7360)。また画像処理出力回路280は、コマンドがデータ処理コマンドであれば、画像処理済みのデータを画像処理CPU250からアクセスできるRAM252へ格納する(S7460)。或いは、DMAC290を用いてRAM106(メインメモリ)に画像処理済みのデータを格納するようにしてもよい。また画像処理出力回路280は、コマンドが終了コマンドの場合、画像処理CPU250へ終了割り込みを通知する(S7354,S7464)。
通常、図16A,図16Bの処理7300のように、所望の画像処理に必要な画像処理回路(1)230から画像処理回路(P)270にいずれかにレジスタ制御コマンドを送出してレジスタ設定を行う。そして次に、処理7400のように所望の画像処理に必要な画像処理回路(1)230から画像処理回路(P)270のいずれかにデータ処理コマンドを送出して画像処理を実行する。画像処理回路(1)230から画像処理回路(P)270はパイプライン回路であり、生成するデータ処理コマンド数が多い場合は画像処理CPU250で行うより、処理性能が高い。画像処理CPU250は画像処理出力回路280によってRAM252に格納された演算結果を使用してソフトウェア実装された適応処理を行う。
図15に、第3実施例の画像処理入力回路220によるコマンドの生成のし方の詳細をフローチャートで示す。CMD_UPPERレジスタの上位8bitは“opcode”を示すため、画像処理CPU250がどの種類のコマンドを生成したいのかを画像処理入力回路220は判別できる(S7203,S7204)。所望のコマンドがレジスタ制御コマンドの場合、処理はS7205に進む。S7205において、さらに当該コマンドがレジスタライトコマンドの場合は、CMD_UPPERレジスタの下位16bitの“address”にCMD_OFS_ADDRレジスタで指定するアドレスを加算してコマンドの上位32bitとする。また、下位32bitはデータ領域であるため、予め設定されたデータテーブルからデータを取得して下位32bitとする。そして、上位32bitと下位32bitを連結してレジスタ制御コマンド(レジスタライトコマンド)とする。一方、S7205において当該コマンドがレジスタリードコマンドの場合は、下位32bitを0x0に固定する。また所望のコマンドがデータ処理コマンドの場合(S7206)、上位32bitと下位32bitを連結し、R,G,Bにデータテーブル2101からデータを取得して置き換えて、データ処理コマンドとする。その他のコマンドのときはCMD_UPPERレジスタとCMD_LOWERレジスタを連結してコマンドとする(S7207)。以上のようにして生成されたコマンドは、下位の画像処理回路へ出力される(S7208)。以上の処理は、CMD_REPEATに登録されている回数だけ、繰り返される(S7201,S7202,S7209)。また前述のデータテーブルからのデータ取得は必ず必要というわけではなく、レジスタ制御コマンドがレジスタリードコマンドの場合は、データ領域はどのような値でもよく、データテーブルを使う必要はない。そのためデータテーブルからのデータ取得は別途レジスタを設けて有効と無効を切り替えられるようにしてもよい。
また画像処理回路(1)230から画像処理回路(P)270は、前述のデータ処理識別情報“step”を判別して画像処理を実行する。そのため、PULL型画像処理の最中にPUSH型の画像処理を実行できることは言うまでもない。すなわち、前述のディスプレイリストによるPULL型の画像処理と画像処理CPU250によるPUSH型画像処理で画像処理回路(1)230から画像処理回路(P)270を互いに排他的に使用するようにデータ処理識別情報“step”を設定すればよい。
以上のように、第3実施例によれば、画像処理出力回路が画像処理CPUとの共有メモリへ演算結果を出力し、画像処理CPUはその演算結果を利用することで、CPUの処理性能を向上できる。このように、画像処理CPUが画像処理部の演算リソースを部分的に使用することができるので、CPUの動作周波数(消費電力)あたりの処理性能を向上させることができる。
また、バンド領域の長さ方向を画像データの副走査方向に合わせて設定することもできる。すなわち、図4の画像データフォーマットの32Byte単位に含まれる画素のデータ520を主走査方向に1画素、副走査方向に8画素と設定しても本発明を適用できる。
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。