以下、本発明の好適な実施形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
1.最近傍法
図1及び図2は、最近傍法による縮小画像及び拡大画像の生成についてそれぞれ説明するための図である。
図1は、横方向(列方向)に40列、縦方向(行方向)に40行の1600個の画素により構成される画像100(第1の画像に相当し、以下、元画像という)を、横方向(列方向)に30列、縦方向(行方向)に30行の900個の画素により構成される画像110(第2の画像に相当し、以下、縮小画像という)に縮小する場合の一例であり、図2は、図1と同じ元画像100を、50列50行の2500個の画素により構成される画像120(第2の画像に相当し、以下、拡大画像という)に拡大する場合の一例である。元画像又は縮小画像を構成する各画素の位置は、縦方向の座標(以下、行座標という)と横方向の座標(以下、列座標という)によって特定される。例えば、縮小画像の0行目の画素の各座標は(0,0)、(1,0)、(2,0)、(3,0)、(4,0)、(5,0)、(6,0)、・・・、(29,0)である。
最近傍法では、元画像を構成する画素において、縮小画像又は拡大画像を構成する各画素に最も近い座標の画素を選択することにより、縮小画像又は拡大画像を生成する。例えば、図1の場合、例えば縮小画像の0行目の画素の行座標及び列座標を40/30倍(4/3倍)して得られる座標(0,0)、(4/3,0)、(8/3,0)、(4,0)、(16/3,0)、(20/3,0)、(8,0)、・・・、(116/3,0)を最も近い整数の座標に変換することにより、元画像の対応する画素の座標(0,0)、(1,0)、(3,0)、(4,0)、(5,0)、(7,0)、(8,0)、・・・、(39,0)を得る。すなわち、元画像における座標(0,0)、(1,0)、(3,0)、(4,0)、(5,0)、(7,0)、(8,0)、・・・、(39,0)の画素が、縮小画像における座標(0,0)、(1,0)、(2,0)、(3,0)、(4,0)、(5,0)、(6,0)、・・・、(29,0)の画素として選択される。
見方を変えれば、縮小画像における0行目の30画素は、元画像における0行目の40画素のうち、列座標が2、6、・・・、38の画素(すなわち、列座標が4n+2(nは0〜9の整数)の画素)を間引くことにより生成することができる。縮小画像における他の行の30画素についても、元画像における対応する行の40画素のうち、列座標が4n+2(nは0〜9の整数)の画素を間引くことにより生成することができる。同様に、縮小画像における各列の30画素についても、元画像における対応する列の40画素のうち、行座標が4n+2(nは0〜9の整数)の画素を間引くことにより生成することができる。結局、最近傍法によれば、40×40の元画像の座標(4n+2,k)(nは0〜9の整数、kは0〜39の整数)の画素及び座標(k,4n+2)(kは0〜39の整数、nは0〜9の整数)の画素を間引くことにより30×30の縮小画像を生成することができる。
同様に、図2の場合、例えば拡大画像の0行目の画素の行座標及び列座標を40/50倍(4/5倍)して得られる座標(0,0)、(4/5,0)、(8/5,0)、(12/5,0)、(16/5,0)、(4,0)、(24/5,0)、(28/5,0)、(32/5,0)、(36/5,0)、(8,0)、・・・、(196/5,0)を最も近い整数の座標に変換することにより、元画像の対応する画素の座標(0,0)、(1,0)、(2,0)、(2,0)、(3,0)、(4,0)、(5,0)、(6,0)、(6,0)、(7,0)、(8,0)、・・・、(39,0)を得る。すなわち、元画像における座標(0,0)、(1,0)、(2,0)、(2,0)、(3,0)、(4,0)、(5,0)、(6,0)、(6,0)、(7,0)、(8,0)、・・・、(39,0)の画素が、拡大画像における座標(0,0)、(1,0)、(2,0)、(3,0)、(4,0)、(5,0)、(6,0)、(7,0)、(8,0)、(9,0)、(10,0)、・・・、(49,0)の画素として選択される。
見方を変えれば、拡大画像における0行目の50画素は、元画像における0行目の40画素のうち、列座標が2、6、・・・、38の画素(すなわち、列座標が4n+2(nは0〜9の整数)の画素)を複製することにより生成することができる。拡大画像における他の行の50画素についても、元画像における対応する行の40画素のうち、列座標が4n+2(nは0〜9の整数)の画素を複製することにより生成することができる。同様に、拡大画像における各列の50画素についても、元画像における対応する列の40画素のうち、行座標が4n+2(nは0〜9の整数)の画素を複製することにより生成することができる。結局、最近傍法によれば、40×40の元画像の座標(4n+2,k)(nは0〜9の整数、kは0〜39の整数)の画素及び座標(k,4n+2)(kは0〜39の整数、nは0〜9の整数)の画素を複製することにより50×50の拡大画像を生成することができる。
2.画像処理装置
図3は、本実施の形態の画像処理装置の機能ブロック図の一例である。
画像処理装置1は、画像メモリ10、CPU20、データ転送装置30、バッファメモリ40を含んで構成されており、さらに座標メモリ50を含んでいてもよい。画像メモリ10、CPU20、データ転送装置30、バッファメモリ40、座標メモリ50はバス60(データバス、アドレスバス等)に接続されている。
画像メモリ10は、第1の記憶部として機能し、第1の画像(元画像)を構成する画素データ及び第2の画像(縮小画像又は拡大画像)を構成する画素データを記憶する。
バッファメモリ40は、第2の記憶部として機能する。バッファメモリ40は、データ転送装置30が読み出した行方向の座標が同一の画素データを格納するためのバッファを2つ以上含むように構成されていてもよい。
CPU20は、計算処理部として機能し、所定の画像補完方法に基づいて、第2の画像を構成する各画素データに対応する第1の画像を構成する各画素データの列方向の座標及び行方向の座標を計算する処理を行う。所定の画像補完方法は、図1及び図2で説明した最近傍法であってもよい。
データ転送装置30は、データ転送処理部として機能し、CPU20が計算した列方向の座標及び行方向の座標により特定される各画素データを画像メモリ10から読み出してバッファメモリ40に転送する読み出し処理と、バッファメモリ40に格納された画素データを第2の画像を構成する画素データとして画像メモリに転送する書き込み処理を行う。
データ転送装置30は、行方向の座標が同一の画素データ毎に読み出し処理及び書き込み処理を行うようにしてもよい。この場合、CPU20は、データ転送装置30が行方向の座標が同一の画素データの読み出し処理を終了する毎に次回の読み出し処理の対象となる画素データの行方向の座標を特定するための情報をデータ転送装置30に送信し、データ転送装置30は行方向の座標を特定するための情報に基づいて読み出し処理を行うようにしてもよい。
また、データ転送装置30は、読み出し処理の対象となる行方向の座標が同一の画素データの当該行方向の座標が前回読み出し処理の対象であった画素データの行方向の座標と同じである場合には、読み出し処理を行わずに書き込み処理を行うようにしてもよい。
また、データ転送装置30は、読み出し処理において、読み出し処理の対象となる行方向の座標が同一の画素データの当該行方向の座標が前回読み出し処理の対象であった画素データの行方向の座標と異なる場合には、読み出し処理の対象となる行方向の座標が同一の画素データを、前回読み出し処理の対象であった画素データが格納されているバッファと異なるバッファに転送し、書き込み処理において前回読み出し処理の対象であった画素データを画像メモリ10に転送するようにしてもよい。
座標メモリ50は、第3の記憶部として機能する。画像処理装置1が座標メモリ50を含む場合、CPU20は、列方向の座標を特定するための情報を座標メモリ50に格納し、データ転送装置30は、座標メモリ50に格納された列方向の座標を特定するための情報に基づいて読み出し処理を行うようにしてもよい。また、CPU20は、さらに、行方向の座標を特定するための情報を座標メモリ50に格納し、データ転送装置30は、座標メモリ50に格納された行方向の座標を特定するための情報に基づいて読み出し処理を行うようにしてもよい。
図4は、画像メモリ10の構成例について説明するための図である。
画像メモリ10は、元画像(第1の画像)を構成する画素データを記憶するための元画像記憶領域12を含む。1つの画素データは、例えば、それぞれ1バイトのRデータ、Gデータ、Bデータを含む3バイトデータとして構成される。図1で説明した40×40の画素により構成される元画像であれば、1600個の画素データの各々が3バイトの記憶領域を必要とするので元画像記憶領域12は少なくとも4.8kバイト必要である。そして、例えば、元画像の座標(0,0)の画素のRデータ、座標(0,0)の画素のGデータ、座標(0,0)の画素のBデータ、座標(1,0)の画素のRデータ、座標(1,0)の画素のGデータ、座標(1,0)の画素のBデータ、・・・の順に行方向を優先して元画像記憶領域12に記憶されている。
また、画像メモリ10は、補完画像(第2の画像に相当する縮小画像または拡大画像)を構成する画素データを記憶するための補完画像記憶領域14を含む。図1で説明した30×30の画素により構成される縮小画像であれば、補完画像記憶領域14は、900個の画素データ(Rデータ、Gデータ、Bデータから成る3バイトデータ)を記憶するために少なくとも2.7kバイト必要である。一方、図2で説明した50×50の画素により構成される拡大画像であれば、補完画像記憶領域14は、2500個の画素データを記憶するために少なくとも7.5kバイト必要である。そして、例えば、元画像記憶領域12と同様のアドレス順により、補完画像記憶領域14において補完画像を構成する各画像データが格納される。
なお、元画像記憶領域12、補完画像記憶領域14のベースアドレス(図4ではそれぞれ0000H、4000H)は、データ転送装置30の内部レジスタ(それぞれ、元画像記憶領域ベースアドレス設定レジスタ、補完画像記憶領域ベースアドレス設定レジスタ)に所定の設定値を書き込むことにより可変に設定することができるようにしてもよい。
図5は、バッファメモリ40の構成例について説明するための図である。
バッファメモリ40は、補完画像を構成する1行分の画素データを一時的に格納するための記憶領域42(バッファ0)を含む。図1で説明した30×30の画素により構成される縮小画像であれば、バッファ0は、1行分の30個の画素データを格納するために90バイト以上あればよい。また、図2で説明した50×50の画素により構成される拡大画像であれば、バッファ0は、1行分の50個の画素データを格納するために150バイト以上あればよい。そして、例えば、補完画像のX行目の画素について、座標(0,X)の画素のRデータ、Gデータ、Bデータ、座標(1,X)の画素のRデータ、Gデータ、Bデータ、・・・の順にバッファ0に一時的に格納される。
バッファメモリ40は、補完画像を構成する1行分の画素データを一時的に格納するための他の記憶領域44(バッファ1)を含むようにしてもよい。すなわち、バッファメモリ40はバッファ0とバッファ1のダブルバッファにより構成されていてもよい。バッファ1はバッファ0と同じ大きさの記憶領域に割り当てられる。そして、例えば、バッファ0に補完画像のX行目の画素データ(前回読み出し処理の対象であった1行分の画素データ)が格納されている場合には、バッファメモリ1にはX+1行目の画素データ(今回読み出し処理の対象となる1行分の画素データ)が格納されるようにしてもよい。
このように、バッファメモリ40が2つのバッファを有する(3つ以上のバッファを有していてもよい)ことにより、データ転送装置30は、画像メモリ10から補完画像のX行目の画素データに対応する元画像の1行分の画像データを読み出してバッファ0に格納した後、バッファ0に格納された画素データを画像メモリ10に転送する書き込み処理を行いながら、画像メモリ10から補完画像のX+1行目の画素データに対応する元画像の1行分の画像データを読み出してバッファ1に格納する読み出し処理を同時に行うことができる。すなわち、バッファメモリ40が2つ以上のバッファバンクを有することにより、より高速に補完画像を生成することができるようになる。
なお、バッファ0、バッファ1のベースアドレス(図5ではそれぞれ000H、100H)は、データ転送装置30の内部レジスタ(それぞれ、バッファ0ベースアドレス設定レジスタ、バッファ1ベースアドレス設定レジスタ)に所定の設定値を書き込むことにより可変に設定することができるようにしてもよい。
図6は、座標メモリ50の構成例について説明するための図である。
座標メモリ50は、補完画像の1行分の各画素データに対応する元画像の各画素データの列座標を特定するための情報(列座標特定情報)を格納するための列座標特定情報記憶領域52を含む。例えば、補完画像のX行目の画素について、座標(0,X)の画素(0列目の画素)に対する列座標特定情報、座標(1,X)の画素(1列目の画素)に対する列座標特定情報、・・・の順に列座標特定情報記憶領域52に格納される。図1及び図2で説明したように、最近傍法によれば補完画像の1行分の画素に対応する元画像の各画素の列座標はすべての行で同じ値である。従って、図1で説明した30×30の画素により構成される縮小画像であれば、列座標特定情報記憶領域52は、1行分の30個の画素データに対する列座標特定情報を格納することができればよい。同様に、図2で説明した50×50の画素により構成される拡大画像であれば、列座標特定情報記憶領域52は、1行分の50個の画素データに対する列座標特定情報を格納することができればよい。
列座標特定情報記憶領域52に、補完画像の1行分の画素に対する列座標特定情報をあらかじめ記憶させておくことにより、CPU20は読み出し対象の1行分の画像データの行座標を特定ための情報(行座標特定情報)をデータ転送装置30に送信するだけで、データ転送装置30は列座標特定情報記憶領域52に記憶された列座標特定情報に基づいて補完画像の1行分の各画素を読み出すことができる。すなわち、CPU20がデータ送信装置30に対して読み出し対象の各画素の列座標を送信する必要がないので、CPU20の負荷を軽減することができる。
さらに、座標メモリ50は、補完画像の1列分の各画素データに対応する元画像の画素データの行座標特定情報を格納するための行座標特定情報記憶領域54を含むようにしてもよい。例えば、補完画像のX列目の画素について、座標(X,0)の画素(0行目の画素)に対する行座標特定情報、座標(X,1)の画素(1行目の画素)に対する行座標特定情報、・・・の順に行座標特定情報記憶領域54に格納される。図1及び図2で説明したように、最近傍法によれば補完画像の1列分の画素に対応する元画像の各画素の行座標はすべての列で同じ値である。従って、図1で説明した30×30の画素により構成される縮小画像であれば、行座標特定情報記憶領域54は、1列分の30個の画素データに対する行座標特定情報を格納することができればよい。同様に、図2で説明した50×50の画素により構成される拡大画像であれば、行座標特定情報記憶領域54は、1列分の50個の画素データに対する行座標特定情報を格納することができればよい。
行座標特定情報記憶領域54に、補完画像の1列分の画素に対する行座標特定情報をあらかじめ記憶させておくことにより、CPU20はデータ送信装置30に対して読み出し対象の各画素の列座標だけでなく行座標も送信する必要がなくなるので、CPU20の負荷をさらに軽減することができる。
なお、列座標特定情報は、元画像の所定の画素の列座標を基準とする相対座標であってもよい。例えば、図1の場合は、列座標特定情報は、元画像の座標(0,0)の画素を基準とすると0、1、3、4、5、7、8、・・・、39であってもよい。図2の場合は、列座標特定情報は、元画像の座標(0,0)の画素を基準とすると0、1、2、2、3、4、5、6、6、7、8、・・・、39であってもよい。また、列座標特定情報は、元画像の所定の画素の列座標を基準とする相対座標であってもよい。例えば、図1の場合は、列座標特定情報は、補完画像の1行において隣合う2つの画素に対応する元画像の2つの画素の列座標の差分であってもよい。例えば、図1の場合は、列座標特定情報は、0、1、3、4、5、7、8、・・・、39の差分をとった0、1、2、1、1、2、1、・・・、2であってもよい。図2の場合は、列座標特定情報は、0、1、1、0、1、1、1、1、0、1、1、・・・、1であってもよい。行座標特定情報についても同様である。
なお、列座標特定情報記憶領域52、行座標特定情報記憶領域54のベースアドレス(図6ではそれぞれ000H、800H)は、データ転送装置30の内部レジスタ(それぞれ、列座標特定情報記憶領域ベースアドレス設定レジスタ、行座標特定情報記憶領域ベースアドレス設定レジスタ)に所定の設定値を書き込むことにより可変に設定することができるようにしてもよい。
図7は、データ転送装置30の構成例について説明するための図である。
例えば、データ転送装置30は、制御レジスタ310、制御レジスタインターフェース部320、データ転送制御部330、アドレス計算部340、データ転送制御部350、データ転送制御部360、割り込み発生部370を含んで構成されている。
制御レジスタ310は、データ転送装置30の動作を制御するレジスタ群である。例えば、制御レジスタ310は、データ転送制御部330、350及び360がDMA(Direct Memory Access)転送を行うための条件を設定するレジスタや元画像の1行分の画素数を設定するレジスタ(元画像1行分画素数設定レジスタ)等を含む。また、制御レジスタ310は、図4で説明した元画像記憶領域ベースアドレス設定レジスタ及び補完画像記憶領域ベースアドレス設定レジスタ、図5で説明したバッファ0ベースアドレス設定レジスタ及びバッファ1ベースアドレス設定、図6で説明した列座標特定情報記憶領域ベースアドレス設定レジスタ及び行座標特定情報記憶領域ベースアドレス設定レジスタを含んでいてもよい。
制御レジスタインターフェース部320は、バス60を介してCPU20から受け取った設定データを制御レジスタ310に設定する処理を行う。
データ転送制御部330は、制御レジスタ310に含まれるレジスタの設定値に基づいて座標メモリ50からデータを読み出す処理を行う。具体的には、データ転送制御部330は、列座標特定情報記憶領域ベースアドレス設定レジスタの設定値に基づいて、座標メモリ50の列座標特定情報記憶領域52のベースアドレスから順にアドレスをインクリメントしながら列座標特定情報を読み出す。座標メモリ50が行座標特定情報記憶領域54も有する場合には、データ転送制御部330は、さらに、座標メモリ50の行座標特定情報記憶領域ベースアドレス設定レジスタの設定値に基づいて、座標メモリ50の行座標特定情報記憶領域54のベースアドレスから順にアドレスをインクリメントしながら行座標特定情報を読み出す。データ転送制御部330は、例えば、座標メモリ50の読み出しアドレスを格納するレジスタ(座標メモリ読み出しアドレスレジスタ)をインクリメントしながら座標メモリ50にアクセスすることにより列座標特定情報の転送処理を行うことができる。
アドレス計算部340は、画像メモリ10の読み出しアドレスを計算する処理を行う。具体的には、アドレス計算部340は、まず、データ転送制御部330が座標メモリから読み出した列座標特定情報から列座標aを計算する。さらに、座標メモリ50に行座標特定情報も格納されている場合には、データ転送制御部330が座標メモリから読み出した行座標特定情報から行座標bを計算する。一方、CPU20が行座標bを計算してデータ転送装置30に送信する場合には、データ転送制御部330による行座標bの計算は不要である。そして、元画像記憶領域ベースアドレス設定レジスタの設定値cと元画像1行分画素数設定レジスタの設定値dに基づいて、元画像の座標(a,b)の画素データが格納されている画像メモリ10のアドレスをc+3×(d×a+b)の式により計算する(1画素のRGBデータが3バイト分あるので係数3をかけている)。
データ転送制御部350は、制御レジスタ310に含まれるレジスタの設定値に基づいて画像メモリ10から画素データを読み出してバッファメモリ40に転送する処理を行う。具体的には、データ転送制御部350は、アドレス計算部340が計算したアドレスから元画像の画素データを読み出し、バッファ0ベースアドレス設定レジスタの設定値に基づいて、読み出した画素データをバッファ0の先頭から順に書き込む処理を1行分の画素データに対して行う。データ転送制御部350は、画像メモリ10から次の1行分の画素データを読み出してバッファメモリ40に転送する場合には、バッファ1ベースアドレス設定レジスタの設定値に基づいて、読み出した画素データをバッファ1の先頭から順に書き込む処理を行う。すなわち、データ転送制御部350は、前回書き込んだバッファと異なるバッファに切り替えながら1行分の画素データをバッファメモリ40に書き込む処理を行う。データ転送制御部350は、例えば、画像メモリ10の読み出しアドレスを格納するレジスタ(画像メモリ読み出しアドレスレジスタ)とバッファメモリ40の書き込みアドレスを格納するレジスタ(バッファメモリ書き込みアドレスレジスタ)をそれぞれインクリメントしながら画像メモリ10及びバッファメモリ40にアクセスすることにより画素データの転送処理を行うことができる。
データ転送制御部360は、制御レジスタ310に含まれるレジスタの設定値に基づいてバッファメモリ40からデータを読み出して画像メモリ10に転送する処理を行う。具体的には、データ転送制御部360は、バッファ0ベースアドレス設定レジスタの設定値に基づいてバッファ0の先頭から順に1行分の画素データを読み出し、補完画像記憶領域ベースアドレス設定レジスタの設定値に基づいて、読み出した画素データを画像メモリ10の補完画像記憶領域14のベースアドレスから順にアドレスをインクリメントしながら書き込む処理を行う。データ転送制御部360は、バッファメモリ40から次の1行分の画素データを読み出して画像メモリ10に転送する場合には、バッファ1ベースアドレス設定レジスタの設定値に基づいてバッファ1のベースアドレスから順に1行分の画素データを読み出し、読み出した画素データを画像メモリ10の補完画像記憶領域14にアドレスをインクリメントしながら書き込む処理を行う。すなわち、データ転送制御部360は、前回読み出しを行ったバンクと異なるバンクに切り替えて1行分の画素データをバッファメモリ40から読み出して画像メモリ10の補完画像記憶領域14に書き込む処理を行う。データ転送制御部360は、例えば、バッファメモリ40の読み出しアドレスを格納するレジスタ(バッファメモリ読み出しアドレスレジスタ)と画像メモリ10の書き込みアドレスを格納するレジスタ(画像メモリ書き込みアドレスレジスタ)をそれぞれインクリメントしながらバッファメモリ40及び画像メモリ10にアクセスすることにより画素データの転送処理を行うことができる。
割り込み発生部370は、CPU10に対して割り込みを発生させる処理を行う。具体的には、データ転送制御部350による画像メモリ10からの画像データの読み出し処理の終了やデータ転送制御部360による画像メモリ10への画素データの書き込み処理の終了により割り込みを発生させる。
このように、本実施の形態の画像処理装置によれば、CPU20を介さずにデータ転送装置30のデータ転送制御部330、350及び360において専用ハードウェアによる画素データのDMA転送を直接的に行うことができるので、CPUの負荷を大幅に軽減するとともに画像処理の高速化を達成することができる。
図8はCPU20の処理のフローチャートの第1の例を示す図であり、図9はこれに対応するデータ転送装置30の処理のフローチャートの第1の例を示す図である。図8、図9は、座標メモリ50には列座標特定情報記憶領域52のみが割り当てられている場合のフローチャートである。また、バッファメモリ40はバッファ0、バッファ1のダブルバッファ構成であるものとして説明する。
まず、CPU20は、補完画像の各行に含まれる画素に対応する元画像の画素の列座標を計算する(図8のステップS10)。例えば、図1で説明した縮小画像を最近傍法により生成する場合は、列座標の計算結果として0、1、3、4、5、7、8、・・・、39が得られる。また、例えば、図2で説明した拡大画像を最近傍法により生成する場合は、列座標の計算結果として0、1、2、2、3、4、5、6、6、7、8、・・・、39の列が得られる。そして、CPU20はこの列座標を特定するための列座標特定情報を座標メモリ50の列座標特定情報記憶領域52に書き込む。図10及び図11に、図1及び図2の場合に列座標特定情報記憶領域52に書き込まれた列座標特定情報の一例をそれぞれ示す。
次に、CPU20は、補完画像の最初の行に対応する元画像の行の行座標を計算する(図8のステップS12)。例えば、図1で説明した縮小画像や図2で説明した拡大画像を最近傍法により生成する場合、行座標の計算結果として0が得られる。
次に、CPU20は、データ転送装置30に対してステップS12で計算した行座標に対応する元画像の行(例えば、0行目)の画素データを画像メモリ10から読み出す処理の開始を指示する(図8のステップS14)。ここで、CPU20は、ステップS12で計算した行座標の情報をデータ転送装置20に送信する。
データ転送装置30は、CPU20による読み出し処理の開始指示があるまで待機状態にあり(図9のステップS40でNoの場合)、読み出し処理の開始指示があると(ステップS40でYesの場合)CPU20から受け取った行座標の情報(例えば0)に基づいて、画像メモリ10から1行分の画素データ(例えば0行目の画素データ)を読み出す処理を行う(図9のステップS42)。例えば、図1で説明した縮小画像を生成する場合、CPU20のステップS10における処理により座標メモリ50の列座標特定情報記憶領域52の先頭から0、1、3、4、5、7、8、・・・、39の列座標が格納されているので(図10参照)、データ転送制御部330は、座標メモリ読み出しアドレスレジスタに列座標特定情報記憶領域52のベースアドレス(000H)をセットして、まず座標メモリ50の000Hアドレスから列座標0を読み出す処理を行う。そして、データ転送制御部350は、アドレス計算部340が計算したアドレス値(0000H)を画像メモリ読み出しアドレスレジスタにセットして元画像の(0,0)座標の画素のRデータを読み出す処理を行う。さらに、データ転送制御部350は、バッファメモリ書き込みアドレスレジスタにバッファメモリ40のバッファ0のベースアドレス(000H)をセットし、画像メモリ10から読み出した画素データ((0,0)座標の画素のRデータ)をバッファメモリ50のバッファ0(000Hアドレス)に書き込む処理を行う。次に、データ転送制御部350は、画像メモリ読み出しアドレスレジスタをインクリメントして画像メモリ10の0001Hアドレスから元画像の(0,0)座標の画素のGデータを読み出し、バッファメモリ書き込みアドレスレジスタをインクリメントして、画像メモリ10から読み出した画素データ((0,0)座標の画素のGデータ)をバッファメモリ50のバッファ0(001Hアドレス)に書き込む処理を行う。同様に、データ転送制御部350は、元画像の(0,0)座標の画素のBデータの転送処理を行う。次に、データ転送制御部330は、座標メモリ読み出しアドレスレジスタをインクリメントして、座標メモリ50の001Hアドレスから列座標1を読み出す処理を行い、データ転送制御部350は、(1,0)座標の画素データ(RGBデータ)の転送処理を同様に行う。以後、(39,0)座標の画素データの転送処理が終了するまで、同様の処理が繰り返される。
データ転送装置30は、元画像の0行目の画素データの読み出し処理を終了すると、割り込み発生部370によりCPU20に対して割り込み(読み出し終了割り込み)を発生し(図9のステップS44)、CPU20による書き込み処理の開始指示があるまで待機状態になる(図9のステップS46でNoの場合)。
次に、CPU20は、データ転送装置30による読み出し終了割り込みを検出すると(図8のステップS16でYesの場合)、補完画像の最終行に対応する元画像の行の行座標計算が終了したか否かを判断し(図8のステップS18)、終了していない場合(ステップS18でNoの場合)は補完画像の次の行に対応する元画像の行の行座標を計算する。例えば、図1で説明した縮小画像や図2で説明した拡大画像を最近傍法により生成する場合、行座標の計算結果として1が得られる。
次に、CPU20は、データ転送装置30に対してステップS20で計算した行座標に対応する元画像の行(例えば、1行目)の画素データを画像メモリ10から読み出す処理及びデータ転送装置30がステップ42で読み出した1行分の画素データを画像メモリ10に書き込む処理の開始を指示する(図8のステップS22)。ここで、CPU20は、ステップS20で計算した行座標の情報をデータ転送装置20に送信する。
データ転送装置30は、CPU20による書き込み処理の開始指示(ステップS46でYesの場合)及び読み出し処理の開始指示(ステップS48でYesの場合)を受けて、まず、CPU20から受け取った行座標の情報(例えば1)が前回CPU20から受け取った行座標と一致するか否かを判断する(図9のステップS50)。
2つの行座標が一致しない場合(ステップS50でNoの場合)は、データ転送装置30は、バッファメモリ50から画像メモリ10に1行分の画素データ(例えば0行目の画素データ)を転送して書き込む処理と画像メモリ10から1行分の画素データ(例えば1行目の画素データ)を読み出す処理を並行して行う(図9のステップS52)。例えば、図1で説明した縮小画像を生成する場合、データ転送制御部360は、バッファメモリ読み出しアドレスレジスタに前回画素データを読み出したバッファ(バッファ0)のベースアドレス(000H)をセットして、まずバッファメモリ40の000Hアドレスから補完画像の(0,0)座標の画素のRデータを読み出す処理を行う。さらに、データ転送制御部360は、画像メモリ書き込みアドレスレジスタに画像メモリ10の補完画像記憶領域14のベースアドレス(4000H)をセットし、バッファメモリ40から読み出した画素データ((0,0)座標の画素のRデータ)を画像メモリ10の補完画像記憶領域14(4000Hアドレス)に書き込む処理を行う。次に、データ転送制御部360は、バッファメモリ読み出しアドレスレジスタをインクリメントしてバッファメモリ40の0001Hアドレスから元画像の(0,0)座標の画素のGデータを読み出し、画像メモリ書き込みアドレスレジスタをインクリメントして、バッファメモリ40から読み出した画素データ((0,0)座標の画素のGデータ)を画像メモリ10の補完画像記憶領域14(4001Hアドレス)に書き込む処理を行う。同様に、データ転送制御部360は、補完画像の(0,0)座標の画素のBデータの転送処理を行う。以後、データ転送制御部360は、補完画像の(1,0)座標〜(29,0)座標の画素データ(RGBデータ)の転送処理を同様に行う。データ転送処理部360による画像メモリ10の補完画像記憶領域14への補完画像の0行目の画素データの書き込み処理と並行して、データ転送処理部350は、画像メモリ10の元画像記憶領域12からの元画像の1行目の画素データ(補完画像の1行目の画素データに対応する)の読み出し処理を行う。この読み出し処理はステップS42の読み出し処理と同様であるので説明を省略する。
データ転送装置30は、補完画像の1行目の画素データの書き込み処理を終了すると割り込み発生部370によりCPU20に対して割り込み(書き込み終了割り込み)を発生するとともに、元画像の1行目の画素データの読み出し処理を終了すると割り込み発生部370によりCPU20に対して読み出し終了割り込みを発生し(図9のステップS54)、CPU20による次の書き込み処理の開始指示があるまで待機状態になる(図9のステップS46でNoの場合)。
ステップS50において今回の行座標が前回の行座標と一致する場合(ステップS50でYesの場合)は、今回の行座標による行の画素データは前回のステップS52の処理によりバッファメモリ40のバッファ0又はバッファ1にすでに格納されているため、データ転送装置30は読み出し処理を行う必要がない。例えば、図2で説明した拡大画像を最近傍法により生成する場合は、拡大画像の2行目と3行目の画素データはともに元画像の2行目に含まれる同一の画素データであり、拡大画像の3行目の画素データに対応する画素データの読み出し指示を受けた時には元画像の2行目の画素データはすでにバッファメモリ40(バッファ0)に格納されているので、画像メモリ10から読み出す必要がない。同様に、拡大画像の7行目と8行目の画素データはともに元画像の6行目に含まれる同一の画素データであり、拡大画像の8行目の画素データに対応する画素データの読み出し指示を受けた時には元画像の6行目の画素データはすでにバッファメモリ40(バッファ0)に格納されているので、画像メモリ10から読み出す必要がない。そこで、データ転送装置30は読み出し処理を行わずに、CPU20に対して読み出し終了割り込みを発生する(ステップS58)。
そして、データ転送装置30は、補完画素の1行分の画素データの画像メモリ10への書き込み処理のみを行い(図9のステップS60)、書き込み処理終了後に書き込み終了割り込みを発生する(図9のステップS62)。ステップS60における書き込み処理及びステップS62における書き込み終了割り込みの発生処理は、ステップS52における書き込み処理及びステップS54における書き込み終了割り込みの発生処理と同様であるので説明を省略する。
さらに、データ転送装置30は、データ転送終了フラグがセットされているか否かを判断し(図9のステップS64)、データ転送終了フラグがセットされていない場合は(ステップS64でNoの場合)、CPU20による次の書き込み処理の開始指示があるまで待機状態になる(図9のステップS46でNoの場合)。
次に、CPU20は、データ転送装置30による読み出し終了割り込みを検出し(図8のステップS24でYesの場合)、かつ、書き込み終了割り込みを検出すると(図8のステップS26でYesの場合)、補完画像の最終行に対応する元画像の行の行座標計算が終了したか否かを判断し(図8のステップS18)、終了していない場合(ステップS18でNoの場合)はステップS20〜S26の処理を繰り返す。これに対応して、データ転送装置30は、ステップS46〜S54の処理又はステップS46〜S64の処理を繰り返す。
CPU20は、補完画像の最終行に対応する元画像の行の行座標計算を終了した場合(図8のステップS18でYesの場合)、データ転送装置30に対して、データ転送装置30がステップ52で読み出した1行分の画素データを画像メモリ10に書き込む処理の開始を指示する(図8のステップS28)。ここで、ステップS22と異なり、CPU20が読み出し処理の開始指示を行わないのは、補完画素の最終行に対応する元画像の行の画素データは前回のステップS52の処理によりバッファメモリ40のバッファ0又はバッファ1にすでに格納されているため、読み出し処理を行う必要がないからである。言うまでもないが、ステップS28においてCPU20はデータ転送装置30に対してダミーの読み出し処理の開始指示を行うようにしてもよい。
データ転送装置30は、CPU20による書き込み処理の開始指示を受けるが(ステップS46でYesの場合)、読み出し処理の開始指示を受けていないので(ステップS48でNoの場合)、補完画素の最終行の画素データの画像メモリ10への書き込み処理の開始指示であると判断し、データ転送終了フラグをセットする(図9のステップS56)。
そして、データ転送装置30は、補完画素の最終行の画素データの画像メモリ10への書き込み処理を行い(ステップS60)、書き込み処理終了後にCPU20に対して書き込み終了割り込みを発生し(ステップS62)、データ転送終了フラグがセットされていれば転送処理を終了する(ステップS64でYesの場合)。
最後に、CPU20は、データ転送装置30による書き込み終了割り込みを検出し(図8のステップS30でYesの場合)、処理を終了する。
このように最近傍法によれば補完座標を生成するための特別な計算を行う必要がないので、本実施の形態の画像処理装置1によれば、前回画像メモリ10の元画像記憶領域12から読み出してバッファメモリ40のバッファ0(又はバッファ1)に書き込んだ1行分の画素データをそのまま読み出して画像メモリ10の補完画像記憶領域14に書き込むことにより、簡単かつ高速に補完画像を生成することができる。
また、本実施の形態の画像処理装置によれば、画像メモリ10に対する画素データの読み出し処理と書き込み処理をデータ転送装置30が行うので、CPU20がこれらの処理を行う必要がない。そのため、CPU20の負荷が大幅に低減し座標計算処理を高速に行うことができる。
また、本実施の形態の画像処理装置によれば、CPU20による座標計算処理とデータ転送装置30による画素データの転送処理(読み出し処理と書き込み処理)を並行して行うことができるので、高速な画像補完を実現することができる。
また、本実施の形態の画像処理装置によれば、CPU20は補完画像を構成する各画素データに対応する元画像を構成する各画素データの列座標及び行座標を計算し、データ転送装置30は、CPU20が計算した列座標及び行座標により特定される各画素データを画像メモリ10から読み出してバッファメモリ40に転送する。すなわち、縮小画像を生成する場合には元画像のすべての画素データを読み出すことなく、縮小画像を生成するために必要な画素データのみを画像メモリ10から読み出すことができる。従って、元画像の画素データの読み出し処理を高速化することができるので高速な画像補完を実現することができる。
また、本実施の形態の画像処理装置によれば、補完画像を構成する1行分の画素データに対応する元画像を構成する画素データと同一の画素データが前回の読み出し処理によりすでにバッファメモリ40に格納されている場合には読み出し処理を行わないようにすることができる。すなわち、不要な読み出し処理を省くことにより高速な画像補完を実現することができる。
また、本実施の形態の画像処理装置によれば、画像メモリ10から読み出した画素データを、画像メモリ10に転送する画素データを格納するバッファと常に異なるバッファに格納することができる。すなわち、データ転送装置30は、書き込み処理において必要となる画素データを上書きすることなく読み出し処理を並行して行うことができる。従って、高速な画像補完を実現することができる。
また、本実施の形態の画像処理装置によれば、CPU20があらかじめ列座標を計算して座標メモリ50に記憶させておくことができる。すなわち、データ転送装置30は、座標メモリ50に格納された情報に基づいて、必要な画素の読み出し処理を行うことができる。従って、CPU20は行座標の計算のみを行えばよくなるためCP20の負荷を低減することができるので、高速な画像補完を実現することができる。
図12はCPU20の処理のフローチャートの第2の例を示す図であり、図13はこれに対応するデータ転送装置30の処理のフローチャートの第2の例を示す図である。図12、図13は、座標メモリ50には列座標特定情報記憶領域52に加えて行座標特定情報記憶領域54も割り当てられている場合のフローチャートである。
まず、CPU20は、補完画像の各行に含まれる画素に対応する元画像の画素の列座標を計算する(図12のステップS70)。ステップS70の処理は図8のステップS10の処理と同様であるので説明を省略する。
次に、CPU20は、補完画像の各列に含まれる画素に対応する元画像の画素の行座標を計算する(図12のステップS72)。ステップS72の処理は図8のステップS10と同様の処理であるので説明を省略する。例えば、図1で説明した縮小画像を最近傍法により生成する場合は、行座標の計算結果として0、1、3、4、5、7、8、・・・、39が得られる。また、例えば、図2で説明した拡大画像を最近傍法により生成する場合は、行座標の計算結果として0、1、2、2、3、4、5、6、6、7、8、・・・、39の列が得られる。そして、CPU20はこの行座標を特定するための行座標特定情報を座標メモリ50の行座標特定情報記憶領域54に書き込む。
次に、CPU20は、データ転送装置30に対して補完画像を生成するために必要な画素データの転送処理の開始を指示する(図12のステップS74)。
データ転送装置30は、CPU20による転送処理の開始指示があるまで待機状態にあり(図13のステップS80でNoの場合)、転送処理の開始指示があると(ステップS80でYesの場合)、座標メモリ50に格納された列座標特定情報及び行座標特定情報に基づいて、画像メモリ10から1行分の画素データ(例えば0行目の画素データ)を読み出す処理を行う(図13のステップS82)。例えば、図1で説明した縮小画像を生成する場合、CPU20のステップS70及びS72における処理により座標メモリ50の列座標特定情報記憶領域52及び行座標特定情報記憶領域54の先頭からともに0、1、3、4、5、7、8、・・・、39の列座標が格納されているので、データ転送制御部330は、座標メモリ読み出しアドレスレジスタに列座標特定情報記憶領域52のベースアドレス(000H)をセットして、座標メモリ50の000Hアドレスから列座標0を読み出す処理を行う。さらに、データ転送制御部330は、座標メモリ読み出しアドレスレジスタに行座標特定情報記憶領域54のベースアドレス(800H)をセットして、座標メモリ50の800Hアドレスから行座標0を読み出す処理を行う。アドレス計算部340は、列座標0及び行座標0から画像メモリ10の読み出しアドレスを計算し、データ転送制御部350は、アドレス計算部340が計算したアドレス値(0000H)を画像メモリ読み出しアドレスレジスタにセットして元画像の(0,0)座標の画素のRデータを読み出す処理を行う。以降は、図9のステップS42の処理において説明した処理と同様の処理により1行分の画素データの読み出し処理を終了する。
次に、データ転送装置30は、補完画像の最終行の画素データの画像メモリ10への転送処理(書き込み処理)か否かを判断する(図13のステップS84)。データ転送装置30は、最終行の画素データの転送処理が終了していない場合(ステップS84でNoの場合)は、座標メモリ50から行座標を読み出し、前回の行座標と一致するか否かを判断する(図13のステップS86)。
2つの行座標が一致しない場合(ステップS86でNoの場合)は、データ転送装置30は、バッファメモリ50から画像メモリ10に1行分の画素データ(例えば0行目の画素データ)を転送して書き込む処理と画像メモリ10から1行分の画素データ(例えば1行目の画素データ)を読み出す処理を並行して行う(図13のステップS88)。ステップS88における書き込み処理及び読み出し処理は、図9のステップS52における書き込み処理及び図13のステップS82における読み出し処理と同様であるので説明を省略する。
ステップS86において今回の行座標が前回の行座標と一致する場合(ステップS86でYesの場合)は、今回の行座標による行の画素データは前回のステップS88の処理によりバッファメモリ40のバッファ0又はバッファ1にすでに格納されているため、データ転送装置30は読み出し処理を行う必要がない。そのため、データ転送装置30は、補完画素の1行分の画素データの画像メモリ10への書き込み処理のみを行う(図13のステップS92)。ステップS92における書き込み処理は、図9のステップS52における書き込み処理と同様であるので説明を省略する。
さらに、データ転送装置30は、データ転送終了フラグがセットされているか否かを判断し(図13のステップS94)、データ転送終了フラグがセットされていない場合は(ステップS94でNoの場合)、ステップS84〜S88の処理又はステップS84〜S94の処理を繰り返す。データ転送装置30は、補完画像の最終行の画素データの画像メモリ10への転送処理(書き込み処理)である場合には(図13のステップS84でYesの場合)、データ転送終了フラグをセットする(図13のステップS90)。
そして、データ転送装置30は、補完画素の最終行の画素データの画像メモリ10への書き込み処理を行い(ステップS92)、書き込み処理終了後にデータ転送終了フラグがセットされていれば(ステップS94でYesの場合)転送処理を終了し、CPU20に対して転送終了割り込みを発生する(図13のステップS96)。
最後に、CPU20は、データ転送装置30による転送終了割り込みを検出し(図12のステップS76でYesの場合)、処理を終了する。
本実施の形態の画像処理装置によれば、CPU20があらかじめ行座標と列座標を計算して座標メモリ50に記憶させておくことができる。すなわち、データ転送装置30は、座標メモリ50に格納された情報に基づいて、CPU20から独立して必要な画素の読み出し処理を行うことができる。従って、CPU20は、データ転送装置30によるデータ転送処理の間、座標計算を行う必要がなくCPU20の負荷を大幅に低減することができる。
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
例えば、図8のフローチャートにおいてステップS20で行座標の計算を行っているが、ステップS12ですべての行座標を計算してしまってもよい。その場合は、ステップS18で最終行の行座標計算が終了したか否かを判断する代わりに、最終行の画素データの読み出し処理が終了したか否か(読み出し終了割り込みを検出したか否か)を判断するようにすればよい。
また、例えば、図9のフローチャートにおいて書き込み終了割り込みと読み出し終了割り込みの2種類の割り込みを発生させているが、1種類の割り込みのみ発生させるようにしてもよい。その場合でも、CPU20は、読み出し処理の開始指示のみ、書き込み処理の開始指示のみ、又は読み出し処理と書き込み処理の両方の開始指示のいずれを行ったかにより割り込みの種類を判断して適切な処理を選択することができる。
本発明は、実施の形態で説明した構成と実質的に同一の構成(例えば、機能、方法及び結果が同一の構成、あるいは目的及び効果が同一の構成)を含む。また、本発明は、実施の形態で説明した構成の本質的でない部分を置き換えた構成を含む。また、本発明は、実施の形態で説明した構成と同一の作用効果を奏する構成又は同一の目的を達成することができる構成を含む。また、本発明は、実施の形態で説明した構成に公知技術を付加した構成を含む。