以下、本発明の一態様であるプロジェクターについて、図面を参照しつつ、実施例に基づいて以下の順序で説明する。
A.第1の実施例:
A−1.台形歪み補正:
A−2.プロジェクターの構成:
A−3.台形歪み補正部:
A−4.先読み判定:
A−5.ヒット判定:
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から取得する。キャッシュブロック制御部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における読み出し位置を供給する。ヒット判定の処理の流れについては、図17〜図19を用いて後述する。
先読みリクエスト発行部132は、座標変換部129に供給された補正前座標の整数部に基づいて、その後の画素補間処理に必要になるキャッシュブロックを予測し、キャッシュブロック制御部121に、予測したキャッシュブロックをキャッシュブロック記憶部122に格納させる。先読みリクエスト発行部132は、キャッシュブロックを予測するタイミングを制御するための選択部133を備える。先読みリクエスト発行部132は、選択部133により選択されたキャッシュブロックから補間ブロック読み出し部124により補間ブロックの読み出しがおこなわれたときに、その後の画素補間処理に必要になるキャッシュブロックを予測する。先読みリクエスト発行部132および選択部133による具体的な処理については、後述する。なお、上記したキャッシュブロックの予測を、「先読み判定」とも称する。先読みリクエスト発行部132は、特許請求の範囲における「ブロック映像予測部」に該当する。選択部133は、特許請求の範囲における「基準変更部」に該当する。
台形歪み補正部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に示すように階段状となる。
本実施例では、画素補間部125は、図2(b)の矢印に示す方向に従って補間画素の画素値を算出する。そのため、補間ブロック読み出し部124は、図2(a)の矢印に示すように、補正前映像に対して斜め方向に補間ブロックの取得をおこなう。すなわち、補間ブロック読み出し部124は、図10の矢印に示すように、キャッシュブロック記憶部122において、x方向の最も上流側から補間ブロックの取得を開始し、x方向において下流側、y方向において上流側となる位置において次の補間ブロックを取得する。これを順次繰り返し、x方向において、最も下流側の位置において補間ブロックを取得すると、x方向の最も上流側において補間ブロックの取得を開始した前回の位置よりもy方向において下流側となる位置から補間ブロックの取得をおこなう。その後、同様に前回補間ブロックを取得した位置よりもx方向において下流側、y方向において上流側となる位置において補間ブロックの取得をおこなう。上記の補間ブロックの取得方向を各ブロック領域列単位で見ると、補間ブロック読み出し部124は、ブロック領域列を構成する複数のブロック領域にそれぞれ格納されているキャッシュブロックのうち、フレームバッファー150において対応するキャッシュブロックの位置が、y方向において相対的に上流側となるキャッシュブロックから順に補間ブロックの取得をおこなう。図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の各ブロック領域列に格納されているキャッシュブロックのうち、選択部133により選択されたキャッシュブロックに入ったことである。先読みリクエストが発行されると、キャッシュブロック制御部121により、各ブロック領域列において行番号が一番大きいキャッシュブロックより1つ行番号が大きいキャッシュブロックがフレームバッファー150から読み出され、キャッシュブロック記憶部122に格納されているキャッシュブロックのうち、行番号が一番小さいキャッシュブロックが格納されているブロック領域に上書きされる。
本実施例において、選択部133は、ブロック領域列に格納されている複数のキャッシュブロックについて、フレームバッファー150においてそれぞれ対応するキャッシュブロックのy方向における相対的な位置を表す番号から1つの番号を選択することにより、ブロック領域列に格納されている複数のキャッシュブロックから1のキャッシュブロックを特定する。例えば、選択部133により「3」が選択された場合には、選択部133は、フレームバッファー150においてy方向における位置が上流側から数えて3番目のキャッシュブロックに対応するブロック領域列のキャッシュブロックを選択する。すなわち図11では、キャッシュブロック(u,v+2)が選択される。なお、選択部133によるキャッシュブロックの選択方法は、上記以外の方法であってもよい。例えば、選択部133は、キャッシュブロックがブロック領域列の各ブロック領域に格納された相対的な時期を表す番号から、1の番号を選択することにより、ブロック領域列に格納されている複数のキャッシュブロックから1のキャッシュブロックを特定してもよい。
図11を用いて先読み判定の具体例を示す。ここでは、選択部133によりキャッシュブロックを特定するための番号として「3」が選択されているものとして説明する。先読みリクエスト発行部132は、入力された補正前座標の整数部Int(x、y)が、選択部133により選択されたキャッシュブロック(u,v+2)に含まれるか否かを判断する。先読みリクエスト発行部132は、整数部Int(x、y)が、キャッシュブロック(u,v+2)に含まれる場合には、ブロック領域列に格納されている複数のキャッシュブロックのうち、行番号が一番大きいキャッシュブロック(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)と示している。ここでは、選択部133によりキャッシュブロックを特定するための番号として「3」が選択されているものとして説明する。
図12(a)は、台形歪み補正処理開始時におけるブロック領域列の各ブロック領域に格納されているキャッシュブロックを例示している。ここでは、ブロック領域(2,0)にはキャッシュブロック(16,0)が格納され、ブロック領域(2,1)にはキャッシュブロック(16,8)が格納され、ブロック領域(2,2)にはキャッシュブロック(16,16)が格納され、ブロック領域(2,3)にはキャッシュブロック(16,24)が格納されている。これらのキャッシュブロックのうち、フレームバッファー150においてそれぞれ対応するキャッシュブロックのy方向における相対的な位置において上流側から「3」番目は、ハッチングで示したキャッシュブロック(16,16)となる。そのため、先読みリクエスト発行部132に入力された補正前座標の整数部Int(x、y)が、キャッシュブロック(16,16)に入ったとき、すなわち、入力されたy座標の整数部が16〜23だった場合には、先読みリクエストが発行されてキャッシュブロック(16,32)がフレームバッファー150から読み出される。そして、キャッシュブロック記憶部122の第2列目のブロック領域列に格納されているキャッシュブロックのうち、y座標が一番小さいキャッシュブロック(16,0)が格納されているブロック領域(2,0)に、読み出されたキャッシュブロック(16,32)が上書きされる(図12(a),(b))。
ブロック領域(2,0)に、キャッシュブロック(16,32)が上書きされると、ブロック領域列の各ブロック領域に格納されているキャッシュブロックのうち、フレームバッファー150においてそれぞれ対応するキャッシュブロックのy方向における相対的な位置において上流側から「3」番目は、図12(b)のハッチングで示したキャッシュブロック(16,24)となる。そのため、先読みリクエスト発行部132に入力された補正前座標の整数部Int(x、y)が、キャッシュブロック(16,24)に入ったとき、すなわち、入力されたy座標の整数部が24〜31だった場合には、次の先読みリクエストが発行されてキャッシュブロック(16,40)がフレームバッファー150から読み出される。そして、キャッシュブロック記憶部122の第2列目のブロック領域列に格納されているキャッシュブロックのうち、y座標が一番小さいキャッシュブロック(16,8)が格納されているブロック領域(2,1)に、読み出されたキャッシュブロック(16,40)が上書きされる(図12(b),(c))。ブロック領域(2,1)に、キャッシュブロック(16,40)が上書きされると、ブロック領域列の各ブロック領域に格納されているキャッシュブロックのうち、フレームバッファー150においてそれぞれ対応するキャッシュブロックのy方向における相対的な位置において上流側から「3」番目は、図12(c)のハッチングで示したキャッシュブロック(16,32)となる。
図13は、キャッシュブロック記憶部122に格納されているキャッシュブロックとフレームバッファー150の座標との関係を説明するための説明図である。図13では、図12に示したキャッシュブロック記憶部122における第2列目のブロック領域列に格納されているキャッシュブロックと、フレームバッファー150において対応する領域の座標との関係を示している。図13のキャッシュブロック記憶部122において、0,8,16,24,32,・・・,1896,1904,1912と記載されている番号は、キャッシュブロック記憶部122に格納されているキャッシュブロックの左上端の画素の補正前映像におけるx座標であり、すなわち、フレームバッファー150におけるx座標を示している。
図13は、図12において、図12(b)から図12(c)への移行時を表している。図13に示すように、ブロック領域列に格納されている複数のキャッシュブロック(16,8)、(16,16)、(16,24)、(16,32)のうち、フレームバッファー150のy方向において最も上流側のキャッシュブロック(16,8)を格納しているブロック領域(2,1)に、ブロック領域列に格納されているキャッシュブロックのうちy方向において最も下流側のキャッシュブロック(16.32)と下流側で接するキャッシュブロック(16,40)が上書きされる。
次に、図14と図15を用いて、選択部133により選択される番号と、キャッシュブロックを取得するタイミングとの関係について説明する。図14は、選択部によりキャッシュブロックを特定するための番号として「3」が選択されている状態を説明するための説明図である。図15は、選択部によりキャッシュブロックを特定するための番号として「4」が選択されている状態を説明するための説明図である。図14および図15のハッチングは、それぞれ選択部133により選択された番号に対応するキャッシュブロックを示している。図14および図15において示した矢印は、図10の矢印と同様に補間ブロックの取得位置の移動方向を表している。補間ブロックの取得位置は、矢印L1、L2、L3、L4の順にそれぞれの矢印の方向に移動する。
図14に示すように、選択部133によりキャッシュブロックを特定するための番号として「3」が選択されている状態において、補間ブロックの取得位置(ここでは、補正前座標の整数部Int(x、y))が矢印L1上のときには、選択部133により選択されたキャッシュブロックからの読み取りがおこなわれない。しかし、補間ブロックの取得位置が矢印L2上のときには、0,1,3,4,6,7列目のブロック領域列において、補間ブロックの取得位置が選択部133により選択されたキャッシュブロックに含まれ、0,1,3,4,6,7列目のブロック領域列では先読みが実行される。また、補間ブロックの取得位置が矢印L3上となると、0,1,3,4,6,7列目のブロック領域列に加えて、2,5,8列目のキャッシュブロックのブロック領域列においても、補間ブロックの取得位置が選択部133により選択されたキャッシュブロックに含まれるため、2,5,8列目のキャッシュブロックについても先読みが実行される。すなわち、本実施例では、選択部133によりキャッシュブロックを特定するための番号として「3」が選択されているときには、補間ブロックが矢印L4の上となる前までに、図示したすべてのブロック領域列(0〜8列)において先読みが実行される。
一方、図15に示すように、選択部133によりキャッシュブロックを特定するための番号として「4」が選択されている状態では、補間ブロックの取得位置が矢印L1上のみでなく、矢印L2上であっても、補間ブロックの取得位置が選択部133により選択されたキャッシュブロックに含まれない。補間ブロックの取得位置が矢印L3上のときに、0,3,6列目のブロック領域列において、補間ブロックの取得位置が選択部133により選択されたキャッシュブロックに含まれ、0,3,6列目のブロック領域列では先読みが実行される。そして、補間ブロックの取得位置が矢印L4上のときに、0,3,6列目のブロック領域列に加えて、1,2,4,5,7,8列目のキャッシュブロックのブロック領域列においても、補間ブロックの取得位置が選択部133により選択されたキャッシュブロックに含まれ、1,2,4,5,7,8列目のキャッシュブロックについても先読みが実行される。すなわち、図14に示した選択部133により「3」が選択されている状態と比べて、すべてのブロック領域列(0〜8列)において、先読みが実行されるタイミングが遅くなる。このことから、選択部133により選択された番号により、先読みが実行されるタイミングが変化する。具体的には、選択される番号が小さくなるほど、先読みが実行されるタイミングが早くなり、選択される番号が大きくなるほど、先読みが実行されるタイミングが遅くなる。
図16は、補間ブロックの移動方向と選択部により選択される番号との関係を説明するための説明図である。図16(a)は、選択部133によりキャッシュブロックを特定するための番号として「3」が選択されている状態を示している。図16(b)は、キャッシュブロックを特定するための番号として「4」が選択されている状態を示している。図16(a)において、破線で示した第1の読み取り位置P1において補間ブロックの取得がおこなわれると、2列目のブロック領域列において先読みが実行され、ブロック領域(2,0)に格納されているキャッシュブロック(16,0)がキャッシュブロック(16,32)に更新される。しかし、補間ブロックの移動方向とx方向とがなす角度(以後「補正角度」とも呼ぶ)θ1が所定の角度(以後「限界補正角度」とも呼ぶ)より大きい場合には、第2の読み取り位置P2において補間ブロックの取得をおこなうときに、キャッシュブロック(16,0)からの読み取りが必要であるにもかかわらず、既にキャッシュブロック(16,32)に更新されているという不具合が発生する。この場合、ブロック領域(2,0)に再度キャッシュブロック(16,0)を格納する必要があるため、台形歪み補正処理の処理効率を低下させる虞がある。よって、処理効率の低下を抑制するためには、補正角度θ1を限界補正角度以下とする必要がある。ここで、限界補正角度は、選択部133により選択された番号と対応するキャッシュブロックと、先読みにより更新されるキャッシュブロックとの間にあるキャッシュブロックの数に依存する。例えば、図16(a)に示すように、選択部133により選択された番号と対応するキャッシュブロック(2,2)と、更新されるキャッシュブロック(2,0)との間にあるキャッシュブロックが1つ、ここでは、キャッシュブロック(2,1)のみの場合、限界補正角度はキャッシュブロック(2,1)の対角線とx方向とのなす角度、概ね45度となる。
図16(b)では、選択部133により選択された番号と対応するキャッシュブロックと、更新されるキャッシュブロックとの間にあるキャッシュブロックが2つ、ここでは、キャッシュブロック(2,1)とキャッシュブロック(2.2)であるため、限界補正角度は、2つのキャッシュブロックの外形により表される矩形の対角線とx方向とのなす角度、概ね60度となる。このことから、選択部133により選択された番号により、限界補正角度が変化する。具体的には、選択される番号が小さくなるほど、限界補正角度が小さくなり、選択される番号が大きくなるほど、限界補正角度が大きくなる。
上記の図14〜図16から、選択部133により選択される番号が小さくなるほど、先読みが実行されるタイミングが早くなるため、補間ブロックを読み出す際に必要なキャッシュブロックが格納されていない状態を抑制できる一方、限界補正角度が小さくなるといえる。また、選択部133により選択される番号が大きくなるほど、限界補正角度が大きくなるため、台形補正量(角度)の大きい補正であっても、一度格納したキャッシュブロックを再度読み取ることによる処理効率の低下を抑制することができる一方、選択される番号が小さい場合と比べて先読みが実行されるタイミングが遅くなるといえる。
選択部133は、キャッシュブロックを特定するための番号として、補正前画像に対する補正後画像の傾きを表す補正角度が限界補正角度を下回る範囲において、最も小さい番号を選択する。例えば、本実施例では、補正角度θ1が40度のときは、選択部133は、キャッシュブロックを特定するための番号として、限界補正角度が概ね45度となる「3」を選択する。また、補正角度θ1が50度のときは、選択部133は、キャッシュブロックを特定するための番号として、限界補正角度が概ね60度となる「4」を選択する。言い換えると、選択部133は、図16の矢印の方向が、y方向に近づくほど、補正角度θ1は大きくなるため、大きい番号、すなわち、ブロック領域列に格納されているキャッシュブロックのうち、フレームバッファー150のy方向における下流側の映像を表すキャッシュブロックと対応する番号を選択し、矢印の方向が、y方向と直交するx方向に近づくほど、補正角度θ1は小さくなるため、小さい番号、すなわち、ブロック領域列に格納されているキャッシュブロックのうち、フレームバッファー150のy方向において上流側の映像を表すキャッシュブロックと対応する番号を選択する。
補正角度θ1は、上記の(式2)や(式3)を用いることにより算出することができる。本実施例では、選択部133は、レジスター部127に格納されている座標変換係数A〜Hと、(式2)、(式3)を用いて補正角度θ1を算出し、選択する番号ごとに予め特定されている限界補正角度と、算出した補正角度θ1とを比較し、限界補正角度が補正角度θ1より大きくなる番号のうち最小の番号を、キャッシュブロックを特定するための番号として選択する。なお、補正角度θ1は、必ずしも算出される必要はなく、例えば、選択部133は、座標変換係数A〜Hの少なくとも一部の値と、選択する番号との対応関係が示されたテーブルを備えることにより、座標変換係数A〜Hの少なくとも一部の値から直接的にキャッシュブロックを特定するための番号を選択してもよい。
A−5.ヒット判定:
図17は、タグ情報を用いたヒット判定の例を示す説明図である。図17では、図13に示したキャッシュブロック記憶部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)である場合のヒット判定について、図17に基づいて説明する。
(x[0],y[0])=(16,40)が含まれるキャッシュブロックがキャッシュブロック記憶部122に格納されているか否か判定する場合、まず、ヒット判定部131は、キャッシュブロック用タグ情報記憶部123から該当する列のタグを抽出する。1つのキャッシュブロックは、8×8画素から成るため、画素補間に用いる画素のx座標を8で割ることにより、該当する列がわかる。(x[0],y[0])=(16,40)は第2列に該当するため、第2列のタグを抽出する。
図17において、抽出されたタグの情報が、紙面右側に記載されている。ヒット判定部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)が含まれるキャッシュブロックは先読み中であり、しばらく待てば、読み出し可能であると判定される。
図18、図19は、ヒット判定部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に存在する(ヒットした)といえるため、ヒットしたタグに該当するキャッシュブロックの座標(列,行)を算出する。
以上説明したように、本実施例におけるプロジェクター100によれば、選択部133により選択された番号に対応するキャッシュブロックから補間ブロックの取得がおこなわれたときに、先読みリクエスト発行部132により予測された位置のキャッシュブロックをフレームバッファー150から取得することができるため、歪み補正処理の効率性の向上を図ることができる。具体的には、本実施例におけるプロジェクター100は、先読みリクエスト発行部132を備えるため、n番目の画素の画素値を求める画素補間を行う際に、n+1番目以降の画素の画素値を求めるために必要なキャッシュブロックを前もって読み出して(先読みして)、キャッシュブロック記憶部122に格納することができる。したがって、n+1番目以降の画素の画素値を求める際に、改めて必要なキャッシュブロックをキャッシュブロック記憶部122に格納しなくてもよい。すなわち、図7に示すブロックライト待ちの時間を短縮することができる。したがって、歪み補正処理の効率性の向上を図ることができる。
本実施例におけるプロジェクター100によれば、先読みリクエスト発行部132は、ブロック領域列に含まれるキャッシュブロックのうち、フレームバッファー150のy方向において最も下流側のキャッシュブロックと下流側で隣接するキャッシュブロックを補間ブロック読み出し部124が後に補間ブロックを取得する位置を含むキャッシュブロックとして予測するため、歪み補正処理の効率性の向上を図ることができる。具体的には、通常、台形歪み補正において、補正後座標を補正前座標に変換する座標変換では、回転、反転等がない場合には、図2に示すように、補正前映像の上方から下方へと画素補間に必要な補間ブロックは移動する。そのため、ブロック領域列に含まれるキャッシュブロックのうち、フレームバッファー150のy方向において最も下流側のキャッシュブロックと下流側で隣接するキャッシュブロックを取得することにより、補間ブロックの取得に必要なキャッシュブロックがキャッシュブロック記憶部122に格納されていない状態を抑制することができ、歪み補正処理の効率性の向上を図ることができる。
本実施例におけるプロジェクター100によれば、選択部133は、補間ブロックの移動方向が、フレームバッファー150のy方向に近づくほど、ブロック領域列に格納されているキャッシュブロックのうち、フレームバッファー150のy方向における下流側の映像を表すキャッシュブロックと対応する番号を選択し、補間ブロックの移動方向が、y方向と直交するx方向に近づくほど、ブロック領域列に格納されているキャッシュブロックのうち、フレームバッファー150のy方向において上流側の映像を表すキャッシュブロックと対応する番号を選択するため、歪み補正処理の効率性の向上を図ることができる。具体的には、選択部133により選択される番号は、小さくなるほど、先読みが実行されるタイミングが早くなるため、補間ブロックを読み出す際に必要なキャッシュブロックが格納されていない状態を抑制できるが、限界補正角度が小さくなる。一方、大きくなるほど、限界補正角度が大きくなるため、台形補正量(角度)の大きい補正であっても、一度格納したキャッシュブロックを再度読み取ることによる処理効率の低下を抑制することができるが、先読みが実行されるタイミングが遅くなることがいえる。
補間ブロックの移動方向が、フレームバッファー150のy方向に近づくほど、図16の補正角度θ1は大きくなる。そのため、選択部133は、補正角度θ1を限界補正角度より小さくするために、選択する番号を大きくする。一方、補間ブロックの移動方向が、フレームバッファー150のy方向と直交するx方向に近づくほど、図16の補正角度θ1は小さくなる。そのため、選択部133は、先読みのタイミングを早めるために、選択する番号を小さくする。このように、補正角度θ1に応じて先読みを実行するタイミングを変化させることによって、歪み補正処理の効率性の向上を図ることができる。
B.変形例:
なお、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
B1.変形例1:
本実施例では、選択部133は、補正角度θ1に応じて、キャッシュブロックを特定するための番号を変化させているが、選択部133は、補正角度θ1、および/または、補正角度θ1以外の条件に応じて、キャッシュブロックを特定するための番号を変化させてもよい。例えば、選択部133は、高速バス102や低速バス104におけるトラフィック量に応じてキャッシュブロックを特定するための番号を変化させる構成としてもよい。具体的には、フレームバッファー150へのアクセス量が多い場合、キャッシュブロックの読み出しに要する時間が増大して、歪み補正処理の処理効率が低下する虞がある。しかし、このとき、選択部133は、キャッシュブロックを特定するための番号として小さい番号を選択することで、先読みが実行されるタイミングを早めて歪み補正処理の処理効率の低下を抑制することができる。また、選択部133により選択されるキャッシュブロックを特定するための番号は、ユーザにより切り替え可能な構成としてもよい。
B2.変形例2:
本実施例では、補間ブロック読み出し部124によるキャッシュブロックの読み出し順番や、選択部133によるキャッシュブロックの選択方法は、各キャッシュブロックが表す映像のフレームバッファー150において対応する領域のy方向における位置に基づいて決定しているが、本発明は、必ずしも、各キャッシュブロックが表す映像のフレームバッファー150において対応する領域の位置に基づかなくても実現することができる。例えば、補間ブロック読み出し部124の読み出し順番や選択部133によるキャッシュブロックの選択方法は、各キャッシュブロックのブロック領域に格納された時期に基づいて決定してもよい。具体的には、部124は、ブロック領域列に格納されている複数のキャッシュブロックについて、ブロック領域に格納された時期が古いキャッシュブロックから順に読み出しをおこない、選択部133は、ブロック領域列に格納されている複数のキャッシュブロックについて、ブロック領域に格納された相対的な時期を表す番号から1つの番号を選択することにより、ブロック領域列に格納されている複数のキャッシュブロックから1のキャッシュブロックを特定してもよい。
B3.変形例3:
本実施例では、図10に示すように、キャッシュブロック制御部121は、ブロック領域列ごとフレームバッファー150のy方向に沿った方向において順次キャッシュブロックの読み出しをおこなうものとして説明しているが、本発明を適用したキャッシュブロックの読み出しは、必ずしもy方向に沿った方向に限定されず、例えばx方向に沿った方向において順次キャッシュブロックの読み出しをおこなう構成であっても適用することができる。
B4.変形例4:
本実施例では、補正前座標の整数部Int(x、y)が選択部133により選択されたキャッシュブロックに入っているときに先読みが実行されるとしているが、補間ブロックにおいて、補正前座標の整数部Int(x、y)以外の領域が選択部133により選択されたキャッシュブロックに入っているときに先読みが実行される構成であってもよい。例えば、補間ブロックの四隅のうち、y方向下流側の2つの隅のいずれか一方が選択部133により選択されたキャッシュブロックに入っているときに先読みが実行される構成であってもよい。
B5.変形例5:
本実施例では、プロジェクター100は、ヒット判定部131を備えるが、ヒット判定部131を備えない構成であってもよい。ヒット判定部131を備えない構成にする場合には、例えば、先読みリクエスト発行部132が補間ブロック読み出し部124に対して読み出し位置を供給する構成にすればよい。このような構成にしても、先読みリクエストを行うことにより、画素補間に必要な補間ブロックを含むキャッシュブロックを読み出してキャッシュブロック記憶部122に格納することができる。
B6.変形例6:
フレームバッファー150の画素数、キャッシュブロック記憶部122の画素数、キャッシュブロックの画素数、および補間ブロックの画素数(画素補間に用いる画素数)は、上記した実施例に限定されず、任意に設定することができる。
B7.変形例7:
本実施例では、プロジェクター100は、透過型の液晶パネル部192を用いて、照明光学系190からの光を変調しているが、透過型の液晶パネル部192に限定されず、例えば、デジタル・マイクロミラー・デバイス(DMD(登録商標):Digital Micro−Mirror Device)や、反射型の液晶パネル(LCOS(登録商標):Liquid Crystal on Silicon)等を用いて、照明光学系190からの光を変調する構成にしてもよい。また、小型CRT(陰極線管)上の映像を被投写面に投写するCRTプロジェクターでもよい。
B8.変形例8:
本実施例に係るプロジェクター100は、上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。
B9.変形例9:
本発明は、種々の態様で実現することが可能であり、例えば、プロジェクターテレビ、モニター、ブロック映像記憶装置、射影変換処理装置、画像処理装置等で実現することができる。また、ブロック映像記憶方法、画像処理方法、および、これらの方法または装置の機能を実現するためのコンピュータープログラム、そのコンピュータープログラムを記録した記録媒体、そのコンピュータープログラムを含み搬送波内に具現化されたデータ信号、等の形態で実現することができる。