(58)【調査した分野】(Int.Cl.,DB名)
劣化画像を復元してぼけのない原画像にできるだけ近い復元画像を得る画像復元方法であって、劣化画像をYUVの色空間に変換する準備処理工程と、この準備処理工程によって得たYUVの色空間のうちのY画像(Yプレーン)を複数の分解画像に分解する分解処理工程と、この分解処理工程によって得た分解画像を再構成してY画像(Yプレーン)とすると共に前記準備処理工程で変換したUV画像(UVプレーン)と合成して復元画像とする再構成処理工程を備え、
前記分解処理工程は、以下の工程1〜3からなり、
工程1.Y画像f0に拡散値σ02のガウシアンカーネルGσ02を適用した画像Gf0*σ02)をY画像f0から引いて1回分解後の分解画像f1を生成する(f1=f−f0*Gσ02)。
工程2.1回分解後の分解画像f1に拡散値σ12のLOGカーネルLOGσ12を適用した画像f1*LOGσ12を1回分解後の分解画像f1から引いて2回分解後の分解画像f2を生成する(f2=f1−f1*LOGσ12)。
工程3.工程2と同様な作業を繰り返して分解画像fJまで生成し、分解画像をJ枚得る。
前記再構成処理工程は、以下の工程4〜7からなることを特徴とする画像復元方法。
工程4.分解画像f1〜fJにそれぞれ前記準備処理工程で作成した復元LOGカーネルLOGσ12-t〜LOGσJ2-tを適用し、全ての画像の和を求めて総和画像を作成する。
工程5.Y画像に前記準備処理工程で作成した復元ガウシアンカーネルGσ02-tを適用し、工程4で作成した総和画像と加算する。
工程6.Y画像を入力画像f(x,y)のビット深度に戻す。
工程7.工程6で得た画像をYプレーンとして入力画像f(x,y)のUVプレーンと合成して復元画像I'(x,y)として出力する。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、特許文献1に開示された技術では、リンギングやノイズを抑えた復元画像を生成することができても、レンズの収差により劣化した画像を復元してぼけのない原画像にできるだけ近い復元画像を得ることは難しい。
【0009】
本発明は、従来の技術が有するこのような問題点に鑑みてなされたものであり、画像の劣化過程を表す関数がガウス型関数である観測画像(劣化画像)を復元して、ぼけのない原画像にできるだけ近い復元画像が得られる画像復元方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
上記課題を解決すべく本発明は、劣化画像を復元してぼけのない原画像にできるだけ近い復元画像を得る画像復元方法であって、劣化画像をYUVの色空間に変換する準備処理工程と、この準備処理工程によって得たYUVの色空間のうちのY画像(Yプレーン)を複数の分解画像に分解する分解処理工程と、この分解処理工程によって得た分解画像を再構成してY画像(Yプレーン)とすると共に前記準備処理工程で変換したUV画像(UVプレーン)と合成して復元画像とする再構成処理工程を備えた。
【0011】
前記画像復元方法において、前記準備処理工程は、例えば以下の1〜7である。
1.劣化画像(入力画像)f(x,y)をYUVの色空間に変換する。
2.YUVの色空間のうちのY画像fを32ビット化する。
3.入力パラメータ(復元深度t、比率k)からσ
0〜
Jの拡散値配列を作成する。
4.拡散値σ
02のガウシアンカーネルGσ
02を作成する。
5.拡散値σ
12〜σ
J2のLOGカーネルLOGσ
12〜LOGσ
J2を作成する。
6.上記3の配列内容を単純に、σを−tとした復元深度配列を作成する。
7.上記4〜5と同様の作業を上記6の腹元深度配列で行い、復元カーネルを作成する。
また、前記分解処理工程は、例えば以下の8〜10である。
8.Y画像f
0に上記4の拡散値σ
02のガウシアンカーネルGσ
02を適用した画像Gσ
02*f
0をY画像f
0から引いて1回分解後の分解画像f
1を生成する(f
1=f
0−f
0*Gσ
02)。
9.1回分解後の分解画像f
1に上記5の拡散値σ
12のLOGカーネルLOGσ
12を適用した画像f
1*LOGσ
12を1回分解後の分解画像f
1から引いて2回分解後の分解画像f
2を生成する(f
2=f
1−f
1*LOGσ
12)。
10.上記9と同様な作業を繰り返して分解画像f
Jまで生成し、分解画像をJ枚得る。
更に、前記再構成処理工程は、例えば以下の11〜14である。
11.分解画像f
1〜f
Jにそれぞれ上記7で作成した復元LOGカーネルLOGσ
12-t〜LOGσ
J2-tを適用し、全ての画像の和を求めて総和画像を作成する。
12.Y画像に上記7で作成した復元ガウシアンカーネルGσ
02-tを適用し、上記11で作成した総和画像と加算する。
13.Y画像を入力画像f(x,y)のビット深度に戻す。
14.上記13で得た画像をYプレーンとして入力画像f(x,y)のUVプレーンと合成して復元画像I'(x,y)として出力する。
【発明の効果】
【0012】
本発明に係る画像復元方法によれば、レンズの収差による劣化画像や厚い空気層など媒質のランダムな揺らぎを通した劣化画像など、画像の劣化過程を表す関数がガウス型関数である観測画像(劣化画像)を復元してぼけのない原画像にできるだけ近い復元画像を得ることができる。
【発明を実施するための形態】
【0014】
以下に本発明の実施の形態を添付図面に基づいて説明する。本発明に係る画像復元方法を実施する画像復元装置1は、
図1に示すように、劣化画像f(x,y)をYUVの色空間に変換する準備処理手段2と、この準備処理手段2によって得たYUVの色空間のうちのY画像(Yプレーン)f
0を複数の分解画像f
1〜f
Jに分解する分解処理手段3と、この分解処理手段3によって得た分解画像f
1〜f
Jを再構成してY画像(Yプレーン)fとすると共に準備処理手段2で変換したUV画像(UVプレーン)fuvと合成して復元画像I'(x,y)とする再構成処理手段4を備える。
【0015】
レンズと撮像素子(撮像センサ)による画像は、一般にレンズの収差によるガウス型のボケと高周波によるノイズによって劣化している。本来、1ピクセルに集まるべき光は、ガウス分布でボケており、周辺のピクセルに影響している。全く収差のないレンズによる画像は、ボケを生じないが、実際の画像はガウス分布でボケを生じた光の集合となる。
【0016】
画像を数式で表すために、先ず二次元ガウス関数をGt(x,y)とすると、
Gt(x,y)=1/2πt*exp(-(x
2+y
2)/2t) (式1)
tはガウス関数の広がりを示す拡散値である。
【0017】
収差のない(ボケのない)画像(原画像)をI(x,y)とすると、ボケた画像(劣化画像)の劣化過程f(x,y)は次式のように表される。
f(x,y)=K
tI(x,y)+ω(x,y)=Gt(x,y)*I(x,y)+ω(x,y) (式2)
*はたたみ込みを表す演算子であり、次式で定義される。
【0018】
Gt(x,y)*I(x,y)=∬Gt(x',y')*I(x・x',y・y')dx'dy' (式3)
これを有限画素で計算するために、次式に変換する。
Gt(x,y)*I(x,y)=Σy'Σx'(Gt(x',y')*I(x・x',y・y')) (式4)
なお、ω(x,y)は、観測時の高周波雑音と考えられるので省略する。
【0019】
ここで、K
tは関数を二次元ガウス関数Gt(x,y)でたたみ込みをする演算子である。tはガウス関数の広がりを表しているので、tを時刻と考えるとK
tは例えば一点にあるインクが次第に拡散していく様子を表すと考えることができる。拡散時間は当然t≧0であるが、これをt<0とするとガウス関数拡散の逆、つまり復元の過程と捉えることができる。
【0020】
このような操作をする演算子をK
-tと表すと、原画像I(x,y)の近似解I'(x,y)を次式のように表すことができる。
I'(x,y)=K
-tf(x,y)=I(x,y)+K
-tω(x,y) (t>0) (式5)
また、K
tとK
-tの関係は次式となる。
K
tK
-tf(x,y)=f(x,y) (式6)
【0021】
このままでは利用することができないので、以下の関係式を用いる。
ひとつは、ガウス関数のたたみ込みに対しての関係式
K
-tGσ
2*f=Gσ
2-t*f (σ
2>t) (式7)
もうひとつは、LOG関数のたたみ込みに対しての関係式
K
-tLOGσ
2*f=LOGσ
2-t*f (σ
2>t) (式8)
【0022】
LOG関数とは、画像処理でよく利用されるラプラシアンオブガウシアンフィルターであり、二次元のガウス関数にラプラシアン演算子Lを作用させることで得られる。
ラプラシアン演算子L=∂
2/∂x
2+∂
2/∂y
2 (式9)
【0023】
ラプラシアン演算子Lをガウス関数に作用させると次式となる。
LOGσ
2(x,y)=1/(2πσ
4)*(2−(x
2+y
2)/σ
2)*exp(−(x
2+y
2)/2σ
2) (式10)
この関数(式10)をフィルタと捉えると、中間周波数を通す帯域通過フィルタとなる。
【0024】
式7と式8を利用して劣化画像f(x,y)を分解すると、
f=Gσ
02*f
1+Σ
Jj=1LOGσ
j2*f
j+f
J+1 (式11)
本案では、劣化画像f(x,y)を有限画素で計算するために次式に変換する。
f(x,y)=Σ
y'Σ
x'(Gσ
02-t(x',y')*f
1(x・x',y・y'))+
Σ
Jj=1(Σy'Σx'(LOGσ
j2-t(x',y')*f
j(x・x',y・y')))+f
J+1 (式12)
ここで、σ
2はガウス関数およびLOG関数のスケールパラメータである。
【0025】
f
jはj回分解後の残差画像であり、次式で得られる。
1段階目
f
1=f−Gσ
02*f (式13)
j段階目
f
j=f
j-1−LOGσ
j-12*f
j-1 (1≦j≦J) (式14)
【0026】
式7、式8、式11から復元を式で表すと
K
-tf=Gσ
2-t*f+Σ
Jj=1LOGσ
2-t*f
j+K
-tf
J+1 (式15)
となるが、式を安定させるには
σ
J2>t,σ
J+12≦t (条件1)
でなければならない。
【0027】
この時、式15のK
-tf
J+1は不安定であるが、この項は劣化画像の最も高い周波数成分であるため、ほとんどが雑音である。よって、この項は無視することとする。よって、求める復元画像I'(x,y)は次式となる。
I'(x,y)=Gσ
2-t*f+Σ
Jj=1LOGσ
2-t*f
j (式16)
【0028】
Jは劣化画像の分解回数、tは復元深度である。
σ
jはj回目の拡散(分解周波数)であり、σ
j+1=kσ
j(k<1) (式17)と等比数列になる。
【0029】
本実施例では、式16を有限画素で計算するため、復元画像I'(x,y)を次式に変換する。
I'(x,y)=Σ
y'Σ
x'(Gσ
02-t(x',y')*f(x・x',y・y'))+
Σ
Jj=1(Σy'Σx'(LOGσ
j2-t(x',y')*f
j(x・x',y・y'))) (式18)
【0030】
式12および式18は、離散的プログラムで実装可能な式となっているが、劣化画像f(x,y)に対して6つのパラメータを決定する必要がある。即ち、分解回数J、復元深度t、ガウシアン/LOGカーネルサイズn、拡散の初期値σ
0,σ
1と比率kである。
【0031】
カーネルは有限画素のたたみ込み計算を行う(x',y')の行列であり、中心のあるn×n(nは奇数)の正方行列とする。これらは上記条件1から特定の関係にある。
σ
1≧1.44σ
0
σ
j+1≧0.52σ
j
分解回数が小さいほど処理が終了するため、処理速度を優先すると、
σ
1=1.44σ
0
k=0.52
となる。但し、比率kが粗い(小さい)と分解精度が悪くなり、十分な復元が得られない。
【0032】
カーネルサイズ(正方行列の大きさ)を自動的に計算するには以下のように行う。
実施例のカーネルはガウシアン/LOGの2次元行列である。ガウシアン/LOGはいずれも行列の中心を原点として、中心から遠いほど値はゼロに近づく性質を持つ。
そこで、中心からの距離をrとし、半径rの円周で1/256未満になるσは簡易的にσ=0.3・r+0.8と近似できる。
σからカーネルサイズを求めるには、上記の式から、
r=(σ−0.8)/0.3+1と近似できる。
上記の式の右端の(+1)は製法行列とする場合に各外辺で丸め誤差がでないよう、1要素分だけ大きい正方行列にするために必要となる。
これから、カーネルサイズは(r×2)+1と算出できる。
【0033】
比率kに対して忠実度をdBで表現すると、次のようになる。
k=0.7:45dB、k=0.8:49dB、k=0.9:55dB、k=0.95:59dBとなる。忠実度が50dBを確保するには、k=0.8以上が必要である。
【0034】
必要条件は上記の通りであるが、実用になるパラメータを迅速に決定するためには、パラメータを自動算出する必要がある。
本案ではパラメータを復元量(復元深度)tと精度(比率)kの2つを決定すると他のパラメータは算術的に決定されるアルゴリズムを用いて自動算出を行う。
1. 拡散の初期値σ
0=√(t+0.5) 経験的に求めた数値
2. 拡散の初期値σ
1=1.44σ
0 非特許文献1より
3. ガウシアン/LOGカーネルサイズn=2((σ
1-0.8)/0.3+1.0)+1
非特許文献2よりσ=0.3(n/2-1)+0.8から逆算して概算奇数
4. 分解回数J=σ
j≦0.7となるj LOGの中心が(0±0.5,0±0.5)以内に収まるσ=0.7、精度kが1.0に近い場合、分解回数Jが非常に大きくなる可能性がある。
【0035】
この場合、式17であるσ
j+1=kσ
j(k<1)を次式のように等差数列に置き換えて分解回数を削減する。
σ
j=σ
1・(σ
1・kσ
1)・(j−1) (式19)
【0036】
復元処理のアルゴリズムは、主に準備処理、分解処理と再構成処理の3つに分かれる。
先ず、準備処理では、以下の処理が必要となる。復元画像I'(x,y)を表す式18を処理するには、f
jが必要である。f
jは式12によって算出される。式12と式18では、拡散値σ
02のガウシアンカーネルと拡散値σ
12〜σ
J2のJ個のLOGカーネルが必要である。これらのカーネルは、入力パラメータである復元量(復元深度)tと精度(比率)kから自動計算される拡散の初期値σ
0,σ
1より、式1及び式10で算出する。
【0037】
σ
0〜σ
Jは再構成処理のため、式17により配列等に記憶しておく。但し、分解回数Jが一定以上大きい場合(実装のメモリ容量などで規定)は、式19を利用する。
【0038】
次に、分解処理では、以下の処理が行われる。カーネルが用意できたら式12の前半に従って、劣化画像f(x,y)と、劣化画像f(x,y)に拡散値σ
02のガウシアンカーネルGσ
02を適用したGσ
02*f
0との差を求め、これをf
1とする。次いで、式12の後半に従って、f
1と、f
1に拡散値σ
12のLOGカーネルLOGσ
12を適用したLOGσ
12*f
1との差を求め、これをf
2とする。以下f
Jまでこの処理を繰り返し、劣化画像f(x,y)の分解画像f
1〜f
JをJ枚得る。
【0039】
次に、再構成処理では、以下の処理が行われる。式18に従って、分解画像f
1〜f
Jに対して拡散値σ
12-t〜σ
J2-tの復元LOGカーネルを適用し、全ての画像の和を求める。次いで、劣化画像f(x,y)に拡散値σ
02-tの復元ガウシアンカーネルを適用し、その画像に上記の復元LOGカーネルを適用した全ての画像を加算して、復元画像I'(x,y)とする。
【0040】
ここでは、グレースケールを前提としたアルゴリズムである。従って、入力画像(劣化画像)は先ずYUVの色空間に変換され、Y画像(Yプレーン)のみに対して上記復元処理が適用される。
【0041】
次に、本発明に係る画像復元方法について、
図2に示すフローチャートに従って説明する。先ず、劣化画像(入力画像)f(x,y)をYUVの色空間に変換する(ステップSP1)。次いで、YUVの色空間のうちのY画像(Yプレーン)f
0を32ビット化する(ステップSP2)。
【0042】
ステップSP3では、入力パラメータ(復元深度t、比率k)からσ
0〜
Jの拡散値配列を作成する(式17または式19)。ステップSP4では、拡散値σ
02のガウシアンカーネルGσ
02を作成する(式1)。ステップSP5では、拡散値σ
12〜σ
J2のLOGカーネルLOGσ
12〜LOGσ
J2を作成する(式10)。
【0043】
ステップSP6では、拡散値配列の配列内容を単純に、σを−tとした復元深度配列を作成する。ステップSP7では、ステップSP4,SP5と同様の作業をステップSP6の腹元深度配列で行い、復元カーネルを作成する。ここまで、ステップSP1〜ステップSP7が準備処理工程である。
【0044】
次いで、ステップSP8では、Y画像f
0にステップSP4の拡散値σ
02のガウシアンカーネルGσ
02を適用した画像Gσ
02*f
0をY画像f
0から引いて1回分解後の分解画像f
1を生成する(f
1=f
0−Gσ
02*f
0)。ステップSP9では、(j−1)回分解後の分解画像f
j-1にステップSP5の拡散値σ
j-12のLOGカーネルLOGσ
j-12を適用した画像LOGσ
j-12*f
j-1を(j−1)回分解後の分解画像f
j-1から引いてj回分解後の分解画像f
jを生成する(f
j=f
j-1−LOGσ
12*f
j-1)。
【0045】
ステップSP10では、j(1≦j≦J)がJと等しいか否かが判断され、j<Jの場合にはステップSP9に戻って分解画像f
jを生成し、j=Jの場合にはステップSP11へ進む。ここまで、ステップSP8〜ステップSP10が分解処理工程であり、分解画像をJ枚得る。
【0046】
次いで、ステップSP11では、分解画像f
1〜f
JにそれぞれステップSP7で作成した復元LOGカーネルLOGσ
12-t〜LOGσ
J2-tを適用し、全ての画像の和を求めて総和画像を作成する。ステップSP12では、Y画像にステップSP7で作成した復元ガウシアンカーネルGσ
02-tを適用し、ステップSP11で作成した総和画像と加算する。
【0047】
ステップSP13では、Y画像を劣化画像(入力画像)f(x,y)のビット深度に戻す。ステップSP14では、ステップSP13で得た画像をYプレーンとして劣化画像(入力画像)f(x,y)のUVプレーンと合成し、復元画像I'(x,y)として出力する。ステップSP11〜ステップSP14が再構成処理工程である。
【0048】
図3は分解処理・復元処理におけるラインバッファ操作方法を示し、分解処理工程(ステップSP8〜ステップSP10)及び再構成処理工程(ステップSP11)において、J=3の場合である。
【0049】
Y画像f
0から分解画像f
1、分解画像f
2、分解画像f
3を生成する作業及び分解画像f
1〜f
3に復元LOGカーネルLOGσ
12-t〜LOGσ
32-tを適用し、全ての画像の和を求めて総和画像を作成する作業が、処理時刻(1〜8)毎に各ラインバッファ(LBLV1〜LBLV4)において並行処理される。
ここで、ラインバッファは入力画像の水平画素数×カーネル縦サイズの大きさを持つ一時記憶メモリである。
【0050】
具体的には、最初の時刻(
図3の最上段)では、ラインバッファ(LV1)からY画像f
0を読み込み、ラインバッファ(LV2)に分解画像f
1を書き込む。
次の時刻(
図3の上から2段目)では、ラインバッファ(LV1)にリードモディファイ(f
0−=f
0*G−)を書き込み、ラインバッファ(LV3)に分解画像f
2を書き込む。
次の時刻(
図3の上から3段目)では、ラインバッファ(LV2)にリードモディファイ(f
1−=f
1−*L1−)を書き込み、ラインバッファ(LV4)に分解画像f
3を書き込む。
次の時刻(
図3の上から4段目)では、ラインバッファ(LV3)にリードモディファイ(f
2−=f
2−*L2−)を書き込み、ラインバッファ(LV4)にリードモディファイ(f
3−=f
3−*L3−)を書き込む。
次の時刻(
図3の上から5段目)では、ラインバッファ(LV4)から(f
3−)を読み取り、ラインバッファ(LV3)に(f
2−)+(f
3−)を書き込む。
次の時刻(
図3の上から6段目)では、ラインバッファ(LV3)から(f
2−)+(f
3−)を読み取り、ラインバッファ(LV2)に(f
1−)+(f
2−)+(f
3−)を書き込む。
次の時刻(
図3の上から7段目)では、ラインバッファ(LV2)から(f
1−)+(f
2−)+(f
3−)を読み取り、ラインバッファ(LV1)に(f
0−)+(f
1−)+(f
2−)+(f
3−)を書き込む。
このように処理時刻毎に各ラインバッファにおいて並行処理されることにより、分解処理及び復元処理の迅速化が可能になる。
【0051】
図4はレンズ収差により劣化した画像の(a)は復元前の画像、(b)は復元後の画像である。
また、
図5は一般的に用いられるテストチャートを用いたものであり、(a)は原画、(b)は原画のぼかし画像、(c)はぼかし画像を本発明方法で復元した画像である。
これらの画像から、本発明方法によりレンズの収差によるガウス型のボケによる劣化画像が復元されていることが分かる。