(第1実施形態)
以下、図1〜図17に従って第1実施形態を説明する。
図1に示すように、撮像装置1は、撮像部11と、画像処理プロセッサ(ISP:Image Signal Processor)12と、入力部13と、メモリ14と、メモリカード15と、表示デバイス16とを有している。
撮像部11は、撮像光学系21と、撮像素子部22と、アナログフロントエンド(AFE:Analog Front End)23とを有している。
撮像光学系21は、被写体からの光を集光する複数のレンズ(フォーカスレンズなど)や、これらのレンズを透過した光の量を調整する絞り等を含み、光学的な被写体像を撮像素子部22に導く。撮像素子部22は、例えば、ベイヤ配列のカラーフィルタと、撮像素子とを含む。撮像素子は、例えば、CCD(Charge Coupled Device)イメージセンサやCMOS(Complementary Metal Oxide Semiconductor)イメージセンサである。撮像素子は、カラーフィルタを介して入射する光の量に応じた撮像信号(アナログ信号)を出力する。AFE23は、撮像素子部22から出力されるアナログの撮像信号をデジタルの撮像データGDに変換するA/D変換回路を含み、撮像データGDを画像処理プロセッサ12に出力する。
画像処理プロセッサ12は、撮像部11から出力される撮像データGD(例えば、RGB形式の画像データ(ベイヤデータ))に対して各種画像処理を施す。例えば、画像処理プロセッサ12は、所定の処理段階で画像データをメモリ14に一時的に格納する。すなわち、メモリ14は作業メモリとして機能する。このメモリ14は、例えば同期式半導体メモリ(SDRAM:Synchronous Dynamic Random Access Memory)などの書き換え可能なメモリである。また、画像処理プロセッサ12は、メモリ14に格納された各種画像処理後の画像データをメモリカード15に格納したり、表示デバイス16に表示したりする。
入力部13は、ユーザにより操作されるシャッタボタンやメニューボタン等の各種スイッチを有している。この各種スイッチは、例えば、写真撮影、撮影条件の設定や表示方式の設定等を行うために使用される。
メモリカード15は、例えばコンパクトフラッシュ(登録商標)やSDメモリカード(登録商標)などの携帯型メモリカードである。
表示デバイス16としては、例えば、液晶表示装置(LCD:Liquid Crystal Display)や有機EL(Electronic Luminescence)を用いることができる。また、表示デバイス16としては、例えば、電子ビューファインダ(EVF:Electronic View Finder)や、外部接続のためのインターフェース(例えば、HDMI(登録商標):High-Definition Multimedia Interface)を用いることもできる。
次に、画像処理プロセッサ12の内部構成例を説明する。
画像処理プロセッサ12は、センサインターフェース(I/F)31と、シェーディング補正部32と、画像処理部33と、コーデック部34と、メモリカードI/F35と、表示I/F36と、DMA調停部37と、メモリコントローラ38と、CPU(Central Processing Unit)39とを有している。
センサI/F31、シェーディング補正部32、画像処理部33、コーデック部34、メモリカードI/F35、表示I/F36及びDMA調停部37は、内部バスBUSを介して互いに接続されている。DMA調停部37は、メモリコントローラ38を介してメモリ14と接続されている。
センサI/F31は、撮像部11から出力される撮像データGD(RGB形式の画像データ(ベイヤデータ))を受け取り、その画像データGDをメモリ14又はシェーディング補正部32に出力する。
シェーディング補正部32は、メモリ14から読み出した画像データGD又はセンサI/F31から入力する画像データGDに対してシェーディング補正を施し、シェーディング補正後の画像データをメモリ14に格納する。
画像処理部33は、メモリ14から読み出したシェーディング補正後の画像データに対して画像処理を施す1つ又は複数の処理部である。画像処理部33は、画像処理後の画像データGDをメモリ14に格納する。画像処理部33が行う処理は、例えば、RGB形式の画像データをYCbCr形式の画像データに変換する色空間変換処理、画素数を増減する解像度変換処理、画像の輪郭(エッジ)を強調するエッジ強調処理、画像データに含まれるノイズを除去するノイズ除去処理等が含まれる。
コーデック部34は、メモリ14に格納された画像処理後の画像データを読み出し、その画像データを所定の方式(例えば、JPEG(Joint Photographic Experts Group)方式)により符号化する。コーデック部34は、符号化後の画像データ(符号化データ)をメモリ14に格納する。また、当該撮像装置1が動画の撮影が可能であれば、コーデック部34に、動画データを所定の方式(例えば、MPEG(Moving Picture Experts Group)方式)により符号化する機能を持たせてもよい。
なお、画像処理プロセッサ12に含まれる処理部31〜34及び各処理部31〜34の処理内容は一例を示すものであり、画像処理プロセッサ12が含む処理部の種類や処理内容は、適宜変更してもよい。
メモリカードI/F35は、撮像装置1に装着されるメモリカード15と接続される。メモリカードI/F35は、メモリ14に格納されたデータ(例えば、符号化された画像データ)をメモリカード15に格納する。
表示I/F36には、当該撮像装置1に設けられた表示デバイス16が接続されている。表示デバイス16は、撮像装置1の駆動源であるバッテリの残量、撮影モード、撮影フレーム、記憶された画像データの表示等に用いられる。例えば、表示I/F36は、メモリ14に格納された画像データを読み出し、その画像データに基づいて生成した表示データを表示デバイス16に出力する。
センサI/F31と、シェーディング補正部32と、画像処理部33と、コーデック部34と、メモリカードI/F35と、表示I/F36とは、ダイレクトメモリアクセスコントローラ(DMAC:Direct Memory Access Controller)31a〜36aをそれぞれ有している。DMAC31a〜36aは、各処理部31〜36が行う処理に応じたアクセス要求を出力する。例えば、センサI/F31は、撮像部11から入力した画像データGDを、メモリ14に格納する。このため、センサI/F31のDMAC31aは、DMA調停部37に対して書き込み要求(ライトリクエスト)を出力する。また、シェーディング補正部32は、画像データGD及びシェーディング補正用の補正係数をメモリ14から読み出すとともに、シェーディング補正後の画像データをメモリ14に格納する。このため、シェーディング補正部32のDMAC32aは、DMA調停部37に対して読み出し要求(リードリクエスト)及びライトリクエストを出力する。
DMA調停部37は、各処理部31〜36のDMAC31a〜36aから出力され競合する要求(リクエスト)を、例えば各処理部31〜36に対応して設定された優先度に従って要求を調停し、1つの処理部に対するアクセスを許可する。アクセスが許可された処理部は、メモリ14に対するアクセスのための制御信号を出力する。例えば、読み出し要求の場合、メモリコントローラ38は、制御信号に応じてメモリ14からデータを読み出し、その読み出したデータを要求元の処理部に出力する。また、メモリコントローラ38は、書き込み要求と、その要求元の処理部から出力されるデータをメモリ14に出力し、メモリ14はそのデータを記憶する。
CPU39は、画像処理プロセッサ12全体を統括制御する。CPU39は、処理に必要な情報の各処理部への設定及びデータの書き込み/読み出し制御等を行う。CPU39は、撮像素子部22のリセットを指令する制御信号を、AFE23を通じて撮像素子部22に出力する。CPU39は、上記入力部13の操作に応じて動作モードや各処理において必要な情報(パラメータ)を設定する。
次に、シェーディング補正部32の内部構成例について説明する。
図2に示すように、シェーディング補正部32は、DMAC32aと、内部メモリ制御回路42と、内部メモリ43と、遅延回路44と、水平カウンタ45と、垂直カウンタ46と、補正係数演算回路47と、補正領域設定回路48と、補正回路49とを有している。
DMAC32aは、シェーディング補正を開始する信号に応答して、メモリ14から補正係数を読み出すための要求信号REQをメモリI/F40に出力する。DMAC32aは、メモリ14内の補正係数テーブル14aに格納されたシェーディング補正用の補正係数RCを読み出す領域を示すアドレス信号ADDRをメモリI/F40に出力する。ここで、メモリI/F40は、図1に示したDMA調停部37及びメモリコントローラ38に対応する。メモリI/F40は、シェーディング補正部32に対してアクセスを許可する際に、メモリ14に対するアクセスを許可する許可信号ACKを出力する。メモリI/F40は、シェーディング補正部32に対してアクセスを許可した際に、アドレス信号ADDRに応じたメモリ14の領域に格納された補正係数RCを読み出し、その補正係数RCをリードデータDATAとしてDMAC32aに出力する。
DMAC32aは、内部メモリ制御回路42からのデータ要求DTENに応答して、リードデータDATA(つまり、補正係数テーブル14aから読み出した補正係数RC)をリードデータRDATAとして内部メモリ制御回路42に出力する。
内部メモリ制御回路42は、DMAC32aから入力したリードデータRDATAを内部メモリ43に一時的に格納する。これにより、内部メモリ43には、補正係数テーブル14aから読み出された補正係数RCが格納される。例えば、内部メモリ43には、2ライン分の補正係数RCが格納される。また、内部メモリ制御回路42には、補正係数演算回路47からリードアドレス信号RAD及びリードイネーブル信号RDENが入力される。内部メモリ制御回路42は、リードイネーブル信号RDENに応答して、リードアドレス信号RADに応じた内部メモリ43の領域から補正係数RCを読み出し、読み出した補正係数RCを補正係数RD1,RD2として補正係数演算回路47に出力する。なお、内部メモリ43は、例えば、RAM(Random Access Memory)である。
遅延回路44には、例えば、メモリ14からメモリI/F40及びDMAC32aを介して画像データGDが入力される、又はセンサI/F31からDMAC31a,32aを介して画像データGDが入力される。遅延回路44は、画像データGDを所定時間だけ遅延させて画像データGDdとして補正回路49に出力する。例えば、遅延回路44は、補正係数演算回路47から補正係数PAが出力されるタイミングに合致させるように、画像データGDを所定時間遅延させて補正回路49に出力する。
ここで、画像データGDについて説明する。
図3(a)に示すように、1つのフレーム(1画面)の画像データGDは、撮像部11(図1参照)において撮像した画像に対応する有効画像データ(画像データ)GDPと、撮像した画像に対応しないブランクデータGDBと、を有する。
画像データGDPは、複数の画素が2次元の行列状に配列された画像データである。画像データGDPは、複数のラインデータを有している。各ラインデータは、複数の画素データGPを有している。図3(a)において左右方向に配列された画素データGPは、撮像素子部22内の撮像素子の第1方向(例えば、水平方向)に配列された複数の受光部に対応する。また、図3(a)において上下方向に配列された画素データGPは、撮像素子部22内の撮像素子の第1方向と直交する第2方向(例えば、垂直方向)に配列された複数の受光部に対応する。各画素データGPは、対応する受光部がそれぞれ受ける光の量に応じた値(画素値)を含む。
ここで、撮像素子部22の受光部は、所定配列(例えば、ベイヤ配列)のカラーフィルタを透過した光を受光する。したがって、各画素データGPに含まれる画素値は、対応するカラーフィルタの配列及び色に応じた色情報を含む。例えば、ベイヤ配列のカラーフィルタは、赤色(R)のフィルタと、2つの緑色(Gr,Gb)のフィルタと、青色(B)のフィルタとを含む。例えば、図3(b)に示すように、撮像素子の奇数段の行に対応するラインデータには、赤色(R)成分の色情報を持つ画素データと緑色(Gr)成分の色情報を持つ画素データとが交互に含まれる。また、撮像素子の偶数段の行に対応するラインデータには、緑色(Gb)成分の色情報を持つ画素データと青色(B)成分の色情報を持つ画素データとが交互に含まれる。
図3(a)に示すように、画像データGDPを含むラインデータよりも前のラインデータを垂直前ブランクデータと称し、画像データGDPを含むラインデータの後のラインデータを垂直後ブランクデータと称する。また、画像データGDPを含むラインデータにおいて、画像データGDPよりも前のデータを水平前ブランクデータと称し、画像データGDPの後のデータを水平後ブランクデータと称する。垂直前ブランクデータのライン数を垂直前ブランク数VSB、有効画像データGDPを含むライン数を垂直有効画素数VW、垂直後ブランクデータのライン数を垂直後ブランク数VEBとする。水平前ブランクデータの水平方向のデータ数を水平前ブランク数HSB、有効画像データGDPを含む水平方向の画素数を水平有効画素数HW、水平後ブランクデータの水平方向の画素数を水平後ブランク数HEBとする。
図4は、有効画像データGDPにおける画素データGPの配列の一例を示している。図4に示した有効画像データGDPは、説明の簡略化のために、単色の画像データとする。以下では、図4に示した有効画像データGDPを用いて各種処理を説明する。
図4に示した画像データGDPは、複数の画素(ここでは、24画素×48画素)が水平方向(行方向:図中の左右方向)及び垂直方向(列方向:図中の上下方向)に2次元状に配列された画像データである。すなわち、画像データGDPは、24本のラインデータL1〜L24を有し、各ラインデータL1〜L24は、48個の画素データGP(画素)を有している。換言すると、画像データGDPでは、所定サイズ(ここでは、8画素×8画素)のブロックMBが水平方向に6個配列され、ブロックMBが垂直方向に3個配列されている。
図2に示すように、水平カウンタ45は、クロック信号CLKと、1フレームの区切り(フレームの開始)を示す垂直同期信号VDと、1ラインの区切り(各ラインの開始)を示す水平同期信号HDとを入力し、画素データGPの水平方向の位置を示す水平カウント値HCTを出力する。例えば、水平カウンタ45は、クロック信号CLKの立ち上がりエッジに応答して水平カウント値HCTをカウントアップし、垂直同期信号VDがアサートされる(例えば、論理Hレベルになる)、又は水平同期信号HDがアサートされると、水平カウント値HCTを初期値(ここでは、1)にリセットする。
垂直カウンタ46は、垂直同期信号VDと、水平同期信号HDとを入力し、画素データGPの垂直方向の位置を示す垂直カウント値VCTを出力する。例えば、垂直カウンタ46は、垂直同期信号VDがアサートされると、垂直カウント値VCTを初期値(ここでは、0)にリセットし、その後、水平同期信号HDがアサートされる度に垂直カウント値VCTをカウントアップする。
水平カウント値HCT及び垂直カウント値VCTは、補正係数演算回路47に供給されるとともに、補正領域設定回路48に供給される。補正係数演算回路47には、垂直同期信号VDと、水平同期信号HDとが入力されるとともに、内部メモリ43から読み出された補正係数RD1,RD2が内部メモリ制御回路42を介して入力される。
補正係数演算回路47は、内部メモリ43から読み出した補正係数RD1,RD2に基づいて補正係数PAを算出し、その補正係数PAを補正回路49に出力する。
補正領域設定回路48は、水平カウント値HCTと、垂直カウント値VCTと、水平有効画素数HWと、垂直有効画素数VWとを入力し、補正係数PAにより補正された画素データの出力を許可する出力イネーブル信号OUTENを生成する。補正領域設定回路48は、例えば、水平カウント値HCTと、垂直カウント値VCTと、水平有効画素数HWと、垂直有効画素数VWとに基づいて、画像データGDのうち有効画像データGDP内の画素データGPが遅延回路44に入力される期間のみ論理Hレベル(Hレベル)となる出力イネーブル信号OUTENを補正回路49に出力する。
補正回路49は、遅延回路44からの画像データGDdを、補正係数演算回路47からの補正係数PAを用いて補正し、補正後の画像データGDcを出力する。例えば、補正回路49は、画像データGDd内の各画素データGPに対して、当該画素データGPに対応する補正係数PAを乗算して、補正後の画素データを生成する。そして、補正回路49は、出力イネーブル信号OUTENがHレベルのときに、補正後の画素データを画像データGDcとして出力する。一方、補正回路49は、出力イネーブル信号OUTENがLレベルのときには、補正後の画素データを出力せずに、画像データGDdを画像データGDcとして出力する。
次に、補正係数演算回路47における処理の概要を説明する。
まず、図4に示した画像データGDP内の各画素データGPの画素値(輝度)には、シェーディングが含まれている。詳述すると、光学レンズの結像では、画角の中心から周辺領域に向かって同心円状に輝度が減衰するシェーディングが発生しているため、画像データGDP内の各画素データGPにもシェーディングが含まれている。
図5(a)は、画像データGDPの水平方向の画素数(例えば、撮像光学系21内の光学レンズ(図示略)の直径方向における画素数)を横軸に示し、各画素データGPの輝度を縦軸に示している。ここでは、均一な輝度の被写体を撮像したときの輝度が示されている。図5(a)に示すように、各画素データGPの輝度は、シェーディングを内包しているため、撮像光学系21内の光学レンズの中心(画角の中心)から左右両端部に向かって減衰する曲線を描く。以下の説明では、画角の中心からの距離に応じた中心の輝度に対する輝度の減衰率を、シェーディング特性(輝度特性)という。
シェーディング補正部32では、まず、メモリ14内の補正係数テーブル14aに格納された補正係数RCから補正係数PAが補正係数演算回路47で算出される。そして、シェーディング補正部32では、算出した補正係数PAに基づいて、画像データGDPのシェーディング特性の補正が行われる。以下に、シェーディング補正部32によるシェーディング補正処理の概要について説明する。
図5(b)は、画像データGDPの水平方向の画素数を横軸に示し、画素データGPに対する補正係数を縦軸に示している。ここでは、理想的な補正係数の特性(補正特性)として、各画素データGP毎に補正係数が用意された補正特性SP1(破線参照)が示されている。補正特性SP1は、画像データGDPのシェーディング特性に対応して、画角の中心から周辺領域に向かって補正係数が増加する曲線を描く。この補正特性SP1に基づいて、画像データGDPの各画素データGPの輝度を補正すると、画像データGDP内の全ての画素データGPの輝度を画角の中心と同等の輝度に補正することができる。しかし、補正特性SP1を用いる場合には、1フレームの画像データGDPの全ての画素データGPに対する補正係数が必要となるため、それら補正係数を格納するためにメモリ14が大容量化するという問題がある。
そこで、本実施形態では、画像データGDPの画素数よりも少ない数の補正係数、つまり画像データGDPから所定数の画素データGPを間引いた後の画素データGPに対する補正係数のみを補正係数テーブル14a(メモリ14)に格納している。そして、間引いた所定数の画素データGPに対する補正係数は、例えば、当該画素データGPの近傍4点の補正係数を用いて線形補間して算出する。ここで、線形補間法について簡単に説明する。
図7(a)に示すように、補正係数テーブル14aには、例えば、3×6個の補正係数RCが格納されている。ここで、有効画像データGDPは、24×48画素の画像データである。このため、24×48画素の画素データGPの各々に対応する補正係数を用意するためには、3×6個の補正係数RCから24×48個の補正係数を線形補間法によって補間する必要がある。図7(a)及び図7(b)において、黒丸及び白丸はそれぞれ1つの補正係数を表わし、黒丸は補正係数テーブル14aに格納された補正係数RCを表わし、白丸は補正係数RCに基づいて線形補間法によって補間された補正係数RLを表わしている。また、図7(b)では、有効画像データGDPの各画素データGPと補正係数RC,RLとの位置関係を示している。
上述した線形補間法では、補正係数RCの配置間隔を所定の間隔(ここでは、8倍)に拡大し、各補正係数RC間の係数値が滑らかに遷移するように補正係数RCを補間する。具体的には、本例の線形補間法では、補正係数RCの水平方向における配置間隔を8倍に拡大し、補正係数RCの垂直方向における配置間隔を8倍に拡大する。これにより、水平方向に隣接して配置される補正係数RC間に、線形補間法によって補間された7個の補正係数RLが配置され、垂直方向に隣接して配置される補正係数RC間に、線形補間法によって補間された7個の補正係数RLが配置される。換言すると、補正係数テーブル14aには、有効画像データGDPにおける各ブロックMBの左上(1行1列目)の画素データGPに対応する補正係数RCのみが格納されている。すなわち、補正係数テーブル14aには、ブロックMB毎に対応して用意された補正係数RCのみが格納されている。そして、各ブロックMBの1行1列目の画素データGP以外の画素データGPに対応する補正係数は、線形補間法により補間された補正係数RLとなる。
詳述すると、図8(a)及び図8(b)に示すように、各ブロックMBの1行1列目の画素データGP以外の画素データGPに対応する補正係数RLは、処理対象の画素データGPの近傍に位置する4つの補正係数RCから線形補間によって算出される。具体的には、上記線形補間演算には、処理対象の画素データGP(白丸の配置された画素データ)を含むブロックMB1の左上の画素データGPに対応する補正係数RC1と、ブロックMB1と水平方向の後側で隣接する(図中右隣の)ブロックMB2に対応する補正係数RC2とが利用される。また、上記線形補間演算には、ブロックMB1と垂直方向の後側で隣接する(図中直下の)ブロックMB3(第6ブロック)に対応する補正係数RC3と、ブロックMB3と水平方向の後側で隣接する(図中右隣の)ブロックMB4に対応する補正係数RC4とが利用される。すなわち、各ブロックMBの1行1列目の画素データGP以外の画素データGPに対応する補正係数RLは、4つの補正係数RC1,RC2,RC3,RC4から線形補間によって算出される。以下の説明では、水平方向の線形補間間隔を水平線形補間間隔SUBHとし、垂直方向の線形補間間隔を垂直線形補間間隔SUBVとする。この水平線形補間間隔SUBHがブロックMBの水平サイズとなり、垂直線形補間間隔SUBVがブロックMBの垂直サイズとなる。換言すると、ブロックMBは、水平線形補間間隔SUBH及び垂直線形補間間隔SUBVによって規定されるサイズに設定されている。なお、本例の水平線形補間間隔SUBH及び垂直線形補間間隔SUBVは共に「8」となる。
図5(b)には、補正係数テーブル14aに格納された補正係数RCと線形補間法により補間された補正係数RLとを含む補正特性SP2が図中に実線で示されている。線形補間法では、補間後の各補正係数RL間の係数値が滑らかに遷移するように、各補正係数RC間を直線で結び、この直線上に等間隔に配置するように補正係数RLを補間する。このような線形補間法により、補正係数テーブル14aの64倍(=8×8倍)のサイズを持つ画像データGDPの各画素データGPに対応する補正係数を生成することができる。
但し、上述した補正特性SP2では、所定数の画素データGPを間引いた分だけ、理想の補正特性SP1に対してずれが生じている。このずれが大きくなると、画像データGDPに対して違和感のある(例えば、段差の目立つ)画像補正が行われることになる。
そこで、本例の補正係数演算回路47では、さらに、線形補間演算に用いる補正係数RC1〜RC4を補正するための補正値CRが算出される。これら補正係数RC1〜RC4に対する補正値CRは、例えば、補正対象の補正係数とその補正係数の水平方向における前後の補正係数RCとの大小に基づいて算出される。また、補正係数演算回路47では、各補正係数RC1〜RC4が補正値CRにより補正される。そして、補正係数演算回路47は、補正後の補正係数RC1〜RC4を用いて線形補間して、処理対象の画素データGPに対する補正係数PAを算出する。この補正係数PAは、補正回路49に供給される。
図6に示すように、以上説明した補正係数RC1〜RC4の補正処理により、補正特性SP2が補正特性SP3のように補正され、理想の補正特性SP1に近づく。これにより、画像データGDPに対して違和感のない画像補正を行うことができ、シェーディング補正の精度を向上させることができる。
次に、補正係数演算回路47の内部構成例について説明する。
図2に示すように、補正係数演算回路47は、読み出し回路51と、補正値算出回路52と、線形補間回路53とを有している。読み出し回路51には、水平カウンタ45からの水平カウント値HCTと、垂直カウンタ46からの垂直カウント値VCTと、水平同期信号HDと、垂直同期信号VDと、水平線形補間間隔SUBHと、垂直線形補間間隔SUBVとが入力される。読み出し回路51は、入力した各種信号に基づいて、処理対象の画素データGPの画像データGDPにおける座標位置に応じた補正係数RCを内部メモリ43から読み出すためのリードイネーブル信号RDEN及びリードアドレス信号RADを生成する。そして、読み出し回路51は、リードイネーブル信号RDEN及びリードアドレス信号RADを内部メモリ制御回路42に出力する。内部メモリ制御回路42は、Hレベルのリードイネーブル信号RDENに応答して、リードアドレス信号RADに応じた内部メモリ43の領域から補正係数RCを読み出し、読み出した補正係数RCを補正係数RD1,RD2として補正値算出回路52に出力する。
次に、図9に従って、読み出し回路51におけるリードイネーブル信号RDENにかかる処理の一例について説明する。
読み出し回路51は、まず、水平同期信号HDがアサートした(例えば、Hレベルになった)か否かを判定する(ステップS1)。例えば、読み出し回路51は、水平同期信号HDがアサートされた場合には、内部メモリ43からの補正係数RCの読み出しを許可するHレベルのリードイネーブル信号RDENを生成する(ステップS2)。その一方で、水平同期信号HDがアサートされていない場合には、次のステップS3に移行する。
続いて、読み出し回路51は、水平カウント値HCTが1以上3以下であるか否かを判定する(ステップS3)。例えば、読み出し回路51は、水平カウント値HCTが1以上3以下である場合にはHレベルのリードイネーブル信号RDENを生成する(ステップS2)。すなわち、読み出し回路51は、水平同期信号HDがアサートされてから画像データGDPの各ラインデータの1〜3列目の画素データを処理するまでの間、Hレベルのリードイネーブル信号RDENを生成する。その一方で、ステップS3において、水平カウント値HCTが1未満又は4以上である場合には、次のステップS4に移行する。
次いで、読み出し回路51は、水平カウント値HCTが水平線形補間間隔SUBHの倍数に所定画素数(ここでは、4)を加算した値と等しいか否かを判定する(ステップS4)。例えば、読み出し回路51は、HCT=SUBH×Y(Yは1以上の整数)+4の関係式を満たす場合には、Hレベルのリードイネーブル信号RDENを生成する。すなわち、読み出し回路51は、各ブロックMBの4列目の画素データGPを処理する際に、Hレベルのリードイネーブル信号RDENを生成する。その一方で、ステップS4において、HCT=SUBH×Y+4の関係式を満たさない場合には、読み出し回路51は、Lレベルのリードイネーブル信号RDENを生成する。
次に、図10に従って、読み出し回路51におけるリードアドレス信号RADにかかる処理の一例について説明する。
読み出し回路51は、まず、水平同期信号HDがアサートしたか、又は1ラインの処理終了を示す終了信号HWIがLレベルであるか否かを判定する(ステップS11)。例えば、読み出し回路51は、水平同期信号HDがアサートされた場合には、リードアドレス信号RADを初期値(ここでは、1)にリセットする(ステップS12)。また、読み出し回路51は、終了信号HWIが1ラインの処理終了を示すLレベルである場合には、リードアドレス信号RADを初期値にリセットする(ステップS12)。その一方で、水平同期信号HDがアサートされていない場合であって、且つ終了信号HWIがHレベルである場合には、次のステップS13に移行する。
続いて、読み出し回路51は、水平カウント値HCTが1以上3以下であるか否かを判定する(ステップS13)。例えば、読み出し回路51は、水平カウント値HCTが1以上3以下である場合には、水平カウント値HCTがカウントアップされる度にリードアドレス信号RADをインクリメントする(ステップS15)。その一方で、ステップS13において、水平カウント値HCTが1未満又は4以上である場合には、次のステップS14に移行する。
次いで、読み出し回路51は、水平カウント値HCTが以下の2つの式(1)、(2)を満たすか否かを判定する(ステップS14)。
HCT=SUBH×Y+4 …(1)
HCT<HW−SUBH×4 …(2)
例えば、読み出し回路51は、水平カウント値HCTが式(1)を満たし、且つ式(2)を満たす場合には、リードアドレス信号RADをインクリメントする。すなわち、水平カウント値HCTが、有効画像データGDPの水平有効画素数HWから水平線形補間間隔SUBHの4倍の画素数を引いた値よりも小さく、且つ、水平カウント値HCTが水平線形補間間隔SUBHの倍数に所定画素数(ここでは、4)を加算した値と等しい場合に、リードアドレス信号RADをインクリメントする。その一方で、水平カウント値HCTが式(1)、(2)のうち一方でも満たさない場合には、ステップS11に戻る。
図2に示すように、補正値算出回路52には、内部メモリ制御回路42からの補正係数RD1,RD2と併せて、リードイネーブル信号RDENが入力される。補正値算出回路52は、補正係数RD1,RD2に基づいて、線形補間演算に使用する4点の補正係数RC1〜RC4(図8参照)の各々に対する補正値CRを生成する。そして、補正値算出回路52は、入力した複数の補正係数RD1,RD2のうち線形補間演算に使用する補正係数を補正係数RDP3,RDQ3として線形補間回路53に出力するとともに、補正値CRを線形補間回路53に出力する。
ここで、補正値算出回路52の内部構成の一例について説明する。
図11に示すように、補正値算出回路52は、保持回路61,62と、補正値算出回路63,64と、フリップフロップ(FF)回路65〜68とを有している。
保持回路61は、内部メモリ43から読み出された補正係数RC(補正係数RD1)を順次読み込み、複数個(ここでは、5個)の補正係数RD1を順番に保持する。この保持回路61に保持される補正係数は、線形補間演算に使用する4つの補正係数RC1〜RC4のうち、上側の補正係数RC1,RC2に対する補正値CRaを算出するために必要な補正係数である。例えば、保持回路61は、補正対象の補正係数RC1(又は、補正係数RC2)と、その補正対象の補正係数の水平方向における前後2つずつの補正係数RCとの5つの補正係数を補正係数RDP1〜RDP5として保持する。
保持回路61は、保持した5つの補正係数RDP1〜RDP5を補正値算出回路63に出力する。補正値算出回路63は、5つの補正係数RDP1〜RDP5に基づいて、補正対象の補正係数RC1(又は、補正係数RC2)に対する補正値CRaを算出し、その補正値CRaをFF回路65の入力端子に出力する。FF回路65,66のクロック端子には、クロック信号CLKが入力される。FF回路65は、例えば、クロック信号CLKの立ち上がりエッジに応答して、補正値CRaをラッチし、ラッチしたレベルと等しい補正値CR2を出力する。FF回路66は、例えば、クロック信号CLKの立ち上がりエッジに応答して、入力端子に供給される補正値CR2をラッチし、ラッチしたレベルと等しい補正値CR1を出力する。
同様に、保持回路62は、内部メモリ43から読み出された補正係数RC(補正係数RD2)を順次読み込み、複数個(ここでは、5個)の補正係数RD2を順番に保持する。この保持回路62に保持される補正係数は、線形補間演算に使用する4つの補正係数RC1〜RC4のうち、下側の補正係数RC3,RC4に対する補正値CRbを算出するために必要な補正係数である。例えば、保持回路62は、補正対象の補正係数RC3(又は、補正係数RC4)と、その補正対象の補正係数の水平方向における前後2つずつの補正係数RCとの5つの補正係数を補正係数RDQ1〜RDQ5として保持する。
保持回路62は、保持した5つの補正係数RDQ1〜RDQ5を補正値算出回路64に出力する。補正値算出回路64は、5つの補正係数RDQ1〜RDQ5に基づいて、補正対象の補正係数RC3(又は、補正係数RC4)に対する補正値CRbを算出し、その補正値CRbをFF回路67の入力端子に出力する。FF回路67,68のクロック端子には、クロック信号CLKが入力される。FF回路67は、例えば、クロック信号CLKの立ち上がりエッジに応答して、補正値CRbをラッチし、ラッチしたレベルと等しい補正値CR4を出力する。FF回路68は、例えば、クロック信号CLKの立ち上がりエッジに応答して、入力端子に供給される補正値CR4をラッチし、ラッチしたレベルと等しい補正値CR3を出力する。
次に、図12(b)に示すように、ハッチングで示した位置の画素データGPが処理対象(シェーディング補正対象)の画素データGPcである場合の補正値算出回路52の処理の概要について説明する。なお、図12(a)は、図12(b)に示したラインデータL1〜L8の画素データGPに対してシェーディング補正処理を施す際に内部メモリ43に格納される補正係数RCを示している。また、図12(b)では、図12(a)に示した補正係数RC(補正係数V1〜V12)と有効画像データGDPの各画素データGPとの位置関係を示している。
図12(b)に示した例では、処理対象の画素データGPcが含まれるブロックMB1に対応する補正係数RC1(ここでは、補正係数V3)と、ブロックMB2〜MB4にそれぞれ対応する補正係数RC2〜RC4(ここでは、補正係数V4,V9,V10)とを、補正値CRにより補正する。さらに、補正後の補正係数RC1〜RC4を利用した線形補間演算により、画素データGPcに対応する補正係数PAを算出する。このため、補正係数演算回路47では、線形補間演算を実施する前に、補正値算出回路52において補正値CRの算出が行われる。
まず、保持回路61には、ブロックMB1に対応する補正対象の補正係数RC1(ここでは、補正係数V3)と、その補正対象の補正係数V3の水平方向の前後2つずつの補正係数V1,V2,V4,V5とが保持される。具体的には、保持回路61には、補正係数V1,V2,V3,V4,V5がこの順番で入力される。保持回路61は、例えば、入力した補正係数V1〜V5を、各保持部61A〜61Eに保持部61E,61D,61C,61B,61Aという順番で保持する。
詳述すると、まず、補正係数V1が補正係数RD1として保持回路61に入力されると、その補正係数V1が保持部61Eに保持される。続いて、補正係数V2が保持回路61に入力されると、保持部61Eから出力されている補正係数V1(補正係数RDP5)が保持部61Dに保持されるとともに、補正係数V2が保持部61Eに保持される。次いで、補正係数V3が保持回路61に入力されると、保持部61Dから出力されている補正係数V1(補正係数RDP4)が保持部61Cに保持され、保持部61Eから出力されている補正係数V2(補正係数RDP5)が保持部61Dに保持されるとともに、補正係数RD1として入力される補正係数V3が保持部61Eに保持される。以後も同様に、新たに入力される補正係数RD1が保持部61Eに保持され、その他の保持部61D〜61Aには直前の保持部61E〜61Bから出力されている補正係数RDP5〜RDP2が保持される。すなわち、保持回路61に入力された補正係数RD1は、保持部61E→61D→61C→61B→61Aという順番で順次保持される。これにより、補正係数V5が保持部61Eに保持されると、保持部61Dには補正係数V4、保持部61Cには補正係数V3、保持部61Bには補正係数V2、保持部61Aには補正係数V1がそれぞれ保持される。具体的には、保持部61Cには補正対象の補正係数V3が保持され、保持部61Bには、補正対象の補正係数V3に対応するブロックMBC1(第1ブロック)と水平方向の前側で隣接するブロックMBC2(第2ブロック)に対応する補正係数V2が保持される。保持部61Aには、ブロックMBC2と水平方向の前側で隣接するブロックMBC3(第3ブロック)に対応する補正係数V1が保持される。保持部61Dには、ブロックMBC1と水平方向の後側で隣接するブロックMBC4(第4ブロック)に対応する補正係数V4が保持される。保持部61Eには、ブロックMBC4と水平方向の後側で隣接するブロックMBC5(第5ブロック)に対応する補正係数V5が保持される。そして、保持部61A〜61Eは、保持した補正係数V1〜V5を補正係数RDP1〜RDP5としてそれぞれ出力する。
このとき、保持部61Cから出力される補正係数RDP3(ここでは、補正係数V3)、つまり補正対象の補正係数RDP3は、線形補間回路53にも出力される。なお、保持部61A〜61Eにおける補正係数V1〜V5の保持タイミングは、例えば、リードイネーブル信号RDENがHレベルであるときにクロック信号CLKが立ち上がるタイミングである。
補正値算出回路63は、補正係数V1〜V5を入力し、補正対象の補正係数V3と、その他の補正係数V1,V2,V4,V5との差分に基づいて、補正係数V3に対する補正値CRaを算出する。すなわち、補正値算出回路63は、補正係数RDP1〜RDP5を入力し、補正対象の補正係数RDP3と、その他の補正係数RDP1,RDP2,RDP4,RDP5との差分に基づいて、補正係数RDP3に対する補正値CRaを算出する。以下に、補正値CRaの算出方法の一例について説明する。
図13(a)に示すように、補正値算出回路63は、補正係数RDP3を基準として、補正係数RDP3とその前後の補正係数RDP1,RDP2,RDP4,RDP5との差分に基づいて、以下の式で示す判定値H1を算出する。
H1=α1×R1+α1×R2+α2×R3+α2×R4
H1=α1(R1+R2)+α2(R3+R4) …(3)
但し、1>α1>α2
R1=RDP2−RDP3
R2=RDP4−RDP3
R3=RDP1−RDP3
R4=RDP5−RDP3
上記式(3)におけるα1は、補正係数RDP3と、その補正係数RDP3と隣接する補正係数RDP2,RDP4との差分R1,R2に対する重み値である。また、式(3)におけるα2は、補正係数RDP3と、補正係数RDP1,RDP5との差分R3,R4に対する重み値である。すなわち、補正値算出回路63は、差分R1,R2に対して重み値α1で重み付けした値と、差分R3,R4に対して重み値α2で重み付けした値とを加算することにより、判定値H1を算出する。さらに、補正値算出回路63は、以下の式から補正値CRaを算出する。
CRa=H1×D …(4)
上記式(4)における係数Dは、補正係数RDP3のビット精度の1/2となる係数である。なお、重み値α1(第1重み値)及び重み値α2(第2重み値)は、任意の値に設定可能である。また、上記式(3)における右辺の第1項は第1演算結果の一例であり、式(3)における右辺の第2項は第2演算結果の一例である。
例えば、図13(b)に示した例では、補正係数RDP3と補正係数RDP2,RDP4,RDP5とが等しいため、差分R1,R2,R4がゼロになる。したがって、判定値H1及び補正値CRaは、以下の式で表わされる。
H1=α1(0+0)+α2(R3+0)
CRa=α2×R3×D
また、図13(c)に示した例では、補正係数RDP3と補正係数RDP4,RDP5とが等しいため、差分R2,R4がゼロになる。したがって、判定値H1及び補正値CRaは、以下の式で表わされる。
H1=α1(R1+0)+α2(R3+0)
CRa=(α1×R1+α2×R3)×D
このように算出された補正値CRaはFF回路65の入力端子に供給され、クロック信号CLKの立ち上がりエッジに応答して補正値CRaがFF回路65にラッチされる。その後、補正係数V3の右隣の補正係数V4に対する補正値CRaが同様に算出される。詳述すると、まず、補正係数V6が補正係数RD1として保持回路61に入力され、その補正係数V6が保持部61Eに保持される。このとき、保持部61A〜61Dには、直前の保持部61B〜61Eからそれぞれ出力されていた補正係数V2〜V5が保持される。そして、補正係数V2〜V6がそれぞれ補正係数RDP1〜RDP5として補正値算出回路63に供給される。このとき、補正対象の補正係数RDP3(ここでは、補正係数V4)は、線形補間回路53にも供給される。補正値算出回路63では、補正係数RDP1〜RDP5(つまり、補正係数V2〜V6)に基づいて、補正係数V4に対する補正値CRaが算出される。すると、その補正値CRaがFF回路65にラッチされるとともに、FF回路65から出力されていた補正値CR2(ここでは、補正係数V3に対する補正値CRa)がFF回路66にラッチされる。このため、FF回路66から出力される補正値CR1は、処理対象の画素データGPcの左上に位置する補正係数RC1(ここでは、補正係数V3)に対する補正値となる。また、FF回路65から出力される補正値CR2は、処理対象の画素データGPcの右上に位置する補正係数RC2(ここでは、補正係数V4)に対する補正値となる。
補正値算出回路52では、上述した処理と並行して、保持回路62、補正値算出回路64及びFF回路67,68において以下の処理が実施される。なお、保持回路62、補正値算出回路64及びFF回路67,68における処理は、保持回路61、補正値算出回路63及びFF回路65,66における上記処理と略同様であるため、簡略化して説明する。
まず、保持回路62には、ブロックMB3に対応する補正係数RC3(ここでは、補正係数V9)と、その補正対象の補正係数V9の前後2つずつの補正係数V7,V8,V10,V11とが保持される。具体的には、保持回路62には、補正係数V7,V8,V9,V10,V11がこの順番で補正係数RD2として入力される。保持回路62に入力された補正係数V7〜V11は、保持部62E→62D→62C→62B→62Aという順番で順次保持される。これにより、補正係数V11が保持部62Eに保持されると、保持部62Dには補正係数V10、保持部62Cには補正係数V9、保持部62Bには補正係数V8、保持部62Aには補正係数V7がそれぞれ保持される。そして、保持部62A〜62Eは、保持した補正係数V7〜V11を補正係数RDQ1〜RDQ5としてそれぞれ補正値算出回路64に出力する。このとき、保持部62Cから出力される補正係数RDQ3(ここでは、補正係数V9)、つまり補正対象の補正係数RDQ3は、線形補間回路53にも出力される。
補正値算出回路64は、補正対象の補正係数RDQ3(ここでは、補正係数V9)と、その他の補正係数RDQ1,RDQ2,RDQ4,RDQ5(ここでは、補正係数V7,V8,V10,V11)との差分に基づいて、以下の式で示す判定値H2を算出する。
H2=α1×R5+α1×R6+α2×R7+α2×R8
H2=α1(R5+R6)+α2(R7+R8) …(5)
但し、1>α1>α2
R5=RDQ2−RDQ3
R6=RDQ4−RDQ3
R7=RDQ1−RDQ3
R8=RDQ5−RDQ3
さらに、補正値算出回路64は、判定値H2に対して、補正係数RDQ3のビット精度の1/2となる係数Dを乗算して、補正係数RDQ3(ここでは、補正係数V9)に対する補正値CRbを算出する。そして、補正値算出回路64は、補正値CRbをFF回路67の入力端子に供給する。
補正値CRbは、クロック信号CLKの立ち上がりエッジに応答してFF回路67にラッチされる。その後、補正係数V9の右隣の補正係数V10に対する補正値CRbが同様に算出される。詳述すると、まず、補正係数V12が補正係数RD2として保持回路61に入力され、その補正係数V12が保持部62Eに保持される。このとき、保持部62A〜62Dには、直前の保持部62B〜62Eからそれぞれ出力されていた補正係数V8〜V11が保持される。そして、補正係数V8〜V12がそれぞれ補正係数RDQ1〜RDQ5として補正値算出回路64に供給される。このとき、補正対象の補正係数RDQ3(ここでは、補正係数V10)は、線形補間回路53にも供給される。補正値算出回路64では、補正係数RDQ1〜RDQ5(つまり、補正係数V8〜V12)に基づいて、補正係数V10に対する補正値CRbが算出される。すると、その補正値CRbがFF回路67にラッチされるとともに、FF回路67から出力されていた補正値CR4(ここでは、補正係数V9に対する補正値CRb)がFF回路68にラッチされる。このため、FF回路68から出力される補正値CR3は、処理対象の画素データGPcの左下に位置する補正係数RC3(ここでは、補正係数V9)に対する補正値となる。また、FF回路67から出力される補正値CR4は、処理対象の画素データGPcの右下に位置する補正係数RC4(ここでは、補正係数V10)に対する補正値となる。
以上説明した処理により、線形補間演算に使用する4つの補正係数RC1〜RC4(ここでは、補正係数V3,V4,V9,V10)に対する補正値CR1〜CR4(以下、総称する場合は「補正値CR」という。)が算出される。
線形補間回路53には、補正値CR1〜CR4と、補正係数RDP3,RDQ3と、水平カウント値HCTと、垂直カウント値VCTと、リードイネーブル信号RDENと、水平線形補間間隔SUBHと、垂直線形補間間隔SUBVとが入力される。線形補間回路53には、入力された補正係数RDP3,RDQ3が、線形補間演算に使用する4つの補正係数RC1〜RC4として保持される。先の図12の例を用いて具体的に説明すると、線形補間回路53には、補正係数V3,V4がこの順番で補正係数RDP3として入力されるとともに、補正係数V9,V10がこの順番で補正係数RDQ3として入力される。線形補間回路53は、例えば、入力した補正係数V3,V4を、各保持部53A,53Bに保持部53B,53Aという順番で保持するとともに、入力した補正係数V9,V10を、各保持部53C,53Dに保持部53D,53Cという順番で保持する。
詳述すると、まず、補正係数V3が補正係数RDP3として線形補間回路53に入力されると、その補正係数V3が保持部53Bに保持される。続いて、補正係数V4が補正係数RDP3として線形補間回路53に入力されると、保持部53Bから出力されている補正係数V3(補正係数RC1)が保持部53Aに保持されるとともに、補正係数V4(補正係数RC2)が保持部53Bに保持される。一方、上記補正係数V3の入力と並行して、補正係数V9が補正係数RDQ3として線形補間回路53に入力されると、その補正係数V9が保持部53Dに保持される。続いて、上記補正係数V4の入力と並行して、補正係数V10が補正係数RDQ3として線形補間回路53に入力されると、保持部53Dから出力されている補正係数V9(補正係数RC3)が保持部53Cに保持されるとともに、補正係数V10(補正係数RC4)が保持部53Dに保持される。これにより、保持部53Aには補正係数RC1(ここでは、補正係数V3)、保持部53Bには補正係数RC2(ここでは、補正係数V4)、保持部53Cには補正係数RC3(ここでは、補正係数V9)、保持部53Dには補正係数RC4(ここでは、補正係数V10)がそれぞれ保持される。
線形補間回路53は、保持部53Aに保持されている補正係数RC1に補正値CR1を加算して、補正係数RC1を補正した補正後係数PA1を生成する。同様に、線形補間回路53は、保持部53Bに保持されている補正係数RC2に補正値CR2を加算して補正後係数PA2を生成し、保持部53Cに保持されている補正係数RC3に補正値CR3を加算して補正後係数PA3を生成し、保持部53Dに保持されている補正係数RC4に補正値CR4を加算して補正後係数PA4を生成する。
線形補間回路53は、4つの補正後係数PA1〜PA4と、水平カウント値HCTと、垂直カウント値VCTと、水平線形補間間隔SUBHと、垂直線形補間間隔SUBVとに基づいて、画素データGPcに対する補正係数PAを線形補間にて算出する。線形補間回路53は、例えば、以下の式を用いて補正係数PAを算出する。
図2に示すように、線形補間回路53(補正係数演算回路47)で算出された補正係数PAは、補正回路49に供給される。なお、上述したように、補正回路49は、遅延回路44から供給される画像データGDd内の各画素データGPに対して、当該画素データGPに対応する補正係数PAを乗算して、シェーディング補正後の画素データを生成する。
なお、本実施形態において、線形補間回路53は、補正後係数算出回路及び係数算出回路の一例、補正係数RCは係数値の一例、補正係数RDP1,RDQ1は第2係数値の一例、補正係数RDP2,RDQ2は第1係数値の一例である。また、補正係数RDP4,RDQ4は第3係数値の一例、補正係数RDP5,RDQ5は第4係数値の一例である。
次に、シェーディング補正部32の動作について詳述する。
まず、図15に示す時刻t1において、DMAC32aは、シェーディング補正を開始する信号に応答して、Hレベルの要求信号REQと、メモリ14内の補正係数テーブル14aに格納された2ライン分の補正係数RCを読み出すためのアドレス信号ADDRとをメモリI/F40に出力する。続いて、メモリI/F40からHレベルの許可信号ACKがDMAC32aに供給されると、アドレス信号ADDRに応じたメモリ14の領域から2ライン分の(具体的には、ラインデータL1〜L16を含むブロックMBに対応する)補正係数RCがリードデータDATAとして読み出される。その後、内部メモリ制御回路42からHレベルのデータ要求DTENが入力されると、DMAC32aは、リードデータDATAをリードデータRDATAとして内部メモリ制御回路42に出力する。そして、リードデータRDATA、つまり2ライン分の補正係数RC(図12(a)に示した補正係数V1〜V12)が内部メモリ43に格納される。
一方、時刻t1において、フレームの開始を示す垂直同期信号VDがHレベルに遷移すると(アサインされると)、垂直カウント値VCTが「0」にリセットされ、水平カウント値HCTが1にリセットされ、リードアドレス信号RADが1にリセットされる。
続いて、時刻t2において、水平同期信号HDがHレベルに遷移すると(アサインされると)、Hレベルのリードイネーブル信号RDENが出力される。また、水平同期信号HDのアサインに応答して、垂直カウント値VCTが「1」にカウントアップされ、水平カウント値HCTが「1」にリセットされる。なお、時刻t2の直後に、画像データGDの左上(1行1列目)の画素データP1が遅延回路44に入力される。その後、遅延回路44には、クロック信号CLKの立ち上がりエッジ毎に画像データGDの画素データGPが1画素単位で、ラスタスキャン順に入力される。
水平同期信号HDのアサインに応答してHレベルに遷移したリードイネーブル信号RDENは、水平同期信号HDがHレベルの期間、及び水平カウント値HCTが「1」〜「3」までの期間にHレベルとなる。すなわち、リードイネーブル信号RDENは、時刻t2〜t6の期間、Hレベルとなる。このようにリードイネーブル信号RDENがHレベルの期間にクロック信号CLKが立ち上がると(時刻t3参照)、リードアドレス信号RADのアドレス値(ここでは、「1」)で指定される内部メモリ43の領域から2つ補正係数RC(ここでは、補正係数V1,V7)がそれぞれ補正係数RD1,RD2として読み出される。このとき、水平カウント値HCTが「1」であるため、リードアドレス信号RADが「2」にカウントアップされる。
続いて、リードイネーブル信号RDENがHレベルの期間にクロック信号CLKが立ち上がると(時刻t4参照)、「2」のリードアドレス信号RADに応じた2つの補正係数V2,V8がそれぞれ補正係数RD1,RD2として内部メモリ43から読み出される。このとき、水平カウント値HCTが「1」であるため、リードアドレス信号RADが「3」にカウントアップされる。なお、時刻t4におけるクロック信号CLKの立ち上がりエッジに応答して、水平カウント値HCTが「2」にカウントアップされる。その後も同様に、水平同期信号HDがLレベルに遷移した後は、クロック信号CLKの立ち上がりエッジ毎に水平カウント値HCTがカウントアップされる。
次いで、リードイネーブル信号RDENがHレベルの期間にクロック信号CLKが立ち上がると(時刻t5参照)、「3」のリードアドレス信号RADに応じた2つの補正係数V3,V9がそれぞれ補正係数RD1,RD2として内部メモリ43から読み出される。このとき、水平カウント値HCTが「2」であるため、リードアドレス信号RADが「4」にカウントアップされる。続いて、リードイネーブル信号RDENがHレベルの期間にクロック信号CLKが立ち上がると(時刻t6参照)、「4」のリードアドレス信号RADに応じた2つの補正係数V4,V10がそれぞれ補正係数RD1,RD2として内部メモリ43から読み出される。このとき、水平カウント値HCTが「3」であるため、リードアドレス信号RADが「5」にカウントアップされる。なお、リードイネーブル信号RDENがLレベルの期間にクロック信号CLKが立ち上がると(時刻t7)、補正係数RCの読み出しは停止される。この時刻t7では、水平カウント値HCTが「4」であるため、リードアドレス信号RADはカウントアップされない(図10のステップS14参照)。
以上説明したように、水平同期信号HDのアサイン直後には、「1」〜「4」のリードアドレス信号RADに応じた4つの補正係数RD1(ここでは、補正係数V1〜V4)及び4つの補正係数RD2(ここでは、補正係数V7〜V10)が連続して読み出される。
次に、図14を併せ参照して、補正値算出回路52における補正値算出処理について説明する。なお、説明の簡略化のために、補正係数RD1,RD2のうち補正係数RD1に関する処理についてのみ詳述する。ここでは、まず、補正係数RD1として入力される補正係数V1,V2に対する補正値CRaを算出する方法について説明する。
図14に示すように、水平同期信号HDがアサートすると(ステップS21:図15の時刻t2参照)、補正値算出回路52は、初期化処理を開始する(ステップS22)。初期化処理では、補正値算出回路52は、補正係数V1が補正係数RD1として読み出された後のクロック信号CLKの立ち上がりエッジに応答して、補正係数V1を保持部61A〜61Eに保持する(時刻t4参照)。このため、補正係数V1が補正係数RDP1〜RDP5として出力される。
続いて、補正値算出回路52は、次のクロック信号CLKの立ち上がりエッジ(時刻t5参照)に応答して、直前の保持部61B〜61Eから出力されていた補正係数V1を保持部61A〜61Dに保持するとともに、補正係数RD1として読み出された補正係数V2を保持部61Eに保持する。次いで、補正値算出回路52は、次のクロック信号CLKの立ち上がりエッジ(時刻t6参照)に応答して、直前の保持部61B〜61Dから出力されていた補正係数V1を保持部61A〜61Cに保持し、直前の保持部61Eから出力されていた補正係数V2を保持部61Dに保持する。さらに、上記立ち上がりエッジに応答して、補正係数RD1として読み出された補正係数V3を保持部61Eに保持する。このように、補正値算出回路52は、初期化処理の後に、直前の保持部61B〜61Eから出力されていた補正係数を後段の保持部61A〜61Dに保持するシフト処理と、新たに補正係数RD1として読み出された補正係数を保持部61Eに保持する処理とを2回行う前処理を実施する(ステップS23)。この前処理により、補正係数V1が補正係数RDP1〜RDP3として出力され、補正係数V2,V3が補正係数RDP4,RDP5としてそれぞれ出力される。
次に、補正値算出回路52は、補正係数RDP1〜RDP5に基づいて、上記式(3),(4)から補正値CRaを算出し、その補正値CRaをFF回路66に保持する(ステップS24)。すなわち、補正値算出回路52は、補正係数V1,V1,V1,V2,V3に基づいて、補正係数V1に対する補正値Cr1を算出する(時刻t7参照)。なお、ステップS24では、補正係数V7,V7,V7,V8,V9に基づいて、補正係数V7に対する補正値CRbが算出され、その補正値CRbがFF回路67に保持される。
続いて、補正値算出回路52は、時刻t7におけるクロック信号CLKの立ち上がりエッジに応答して、補正係数RDP2〜RDP5のシフト処理と、新たに補正係数RD1として読み出された補正係数V4を保持部61Eに保持する処理とを実施する(ステップS25)。
次いで、補正値算出回路52は、次のクロック信号CLKの立ち上がりエッジ(時刻t8参照)に応答して、直前のFF回路65から出力されている補正値CR2(ここでは、補正係数V1に対する補正値Cr1)をFF回路66に保持する(ステップS26)。このステップS26では、直前のFF回路67から出力されている補正値CR4(ここでは、補正係数V7に対する補正値CRb)がFF回路68に保持される。また、上記時刻t8におけるクロック信号CLKの立ち上がりエッジに応答して、補正値算出回路52は、補正係数V1,V1,V2,V3,V4に基づいて、補正係数V2に対する補正値Cr2を算出し、その補正値Cr2をFF回路65に保持する(ステップS27)。このステップS27では、補正係数V7,V7,V8,V9,V10に基づいて、補正係数V8に対する補正値CRbが算出され、その補正値CRbがFF回路67に保持される。
以上説明した処理により、補正係数V1に対する補正値Cr1がFF回路66から補正値CR1として出力され、補正係数V2に対する補正値Cr2がFF回路65から補正値CR2として出力される。また、補正係数V7に対する補正値CRbがFF回路68から補正値CR3として出力され、補正係数V8に対する補正値CRbがFF回路67から補正値CR4として出力される。
なお、上記初期化処理及び前処理は、以下の理由から実施される。詳述すると、各ラインデータの先頭のブロックMBでは、その先頭のブロックMBに対応する補正係数、つまり補正対象となる補正係数RDP3(ここでは、補正係数V1)よりも前の補正係数が存在しない。そこで、本例では、存在しない前の補正係数RDP1,RDP2を、各ラインデータの先頭のブロックMBに対応する補正係数(ここでは、補正係数V1)で置き換えるようにした。そして、この置き換えを行うために、初期化処理及び前処理を実施するようにした。
また、以上説明したように、補正係数V1,V2に対する補正値Cr1,Cr2を算出する処理では、4つの補正係数V1,V2,V3,V4が必要となる。このため、各ラインデータの先頭における処理では、4つの補正係数RD1(ここでは、補正係数V1,V2,V3,V4)を連続して読み出している(時刻t3〜t7参照)。
次に、時刻t9におけるクロック信号CLKの立ち上がりエッジに応答して、保持部53A〜53Dに補正係数V1,V2,V7,V8がそれぞれ保持される(図中の補正係数RC1〜RC4参照)。続いて、線形補間回路53は、補正係数V1に補正値Cr1を加算して補正後係数PA1(ここでは、補正後係数VC1)を算出し、補正係数V2に補正値Cr2を加算して補正後係数PA2(ここでは、補正後係数VC2)を算出する。また、線形補間回路53は、補正係数V7にその補正係数V7に対する補正値CRbを加算して補正後係数PA3(ここでは、補正後係数VC3)を算出し、補正係数V8にその補正係数V8に対する補正値CRbを加算して補正後係数PA4(ここでは、補正後係数VC4)を算出する。
次いで、線形補間回路53は、4つの補正後係数VC1〜VC4(補正後係数PA1〜PA4)を用いた線形補間演算により、画像データGDPの左上の画素データP1に対する補正係数PA(ここでは、補正係数C1)を算出する。続いて、補正回路49は、遅延回路44から入力する画素データP1に補正係数C1を乗算することにより、シェーディング補正後の画素データO1を生成する。このとき、出力イネーブル信号OUTENがHレベルであるため、補正回路49は、補正後の画素データO1を画像データGDcとして出力する。なお、本例における遅延回路44は、画像データGDを9クロック分だけ遅延させて、画像データGDdとして補正回路49に出力する。
以後も同様に、画像データGDの左上のブロックMB内の画素データP2〜P8に対する補正係数C2〜C8(補正係数PA)が、補正後係数VC1,VC2,VC7,VC8を用いた線形補間演算により算出される。そして、それら補正係数C2〜C8により画素データP2〜P8がシェーディング補正される。
一方、図14に示したステップS28において、補正値算出回路52は、ブロックMB毎の更新タイミングが到来したか否かを判定する。例えば、補正値算出回路52は、水平カウント値HCTが水平線形補間間隔SUBHの倍数に所定画素数(ここでは、3)を加算した値と等しいか否かを判定する、つまりHCT=SUBH×Y(Yは1以上の整数)+3の関係式を満たすか否かを判定する。このとき、上記関係式を満たさない場合には、補正値算出回路52は、1ラインの補正値算出処理が終了したか否かを判定し(ステップS29)、1ラインの補正値算出処理が終了していない場合にはステップS28に戻る。すなわち、上記関係式を満たすまで、又は1ラインの補正値算出処理が終了するまで、ステップS28とステップS29とが繰り返される。
続いて、時刻t10において、水平カウント値HCTが「11」となって上記関係式が満たされると、ステップS25に戻り、ステップS25〜S27の処理が実行される。すなわち、補正係数V3に対する補正値Cr3を算出する処理が開始される。
次いで、水平カウント値HCTが「12」になると、HCT=SUBH×Y+4という関係式が満たされるため、リードイネーブル信号RDENがHレベルに遷移する。その後、リードイネーブル信号RDENがHレベルである期間にクロック信号CLKが立ち上がると(時刻t11参照)、「5」のリードアドレス信号RADに応じた2つの補正係数V5,V11がそれぞれ補正係数RD1,RD2として内部メモリ43から読み出される。このとき、水平カウント値HCTが「12」であり、上記式(1),(2)を共に満たすため、リードアドレス信号RADが「6」にカウントアップされる。
続いて、補正値算出回路52は、次のクロック信号CLKの立ち上がりエッジに応答して、直前の保持部61B〜61Eから出力されていた補正係数V1〜V4を保持部61A〜61Dに保持するとともに、補正係数V5を保持部61Eに保持する(ステップS25)。次いで、補正値算出回路52は、次のクロック信号CLKの立ち上がりエッジ(時刻t12参照)に応答して、直前のFF回路65から出力されている補正値CR2(ここでは、補正係数V2に対する補正値Cr2)をFF回路66に保持する(ステップS26)。また、補正値算出回路52は、補正係数V1〜V5に基づいて、補正係数V3に対する補正値Cr3を算出し、その補正値Cr3をFF回路65に保持する(ステップS27)。これにより、補正係数V2に対する補正値Cr2が補正値CR1として出力され、補正係数V3に対する補正値Cr3が補正値CR2として出力される。
また、線形補間回路53は、上記時刻t12におけるクロック信号CLKの立ち上がりエッジに応答して、直前の保持部53Bから出力されていた補正係数RC2(ここでは、補正係数V2)を保持部53Aに保持するとともに、新たに入力される補正係数RDP3(ここでは、補正係数V3)を保持部53Bに保持する。同様に、線形補間回路53は、直前の保持部53Dから出力されていた補正係数RC4(ここでは、補正係数V8)を保持部53Cに保持するとともに、新たに入力される補正係数RDQ3(ここでは、補正係数V9)を保持部53Dに保持する。
続いて、線形補間回路53は、補正係数V2に補正値Cr2を加算して補正後係数VC2を生成し、補正係数V3に補正値Cr3を加算して補正後係数VC3を生成する。また、線形補間回路53は、補正係数V8,V9にそれらに対応する補正値CR3,CR4を加算して補正後係数VC8,VC9を生成する。
続いて、時刻t13におけるクロック信号CLKの立ち上がりエッジに応答して、補正後係数VC2,VC3,VC8,VC9を用いた線形補間演算により、画素データP9に対する補正係数C9を算出する。以後も同様に、上記先頭のブロックの右隣のブロック(図12(b)において補正係数V2が配置されたブロック)内の画素データP10〜P16に対する補正係数C10〜C16が、補正後係数VC2,VC3,VC8,VC9を用いた線形補間演算により算出される。
以上説明したように、各ラインデータの2番目以降のブロックMBに対するシェーディング補正処理では、直前のブロックMBに対する処理時に使用された補正係数RC2,RC4及び補正値CR2,CR4が補正係数RC1,RC3及び補正値CR1,CR3としてそれぞれ利用される。このため、各ラインデータの2番目以降のブロックMBに対するシェーディング補正処理では、2点の補正係数RD1,RD2のみが読み出される。
以後も同様に、ブロックMB毎に補正後係数PA1〜PA4が算出され、それら補正後係数PA1〜PA4に基づいてブロックMB内の各画素データGPに対する補正係数PAが算出される。そして、補正係数PAによりブロックMB内の各画素データGPがシェーディング補正される。
その後、時刻t14の後に、水平カウント値HCTが「20」となって、HCT=SUBH×Y+4の関係式が満たされると、リードイネーブル信号RDENがHレベルに遷移する。このリードイネーブル信号RDENがHレベルである期間にクロック信号CLKが立ち上がると、「6」のリードアドレス信号RADに応じた2つの補正係数V6,V12がそれぞれ補正係数RD1,RD2として内部メモリ43から読み出される。このとき、水平カウント値HCTが「20」であり、上記式(1)は満たすが、上記式(2)を満たさないため、リードアドレス信号RADはインクリメントされずに「6」のまま維持される。
続いて、図16に示す時刻t15において、リードイネーブル信号RDENがHレベルに遷移すると、「6」のリードアドレス信号RADに応じた2つの補正係数V6,V12が再度読み出される。すると、補正係数V5に対する補正値Cr5が、5つの補正係数V3,V4,V5,V6,V6(補正係数RDP1〜RDP5)を用いた上記式(3),(4)により算出される。
このように各ラインの最後の補正係数(ここでは、補正係数V6)よりも後の補正係数が存在しない場合には、各ラインの先頭のブロックMBに対する処理と同様に、その存在しない補正係数(ここでは、補正係数RDP5)を、各ラインの最後の補正係数(ここでは、補正係数V6)で置き換えるようにした。このため、その後もリードアドレス信号RADが「6」に維持され、リードイネーブル信号RDENがHレベルに遷移する度に、補正係数V6,V12が再度読み出される。
これにより、図17の時刻t16に示すように、補正係数V6に対する補正値Cr6が、5つの補正係数V4,V5,V6,V6,V6を用いた上記式(3),(4)により算出される。
その後、時刻t17において水平カウント値HCTが「48」となって、終了信号HWIが1ラインの処理終了を示すLレベルに遷移する(図14に示したステップS29でYES)。すると、リードアドレス信号RADが初期値である「1」にリセットされる。また、図14に示したステップS30において、1フレームの画像データGDに対する補正値算出処理が終了したか否かが判定される。このとき、1フレームの画像データGDPに対する補正値算出処理が終了していない場合には、ステップS21に戻り、水平同期信号HDがアサインされるまで待つ。
続いて、時刻t18において、水平同期信号HDがアサインされ、ラインデータL2の処理が開始されると、垂直カウント値VCTが「2」にカウントアップされ、水平カウント値HCTが「1」にリセットされる。また、ラインデータL2の処理開始時には、4つの補正係数V1,V2,V3,V4が連続して読み出されるとともに、4つの補正係数V7,V8,V9,V10が連続して読み出される。そして、ラインデータL1における処理と同様に、ブロックMB毎に補正後係数PA1〜PA4が算出され、それら補正後係数PA1〜PA4に基づいてブロックMB内の各画素データGPに対する補正係数PAが算出される。そして、補正係数PAによりブロックMB内の各画素データGPがシェーディング補正される。
なお、補正値算出回路52における補正値算出処理では、1フレームの画像データGDに対する補正値算出処理が終了するまで、図14に示したステップS21〜S30が繰り返し実行される。また、図示は省略するが、垂直カウント値VCTが「9」となって、VCT=SUBV×Y+1という関係式が満たされると、アドレス信号ADDRがインクリメントされ、次の2ライン分の補正係数RC(例えば、補正係数V7〜V18)が補正係数テーブル14aから読み出される。すなわち、垂直線形補間間隔SUBV毎に、内部メモリ43に格納された補正係数RCが更新される。
なお、以上説明した処理では、画像データGDPが単色の画像である場合を想定しているが、図3(b)に示すように画像データGDPが複数の色情報を持つカラー画像であっても、その画像データGDPに対して同様にシェーディング補正処理を施すことができる。この場合のメモリ14には、複数の色情報毎に異なる補正係数RCが格納されている。すなわち、メモリ14には、R成分の色情報を持つ画素データGPに対する補正係数RCと、Gr成分の色情報を持つ画素データGPに対する補正係数RCと、B成分の色情報を持つ画素データGPに対する補正係数RCと、Gb成分の色情報を持つ画素データGPに対する補正係数RCとが個別に格納されている。
以上説明した本実施形態によれば、以下の効果を奏することができる。
(1)補正対象の画素データGPcの近傍の4点の補正係数RC1〜RC4を補正値CR1〜CR4によりそれぞれ補正して補正後係数PA1〜PA4を生成するようにした。そして、それら4点の補正後係数PA1〜PA4に基づいて、線形補間により画素データGPcに対する補正係数PAを算出するようにした。また、補正値CR1を、補正対象の補正係数RC1と、その補正係数RC1の水平方向における前後2つずつの補正係数RCとの大小関係に基づいて算出するようにした。なお、補正値CR2〜CR4についても補正値CR1と同様に算出するようにした。このように算出された補正値CR1〜CR4により補正係数RC1〜RC4を補正することで、補正係数RC1〜RC4の前後における補正特性の傾向(増加傾向や減少傾向等)を補正後係数PA1〜PA4に反映させることができる。このため、補正後係数PA1〜PA4による補正特性SP3(図6の実線参照)は、補正特性SP2(図5(b)の実線参照)よりも理想の補正特性SP1(図6の破線曲線参照)に近づき、補正特性SP2よりも滑らかな特性となる。すなわち、曲線である補正特性SP1における補正係数の変化に近づくように、補正値CRにより補正係数RCが補正される。これにより、補正係数RCに比べて、補正後係数PA1〜PA4のビット精度を擬似的に向上させることができる。したがって、その補正後係数PA1〜PA4を用いて画像データGDPに対してシェーディング補正することにより、画像データGDPに対して違和感の少ない画像補正を行うことができ、シェーディング補正の補正精度を向上させることができる。
(2)また、メモリ14の補正係数テーブル14aには、画像データGDPから所定数の画素データGPを間引いた後の画素データGPに対する補正係数RCのみを格納するようにした。このため、画像データGDPの各画素データGPに対して補正係数を用意する場合に比べて、補正係数RCのデータ量を減らすことができる。これにより、メモリ14の大容量化を抑制することができる。さらに、メモリ14から読み出す補正係数RCのデータ量を減らすことができるため、補正係数RCの読み出し処理に費やすメモリ帯域を減らすことができる。
(3)上述したように、補正値CRにより補正係数RCを補正することにより、補正後係数PA1〜PA4のビット精度を擬似的に向上させることができる。このため、高い補正精度を維持しながら、補正係数RCのビット精度を下げることができる。これにより、補正係数RCの読み出し処理に費やすメモリ帯域をより減らすことができる。
(4)上記式(3)により算出された判定値H1に対して、補正対象の補正係数RCのビット精度の1/2となる係数Dを乗算して補正値CRを算出するようにした。この係数Dを乗算することにより、補正後係数PA1〜PA4をビット精度の範囲から逸脱しない値に制限することができる。
(他の実施形態)
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・上記実施形態では、画像データGDPの水平方向における先頭のブロックMBに対応する補正係数RC(例えば、補正係数V1)が補正対象である場合には、補正係数RDP1(第2係数値)と補正係数RDP2(第1係数値)を補正対象の補正係数RCで置き換えて、補正値CRを算出するようにした。これに限らず、例えば、補正係数RDP1,RDP2を省略して、補正対象の補正係数RC(補正係数RDP3)と、補正係数RDP4,RDP5との大小関係に基づいて補正値CRを算出するようにしてもよい。
・上記実施形態では、画像データGDPの水平方向における最後のブロックMBに対応する補正係数RC(例えば、補正係数V6)が補正対象である場合には、補正係数RDP4(第3係数値)と補正係数RDP5(第4係数値)を補正対象の補正係数RCで置き換えて、補正値CRを算出するようにした。これに限らず、例えば、補正係数RDP4,RDP5を省略して、補正対象の補正係数RC(補正係数RDP3)と、補正係数RDP1,RDP2との大小関係に基づいて補正値CRを算出するようにしてもよい。
・上記実施形態では、補正値CRを算出する際に、比較対象の係数値として4個の補正係数RDP1,RDP2,RDP4,RDP5(又は、補正係数RDQ1,RDQ2,RDQ4,RDQ5)を使用するようにした。この比較対象の係数値の数は特に限定されない。例えば、比較対象の係数値を2個としてもよい。この場合には、例えば、上記実施形態における補正係数RDP1,RDP5(又は、補正係数RDQ1,RDQ5)を省略し、補正対象の補正係数RDP3と、その補正係数RDP3の水平方向における前後の補正係数RDP2,RDP3との大小関係に基づいて補正値CRを算出する。また、例えば、比較対象の係数値を6個としてもよい。この場合には、例えば、補正対象の補正係数RCと、補正対象の補正係数RCの水平方向の前後3つずつの合計6個の補正係数RCとの大小関係に基づいて補正値CRを算出する。
・上記実施形態では、垂直線形補間間隔SUBVと水平線形補間間隔SUBHとによって規定されるブロックMBのサイズは特に限定されない。すなわち、垂直線形補間間隔SUBV及び水平線形補間間隔SUBHは、任意の値に設定可能である。但し、垂直線形補間間隔SUBV及び水平線形補間間隔SUBHの少なくとも一方は、「2」以上の値に設定される。
例えば、垂直線形補間間隔SUBVと水平線形補間間隔SUBHとを異なる値に設定するようにしてもよい。例えば、垂直線形補間間隔SUBVを「1」に設定し、水平線形補間間隔SUBHを「8」に設定してもよい。この場合に、補正後係数PA3,PA4を省略し、補正後係数PA1,PA2のみを用いた線形補間により補正係数PAを算出するようにしてもよい。すなわち、この場合には、補正係数RC3,RC4の読み出し処理、及び補正値CR3,CR4の算出処理が省略される。
・上記実施形態では、画像データGDPに対する補正処理としてシェーディング補正処理に具体化した。これに限らず、例えば、シェーディング補正処理以外の補正処理に適用してもよい。