図1を参照して、この実施例のディジタルカメラ(電子カメラ)10は、光学レンズ12を含む。被写界の光学像は、光学レンズ12を介してCCDイメージャ14の撮像面に照射される。撮像面は、R(Red),G(Green)またはB(Blue)のフィルタ要素がベイヤ態様で配列された色フィルタ14fによって覆われる。
このため、Rの色情報を有する電荷はRのフィルタ要素によって覆われた受光素子であるR画素で生成され、Gの色情報を有する電荷はGのフィルタ要素によって覆われた受光素子であるG画素で生成され、そしてBの色情報を有する電荷はBのフィルタ要素によって覆われた受光素子であるB画素で生成される。
キー入力装置32によって撮影操作が行われると、TG(Timing Generator)18がCPU30によって起動される。TG18は、水平同期信号Hsyncおよび垂直同期信号Vsyncを含む複数のタイミング信号を発生する。ドライバ16aおよび16bの各々は、かかるタイミング信号に応答してCCDイメージャ14を駆動する。これによって、1フレームに相当する電荷つまり生画像信号が、垂直同期信号Vsyncが発生する毎に、CCDイメージャ14から出力される。
図2を参照して、CCDイメージャ14の撮像面は、左側撮像領域IMLおよび右側撮像領域IMRを有する。左側撮像領域IMLは、撮像面の中心から垂直方向に伸びる境界線BLの左側に形成され、右側撮像領域IMRは、同じ境界線BLの右側に形成される。つまり、左側撮像領域IMLおよび右側撮像領域IMRは、境界線BLで互いに接する。
左側撮像領域IMLおよび右側撮像領域IMRの各々には、図示しない複数の垂直転送レジスタが割り当てられる。また、左側撮像領域IMLには水平転送レジスタHLが割り当てられ、右側撮像領域IMRには水平転送レジスタHRが割り当てられる。さらに、水平転送レジスタHLの出力端にはアンプAPLが設けられ、水平転送レジスタHRの出力端にはアンプAPRが設けられる。
したがって、左側撮像領域IML上の複数の受光素子で生成された電荷は、図示しない垂直転送レジスタ,水平転送レジスタHLおよびアンプAPLを介して、チャネルCH1から出力される。右側撮像領域IMR上の複数の受光素子で生成された電荷も同様に、図示しない垂直転送レジスタ,水平転送レジスタHRおよびアンプAPRを介して、チャネルCH2から出力される。
つまり、ドライバ16aは、TG18からのタイミング信号に基づいて左側撮像領域IMLにラスタ走査を施し、左側1/2フレームの生画像信号をチャネルCH1から出力する。ドライバ16bも同様に、TG18からのタイミング信号に基づいて右側撮像領域IMRにラスタ走査を施し、右側1/2フレームの生画像信号をチャネルCH2から出力する。
ただし、水平転送レジスタHRの転送方向は、水平転送レジスタHLの転送方向と逆の方向である。このため、ラスタ走査方向もまた、左側撮像領域IMLおよび右側撮像領域IMRの間で互いに反転する。
CDS/AGC/AD回路20aは、チャネルCH1の生画像信号に相関2重サンプリング,自動ゲイン調整およびA/D変換の一連の処理を施す。同様に、CDS/AGC/AD回路20bは、チャネルCH2の生画像信号に相関2重サンプリング,自動ゲイン調整およびA/D変換の一連の処理を施す。なお、CDS/AGC/AD回路20aおよび20bも、TG18から出力されたタイミング信号に同期して、上述の処理を行う。
クランプ回路22aは、CDS/AGC/AD回路20aから出力された生画像データの基準レベルを、レベル調整回路24によって設定された黒レベルに合わせる。クランプ回路22bも同様に、CDS/AGC/AD回路20bから出力された生画像データの基準レベルを、レベル調整回路24によって設定された黒レベルに合わせる。
クランプ回路22aから出力された生画像データは、メモリ制御回路38によってSDRAM36に書き込まれる。また、クランプ回路22bから出力された生画像データは、LUT(Look Up Table)28rによるR成分のゲイン調整,LUT28gによるG成分のゲイン調整およびLUT28bによるB成分のゲイン調整を経て、メモリ制御回路38によってSDRAM36に書き込まれる。
SDRAM36は、図3に示すように生画像領域36a,YUV画像領域36bおよび圧縮画像領域36cを有する。メモリ制御回路38は、チャネルCH1の生画像データを生画像領域36aの左側に格納し、チャネルCH2の生画像データを生画像領域36aの右側に格納する。こうして生画像領域36aに格納された生画像データは、撮像された1フレームの被写界像を表す。また、LUT28r,28gおよび28bによるゲイン調整によってチャネルCH1およびCH2の間での生画像データのゲイン差が解消され、境界線の出現が防止される。
なお、クランプ回路22aおよび22bの各々から出力される生画像データは12ビットで表現される。このため、LUT28r,28gおよび28bの各々は、4096個の設定値を有する。
後処理回路40は、このような生画像データをメモリ制御回路38を通してSDRAM36から読み出し、読み出された生画像データに色分離,YUV変換などの処理を施し、そしてYUV形式の画像データをメモリ制御回路38を通してYUV画像領域36bに書き込む。JPEGコーデック42は、YUV画像領域36bに格納された画像データをメモリ制御回路38を通して読み出し、読み出された画像データにJPEG圧縮を施し、そして圧縮画像データをメモリ制御回路38を通して圧縮画像領域36cに書き込む。このような圧縮動作は、垂直同期信号Vsyncが発生する毎に実行される。
CPU30は、圧縮画像領域36cに蓄積された圧縮画像データをメモリ制御回路38を通して読み出し、読み出された圧縮画像データをI/F44を通して記録媒体46に記録する。こうして、複数フレームの圧縮画像データを収めた動画像ファイルが記録媒体46に形成される。
図4を参照して、クランプ回路22aに入力されるチャネルCH1の生画像データのR成分,G成分およびB成分がそれぞれ入射光量に対して曲線C1rin,C1ginおよびC1binを描く場合、クランプ回路22aから出力されるチャネルCH1の生画像データのR成分,G成分およびB成分はそれぞれ入射光量に対して曲線C1rout,C1goutおよびC1boutを描く。また、クランプ回路22bに入力されるチャネルCH2の生画像データのR成分,G成分およびB成分がそれぞれ入射光量に対して曲線C2rin,C2ginおよびC2binを描く場合、クランプ回路22bから出力されるチャネルCH2の生画像データのR成分,G成分およびB成分はそれぞれ入射光量に対して曲線C2rout,C2goutおよびC2boutを描く。
アンプAPLおよびAPRの増幅特性の相違から、生画像データの黒レベルおよびゲインもまたチャネルCH1およびCH2の間で相違する。このうち黒レベルのずれが、クランプ回路22a,22bおよびレベル調整回路24によって解消される。
なお、図4によれば、複数のレベル域LV1〜LV10が生画像データのダイナミックレンジに割り当てられる。このうち、レベル域LV1〜LV4は低輝度範囲(第1明るさ範囲)を形成し、レベル域LV5〜LV10は高輝度範囲(第2明るさ範囲)を形成する。
チャネルCH1およびCH2の間のゲインのずれは、次の要領で解消される。クランプ回路22aから出力された生画像データはブロック演算回路26aに与えられ、クランプ回路22bから出力された生画像データはブロック演算回路26bに与えられる。図5を参照して、ブロック演算回路26aは、境界線BLに近接するように左側撮像領域IMLに割り当てられた境界ブロックB1L,B2L,…BnLの各々に属する小画像について、高周波成分の色毎の積算値と画像レベルの色毎の平均値を求める。ブロック演算回路26bは、境界線BLに近接するように右側撮像領域IMRに割り当てられた境界ブロックB1R,B2R,…BnRの各々に属する小画像について、高周波成分の色毎の積分値と画像レベルの色毎の平均値を求める。
ブロック演算回路26aおよび26bの各々は、詳しくは、図6に示すように構成される。クランプ回路22aまたは22bから出力された生画像データは、ブロック抽出回路46に与えられる。ブロック抽出回路46は、境界ブロックB1L〜BnLの各々あるいは境界ブロックB1R〜BnRの各々に属する生画像データを抽出する。
R差分値算出回路48は、抽出された生画像データのうち隣り合うR画素の差分値であるR差分値を算出する。G差分値算出回路50は、抽出された生画像データのうち隣り合うG画素の差分値であるG差分値を算出する。抽出された生画像データのうち隣り合うB画素の差分値であるB差分値を算出する。
積算回路54は算出されたR差分値の絶対値を境界ブロック毎に積算し、積算回路56は算出されたG差分値の絶対値を境界ブロック毎に積算し、そして積算回路58は算出されたB差分値の絶対値を境界ブロック毎に積算する。これによって、同じ境界ブロックに対応する積算値Rh,GhおよびBhが、積算回路54,56および58からそれぞれ出力される。
R平均値算出回路60は、ブロック抽出回路46からの生画像データのうちR画素のレベルを境界ブロック毎に平均し、G平均値算出回路62は、ブロック抽出回路46からの生画像データのうちG画素のレベルを境界ブロック毎に平均し、そしてB平均値算出回路64は、ブロック抽出回路46からの生画像データのうちB画素のレベルを境界ブロック毎に平均する。これによって、同じ境界ブロックに対応する平均値Rav,GavおよびBavが、R平均値算出回路60,G平均値算出回路62およびB平均値算出回路64からそれぞれ出力される。
図1に戻って、ブロック演算回路26aおよび26bの各々は、こうして算出された積算値Rh,Gh,Bhおよび平均値Rav,Gav,BavをCPU30に与える。CPU30はまず、互いに隣接する2つの境界ブロックBKLおよびBKR(K:1〜n)の小画像が平坦であるか否かを判別する。
注目する2つの境界ブロックの各々で求められた積算値Rhが閾値TH未満であれば、これらの境界ブロックに属する小画像のR成分は平坦であると判別される。注目する2つの境界ブロックの各々で求められた積算値Ghが閾値TH未満であれば、これらの境界ブロックに属する小画像のG成分は平坦であると判別される。注目する2つの境界ブロックの各々で求められた積算値Bhが閾値TH未満であれば、これらの境界ブロックに属する小画像のB成分は平坦であると判別される。
CPU30は、R成分が平坦であると判別された2つの境界ブロックのうち境界ブロックBKRで求められた積分値Rhを閾値THrと比較し、G成分が平坦であると判別された2つの境界ブロックのうち境界ブロックBKRで求められた積分値Ghを閾値THgと比較し、そしてB成分が平坦であると判別された2つの境界ブロックのうち境界ブロックBKRで求められた積分値Bhを閾値THbと比較する。なお、閾値THr,THgおよびTHbは、図4に示す低輝度範囲の最大値を示す。
積分値Rhが閾値THrを下回るときはR成分によって再現される画像は暗いと判別され、積分値Rhが閾値THr以上のときはR成分によって再現される画像は明るいと判別される。同様に、積分値Ghが閾値THgを下回るときはG成分によって再現される画像は暗いと判別され、積分値Ghが閾値THg以上のときはG成分によって再現される画像は明るいと判別される。さらに、積分値Bhが閾値THbを下回るときはB成分によって再現される画像は暗いと判別され、積分値Bhが閾値THb以上のときはB成分によって再現される画像は明るいと判別される。
R成分に基づく画像が暗いと判別されたとき、CPU30は、注目する2つの境界ブロックからそれぞれ求められた2つの平均値Ravに基づいて差分値ΔRavを算出する。また、G成分に基づく画像が暗いと判別されたとき、CPU30は、注目する2つの境界ブロックからそれぞれ求められた2つの平均値Gavに基づいて差分値ΔGavを算出する。さらに、B成分に基づく画像が暗いと判別されたとき、CPU30は、注目する2つの境界ブロックからそれぞれ求められた2つの平均値Bavに基づいて差分値ΔBavを算出する。
差分値ΔRavは、境界ブロックBKLの平均値Ravから境界ブロックBKRの平均値Ravを引き算することによって求められ、差分値ΔGavは、境界ブロックBKLの平均値Gavから境界ブロックBKRの平均値Gavを引き算することによって求められ、差分値ΔBavは、境界ブロックBKLの平均値Bavから境界ブロックBKRの平均値Bavを引き算することによって求められる。
こうして求められた差分値ΔRav,ΔGav,ΔBavおよび境界ブックBKRで求められた平均値Rav,Gav,Bavは、図7に示す低輝度用レジスタ34aに書き込まれる。図7によれば、レベル域LV1〜LV4の各々に5つの欄が割り当てられる。平均値Rav,Gav,Bavの各々は、自分が属するレベル域の欄に、数値が小さい方から順に書き込まれる。差分値ΔRav,ΔGav,ΔBavはそれぞれ、関連する平均値Rav,Gav,Bavに割り当てられる。
たとえば、境界ブロックBKRの平均値Rav,GavおよびBavがそれぞれレベル域LV3,LV4およびLV1に属する場合、平均値Ravおよびこれに関連する差分値ΔRavは低輝度用レジスタ34aのレベル域LV3の欄に書き込まれ、平均値Gavおよびこれに関連する差分値ΔGavは低輝度用レジスタ34aのレベル域LV4の欄に書き込まれ、そして平均値Bavおよびこれに関連する差分値ΔBavは低輝度用レジスタ34aのレベル域LV1の欄に書き込まれる。
低輝度用レジスタ34aの全ての欄が数値によって埋められると、低輝度用レジスタ34aが完成する。CPU30は、低輝度レジスタ34aに書き込まれた20個の差分値ΔRavに補間演算を施して低輝度用R補正データを作成し、低輝度レジスタ34aに書き込まれた20個の差分値ΔGavに補間演算を施して低輝度用G補正データを作成し、そして低輝度レジスタ34aに書き込まれた20個の差分値ΔBavに補間演算を施して低輝度用B補正データを作成する。
クランプ回路22aから出力されたチャネルCH1の生画像データのR成分,G成分およびB成分が図4に示す曲線C1rout,C1goutおよびC1boutを描き、クランプ回路22bから出力されたチャネルCH2の生画像データが図4に示す曲線C2rout,C2goutおよびC2boutを描く場合、低輝度用R補正データ,低輝度用G補正データおよび低輝度用B補正データはそれぞれ図8に示す曲線Cr,CgおよびCbを描く。
曲線Cr,CbおよびCgの各々は、チャネルCH1の生画像データからチャネルCH2の生画像データを減算して得られた差分画像データがチャネルCH2の生画像データに対してどのように変化するかを示す特性曲線に等しい。
CPU30は、低輝度用R補正データの値をLUT28rの低輝度デフォルト設定値に加算し、低輝度用G補正データの値をLUT28gの低輝度デフォルト設定値に加算し、そして低輝度用B補正データの値をLUT28bの低輝度デフォルト設定値に加算する。
R成分に基づく画像が明るいと判別されたとき、CPU30は、注目する2つの境界ブロックからそれぞれ求められた2つの平均値Ravを高輝度用レジスタ34bに書き込む。同様に、G成分に基づく画像が明るいと判別されたとき、CPU30は、注目する2つの境界ブロックからそれぞれ求められた2つの平均値Gavを高輝度用レジスタ34bに書き込む。さらに、B成分に基づく画像が明るいと判別されたとき、CPU30は、注目する2つの境界ブロックからそれぞれ求められた2つの平均値Bavを高輝度用レジスタ34bに書き込む。
左側撮像領域IMLに属する境界ブロックの平均値Rav,GavまたはBavは図9に示す高輝度用レジスタ34bの左側領域の欄に書き込まれ、右側撮像領域IMRに属する境界ブロックの平均値Rav,GavまたはBavは高輝度用レジスタ34bの右側領域の欄に書き込まれる。なお、高輝度用レジスタ34bはリングバッファの機能を有し、平均値Rav,GavおよびBavの書き込み先は循環的に更新される。
CPU30は続いて、高輝度用レジスタ34bの左側領域の欄に設定された平均値Rav,GavおよびBavの各々に最小2乗法に従う演算を施して、チャネルCH1の生画像データにおけるRゲイン特性,Gゲイン特性およびBゲイン特性をそれぞれ示す3つの1次関数F1r,F1gおよびF1bを特定する。
CPU30はまた、高輝度用レジスタ34bの右側領域の欄に設定された平均値Rav,GavおよびBavの各々に最小2乗法に従う演算を施して、チャネルCH2の生画像データにおけるRゲイン特性,Gゲイン特性およびBゲイン特性をそれぞれ示す3つの1次関数F2r,F2gおよびF2bを特定する。
たとえば、R画素レベル,G画素レベルまたはB画素レベルの各々が左側撮像領域IMLの水平方向において図10(A)に示すように変化した場合、1次関数F1r,F1gまたはF1bは同じ図10(A)に示す直線を描く。また、R画素レベル,G画素レベルまたはB画素レベルの各々が右側撮像領域IMRの水平方向において図10(B)に示すように変化した場合、1次関数F2r,F2gまたはF2bは同じ図10(B)に示す直線を描く。
CPU30は、右側撮像領域IMRで生成された電荷にチャネルCH1における一連の処理を施したときに得られるであろう生画像データの高輝度範囲に属する複数のRゲイン,複数のGゲインおよび複数のBゲインを、1次関数F1r,F1gおよびF1bに従う補外演算によって推定する。CPU30はまた、チャネルCH1の生画像データの高輝度範囲に属する複数のRゲイン,複数のGゲインおよび複数のBゲインを、1次関数F2r,F2gまたはF2bに従う補外演算によって推定する。こうして推定されたゲインを有するR画素,G画素およびB画素は、右側撮像領域IMRの水平方向において図10(C)に示すように分布する。
CPU30はその後、1次関数F1rに基づく複数のRゲインから1次関数F2rに基づく複数のRゲインをそれぞれ引き算して、複数のRゲイン差によって表される高輝度用R補正データを作成する。CPU30はまた、1次関数F1gに基づく複数のGゲインから1次関数F2gに基づく複数のGゲインを引き算して、複数のGゲイン差によって表される高輝度用G補正データを作成する。CPU30はさらに、1次関数F1bに基づく複数のBゲインから1次関数F2bに基づく複数のBゲインを引き算して、複数のBゲイン差によって形成される高輝度用B補正データを作成する。作成された高輝度用R補正データ,高輝度用G補正データおよび高輝度用B補正データは、図4に示す高輝度範囲にわたる。
CPU30は、高輝度用R補正データの値をLUT28rの高輝度デフォルト設定値に加算し、高輝度用G補正データの値をLUT28gの高輝度デフォルト設定値に加算し、そして高輝度用B補正データの値をLUT28bの高輝度デフォルト設定値に加算する。
LUT28rのデフォルト設定値,LUT28gのデフォルト設定値およびLUT28bのデフォルト設定値がそれぞれクランプ回路22bの出力に対して図11に示す曲線TSr,TSgおよびTSbを描く場合、上述の低輝度用R補正データ,低輝度用G補正データ,低輝度用B補正データ,高輝度用R補正データ,高輝度用G補正データおよび高輝度用B補正データが加算されると、LUT28rの設定値,LUT28gの設定値およびLUT28bの設定値はそれぞれ、図11に示す曲線TMr,TMgおよびTMbを描く。この結果、生画像データのゲインは、チャネルCH1およびCH2の間でほぼ一致することとなる。
LUT28r,28gおよび28bの設定値を調整するとき、CPU30は、図12〜図18に示すフロー図に従う処理を実行する。なお、このフロー図に対応する制御プログラムは、フラッシュメモリ48に記憶される。
まずステップS1およびS3で高輝度用レジスタ34bおよび低輝度用レジスタ34aをクリアし、ステップS5で変数Kを“0”に設定する。ステップS7では垂直同期信号Vsyncが発生したか否かを判断し、YESであればステップS9で変数Kをインクリメントする。ステップS11では、変数Kが所定値nを上回ったかどうかを判別する。ここでNOであればステップS11に進み、YESであればステップS17に進む。
ステップS13では境界ブロックBKLの積算値Rh,Gh,Bhおよび平均値Rav,Gav,Bavをブロック演算回路26aから取り込み、ステップS15では境界ブロックBKRの積算値Rh,Gh,Bhおよび平均値Rav,Gav,Bavをブロック演算回路26bから取り込む。
ステップS23では、取り込まれた2つの積算値Rhが平坦度条件を満足するか否かを判別する。具体的には、取り込まれた2つの積分値Rhのいずれもが閾値TH未満であるか否かを判別する。この平坦度条件が満たされなければ、境界ブロックBKLに属するR成分によって再現される小画像および境界ブロックBKRに属するR成分によって再現される小画像の少なくとも一方が平坦画像ではないとみなし、ステップS47に進む。一方、この条件が満たされると、境界ブロックBKLおよびBKRの各々に属するR成分によって再現される小画像はいずれも平坦画像であるとみなし、ステップS25に進む。
ステップS25では、境界ブロックBKRの平均値Ravが閾値THrを上回るか否かを判別する。ここでNOであればステップS43に進み、境界ブロックBKLの平均値Ravから境界ブロックBKRの平均値Ravを引き算する。これによって、差分値ΔRavが求められる。ステップS45では、算出された差分値ΔRavと境界ブロックBKRの平均値Ravとを図7に示す低輝度用レジスタ34aに書き込む。書き込みが完了すると、ステップS47に進む。
ステップS25でYESであればステップS27に進み、境界ブロックBKLの平均値Ravを図9に示す高輝度用レジスタ34bの左側領域の欄に書き込む。ステップS29では、高輝度用レジスタ34bの左側領域の欄に書き込まれた複数の平均値Ravに最小2乗法に従う演算を施して、チャネルCH1の生画像データのRゲイン特性を示す1次関数F1rを特定する。
ステップS31では、境界ブロックBKRの平均値Ravを図9に示す高輝度用レジスタ34bの右側領域の欄に書き込む。ステップS33では、高輝度用レジスタ34bの右側領域の欄に書き込まれた複数の平均値Ravに最小2乗法に従う演算を施して、チャネルCH2の生画像データのRゲイン特性を示す1次関数F2rを特定する。
ステップS35では、こうして求められた2つの1次関数F1rおよびF2rに基づく補外演算処理を実行して、高輝度用R補正データを作成する。ステップS39では、作成された高輝度用R補正データが前回作成された高輝度用R補正データから大きく変動しているか否かを判別する。変動量が大きいときはステップS41に進み、作成された高輝度用R補正データをLUT28rの高輝度デフォルト設定値に加算する。ステップS41の処理が完了すると、ステップS47に進む。ステップS39でNOと判断されたときは、そのままステップS47に進む。
なお、1回目のステップS29の処理では1次関数F1rを特定することは不可能であり、1回目のステップS33の処理では1次関数F2rを特定することは不可能である。このため、この実施例では、1回目のステップS39で強制的にNOと判断する。
ステップS47〜S67の処理は、R成分に代えてG成分に注目する点を除き、上述のステップS23〜45と同じである。図14に示すステップS69〜S89の処理も、R成分に代えてB成分に注目する点を除き、上述のステップS23〜45と同じである。したがって、重複した説明は省略する。
なお、ステップS53ではチャネルCH1の生画像データのRゲイン特性を示す1次関数F1gが特定され、ステップS57ではチャネルCH2の生画像データのRゲイン特性を示す1次関数F2gが特定される。ステップS47またはS61でNOと判断されるか、あるいはステップS63またはS67の処理が完了すると、ステップS69に進む。
また、ステップS75ではチャネルCH1の生画像データのRゲイン特性を示す1次関数F1bが特定され、ステップS79ではチャネルCH2の生画像データのRゲイン特性を示す1次関数F2bが特定される。ステップS69またはS83でNOと判断されるか、あるいはステップS85またはS89の処理が完了すると、ステップS9に戻る。
図10に戻って、ステップS11でYESであれば、低輝度用レジスタ34aが完成したか否かをステップS17で判別する。低輝度用レジスタ34aは、全ての欄に数値が書き込まれたときに完成する。ここでNOと判断されるとステップS7に戻り、YESと判断されるとステップS19に進む。
ステップS19では、低輝度用レジスタ34aに設定された差分値ΔRavの補間演算によって低輝度用R補正データを作成し、低輝度用レジスタ34aに設定された差分値ΔGavの補間演算によって低輝度用G補正データを作成し、そして低輝度用レジスタ34aに設定された差分値ΔBavの補間演算によって低輝度用B補正データを作成する。
ステップS21では、作成された低輝度用R補正データをLUT28rの低輝度デフォルト設定値に加算し、作成された低輝度用G補正データをLUT28gの低輝度デフォルト設定値に加算し、そして作成された低輝度用B補正データをLUT28bの低輝度デフォルト設定値に加算する。ステップS21の処理が完了すると、ステップS1に戻る。
ステップS35の補外演算処理は、図16に示すサブルーチンに従って実行される。ステップS351では、右側撮像領域IMRで生成された電荷にチャネルCH1における一連の処理を施したときに得られるであろう生画像データの高輝度範囲に属する複数のRゲインを、1次関数F1rに従う補外演算によって推定する。ステップS353では、チャネルCH1の生画像データの高輝度範囲に属する複数のRゲインを、1次関数F2rに従う補外演算によって推定する。ステップS355では、ステップS351で求められた複数のRゲインからステップS353で求められた複数のRゲインをそれぞれ引き算し、高輝度用R補正データを算出する。ステップS355の処理が完了すると、上階層のルーチンに復帰する。
図14に示すステップS59の補外演算処理は図17に示すサブルーチンに従って実行され、図15に示すステップS81の補外演算処理は図18に示すサブルーチンに従って実行される。ただし、図17に示すステップS591〜S595の処理は、R成分に代えてG成分に注目する点を除き図16に示すステップS351〜S355の処理と同じである。また、図18に示すステップS811〜S815の処理は、R成分に代えてB成分に注目する点を除き図16に示すステップS351〜S355の処理と同じである。したがって、重複した説明は省略する。
以上の説明から分かるように、CCDイメージャ14は、左側撮像領域IMLおよび右側撮像領域IMRが形成された撮像面と、左側撮像領域IMLおよび右側撮像領域IMRにそれぞれ対応するチャネルCH1およびCH2とを有する。チャネルCH1およびCH2からそれぞれ出力された2つの部分画像の間のゲイン差は、LUT28r,28gおよび28bによって抑制される。抑制されたゲイン差を有する2つの部分画像は、メモリ制御回路38によって互いに結合される。
CPU30は、抑制処理を施される2つの部分画像の間のゲイン差を低輝度範囲について検出し(S43, S65, S87)、検出されたゲイン差に補間演算処理を施してLUT28r,28gおよび28bの低輝度設定値を補正する(S21)。
CPU30はまた、抑制処理を施される2つの部分画像の各々のゲインを高輝度範囲について検出し(S27, S31, S51, S55, S73, S77)、検出されたゲインに補外演算処理を施してLUT28r,28gおよび28bの高輝度設定値を補正する(S29, S33, S35, S41, S53, S57, S59, S63, S75, S79, S81, S85)。
このように、注目する輝度範囲が低輝度範囲であれば2つの部分画像の間のゲイン差が検出され、注目する輝度範囲が高輝度範囲であれば2つの部分画像の各々のゲインが検出される。また、低輝度範囲に関するLUT28r,28gおよび28bの動作特性は、検出されたゲイン差に対する補間演算処理によって補正され、高輝度範囲に関するLUT28r,28gおよび28bの動作特性は、検出されたゲインに対する補外演算処理によって補正される。
つまり、この実施例では、ゲインの変動態様が低輝度範囲と高輝度範囲とで異なることを考慮して、検出対象(ゲイン差,ゲイン)および補正方法(補間演算処理,補外演算処理)を低輝度範囲と高輝度範囲とで異ならせるようにしている。これによって、画像の境界線の出現をより効果的に防止することができる。
なお、この実施例では、LUT28r,28gおよび28bによるゲイン調整処理に先立ってクランプ処理を行うようにしているが、クランプ処理をゲイン調整処理の後に実行するようにしてもよい。また、この実施例では、撮像面に形成される部分撮像領域の数は2つであるが、部分撮像領域の数は3以上であってもよい。