以下、本発明の好適な実施形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
1.画像処理装置、画像処理システム
図1は、本実施形態の画像処理装置及び画像処理システムの構成例について説明するための図である。
画像処理システム1は、画像処理装置10及びSDRAM20を含んで構成されている。また、画像処理システム1は、画像処理装置10、SDRAM20及びその他のデバイス30等が接続されたバス40を含んでいてもよい。バス40はバス占有権を設定可能なバスであってもよい。また、画像処理システム1はLCD50を含んでいてもよい。
画像処理装置10は、第1の画像を構成する画素のデータ(以下、第1の画像の画素データという)に基づいて第2の画像を構成する画素のデータ(以下、第2の画像の画素データという)を生成する処理を行う。第1の画像の画素データは、例えば、SDRAM20や他の記憶装置(図示しない)に記憶され、画像処理装置10がバス40を介してSDRAM20や他の記憶装置(図示しない)から第1の画像の画素データを読み出すように構成されていてもよいし、デバイス30(例えば、マイクロプロセッサ等)がバス40を介して画像処理装置10に第1の画像の画素データを供給するように構成されていてもよい。また、第2の画像は、例えば、LCD50により表示される画像52である。
SDRAM20はバースト読み出し可能な記憶装置であり、第2の画像を行方向及び列方向に格子状に分割した複数の矩形状のブロックの各頂点に位置する画素(以下、頂点画素という)に対応する第1の画像の画素の位置を特定するための位置特定データが記憶されている。位置特定データは、第2の画像の各頂点画素に対応する第2の画像の画素の座標データであってもよいし、第2の画像の各頂点画素の座標とその画素に対応する第1の画像の画素の座標との差を表すオフセットデータであってもよい。
画像処理装置10は、少なくともメモリインターフェース部100、SRAM200(書き換え可能な記憶部の一例)、画像データ生成処理部300を含んで構成されている。また、画像処理装置10は、バスインターフェース部400及びLCDコントローラ500を含んで構成されていてもよい。
メモリインターフェース部100は、SDRAM20から第2の画像の各行にある頂点画素の前記位置特定データを所定個ずつバースト読み出しして前記第2の画像の少なくとも2行分の頂点画素の前記位置特定データをSRAM200に格納する処理を行う。
SRAM200は、書き換え可能な記憶部として機能する。
画像データ生成処理部300は、SRAM200に格納された位置特定データに基づいて第1の画像の画素の位置を特定し、当該画素のデータに基づいて第2の画像の画素のデータをブロック毎に順に生成する処理を行う。画像データ生成処理部300は、第1の画像に任意の変換処理、例えば、拡大、縮小、回転、反転、歪み補正等の処理を施した第2の画像の画素データを生成するようにしてもよい。
画像データ生成処理部300が生成した画素データ302は、例えば、LCDコントローラ500によりLCD50の駆動信号12に変換されて出力される。LCD50は、駆動信号12に基づいて画像(第2の画像)52を表示する。なお、LCDコントローラ500は画像処理装置10の外部にあってもよい。
バスインターフェース部400は、バス40に対するインターフェース処理を行う。バスインターフェース部400は、例えば、バス40を介してSDRAM20等に対して位置特定データ又は第1の画像の画素データを要求するリクエスト信号やアドレス信号を送信し、バス40を介してSDRAM20等からアクノリッジ信号とともに位置特定データや第1の画像の画素データを受信する処理を行う。
また、バス40に画像処理装置10及びSDRAM20以外のデバイス(デバイス30等)が接続されている場合には、バスインターフェース部400は、画像データ生成処理部300からリクエスト信号を受信すると画像データ生成処理部300に第1のアクノリッジ信号を送信し、第1のアクノリッジ信号の送信後も画像データ生成処理部300がリクエスト信号を送信し続ける場合には、バス40にバス占有権を設定するようにしてもよい。
図2は、本実施形態の画像処理装置が生成する画素データを有する画素により構成される画像(第2の画像)を複数のブロックに分割した状態について説明するための図である。以下、図1を参照しながら図2について説明する。
第2の画像52は、例えばVGAサイズの画像であり640×480個の画素により構成されている。図2において、x列とy行の交点に位置する画素の座標を(x,y)とし、座標(x,y)の画素をp(x,y)と表記している。第2の画像52は行方向及び列方向に格子状に4800個(80×60個)の矩形状のブロックB(0,0)〜B(59,79)に分割されている。ここで、2つの画素間の距離を1とすると、ブロックB(i,j)(i=0〜78、j=0〜58)は8×8のサイズであり、9×9個の画素を含んでいる。ブロックB(i,j)(i=0〜78、j=0〜58)の4つの頂点の位置にはそれぞれ頂点画素p(8i,8j)、p(8(i+1),8j)、p(8i,8(j+1))、p(8(i+1),8(j+1))が存在する。例えば、ブロックB(0,0)の4つの頂点の位置には頂点画素p(0,0)、p(8,0)、p(0,8)、p(8,8)が存在する。
一方、図2において右端に存在するブロックB(79,j)(j=0〜58)の右辺には画素が存在しない。従って、ブロックB(79,j)(j=0〜58)は8×8のサイズであるが、8×9個の画素しか含んでいない。そして、ブロックB(79,j)(j=0〜58)の各々の左辺にある2つの頂点の位置には頂点画素p(632,8j)及びp(632,8(j+1))がそれぞれ存在するが右辺にある2つの頂点の位置には頂点画素が存在しない。そこで、ブロックB(79,j)(j=0〜58)の各々の右辺にある2つの頂点にはダミーの頂点画素d(640,8j)及びd(640,8(j+1))がそれぞれ存在するものと考える。
同様に、下端に存在するブロックB(i,59)(i=0〜78)の下辺には画素が存在しない。従って、ブロックB(i,59)(i=0〜78)は8×8のサイズであるが、9×8個の画素しか含んでいない。そして、ブロックB(i,59)(i=0〜78)の各々の上辺にある2つの頂点の位置には頂点画素p(8i,472)及びp(8(i+1),472)がそれぞれ存在するが下辺にある2つの頂点の位置には頂点画素が存在しない。そこで、ブロックB(i,59)(i=0〜78)の各々の下辺にある2つの頂点にはダミーの頂点画素d(8i,480)及びd(8(i+1),480)がそれぞれ存在するものと考える。
さらに、ブロックB(79,59)は8×8のサイズであるが、8×8個の画素しか含んでいない。そして、ブロックB(79,59)の左上の頂点の位置には頂点画素p(632,472)が存在するが右上、左下、右下の3つの頂点の位置には頂点画素が存在しない。そこで、ブロックB(79,59)の右上、左下、右下の3つの頂点にはダミーの頂点画素d(640,472)、d(632,480)及びd(640,480)がそれぞれ存在するものと考える。
このように右端のブロック及び下端のブロックにダミーの頂点画素の存在を仮定することにより、画像データ生成処理部300による計算処理を右端のブロック及び下端のブロックにおいても他のブロックと同様に行うことができる。
図2において、行方向に隣接する2つのブロックは一辺に存在する画素を共有する。例えば、行方向に隣接するブロックB(0,0)とブロックB(1,0)は隣接する辺に存在する9個の画素p(8,j)(j=0〜8)を共有する。その結果、ブロックB(0,0)とブロックB(1,0)は隣接する辺に存在する2つの頂点画素p(8,0)及びp(8,8)を共有する。
また、図2において、列方向に隣接する2つのブロックは一辺に存在する画素を共有する。例えば、列方向に隣接するブロックB(0,0)とブロックB(0,1)は画素p(i,8)(i=0〜8)を共有する。その結果、ブロックB(0,0)とブロックB(0,1)は隣接する辺に存在する2つの頂点画素p(0,8)及びp(8,8)を共有する。
以下では、各ブロックの頂点画素(ダミーの頂点画素を含む)が存在する行をブロックラインと呼ぶ。すなわち、図2に示すように、ブロックラインBLj(j=0〜59)にはそれぞれブロックB(i,j)(i=0〜79)の各々の上辺にある頂点の位置に存在する頂点画素p(8i,8j)(i=0〜79)及びダミーの頂点画素d(640,8j)が存在する。また、ブロックラインBL60にはダミーの頂点画素d(8i,480)(i=0〜80)が存在する。
なお、第2の画像52は任意のサイズの画像であってもよいし、さらに画像処理装置10において第2の画像52のサイズを可変に設定可能であってもよい。
また、第2の画像52を分割する1つのブロックは任意のサイズのブロックであってもよく、ブロックの形状は正方形であってもよいし長方形であってもよい。例えば、2×2、4×4、2×4、4×2、4×8等のサイズのブロックであってもよい。
さらに、画像処理装置10は、第2の画像52のブロックの各々に含まれる行方向の画素数を特定する情報を設定するための第1の設定レジスタと、第2の画像のブロックの各々に含まれる列方向の画素数を特定する情報を設定するための第2の設定レジスタと、を含むようにしてもよい。この場合、画像データ生成処理部300は、第1の設定レジスタの設定値及び第2の設定レジスタの設定値に基づいて第2の画像のブロックの行方向の画素数及び列方向の画素数を判断し、第2の画像の画素データをブロック毎に順に生成するようにしてもよい。
また、右端のブロックB(79,j)(j=0〜58)を7×8のサイズのブロックとし、下端のブロックB(i,59)(i=0〜78)のサイズを8×7のサイズのブロックとし、右下のブロックB(79,59)のサイズを7×7のサイズのブロックとすることにより、ダミーの頂点画素を考えなくてもよい。このように右端のブロック及び下端のブロックを他のブロックと異なるサイズにした場合には、画像データ生成処理部300による右端のブロック及び下端のブロックにおける計算処理を他のブロックの計算処理と異なるようにすればよい。
なお、例えば、第1の画像の座標(x1,y1)の画素を第2の画像52の座標(x2,y2)の頂点画素p(x2,y2)として使用する場合には、第1の画像の座標(x1,y1)の画素が頂点画素p(x2,y2)に対応づけられる。この場合、頂点画素p(x2,y2)のオフセットデータは、例えば、(x1−x2,y1−y2)として与えられる。
図3は、SDRAMに記憶されたオフセットデータ(位置特定データの一例)の一例について説明するための図である。図3に示すように、SDRAM20には、ブロックラインBL0上に存在する頂点画素p(8i,0)(i=0〜79)及びダミーの頂点画素d(640,0)に対応する第1の画像の画素の位置を特定するためのオフセットデータがアドレス00000000H〜00000050Hに連続して記憶されている。また、SDRAM20には、ブロックラインBL1上に存在する頂点画素p(8i,8)(i=0〜79)及びダミーの頂点画素d(640,8)に対応する第1の画像の画素の位置を特定するためのオフセットデータがアドレス00000060H〜000000B0Hに連続して記憶されている。以下、同様にブロックラインBL2〜BL59上にそれぞれ存在する頂点画素及びダミーの頂点画素がSDRAM20のそれぞれ連続するアドレスに記憶され、ブロックラインBL60上に存在するダミーの頂点画素d(8i,480)(i=0〜80)に対応する第1の画像の画素の位置を特定するためのオフセットデータがアドレス00001680H〜000016D0Hに連続して記憶されている。
このように、1つのブロックライン上に存在する頂点画素のオフセットデータ及びダミーの頂点画素のオフセットデータをSDRAM20の連続するアドレスに記憶させておくことにより、SDRAM20のバースト読み出し機能を利用することができる。例えば、SDRAM20を16個のオフセットデータのバースト読み出しが可能になるように設定した場合、1個目のオフセットデータを読み出すにはレイテンシーを必要とするが、2〜16個目のオフセットデータの読み出しにはレイテンシーが不要である。従って、画像処理装置10がSDRAM20からして1ブロックライン分のオフセットデータを読み出す処理を高速化することができる。
図4は、メモリインターフェース部の構成例について説明するための図である。図4において図1と同じ構成には同じ番号を付しており、その説明を省略する。
メモリインターフェース部100は、バスリードアドレス生成部110、メモリカウンタ部120、メモリアドレス生成部130、バッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)、制御部180を含んで構成されている。バッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)は4つの第1のバッファとして機能する。
バスリードアドレス生成部110は、SDRAM20に記憶されたオフセットデータを読み出すためのアドレス信号112を生成してバスインターフェース部400に出力する。
メモリカウンタ部120は、バーストリードカウンタ、ブロックカウンタ、ラインカウンタ、ブロックラインカウンタ等のカウンタを備え、これらのカウンタ値をアドレス生成部110及びメモリアドレス生成部130に供給する。
メモリアドレス生成部130は、メモリカウンタ部120が供給するカウント値に基づいてSRAM200に対するアドレス信号132(ライトアドレス又はリードアドレス)を生成する処理を行う。そして、オフセットデータ402は、アドレス信号132(ライトアドレス)で指定されたSRAM200のアドレスに書き込まれる。
アドレス信号132(リードアドレス)で指定されたSRAM200のアドレスから読み出されたオフセットデータ202はバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)のいずれかに格納される。
メモリインターフェース部100は、第2の画像の各ブロックB(i,j)(i=0〜79、j=0〜59)の4つの頂点に位置する頂点画素p(8i,8j)、p(8(i+1),8j)、p(8i,8(j+1))、p(8(i+1),8(j+1))のオフセットデータをSRAM200から読み出してバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)にそれぞれ格納するようにしてもよい。
さらに、メモリインターフェース部100は、前回オフセットデータの読み出し対象となったブロックと列方向に隣接するブロックの頂点画素のオフセットデータをSRAM200から読み出す場合には、当該2つのブロックが共有する2つの頂点画素のオフセットデータが上書きされないように、他の2つの頂点画素のオフセットデータをSRAM200から読み出してバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)のいずれか2つバッファにそれぞれ格納するようにしてもよい。例えば、メモリインターフェース部100は、ブロックB(0,0)の4つの頂点画素p(0,0)、p(8,0)、p(0,8)、p(8,8)の各オフセットデータがSRAM200から読み出されてそれぞれバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)に格納されている状態でブロックB(0,0)と列方向に隣接するブロックB(1,0)の4つの頂点画素p(8,0)、p(16,0)、p(8,8)、p(16,8)のオフセットデータをSRAM200から読み出す場合には、2つのブロックB(0,0)及びB(1,0)が共有する2つの頂点画素p(8,0)及びp(8,8)の各オフセットデータが上書きされないように、他の2つの頂点画素p(16,0)及びp(16,8)のオフセットデータをSRAM200から読み出してバッファ1−1(140)及びバッファ1−3(160)にそれぞれ格納するようにしてもよい。また、メモリインターフェース部100は、バッファ1−2(150)及びバッファ1−4(170)にそれぞれ格納された2つの頂点画素p(8,0)及びp(8,8)の各オフセットデータをバッファ1−1(140)及びバッファ1−3(160)に転送した後に、他の2つの頂点画素p(16,0)及びp(16,8)のオフセットデータをSRAM200から読み出してバッファ1−2(150)及びバッファ1−4(170)にそれぞれ格納するようにしてもよい。
制御部180は、バスインターフェース部400に対してSDRAM20に記憶されたオフセットデータの読み出しを要求するリクエスト信号を送信し、バスインターフェース部400からのアクノリッジ信号を受信してバスリードアドレス生成部110の動作タイミング及びメモリカウンタ部120の動作タイミングを制御する。また、制御部180は、画像データ生成処理部300によるSRAM200に記憶されたオフセットデータの読み出しを要求するリクエスト信号を受けて、画像データ生成処理部300に対してアクノリッジ信号を送信するとともにメモリカウンタ部120の動作タイミングを制御する。
図5は、画像データ生成処理部の構成例について説明するための図である。図5において図1と同じ構成には同じ番号を付しており、その説明を省略する。
画像データ生成処理部300は、オフセットデータリードインターフェース部310、座標計算処理部320、画像データリードインターフェース部330、FIFO340を含んで構成されている。
オフセットデータリードインターフェース部310は、制御部350、Hカウンタ(ピクセルカウンタ)352、Vカウンタ(ラインカウンタ)354、バッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)を含んで構成されている。バッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)は第2のバッファとして機能する。
制御部350は、メモリインターフェース部100に対して、SRAM200に記憶されたオフセットデータの読み出しを要求するリクエスト信号を送信する。また、制御部350は、座標計算処理部320に対して、各ブロックについて後述する座標計算処理の開始を指示する。
Hカウンタ352及びVカウンタ354は、画素データの生成対象の画素の座標を特定する。すなわち、Hカウンタ352は第2の画像の各行に含まれる画素数をカウントするピクセルカウンタとして機能し、Vカウンタ354は第2の画像の行数をカウントするラインカウンタとして機能する。
制御部350が、メモリインターフェース部100からリクエスト信号に対するアクノリッジ信号を受信すると、メモリインターフェース部100のバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)に格納されているオフセットデータ142、152、162、172がバッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)にそれぞれ取り込まれる。ここで、メモリインターフェース部100は、バッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)にオフセットデータが取り込まれた直後に、次の計算対象のブロックの4つの頂点画素のオフセットデータをバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)にそれぞれ格納するようにしてもよい。
座標計算処理部320は、制御部350から各ブロックについて座標計算処理の開始指示を受けると、バッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)に格納されているオフセットデータからそのブロックに含まれる画素に対応する第1の画像の座標データ322を計算する処理を行う。
例えば、図6に示すようなM×NのサイズのブロックB(i,j)の4つの頂点A、B、C、Dに位置する頂点画素p(Mi,Nj)、p(M(i+1),Nj)、p(Mi,N(j+1))、p(M(i+1),N(j+1))のオフセットデータをそれぞれ(Xa,Ya)、(Xb,Yb)、(Xc,Yc)、(Xd,Yd)とすると、ブロックB(i,j)に含まれる各画素p(Mi+m, Nj+n)(0≦m<M、0≦n<N)の列方向のオフセット値OffsetX(m,n)及び行方向のオフセット値OffsetY(m,n)は、例えば、それぞれ以下の式(1)、(2)により計算することができる。
ここで、オフセット値OffsetX(m,n)及びOffsetY(m,n)は小数点以下の数字を含んでいてもよい。
さらに、各画素p(Mi+m, Nj+n)(0≦m<M、0≦n<N)に対応する第1の画像の画素のx座標X ’(m,n)、y座標Y ’(m,n)は、例えば、それぞれ以下の式(3)、(4)により計算することができる。
ここで、座標値X ’(m,n)、Y ’(m,n)は、小数点以下の数字を含んでいてもよい。座標データ322は座標値X ’(m,n)、Y ’(m,n)を含むデータであってもよい。
画像データリードインターフェース部330は、第2の画像のn(n≧1)個の画素データにそれぞれ対応づけられて座標計算処理部320が計算したn個の座標データに基づいて、SDRAM20から読み出す必要がある第1の画像の画素データのアドレスを順次生成する処理を行う。また、画像データリードインターフェース部330は、バスインターフェース部400に対して、第1の画像の画素データを要求するリクエスト信号やアドレス信号を送信し、バスインターフェース部400からアクノリッジ信号とともに第1の画像の画素データを受信する処理を行う。さらに、画像データリードインターフェース部330は、バスインターフェース部400から受信した第1の画像の画素データに基づいて第2の画像のn個の画素データ332を生成し、FIFO340に順に出力する処理を行う。
FIFO340は、多段のバッファ(シフトレジスタ等)により構成され、画像データリードインターフェース部330が生成した画素データ332を多段のバッファに順に格納し、バッファに格納した画素データ302を、格納した順にLCDコントローラ500に一定のタイミング(例えば、60fps(frame per second))で出力する。
図7は、画像データリードインターフェース部の構成例について説明するための図である。図7において図5と同じ構成には同じ番号を付しており、その説明を省略する。
画像データリードインターフェース部330は、例えば、FIFO370、判定処理部372、アドレス生成部374、アドレスキャッシュ376、アドレスバッファ0(378)、アドレスバッファ1(380)、ステータスバッファ0(382)、ステータスバッファ1(384)、ステータスバッファ2(386)、制御部388、データバッファ0(390)、データバッファ1(392)、データキャッシュ394、補正計算処理部396を含んで構成されている。
FIFO370は、n段のバッファ(シフトレジスタ等)により構成され、座標計算処理部320が生成したn個の座標データ322をn段のバッファに順に格納し、バッファに格納したn個の座標データを格納した順に判定処理部372に出力する。
判定処理部372は、n個の座標データの各々に基づいて、第2の画像のn個の画素データを生成するためにSDRAM20から読み出す第1の画像の画素データの数を判定する。例えば、座標データが第1の画像の表示エリアの外部の座標を示す場合は対応する第1の画像の画素データが存在しないので、SDRAM20から画素データを読み出す必要がない。また、例えば、補正計算処理部396がニアレストネイバー方式の補正計算を行って第2の画像の画素データを生成する場合には、座標データにより特定される座標に最も近い第1の画像の画素のデータのみを読み出せばよい。また、例えば、補正計算処理部396がバイリニア方式の補正計算を行って第2の画像の画素データを生成する場合には、座標データにより特定される座標が示す点を囲む第1の画像の4つの画素のデータを読み出せばよい。また、例えば、補正計算処理部396がバイリニア方式の補正計算を行って第2の画像の画素データを生成する場合において、座標データにより特定される座標が第1の画像の行方向又は列方向に隣り合う2つの画素を結ぶ直線上の点を示す場合にはその2つの画素のデータのみを読み出し、座標データにより特定される座標に第1の画像の画素が存在する場合にはその画素に対応するデータのみを読み出せばよい。
そして、判定処理部372は、n個の座標データの各々に対して少なくとも1つの第1の画像の画素データを読み出す必要があると判定した場合は、アドレス生成部374に対して、各座標データからSDRAM20のリードアドレスを生成するように指示する処理を行う。
アドレス生成部374は、生成したアドレスをアドレスバッファ0(378)又はアドレスバッファ1(380)に格納する。また、アドレス生成部374は、生成したアドレスがアドレスキャッシュ376に存在しない場合には、生成したアドレスをアドレスキャッシュ376に書き込む処理を行ってもよい。
また、判定処理部372は、SDRAM20から読み出すべき画素データがアドレスキャッシュ376に存在するか否かを判定する。判定処理部372は、SDRAM20から読み出すべき画素データがアドレスキャッシュ376に存在する場合にもSDRAM20から画素データを読み出す必要がないと判定する。
従って、例えば、補正計算処理部396がバイリニア補正計算を行って第2の画像の画素データを生成する場合には、1つの座標データに対してSDRAM20から読み出す画素データの数は0〜4のすべての場合が起こりうる。すなわち、例えば、4個の座標データに基づいて第2の画像の4個の画素データを生成する場合には(n=4のケース)、SDRAM20から読み出す画素データの数は0〜16のいずれかになる。
さらに、判定処理部372は、判定結果をステータスバッファ0(382)、ステータスバッファ1(384)、ステータスバッファ2(386)のいずれかに格納する。
制御部388は、ステータスバッファ0(382)、ステータスバッファ1(384)、ステータスバッファ2(386)に格納された判定結果に基づいて、バスインターフェース部400に第1の画像の画素データを要求するリクエスト信号389を送信し、バスインターフェース部400からプリアクノリッジ信号404(第1のアクノリッジ信号)及びアクノリッジ信号406(第2のアクノリッジ信号)を受信する処理を行う。アドレス生成部374は、制御部388が受信したプリアクノリッジ信号404(第1のアクノリッジ信号)に基づいて、SDRAM20から第1の画像の次の画素データを読み出すためのアドレスを生成するようにしてもよい。
バスインターフェース部400は、画像データ生成処理部330(制御部388)からリクエスト信号389を受信すると画像データ生成処理部330(制御部388)にプリアクノリッジ信号404(第1のアクノリッジ信号)を送信し、プリアクノリッジ信号404(第1のアクノリッジ信号)の送信後も画像データ生成処理部330(制御部388)がリクエスト信号389を送信し続ける場合には、バス40にバースト信号18を送信してバス占有権を設定する処理を行う。画像データ生成処理部330(制御部388)は、第2の画像のn個の画素データを生成するためにSDRAM20から読み出す第1の画像の画素データの数に等しい数のプリアクノリッジ信号404(第1のアクノリッジ信号)を受信するまでリクエスト信号389を送信し続けるようにしてもよい。
また、バスインターフェース部400は、画像データ生成処理部330(制御部388)からリクエスト信号389を受信するとバス40を介してSDRAM20に第1の画像の画素データを要求するリクエスト信号16を送信し、バス40を介してSDRAM20から受信したアクノリッジ信号42に基づいてアクノリッジ信号406(第2のアクノリッジ信号)を生成して画像データ生成処理部330(制御部388)に送信する処理を行う。
また、バスインターフェース部400は、アクノリッジ信号42とともにバス40を介してSDRAM20から受信した第1の画像の画素データ44を画像データ生成処理部330に送信する。画像データ生成処理部330は、アクノリッジ信号406(第2のアクノリッジ信号)に基づいて第1の画像の画素データ408を受信し、画素データ408をデータバッファ0(390)又はデータバッファ1(392)に格納する。
補正計算処理部396は、データバッファ0(390)又はデータバッファ1(392)に格納された第1の画像の画素データ又はデータキャッシュ394に格納された第1の画像の画素データに基づいて所定の補正計算を行って第2の画像のn個の画素データを順に生成し、生成したn個の画素データ332をFIFO340に順に送信する処理を行う。ここで、アドレス生成部374が生成したアドレスがアドレスキャッシュ376に存在する場合には、データキャッシュ394に格納された第1の画像の画素データが使用される。アドレス生成部374が生成したアドレスがアドレスキャッシュ376に存在しない場合には、データバッファ0(390)又はデータバッファ1(392)に格納された第1の画像の画素データが使用されるとともにデータキャッシュ394に書き込まれる。
なお、補正計算処理部396が行う補正計算は、例えば、座標データ322によって示される第1の画像の点に最も近い1つの画素、2つの画素又は4つの画素をそれぞれ選択するニアレストネイバー方式、リニアー方式、バイリニアー方式等の任意の方式であってもよい。
図8は、画像データリードインターフェース部とバスインターフェース部の間における信号の送受信のタイミングについて説明するためのタイミングチャート図である。以下、図7を参照しながら図8について説明する。
まず、画像データリードインターフェース部330は、時刻T0において、バスインターフェース部400に対して第2の画像のn個の画素データを生成するために必要な第1の画像のm個の画素データのうちの1つ目の画素データを要求するリクエスト信号389(例えばHレベルの信号)及び1つ目の画素データが記憶されているSDRAM20のアドレスA0を示すアドレス信号379を送信する。
バスインターフェース部400は、リクエスト信号389を受信し、時刻T1〜T2において、画像データリードインターフェース部330に対して1つ目のプリアクノリッジ信号404(例えばHレベルの信号)を送信する。また、バスインターフェース部400は、アドレスA0を示すアドレス信号379を受信し、内部のバッファ(図示しない)に格納する。
画像データリードインターフェース部330は、1つ目のプリアクノリッジ信号404を受信し、時刻T2において、バスインターフェース部400に対して2つ目の画素データを要求するリクエスト信号389及び2つ目の画素データが記憶されているSDRAM20のアドレスA1を示すアドレス信号379を送信する。
バスインターフェース部400は、時刻T3において、バス40を介してSDRAM20に対して1つ目の画素データを要求するリクエスト信号16(例えばHレベルの信号)及び1つ目の画素データが記憶されているSDRAM20のアドレスA0を示すアドレス信号14を送信する。さらに、バスインターフェース部400は、時刻T3において、2つ目の画素データを要求するリクエスト信号389を受信し、バス40にバースト信号18(例えばHレベルの信号)を送信してバス占有権を設定する。
SDRAM20は、アドレスA0に記憶されている1つ目の画素データD0を読み出し、時刻T4〜T5において、バス40を介してバスインターフェース部400に対して1つ目のアクノリッジ信号42(例えばHレベルの信号)及び1つ目の画素データD0を送信する。
バスインターフェース部400は、1つ目のアクノリッジ信号42及び1つ目の画素データD0を受信し、時刻T4〜T5において、画像データリードインターフェース部330に対して2つ目のプリアクノリッジ信号404及び1つ目のアクノリッジ信号406(例えばHレベルの信号)を送信する。また、バスインターフェース部400は、時刻T4において、画像データリードインターフェース部330に対して1つ目の画素データD0を送信する。
画像データリードインターフェース部330は、2つ目のプリアクノリッジ信号404を受信し、時刻T5において、バスインターフェース部400に対して3つ目の画素データを要求するリクエスト信号389及び3つ目の画素データが記憶されているSDRAM20のアドレスA2を示すアドレス信号379を送信する。
バスインターフェース部400は、時刻T5において、バス40を介してSDRAM20に対して2つ目の画素データを要求するリクエスト信号16及び2つ目の画素データが記憶されているSDRAM20のアドレスA1を示すアドレス信号14を送信する。
SDRAM20は、アドレスA1に記憶されている2つ目の画素データD1を読み出し、時刻T6〜T7において、バス40を介してバスインターフェース部400に対して2つ目のアクノリッジ信号42及び2つ目の画素データD1を送信する。
バスインターフェース部400は、2つ目のアクノリッジ信号42及び2つ目の画素データD1を受信し、時刻T6〜T7において、画像データリードインターフェース部330に対して3つ目のプリアクノリッジ信号404及び2つ目のアクノリッジ信号406を送信する。また、バスインターフェース部400は、時刻T6において、画像データリードインターフェース部330に対して2つ目の画素データD1を送信する。
以下同様の処理を繰り返し、SDRAM20は、時刻T8〜T9において、バス40を介してバスインターフェース部400に対してm−1個目のアクノリッジ信号42及びm−1個目の画素データDm−2を送信する。
バスインターフェース部400は、m−1個目のアクノリッジ信号42及びm−1個目の画素データDm−2を受信し、時刻T8〜T9において、画像データリードインターフェース部330に対してm個目のプリアクノリッジ信号404及びm−1個目のアクノリッジ信号406を送信する。また、バスインターフェース部400は、時刻T8において、画像データリードインターフェース部330に対してm−1個目の画素データDm−2を送信する。
画像データリードインターフェース部330は、m個目のプリアクノリッジ信号404を受信し、時刻T9において、バスインターフェース部400に対してリクエスト信号389の送信を停止する。バスインターフェース部400は、時刻T9において、バス40に対してバースト信号18の送信を停止してバス占有権の設定を解除する。
バスインターフェース部400は、時刻T9において、バス40を介してSDRAM20に対してm個目の画素データを要求するリクエスト信号16及びm個目の画素データが記憶されているSDRAM20のアドレスAm−1を示すアドレス信号14を送信する。
SDRAM20は、アドレスAm−1に記憶されているm個目の画素データDm−1を読み出し、時刻T10〜T11において、バス40を介してバスインターフェース部400に対してm個目のアクノリッジ信号42及びm個目の画素データDm−1を送信する。
バスインターフェース部400は、m個目のアクノリッジ信号42及びm個目の画素データDm−1を受信し、時刻T10〜T11において、画像データリードインターフェース部330に対してm個目のアクノリッジ信号406を送信する。また、バスインターフェース部400は、時刻T10において、画像データリードインターフェース部330に対してm個目の画素データDm−1を送信する。
このように、本実施形態の画像処理装置によれば、第2の画像のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像のm個の画素データをすべて読み出すまでバス40を占有することができる。従って、第2の画像のn個の画素データを生成する処理を途中で停止することなく行うことができる。
また、本実施形態の画像処理装置によれば、第2の画像のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像のm個の画素データをすべて読み出すとすぐにバス40を解放することができる。従って、バス40に接続された他のデバイスの動作を必要以上に停止させないようにすることができる。
図9は、画像データリードインターフェース部におけるステータスバッファ、アドレスバッファ、データバッファに対するアクセスタイミングについて説明するためのタイミングチャート図である。以下、図7を参照しながら図9について説明する。
まず、時刻T0〜T1の期間において、画像データリードインターフェース部330は、第2の画像の1番目のn個の画素データ(例えばn=4の場合、図2のp(0,0)〜p(3,0))の各々に対応する第1の画像の画素の座標データに基づいて判定処理部370が判定したn個の判定結果をステータスバッファ0(382)に書き込む。また、時刻T0〜T1の期間において、画像データリードインターフェース部330は、1番目のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像の画素データの各アドレスをアドレスバッファ0(378)に書き込む。時刻T0〜T1の期間は1番目のn個の画素データの生成処理の第1ステージに対応する。
次に、時刻T1〜T2の期間において、画像データリードインターフェース部330は、アドレスバッファ0(378)に格納されたアドレスを順に読み出してバスインターフェース部400に送信する。また、時刻T1〜T2の期間において、画像データリードインターフェース部330は、アドレスバッファ0(378)に格納された各アドレスに対応してバスインターフェース部400から受信した第1の画像の各画素データをデータバッファ0(390)に書き込む。時刻T1〜T2の期間は1番目のn個の画素データの生成処理の第2ステージに対応する。
また、時刻T1〜T2の期間において、画像データリードインターフェース部330は、第2の画像の2番目のn個の画素データ(例えばn=4の場合、図2のp(4,0)〜p(7,0))の各々に対する第1の画像の画素の座標データに基づいて判定処理部370が判定したn個の判定結果をステータスバッファ1(384)に書き込む。また、時刻T1〜T2の期間において、画像データリードインターフェース部330は、2番目のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像の画素データの各アドレスをアドレスバッファ1(380)に書き込む。時刻T1〜T2の期間は2番目のn個の画素データの生成処理の第1ステージにも対応する。
次に、時刻T2〜T3の期間において、画像データリードインターフェース部330は、ステータスバッファ0(382)に格納されたn個の判定結果及びデータバッファ0(390)に格納された第1の画像の画素データを読み出して補正計算を行い1番目のn個の画素データを生成する。時刻T2〜T3の期間は1番目のn個の画素データの生成処理の第3ステージに対応する。
また、時刻T2〜T3の期間において、画像データリードインターフェース部330は、アドレスバッファ1(380)に格納されたアドレスを順に読み出してバスインターフェース部400に送信する。また、時刻T2〜T3の期間において、画像データリードインターフェース部330は、アドレスバッファ1(380)に格納された各アドレスに対応してバスインターフェース部400から受信した第1の画像の各画素データをデータバッファ1(392)に書き込む。時刻T2〜T3の期間は2番目のn個の画素データの生成処理の第2ステージにも対応する。
さらに、時刻T2〜T3の期間において、画像データリードインターフェース部330は、第2の画像の3番目のn個の画素データ(例えばn=4の場合、図2のp(0,1)〜p(3,1))の各々に対する第1の画像の画素の座標データに基づいて判定処理部370が判定したn個の判定結果をステータスバッファ2(386)に書き込む。また、時刻T2〜T3の期間において、画像データリードインターフェース部330は、3番目のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像の画素データの各アドレスをアドレスバッファ0(378)に書き込む。時刻T2〜T3の期間は3番目のn個の画素データの生成処理の第1ステージにも対応する。
次に、時刻T3〜T4の期間において、画像データリードインターフェース部330は、ステータスバッファ1(380)に格納されたn個の判定結果及びデータバッファ1(392)に格納された第1の画像の画素データを読み出して補正計算を行い2番目のn個の画素データを生成する。時刻T3〜T4の期間は2番目のn個の画素データの生成処理の第3ステージに対応する。
また、時刻T3〜T4の期間において、画像データリードインターフェース部330は、アドレスバッファ0(378)に格納されたアドレスを順に読み出してバスインターフェース部400に送信する。また、時刻T3〜T4の期間において、画像データリードインターフェース部330は、アドレスバッファ0(378)に格納された各アドレスに対応してバスインターフェース部400から受信した第1の画像の各画素データをデータバッファ0(390)に書き込む。時刻T3〜T4の期間は3番目のn個の画素データの生成処理の第2ステージにも対応する。
さらに、時刻T3〜T4の期間において、画像データリードインターフェース部330は、第2の画像の4番目のn個の画素データ(例えばn=4の場合、図2のp(4,1)〜p(7,1))の各々に対する第1の画像の画素の座標データに基づいて判定処理部370が判定したn個の判定結果をステータスバッファ0(382)に書き込む。また、時刻T3〜T4の期間において、画像データリードインターフェース部330は、4番目のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像の画素データの各アドレスをアドレスバッファ1(380)に書き込む。時刻T3〜T4の期間は4番目のn個の画素データの生成処理の第1ステージにも対応する。
次に、時刻T4〜T5の期間において、画像データリードインターフェース部330は、ステータスバッファ2(382)に格納されたn個の判定結果及びデータバッファ0(390)に格納された第1の画像の画素データを読み出して補正計算を行い3番目のn個の画素データを生成する。時刻T4〜T5の期間は3番目のn個の画素データの生成処理の第3ステージに対応する。
また、時刻T4〜T5の期間において、画像データリードインターフェース部330は、アドレスバッファ1(380)に格納されたアドレスを順に読み出してバスインターフェース部400に送信する。また、時刻T4〜T5の期間において、画像データリードインターフェース部330は、アドレスバッファ1(380)に格納された各アドレスに対応してバスインターフェース部400から受信した第1の画像の各画素データをデータバッファ1(392)に書き込む。時刻T4〜T5の期間は4番目のn個の画素データの生成処理の第2ステージにも対応する。
さらに、時刻T4〜T5の期間において、画像データリードインターフェース部330は、第2の画像の5番目のn個の画素データ(例えばn=4の場合、図2のp(0,2)〜p(3,2))の各々に対する第1の画像の画素の座標データに基づいて判定処理部370が判定したn個の判定結果をステータスバッファ1(384)に書き込む。また、時刻T4〜T5の期間において、画像データリードインターフェース部330は、5番目のn個の画素データを生成するためにSDRAM20から読み出す必要がある第1の画像の画素データの各アドレスをアドレスバッファ0(378)に書き込む。時刻T4〜T5の期間は5番目のn個の画素データの生成処理の第1ステージにも対応する。
以下、同等の処理を繰り返して、画像データリードインターフェース部330は、第2の画像のすべての画素データを生成する。
以上説明したように、アドレスバッファへの書き込み処理は第1ステージで行われ、アドレスバッファからの読み出し処理は第2ステージで行われる。そこで、画像データリードインターフェース部330は、画像データの生成処理を停止させないためにアドレスバッファを2つ備えている。同様に、データバッファへの書き込み処理は第2ステージで行われ、データバッファからの読み出し処理は第3ステージで行われる。そこで、画像データリードインターフェース部330は、画像データの生成処理を停止させないためにデータバッファを2つ備えている。一方、ステータスバッファへの書き込み処理は第1ステージで行われ、ステータスバッファからの読み出し処理は第3ステージで行われる。そこで、画像データリードインターフェース部330は、画像データの生成処理を停止させないためにステータスバッファを3つ備えている。
このように、本実施形態の画像処理装置によれば、n個の画素データの生成処理を3つのステージに分けて、3セットのn個の画素データの生成処理を1ステージずつずらしながら同時に行うことにより画像処理をより高速化することができる。
図10は、画像処理装置が図2に示すVGAの1画面分の第2の画像の画素データを生成する処理の手順を示すフローチャートの一例である。図10のフローチャートにおいて、SRAM200は、図11に示すように、例えば、9ビットのアドレス空間を有するメモリであり、オフセットデータの記憶領域が、書き込みアドレスの最上位ビットが0の領域(オフセットデータ記憶領域0)と最上位ビットが1の領域(オフセットデータ記憶領域1)に分けられているものとする。
まず、画像処理装置10は、k=0、メモリ領域選択フラグ=0に初期化する(ステップS10)。具体的には、メモリインターフェース部100は、メモリカウンタ部120のブロックラインカウンタを0に初期化する。また、メモリインターフェース部100は、例えば、メモリアドレス生成部130に1ビットのメモリ領域選択フラグレジスタを持っており、その値を0に初期化する。
次に、画像処理装置10は、SDRAM20からブロックラインBL0上の頂点画素p(0,0),p(8,0),p(16,0),・・・,p(624,0),p(632,0)の各オフセットデータ及びダミーの頂点画素d(640,0)のオフセットデータを読み出し、SRAM200のオフセットデータ記憶領域0のアドレス000H〜050Hに書き込む(ステップS12)。具体的には、メモリインターフェース部100は、バスリードアドレス生成部110及び制御部180により、ブロックラインBL0上のオフセットデータ402を例えば16個ずつSDRAM20からバースト読み出しし、メモリカウンタ部120のブロックカウンタを0〜79までカウントアップしながら、メモリアドレス生成部130がアドレス000H〜050Hのアドレス信号132を順に生成してSRAM200のオフセットデータ記憶領域0にオフセットデータを書き込む。
次に、画像処理装置10は、kを1だけインクリメントし、メモリ領域選択フラグを反転する(ステップS14)。具体的には、メモリインターフェース部100は、メモリカウンタ部120のブロックラインカウンタを1だけインクリメントする。また、メモリインターフェース部100はメモリ領域選択フラグレジスタの値を0から1に反転する。
次に、画像処理装置10は、SDRAM20からブロックラインBL1上の頂点画素p(0,8),p(8,8),p(16,8),・・・,p(624,8),p(632,8)の各オフセットデータ及びダミーの頂点画素d(640,8)のオフセットデータを読み出し、SRAM200のオフセットデータ記憶領域1のアドレス100H〜150Hに書き込む(ステップS16)。具体的には、メモリインターフェース部100は、バスリードアドレス生成部110及び制御部180により、ブロックラインBL1上のオフセットデータ402を例えば16個ずつSDRAM20からバースト読み出しし、メモリカウンタ部120のブロックカウンタを0〜79までカウントアップしながら、メモリアドレス生成部130がアドレス000H〜150Hのアドレス信号132を順に生成してSRAM200のオフセットデータ記憶領域1にオフセットデータを書き込む。
次に、画像処理装置10は、SRAM200のオフセットデータ記憶領域0及びオフセットデータ記憶領域1からオフセットデータを読み出し、ブロックB(0,0),B(1,0),B(2,0),・・・,B(78,0),B(79,0)に含まれる画素データを生成する(ステップS18)。具体的には、メモリインターフェース部100は、メモリカウンタ部120のブロックカウンタを0に初期化し、バスリードアドレス生成部110が生成したアドレス信132に基づいて、SRAM200のオフセットデータ記憶領域0にあるアドレス000Hに記憶された画素p(0,0)のオフセットデータを読み出してバッファ1−1(140)に格納する。また、メモリインターフェース部100は、メモリカウンタ部120のブロックカウンタをインクリメントし、バスリードアドレス生成部110が生成したアドレス信132に基づいて、SRAM200のオフセットデータ記憶領域0にあるアドレス001Hに記憶された画素p(8,0)のオフセットデータを読み出してバッファ1−2(150)に格納する。また、メモリインターフェース部100は、メモリカウンタ部120のブロックカウンタを0に初期化し、バスリードアドレス生成部110が生成したアドレス信132に基づいて、SRAM200のオフセットデータ記憶領域1にあるアドレス100Hに記憶された画素p(0,8)のオフセットデータを読み出してバッファ1−3(160)に格納する。さらに、メモリインターフェース部100は、メモリカウンタ部120のブロックカウンタをインクリメントし、バスリードアドレス生成部110が生成したアドレス信132に基づいて、SRAM200のオフセットデータ記憶領域1にあるアドレス101Hに記憶された画素p(8,8)のオフセットデータを読み出してバッファ1−4(170)に格納する。すなわち、メモリインターフェース部100は、ブロックB(0,0)の4つの頂点画素p(0,0)、p(0,8)、p(8,0)、p(8,8)のオフセットデータをバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)にそれぞれ格納する。画像データ生成処理部300は、バッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)にそれぞれ格納されたオフセットデータ142、152、162、172を、それぞれバッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)に取り込み、Hカウンタ352及びVカウンタ354を操作しながらブロックB(0,0)に含まれる画素データをn個ずつ生成する処理を行う。
続いてメモリインターフェース部100は、バッファ1−2(150)及びバッファ1−4(170)にそれぞれ格納された画素p(8,0)のオフセットデータ及び画素p(8,8)のオフセットデータをそれぞれバッファ1−1(140)及びバッファ1−3(160)に転送して格納する。また、メモリインターフェース部100は、メモリカウンタ部120のブロックカウンタをインクリメントし、バスリードアドレス生成部110が生成したアドレス信132に基づいて、SRAM200のオフセットデータ記憶領域0にあるアドレス002Hに記憶された画素p(16,0)のオフセットデータを読み出してバッファ1−2(150)に格納する。さらに、メモリインターフェース部100は、バスリードアドレス生成部110が生成したアドレス信132に基づいて、SRAM200のオフセットデータ記憶領域1にあるアドレス102Hに記憶された画素p(16,8)のオフセットデータを読み出してバッファ1−4(170)に格納する。すなわち、メモリインターフェース部100は、ブロックB(1,0)の4つの頂点画素p(8,0)、p(16,0)、p(8,8)、p(16,8)のオフセットデータをバッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)に格納する。画像データ生成処理部300は、バッファ1−1(140)、バッファ1−2(150)、バッファ1−3(160)、バッファ1−4(170)にそれぞれ格納されたオフセットデータ142、152、162、172を、それぞれバッファ2−1(356)、バッファ2−2(358)、バッファ2−3(360)、バッファ2−4(362)に取り込み、Hカウンタ352及びVカウンタ354を操作しながらブロックB(1,0)に含まれる画素データをn個ずつ生成する処理を行う。
メモリインターフェース部100及び画像データ生成処理部300は以下同様の処理を繰り返し、ブロックB(0,0)〜ブロックB(79,0)に含まれる画素データをn個ずつ生成する。
次に、画像処理装置10は、kを1だけインクリメントし、メモリ領域選択フラグを反転する(ステップS20)。具体的には、メモリインターフェース部100は、メモリカウンタ部120のブロックラインカウンタを1だけインクリメントする。また、メモリインターフェース部100はメモリ領域選択フラグレジスタの値を1から0に反転する。
次に、画像処理装置10は、メモリ領域選択フラグが0又は1のいずれであるかを判断する(ステップS22)。
メモリ領域選択フラグ=0の場合(ステップS22でYesの場合)は、画像処理装置10は、SDRAM20からブロックラインBLk上の頂点画素p(0,8k),p(8,8k),p(16,8k),・・・,p(624,8k),p(632,8k)の各オフセットデータ及びダミーの頂点画素d(640,8k)のオフセットデータを読み出し、SRAM200のオフセットデータ記憶領域0のアドレス000H〜050Hに書き込む(ステップS24)。さらに、画像処理装置10は、SRAM200のオフセットデータ記憶領域0からオフセットデータを読み出し、ブロックB(0,k−1),B(1,k−1),B(2,k−1),・・・,B(78,k−1),B(79,k−1)に含まれる画素データを生成する(ステップS26)。例えば、ステップS18でブロックラインBL0上の頂点画素p(0,0),p(8,8),p(16,0),・・・,p(624,0),p(632,0)のオフセットデータ及びダミーの頂点画素d(640,0)のオフセットデータ、ブロックラインBL1上の頂点画素p(0,8),p(8,8),p(16,8),・・・,p(624,8),p(632,8)のオフセットデータ及びダミーの頂点画素d(640,8)のオフセットデータを用いて、ブロックB(0,0),B(1,0),B(2,0),・・・,B(78,0),B(79,0)に含まれる画素データを生成した後、ステップ20でメモリ選択フラグが1から0に反転する。従って、ステップS24の処理において、ブロックラインBL2上の頂点画素p(0,16),p(8,16),p(16,16),・・・,p(624,16),p(632,16)のオフセットデータ及びダミーの頂点画素d(640,16)のオフセットデータがSRAM200のオフセットデータ記憶領域0に書き込まれる。ここで、続くステップS26において行われるブロックB(0,1),B(1,1),B(2,1),・・・,B(78,1),B(79,1)に含まれる画素データの生成処理において、ブロックラインBL1上の頂点画素p(0,8),p(8,8),p(16,8),・・・,p(624,8),p(632,8)のオフセットデータ及びダミーの頂点画素d(640,8)のオフセットデータは必要であるが、ブロックラインBL0上の頂点画素p(0,0),p(8,8),p(16,0),・・・,p(624,0),p(632,0)のオフセットデータ及びダミーの頂点画素d(640,0)のオフセットデータは不要である。そこで、ステップS24において、ブロックラインBL2上の頂点画素p(0,16),p(8,16),p(16,16),・・・,p(624,16),p(632,16)のオフセットデータ及びダミーの頂点画素d(640,16)のオフセットデータを、ブロックラインBL0上の頂点画素p(0,0),p(8,8),p(16,0),・・・,p(624,0),p(632,0)のオフセットデータ及びダミーの頂点画素d(640,0)のオフセットデータが記憶されていたオフセットデータ記憶領域0に上書きすることができる。
一方、メモリ領域選択フラグ=1の場合(ステップS22でNoの場合)は、画像処理装置10は、SDRAM20からブロックラインBLk上の頂点画素p(0,8k),p(8,8k),p(16,8k),・・・,p(624,8k),p(632,8k)の各オフセットデータ及びダミーの頂点画素d(640,8k)のオフセットデータを読み出し、SRAM200のオフセットデータ記憶領域1のアドレス100H〜150Hに書き込む(ステップS28)。さらに、画像処理装置10は、SRAM200のオフセットデータ記憶領域1からオフセットデータを読み出し、ブロックB(0,k−1),B(1,k−1),B(2,k−1),・・・,B(78,k−1),B(79,k−1)に含まれる画素データを生成する(ステップS30)。例えば、ステップS26でブロックラインBL1上の頂点画素p(0,8),p(8,8),p(16,8),・・・,p(624,8),p(632,8)のオフセットデータ及びダミーの頂点画素d(640,8)のオフセットデータ、ブロックラインBL2上の頂点画素p(0,16),p(8,16),p(16,16),・・・,p(624,16),p(632,16)のオフセットデータ及びダミーの頂点画素d(640,16)のオフセットデータを用いて、ブロックB(0,1),B(1,1),B(2,1),・・・,B(78,1),B(79,1)に含まれる画素データを生成した後、ステップ20でメモリ選択フラグが0から1に反転する。従って、ステップS28の処理において、ブロックラインBL3上の頂点画素p(0,24),p(0,24),p(16,24),・・・,p(624,24),p(632,24)のオフセットデータ及びダミーの頂点画素d(640,24)のオフセットデータがSRAM200のオフセットデータ記憶領域1に書き込まれる。ここで、続くステップS30において行われるブロックB(0,2),B(1,2),B(2,2),・・・,B(78,2),B(79,2)に含まれる画素の画素データの生成処理において、ブロックラインBL2上の頂点画素p(0,16),p(8,16),p(16,16),・・・,p(624,16),p(632,16)のオフセットデータ及びダミーの頂点画素d(640,16)のオフセットデータは必要であるが、ブロックラインBL1上の頂点画素p(0,8),p(8,8),p(16,8),・・・,p(624,8),p(632,8)のオフセットデータ及びダミーの頂点画素d(640,8)のオフセットデータは不要である。そこで、ステップS24において、ブロックラインBL3上の頂点画素p(0,24),p(0,24),p(16,24),・・・,p(624,24),p(632,24)のオフセットデータ及びダミーの頂点画素d(640,24)のオフセットデータを、ブロックラインBL1上の頂点画素p(0,8),p(8,8),p(16,8),・・・,p(624,8),p(632,8)のオフセットデータ及びダミーの頂点画素d(640,8)のオフセットデータが記憶されていたオフセットデータ記憶領域1に上書きすることができる。
次に、画像処理装置10は、k=60(ブロックライン数)か否かを判断する(ステップS32)。k≠60の場合(ステップS32でNoの場合)は、画像処理装置10はステップS20〜S30の処理を繰り返し、k=60の場合(ステップS32でYesの場合)は、すべてのブロックラインに対する処理が終了したので、画像処理装置10は1画面分の画素データの生成を終了する。
以上、図1〜図13で説明したように、本実施形態の画像処理装置によれば、オフセットデータはバースト読み出しが可能なSDRAM20に格納され、メモリインターフェース部100は、SDRAM20からオフセットデータを所定個ずつバースト読み出しして少なくとも2行分のオフセットデータを内部のSRAM200に格納する。すなわち、1画面分の第2の画像を生成するために必要なすべてのオフセットデータはSDRAM20に記憶されているので、SRAM200に記憶しておく必要がない。従って、SRAM200は、少なくとも2行分のオフセットデータを記憶することができればよくそのサイズを大幅に削減することができるので、画像処理装置10を比較的低コスト化することができる。また、オフセットデータはSDRAM20から所定個ずつバースト読み出しされるので、オフセットデータの読み出しに要するレイテンシーを大幅に削減することができる。従って、画像処理装置10の処理速度を比較的高速化することができる。
また、本実施形態の画像処理装置によれば、行方向に隣接する2つのブロックは一辺に存在する画素を共有するので、共有される一辺に存在する頂点画素のオフセットデータは当該2つのブロックの画像処理演算に共用される。従って、SDRAM20に記憶されメモリインターフェース部100によって読み出されるオフセットデータの数を削減することができる。また、SRAM200が2つのオフセットデータ記憶領域を含み、メモリインターフェース部100が今回の1行分のオフセットデータを、前回使用したオフセットデータ記憶領域と異なるオフセットデータ記憶領域に格納するので、当該2つのブロックの画像処理演算に共用されるオフセットデータを前回使用したオフセットデータ記憶領域に残しておいて今回の演算処理に使用することができる。従って、本実施形態の画像処理装置によれば、小さいサイズのSRAM200を有効利用して処理速度をより高速化することができる。
また、本実施形態の画像処理装置によれば、列方向に隣接する2つのブロックは一辺に存在する画素を共有するので、共有される一辺に存在する頂点画素のオフセットデータは当該2つのブロックの画像処理演算に共用される。従って、SDRAM20に記憶されメモリインターフェース部100によって読み出されるオフセットデータの数を削減することができる。また、当該2つのブロックの画像処理演算に共用されるオフセットデータについてはSRAM200から1回読み出すだけでよい。従って、本実施形態の画像処理装置によれば、小さいサイズのSRAM200を効率的に利用して処理速度をより高速化することができる。
また、本実施形態の画像処理装置によれば、各ブロックの4つの頂点画素にそれぞれ対応する4つのオフセットデータを格納するための4つのダブルバッファ(バッファ1−1とバッファ2−1、バッファ1−2とバッファ2−2、バッファ1−3とバッファ2−3、バッファ1−4とバッファ2−4)を有する。従って、今回計算対象のブロックにおけるオフセットデータをバッファ2−1〜バッファ2−4に格納して画素データを生成するための演算処理と、次回計算対象のブロックにおけるオフセットデータをSRAM200から読み出してバッファ1−1〜バッファ1−4に格納する処理を並行して行うことができる。従って、本実施形態の画像処理装置によれば、小さいサイズのSRAM200を効率的に利用して処理速度をより高速化することができる。
また、本実施形態の画像処理装置によれば、第2の画像を分割するブロックのサイズ及び形状を可変に設定することができる。従って、例えば、列方向の歪みが大きい場合にはブロックの形状を行方向の画素数が列方向の画素数よりも小さくなるような長方形に設定したり、ブロックのサイズをより小さく設定することにより、使用環境に応じて第2の画像の精度を向上させたり維持することができる。
また、本実施形態の画像処理装置によれば、画像データ生成処理部300(画像データリードインターフェース部330)は、第1の画像の画素データを要求する場合にはリクエスト信号389を送信する。すなわち、画像データ生成処理部300(画像データリードインターフェース部330)は、プリアクノリッジ信号404を受信後も次のデータを要求する場合にはリクエスト信号389を送信する。従って、バスインターフェース部400は、プリアクノリッジ信号404を送信することにより、画像データ生成処理部300(画像データリードインターフェース部330)がさらにデータを要求しているか否かを判断することができる。そして、バスインターフェース部400は、画像データ生成処理部300(画像データリードインターフェース部330)がさらにデータを要求している場合にはデータ要求が終了するまでバス40にバースト信号18を送信してバス占有権を設定する。すなわち、画像データ生成処理部300(画像データリードインターフェース部330)が第1の画像の画素データを要求し続ける間、バス40を占有することができる。従って、本実施形態の画像処理装置によれば、第1の画像を構成する画素データに基づいて第2の画像を構成する画素データを生成する処理を比較的高速に行うことができる。
また、本実施形態の画像処理装置によれば、SDRAM20から複数のデータのバースト読み出しが可能である場合には、バス40を占有することにより2番目以降のデータの読み出しのレイテンシーをなくすことができるので、画像生成処理をより高速化することができる。
また、本実施形態の画像処理装置によれば、画像データ生成処理部300(画像データリードインターフェース部330)が1つのデータしか要求しない場合にはプリアクノリッジ信号404を受信後はリクエスト信号389を送信しないので、バスインターフェース部400はバス40にバス占有権を設定しない。従って、本実施形態の画像処理装置によれば、SDRAM20から1つの画素データしか読み出されない場合には無駄にバス40を占有しないので、バス40に接続された他のデバイス30等によるバス40の有効利用を図ることができる。
また、本実施形態の画像処理装置によれば、画像データ生成処理部300(画像データリードインターフェース部330)は、バスインターフェース部400がバス40を介してSDRAM20からアクノリッジ信号42を受信する前に、プリアクノリッジ信号404に基づいて第1の画像の画素データを読み出すためのアドレスを生成する処理を行うことができる。従って、画像生成処理をより高速化することができる。
2.車両用ヘッドアップディスプレイシステム
図12は、図1〜図11で説明した画像処理装置を使用した画像処理システムの一例としての車両用のヘッドアップディスプレイシステムの構成例を示す図である。
車両用ヘッドアップディスプレイシステム600は、画像処理装置610、SDRAM620(記憶装置の一例)、LCDプロジェクタ630(画像表示装置の一例)、CPU640を含んで構成されている。画像処理装置610、SDRAM620、CPU640はバス650に接続されている。
画像処理装置610は、表示対象の入力画像(第1の画像)を構成する画素データを受信し、当該画素データに基づいて出力画像(第2の画像)を構成する画素データを生成する処理を行う。入力画像を構成する画素データは、SDRAM620に記憶されていてもよいし、バス650に接続された他の記憶装置(図示しない)に記憶されていてもよい。
SDRAM620は、バースト読み出しが可能な記憶装置であり、例えば、出力画像を分割した各ブロックの頂点画素の座標と、これらの各頂点画素に対応する入力画像の画素の座標との差を示すオフセットデータが記憶されている。
LCDプロジェクタ630は、画像処理装置610が生成した画素データにより構成される出力画像を生成し、フロントガラス800の表面に投影する。
CPU640は、画像処理装置610やLCDプロジェクタ630の動作を制御する。
車両用ヘッドアップディスプレイシステム600は、例えば、ダッシュボード700の中に配置される。図12に示すフロントガラス800の表面は湾曲しているため、フロントガラス800の形状やドライバーの目線の位置に応じて発生する歪みに対して、入力画像にあらかじめ逆方向の歪みを加えて出力画像の画素データを生成する。こうすることにより、ドライバーの目線から見た画像が歪んだ画像にならないようにすることができる。
画像処理装置610に本実施形態の画像処理装置を適用することにより、車両用ヘッドアップディスプレイシステム600は、第1の画像を構成する画素データに基づいて第2の画像を構成する画素データを生成する処理を比較的低コストかつ高速に行うことができる。
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
本発明は、実施の形態で説明した構成と実質的に同一の構成(例えば、機能、方法及び結果が同一の構成、あるいは目的及び効果が同一の構成)を含む。また、本発明は、実施の形態で説明した構成の本質的でない部分を置き換えた構成を含む。また、本発明は、実施の形態で説明した構成と同一の作用効果を奏する構成又は同一の目的を達成することができる構成を含む。また、本発明は、実施の形態で説明した構成に公知技術を付加した構成を含む。
1 画像処理システム、10 画像処理装置、12 画素データ、14 アドレス信号、16 リクエスト信号、18 バースト信号、20 SDRAM、30 デバイス、40 バス、42 アクノリッジ信号、44 画素データ、50 LCD、52 第2の画像、100 メモリインターフェース部、110 バスリードアドレス生成部、112 アドレス信号、120 メモリカウンタ部、130 メモリアドレス生成部、132 アドレス信号、140 バッファ、142 オフセットデータ、150 バッファ、152 オフセットデータ、160 バッファ、162 オフセットデータ、170 バッファ、172 オフセットデータ、180 制御部、200 SRAM、300 画像データ生成処理部、302 画素データ、310 オフセットデータリードインターフェース、320 座標計算処理部、322 座標データ、330 画像データリードインターフェース部、332 画素データ、340 FIFO、350 制御部、352 Hカウンタ(ピクセルカウンタ)、354 Vカウンタ(ラインカウンタ)、356 バッファ、358 バッファ、360 バッファ、362 バッファ、370 FIFO、372 判定処理部、374 アドレス生成部、376 アドレスキャッシュ、378 アドレスバッファ0、379 アドレス信号、380 アドレスバッファ1、382 ステータスバッファ0、384 ステータスバッファ1、386 ステータスバッファ2、388 制御部、389 リクエスト信号、390 データバッファ0、392 データバッファ1、394 データキャッシュ、396 補正計算理部、400 バスインターフェース部、402 オフセットデータ、404 プリアクノリッジ信号、406 アクノリッジ信号、408 画素データ、500 LCDコントローラ、600 車両用ヘッドアップディスプレイシステム、610 画像処理装置、620 SDRAM、630 LCDプロジェクタ、640 CPU、650 バス、700 ダッシュボード、800 フロントガラス、900 画像、902 画像、904 画像、910 表示装置