以下、本発明の実施の形態を図面に基づいて説明する。
[第1実施形態]
図1は、第1実施形態に係るデータ処理装置としての情報処理装置のデータ処理系の構成を示すブロック図である。
図1において、情報処理装置は、RGB合計部01、RG二値化部02、G二値化部03を備えている。RG二値化部02は、RG累積誤差ラインバッファ04、RG累積誤差加算部05、RG閾値選択部06、RG量子化部07、RG誤差演算部08、RG誤差拡散部09を備えている。G二値化部03は、G累積誤差ラインバッファ10、G累積誤差加算部11、G閾値選択部12、G量子化部13、G誤差演算部14、RG誤差拡散部15を備えている。
各部の概略を説明する。RGB合計部01は、R・G・B各プレーン合計の画素データ(RGB合計データ)が入力される。RG累積誤差ラインバッファ04には、量子化誤差が格納されている。RG累積誤差加算部05は、RG合計データの横画素位置に対応する誤差を加算する。RG閾値選択部06は、閾値を選択する。RG量子化部07は、出力画素データとBフィルタの最終結果を決定する。RG誤差演算部08は、注目画素に誤差加算後の画素データと出力画素データとの差分を計算する。RG誤差拡散部09は、横画素位置に応じて誤差の拡散処理を行う。
G累積誤差ラインバッファ10には、量子化誤差が格納されている。G累積誤差加算部11は、入力画素データの横画素位置に対応する誤差を加算する。G閾値選択部12は、閾値を選択する。G量子化部13は、Rフィルタの最終二値化結果とGフィルタの最終二値化結果を決定する。G誤差演算部14は、注目画素に誤差加算後の画素データと出力画素データとの差分を計算する。RG誤差拡散部15は、横画素位置に応じて誤差の拡散処理を行う。
更に、情報処理装置は、不図示の制御部(第1の決定手段、作成手段、処理手段、第2の決定手段)を備えている。制御部は、プログラムに基づいて後述の各フローチャートに示す処理を実行する。情報処理装置による後述のカラーフィルタ配置決定処理とハーフトーン処理の対象とする撮像素子は、次の構造を有する。即ち、撮像素子は、光電変換素子群を備え、少なくとも二色以上(本実施の形態ではRGB三色)のカラーフィルタが所定の配列で各光電変換素子(画素)に対して配置される構造を有するカラーCCD撮像素子である。
カラーCCD撮像素子は、CCDカラーフィルタ(Rフィルタ・Gフィルタ・Bフィルタ)を有する。カラーフィルタの配置とは、カラーCCD撮像素子のCCDカラーフィルタの全領域(カラーフィルタ配置対象領域)に対してRフィルタ・Gフィルタ・Bフィルタを面積比率に応じて配置することである。カラーフィルタの配置は、カラーフィルタの各色毎の配置の空間周波数成分のうち低周波数領域では成分が少なく高周波数領域では成分が多い周波数特性を有する配置である。
本実施の形態では、誤差拡散法を用いてカラーCCD撮像素子のカラーフィルタの配置を決定する場合について説明する。また、後述の第2実施形態では、二値化手法を用いてカラーCCD撮像素子のカラーフィルタの配置を決定する場合について説明する。
次に、上記構成を有する本実施の形態の動作について図1乃至図5を参照しながら詳細に説明する。
図2は、本実施の形態の情報処理装置のカラーフィルタ配置決定処理を示すフローチャートである。
図2において、まず、情報処理装置の制御部は、カラーCCD撮像素子のCCDカラーフィルタの全領域(カラーフィルタ配置対象領域)に対するRフィルタ・Gフィルタ・Bフィルタの面積の割合を示す面積比率を決定する。本実施の形態では、人間の錐体の比率を考慮し、Rフィルタ・Gフィルタ・Bフィルタの面積比率(RGB比率)を(3:6:1)とする(ステップS21)。
次に、制御部は、上記決定したRGB比率に基づき、カラーCCD撮像素子のR・G・B各プレーン内の画素データが均一で、R・G・B各プレーンの画素データの合計が255となるような8ビットの画像データを作成する(ステップS22)。本実施の形態では、R・G・Bの比率が(3:6:1)であるため、R・G・B各プレーンの画素データは以下のようになる。
Rプレーンの画素データI_Rは、
I_R=2(ビット数)×(Rの比率)/(Rの比率+Gの比率+Bの比率) ・・・(1)=28×3/(3+6+1)≒76
Gプレーンの画素データI_Gは、
I_G=2(ビット数)×(Gの比率)/(Rの比率+Gの比率+Bの比率) ・・・(2)=28×6/(3+6+1)=153
Bプレーンの画素データI_Bは、
I_B=2(ビット数)−(Rプレーンの画素データ+Gプレーンの画素データ) ・・・(3)=28−(76+153)=26
尚、上記作成した8ビットの画像データの横幅と縦幅は、配置したいCCDカラーフィルタの横数と縦数(フィルタの横と縦のサイズ)と同じとする。
次に、制御部は、上記R・G・B各プレーンのハーフトーン処理(中間階調を滑らかに表現する処理)を行う。ここでは、ハーフトーン処理後の階調値は2レベルの二値に変換する(ステップS23)。
ハーフトーン処理を行う多値の入力画像データを二値の画像データ(または二値以上で入力階調数より少ない階調数を有する画像データ)に変換する手法としては、R.Floydらによる誤差拡散法がある。“An adaptive algorithm for spatial gray scale”,SID International Symposium Digest of Technical Papers,vol4.3,1975,pp.36−37。尚、ハーフトーン処理の詳細については後述する。
次に、制御部は、上記ハーフトーン処理後の二値画像データ(0、255)を参照し、R・G・B各プレーンで255となっている画素に対し、Rフィルタ・Gフィルタ・Bフィルタを配置する(ステップS24)。以上で、CCDカラーフィルタの配置が完了する。
次に、上記ハーフトーン処理で用いる誤差拡散法について説明する。尚、本実施の形態では、特に断りのない限り、色分解処理後のR・G・B各プレーンの画像データは0〜255の8ビット画像データとする。
図3は、本実施の形態の情報処理装置のハーフトーン処理を示すフローチャートである。
図3において、R・G・B各プレーンの画像内の1画素について説明する。情報処理装置の制御部は、R・G・B各プレーンの画素データに対して二値化(量子化値0、255)を行う場合、以下のように行う。まず、制御部は、R・G・B各プレーン合計の画素データI_RGBを求める。次に、制御部は、R・G・B各プレーン合計の画素データI_RGBをRGB合計部01に入力する(ステップS31)。I_RGBは次の式で表される。
I_RGB=I_R+I_G+I_B ・・・(4)
次に、制御部は、RG二値化部02において、R・Gの2プレーン合計の画素データI_RGに対して誤差拡散処理を施し二値化(量子化値0、255)を行う。まず、制御部は、R・Gの2プレーン合計の画素データI_RGをRG二値化部02に入力する(ステップS32)。I_RGは次の式で表される。
I_RG=I_R+I_G ・・・(5)
誤差拡散係数が図4に示すように4係数(K1〜K4)ある場合、RG二値化部02のRG累積誤差ラインバッファ04には、以下の量子化誤差が格納されている。即ち、RG累積誤差ラインバッファ04には、1個の記憶領域E_RG0と、入力画像の横画素数Wと同数の記憶領域E_RG(x)(x=1〜W)とが含まれ、後述する方法で量子化誤差が格納されている。尚、RG累積誤差ラインバッファ04は、処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図5の51はRG累積誤差ラインバッファ04の詳細を示している。
次に、制御部は、RG累積誤差加算部05において、R・Gの2プレーン合計の画素データの横画素位置xに対応する誤差E_RG(x)を加算する(ステップS33)。即ち、入力された注目画素データI_RGの値は、累積誤差加算後の画素データをI_RG’とすると次の式で表される。
I_RG’=I_RG+E_RG(x) ・・・(6)
次に、制御部は、RG閾値選択部06において閾値T_RGを選択する(ステップS34)。その際、
t_RG=I_RGB−I_RG ・・・(7)
とおくと、閾値T_RGを次の式のように設定してもよい。
T_RG(t_RG)=128 ・・・(8)
(0≦t_RG≦255)
或いは、フィルタの生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_RGに応じて閾値T_RGを細かく変更してもよい。尚、I_RGB−I_RGは255以下となるので、本実施の形態ではT_RG(t_RG)=128をとる。
次に、制御部は、RG量子化部07において、誤差加算後の画素データI_RG’と閾値T(t_RG)とを比較し、出力画素データOut_RGとBフィルタの最終結果Out_Bを決定する。その規則は次の通りである。
Out_RG=0 ・・・(9)
Out_B=255 ・・・(10)
(I_RGB’<T(I_RG))
Out_RG=255 ・・・(11)
Out_B=0 ・・・(12)
(I_RG’≧T(I_RG))
上記(式9)〜(式11)により、R・Gの2プレーン合計の画素データの二値化(量子化値0、255)が決定する(ステップS35)。同時に、Out_Bの二値化(量子化値0、255)が決定する。即ち、この時点でBフィルタの最終結果Out_Bが確定することになる。尚、(式10)はBフィルタが配置されることを意味し、(式11)はBフィルタが配置されないことを意味する。
ここで、R・Gの2プレーン合計の画素データの二値化の意味を説明する。Out_RG=255とは、その場所(光電変換素子)にRフィルタ・Gフィルタのうちいずれか一方のフィルタが配置されることを意味する。即ち、Out_RG=255とは、その場所にRフィルタの配置が確定するわけでなく、Gフィルタの配置も確定しない。この時点で確定していることは、Rフィルタ・Gフィルタのうちどのフィルタが配置されるか分からないが、少なくともどれか1つのフィルタは配置されることが確定しているに過ぎない。
以上をまとめると以下のようになる。
Out_RG=0:Rフィルタ・Gフィルタのいずれも配置されないことが確定
即ち、Bフィルタが配置されることが確定
Out_RG=255:Rフィルタ・Gフィルタのいずれか1つが配置されることが確定
次に、制御部は、RG誤差演算部08において、注目画素データI_RGに誤差加算後の画素データI_RG’と出力画素データOut_RGとの差分Err_RGを、次の式により計算する(ステップS36)。
Err_RG(x)=I_RG’−Out_RG ・・・(13)
次に、制御部は、RG誤差拡散部09において、横画素位置xに応じて以下のように誤差Err_RG(x)の拡散処理を行う(ステップS37)。
E_RG(x+1)←E_RG(x+1)+Err_RG(x)×7/16(x<W)
E_RG(x―1)←E_RG(x―1)+Err_RG(x)×3/16(x>1)
E_RG(x)←E0_RG+Err_RG(x)×5/16(1<x<W)
E_RG(x)←E0_RG+Err_RG(x)×8/16(x=1)
E_RG(x)←E0_RG+Err_RG(x)×13/16(x=W)
E0_RG←E_RG×1/16(x<W)
E0_RG←0(x=W)
以上で、1画素分のRフィルタ・Gフィルタの2プレーン合計の画素データI_R’、I_G’に対して二値化(量子化値0、255)が完了する。同時に、Bフィルタの画素データI_B’の二値化(量子化値0、255)結果が確定する。
R・G2プレーン合計の画素データの二値化は、2プレーンのどのフィルタが配置されるか分からないが、少なくとも2プレーンのトータルで適切なフィルタ配置を確保することに目的がある。そして、Rフィルタ・Gフィルタを適切に配置した際の余りとして、Bフィルタの画素データI_B’の二値化結果が確定するわけである。
即ち、Rフィルタ・Gフィルタは適切な配置となり、結果としてBフィルタはRフィルタ・Gフィルタを適切に配置した際の余りものとなる。このようにする理由は、視覚的に目立たないBフィルタを適切に配置するよりも、Rフィルタ・Gフィルタを適切に配置した方が視覚的に良好な画像が得られるからである。
次に、制御部は、Gプレーンの画素データI_Gに対して誤差拡散処理を施し二値化を行う。まず、制御部は、Gプレーンの画素データI_GをG二値化部03に入力する(ステップS38)。
誤差拡散係数が図4に示すように4係数(K1〜K4)ある場合、G二値化部03のG累積誤差ラインバッファ10には、以下の量子化誤差が格納されている。即ち、G累積誤差ラインバッファ10には、1個の記憶領域E_G0と、入力画像の横画素数Wと同数の記憶領域E_G(x)(x=1〜W)とが含まれ、後述する方法で量子化誤差が格納されている。尚、G累積誤差ラインバッファ10は、処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図5の52はG累積誤差ラインバッファ10の詳細を示している。
次に、制御部は、G累積誤差加算部11において入力画素データの横画素位置xに対応する誤差E_G(x)を加算する(ステップS39)。即ち、入力された注目画素データI_Gの値は、累積誤差加算後のデータをI_G’とすると次の式で表される。
I_G’=I_G+E_G(x) ・・・(14)
次に、制御部は、G閾値選択部12において閾値T_Gを選択する(ステップS40)。その際、
t_G=I_RG−I_G ・・・(15)
とおくと、閾値T_Gを次の式のように設定してもよい。
T_G(t_G)=128
(0≦t_l≦255)
或いは、フィルタの生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_Gに応じて細かく変更してもよい。尚、I_RG−I_Gは255以下となるので、本実施の形態ではT_G(t_RG)=128をとる。
次に、制御部は、G量子化部13において誤差加算後の画素データI_G’と、閾値T_G(t_G)と、上記R・Gの2プレーン合計の画素データの二値化(量子化値0、255)結果Out_RGを比較する。そして、制御部は、Rフィルタ最終二値化結果Out_R、とGフィルタ最終二値化結果Out_Gを決定する(ステップS41)。その規則は次の通りである。
Out_G=Out_RG ・・・(16)
Out_R=0 ・・・(17)
(I_G’≧T(t_G))
Out_G=0 ・・・(18)
Out_R=Out_RG ・・・(19)
(I_G’<T(t_G))
上記(式16)〜(式19)により、Gプレーンの画素データOut_Gの二値化が決定すると同時に、Rプレーンの画素データOut_Rの二値化が決定する。即ち、Rフィルタの最終結果Out_RとGフィルタの最終結果Out_Gが同時に確定する。尚、(式16)はGフィルタが配置されることを意味し、(式18)はGフィルタが配置されないことを意味する。
次に、制御部は、G誤差演算部14において注目画素データI_Gに誤差加算後の画素データI_G’と出力画素データOut_Gとの差分Err_Gを、次のようにして計算する(ステップS42)。
Err_G(x)=I_G’−Out_G ・・・(20)
次に、制御部は、G誤差拡散部15において横画素位置xに応じて以下のように誤差Err_G(x)の拡散処理を行う(ステップS43)。
E_G(x+1)←E_G(x+1)+Err_G(x)×7/16(x<W)
E_G(x―1)←E_G(x―1)+Err_G(x)×3/16(x>1)
E_G(x)←E0_G+Err_G(x)×5/16(1<x<W)
E_G(x)←E0_G+Err_G(x)×8/16(x=1)
E_G(x)←E0_G+Err_G(x)×13/16(x=W)
E0_G←E_G×1/16(x<W)
E0_G←0(x=W)
以上で、1画素分のGフィルタ、Gプレーンの画素データI_G’に対して二値化(量子化値0、255)が完了する。同時に、Rフィルタ、Rプレーンの画素データI_R’の二値化(量子化値0、255)結果が確定する。
Gフィルタ、Gプレーンの画素データの二値化は、Gプレーンに適切な配置を確保することに目的がある。そして、Gフィルタの適切な配置の余りとして、Rフィルタの画素データI_R’の二値化結果が確定するわけである。即ち、Gフィルタは適切な配置となり、結果としてRフィルタはGフィルタを適切な配置とした余りものとなる。
このようにする理由は、視覚的に目立たないRフィルタを適切な配置とするよりも、Gフィルタを適切な配置とした方が視覚的に良好な画像が得られるからである。ただし、始めにRフィルタ・Gフィルタ・Bフィルタ合計の画素データを誤差拡散したため、Rフィルタ・Gフィルタ・Bフィルタのトータルで見れば適切な配置となっている。そのため、Rフィルタ・Gフィルタ・Bフィルタのトータルで適切な配置、視覚的に目立つGフィルタ単独で適切な配置となる。
以上をまとめると、本実施の形態のハーフトーン処理は、カラー撮像素子におけるRフィルタ・Gフィルタ・Bフィルタのトータルで適切な配置、Gフィルタ単独で適切な配置、となる特徴を有する。
以上の処理を全ての画素について行うことで(ステップS44)、本実施の形態のハーフトーン処理が終了する。
以上説明したように、本実施の形態によれば、カラーフィルタ配置を、カラーフィルタの各色毎の配置の空間周波数成分のうち低周波数領域では成分が少なく高周波数領域では成分が多い周波数特性を有する配置としている。即ち、ブルーノイズ特性を有するカラーフィルタ配置としている。Bayer配列等の規則的な配列でないカラーフィルタ配置により、周期的な輝度変化がある被写体でも、従来のような光学ローパスフィルタを用いることなく、色モアレの発生しないノイズの少ない画像のカラー撮像が可能となる。
[第2実施形態]
本発明の第2実施形態は、上記第1実施形態に対して、図6のフローチャートに示すハーフトーン処理を行う点において相違する。本実施の形態のその他の要素は、上記第1実施形態の対応するもの(図1の構成、図2のカラーフィルタ配置決定処理)と同一なので、説明を省略する。
ハーフトーン処理を行う多値の入力画像データを二値画像データとしてドット配置の分散性の高いもの、即ち、空間周波数特性として低周波側に成分を持たず高周波側のみに成分を持つものに変換する方法としては、次のものがある。例えばSulivanとMillerの米国特許第4,920,501号が知られている。ただし、前記の方法に限らず、他のブルーノイズ特性を有する画像データの作成方法として任意の方法を適用することができる。
次に、本実施の形態における上記ハーフトーン処理で用いる二値化手法について説明する。尚、本実施の形態では、特に断りのない限り、色分解処理後のR・G・B各プレーンの画像データは0〜255の8ビット画像データとする。
図6は、本実施の形態の情報処理装置のハーフトーン処理を示すフローチャートである。
図6において、R・G・B各プレーンの画素データに対して二値化(量子化値0、255)を行う場合、R・G・B各プレーン合計の画素データI_RGBを求める。まず、制御部は、R・G・B各プレーン合計の画素データI_RGBをRGB合計部01に入力する(ステップS61)。
I_RGB=I_R+I_G+I_B ・・・(25)
次に、制御部は、RG二値化部02においてR・Gの2プレーン合計の画素データI_RGに対して二値化処理を行い、R・Gの2プレーン合計の画素データを量子化(0、255)する。まず、制御部は、R・Gの2プレーン合計の画素データI_RGをRG二値化部02に入力する(ステップS62)。I_RGは次の式で表される。
I_RG=I_R+I_G ・・・(26)
次に、制御部は、RG二値化部02においてR・Gの2プレーン合計の画素データに対しSulivanとMillerの米国特許第4,920,501号に記載されている二値化処理を行う(ステップS63)。これにより、R・Gの2プレーン合計の画素データの量子化結果Out_RGが算出され、これと同時にBフィルタの画素データの最終出力値Out_Bが算出される。Out_Bは次の式により算出される。
Out_B=Out_RGB−Out_RG ・・・(27)
ここで、R・Gの2プレーン合計の画素データの二値化の意味を説明する。Out_RG=255とは、その場所(光電変換素子)にRフィルタ・Gフィルタのうちいずれか一方のフィルタが配置されることを意味する。即ち、Out_RG=255とは、その場所にRフィルタの配置が確定するわけでなく、Gフィルタの配置も確定しない。この時点で確定していることは、Rフィルタ・Gフィルタのうちどのフィルタが配置されるか分からないが、少なくともどれか1つのフィルタは配置されることが確定しているに過ぎない。
また、Out_RG=0とは、その場所(光電変換素子)にRフィルタ・Gフィルタのいずれも配置されないことを意味する。即ち、Out_RG=0とは、その場所にBフィルタが配置されることが確定される。
以上をまとめると以下のようになる。
Out_RG=0:Rフィルタ・Gフィルタのいずれも配置されないことが確定
即ち、Bフィルタが配置されることが確定
Out_RG=255:Rフィルタ・Gフィルタのいずれか1つが配置されることが確定
R・Gの2プレーン合計の画素データの二値化は、2プレーンのどのフィルタが配置されるか分からないが、少なくとも2プレーンのトータルで適切なフィルタ配置を確保することに目的がある。そして、Rフィルタ・Gフィルタを適切に配置した際の余りとして、Bフィルタの画素データI_Bの二値化結果が確定するわけである。
即ち、Rフィルタ・Gフィルタは適切な配置となり、結果としてBフィルタはRフィルタ・Gフィルタを適切に配置した際の余りものとなる。このようにする理由には、視覚的に目立たないBフィルタを適切に配置するよりも、Rフィルタ・Gフィルタを適切に配置した方が視覚的に良好な画像が得られるからである。
次に、制御部は、G二値化部03においてGプレーンの画素データI_Gに対して二値化処理を施し量子化(0、255)を行う。まず、制御部は、Gプレーンの画素データI_GをG二値化部03に入力する(ステップS64)。
次に、制御部は、Gプレーンの画素データに対しSulivanとMillerの米国特許第4,920,501号に記載されている二値化処理を行う(ステップS65)。
ただし、Gプレーンの画素データを量子化する場合は、以下の2つの条件が加わる。
1.Gプレーンの画素データの量子化値が255となる箇所は、Rフィルタ・Gフィタの2プレーン合計の画素データの量子化値が255となった個所に限定する。
2.Gプレーンの画素データの量子化値が0となる箇所は、Rフィルタ・Gフィルタの2プレーン合計の画素データの量子化値が0となった個所に限定する。
また、Gプレーンの画素データの量子化が決定されると、Rプレーンの画素データの量子化値Out_Rは次の式により求めることができる。
Out_R=Out_RG−Out_G ・・・(28)
以上で、1画素分のGフィルタ、Gプレーンの画素データI_Gに対して二値化(量子化値0、255)が完了する。同時に、Rフィルタ、Rプレーンの画素データI_Rの二値化(量子化値0、255)結果が確定する。
Gフィルタ、Gプレーンの画素データの二値化は、Gプレーンに適切な配置を確保することに目的がある。そして、Gフィルタの適切な配置の余りとして、Rフィルタの画素データI_Rの二値化結果が確定するわけである。即ち、Gフィルタは適切な配置となり、結果としてRフィルタはGフィルタを適切な配置とした余りものとなる。
このようにする理由は、視覚的に目立たないRフィルタを適切な配置とするよりも、Gフィルタを適切な配置とした方が視覚的に良好な画像が得られるからである。ただし、始めにRフィルタ・Gフィルタ・Bフィルタ合計の画素データを量子化したため、Rフィルタ・Gフィルタ・Bフィルタのトータルで見れば適切な配置となっている。そのため、Rフィルタ・Gフィルタ・Bフィルタのトータルで適切な配置、視覚的に目立つGフィルタ単独で適切な配置となる。
以上をまとめると、本実施の形態のハーフトーン処理は、カラー撮像素子におけるRフィルタ・Gフィルタ・Bフィルタのトータルで適切な配置、Gフィルタ単独で適切な配置、となる特徴を有する。
以上説明したように、本実施の形態によれば、上記第1実施形態と同様に色モアレの発生しないノイズの少ない画像のカラー撮像が可能となる。
上記第1および第2実施形態では、RGB三色のカラーフィルタ配置について説明したが、これに限定されるものではない。本発明は、二色以上のどのようなマルチカラーフィルタ配置についても適用することが可能である。
<第3実施形態>
図7は第3実施形態の撮像装置1の構成例を示すブロック図である。
撮像装置1は以下の構成を有する。光学部101はレンズや光学LPFなどで構成される。カラー撮像素子部102は、モザイク状に複数色配列されたカラーフィルタとCCDまたはCMOSなどの撮像素子とから構成される。画素補間部103はカラー撮像素子部102から出力されたモザイク状の画像情報を補間し、複数枚の独立したプレーン色画像情報を算出する。画像処理部105は、該独立したプレーン色画像情報に対して、色処理、ノイズ低減処理、鮮鋭性向上処理などの画像処理を行う。、画素補間パラメータ保持部104は、画素補間に必要なディジタルフィルタパラメータを保持する。画像処理パラメータ保持部106は、画像処理パラメータ(色処理パラメータ、ノイズ低減処理パラメータ、鮮鋭性向上処理パラメータなど)などのデータを保持する。メモリ部107は画像処理部105にて処理された画像を保持する。表示部108は液晶ディスプレイなどで構成され、撮影中や撮影後、画像処理後の画像などを表示する。なお、画素補間部103は、画素補間パラメータ保持部104に格納されたディジタルフィルタパラメータを用いて画素補間を行う。画像処理部105は、画像処理パラメータ保持部106に保持された画像処理パラメータを用いて画像処理を行う。データ出力部109には、ケーブルなどを介してプリンタを接続したり、メモリカードなどの記録媒体を接続することができる。
図8はカラー撮像素子部102の構成例を示す図である。本実施形態では、レッド(R)201、グリーン(G)202、ブルー(B)203の3色のカラーフィルタが該カラー撮像素子部102の各カラー撮像素子に貼り付けられている。
以下に、カラー撮像素子102のカラーフィルタ配列の決定法を、図9のフローチャートを用いて以下に説明する。
まず、カラーフィルタを配列する領域に対するRGBそれぞれのカラーフィルタの面積率を決定する(S101)。本実施形態では、視覚感度の比率に基づき、RGB比率をR:G:B=3:6:1とする。しかしながら、RGB比率はこれに限らず他の比率を用いても構わない。例えば、人間のLMS錐体比と同じようにしても良いし、Bayer配列のようにR:G:B=1:2:1としても良い。
次に、決定されたRGB比率に基づき、RGB各プレーン内の画素値が均一で、RGBプレーンの画素値の合計が255となるような8ビットの面積率画像を作成する(S102)。
本実施形態ではRGBの比率が(3:6:1)であるため、
Rの面積率I_Rは
I_R=2(ビット数)×(Rの比率)/(Rの比率+Gの比率+Bの比率)
=28×3/(3+6+1)≒76 ・・・(29)
Gの面積率I_Gは
I_G=2(ビット数)×(Gの比率)/(Rの比率+Gの比率+Bの比率)
=28×6/(3+6+1)=153 ・・・(30)
Bの面積率I_Bは
I_B=2(ビット数)−(Rプレーンの面積率値+Gプレーンの面積率値)
=28−(76+153)=26 ・・・(31)
とする。
尚、この画像の横幅Wと縦幅Hは配列したいカラー撮像素子の横数、縦数と同じか、それ以上の数とする。
面積率画像における各色のプレーンは画素値が面積率に応じた値で均一である。つまり、Rの面積率画像は、全ての画素値が76であるW*Hのサイズを有する画像である。Gの面積率画像は、全ての画素値が153であるW*Hのサイズを有する画像である。Bの面積率画像は、全ての画素値が26であるW*Hのサイズを有する画像である。
次に、配列の低周波成分を少なくするようカラーフィルタ配列を決定するための処理を行う(S103)。
以下、カラーフィルタ配列を決定するための処理S103の詳細について、図10のフローチャートおよび図11のブロック図を用いて説明する。本実施形態におけるカラーフィルタ配列処理には、R.Floydらによる誤差拡散法(“An adaptive algorithm for spatial gray scale”,SID International Symposium Digest of Technical Papers,vol4.3,1975,pp.36−37)を用いる。尚、本実施形態におけるRGBの面積率画像は0〜255の8ビット画像とする。
先ず、ステップS201において、RGB面積率合計データI_RGBをRGB合計部301に入力する。本実施形態では、RGB面積率合計データは255となる((29)(30)(31)の合計値)。
I_RGB=I_R+I_G+I_B ・・・(32)
次に、ステップS202において、RG面積率合計データI_RGをRG配列化部302に入力する。本実施形態では、RG面積率合計データは229となる((29)(30)の合計値)。
I_RG=I_R+I_G ・・・(33)
誤差拡散係数が図12のようにK1〜K4の4つの係数を持つ場合、図11のRG配列化部302におけるRG累積誤差ラインバッファ304は、1個の記憶領域E_RG0と入力画像の横画素数Wと同数の記憶領域E_RG(x)(0≦x≦W−1)とを有する。そして、RG累積誤差ラインバッファ304は後述する方法で量子化誤差を格納する。なお、RG累積誤差ラインバッファ304は処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図13の304はRG累積誤差ラインバッファ304の詳細を示した図である。
次に、ステップS203において、RG累積誤差加算部305を用いて、入力された着目画素(RG面積率合計データ)にRG面積率合計データの横画素位置xに対応する誤差E_RG(x)が加算される。即ち、入力された着目画素I_RGの値は、累積誤差加算後のデータをI_RG’とすると、
I_RG’=I_RG+E_RG(x) ・・・(34)
となる。
次に、ステップS204において、RG閾値選択部306が閾値T_RGを選択する。
その際、
t_RG=I_RGB−I_RG ・・・(35)
とおくと、閾値T_RGは、
T_RG(t_RG)=128 ・・・(36)
(0≦t_RG≦255)
と設定される。なお、配列生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_RGに応じて細かく変更しても良い。
次に、ステップS205において、RG量子化部307は誤差加算後のRG面積率合計データI_RG’と閾値T(t_RG)とを比較し、出力値Out_RGとBのカラーフィルタ配列Out_Bとを決定する。その規則は次の通りである。
I_RG’<T(I_RG)のとき ・・・(37)
Out_RG=0 ・・・(38)
Out_B=1 ・・・(39)
I_RG’≧T(I_RG)のとき ・・・(40)
Out_RG=1 ・・・(41)
Out_B=0 ・・・(42)
式(37)〜(42)を用いて、RG面積率合計データの配列Out_RG(量子化値0,1)が決定される。同時に、B面積率データの配列Out_B(量子化値0,1)が決定される。すなわち、この時点でBのカラーフィルタ配列の最終結果Out_Bが確定されたことになる。なお、Out_Bが1であることはBフィルタが配列されることを意味し、Out_Bが1であることはBフィルタが配列されないことを意味する。
ここでRG面積率合計データの配列化の意味を説明する。Out_RG=1は、その画素に、R・Gいずれかのカラーフィルタ一が配列されることを意味する。
すなわち、以下のようになる。
Out_RG=0
R、Gフィルタのいずれも配列されないことが確定。すなわち、Bフィルタが配列される事が確定。
Out_RG=1
R、Gフィルタのいずれか1つが配列される事が確定。
次に、ステップS206において、RG誤差演算部308が画素データI_RG’と出力値Out_RGとの差分Err_RGを、式(43)を用いて計算する。
Err_RG(x)=I_RG’−(Out_RG×255) ・・・(43)
次に、ステップS207において、RG誤差拡散部309が横画素位置xに応じて誤差Err_RG(x)を拡散する。RG誤差拡散部309は、処理画素の縦アドレスによって処理方向を変える。例えば縦アドレス(y(0≦y≦H−1))が2で割り切れるときは図12の401のように左から右へ処理し、式(44)を用いて誤差を拡散する。一方、縦アドレス(y(0≦y≦H−1))が2で割り切れないときは図12の402のように右から左へ処理し、式(45)を用いて誤差を拡散する。
y%2=0(0≦y≦H−1、%は剰余記号)のとき
E_RG(x+1)←E_RG(x+1)+Err_RG(x)×K1(x<W−1)
E_RG(x−1)←E_RG(x−1)+Err_RG(x)×K2(x>0)
E_RG(x)←E0_RG+Err_RG(x)×K3
E0_RG←E_RG×K4(x<W−1)
E0_RG←0(x=W−1)
・・・(44)
y%2=1 (0≦y≦H、%は剰余記号)のとき
E_RG(x−1)←E_RG(x−1)+Err_RG(x)×K1(x>0)
E_RG(x+1)←E_RG(x+1)+Err_RG(x)×K2(x<W−1)
E_RG(x)←E0_RG+Err_RG(x)×K3
E0_RG←E_RG×K4(x>0)
E0_RG←0(x=0)
・・・(45)
なお、本実施形態では、K1=7/16、K2=3/16、K3=5/16、K4=1/16とするが、t_RG、I_RGやI_Bに応じてK1〜K4を変化させても良い。
以上で、1画素分のRG面積率合計データI_RGに対しての配列Out_RG(量子化値0,1)が完了する。同時に、Bフィルタの配列Out_B(量子化値0,1)結果が確定する。
RG面積率合計データI_RGの配列化は、RGのいずれかのカラーフィルタが配列される画素を確定することができる。そして、RおよびGのカラーフィルタが配列されない画素を、Bのカラーフィルタが配列される画素として確定する。すなわち、R、GとBは同じ位置に配列されることはない。
次に、G面積率データI_Gに対して誤差拡散処理を施し配列化を行う。
まず、ステップS09において、G面積率データI_GをG配列化部303に入力する。
誤差拡散係数が図12のようにK1〜K4の4つの係数を持つ場合、図11のG配列化部303におけるG累積誤差ラインバッファ310は、RG累積誤差ラインバッファ304と同様の構成を有する。つまり、G累積誤差ラインバッファ310は、図13の310に示すように、1個の記憶領域E_G0と入力画像の横画素数Wと同数の記憶領域E_G(x)(x=0〜W−1)とを有し、量子化誤差を格納する。
次に、ステップS209において、G累積誤差加算部311を用いて、入力された着目画素(G面積率データ)値に、入力のG面積率データの横画素位置xに対応する誤差E_G(x)を加算する。累積誤差加算後のデータをI_G’は、入力された着目画素(G面積率データ)値I_Gから式(46)を用いて計算される。
I_G’=I_G+E_G(x) ・・・(46)
次に、ステップS210において、G閾値選択部312は、閾値T_Gを選択する。
その際、
t_G=I_RG−I_G ・・・(47)
とおくと、閾値T_Gは、
T_G(t_G)=128 ・・・(48)
(0≦t_G≦255)
と設定される。なお、配列生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_Gに応じて細かく変更しても良い。
次に、ステップS211において、G量子化部313は誤差加算後のG面積率データI_G’と閾値T_G(t_G)と前述のRG面積率合計データの配列化結果Out_RG(量子化値0,1)を比較し、Rフィルタ最終配列化結果Out_R、とGフィルタ最終配列化結果Out_Gを決定する。
その規則は次の通りである。
I_G’≧T(t_G)のとき ・・・(49)
Out_G=Out_RG ・・・(50)
Out_R=0 ・・・(51)
I_G’<T(t_G)のとき ・・・(52)
Out_G=0 ・・・(53)
Out_R=Out_RG ・・・(54)
式(49)〜(54)により、Gフィルタの配列化が決定すると同時にRフィルタの配列化が決定する。すなわち、Rフィルタ最終結果Out_RとGフィルタOut_Gが同時に確定する。なお、式(50)は、Gフィルタが、Out_RG=1の場合は配列され、Out_RG=0の場合は配列されないことを意味する。また、式(53)はGフィルタが配列されないことを意味する。
ここで重要なことは、(50)(51)や(53)(54)のように、結果の和が
Out_RG=Out_G+Out_R ・・・(55)
の条件を満たすことである。
すなわち、式(49)〜(54)のそれぞれを以下のように変形しても構わない。
Out_RG−I_G’≧ T(t_G)のとき ・・・(49)’
Out_G=0 ・・・(50)’
Out_R=Out_RG ・・・(51)’
Out_RG−I_G’<T(t_G)のとき ・・・(50)’
Out_G=Out_RG ・・・(53)
Out_R=0 ・・・(54)
式
次に、ステップS212において、G誤差演算部314が誤差加算後のG面積率データI_G’と出力値Out_Gとの差分Err_Gを、式(56)を用いて計算する。
Err_G(x)=I_G’−(Out_G×255) ・・・(56)
次に、ステップS213において、G誤差拡散部315が、横画素位置xに応じて誤差Err_G(x)を拡散する。G誤差拡散部315は、着目画素の縦アドレスに応じて処理方向を変える。例えば縦アドレス(y(0≦y≦H−1))が2で割り切れるときは図12の401のように左から右へ処理し、式(57)のように誤差を拡散する。一方、縦アドレス(y(0≦y≦H−1))が2で割り切れないときは図12の402のように右から左へ処理し、式(58)のように誤差を拡散する。
y%2=0(0≦y≦H−1、%は剰余記号)のとき
E_G(x+1)←E_G(x+1)+Err_G(x)×K1(x<W−1)
E_G(x−1)←E_G(x−1)+Err_G(x)×K2(x>0)
E_G(x)←E0_G+Err_G(x)×K3
E0_G←E_G×K4(x<W−1)
E0_G←0(x=W−1)
・・・(57)
y%2=1 (0≦y≦H、%は剰余記号)のとき
E_G(x−1)←E_G(x−1)+Err_G(x)×K1(x>0)
E_G(x+1)←E_G(x+1)+Err_G(x)×K2(x<W−1)
E_G(x)←E0_G+Err_G(x)×K3
E0_G←E_G×K4(x>0)
E0_G←0(x=0)
・・・(58)
なお、本実施形態では、K1=7/16、K2=3/16、K3=5/16、K4=1/16とするが、入力階調値t_GやI_Gに応じてK1〜K4を変化させても良い。
以上で、1画素分のGフィルタの配列化Out_G(量子化値0,1)が完了する。同時に、Rフィルタの配列化Out_R(量子化値0,1)結果が確定する。
次に、処理を全ての画素について行ったか判定を行い(S214)、全て行った場合は、ステップS103における本実施形態のカラーフィルタ配列処理が完了する。
本実施形態のカラーフィルタ配列処理によれば、Gのカラーフィルタを優先させて配列することができる。すなわち、優先させたいGフィルタ配列に対して、より低周波の少ない配列を確保することができる。そして、Gフィルタの余りとして、Rフィルタの配列化結果が確定するわけである。ただし、Rフィルタ配列についても誤差拡散処理を施した結果得られた配列なので、低周波で成分が少なく、高周波で帯域成分を持つ特性は得られる。
なお、本実施形態では優先させたいカラーフィルタ配列をGとしたが、どの色を優先させてもよい。
その結果、RGBのカラーフィルタ配列全てにおいて、低周波成分が少なく、高周波成分が多い特性を実現できる。さらには優先させたい色については、より低周波成分を少なくすることができるカラーフィルタ配列を決定することができる。
ここで、本実施形態によって決定されたカラーフィルタ配列、Bayer配列、特許文献1の手法によって作成されたカラーフィルタ配列(ランダム配列)の3種について、その配列、周波数特性、特徴を図14に示す。
図14の501、502、503はそれぞれ、Bayer配列、ランダム配列、本実施形態によって決められた配列である。なお、Bayer配列501はR:G:B=1:2:1の面積比を用いてカラーフィルタ配列を作成した。ランダム配列502、本実施形態によって決定されたカラーフィルタ配列503はR:G:B=3:6:1の面積比を用いてカラーフィルタ配列を作成した。また、上記3種のカラーフィルタ配列について、その周波数特性を示したものが同図中の504、505、506である。504は高周波に線スペクトルを有する。505は低周波・高周波共に豊富な成分を有する。一方、本実施形態で決定されたカラーフィルタ配列の周波数特性506は、低周波で成分が少なく、高周波で帯域成分を有する。
人間の視覚は「低周波に敏感、高周波に鈍感」という特性をもつので、画像ノイズ成分を抑えるには、カラーフィルタ配列の低周波成分を抑えなければならない。ランダム配列502は505に示されるように低周波に豊富な成分を有するのでノイズが多くなってしまう。一方、本実施形態によれば、低周波にほとんど成分を持たないため、ノイズは良好である。
また、高周波かつ規則的な画像パターンを撮像した際、モアレが発生してしまう現象は、高周波かつ規則的なパターンと、規則的なカラーフィルタ配列が干渉することによって発生する。そのため、特に高周波領域において規則性を持つ(=高周波で線スペクトルを持つ)Bayer配列501はモアレが発生しやすい。一方、本実施形態で決定されたカラーフィルタ配列は、高周波領域でランダム性を持つ(=高周波で帯域成分を持つ)ため、モアレが発生しにくい。
以上をまとめると、本実施形態で決定されたカラーフィルタ配列は、ノイズが少なく、モアレも少ないという特徴を持つ。
次に、上述の処理にてカラーフィルタ配列を得たカラー撮像素子部102を備えたカラー撮像装置1における処理について図7のブロック図及び図15のフローチャートを用いて説明する。
まず、ステップS301において、被写体像を形成する光線がレンズ、および光学LPFなどの光学部101を通過し、カラー撮像素子102に入力される。
次に、ステップS302において、カラー撮像素子部102のカラーフィルタにて特定の光波長帯域だけ通過し、カラー撮像素子にて光電変換され、さらにA/D変換することにより、離散信号値を得る。
本実施形態におけるカラーフィルタは、図8のレッド(R)201、グリーン(G)202、ブルー(B)203の3つの異なる分光感度を持ち、該カラーフィルタ配列は前述の通り、低周波で成分が少なく、高周波で帯域成分を持つものとする。
カラーフィルタは一つの受光面で色情報を得るため、被写体撮像によって得られた画像信号は、上記カラーフィルタ配列にしたがった単プレーン(1枚)の色情報RGB_m(x、y)となる。なお、本実施形態では得られた離散信号値は8ビット(0〜255)とするが、それ以上のビット数であってもよい。
次に、ステップS303において、上記カラーフィルタ配列によって得られた単プレーンの離散信号値RGB_m(x、y)から独立3プレーン画像R_p,G_p,B_pを得る。具体的には、画素補間パラメータ保持部104に保持された画素補間パラメータを用いて、画素補間部103にて各色信号に分離した分離画像R_m,G_m,B_mに対して画素補間処理を実施する。なお、画素補間パラメータ保持部104には、(51)(54)で求めたOut_R、(50)(53)で求めたOut_G、(39)(42)で求めたOut_Bのカラーフィルタ配列情報(0、1の1ビット情報)と、画素補間用ディジタルフィルタF_R、F_G、F_Bとが保持されている。
以下、本実施形態における、画素補間処理ステップS303について、図16のフローチャートおよび、図17の概念図を用いて説明する。
まず、ステップS401において、RGB_m(x、y)とOut_R(x,y)、Out_G(x,y)、Out_B(x,y)それぞれとの積をとることで分離画像R_m、G_m、B_mの各々を取得する。図17の601に分離画像G_mを示す。なお、601は緑葉を撮影したものである。
R_m(x,y)=RGB_m(x、y)×Out_R(x、y) (59)
G_m(x,y)=RGB_m(x、y)×Out_G(x、y) (60)
B_m(x,y)=RGB_m(x、y)×Out_B(x、y) (61)
次に、ステップS402において、画素補間用ディジタルフィルタF_R、F_G、F_Bの各々を用いて、分離画像R_m、G_m、B_mから画素補間後画像R_p,G_p,B_pを取得する(図17の602)。
なお、詳しくは後述するが、画素補間用ディジタルフィルタF_R、F_G、F_Bは、分離画像R_m,G_m,B_mの高周波における帯域成分を除去するよう設定される。
R_p(x,y)=R_m(x,y)*F_R ・・・(62)
G_p(x,y)=G_m(x,y)*F_G ・・・(63)
B_p(x,y)=B_m(x,y)*F_B ・・・(64)
ただし、*はコンボリューションを示す
本実施形態における上述の画素補間処理においては、レッド、グリーン、ブルー各色に対して相関性のない画素補間処理を行ったが、もちろん相関性のある画素補間処理を行っても良い。
以下に、画像補間用ディジタルフィルタについて、F_Gを例にして説明する。
F_Gは下式のように表されるローパス特性のディジタルフィルタである。
F_G=F’_G/Sum_F_G ・・・(65)
なお、式(65)において、Sum_F_Gは、F’_G係数の合計値である。また、F’_Gは下式で表される。
式(66)において、σx(I_G)、σy(I_G)は、画像補間用ディジタルフィルタの広がり度合いを示すパラメータであり、式(30)のRGBカラーフィルタの面積率(面積比)I_Gに応じて値が変化する。また、α、βは定数(実数)である。
本実施形態では、図18の701に示すようにカラーフィルタ面積率I_R,I_G,I_Bが増えるとσx、σyは減少する。これは、図18の702に示すとおり、面積率とカラーフィルタの相対配列間隔が単調減少関係となるためである。すなわち、面積率I_R,I_G,I_Bの値が増えるとカラーフィルタ配列が密に配置されるので、広がり度合いσx、σyが小さいディジタルフィルタでも画素補間が可能となるのである。言い換えれば、703に示すとおり、面積率I_R,I_G,I_Bの値が増えると相対周波数が上がるので、ボケの小さいディジタルフィルタでも画素補間が可能となるのである。
なお、本実施形態ではσx(I_G)、σy(I_G)と相対配列間隔を同じ値として扱っているが、異なる値であっても良い。
画像補間用ディジタルフィルタF_R、F_G、F_Bの具体例を図19の801,802,803にそれぞれ示す。本実施形態では、サイズが5x5,9x9の正方形として例を示すが、この形態に限るものではない。例えば、サイズは、3×5,5×7,5×9のような長方形でも良い。
なお、図19において、画像補間用ディジタルフィルタの広がり度合いはF_B>F_R>F_Gとなっている。これは上述のカラーフィルタ面積率I_R,I_G,I_Bが、I_R=76,I_G=153,I_B=26であるためである。周波数領域における、画像補間用ディジタルフィルタとカラーフィルタの面積率との関係を図20に示す。901はレッドの画像補間用ディジタルフィルタF_Rの周波数特性を、902はレッドのカラーフィルタ配列R_mの周波数特性を示す。また、903は画像補間用グリーンのディジタルフィルタF_Gの周波数特性を、904はグリーンのカラーフィルタ配列G_mの周波数特性を示す。905はブルーの画像補間用ディジタルフィルタF_Bの周波数特性を、906はブルーのカラーフィルタ配列B_mの周波数特性を示す。
ブルーの分離画像(カラーフィルタ配列)B_mの周波数特性906は、面積率が低いため、他のカラーフィルタよりも高周波側の帯域成分が相対的に低周波側にシフトする。これは、図18の703の関係のに基づく特性である。該低周波にシフトした高周波側の帯域成分を取り除かずに画素補間処理を行うと、ノイズ発生原因となる。よって、画像補間用ディジタルフィルタF_B905は、高周波の帯域成分を除去するために、他の画素補間用ディジタルフィルタに比べて、より強い減衰特性(=ボケの大きいディジタルフィルタ)を有する。
反対に、グリーンの分離画像(カラーフィルタ配列)G_mの周波数特性904は、配列面積比率が高いため、他のカラーフィルタよりも高周波の帯域成分が相対的に高周波側へシフトする。よって、画素補間用ディジタルフィルタF_G903は、高周波の帯域成分を除去するために、他の画素補間用ディジタルフィルタに比べて、より弱い減衰特性(=ボケの小さいディジタルフィルタ)を有する。
ブルーの画素補間処理において、より強い減衰特性のディジタルフィルタを用いたので、画素補間後画像B_pはR_p,G_pに比してボケた画像となる。しかしながら、そもそも人間の視覚はブルーの高周波を認識しづらいため問題とはなりにくい。
このように、画素補間処理における補間パラメータの周波数特性は、カラーフィルタ配列の高周波における帯域成分を除去するよう設定すればノイズの少ない画像を得ることができる。
次に、ステップS403において、式(67)〜(70)を用いてゲイン処理を行う(図17の603)。
R_p_g(x,y)=R_p(x、y)×Gain_R (67)
G_p_g(x,y)=G_p(x、y)×Gain_G (68)
B_p_g(x,y)=G_p(x、y)×Gain_B (69)
なお、
Gain_R = 255/I_R
Gain_G = 255/I_G
Gain_B = 255/I_B
(70)
ゲイン処理は、撮像画像の輝度分布を被写体に合わせる処理である。
カラーフィルタの面積率がI_R=76、I_G=153,I_B=26である。そして、図19のディジタルフィルタF_R,F_G,F_Bの係数合計値が1.0となる。よって、R_p,G_p,B_pは目標とする輝度のそれぞれ、76/255,153/255,26/255しか得られない。本処理は、目標輝度にあわせるために演算する。
以上で、第3実施形態のステップS303における画素補間処理が終了する。
図15に戻り、ステップS304において、上記フィルタ配列によって得られた独立3プレーン画像に対して、画像処理部105を用いて、画像処理を行う。画像処理部105は、画像処理パラメータ保持部106に保持された画像処理パラメータを用いて、γ変換、色処理、ノイズ低減処理、鮮鋭性向上処理を行い、画像処理後の画像R_c,G_c,B_cを出力する。
次に、ステップS305において、画像処理された画像R_c,G_c,B_cをメモリ部107に一時的に格納する。
最後に、メモリ部107に格納された画像R_c,G_c,B_cを表示部108に表示し、データ出力部109にて外部記憶(不図示)やプリンタ(不図示)に転送する(S306)。
以上により、カラー撮像装置1の動作の動作が全て終了する。
以上説明したように本実施形態によれば、
規則性を有しないカラーフィルタ配列について、誤差拡散法を用いて求めたカラーフィルタ配列の空間周波数において、低周波成分が小さいため、ノイズの少ない画像を得ることができる。
さらに、高周波で帯域成分を含むため、光学的ローパスフィルタを用いなくとも、もしくは強度の弱い光学的ローパスフィルタでも、周期的な輝度変化をもった被写体でも色モアレを抑えたカラー撮像が可能となる。
また、本実施形態においては例えばRGのカラーフィルタを配置し、その後、RGのカラーフィルタ配列の中からG配列を算出したが、もちろんこの順番でなくても良い。
また、画素補間部103においては、単一のディジタルフィルタを用いたが、周辺のカラーフィルタの配列分布、周辺のモザイク状信号値に応じて変化するディジタルフィルタを用いてもよい。
また、画素補間103においては、線形ディジタルフィルタを用いて補間したが、分離画像R_m,G_m,B_mにおける非0のモザイク状信号値をもとに補間関数(0次ホールド、バイリニア、スプライン、キュービックコンボリューション等)を用いて補間しても良い。また、このときは分離画像R_m,G_m,B_mのモザイク状信号の情報に依存した補間を行うため、被補間画素のアドレス毎にどの画素から補間するかの情報を、画素補間パラメータ保持部104に保持しておく。なお、補間関数を用いて補間する時は、補間後の各色輝度情報は被写体の輝度情報とほぼ同じとなるため、(67)〜(70)におけるゲイン処理を行う必要はない。
そのほか、非線形ディジタルフィルタ(フィルタマスクサイズ中の中央値をとるメディアンフィルタ、フィルタマスクサイズ中の最大値を取るフィルタ、等)を用いても良い。
また、本実施形態では、RGB単板のカラー撮像素子について述べたが、2板以上の多板のカラー撮像素子について用いてもよい。
さらに、本実施形態ではRGB3色のカラーフィルタ配列に関して述べたが、本実施形態はCy(シアン)Mg(マゼンタ)Ye(イエロー)Gの4色、RGBCy(シアン)Mg(マゼンタ)Ye(イエロー)の6色、またはそれ以上のどのようなマルチカラーフィルタ配列についても適用できる。
<第4実施形態>
以下、第4実施形態について説明する。第3実施形態では、誤差拡散法を用いて、先にRGを求め、余りをBの配列と確定する。次に、誤差拡散法を用いてRGからGの配列を求め、余りをRの配列とする。この方法により、重複のないRGBカラーフィルタの配列を求めた。
第4実施形態は、GRBの順番で重複のないカラーフィルタ配列を生成する。これにより第3実施形態と同様に低周波で成分が少なく、高周波で帯域成分を持つカラーフィルタ配列を求めることができる。
第4実施形態は、カラーフィルタ配列処理(S103)以外は第3実施形態と同様である。
以下、本実施形態2のカラーフィルタ配列処理について、フローチャート(図21)およびブロック図(図22)を用いて説明する。なお、本実施形態における各色画像は0〜255の8ビット画像とする。
まず、ステップS501において、G面積率データI_GをG配列化部1001に入力する。
誤差拡散係数は図12のようにK1〜K4の4つの係数を有する。図22のG配列化部1001におけるG累積誤差ラインバッファ1003は、1個の記憶領域E_G0と入力画像の横画素数Wと同数の記憶領域E_G(x)(0≦x≦W−1)とを有し、後述する方法で量子化誤差を格納する。なお、G累積誤差ラインバッファ1003は処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図23の1003はG累積誤差ラインバッファ1003の詳細を示した図である。
次に、ステップS502において、G累積誤差加算部1004を用いて、入力された着目画素(G面積率データ)I_Gの値にG面積率データの横画素位置xに対応する誤差E_G(x)を加算する。即ち、入力された着目画素(G面積率データ)I_Gの値は、累積誤差加算後のデータをI_G’とすると、
I_G’=I_G+E_G(x) ・・・(71)
となる。
次に、ステップS503において、G閾値選択部1005を用いて閾値T_Gを選択する。
その際、
t_G=I_G ・・・(72)
とおくと、閾値T_Gは、
T_G(t_G)=128 ・・・(73)
(0≦t_G≦255)
と設定さるる。なお、配列生成遅延を回避するため、平均量子化誤差が小さくなるように、閾値T_Gをt_Gに応じて細かく変更しても良い。
次に、ステップS504において、G量子化部1006において、誤差加算後のG面積率データI_G’と閾値T(t_G)とを比較し、(74)〜(77)を用いて、出力値Out_G(量子化値0,1)を決定する。
I_G’<T(I_G)のとき ・・・(74)
Out_G=0 ・・・(75)
I_G’≧T(I_G)のとき ・・・(76)
Out_G=1 ・・・(77)
次に、ステップS505において、G誤差演算部1007を用いて画素データI_G’と出力値Out_Gとの差分Err_Gを、式(78)を用いて計算する。
Err_G(x)=I_G’−(Out_G×255) ・・・(78)
次に、ステップS506において、G誤差拡散部1008を用いて、横画素位置xに応じて以下の様に誤差Err_G(x)を拡散する。G誤差拡散部1008は、処理画素の縦アドレスによって処理方向が変わる。例えば縦アドレス(y(0≦y≦H−1))が2で割り切れるときは図12の401のように左から右へ処理し、式(79)のように誤差が拡散される。一方、縦アドレス(y(0≦y≦H−1))が2で割り切れないとき、図12の402のように右から左へ処理し、式(80)のように誤差が拡散される。
y%2=0(0≦y≦H−1、%は剰余記号)のとき
E_G(x+1)←E_G(x+1)+Err_G(x)×K1(x<W−1)
E_G(x−1)←E_G(x−1)+Err_G(x)×K2(x>0)
E_G(x)←E0_G+Err_G(x)×K3
E0_G←E_G×K4(x<W−1)
E0_G←0(x=W−1)
・・・(79)
y%2=1(0≦y≦H、%は剰余記号)のとき
E_G(x−1)←E_G(x−1)+Err_G(x)×K1(x>0)
E_G(x+1)←E_G(x+1)+Err_G(x)×K2(x<W−1)
E_G(x)←E0_G+Err_G(x)×K3
E0_G←E_G×K4(x>0)
E0_G←0(x=0)
・・・(80)
なお、本実施形態では、K1=7/16、K2=3/16、K3=5/16、K4=1/16とするが、t_Gに応じてK1〜K4を変化させても良い。
以上で、1画素分のG面積率データI_Gに対しての配列Out_G(量子化値0,1)が完了する。
次に、R面積率データI_Rに対して誤差拡散処理を施し配列化を行う。
まず、ステップS507において、R面積率データI_RをR配列化部1002に入力する。
誤差拡散係数が図12のようにK1〜K4の4つの係数を持つ場合、図11のR配列化部1002におけるR累積誤差ラインバッファ1009は、1個の記憶領域E_R0と入力画像の横画素数Wと同数の記憶領域E_R(x)(x=0〜W−1)とを有する。そして、後述する方法で量子化誤差を格納する。なお、R累積誤差ラインバッファ1009は処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図23の1009はG累積誤差ラインバッファ1009の詳細を示した図である。
次に、ステップS508において、R累積誤差加算部1010を用いて、入力のR面積率データに入力のR面積率データの横画素位置xに対応する誤差E_R(x)を加算する。即ち、入力された着目画素(R面積率データ)値は、累積誤差加算後のデータをI_R’とすると、
I_G’=I_R+E_G(x) ・・・(81)
となる。
次に、ステップS509において、R閾値選択部1011を用いて、閾値T_Rを選択する。その際、
t_G=I_R ・・・(82)
とおくと、閾値T_Rは、
T_R(t_R)=128 ・・・(83)
(0≦t_R≦255)
と設定される。なお、閾値T_Rは、配列生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_Rに応じて細かく変更しても良い。
次に、ステップS510において、R量子化部1012を用いて誤差加算後のR面積率データI_R’と閾値T_R(t_R)とOut_Gとを比較し、Rフィルタ最終配列化結果Out_Rを決定する。
その規則は次の通りである。
Out_G=0かつI_R’≧T(t_R)のとき ・・・(84)
Out_R=1 ・・・(85)
(86)以外のとき ・・・(86)
Out_R=0 ・・・(87)
次に、ステップS511において、R誤差演算部1013を用いて、誤差加算後のR面積率データI_R’と出力値Out_Rとの差分Err_Rを、式(88)に基づき計算する。
Err_R(x)=I_R’−(Out_R×255) ・・・(88)
次に、ステップS512において、R誤差拡散部1014において、横画素位置xに応じて以下の様に誤差Err_R(x)を拡散する。R誤差拡散部1014は、G誤差拡散部1008と同様に、処理画素の縦アドレスによって処理方向を変える。例えば縦アドレス:y(0≦y≦H−1)が2で割り切れるときは図12の401のように左から右へ処理し、式(89)のように誤差が拡散される。一方、縦アドレス:y(0≦y≦H−1)が2で割り切れないとき、図12の402のように右から左へ処理し、式(90)のように誤差が拡散される。
y%2=0(0≦y≦H−1、%は剰余記号)のとき
E_R(x+1)←E_R(x+1)+Err_R(x)×K1(x<W−1)
E_R(x−1)←E_R(x−1)+Err_R(x)×K2(x>0)
E_R(x)←E0_R+Err_R(x)×K3
E0_R←E_R×K4(x<W−1)
E0_R←0(x=W−1)
・・・(89)
y%2=1(0≦y≦H、%は剰余記号)のとき
E_R(x−1)←E_R(x−1)+Err_R(x)×K1(x>0)
E_R(x+1)←E_R(x+1)+Err_R(x)×K2(x<W−1)
E_R(x)←E0_R+Err_R(x)×K3
E0_R←E_R×K4(x>0)
E0_R←0(x=0)
・・・(90)
なお、本実施形態では、K1=7/16、K2=3/16、K3=5/16、K4=1/16とするが、入力階調値t_Rに応じてK1〜K4を変化させても良い。
以上で、1画素分のRフィルタの配列化Out_R(量子化値0,1)が完了する。
次にステップS513において、Out_G、Out_Rのいずれも1となっていない箇所について以下の式によりOut_Bを決定する。
Out_G=0かつOut_R=0のとき ・・・(91)
Out_B=1 ・・・(92)
上記以外のとき ・・・(93)
Out_B=0 ・・・(94)
次に、処理を全ての画素について行ったか判定を行い(S514)、全て行った場合は、ステップS103における本実施形態のカラーフィルタ配列処理が完了する。
上述のGフィルタの配列化も、Gを優先させた配列を確保することに目的がある。すなわち、優先させたいGフィルタ配列に対して、より低周波の少ない配列を確保する。その後、Rフィルタの配列化結果が確定するわけである。そして最後にBフィルタの配置を確定する。ただし、R、Bフィルタ配列についても誤差拡散処理を施した結果得られた配列なので、低周波で成分が少なく、高周波で帯域成分を持つ特性は得られる。
なお、本実施形態では優先させたいカラーフィルタ配列をGとしたが、どの色を優先させてもよい。
以上の結果、RGBのカラーフィルタ配列全てにおいて、低周波成分が少なく、高周波成分が多い特性を実現できる。さらには優先させたい色については、より低周波成分を少なくするカラーフィルタ配列を得られる。
<実施形態3>
第4実施形態では、誤差拡散法を用いて、GRBの順番でカラーフィルタの配列を生成した。これにより第3実施形態と同様に低周波で成分が少なく、高周波で帯域成分を持ち、さらには重複のないカラーフィルタ配列を求められた。しかしながら、第4実施形態の処理では、例えばGフィルタとRフィルタが接近して配置されてしまうことがあった。GフィルタとRフィルタはBフィルタに対して相対的に輝度情報を構成する割合が多い。よって、互いに接近しすぎると解像感(鮮鋭感)を失うことがあった。本実施形態では、第4実施形態と同様の処理を行うが、GフィルタとRフィルタが接近しないようにカラーフィルタの配列を決定する。よって、本実施形態によれば、第4実施形態に比べて解像感(鮮鋭感)を向上することができる。
第5実施形態は、カラーフィルタ配列処理(S103)以外は第1、2実施形態と同様である。
以下、本実施形態3のカラーフィルタ配列S103について、フローチャート(図24)およびブロック図(図25)を用いて説明する。尚、本実施形態における各色画像は0〜255の8ビット画像とする。
まず、ステップS601において、G面積率データI_GをG配列化部1101に入力する。
誤差拡散係数が図12のようにK1〜K4の4つの係数を持つ場合、図25のG配列化部1101におけるG累積誤差ラインバッファ1103は、1個の記憶領域E_G0と入力画像の横画素数Wと同数の記憶領域E_G(x)(0≦x≦W−1)とを有する。そして、後述する方法で量子化誤差を格納する。なお、G累積誤差ラインバッファ1103は処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図26の1103はG累積誤差ラインバッファ1103の詳細を示した図である。
次に、ステップS602において、G累積誤差加算部1104を用いて、G面積率データにG面積率データの横画素位置xに対応する誤差E_G(x)を加算する。即ち、入力された着目画素(G面積率データ)I_Gの値は、累積誤差加算後のデータをI_G’とすると、
I_G’=I_G+E_G(x) ・・・(95)
となる。
次に、ステップS603において、G閾値選択部1105を用いて閾値T_Gを選択する。
その際、
t_G=I_G ・・・(96)
とおくと、閾値T_Gは、
T_G(t_G)=128 ・・・(97)
(0≦t_G≦255)
と設定される。なお、配列生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_Gに応じて細かく変更しても良い。
次に、ステップS604において、G量子化部1106において、誤差加算後のG面積率データI_G’と閾値T(t_G)とを比較し、(98)〜(101)を用いて出力値Out_Gを決定する。その規則は次の通りである。
I_G’<T(I_G)のとき ・・・(98)
Out_G=0 ・・・(99)
I_G’≧T(I_G)のとき ・・・(100)
Out_G=1 ・・・(101)
次に、ステップS605において、G誤差演算部1107を用いて、画素データI_G’と出力値Out_Gとの差分Err_Gを、式(102)を用いて計算する。
Err_G(x)=I_G’−(Out_G×255) ・・・(102)
次に、ステップS606において、G誤差拡散部1108を用いて、横画素位置xに応じて以下の様に誤差Err_G(x)を拡散する。G誤差拡散部1108は、処理画素の縦アドレスによって処理方向が変わる。例えば縦アドレス(y(0≦y≦H−1))が2で割り切れるときは図12の401のように左から右へ処理し、式(103)のように誤差が拡散される。一方、縦アドレス(y(0≦y≦H−1))が2で割り切れないとき、図12の402のように右から左へ処理し、式(104)のように誤差が拡散される。
y%2=0(0≦y≦H−1、%は剰余記号)のとき
E_G(x+1)←E_G(x+1)+Err_G(x)×K1(x<W−1)
E_G(x−1)←E_G(x−1)+Err_G(x)×K2(x>0)
E_G(x)←E0_G+Err_G(x)×K3
E0_G←E_G×K4(x<W−1)
E0_G←0(x=W−1)
・・・(103)
y%2=1(0≦y≦H、%は剰余記号)のとき
E_G(x−1)←E_G(x−1)+Err_G(x)×K1(x>0)
E_G(x+1)←E_G(x+1)+Err_G(x)×K2(x<W−1)
E_G(x)←E0_G+Err_G(x)×K3
E0_G←E_G×K4(x>0)
E0_G←0(x=0)
・・・(104)
なお、本実施形態では、K1=7/16、K2=3/16、K3=5/16、K4=1/16とするが、t_Gに応じてK1〜K4を変化させても良い。
以上で、1画素分のG面積率データI_Gに対しての配列Out_G(量子化値0,1)が完了する。
次に、ステップ607にてG制約情報データ演算部1109を用いて制約情報を演算する。なおhは定数(実数)で、本実施形態では1.0をとる。
C_G=(−Out_G×255+I_G)×h ・・・(105)
次に、ステップS608にてG制約情報反映部1110を用いて制約情報データをI_Rに反映させる。なお、(113)の制約情報反映処理によって次に形成されるRフィルタと、既に形成されたGフィルタがなるべく遠くになるようフィルタが配列化される。
I_R_r=I_R+C_G ・・・(106)
次に、ステップS609において、反映後R面積率データI_R_rに対して誤差拡散処理を施し配列化を行う。まず、反映後R面積率データI_R_rをR配列化部1102に入力する。
誤差拡散係数が図12のようにK1〜K4の4つの係数を持つ場合、図25のR配列化部1102におけるR累積誤差ラインバッファ1111は、1個の記憶領域E_R0と入力画像の横画素数Wと同数の記憶領域E_R(x)(x=0〜W−1)とを有する。そして、後述する方法で量子化誤差が格納されている。なお、R累積誤差ラインバッファ1111は処理開始前に全て初期値0で初期化されていてもよいし、ランダム値で初期化されてもよい。図26の1111はG累積誤差ラインバッファ1111の詳細を示した図である。
次に、ステップS610において、R累積誤差加算部1112で入力のR面積率データの横画素位置xに対応する誤差E_R(x)が加算される。即ち、入力された着目画素(R面積率データ)値は、累積誤差加算後のデータをI_R’とすると、
I_G’=I_R_r+E_G(x) ・・・(107)
となる。
次に、ステップS611において、R閾値選択部1113を用いて、閾値T_Rを選択する。その際、
t_G=I_R ・・・(108)
とおくと、閾値T_Rは、
T_R(t_R)=128 ・・・(109)
(0≦t_R≦255)
と設定される。なお、配列生成遅延を回避するため、平均量子化誤差が小さくなるよう、t_Rに応じて細かく変更しても良い。
次に、ステップS612において、R量子化部1114を用いて、誤差加算後のR面積率データI_R’と閾値T_R(t_R)とを比較し、(110)〜(113)に基づきRフィルタ最終配列化結果Out_Rを決定する。
I_R’≧T(t_R)のとき ・・・(110)
Out_R=1 ・・・(111)
I_R’<T(t_R)のとき ・・・(112)
Out_R=0 ・・・(113)
次に、ステップS613において、R誤差演算部1115を用いて、R面積率データI_R’と出力値Out_Rとの差分Err_Rを、式(114)に基づき計算する。
Err_R(x)=I_R’−(Out_R×255) ・・・(114)
次に、ステップS614において、R誤差拡散部1116を用いて、横画素位置xに応じて以下の様に誤差Err_R(x)を拡散する。R誤差拡散部1116は、処理画素の縦アドレスによって処理方向が変わる。例えば縦アドレス(y(0≦y≦H−1))が2で割り切れるときは、図12の401のように左から右へ処理し、式(115)のように誤差を拡散する。一方、縦アドレス(y(0≦y≦H−1))が2で割り切れないときは、図12の402のように右から左へ処理し、式(116)のように誤差を拡散する。
y%2=0(0≦y≦H−1、%は剰余記号)のとき
E_R(x+1)←E_R(x+1)+Err_R(x)×K1(x<W−1)
E_R(x−1)←E_R(x−1)+Err_R(x)×K2(x>0)
E_R(x)←E0_R+Err_R(x)×K3
E0_R←E_R×K4(x<W−1)
E0_R←0(x=W−1)
・・・(115)
y%2=1(0≦y≦H、%は剰余記号)のとき
E_R(x−1)←E_R(x−1)+Err_R(x)×K1(x>0)
E_R(x+1)←E_R(x+1)+Err_R(x)×K2(x<W−1)
E_R(x)←E0_R+Err_R(x)×K3
E0_R←E_R×K4(x>0)
E0_R←0(x=0)
・・・(116)
なお、本実施形態では、K1=7/16、K2=3/16、K3=5/16、K4=1/16とするが、入力階調値t_Rに応じてK1〜K4を変化させても良い。
以上で、1画素分のRフィルタの配列化Out_R(量子化値0,1)が完了する。
次にステップS615において、Out_G、Out_Rのいずれも1となっていない箇所について以下の式によりOut_Bを決定する。
Out_G=0かつOut_R=0のとき ・・・(117)
Out_B=1 ・・・(118)
上記以外のとき ・・・(119)
Out_B=0 ・・・(120)
次に、処理を全ての画素について行ったか判定を行い(S616)、全て行った場合は、ステップS103における本実施形態のカラーフィルタ配列処理が完了する。
上述のGフィルタの配列化も、Gを優先させた配列を確保することに目的がある。すなわち、優先させたいGフィルタ配列に対して、より低周波の少ない配列を確保する。そして、Rフィルタ配列を決定する際に、Gフィルタの配列を考慮してRフィルタを配列する。その結果、GフィルタとRフィルタが必要以上に近づくことを回避でき、解像感(鮮鋭感)を向上させることができる。
<第6実施形態>
以下、第6実施形態について説明する。上述した第1〜3実施形態では、誤差拡散法を用いてカラーフィルタ配列を求める例を説明した。第6実施形態では、誤差拡散法に代えて、低周波で成分が少なく高周波で帯域成分を持つよう評価関数を最小化する方法を用いた例を説明する。これにより第3実施形態と同様に低周波で成分が少なく、高周波で帯域成分を持つカラーフィルタ配列を求められる。
本実施形態では遺伝的アルゴリズムを用いて低周波で成分が少なく、高周波で帯域成分を持つよう評価関数を最小化する手法を用いる。。なお、しきい値マトリクス生成法など他の手法を用いることも可能である。
第6実施形態における処理は、カラーフィルタ配列処理(S103)以外は第3実施形態と同様である。以下、本実施形態4のカラーフィルタ配列処理S103について、フローチャート(図27)およびブロック図(図28)を用いて説明する。
なお、本実施形態におけるRGBカラーフィルタの決定フローは第3実施形態と同様、「RG配列→余りをB→G決定→余りをR」とするが、第2、3実施形態の順に求めても良い。
先ず、ステップS701において、RGB面積率合計データI_RGBをRGB合計部1201に入力する。なお、RGB面積率合計データは(29)(30)(31)の合計値なので、255となる。
I_RGB=I_R+I_G+I_B ・・・(121)
次に、ステップS702において、RG面積率合計データI_RGをRG配列化部1202に入力する。
I_RG=I_R+I_G ・・・(122)
次に、ステップS703において、RG配列評価パラメータ設定部1204を用いて価パラメータを設定する。評価パラメータは、カラーフィルタ配列をどのような空間周波数特性にするかを制御するためのパラメータである。
例えば、RGフィルタ配列の周波数特性を評価する際に、遮断周波数f_cutoff_RGのGauss特性LowPassFilter(以下、GaussLPF):Gs_RG(f)を使用した場合を考えてみる。
f_cutoff_RG(I_RG)とGaussLPF:Gs_RG(f)との関係は、平均μ,分散σ2のGauss分布密度関数をN(μ,σ2)とすると
の関係が成り立つとする。
ここでaはガウス特性の広がりを示すパラメータで、f_cutoff_RG(I_RG)はGs_RG(f)の遮断周波数である。a=3の時Gs_RG(I_RG)はf=f_cutoff_RG(I_RG)のとき、ほぼ減衰する。また、a=1のときGs_RG(f)はf=f_cutoff_RG(I_RG)の時、あまり減衰しない。このようにaによって、GaussLPF:Gs_RG(f)が変化する。よって、aは評価用のGaussLPFを決定するパラメータの一つとなる。
なお、評価の際はGaussLPFでなくてももちろん良い。例えば、矩形LowpassFilterでも良い。矩形LowpassFilterでは理想遮断周波数をパラメータとするとよい。選択するパラメータにより、再現したいカラーフィルタ配列の周波数特性が決まる。
以下、Gs_RG(f)でa=3とした場合を例にとって説明する。
まず、RG面積率合計データのI_RG(8ビット、0≦I_RG≦255)のI_RG=80に相当するランダム配列を図29の1301に示す。また、図30の1302は1301の周波数スペクトルを、1303は評価用のGaussLPFを、1304は1302と1303の積を、1305はGaussLPFの遮断周波数f_cutoff_RG(I_RG)を示す。ここで、図30の1302は低周波数にスペクトルを持っているため、1303との積は、1304のように低周波数にスペクトルを持つ結果となる。
人間の視覚は「低周波数に敏感で、高周波数に鈍感」な特性を持つことから、視覚上良好なカラーフィルタ配列を求めるには、なるべく低周波にスペクトルを持たないほうが望ましい。すなわち1301は低周波数にスペクトルを持つため、視覚上良好なカラーフィルタ配列とはいえない。そこで、視覚上良好なカラーフィルタ配列を求めるには、1303との積が小さい、すなわち、1304のスペクトルが存在しないよう、カラーフィルタ配列を編集すればよい。編集の方法は後述する。
ここで一例として、面積率=80に相当する視覚上良好なカラーフィルタ配列を図31の1306に示す。また、図32の1307は1306の周波数スペクトルを、1308はGaussLPFを、1309は1307と1308の積を、1309はGaussLPFの遮断周波数を示す。視覚上良好なカラーフィルタ配列とは、GaussLPFとの積を計算した後のスペクトルが小さいことがわかる。
以上をまとめると、評価用のGaussLPF:Gs_RG(f)を設計し、Gs_RG(f)を通過するスペクトルが最小になるようにRGカラーフィルタ配列を編集すればよい。そしてそのGs_RG(f)は遮断周波数f_cutoff_RG(I_RG)より設定される。
以下、本実施形態では、f_cutoff_RG(I_RG)の設定は以下の(124)〜(126)のようにする。例えば(124)〜(126)の式においてA=50とするとf_cutoff_RG(I_RG)は図33のように表すことができる。
なお、上式においてAを大きくすると、中間階調で分散型となりカラーフィルタ配列の解像性が増す。そして、Aを小さくすると、集中型のカラーフィルタ配列となりカラーフィルタ配列の階調性が増す。よって、評価用のGaussLPF:Gs_RG(f)の遮断周波数:f_cutoff_RG(I_RG)を決定するには、Aを決めればよい。すなわちf_cutoff_RG(I_RG)を求めるにAを与えればよいことになる。
以上をまとめると、評価用GaussLPFを決定するにはaとAをパラメータとして与えればよい。
次に、ステップS704において、RG配列評価値最小化のための編集部1205においてRGカラーフィルタ配列の周波数特性における評価値が最小となるようにRGカラーフィルタ配列を編集する。本実施形態では前述のとおり遺伝的アルゴリズムを用いるが、もちろん他の手法であってもよい。
以下に遺伝的アルゴリズムの表現を使用するが、遺伝的アルゴリズムは既知のアルゴリズムであるので、ここでは処理の詳細は説明しない。
以下、ステップS704での処理の詳細を図34のフローチャートを用いて説明する。
編集の際は、画像を小さなブロックに分けて編集する。このようにするのは、編集サイズが大きいと、収束するのに多大な時間を要してしまうためである。ブロックサイズは8×8〜64×64サイズ程度にすると収束しやすい。図35に示すように、ブロックサイズをL×L(Lは2のべき乗)、編集したい画像全体のサイズをN×N(NはLの整数倍)として、以下に処理例を示す。なお、本実施形態は図35のように画像の左上から順次編集することを例にして説明するが、その他の順番で編集を行っても良い。
先ず、ステップS801において、画像全範囲(N×Nサイズ)の編集が終了したかどうかの判定を行う。終了した場合は処理を終了し、そうでない場合はステップS802へ進む。
ステップS802において、P個のブロックサイズL×Lの初期ランダム配列を生成する。ここでの処理は、遺伝的アルゴリズムでP個の初期集団を生成することと等価である。なお、集団とは、個体(=染色体)の集まりである。8×8の初期ランダム画像の例を図36に示すと、遺伝子:1に相当するの白(配列ON)、遺伝子:0に相当するのが黒(配列OFF)である。なお、白黒配列比率を考えずに画像を生成しても良いし、面積率と同じとなるように拘束条件を設定してもよい。なお「面積率と同じ比率となるように配列を生成する」というのは、例えば面積率64に相当するカラーフィルタ配列を生成したい場合、OFFとONの比率を、ON:OFF=1:3とすることである。この場合、最適化の収束が速くなるが、配列比率を考えずに生成したほうが、より広い可能性を探索することが可能となる。
ステップS803でP個の配列をRG配列評価パラメータ設定1204において設定されたパラメータ、たとえば「a,A」からGaussLPF:Gs_RG(f)を与えて評価する。なお、評価の際、編集ブロックの位置によって評価方法が異なる。図35のように配列の左上から順次編集することを考えると、図37に示すように、ブロックの位置によって参照ブロックの扱い方が異なる。ここでいう参照ブロックとは「既に編集されたブロック」のことであり、「現在編集中のブロック(編集ブロック)」と参照ブロックとに不連続性がないように、参照するブロックのことである。
例えば、図37の黒のブロックを編集する場合、既に編集済みのブロックは存在しないため、編集ブロックのみとし、評価する。図37の斜線のブロックを編集する場合、左隣のブロックは既に編集済みであるため、左隣のブロックのみを参照ブロックとし、H=2L,V=Lのサイズを評価する。図37の縦線のブロックを編集する場合、上隣のブロックは既に編集済みであるため、上隣のブロックのみを参照ブロックとし、H=L,V=2Lのサイズを評価する。図37の白のブロックを編集する場合、左、左上、上隣のブロックは既に編集済みであるため、左、左上、上隣のブロックのみを参照ブロックとし、H=2L,V=2Lのサイズを評価する。なお、参照ブロックの配列は既に決定されたものであるから、編集の際に変更はしない。
評価に使用する評価関数J_RGを以下に示す。N_RGはRGカラーフィルタ配列のノイズを表し、D_RGは面積率I_RGに対して配列数の保存性表す。なお、下記に示した評価関数は一例であるので、他の評価関数でも良いことはいうまでもない。
J_RG=wn×N_RG+wd×D_RG ・・・(127)
(wn,wdは重み値)
ここで、
ただし
ただし
遺伝的アルゴリズムは、適応度が大きい個体を探索するアルゴリズムなので、画質評価値が小さいものほど大きな適応度を持たす必要がある。このため例えば、適応度Fを以下のようにすればよい
F=(J_RG_max−J_RG)+α ・・・(132)
ここでαは正の定数、J_RG_maxはその世代における集団が持つ最大の評価値(最も評価値が悪い個体の値)である。なお、評価関数J_RGから適応度Fへの変換式は、上記式に限るものではなく、シグモイド関数などを用いて、評価値J_RGが小さくなればなるほど、適応度Fを大きくするようにしても良い。
ステップS804でブロックに対して編集が終了したかどうかの判定を行う。終了した場合は次の注目ブロックへ移りステップS801へ、そうでない場合はステップS805へ進む。
ステップS805で遺伝的アルゴリズムでの選択を行う。遺伝的アルゴリズムの選択は、適応度の大きな個体を次の世代に残す処理である。適応度が大きければ大きいほど選択される確率が大きくなるように、ルーレットルールを設定する。この他に、選択にトーナメント方式を採用しても良い。ルーレットルール、トーナメント方式については遺伝的アルゴリズムの既知の処理である。
ステップS806でS805で選択された個体どうしを交叉確率pc(0≦pc≦1)で交叉させる。交叉は図38に示すように、縦交叉と横交叉がある。交叉位置と、縦交叉か横交叉かはランダムに切り替える。
ステップS807で、突然変異確率pm(0≦pm≦1)で、個体を突然変異させる。突然変異は図39のように白(配列ON)を黒(配列OFF)に反転する操作を行う。なお、黒(配列OFF)であれば白(配列ON)に反転させる。突然変異の位置は、ランダムに決定される。突然変異が終了するとステップS803へ進む。
以上でステップS704でのRG配列評価値最小化のための編集が終了する。と同時にRG面積率合計データの配列化結果Out_RG(量子化値0,1)が定まる。
次に、ステップS705において、ステップS704にて算出されたRG面積率合計データの配列化結果Out_RG(量子化値0,1)が求められ、これと同時にB面積率データの最終出力値Out_Bが算出される。Out_Bの算出は、以下の式により求められる。
Out_RG=0のとき ・・・(133)
Out_B=1 ・・・(134)
Out_RG=1のとき ・・・(135)
Out_B=0 ・・・(136)
ここでRG面積率合計データの配列化の意味を説明する。
Out_RG=1とは、その場所に、R・Gいずれかのカラーフィルタ一方が配列されることを意味する。すなわち、Out_RG=1とは、その場所にRフィルタが確定するわけでなく、Gフィルタも確定しない。この時点で確定していることは、RかGの、どのカラーフィルタが配列されるかわからないが、少なくともどれか一つは配列されることが確定しているに過ぎない。
すなわちまとめると、
Out_RG=0・・・R、Gフィルタのいずれも配列されないことが確定。すなわち、Bフィルタが配列される事が確定。
Out_RG=1・・・R、Gフィルタのいずれか1つが配列される事が確定。
となる。
次に、G面積率データI_Gに対して配列化を行う。
まず、ステップS706にて、G面積率データI_GをG配列化部1203に入力する。
次に、ステップS707において、G配列評価パラメータ設定部1206にて評価パラメータを設定する。なお、ステップS707はS703と同様であるので省略する。
次に、ステップS708において、G配列評価値最小化のための編集部1207においてカラーフィルタ配列の周波数特性における評価値が最小となるようにカラーフィルタ配列を編集する。本実施形態では前述のとおり遺伝的アルゴリズムを用いるが、もちろん他の手法であってもよい。なお、ステップS708はS704に対してI_RGをI_Gに変更したものであり、それ以外は同様であるので省略する。ただし、Gデータを量子化する場合は、以下の2つの制約条件が加わる。
1.Gデータの配列がOut_G=1となる箇所は、必ずRG合計データの配列がOut_RG=1となった個所に限定する
2.Gデータの配列がOut_G=0となる箇所は、必ずRG合計データの配列がOut_RG=0となった個所に限定する
また、Gデータの配列Out_Gが決定されると、Rデータの量子化値Out_Rは以下の式により求める事ができる。
Out_R=Out_RG−Out_G ・・・(109)
以上で、G面積率データI_Gに対して配列化(量子化値0,1)が完了する(S709)。同時に、R面積率データI_Rの配列化(量子化値0,1)結果が確定する。
上述のGフィルタの配列化は、Gを優先させた配列を確保することに目的がある。すなわち、優先させたいGフィルタ配列に対して、より低周波の少ない配列を確保する。そして、Gフィルタの余りとして、Rフィルタの配列化結果が確定するわけである。ただし、Rフィルタ配列についても遺伝的アルゴリズムにより編集を施し結果得られた配列なので、低周波で成分が少なく、高周波で帯域成分を持つ特性は得られる。
以上、本実施形態では、低周波で成分が少なく高周波で帯域成分を持つよう評価関数を最小化し、カラーフィルタ配列を求める手法を用いてカラーフィルタ配列を求めた。また本実施形態でも、RGB3色のカラーフィルタ配列についての例を示したが、二以上のマルチカラーフィルタについても配列を求めることができる。
なお、本実施形態におけるRGBカラーフィルタの決定フローは第3実施形態と同様、RG配列→余りをB→G決定→余りをRとする配列化フローを取ったが、第2、3実施形態の用にG配列→R配列→B配列の順に求めても良いし、それ以外の順番で求めてもよい。