以下、本発明の一態様であるプロジェクターについて、図面を参照しつつ、実施例に基づいて以下の順序で説明する。
A.第1の実施例:
A−1.台形歪み補正:
A−2.プロジェクターの構成:
A−3.台形歪み補正部:
A−4.先読み判定:
A−5.ヒット判定:
A−6.キャッシュブロック制御部:
B.変形例:
A.第1の実施例:
A−1.台形歪み補正:
本発明の一実施例としてのプロジェクター100は、映像を表す映像光を投写して、スクリーンSCなどの被投写面上に映像を表示させる。プロジェクター100は、矩形の映像が入力された場合に、スクリーンSC上に表示される映像の台形歪みを補正して、矩形の映像を表示させることが可能なプロジェクターである。ここで、台形歪みとは、プロジェクターと被投写面との相対的な位置関係によって、被投写面に表示された映像が台形、平行四辺形、それ以外の四角形等に歪むことをいう。プロジェクター100の構成の説明に先立って、本実施例のプロジェクター100における台形歪み補正について、簡単に説明する。
図1は、台形歪み補正を概念的に示す説明図である。図示するように、プロジェクター100が、スクリーンSCに対して、水平方向(左右方向)および垂直方向(上下方向)に、それぞれ傾きを有して配置された場合、液晶パネル部192に表示されている映像(補正前映像IG0)は矩形であるのに対し、スクリーンSCに投写される映像PIG0は、水平方向および垂直方向のそれぞれに台形歪みを生じる。なお、図1では、説明の便を図って、プロジェクター100内に含まれる液晶パネル部192を、プロジェクター100外に出して表示している。
プロジェクター100は、射影変換の手法を利用して、スクリーンSCに投写される映像と逆方向に歪ませた映像(補正後映像IG1)を液晶パネル部192上に形成することにより、スクリーンSC上に矩形の映像PIG1を表示させる(図1)。ここでは、台形歪みを生じた映像を、矩形(本来表示されるべき映像の形状)に見せるためにおこなわれる補正を「台形歪み補正」と呼ぶ。本実施例における台形歪み補正は、特許請求の範囲における「所定の補正」に該当する。
図2は、補正後映像データの作成方法を概念的に示す説明図である。図2(a)は、補正前映像IG0を示している。また、図2(b)は、補正後映像IG1を示している。図2(b)の破線は、補正前映像IG0の外形を示している。補正前映像IG0は、液晶パネル部192のフレーム一杯に表示されるように映像処理を施されているため、図2(b)における破線は、液晶パネル部192のフレームを示している。
本実施例において、補正前映像IG0、補正後映像IG1の座標とは、補正前映像IG0、補正後映像IG1が液晶パネル部192に表示されたときの画素座標をいう。以下、補正後映像IG1が表示されている場合の液晶パネル部192の画素座標を、補正後座標という。なお、液晶パネル部192の画素座標のうち、補正後映像IG1が表示されていない領域の画素座標も、補正後座標を用いて呼ぶ。補正後座標を、逆射影変換により補正前映像IG0における座標位置(液晶パネルの画素座標)に変換した座標を、補正前座標という。
補正後映像IG1を表す補正後映像データの作成方法の概要について、図2に基づいて説明する。プロジェクター100は、補正前映像IG0の画素値に基づいて、補正後映像IG1を構成する全ての画素座標の画素値(R,G,Bの各値)を求めることにより、補正後映像データを生成する。一例として、図2に示す補正後映像IG1の真ん中の四角で囲まれた座標P1(X,Y)の画素値を求める方法を説明する。
まず、プロジェクター100は、画素値を求めたい画素の補正後座標P1(X,Y)を補正前座標P0(x,y)に変換する。このとき、補正前映像IG0と補正後映像IG1は、整数倍の対応関係となっていないため、算出された補正前座標P0(x,y)には、小数が含まれている。そのため、プロジェクター100は、対応する補正前座標P0(x,y)の近傍の16座標の画素値を用いて、補正前座標P0(x,y)の画素値を推定する。この画素値の推定を画素補間とも呼ぶ。したがって、プロジェクター100は、変換された小数点を含む補正前座標P0(x,y)に基づいて、補正前座標P0(x,y)近傍の画素ブロックを読み出し、読み出した画素ブロックに対してフィルター係数を用いて画素補間を行う。これにより、プロジェクター100は、補正後映像IG1の座標P1(X,Y)の画素値を算出する。すなわち、プロジェクター100は、補正後映像IG1を構成する全ての画素(座標)の画素値を、1画素ごとに、上記の画素補間を行うことによって算出し、補正後映像IG1を表す補正後映像データを生成する。
図3は、画素補間の方法を概念的に示す図である。図3では、上記した補正後座標P1(X,Y)を変換した補正前座標P0(x,y)に対応する画素値を画素補間により求める方法を例示している。図中、補正前座標P0(x,y)の位置を、ハッチングを付した丸印で示し、その周辺16座標の位置を白丸印で示している。補正前座標P0(x,y)に対応する画素値は画素補間によって求められるため、補正前座標P0(x,y)に対応する画素値を「補間画素」、補正前座標P0(x,y)周辺の16画素の画素値は、補正前映像データであり既知であるため「既知画素」とも称する。
図3では、既知画素である16画素の画素値を、DATA[m][n](m=0,1,2,3(x方向);n=0,1,2,3(y方向))と示している。補間画素は、この16画素の画素値とフィルター係数との畳み込み演算により求められる。フィルター係数は、補間画素と既知画素との距離(例えば、DATA[1][1]の既知画素と補間画素との距離は、x方向にdx、y方向にdyである)による影響を考慮した係数であり、既知画素ごとに定められる。図3では、フィルター係数は、COEF[m][n](m=0,1,2,3(x方向);n=0,1,2,3(y方向))と示している。なお、本実施例において、2次元のフィルター係数を用いているが、フィルター係数を1次元に分解してもよい。
A−2.プロジェクターの構成:
図4は、本発明の一実施例としてのプロジェクターの構成を概略的に示すブロック図である。図示するように、プロジェクター100は、映像入力部110と、IP変換部112と、解像度変換部114と、映像合成部116と、台形歪み補正部120と、液晶パネル駆動部140と、フレームバッファー150と、高速バス制御部160と、低速バス制御部162と、プロセッサー部170と、撮像部180と、センサー部182と、照明光学系190と、液晶パネル部192と、投写光学系194と、を備える。照明光学系190、液晶パネル部192、投写光学系194以外の各構成要素は、高速バス102または低速バス104を介して互いに接続されている。
映像入力部110は、図示しないDVDプレーヤーやパーソナルコンピューターなどからケーブルを介して入力された入力映像信号に対して、必要によりA/D変換を行い、デジタル映像信号をIP変換部112に供給する。
IP変換部112は、映像入力部110から供給された映像データのフォーマットを、インタレース方式からプログレッシブ方式に変換する処理を実行し、得られた映像データを解像度変換部114に供給する。
解像度変換部114は、IP変換部112から供給された映像データに対して、サイズの拡大処理または縮小処理(すなわち、解像度変換処理)を施し、得られた映像データを、映像合成部116に供給する。
映像合成部116は、解像度変換部114から供給された映像データとメニュー画面などのOSD(On Screen Display)とを合成して、フレームバッファー150に、補正前映像データとして書き込む。
フレームバッファー150は、1フレームまたは複数フレームのデータを格納できる。本実施例では、フレームバッファー150として、安価で大容量なDRAM(Dynamic Random Access Memory)を用いている。本実施例におけるフレームバッファー150は、特許請求の範囲における「フレーム映像記憶部」に該当する。
台形歪み補正部120は、スクリーンSCに対してプロジェクター100の投写軸を傾けた状態で投写した場合に生じる台形歪みを補正する。具体的には、フレームバッファー150に格納されている補正前映像データが表す補正前映像を、台形歪みを補償する形状で液晶パネル部192に表示させるため、補正前映像データに対して補正処理を施し、補正後映像データとして、液晶パネル駆動部140に供給する。台形歪み補正部120については、後に図5を用いて詳述する。
液晶パネル駆動部140は、台形歪み補正部120を経て入力されたデジタル映像信号に基づいて、液晶パネル部192を駆動する。液晶パネル部192は、複数の画素をマトリクス状に配置した透過型液晶パネルにより構成される。液晶パネル部192は、液晶パネル駆動部140によって駆動され、マトリクス状に配置された各画素における光の透過率を変化させることにより、照明光学系190から照射された照明光を、映像を表す有効な映像光へと変調するための映像を形成する。本実施例において、液晶パネル部192のモードはWUXGAであり、解像度は1920×1200ドットである。本実施例では、液晶パネル画素座標を、x=0〜1919、y=0〜1199と規定している。なお、液晶パネル部192は、本実施例と異なる解像度のものを用いてもよい。
照明光学系190は、例えば、高圧水銀ランプ、超高圧水銀ランプ等のランプ類や、その他の発光体を備えて構成される。投写光学系194は、プロジェクター100の筐体の前面に取り付けられており、液晶パネル部192によって映像光へと変調された光を拡大して、スクリーンSCに投写する。投写光学系194はズームレンズ(図示せず)を備え、液晶パネル部192を透過した光を投写する際の拡大の程度(ズーム状態)を変化させることができる。本実施例における液晶パネル駆動部140、液晶パネル部192、照明光学系190、投写光学系194は、特許請求の範囲における「映像光出力部」に該当する。
プロセッサー部170は、記憶部(図示しない)に記憶された制御プログラムを読み出して実行することにより、プロジェクター100内の各部の動作を制御する。また、撮像部180により撮像された撮影画像や、センサー部182により検出されるプロジェクター100の傾きや、ユーザからの指示に基づいて、後述する補正後座標(X0〜X3、Y0〜Y3)(図2参照)、座標変換行列の変換係数(後に詳述する)を算出し、台形歪み補正部120に出力する。なお、本実施例において、プロセッサー部170は、ユーザからの指示をプロジェクター100本体に設けられた操作パネル(図示しない)を通じて受け取る構成にしているが、例えば、リモコンを通じたユーザからの指示をリモコン制御部が受信して、低速バス104を介してプロセッサー部170がユーザからの指示を受信する構成にしてもよい。
撮像部180は、CCDカメラを有しており、プロジェクター100によってスクリーンSC上に表示された映像を撮像して撮影画像を生成する。撮像部180により生成された撮影画像は、図示せざる撮影画像メモリ内に格納される。なお、撮像部180は、CCDカメラの代わりに他の撮像デバイスを有することも可能である。
センサー部182は、プロジェクター100の鉛直方向からの傾きを検出することにより、撮像部180のCCD光軸が水平面となす傾き角度を検出することができる。
A−3.台形歪み補正部:
台形歪み補正部120は、上記したように、フレームバッファー150に格納されている補正前映像データが表す補正前映像を、台形歪みを補償する形状に補正した補正後映像データを生成する。図5は、台形歪み補正部120の構成を示す機能ブロック図である。台形歪み補正部120は、キャッシュブロック制御部121と、キャッシュブロック記憶部122と、キャッシュブロック用タグ情報記憶部123と、補間ブロック読み出し部124と、画素補間部125と、FIFO部126と、レジスター部127と、制御部128と、座標変換部129と、フィルター係数算出部130と、ヒット判定部131と、先読みリクエスト発行部132と、を備えている。
キャッシュブロック制御部121は、フレームバッファー150に格納されている補正前映像データの一部のデータを、8×8画素からなるキャッシュブロック単位で取得してキャッシュブロック記憶部122に格納する。以後、キャッシュブロックとは、8×8画素の画素値を含む映像データを表す。また、キャッシュブロック制御部121は、キャッシュブロック用タグ情報記憶部123に格納されている後述するタグ情報を更新する。キャッシュブロック制御部121は、ヒット判定部131または先読みリクエスト発行部132によって指定されたキャッシュブロックをフレームバッファー150から取得する。ヒット判定部131または先読みリクエスト発行部132によって指定されたキャッシュブロックをフレームバッファー150から取得するときの具体的な処理については、図16〜図19を用いて後述する。本実施例におけるキャッシュブロック制御部121は、特許請求の範囲における「ブロック映像取得部」に該当する。
キャッシュブロック記憶部122は、フレームバッファー150に格納されている1フレーム分の補正前映像データの一部のデータを、8×8画素からなるキャッシュブロック単位で格納する。キャッシュブロック記憶部122は、1つのキャッシュブロックを格納できるブロック領域を複数備える。本実施例では、後に詳述するように、キャッシュブロック記憶部122は240列×4行のブロック領域を備える。本実施例において、キャッシュブロック記憶部122は、小容量で高速なSRAM(Static Random Access Memory)で構成され、当該SRAMは、後に詳述するように、1ポートのRAMを用いて、読み出しと書き込みとを同時に行うことができる。本実施例におけるキャッシュブロック記憶部122は、特許請求の範囲における「ブロック映像記憶部」に該当する。また、本実施例では、キャッシュブロック記憶部122における1列×4行のブロック領域群を、ブロック領域列とも呼ぶ。すなわち、本実施例におけるキャッシュブロック記憶部122は、ブロック領域列が240列並列に並んだ構成を備えている。
キャッシュブロック用タグ情報記憶部123は、キャッシュブロック記憶部122を構成するブロック領域ごとに、キャッシュブロックが格納されているか否かの情報や、格納されているキャッシュブロックを特定するための情報等、ブロック領域を管理するための情報であるタグ情報を格納する。タグ情報の具体的な内容は図9を用いて後述する。
補間ブロック読み出し部124は、画素補間部125における画素補間に必要な4×4画素からなる補間ブロックを、キャッシュブロック記憶部122から読み出して、画素補間部125に供給する。補間ブロック読み出し部124がキャッシュブロック記憶部122から補間ブロックを読み出す位置については、図10を用いて後述する。
画素補間部125は、補間ブロック読み出し部124から供給される補間ブロックと、フィルター係数算出部130から供給されるフィルター係数に基づいて画素補間処理を実行し、補間画素の画素値を求める。画素補間部125が補間画素の画素値を算出する方法は、図1〜図3を用いて上述したとおりである。画素補間部125は、1つの補間ブロックと、フィルター係数から1つの補間画素の画素値を算出する。本実施例では、画素補間部125は、まず、補正後映像のx方向、y方向ともに最も上流側の画素(図2(b)左上)の画素値を算出し、その後、図2(b)の矢印の方向に従って、x方向の下流側の画素について画素値を順次算出する。x方向で最も下流側の画素の画素値を算出すると、y方向において一つ下流側の列について同様にx方向の最も上流側の画素から順に画素値を算出する。これを順次繰り返し、x方向、y方向ともに最も下流側の画素の画素値まで算出をおこなうことにより、補正後映像を表す補正後映像データを生成する。生成された補正後映像データは、FIFO部126を介して液晶パネル駆動部140(図4)に出力される。本実施例における補間ブロック読み出し部124、画素補間部125は、特許請求の範囲における「補正処理部」に該当する。
レジスター部127は、プロセッサー部170から供給されるパラメーターを格納する。具体的には、レジスター部127には、補正前映像の1フレームのフレーム幅、フレーム高さ、座標変換行列の変換係数A〜Hなどのパラメーターが格納される。変換係数A〜Hは、プロセッサー部170において、下記の射影変換の行列式(式1)を用いて算出される。具体的には、プロセッサー部170は、補正前座標(x0〜x3、y0〜y3)(図2参照)が射影変換により、補正後座標(X0〜X3、Y0〜Y3)(図2参照)に変換されたものとして、その補正後映像IG1の4つの座標(X0〜X3、Y0〜Y3)を、行列式(式1)に入力して、係数A〜Hを導出する。
本実施例では、補正後映像データの生成処理が開始される前に、台形歪み補正前にスクリーンSCに表示されている映像PIG0を、撮像部180で撮像する。プロセッサー部170(図4)は、撮像した映像に基づいて、台形歪み補正後の補正後映像IG1における4つの頂点の座標(X0〜X3、Y0〜Y3)(図2(b))を求めている。
なお、センサー部182によって、プロジェクター100の鉛直方向からの傾きを検出して、検出された角度に基づいて、補正後座標(X0〜X3、Y0〜Y3)を求めるようにしてもよい。また、ユーザがリモコンを操作して、手動で台形歪み補正を行うようにしてもよい。そのような場合には、プロセッサー部170は、リモコン制御部を介して受け取った、ユーザからの指示に基づいて、補正後座標(X0〜X3、Y0〜Y3)を求める。
制御部128は、台形歪み補正部120の全体の制御を行う。例えば、制御部128に入力される同期信号に従って、フレームの始まりを示すフレームスタート信号を座標変換部129に対して出力する。同期信号は、例えば、1秒間に60フレーム表示される場合には、1/60秒毎に入力される。
座標変換部129は、レジスター部127から供給される座標変換係数A〜Hと、以下の(式2)、(式3)を用いて、台形歪み補正を行った後の補正後映像IG1の座標値(補正後座標)を、補正前映像IG0(矩形の映像)の座標値(補正前座標)に変換する。補正前映像IG0と補正後映像IG1とは、整数倍の対応関係とはなっていないため、座標変換部129にて算出された補正前座標は、小数を含んでいる。座標変換部129は、補正前座標を、整数部と小数部に分けて、整数部をヒット判定部131および先読みリクエスト発行部132に供給し、小数部をフィルター係数算出部130に供給する。
ここで、上記した補正前座標の算出方法について説明する。補正後映像IG1は、補正前映像IG0を射影変換することにより得られた映像であると考えられるため、補正前座標は、補正後座標について、下記の(式2)、(式3)に基づいて、逆射影変換することによって算出される。補正前座標(x,y)が射影変換により補正後座標(X,Y)に変換されたものとする。
上記(式2)、(式3)中の係数A〜Hは、レジスター部127に記憶されている。
フィルター係数算出部130は、座標変換部129から供給される小数部に基づいて、画素補間処理を実行する際に用いられるフィルター係数を、フィルター係数テーブルより選択して、選択されたフィルター係数を画素補間部125に供給する。フィルター係数テーブルは、図3に示す補間画素と既知画素との距離とフィルター係数との関係を示すテーブルであり、予め算出された結果がフィルター係数算出部130の備えるメモリに格納されている。
ヒット判定部131は、座標変換部129から供給された補正前座標の整数部に基づいて、画素補間部125における画素補間に用いられる座標の画素値がキャッシュブロック記憶部122に格納されているか否かを判定する。以下、この判定を「ヒット判定」と称する。ヒット判定の結果、キャッシュブロック記憶部122に画素補間に必要な画素値が格納されていない場合には、キャッシュブロック制御部121に対して、必要なキャッシュブロックの読み出し要求を発行する。ヒット判定の結果、キャッシュブロック記憶部122に画素補間に必要な画素値が格納されている場合には、補間ブロック読み出し部124に対してキャッシュブロック記憶部122における読み出し位置を供給する。ヒット判定の処理の流れについては、図13〜図15を用いて後述する。なお、ヒット判定部は、特許請求の範囲における「判定部」に該当する。
先読みリクエスト発行部132は、座標変換部129に供給された補正前座標の整数部に基づいて、その後の画素補間処理に必要になるキャッシュブロックを予測する。先読みリクエスト発行部132は、予測したキャッシュブロックの読み出し要求をキャッシュブロック制御部121に対して発行することにより、予測したキャッシュブロックをキャッシュブロック記憶部122に格納させる。先読みリクエスト発行部132は、所定のキャッシュブロックから補間ブロック読み出し部124により補間ブロックの読み出しがおこなわれたときに、その後の画素補間処理に必要になるキャッシュブロックを予測する。先読みリクエスト発行部132による具体的な処理については、後述する。なお、上記したキャッシュブロックの予測を、「先読み判定」とも呼ぶ。先読みリクエスト発行部132は、特許請求の範囲における「ブロック映像予測部」に該当する。
台形歪み補正部120を構成する上記各構成部の動作の流れを簡単に説明する。図6は、台形歪み補正部120の動作の流れを模式的に示す工程図である。まず、台形歪み補正部120の座標変換部129(図5)は、フレームスタート信号が入力されるまでは待機し(ステップS102:NO)、フレームスタート信号が入力されると (ステップS102:YES)、補正後映像の座標(補正後座標)を座標変換して補正前座標を求める(ステップS104)。補正後座標を座標変換して補正前座標を算出する方法は上述したとおりである。
ヒット判定部131(図5)は、座標変換部129が算出した補正前座標の整数部に基づいて、補間ブロックの読み出し位置を補間ブロック読み出し部124に供給する。補間ブロック読み出し部124(図5)は、供給された読み出し位置に基づいて補間ブロックをキャッシュブロック記憶部122から読み出す(ステップS106)。一方、フィルター係数算出部130(図5)は、ステップS104で求められた補正前座標の小数部に基づいて、フィルター係数テーブルからフィルター係数を選択する。ステップS106の補間ブロック読み出し処理(「ブロックリード」とも呼ぶ)と、ステップS108のフィルター係数算出処理は同時に行われ、両処理が終了すると、次の処理(ステップS110)に進む。
画素補間部125(図5)は、補間ブロックとフィルター係数とを用いて、補正後座標の画素値を算出する(ステップS110)。具体的には、画素補間部125は、補間ブロック読み出し部124から供給された補間ブロックと、フィルター係数算出部130から供給されたフィルター係数とを用いて、畳み込み演算により補正後座標の画素値を算出する。
台形歪み補正部120は、上記のステップS104〜ステップS110を、補正後座標(X,Y)=(0,0)〜(フレーム幅−1,フレーム高さ−1)まで繰り返して行うことにより、補正後映像データを生成する。本実施例では、フレーム幅1920、フレーム高さ1200であるため、補正後座標(X,Y)=(0,0)〜(1919,1199)まで、ステップS104〜ステップS110を繰り返す。なお、フレーム幅、フレーム高さが本実施例と異なる場合には、ステップS104〜ステップS110を、補正後座標(X,Y)=(0,0)〜(フレーム幅−1,フレーム高さ−1)まで繰り返して行うことにより、補正後映像データを生成することができる。
図7は、台形歪み補正部120が補正後映像の1画素の画素値を算出するときの各処理のタイミングを示す説明図である。座標変換部129は、制御部128から出力されたフレームスタート信号を受信すると、座標変換処理を開始する。この座標変換処理が終了して補正前座標が算出されると、フィルター係数算出部130は、フィルター係数の算出処理を開始し、ヒット判定部131は、ヒット判定のためのタグ情報の読み出し処理を開始する。
ヒット判定部131は、タグ情報を読み出してヒット判定をおこなった結果、補間ブロック読み出し部124により読み出されるべき領域を含むキャッシュブロックがキャッシュブロック記憶部122に格納されていないと判定した場合には、補間ブロック読み出し部124により読み出されるべき領域を含むキャッシュブロックがキャッシュブロック記憶部122に格納されるのを待つ(以下、「ブロックライト待ち」とも呼ぶ)。
一方、上記のフィルター係数算出処理、および、タグ情報の読み出し処理と同時に、先読みリクエスト発行部132は、キャッシュブロックの先読みの要否を判定し、必要であれば、キャッシュブロックの先読みの要求(以下、「先読みリクエスト」とも呼ぶ)を発行する。キャッシュブロック制御部121は、ヒット判定部131または先読みリクエスト発行部132からキャッシュブロックの読み出し要求が発行されたら、フレームバッファー150の要求された位置からキャッシュブロックを読み出して、キャッシュブロック記憶部122に格納する。補間ブロック読み出し部124により読み出されるべき領域を含むキャッシュブロックがキャッシュブロック記憶部122に格納されると、ヒット判定部131は、補間ブロック読み出し部124により読み出されるべき領域を含むキャッシュブロックがキャッシュブロック記憶部122に格納されていると判定し、補間ブロック読み出し部124は、新たに格納されたキャッシュブロックから補間ブロックを読み出す。
フィルター係数の算出や、補間ブロックの読み出しが終了すると、画素補間部125は、画素補間を開始する。なお、図7において、実線の枠は処理時間が固定、破線の枠は処理時間が可変であることを表す。また、枠の長さは処理の長さを表すものではない。本実施例では、先読みリクエストを行うことにより、ヒット判定部におけるブロックライト待ちの時間を短くしている。
A−4.先読み判定:
先読みリクエスト発行部132における先読み判定についての説明に先立って、本実施例におけるフレームバッファー150、キャッシュブロック記憶部122およびキャッシュブロック用タグ情報記憶部123の関係と、キャッシュブロックと補間ブロックとの関係について詳細に説明する。
図8は、フレームバッファー150とキャッシュブロック記憶部122との関係を模式的に示す図である。図8では、フレームバッファー150に格納されている1フレーム分の補正前映像データを、8×8画素からなるキャッシュブロック単位に分割した状態を示している。本実施例において、フレームバッファー150に格納されている補正前映像データは、1920×1200画素によって構成されており、このような補正前映像データが240×150個のキャッシュブロックに分割されている。図8に示すフレームバッファー150に格納された補正前映像データにおける各キャッシュブロックの位置は、それぞれ、補正前映像データにより表される補正前映像における各キャッシュブロックにより表される映像(領域)の位置と対応している。図8において各キャッシュブロック内に記載されている文字列(x,y)は、そのキャッシュブロックのx方向およびy方向の位置(列番号,行番号)を示している。本実施例では、列が並んでいる方向をx方向、行が並んでいる方向をy方向としている。本実施例におけるy方向は、特許請求の範囲における「第1の方向」に該当し、x方向は、特許請求の範囲における「第1の方向と直交する方向」に該当する。また、x方向、y方向いずれにおいても、文字列(x,y)の番号の小さいキャッシュブロックの側を上流側と呼び、文字列(x,y)の番号の大きい側を下流側と呼ぶ。
キャッシュブロック記憶部122は、1つのキャッシュブロックを格納できるブロック領域を、240列×4行個備える。図8では、各ブロック領域を識別するために、(列(0〜239),行(0〜3))の番号を付している。すなわち、キャッシュブロック記憶部122は、y方向に沿った方向に並ぶ4つのブロック領域(行0〜3)からなるブロック領域列がx方向に沿った方向に240列(列0〜239)並んだ構成を備えている。キャッシュブロック記憶部122には、フレームバッファー150に格納されている1フレーム分の補正前映像データの一部のデータ(キャッシュブロック)が、240×4個格納できる。
本実施例では、台形歪み補正処理が開始される際に、まず、フレームバッファー150から(0,0)〜(239,3)のキャッシュブロックが読み出され、キャッシュブロック記憶部122に格納される。キャッシュブロックは、キャッシュブロック記憶部122において、各キャッシュブロックの列番号と同一の列番号のブロック領域に格納される。したがって、台形歪み補正処理が開始される際には、まず、キャッシュブロック記憶部122の各ブロック領域には、ブロック領域の列番号、行番号と同一の列番号、行番号を有するキャッシュブロックが格納される(図8)。キャッシュブロック記憶部122の幅は、フレームバッファー150の幅と同じである。キャッシュブロック記憶部122の高さは、4キャッシュブロック分であり、1フレームの32ライン(4キャッシュブロック×8px)分の画素データが格納される。キャッシュブロック記憶部122において、キャッシュブロックがフレームバッファー150の列番号の順に、すなわち、x方向の上流側から下流側に順次格納されているため、後述するx方向のヒット判定検索を高速に行うことができる。
キャッシュブロック用タグ情報記憶部123は、キャッシュブロック記憶部122をブロック領域単位で管理する際の管理情報であるタグ情報を格納する。図9は、キャッシュブロック記憶部122とキャッシュブロック用タグ情報記憶部123との関係を概念的に示す図である。図示するように、キャッシュブロック用タグ情報記憶部123には、キャッシュブロック記憶部122の240×4個のブロック領域に対応させて240×4個のタグ情報が格納されている。
具体的には、タグ情報として、(1)フレームバッファー150からキャッシュブロック記憶部122への書き込み待ちか否かを示す情報(書き込み待ちの場合WRITING=1)、(2)ブロック領域のデータが有効か無効かを示す情報(有効の場合VALID=1、無効の場合VALID=0)、及び(3)ブロック領域に格納されているキャッシュブロックがフレームバッファー150のどの位置のブロックかを示す座標Y_ADRが格納されている。(3)の座標Y_ADRは、キャッシュブロックの左上端の画素のフレームバッファー150におけるy座標を1/8にした情報を保持する。本実施例では、図8に示す行番号を座標Y_ADRとする。(2)において、有効とは、キャッシュブロックがキャッシュブロック記憶部122に格納されていること、無効とはキャッシュブロックがキャッシュブロック記憶部122に格納されていないことを示す。本実施例において、台形歪み補正処理開始の際に、(0,0)〜(239,3)のキャッシュブロックがキャッシュブロック記憶部122に格納される前は、すべのタグ情報において、「無効(VALID=0)」となっている。
図10は、キャッシュブロックと補間ブロックとの関係を示す図である。図10において、補間ブロックを斜線ハッチングで示している。本実施例において、キャッシュブロックは8×8画素からなり、補間ブロックは4×4画素からなるため、補間ブロックは、キャッシュブロックの一部となる。
後述するように、キャッシュブロック記憶部122に格納されるキャッシュブロックは、台形歪み補正処理の進行にしたがって、ブロック領域列ごとに順次更新される。したがって、台形歪み補正処理の途中では、キャッシュブロック記憶部122に格納されているキャッシュブロックと対応するフレームバッファー150のキャッシュブロックは、例えば、図10に示すように階段状となる。
図11は、先読みリクエスト発行部132における先読み判定を説明するための説明図である。図11において、補正前映像データのキャッシュブロック(u,v),キャッシュブロック(u,v+1),キャッシュブロック(u,v+2),キャッシュブロック(u,v+3)が、キャッシュブロック記憶部122のブロック領域(u,0),ブロック領域(u,1),ブロック領域(u,2),ブロック領域(u,3)に格納されているものとする。
先読みリクエストの条件は、先読みリクエスト発行部132に入力された補正前座標の整数部Int(x、y)が、キャッシュブロック記憶部122の各ブロック領域列に格納されているキャッシュブロックのうち、行番号が一番大きいキャッシュブロックに入ったことである。先読みリクエストが発行されると、キャッシュブロック制御部121により、各ブロック領域列において行番号が一番大きいキャッシュブロックより1つ行番号が大きいキャッシュブロックがフレームバッファー150から読み出され、キャッシュブロック記憶部122に格納されているキャッシュブロックのうち、行番号が一番小さいキャッシュブロックが格納されているブロック領域に上書きされる。
図11を用いて先読み判定の具体例を示す。先読みリクエスト発行部132は、入力された補正前座標の整数部Int(x、y)が、ブロック領域列に格納されている複数のキャッシュブロックのうち、行番号が一番大きいキャッシュブロック(u,v+3)に含まれるか否かを判断する。先読みリクエスト発行部132は、整数部Int(x、y)が、キャッシュブロック(u,v+3)に含まれる場合には、行番号が一番大きいキャッシュブロック(u,v+3)の次のキャッシュブロック(u,v+4)をフレームバッファー150から読み出すための読み出し要求をキャッシュブロック制御部121に対して発行する。読み出し要求には、先読みをするブロックのフレームバッファー150における座標、すなわちキャッシュブロックの行番号と列番号、および、キャッシュブロックを保存するキャッシュブロック記憶部122の座標位置、すなわちブロック領域の行番号と列番号などが含まれている。キャッシュブロック制御部121は、読み出し要求を受けると、ブロック領域列に格納されているキャッシュブロックのうち行番号が一番小さいキャッシュブロック(u,v)が格納されているブロック領域(u,0)に、先読みしたキャッシュブロック(u,v+4)を上書きする。
本実施例では、先読みリクエスト発行部132は、ブロック領域列に格納されているキャッシュブロックのうち、フレームバッファー150のy方向において最も下流側の領域を表すキャッシュブロック(u,v+3)と補正前映像において下流側で隣接する領域を表すキャッシュブロック、すなわちキャッシュブロック(u,v+4)を、補間ブロック読み出し部124が後に補間ブロック映像データを取得するキャッシュブロックとして予測している。
なお、先読みリクエスト発行部132は、読み出し要求の発行とともに、指定したブロック領域に対応するタグ情報の更新をおこなう。具体的には、WRITING=1とし、Y_ADRを先読みするキャッシュブロックの座標(行番号)に設定する。また、先読みリクエスト発行部132は、先読みリクエストにより指定したブロック領域に指定したキャッシュブロックが格納されると、キャッシュブロック用タグ情報記憶部123の該当するタグ情報を、VALID=1、WRITING=0に更新する。
図12は、キャッシュブロック記憶部122に格納されているキャッシュブロックが更新される順序を説明するための説明図である。図12では、キャッシュブロック記憶部122における第2列目のブロック領域列に格納されているキャッシュブロックを例示している。また図12では、ブロック領域列に格納されている各キャッシュブロックを、各キャッシュブロックの左上端の画素の補正前映像における座標を用いて識別する。例えば、左上端の画素の補正前映像における座標が(16,0)のキャッシュブロックは、キャッシュブロック(16,0)と示している。
図12(a)は、台形歪み補正処理開始時におけるブロック領域列の各ブロック領域に格納されているキャッシュブロックを例示している。ここでは、ブロック領域(2,0)にはキャッシュブロック(16,0)が格納され、ブロック領域(2,1)にはキャッシュブロック(16,8)が格納され、ブロック領域(2,2)にはキャッシュブロック(16,16)が格納され、ブロック領域(2,3)にはキャッシュブロック(16,24)が格納されている。先読みリクエスト発行部132に入力された補正前座標の整数部Int(x、y)が、キャッシュブロック(16,24)に入ったとき、すなわち、入力されたy座標の整数部が24〜31だった場合には、先読みリクエストが発行されてキャッシュブロック(16,32)がフレームバッファー150から読み出される。そして、キャッシュブロック記憶部122の第2列目のブロック領域列に格納されているキャッシュブロックのうち、y座標が一番小さいキャッシュブロック(16,0)が格納されているブロック領域(2,0)に、読み出されたキャッシュブロック(16,32)が上書きされる(図12(a),(b))。
その後、先読みリクエスト発行部132に入力された補正前座標の整数部Int(x、y)が、キャッシュブロック(16,32)に入ったとき、すなわち、入力されたy座標の整数部が32〜39だった場合には、次の先読みリクエストが発行されてキャッシュブロック(16,40)がフレームバッファー150から読み出される。そして、キャッシュブロック記憶部122の第2列目のブロック領域列に格納されているキャッシュブロックのうち、y座標が一番小さいキャッシュブロック(16,8)が格納されているブロック領域(2,1)に、読み出されたキャッシュブロック(16,40)が上書きされる(図12(b),(c))。
A−5.ヒット判定:
図13は、タグ情報を用いたヒット判定の例を示す説明図である。図13では、図12に示したキャッシュブロック記憶部122に格納されているキャッシュブロックに対応するタグ情報が例示されている。すなわち、キャッシュブロック用タグ情報記憶部123の2列0行には、キャッシュブロック記憶部122におけるブロック領域(2,0)に関するタグ情報が格納されている。画素補間に用いる16画素を、(x[0],y[0]),(x[1],y[1]),(x[2],y[2]),・・・,(x[15],y[15])とした場合に、ヒット判定は、(x[0],y[0])から順に、1画素ずつ行う。例えば、(x[0],y[0])=(16,40)である場合のヒット判定について、図13に基づいて説明する。
(x[0],y[0])=(16,40)が含まれるキャッシュブロックがキャッシュブロック記憶部122に格納されているか否か判定する場合、まず、ヒット判定部131は、キャッシュブロック用タグ情報記憶部123から該当する列のタグを抽出する。1つのキャッシュブロックは、8×8画素から成るため、画素補間に用いる画素のx座標を8で割ることにより、該当する列がわかる。(x[0],y[0])=(16,40)は第2列に該当するため、第2列のタグを抽出する。
図13において、抽出されたタグの情報が、紙面右側に記載されている。ヒット判定部131は、タグの行番号が小さい順にヒット判定を行う。以下、タグ情報を、TAG[行番号]で表す。TAG[0]は、WRITING=0,VALID=1,Y_ADR=4である。WRITING=0は、先読み中でないということ,VALID=1はデータが有効であるということをそれぞれ表している。また、Y_ADR=4を補正前映像のy座標に変換すると、4×8=32である。すなわち、TAG[0]によれば、補正前映像のy座標=32のブロックがキャッシュブロック記憶部122に存在することがわかる。
TAG[1]は、WRITING=1,VALID=0,Y_ADR=5である。WRITING=1は、先読み中であるということ,VALID=0はデータが無効であるということをそれぞれ表している。また、Y_ADR=5を補正前映像のy座標に変換すると、5×8=40である。すなわち、TAG[1]によれば、補正前映像のy座標=40のブロックが先読み中であり、しばらく待てば読み出し可能であることがわかる。
TAG[2]は、WRITING=0,VALID=1,Y_ADR=2である。WRITING=0は、先読み中でないということ,VALID=1はデータが有効であるということをそれぞれ表している。また、Y_ADR=2を補正前映像のy座標に変換すると、2×8=16である。すなわち、TAG[2]によれば、補正前映像のy座標=16のブロックがキャッシュブロック記憶部122に存在することがわかる。
TAG[3]は、WRITING=0,VALID=1,Y_ADR=3である。WRITING=0は、先読み中でないということ,VALID=1はデータが有効であるということをそれぞれ表している。また、Y_ADR=3を補正前映像のy座標に変換すると、3×8=24である。すなわち、TAG[3]によれば、補正前映像のy座標=24のブロックがキャッシュブロック記憶部122に存在することがわかる。
すなわち、(x[0],y[0])=(16,40)が含まれるキャッシュブロックがキャッシュブロック記憶部122に格納されているか否か判定した結果、(x[0],y[0])=(16,40)が含まれるキャッシュブロックは先読み中であり、しばらく待てば、読み出し可能であると判定される。
図14、図15は、ヒット判定部131(図5)におけるヒット判定処理の工程を模式的に示す工程図である。座標変換部129からヒット判定部131に対して補正前座標の整数部Int(x,y)が入力されると、ヒット判定部131におけるヒット判定処理が開始される。ヒット判定部131は、座標変換部129から入力された補正前座標の整数部Int(x,y)に基づいて、その周辺16画素の座標(x[0],y[0]),(x[1],y[1]),(x[2],y[2]),・・・,(x[15],y[15])を算出する(ステップS202)。この後の処理は、座標(x[0],y[0]),(x[1],y[1]),(x[2],y[2]),・・・,(x[15],y[15])について、並列に行う。
ヒット判定部131は、周辺16画素の座標の算出が終了すると、タグ情報(TAG[0],[1],[2],[3])をキャッシュブロック用タグ情報記憶部123から読み出し(ステップS204)、TAG[0]のY_ADR(すなわち、キャッシュブロックの行番号)が、y[0]/キャッシュブロックの高さ(8px)と同一か否かを判断する(ステップS206)。同一であった場合(ステップS206においてYES)、ヒット判定部131はTAG[0]のWRITING=1か否かを判断する(ステップS208)。一方、同一でない場合は(ステップS206においてNO)、ステップS216に進む。
ステップS208においてWRITING=1であった場合、ステップS204に戻り、WRITING=0であった場合は、ヒット判定部131はTAG[0]のVALID=1か否かを判断する(ステップS210)。VALID=1であった場合、ヒット判定部131は、ヒットしたタグに該当するキャッシュブロックの座標(列,行)を算出する(ステップS212)。一方、VALID=0であった場合は、ヒット判定部131は、キャッシュブロック(x[0]/キャッシュブロックの幅(8px),y[0]/キャッシュブロックの高さ(8px))の読み出し要求を、キャッシュブロック制御部121へ出力する(ステップS214)。
ステップS216,S226,S236では、それぞれ、TAG[1],TAG[2],TAG[3]についてステップS206と同様の処理を行う。ステップS218,S228,S238では、それぞれ、TAG[1],TAG[2],TAG[3]についてステップS208と同様の処理を行う。ステップS220,S230,S240では、それぞれ、TAG[1],TAG[2],TAG[3]についてステップS210と同様の処理を行う。
すなわち、タグ情報に含まれるキャッシュブロックの行番号が、y[0]/8と同一でなければ、次のタグ情報について同様の処理を行うというように、第0行のタグ情報から、第1行、第2行、第3行と順にタグ情報を判定していく。ステップS208,S218,S228,S238において、WRITING=1ということは、当該タグ情報に対応するブロック領域にキャッシュブロックが書き込み中であるということであるため、書き込みが終了するまで、すなわちWRITING=0になるまで、タグ情報の読み出しと判定を繰り返す。ステップS210,S220,S230,S240においてVALID=1である場合には、目的の座標の画素値が含まれるキャッシュブロックがキャッシュブロック記憶部122に存在する(ヒットした)といえるため、ヒットしたタグに該当するキャッシュブロックの座標(列,行)を算出する。
A−6.キャッシュブロック制御部:
キャッシュブロック制御部121は、上述したように、ヒット判定部131または先読みリクエスト発行部132により発行された読み出し要求において指定されたキャッシュブロックをフレームバッファー150から取得する。図16は、キャッシュブロック制御部121の構成を示す機能ブロック図である。キャッシュブロック制御部121は、読み出し要求バッファ134と、バッファ管理タグ部135と、バッファ状態判別部136と、バッファ読み出し制御部137と、キャッシュブロック取得部138と、を備えている。
読み出し要求バッファ134は、先読みリクエスト発行部132またはヒット判定部131から発行された読み出し要求を記憶するための記憶領域を備えている。バッファ管理タグ部135は、読み出し要求バッファ134の記憶領域に記憶された読み出し要求を管理するための管理情報が格納されている。管理情報とは、例えば、読み出し要求バッファ134の記憶領域に記憶された読み出し要求のアドレス情報や、読み出し要求が読み出し要求バッファ134の記憶領域に記憶された順番を表す順番情報や、バッファ読み出し制御部137により読み出された要求か否かを示す情報等が含まれる。読み出し要求バッファ134は、特許請求の範囲における「バッファ部」に該当する。
バッファ状態判別部136は、先読みリクエスト発行部132またはヒット判定部131により発行された読み出し要求を受信して読み出し要求バッファ134に格納する。バッファ状態判別部136は、発行された順に読み出し要求を読み出し要求バッファ134に格納する。バッファ状態判別部136は、バッファ管理タグ部の管理情報を参照してバッファ読み出し制御部137によりまだ読み出しがおこなわれていない読み出し要求が記憶されている領域以外の領域に受信した読み出し要求を記憶させる。バッファ状態判別部136は、受信した読み出し要求を読み出し要求バッファ134に格納するとバッファ管理タグ部135の管理情報を更新する。
バッファ読み出し制御部137は、所定の期間(時間)を計時可能な図示しないWaitカウンターを備え、所定の期間に読み出し要求バッファ134に格納された読み出し要求に対してキャッシュブロック取得部138により読み出される順番(以後、単に「読み出し順番」とも呼ぶ)の並び替えをおこなう。バッファ読み出し制御部137は、バッファ管理タグ部135を参照して読み出し要求バッファ134から読み出し要求を読み出し、読み出し順番の並び替えをおこなった読み出し要求を読み出し要求バッファ134に格納する。本実施例では、読み出し順番の並び替えをおこなった読み出し要求は、読み出し要求バッファ134において、並び替えをおこなう前の読み出し要求が記憶されている領域以外の領域に記憶される。バッファ読み出し制御部137による読み出し順番の並び替えの具体的な方法については図17を用いて後述する。バッファ読み出し制御部137は、読み出し順番の並び替えをおこなうとバッファ管理タグ部135の管理情報を更新する。バッファ読み出し制御部137は、特許請求の範囲における「並び替え部」に該当する。
キャッシュブロック取得部138は、バッファ読み出し制御部137により並び替えられた順番に従って読み出し要求バッファ134から読み出し要求を読み出す。キャッシュブロック取得部138は、読み出した読み出し要求において指定されたキャッシュブロックをフレームバッファー150から読み出し、キャッシュブロック記憶部122のブロック領域に格納する。キャッシュブロック取得部138は、読み出し要求に含まれているキャッシュブロックを読み出す位置を示す位置情報からフレームバッファー150においてキャッシュブロックを構成する各画素の画素値がそれぞれ格納されている領域の位置を示すアドレスを生成し、生成したアドレスから各画素値の画素値を読み出すことによりキャッシュブロックの読み出しをおこなう。キャッシュブロック取得部138は、特許請求の範囲における「取得部」に該当する。
図17は、バッファ読み出し制御部137による読み出し要求の並べ替えを説明するための説明図である。図17には、所定の期間に読み出し要求バッファ134に格納された読み出し要求が示されている。言い換えると、所定の期間に先読みリクエスト発行部132またはヒット判定部131により発行された読み出し要求が発行された順に示されている。各読み出し要求は、読み出し要求バッファ134を構成する記憶領域の各アドレスに、読み出し要求バッファ134に格納された順番に並べて格納されている。図17の各読み出し要求に記載されている「Column」および「Row」は、フレームバッファー150に格納されている1フレーム分の補正前映像データを構成する各キャッシュブロックから、読み出しを要求するキャッシュブロックを特定するための位置情報であり、読み出しを要求するキャッシュブロックのColumnアドレスおよびRowアドレスを表している。例えば、「Column:2 Row:0」の位置情報を含む読み出し要求は、図8に示すフレームバッファー150において、Column方向(x方向)の座標位置が「2」、Row方向(y方向)の座標位置が「0」のキャッシュブロック、すなわち、キャッシュブロック(2,0)をフレームバッファー150から読み出してキャッシュブロック記憶部122のブロック領域に格納するための要求である。なお、ColumnアドレスおよびRowアドレスとして、例えば、図12に示すように、フレームバッファー150において各キャッシュブロックの左上端の画素の画素値が格納されている記憶領域のアドレスを用いてもよい。各読み出し要求の右側に記載されている1〜8の番号は、各読み出し要求が読み出し要求バッファ134に格納された順番を示している。
バッファ読み出し制御部137は、図17(a)に示すように、まず、読み出し要求バッファ134に格納された読み出し要求のうち、格納された時期が最も古い読み出し要求、すなわち、所定の期間において最初に発行された読み出し要求の読み出しをおこなう。本実施例では、読み出し要求バッファ134に格納された時期が最も古い読み出し要求は、1番目の読み出し要求「Column:0 Row:0」であるため、バッファ読み出し制御部137は、読み出し要求「Column:0 Row:0」を読み出す。読み出された読み出し要求は、読み出し要求バッファ134の異なる記憶領域に記憶される。
その後、バッファ読み出し制御部137は、1番目の読み出し要求とRowアドレスが同じであり、かつ、Columnアドレスが連続する読み出し要求を読み出し要求バッファ134に格納されている読み出し要求から検索する。本実施例では、バッファ読み出し制御部137は、1番目の読み出し要求「Column:0 Row:0」とRow方向(y方向)の座標位置が等しく、かつ、Column方向(x方向)の座標位置が順次連続する読み出し要求を読み出し要求バッファ134に格納されている読み出し要求から検索する。読み出し要求バッファ134に格納されている読み出し要求のうち、4番目の読み出し要求「Column:1 Row:0」は、1番目の読み出し要求「Column:0 Row:0」とRow方向(y方向)の座標位置がともに「0」で等しく、かつ、1番目の読み出し要求「Column:0 Row:0」とColumn方向(x方向)の座標位置が「0」と「1」で連続する。また、8番目の読み出し要求「Column:2 Row:0」は、1番目の読み出し要求「Column:0 Row:0」とRow方向(y方向)の座標位置がともに「0」で等しく、かつ、4番目の読み出し要求「Column:1 Row:0」とColumn方向(x方向)の座標位置が「1」と「2」で連続する。そのため、図17(b)に示すように、バッファ読み出し制御部137は、読み出し要求バッファ134から4番目の読み出し要求「Column:1 Row:0」を読み出した後、続いて8番目の読み出し要求「Column:2 Row:0」を読み出す。読み出された読み出し要求は、1番目の読み出し要求に続いて順に読み出されるように読み出し要求バッファ134の異なる記憶領域に記憶される。本実施例におけるRow方向は、特許請求の範囲における「第1の方向」に該当する。
その後、バッファ読み出し制御部137は、1番目の読み出し要求とRowアドレスが同じ読み出し要求を読み出し要求バッファ134に格納されている読み出し要求から検索する。すなわち、ここでは上記と異なり、Columnアドレスが連続しない読み出し要求を含めて検索をおこなう。本実施例では、バッファ読み出し制御部137は、「Row:0」の読み出し要求を読み出し要求バッファ134に格納されている読み出し要求から検索する。読み出し要求バッファ134に格納されている読み出し要求のうち、6番目の読み出し要求「Column:4 Row:0」は、「Row:0」であり、1番目の読み出し要求とRow方向の座標位置が等しい。よって、図17(c)に示すように、バッファ読み出し制御部137は、読み出し要求バッファ134から6番目の読み出し要求「Column:4 Row:0」を読み出す。読み出された読み出し要求は、8番目の読み出し要求に続いて読み出されるように読み出し要求バッファ134の異なる記憶領域に記憶される。6番目の読み出し要求「Column:4 Row:0」が読み出されると、読み出し要求バッファ134に格納されている読み出し要求のうち、位置情報に「Row:0」を含む読み出し要求はすべてバッファ読み出し制御部137により読み出されたことになる。
バッファ読み出し制御部137は、位置情報に「Row:0」を含む読み出し要求をすべて読み出した後、読み出し要求バッファ134に格納されている、位置情報に「Row:0」を含まない読み出し要求のうち、格納された時期が最も古い読み出し要求の読み出しをおこなう。本実施例では、2番目の読み出し要求「Column:0 Row:1」が該当するため、バッファ読み出し制御部137は、読み出し要求「Column:0 Row:1」を読み出す。その後、上記で説明した位置情報に「Row:0」を含む読み出し要求についての読み出し順序と同様に、バッファ読み出し制御部137は、2番目の読み出し要求と同様に位置情報に「Row:1」を含む読み出し要求について読み出しをおこなう。バッファ読み出し制御部137は、上記を繰り返して、図17(d)に示すように、所定の期間に読み出し要求バッファ134に格納されたすべての読み出し要求に対して読み出しをおこない、読み出し要求の読み出される順番を並び替えて読み出し要求バッファ134に格納する。キャッシュブロック取得部138は、バッファ読み出し制御部137により並び替えられた順番に従って、読み出し要求を読み出す。すなわち、図17(d)の左側に示された読み出し要求について、各読み出し要求の左側に記載されている番号順に従って、各読み出し要求の格納された時期の古い方から順に読み出しをおこなう。
図18は、キャッシュブロック取得部138によるキャッシュブロックの読み出しの順序を説明するための説明図である。図18には、図8と同様にフレームバッファー150に格納されている1フレーム分の補正前映像データをキャッシュブロック単位に分割した状態が示されている。各キャッシュブロックの内側に示されている番号は、キャッシュブロック取得部138により読み出される順番を示している。図18(a)には、比較例として、図17(a)に示されている読み出し順番、すなわち、バッファ読み出し制御部137により読み出し要求が並び替えられる前の読み出し順番と対応した番号が各キャッシュブロックに付されている。一方、図18(b)には、図17(d)の読み出し要求の左側に示されている読み出し順番、すなわち、バッファ読み出し制御部137により読み出し要求の並び替えがおこなわれた後の読み出し順番と対応した番号が各キャッシュブロックに付されている。
比較例である図18(a)に示すように、バッファ読み出し制御部137により読み出し要求が並び替えられる前の読み出し順番、すなわち、先読みリクエスト発行部132またはヒット判定部131から読み出し要求が発行された順番に従ってフレームバッファー150からキャッシュブロックを読み出す場合、キャッシュブロック取得部138は、Row方向が等しいキャッシュブロックを非連続的に取得する。例えば、キャッシュブロック取得部138は、Row方向が「0」のキャッシュブロック(0,0)、(1,0)、(2,0)、(4,0)に対して、1番目、4番目、6番目、8番目と連続しない順番により取得をおこなっている。
一方、図18(b)に示すように、バッファ読み出し制御部137により読み出し要求の並び替えがおこなわれた後の読み出し順番に従ってフレームバッファー150からキャッシュブロックを読み出す場合、キャッシュブロック取得部138は、Row方向が等しいキャッシュブロックを連続的に取得する。例えば、キャッシュブロック取得部138は、Row方向が「0」のキャッシュブロック(0,0)、(1,0)、(2,0)、(4,0)に対して、1番目、2番目、3番目、4番目と連続する順番により取得をおこなっている。また、キャッシュブロック取得部138は、Row方向が「1」のキャッシュブロック(0,1)、(1,1)や、Row方向が「2」のキャッシュブロック(0,2)、(1,2)に対しても同様に、5番目、6番目と連続する順番や、7番目、8番目と連続する順番によりそれぞれ取得をおこなっている。
キャッシュブロック取得部138は、取得する順番が連続するキャッシュブロックのRow方向の座標位置が同じではない場合には、キャッシュブロックを構成する各画素の画素値を取得するために指定するアドレスについて、キャッシュブロックごとに画素値の読み出しをおこなうようにアドレスを生成する。すなわち、Row方向の座標位置が異なるキャッシュブロックを連続して取得する場合には、まず、1つのキャッシュブロックを構成する8×8の各画素のうち、Row方向(y方向)において最も上流側の一行を構成する8つの画素の画素値を取得するためのアドレスを生成する。その後Row方向(y方向)において一段下流側の一列を構成する8つの画素の画素値を取得するためのアドレスを生成する。Row方向(y方向)の3〜8段目についても同様にアドレスを生成する。その後に、2つ目のキャッシュブロックを構成する8×8の各画素のうち、Row方向(y方向)において最も上流側の一行を構成する8つの画素の画素値を取得するためのアドレスを生成する。上記順序により生成されたアドレスを用いた画素値の読み出し順序について図19(a)を用いて後述する。
一方、キャッシュブロック取得部138は、取得する順番が連続するキャッシュブロックのRow方向の座標位置が同じである場合には、キャッシュブロックを構成する各画素の画素値を取得するために指定するアドレスについて、キャッシュブロックを跨ぎRow方向ごとに画素値の読み出しをおこなうようにアドレスを生成する。すなわち、Row方向の座標位置が等しいキャッシュブロックを連続して取得する場合には、各キャッシュブロックを構成する8×8の各画素のうち、Row方向(y方向)において最も上流側の一行を構成する8つの画素の画素値を取得するためのそれぞれのアドレスを連続して生成する。その後Row方向(y方向)において一段下流側の一列を構成する8つの画素の画素値を取得するためのそれぞれのアドレスを連続して生成する。Row方向(y方向)の3〜8段目についても同様にそれぞれのアドレスを連続して生成する。上記順序により生成されたアドレスを用いた画素値の読み出し順序について図19(b)を用いて後述する。
図19は、キャッシュブロック取得部138によるキャッシュブロックを構成する各画素の画素値の読み出し順序を説明するための説明図である。図19(a)は、比較例である図18(a)と対応し、図19(b)は、図18(b)と対応している。図19(a)(b)には、各キャッシュブロックにおいて、キャッシュブロックを構成する各画素の画素値を読み出す方向が矢印で示されている。キャッシュブロック取得部138は、読み出し順番が連続するキャッシュブロックのRow方向(y方向)の座標位置が異なる場合には、各キャッシュブロックにおいて、キャッシュブロックを構成する8×8の各画素のうち、Row方向(y方向)において最も上流側の一行を構成する8つの画素の画素値についてColumn方向に沿って読み出し、一行分の読み出しが完了すると、折り返してRow方向(y方向)において一段下流側の一列を構成する8つの画素の画素値を読み出す。折り返しを繰り返してRow方向(y方向)の3〜8段目についても同様におこなうことにより、1つのキャッシュブロックの読み出しが完了する。
キャッシュブロック取得部138は、Row方向(y方向)が同じキャッシュブロックで読み出し順番が連続する複数のキャッシュブロックについては、キャッシュブロックごとに折り返して読み出しをおこなうのではなく、Row方向(y方向)の位置が等しい画素について各キャッシュブロックを跨いで連続的に画素値の読み出しをおこなう。そして、Column方向(x方向)において最も下流側のキャッシュブロックにおける一行分の画素値の読み出しが完了すると、折り返してColumn方向(x方向)において最も上流側のキャッシュブロックのRow方向(y方向)で一段下流側の一行を構成する画素の画素値を読み出す。これを繰り返してRow方向(y方向)の3〜8段目についても同様におこなうことにより、Row方向(y方向)が同じ複数のキャッシュブロックの読み出しが完了する。
比較例である図18(a)では、上記で説明したとおり、Row方向が等しいキャッシュブロックの読み出し順番が連続していない。そのため、図19(a)で示すように、キャッシュブロック取得部138は、キャッシュブロックごとに読み出す行を折り返しながら画素値の読み出しをおこなう。例えば、キャッシュブロック取得部138は、キャッシュブロック(0,0)のRow方向(y方向)で最も上流側の一行を構成する各画素から読み出しをおこなった後、連続してキャッシュブロック(1,0)のRow方向(y方向)で最も上流側の一行を構成する各画素から読み出しをおこなうのではなく、折り返してキャッシュブロック(0,0)のRow方向(y方向)2段目の一行を構成する各画素から読み出しをおこなう。キャッシュブロック取得部138は、キャッシュブロック(1,0)のRow方向(y方向)で最も上流側の一行を構成する各画素からの読み出しを、キャッシュブロック(0,2)のRow方向(y方向)で最も下流側の一行を構成する各画素からの読み出しの後におこなう。
一方、図18(b)では、上述したとおり、Row方向が等しいキャッシュブロックの読み出し順番が連続している。そのため、図19(b)で示すように、キャッシュブロック取得部138は、Row方向(y方向)の位置が等しい画素について各キャッシュブロックを跨いで連続的に画素値の読み出しをおこなう。例えば、キャッシュブロック取得部138は、Row方向が「0」の各キャッシュブロック(0,0)、(1,0)、(2,0)、(4,0)におけるRow方向(y方向)で最も上流側の一列を構成する各画素について、まず、キャッシュブロック(0,0)の最も上流側の一列を構成する各画素から読み出しをおこなった後、連続してキャッシュブロック(1,0)の最も上流側の一列を構成する各画素から読み出しをおこなう。その後、キャッシュブロック取得部138は、連続してキャッシュブロック(2,0)、および、キャッシュブロック(4,0)の最も上流側の一列から同様に読み出しをおこなう。キャッシュブロック取得部138は、キャッシュブロック(4,0)の最も上流側の一列からの読み出しの後、折り返してキャッシュブロック(0,0)の2番目に上流側の一列を構成する各画素から読み出しをおこなう。キャッシュブロック取得部138は、キャッシュブロック(4,0)の最も下流側の一列からの読み出しの後、折り返してキャッシュブロック(0,1)のRow方向(y方向)で最も上流側の一列を構成する各画素から読み出しをおこなう。上記のようにして、キャッシュブロック取得部138は、バッファ読み出し制御部137により読み出し要求の並び替えがおこなわれた後の読み出し順番に従いフレームバッファー150からキャッシュブロックを読み出す。
以上説明したように、本実施例におけるプロジェクター100によれば、所定の期間に発行された読み出し要求に含まれる位置情報に、フレームバッファー150のRow方向における座標位置が互いに等しい位置情報が含まれている場合には、これらの位置情報にそれぞれ対応するキャッシュブロックをフレームバッファー150から連続して取得するため、歪み補正処理の効率性の向上を図ることができる。具体的には、DRAMにより構成されているフレームバッファー150は、記憶領域からデータを読み出すときに、Column方向の読み出し速度に比べて、Row方向の読み出し速度が遅いという特徴を有している。すなわち、フレームバッファー150に対してColumnアドレスおよびRowアドレスを指定して、指定した位置に格納されているデータを読み出す場合、指定するColumnアドレスを変更してデータを読み出す場合に比べて、指定するRowアドレスを変更してデータを読み出す場合の方が読み出しに時間がかかる。本発明に係るプロジェクター100によれば、読み出し要求に含まれる位置情報に、フレームバッファー150のRow方向における座標位置が互いに等しい位置情報が含まれている場合には、これらの位置情報にそれぞれ対応するキャッシュブロックをフレームバッファー150から連続して取得することで、Rowアドレスを変更する回数を減らすことができる。これにより、キャッシュブロックの読み出しに生じる時間を抑制できるため、歪み補正処理の効率性の向上を図ることができる。
本実施例におけるプロジェクター100によれば、バッファ読み出し制御部137は、所定の期間に読み出し要求バッファ134に格納された読み出し要求に対して、フレームバッファー150のRow方向における位置が互いに等しい位置情報を含んだ読み出し要求が連続して読み出されるように読み出し要求の読み出し順番を並び替え、キャッシュブロック取得部138は、並び替えられた順番に従ってブロック映像データを取得するため、歪み補正処理の効率性の向上を図ることができる。具体的には、フレームバッファー150のRow方向における位置が互いに等しい位置情報を含んだ読み出し要求が連続して読み出されるように読み出し要求の読み出し順番を並び替えることにより、キャッシュブロック取得部138がキャッシュブロックを構成する各画素の画素値を取得するためのアドレスを生成する際に、Rowアドレスが同じでありColumnアドレスが違う画素については連続して画素値を取得するようにアドレスを生成することができる。これにより、Rowアドレスを変更する回数を減らすことができるため、歪み補正処理の効率性の向上を図ることができる。
本実施例におけるプロジェクター100によれば、キャッシュブロック取得部138は、Row方向(y方向)の座標位置が同じキャッシュブロックで読み出し順番が連続する複数のキャッシュブロックについては、Row方向(y方向)の座標位置が等しい画素について各キャッシュブロックを跨いで連続的に画素値の読み出しをおこない、Column方向(x方向)において最も下流側のキャッシュブロックにおける一行分の画素値の読み出しが完了すると、折り返してColumn方向(x方向)において一段下流側の一行を構成する画素の画素値を読み出すため、歪み補正処理の効率性の向上を図ることができる。具体的には、キャッシュブロック取得部138は、読み出し要求バッファ134に格納されている読み出し要求において、Row方向(y方向)の座標位置が同じキャッシュブロックを連続して読み出す順番が含まれている場合には、キャッシュブロックを構成する各画素の画素値を取得するためのアドレスを生成するときにRowアドレスが同じでありColumnアドレスが違う画素については連続して画素値を取得するようにアドレスを生成する。これにより、Rowアドレスを変更する回数を減らすことができるため、歪み補正処理の効率性の向上を図ることができる。
B.変形例:
なお、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
B1.変形例1:
本実施例では、キャッシュブロック取得部138は、Row方向(y方向)が同じキャッシュブロックで読み出し順番が連続する複数のキャッシュブロックについては、Row方向(y方向)の座標位置が等しい画素について各キャッシュブロックを跨いで連続的に画素値の読み出しをおこなっているが、Row方向(y方向)の座標位置が同じキャッシュブロックで読み出し順番が連続する場合においても、キャッシュブロックごとに、Row方向(y方向)において最も上流側の一行を構成する画素の画素値を読み出し、一行分の読み出しが完了すると、折り返してRow方向(y方向)において2段目の一列を構成する画素の画素値を読み出し、1つ目のキャッシュブロックの読み出しが完了した後に2つ目のキャッシュブロックの読み出しをおこなう構成であってもよい。この場合であっても、1つ目のキャッシュブロックを読み出した後、高速バス102を支配する権利であるバス権を他の機能部に渡すことなく保持したまま連続し2つ目のキャッシュブロックの読み出しをおこなうことにより、図7に示すブロックライト待ちの時間を短縮することができるため、歪み補正処理の効率性の向上を図ることができる。
B2.変形例2:
本実施例では、バッファ読み出し制御部137は、読み出し順番の並び替えをおこなった読み出し要求を、読み出し要求バッファ134において、並び替えをおこなう前の読み出し要求が記憶されている領域以外の領域に記憶するとしているが、読み出し要求バッファ134は、並び替えがおこなわれた読み出し要求を格納するための記憶領域を備えずに、バッファ読み出し制御部137は、並び替えられた読み出し順番により順次取得要求を読み出し、読み出した都度、キャッシュブロック取得部138に転送する構成であってもよい。この場合であっても、フレームバッファー150のRow方向における座標位置が互いに等しいキャッシュブロックをフレームバッファー150から連続することができるため、歪み補正処理の効率性の向上を図ることができる。また、読み出し要求バッファ134は、読み出し順番の並び替えをおこなった読み出し要求を、読み出し要求バッファ134において、並び替えをおこなう前の読み出し要求が記憶されている領域に上書きする構成であってもよい。これらの場合であっても、歪み補正処理の効率性の向上を図ることができる。
B3.変形例3:
本実施例では、プロジェクター100は、ヒット判定部131および先読みリクエスト発行部132の2つを備えるが、いずれか一方を備えていない構成であってもよい。この場合であっても、少なくとも一方により読み出し要求が発行されるため、読み出し要求に基づいてフレームバッファー150からキャッシュブロックを読み出してキャッシュブロック記憶部122に格納することができる。
B4.変形例4:
フレームバッファー150の画素数、キャッシュブロック記憶部122の画素数、キャッシュブロックの画素数、および補間ブロックの画素数(画素補間に用いる画素数)は、上記した実施例に限定されず、任意に設定することができる。
B5.変形例5:
本実施例では、プロジェクター100は、透過型の液晶パネル部192を用いて、照明光学系190からの光を変調しているが、透過型の液晶パネル部192に限定されず、例えば、デジタル・マイクロミラー・デバイス(DMD(登録商標):Digital Micro−Mirror Device)や、反射型の液晶パネル(LCOS(登録商標):Liquid Crystal on Silicon)等を用いて、照明光学系190からの光を変調する構成にしてもよい。また、小型CRT(陰極線管)上の映像を被投写面に投写するCRTプロジェクターでもよい。
B6.変形例6:
本実施例に係るプロジェクター100は、上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。
B7.変形例7:
本発明は、種々の態様で実現することが可能であり、例えば、プロジェクターテレビ、モニター、ブロック映像記憶装置、射影変換処理装置、画像処理装置等で実現することができる。また、データの取得方法、画像処理方法、および、これらの方法または装置の機能を実現するためのコンピュータープログラム、そのコンピュータープログラムを記録した記録媒体、そのコンピュータープログラムを含み搬送波内に具現化されたデータ信号、等の形態で実現することができる。