(58)【調査した分野】(Int.Cl.,DB名)
前記画像生成部は、前記第1フレームの画素毎に、前記重み算出部で算出された重みを前記入力フレームの画素値に乗算した値の総和を、前記重みの総和に基づき正規化することにより、前記出力画素値を計算する
請求項1ないし2のいずれか一項に記載の画像処理装置。
前記重み算出部は、前記入力フレームにおける前記動きベクトルの推定誤差を表す画素数と、前記第1フレームおよび前記入力フレームの解像度比とに応じて決定される標準偏差を有するガウス分布に基づいて、前記第1フレームの画素の重みを算出する
請求項1に記載の画像処理装置。
前記重み算出部は、前記第1フレームにおいて前記第1位置情報が示す位置の最近傍画素を前記ガウス分布の中心に対応させることにより、前記第1フレームの画素の重みを算出する
請求項4に記載の画像処理装置。
前記復元処理部は、対象フレームを所定の劣化方法で劣化させたフレームと、前記出力フレームとの差分が最小化されるような前記対象フレームを前記第1の出力フレームとして求める
請求項8に記載の画像処理装置。
前記画像生成部は、前記出力フレームの画素の位置に対応する前記入力フレームの位置である第1位置の動きベクトルに基づき、前記出力フレームおよび入力フレームの解像度比に応じて前記出力フレームの画素の位置を起点として前記動きベクトルが指し示す第2位置の出力画素値を求め、前記第2位置の出力画素値を前記出力フレームの画素の位置と同じ位置の画素に設定することにより、前記出力フレームと同じ解像度を有する第2出力フレームを生成する
請求項1ないし9のいずれか一項に記載の画像処理装置。
【発明を実施するための形態】
【0011】
以下、図面を参照しながら、本発明の実施形態について説明する。
【0012】
(第1の実施形態)
図1は、第1の実施形態に係る画像処理装置のブロック図である。
【0013】
この画像処理装置は、動き推定部11と、ワーピング部12と、重み計算部13と、重み付け部14と、蓄積バッファ15と、蓄積重みバッファ16と、重み正規化部17とを備える。本装置は、1つ以上の入力フレームと、基準フレームとに基づき、動き推定、ワーピング、重み計算、正規化等の処理を行って、出力フレームを生成する。要素14、15、16、17は、重み計算部13の計算結果と、入力フレームとに基づき、出力フレームを生成する画像生成部に相当する。
【0014】
動き推定部11は、入力フレームから基準フレームへの動き推定を行うことにより、入力フレームの画素毎に、動きベクトルを算出する。動き推定部11は、入力フレームの画素毎に、準フレームへの動きベクトルを取得する動きベクトル取得部の一例に相当する。後述のように、動きベクトル取得部は、動き推定を行わず、記録媒体から事前に与えられた動きベクトルを読み出すことで、動きベクトルを取得してもよい。
【0015】
ワーピング部12は、入力フレームの画素毎に、当該画素の位置情報と、動き推定部11で算出された動きベクトルに基づき、第1位置情報を生成する。たとえば位置情報に出力フレームと入力フレームの解像度比を乗じた値と、動きベクトルに当該解像度比を乗じた値との加算により、第1位置情報を生成する。ワーピング部12は、第1位置情報を生成する位置生成部に対応する。
【0016】
重み計算部13は、入力フレームと同一または異なる解像度のフレーム(第1フレーム)において、第1位置情報により示される位置からの距離が大きくなるほど重みが小さくなるように、第1フレームの各画素に重みを算出する。第1フレームの解像度は、出力フレームの解像度と同じである。
【0017】
また、重み計算部13は、第1フレームの画素毎に、重み計算部13で算出された重みの総和を計算する。入力フレームが複数の場合は、入力フレーム全体についての重み総和を計算する。蓄積重みバッファ16は、重みの総和を、第1フレームの画素毎に格納するためのバッファである。ここでは蓄積重みバッファ16は、第1フレームと同じ解像度のフレームを蓄積重みフレームとして保持しており、この蓄積重みフレームの画素に重み総和を格納する形で、重み総和を保持するものとする。蓄積重みフレームの解像度は出力フレームと同じである。なお、後述するように、本実施形態の具体例では、重みの総和を一度に計算して格納するのではなく、入力フレームの画素毎に算出された重みを、処理対象となる入力フレームの画素が切り替わるごとに、累積的に、蓄積重みフレームの各画素に対して累積加算していくことで重み総和を計算する。
【0018】
重み付け部14は、第1フレームの画素毎に、重み計算部13により算出された重みにより、入力フレームの各画素の画素値を重み付けした重み付け画素値の総和を計算する。入力フレームが複数の場合は、入力フレーム全体に対して、重み付け画素値の総和を、第1フレームの画素毎に計算する。蓄積バッファ15は、重み付け画素値の総和を、第1フレームの画素毎に格納するためのバッファである。ここでは蓄積みバッファ15は、第1フレームと同じ解像度のフレームを蓄積フレームとして保持しており、この蓄積フレームに重み付け画素値の総和を格納する形で、重み付け画素値の総和を保持するものとする。蓄積フレーム15の解像度は出力フレームと同じである。なお、後述する本実施形態の具体例では、重み付け画素値の総和を一度に計算して格納するのではなく、入力フレームの画素毎に算出された重み付け画素値を、処理対象となる入力フレームの画素が切り替わるごとに、累積的に蓄積フレーム15の各画素に対して加算していくことで、重み付け画素値の総和を計算する。
【0019】
重み正規化部17は、第1フレームの画素毎に、重み付け部14により重み付けされた画素値の総和を、重み計算部13で計算された重み総和で除算することにより出力画素値を算出し、第1フレームの画素に当該出力画素値を設定した出力フレームを生成する。より具体的には、蓄積バッファ15内の蓄積フレームの各画素値を、蓄積重みバッファ16内の蓄積重みフレームの対応する画素値で除算することで、出力フレームを生成する。
【0020】
なお、出力フレームの解像度、すなわち、蓄積フレームおよび蓄積重みフレームの解像度は、入力フレームの解像度より大きくてもよいし、小さくてもよいし、入力フレームと同じでもよい。入力フレームの解像度より大きい場合は、ノイズを抑制した超解像が可能となる。入力フレームの解像度以下の場合は、ノイズを抑制した画像生成が可能となる。以下の説明においては、特に断りの無い限り、蓄積フレームおよび蓄積重みフレームの解像度は、入力フレームの解像度より大きい場合を想定する。
【0021】
以下、各処理部の詳細について説明する。
【0022】
[動き推定部11]
動き推定部11は、入力画像の1つ以上のフレームと、基準フレームとを格納した記憶装置から、入力フレームと、基準フレームを読み込む。入力フレームと基準フレームに基づき、動き推定を行うことで、入力フレームの画素毎に動きベクトルを取得する。入力フレームを複数用いる場合、1つの入力フレームの処理が終わる毎に、次の入力フレームを読み込む。
【0023】
ここで、入力画像の各フレームは、動画像のフレームであってもよいし、複数の静止画像の個々のフレームであってもよい。入力画像の各フレームは、たとえば撮影時の手ブレなど、何らかの要因で時間的に位置ズレを起こしながら取得されたものでもよい。この場合、本実施形態の動作により、その位置ズレを補正した高解像度な出力フレームを得ることができる。
【0024】
基準フレームは、入力画像のうちの1フレームでもよいし、入力画像とはまったく別の画像のフレームでもよい。入力画像のうちの1フレームの場合、基準フレームは、入力フレームより時間的に前のフレームであっても、時間的に後のフレームであってもよい。たとえば時刻tのフレームを基準フレームとし、時刻t+1、t+2、t+3・・・のフレームを入力フレームとしてもよい。
図3に示すように一定時間間隔の4つ以上の入力フレームが入力される場合、時刻の最も早い1番目の入力フレームと基準フレームとに基づき動き推定を行い、次に、2番目の入力フレームと当該基準フレームとに基づき動き推定を行い、以降のフレームも同様にして、同じ基準フレームに対して動き推定を行ってもよい。
【0025】
ここで、入力フレームの座標(x,y)の値を、I
src(x,y)と定義する。
【0026】
入力フレームの値は、スカラーでも、ベクトルでもよい。スカラーとしては、たとえば輝度値があり、ベクトルとしては、カラー画像におけるRGBやYUVがある。
【0027】
また、基準フレームの座標(x,y)の値を、I
ref(x,y)と定義する。本実施形態では、入力フレームと基準フレームの解像度は同じであるとするが、これらの解像度が異なってもよい。この場合、後述の動きベクトルスケール変換では、これらの解像度の違いも考慮してスケール変換を行えばよい。
【0028】
<動き推定>
上述したように、動き推定部11は、入力フレームと基準フレームに基づき、動き推定を行うことで、入力フレームの画素毎に基準フレームへの動きベクトルを取得する。動きベクトルの検出には、様々な方法を使うことができる。ここでは、一例として、ブロックマッチングを使ったものを述べる。ただし、動き推定の方法は、これに限ったものではない。
【0029】
ブロックマッチングは入力フレームを矩形ブロックに分割し、ブロック毎に対応するブロックを基準フレーム内から探索する方法である。ブロックの大きさ(縦横サイズ)をM1,M2によって表し、ブロックの位置をi,jとする。動きを求めるための誤差関数として、平均絶対値差分(Mean Absolute Difference:MAD)などを用いることができる。MADの計算式を以下に示す。
【数1】
【0030】
ここでu=(u
x,u
y)
Tである(Tは転置を表す)。uは評価したい動きベクトルである。MADの代わりに、平均二乗誤差(Mean Squared Error)を用いてもよい。
【0031】
探索範囲を-WからWまでの矩形領域とすると、i,j位置の動きベクトルu(i,j)を求めるブロックマッチングアルゴリズムは、以下のように表すことができる。
【数2】
ここで
は、誤差関数Eを最小にするu
x,u
yを探すことを表す。またブロック内の各画素の動きベクトルは、ブロックの動きベクトルと同一であるとする。このようにして、入力フレーム内の全画素について、それぞれの動きベクトルを算出する。
【0032】
また、動き推定は、画素単位(整数位置精度)のマッチングを行ってもよいし、小数位置精度のマッチングを行ってもよい。小数位置精度の動き推定に、例えば等角直線フィッティングなどを用いることができる。
【0033】
ここでは、動き推定部11で動きベクトルを検出しているが、動きベクトルを予め与える構成も可能である。例えばMPEG2のような動画像符号化における圧縮のために用いられている動きベクトルを用いてもよい。または、圧縮動画像のデコーダによってデコードされた動きベクトルを用いることができる。つまり、本実施形態に係る動きベクトル取得部は、入力フレームから基準フレームへの動き推定を行うことで動きベクトルを取得してもよいし、予め与えられた動きベクトルを記憶媒体から読み出すことで取得してもよい。
【0034】
また、動き推定部11では、LucasKanade法を使って画面全体のパラメトリックモーションを求めて、そこから動きベクトルを求めることもできる。以下、LucasKanade法を用いた動きベクトルの算出について、簡単に説明する。
【0035】
パラメトリックモーションは、パラメータ化された射影で、動きを表現するものである。座標(x,y)の動きは、例えばアフィン変換を使って、以下のように表すことができる。
【0036】
ここでa=(a
0,a
1,a
2,a
3,a
4,a
5)
Tが、動きのパラメータである。 (x y 1 0 0 0)とベクトルaの乗算によって、座標xの変換(写像)が行われ、(0 0 0 x y 1)とベクトルaの乗算によって座標yの変換が行われる。
【0037】
このパラメータaを画面全体から、LucasKanade法(V. Couture and M. S. Langer, ”Can Lucas-Kanade be used to estimate motion parallax in 3D cluttered scenes?”, Computer and Robot Vision, p. 63-72, 2007)を用いて推定する。なお、1つの入力フレームに対して、ベクトルaは1つだけ得られる。
【0038】
1. 勾配
を計算
2. ヘッセ行列
を計算
3.
を計算
4. 更新
、規定数に達するまで、ステップ2,3,4を繰り返す
ここで、上付のtは、反復回数を表す。
パラメータaが求まれば、u(x,y)=p(x,y)a-(x,y)
Tによって、入力フレームにおける任意座標位置の動きベクトルを求めることができる。(x,y)が入力フレームの座標、p(x,y)aが入力フレームの座標の変換後の座標である。よって、これらの差分を取ることで、動きベクトルを求めることができる。
【0039】
<動きベクトルスケール変換>
入力フレームと、蓄積フレームの解像度(すなわち出力フレームの解像度)が異なる場合に対応するため、動き推定部11は、入力フレームの解像度で求めた動きベクトルu(x,y)を、以下のように、蓄積フレームでのサイズにスケール変換する。
【数3】
ここでU(x,y)はスケール変換された動きベクトル、u(x,y)はスケール変換前の動きベクトルである。また、ρは入力フレームと蓄積フレームの解像度比、すなわち、蓄積フレームの解像度/入力フレームの解像度である。なお、当然ながら、ρは整数の場合も、小数の場合もあり得る。
【0040】
[ワーピング部12]
ワーピング部12は、入力フレームの画素I
src(x,y)に対応する、第1フレーム上の位置、すなわち蓄積フレーム上の位置を求める。スケール変換された動きベクトルU(x,y)を用いると、I
src(x,y)に対応する蓄積フレーム上の位置(蓄積位置座標)D(x,y)は、以下のように表すことができる。
図4に、入力フレームの画素に対応する蓄積フレーム上の位置(蓄積位置座標)を求める様子を模式的に示す。
【数4】
ここでρは、前述した入力フレームと蓄積フレームの解像度比、すなわち、蓄積フレームの解像度/入力フレームの解像度である。ρは整数の場合も、小数の場合もあり得る。
数式4で求まる蓄積バッファ15上の位置は、蓄積バッファ15の整数位置座標とは限らず、小数位置座標の場合(小数画素精度の場合)もあり得る。
図4に示した例では、蓄積フレーム上の位置D(x,y)は、小数位置座標になっている。本実施形態では小数画素精度で処理を行うが、整数画素精度で処理を行うことも可能である。
【0041】
なお、解像度比ρ=1の場合は、数式3および数式4から、入力フレームの位置(x,y)に、動きベクトルu(x,y)を単純に加算した位置が、蓄積フレーム上の位置に対応する。
【0042】
[蓄積バッファ15]
蓄積バッファ15が有する蓄積フレームの解像度は、前述したように、入力フレームより大きくても、小さくてもよいし、入力フレームと同じでもよい。例えば、蓄積フレームの解像度を、入力フレームに対して、縦横2倍や縦横3倍、縦横4倍にして、蓄積フレームの解像度を増加させることで、超解像効果が生じさせることができる。蓄積バッファ15は、任意の記憶媒体やプログラム上で管理されるバッファ領域により実現されることができる。
【0043】
蓄積フレームの座標を(X,Y)と定義し、蓄積フレームの座標(X,Y)の値を、B(X,Y)と定義する。蓄積フレームの座標を、蓄積位置座標と呼ぶ場合がある。
【0044】
[蓄積重みバッファ16]
蓄積重みバッファ16が有する蓄積重みフレームの解像度は、蓄積フレームと同一である。
【0045】
蓄積重みフレームの座標を(X,Y)とし、蓄積重みフレームの座標(X,Y)の値を、W(X,Y)と定義する。蓄積重みフレームの座標も、蓄積バッファ15同様、蓄積位置座標と呼ぶ場合がある。
【0046】
[出力フレーム]
出力フレームの解像度は、蓄積フレームおよび蓄積重みフレームと同じである。出力フレームの座標(X,Y)の値をI
out(X,Y)と定義する。
【0047】
[重み計算部13]
重み計算部13は、入力フレームの画素毎に、ワーピング部12で求めた蓄積フレームの対応する位置から遠くなるほど小さくなる重みを、蓄積フレームの各画素に対して算出する。
【0048】
蓄積フレームは、デジタルデータを想定しており、画素位置は離散的である。なお、入力フレームおよび基準フレームなども、蓄積フレーム同様、デジタルデータを想定している。それに対して、ワーピング部12が計算した真の位置、すなわち、数式4で求まるD(x,y)は、離散的な整数位置ではなく、小数位置を示すことがあり得る。
【0049】
重み計算部13は、D(x,y)により表される真の位置(小数画素精度の位置)からの距離に応じて、蓄積フレームの画素位置(整数位置)の画素に対して重みを設定し、重み加算部14は、蓄積フレームの各画素に、重み付けした画素値を蓄積(加算)する。これを入力フレームの画素毎に行うことで、蓄積バッファの各画素には、重み付けされた画素値が累積的に加算されていく。入力フレームが複数の場合は、複数の入力フレーム分の累積加算が行われる。なお、重み加算部14の動作の詳細は後述する。
【0050】
関連技術では、
図7(A)に示すように、動きベクトルに伴う移動先(ワープ先)の座標は高解像度の整数画素精度であるとともに、移動先の周辺への距離に応じた重み付けを行っておらず、大きな離散化誤差が発生する。このため、
図9(A)に示すような、格子状ノイズが発生してしまう問題があった。これに対して、本実施形態では、
図7(B)に示すように、移動先の真の位置からの距離に応じて各画素に重み付けを行うため、蓄積フレームにおいて離散的な画素位置間の中間的な位置での表現が可能となる。よって、
図9(B)に示すように、格子状ノイズの発生を抑えることができる。
【0051】
蓄積位置座標(真の位置)は、ワーピング部12で求められたようにD(x,y)であるが、これは、小数精度位置である可能性がある。そこで、蓄積位置座標D(x,y)の近傍離散座標Zを、以下のように求める。近傍離散座標は、最近傍画素の座標、すなわち、蓄積位置座標D(x,y)を包含する画素の位置座標、あるいは当該蓄積位置座標D(x,y)に最も近い画素の位置座標に相当する。
図4に、蓄積位置座標D(x、y)から近傍離散座標Zを求める様子を模式的に示す。
【数5】
round(D(x,y))は、蓄積位置座標D(x,y)を四捨五入することを表す。Z=(X,Y)
Tは近傍離散座標を表す。
【0052】
重み計算部13は、この近傍離散座標Z=(X,Y)と、蓄積位置座標D(x,y)との誤差(距離)に基づいた重みを、近傍離散座標Z=(X,Y)の画素に対して設定する。この距離は、
図4では、D(x,y)とZ間の距離に対応する。この距離に対して、ガウス分布で重みを設計すると、近傍離散座標(X,Y)に対する重みw(X,Y)は、以下のように算出される。
【数6】
【0053】
ここで、σはガウス分布の減衰度合いを表すガウス分布の標準偏差である。σが大きいほど、裾が広がるような分布になる。
【0054】
ただし、重みを与えるのは近傍離散座標の画素だけではなく、近傍離散座標の周辺の画素にもその距離に応じた重みを与える。近傍離散座標Zの周辺は、
図5に示すように、近傍離散座標の画素に対し、半径rの範囲と定義する。ただしこの定義は一例であり、他の近傍の定義も可能である。最近傍画素と周辺画素とをまとめて蓄積画素と呼ぶ場合がある。
【0055】
近傍離散座標に対し周辺の局所座標を(m,n)
Tとすると、周辺の画素の重みは、以下のように定義できる。なお、半径rの外側に位置する画素については重みをゼロとすればよい。ガウス分布と、標準偏差σと、解像度比ρの関係を
図6に模式的に示す。ガウス分布の中心が近傍離散座標に対応させられる。中心の重みが最も大きく、周辺に遠ざかるにつれて重みが小さくされる。
図6では表記の都合上、縦および横方向のみの分布が示されるが、実際には中心の画素の中央から周囲全方位に向けて裾が広がる分布でもよい。
【数7】
ここではガウス分布を用いたが、以下のように逆数を使って、周辺の画素の重みを定義してもよい。
【数8】
||Z-D(x,y)||は距離を表す。他にも距離||Z-D(x,y)||が大きくなるほど、重みが小さくなるような関数である限り、その関数により重みを設定してもよい。例えば、エッジの方向に沿った異方性のガウス分布などを用いてもよい。
【0056】
<σの設定方法バリエーション>
数式6および数式7の重み関数のσは、ガウス分布の広がりを表現している。広がりが大きいほど、拡散された蓄積が可能になるため、格子状ノイズの発生を抑えることができる。しかし、σが大きすぎると、ボケを発生させてしまう要因ともなる。したがって、σは大きすぎず小さすぎない適度な値に設定するのがよい。以下、σの設定例を示す。
【0057】
設定方法の例としては、入力フレームと蓄積フレームの解像度比ρを使うことができる。ρ=1、つまり、解像度変換を伴わない場合は、σは0に近い値でよい。元の1画素(入力フレームの1画素)に対して、蓄積フレームでは縦横それぞれにρ個分の領域内の画素が含まれることになる。ρ=3であれば、
図6に示すように、元の1画素に対して、蓄積フレームでは3×3個の画素が含まれることになる。このため、元の1画素の広がりの95%が収まるようなガウス分布は、ガウス分布の特性から、
と計算できる。
【0058】
またσは動き推定の精度にも依存する。動き推定の精度が高いならば、σは小さな値でも格子状ノイズは発生しない。しかしながら、動き推定精度が低いならば、σを大きくしないと、格子状ノイズの発生を抑制できない。
【0059】
入力フレームの解像度において、動き推定の誤差をε画素と見積もることができたとする。この場合、蓄積フレームの解像度では、
の誤差となる。
【0060】
例えば、この誤差の半分程度で重みを付ける場合、σは以下のように設計できる。
【0061】
[重み付け部14]
重み付け部14は、入力フレームの画素I
src(x,y)を、重み計算部13で求めた重みで重み付け(乗算)して重み付けした画素値を求め、蓄積フレームの各画素に蓄積する。蓄積は、累積加算により行う。つまり、処理対象となる入力フレームの画素が変わるごとに、蓄積フレームの画素に、重み付けされた画素値を累積的に加算していく。すべての入力フレームの全画素に対する処理が終わった後の最終的な累積加算後の値がゼロもしくは一定値以下の画素があるときは、周辺の画素から補間により当該画素の値を算出してもよい。
【0062】
以下、蓄積バッファ15において、近傍離散座標Z=(X,Y)
Tの画素とその周辺半径rの画素群を対象として蓄積を行う動作を示す。近傍離散座標Z=(X,Y)
Tの周辺半径rの画素とは、
図5に示したように、近傍離散座標Z=(X,Y)
Tに対し左右それぞれr、上下それぞれrの範囲内の他の画素群であるとする。
【0063】
近傍離散座標Z=(X,Y)
Tの周辺の局所座標を(m,n)
Tと表記すると、重み付けされた画素値の計算および累積加算は以下のように行う。m,nは、-r<=m<=r、-r<=n<=rを満たす整数である。なおm=0,n=0の場合、近傍離散座標Z=(X,Y)
Tそのものを指す。
【数9】
【0064】
この式は、w(X+m, Y+n)とI
src(x,y)の乗算により、重み付けされた画素値を計算し、”+=”により累積加算を行う。s+=aは、aをsに加算することを意味する。この式の計算は、周辺の画素すべてに対して行う。
【0065】
図8に蓄積フレームへの累積加算の例を示す。
【0066】
2つの入力フレーム1、2を対象に、累積加算を行っている。入力フレーム1、2の解像度は、2×2であり、蓄積フレームの解像度は6×6である。したがって、蓄積フレームと入力フレームの解像度比は3である。入力フレーム1の左上の画素(画素値がaの画素)の動きベクトルu(0,0)は(1/3,0)
Tである。その他の画素の動きベクトルも(1/3,0)
Tであるとする。また、入力フレーム2の左上の画素の動きベクトルu(0,0)は、(0, 1/3)
Tであり、その他の画素の動きベクトルも(0, 1/3)
Tであるとする。
【0067】
解像度比が3であるため、入力フレーム1、2上の動きベクトルにρ=3を乗じた(1,0)
Tが蓄積フレーム上の動きベクトルU(x,y)(= ρu(x,y))になる。入力フレーム1における左上の画素(画素値aの画素)の座標は、当該画素の中心である(0.5,0.5)
Tとすると、動きベクトルによるワープ先は3*(0.5,0.5)
T +(1,0)
T =(2.5,1.5)である。これは、蓄積フレームにおける画素値aの画素の中心の座標に対応し、近傍離散座標にたまたま一致する。この画素の重みが1、上下左右の隣接画素を周辺画素として重みを0.5とすると、重み付けされた画素値は、近傍離散座標の画素がa、周辺画素が0.5aとなる。なお、この例えは、簡単のため、近傍離散座標の画素に対して斜め方向の隣接画素については重みの計算を行わない場合を示している。
【0068】
これと同様の処理を、入力フレーム1の他の画素、および入力フレーム2の画素についても行う。これにより、
図8のように重み付けされた画素値の累積加算が得られる。たとえば左上から右に2つ、下に2つの画素では、重み付けされた画素値の累積加算は、0.5a+0.5eとなる。
【0069】
<蓄積重みフレームへの重みを蓄積>
重み計算部13は、近傍離散座標の画素とその周辺画素に対して算出した重みを、以下の式に従って、蓄積重みフレームの対応する画素に蓄積する。蓄積は、累積加算により行う。つまり、処理対象となる入力フレームの画素が変わるごとに、蓄積重みフレームの画素に、重みを累積的に加算していく。すべての入力フレームの全画素に対する処理が終わった後の最終的な累積加算後の値がゼロもしくは一定値以下の画素があるときは、周辺の画素から補間により当該画素の値を算出してもよい。以下に重み加算(累積加算)の式の例を示す。
【数10】
【0070】
[重み正規化部17]
重み正規化部17は、蓄積フレームの各画素の値(重み付けされた画素値の累積加算)を、蓄積重みフレームの各画素の値(重みの累積加算)で除算することにより、出力フレームを生成する。これは蓄積フレームの各画素によって蓄積された回数が異なるため、蓄積重みフレームによる除算により、蓄積フレームの各画素の値を正規化するものである。正規化の式を、下記に示す。蓄積フレームの各画素の値B(X,Y)を、蓄積重みフレームの各画素の値W(X,Y)で除算することにより、出力フレームI
out(X,Y)を生成している。なお、本正規化は、入力フレームが複数の場合は、すべての入力フレームについて蓄積フレームおよび蓄積重みフレームへの累積加算が完了した後に行う。
【数11】
【0071】
図2は、第1の実施形態に係る動作のフローチャートである。
【0072】
動き推定部11は、入力フレームと基準フレームとを読み込む。入力フレームが複数の場合は、入力フレームのそれぞれごとに以下のステップS11〜S15を繰り返す。
【0073】
ステップS11では、入力フレームから基準フレームに対する動き推定を行うことで、入力フレームの画素毎に、動きベクトルを取得する。
【0074】
ステップS12では、入力フレームの画素のうち未選択の画素を1つ選択して、選択した画素の位置と、当該画素の動きベクトルと、入力フレームと蓄積フレームの解像度比に応じて、蓄積位置座標(第1位置情報)を求める。具体的に、選択した画素の位置情報に解像度比を乗じ、動きベクトルに解像度比を乗じ、これらの乗算結果を加算することで、蓄積位置座標を求める。
【0075】
ステップS13では、蓄積位置座標から近傍離散座標の画素を求め、さらに周辺画素を特定する。そして、蓄積画素(近傍離散座標の画素と周辺画素)について、蓄積位置座標からの距離に応じて重みを算出する。
【0076】
ステップS14では、ステップS12で選択した画素の画素値に、ステップS13で算出した重みをそれぞれ掛けて重み付け画素値を算出し、蓄積フレームにおける蓄積画素(近傍離散座標の画素および周辺画素)に対してそれぞれ蓄積する。
【0077】
ステップS15では、ステップS13で算出した重みを、蓄積重みフレームにおける蓄積画素(近傍離散座標の画素および周辺画素)に対してそれぞれ蓄積(加算)する。
【0078】
ステップS12で選択していない画素が存在する場合は、ステップS12〜S15を、すべての画素が選択されるまで繰り返し行う。
【0079】
すべての入力フレームについてステップS11〜S15が完了したら、ステップS16に進む。
【0080】
ステップS16では、蓄積フレームを蓄積重みフレームで除算することにより出力フレームを生成する。
【0081】
以上、第1の実施形態によれば、格子状等のアーチファクト(ノイズ)が抑えられた超解像が可能となる。入力フレームの個数が1つの場合も、ノイズが抑えられた画像が得られるため、本実施形態は有効に機能する。
【0082】
(第2の実施形態)
第1の実施形態では、入力画像の各フレームが、撮影時の手ブレなど何らかの要因で、時間的に位置ズレをしながら取得されたものである場合に、その位置ズレを補正した高解像度な画像のフレームが得られる。しかしながら、入力画像に、レンズによるボケや、画像符号化による劣化などの劣化が含まれる場合は、出力フレームの画像は、当該劣化が含まれたままの画像となる。本実施形態では、当該画像からさらに当該ボケなどの劣化を除去することで、劣化の無いもしくは低減された高解像度画像を取得する。
【0083】
図10は、第2の実施形態に係る画像処理装置のブロック図である。
図1に示した装置に対し、正規化部の後段に、劣化復元部18が追加されている。劣化復元部18以外の構成は、第1の実施形態と同様であるため、同一の符号を付して、重複する説明を省略する。
【0084】
劣化復元部18は、重み正規化部17により得られた画像フレームから、レンズによるボケなどの劣化を復元した出力フレームを生成する。レンズによるボケなど画像の劣化を復元する手法は、一般的な手法などを用いることができる。
【0085】
たとえば、周波数変換して逆変換するインバースフィルタや、直接正則化法(ウィーナーフィルタ、Tiknovの正則化)、反復法などがある(M. R. Banham and A. K. Katsaggelos, “Digigal Image Restoration”, IEEE Signal Proc. Magazine, 1997)。
【0086】
一例として、もっとも単純な反復法であるLandweber法について示す。
ボケなどの劣化を
H
と表し、
正規化された画像を
I
out
劣化が復元された画像を
R
と表す。
【0087】
ここで、画像(正規化された画像、および劣化が復元された画像)は、スキャンライン順に並べられたベクトル形式であるとする。また劣化Hもベクトル形式であるとする。
【0088】
ここで、復元問題は、復元画像をHで劣化させた結果と、正規化された画像との差分(誤差)を最小化する問題として、以下のように記述できる。なお、Hは事前に与えられている。
【数12】
ここで
は、Eを最小化するRを探すことを表す。
【0089】
この最小化問題を最急降下法で求解するものがLandweber法であり、下記の式を反復的に計算すればよい。
【数13】
【0090】
ここで上付のtは反復回数を表す。反復によって収束したRは、正規化された画像から劣化を取り除いた画像となる。
【0091】
以上、第2の実施形態によれば、正規化された画像フレームに対して劣化復元処理を行うようにしたことにより、格子状等の形状のアーチファクト(ノイズ)が抑えるとともに、ボケなどの劣化を抑制できる。
【0092】
(第3の実施形態)
本実施形態では、入力画像が、RAWデータと呼ばれる形式を有する場合を示す。CMOSイメージセンサなどのイメージセンサでは、撮像素子から出力される信号をそのままデジタル化したRAWデータとして撮像画像を取得する。RAWデータはベイヤ配例を有するのが一般的である。ベイヤ配列の例を
図11に示す。R,G,Bなどの色情報が、空間的に規則的に並置されている。
【0093】
RAWデータ上では、各画素はRGBのいずれか1つに対応し、1つの画素内にRGBが揃っているわけではない。蓄積フレームの同じ画素では、RとBなど、異なる色の情報は加算してはならない。そこで、本実施形態では、蓄積フレームをR, G, B用に3つ用意し、蓄積重みフレームもR, G, B用に3枚用意する。
【0094】
図13に、第3の実施形態に係る画像処理装置のブロック図を示す。この画像処理装置は、R用の蓄積バッファ、G用の蓄積バッファ、B用の蓄積バッファの3つの蓄積バッファ25を備える。また、R用の蓄積重みバッファ、G用の蓄積重みバッファ、B用の蓄積重みバッファの3つの蓄積重みバッファを備える。R, G, Bの各蓄積バッファ25はそれぞれR,G,B用の蓄積フレームを保持する。R, G, Bの各蓄積重みバッファ26はそれぞれR,G,B用の蓄積重みフレームを保持する。
【0095】
動き推定部11は、RAWデータ形式の入力フレームと、RAWデータ形式の基準フレームに基づき動き推定を行う。RAWデータフレームはRGBの画素が格子状に存在するため、そのままでは動き推定を行うことが難しい。そこで例えばRAWデータのフレームからR画素だけをサンプリングしてR画像フレームを生成する(
図11のベイヤ配列の場合、解像度は1/2になる)。また、基準フレームも同様にして、R画像の基準フレームを生成する。
【0096】
動き推定部11は、R画像の入力フレームと、R画像の基準フレームで、第1の実施形態と同様にして、動き推定を行う。ベイヤ配列の同じ単位領域(2×2の2つのGと、Rと、B)内の2つのG位置と、1つのB位置には、R位置と同じ動きベクトルを適用してもよいし、線形補間を使って、G位置やB位置の動きベクトルを求めてもよい。ここでは、R画像に基づき動き推定を行う例を示したが、G画像またはB画像に基づき動き推定を行ってもよい。
【0097】
R画像で求めた動きベクトルを元のRAWデータでの動きベクトルに直すには、解像度比(ここでは2)を乗じればよい。またワーピング部12の処理では、第1の実施形態と同様に、RAWデータと蓄積バッファの解像度比を、当該動きベクトルに乗じればよい。
【0098】
重み計算部13は、基本的に第1の実施形態と同様に重みを計算するが、本実施形態では、入力フレームの画素のカラーチャネルと、蓄積フレームのカラーチャネルが一致しているかどうかで、蓄積フレームに重み付けをする。すなわち、第1実施形態で用いた重みに加えて、本実施形態の重みをさらに乗じる。具体的に、入力フレームの画素がRならば、Rの蓄積フレームの重みは1とし、それ以外のカラーチャネル(G,B)の蓄積フレームの重みは0とする。これにより、
図12に示すように、各蓄積フレームには同じカラーチャネルのデータのみが反映されるため、異なる色が混ざってしまう問題を回避できる。
【0099】
重み正規化部17は、同じカラーチャネル同士で、蓄積フレームと蓄積重みフレーム間で第1の実施形態と同様に正規化を行う。これにより、RGBのそれぞれの出力フレームが得られる。この後、第2の実施形態と同様に、劣化復元処理を各出力フレームに対して行うことも可能である。
【0100】
以上、第3の実施形態によれば、RAWデータの形式の入力画像の場合に、カラーチャネル毎に、蓄積バッファと蓄積重みバッファへの蓄積、および正規化を行うようにしたことにより、入力画像がRAWデータの場合も、格子状等の形状のアーチファクト(ノイズ)が抑えることができる。
【0101】
(第4の実施形態)
第1〜第3の実施形態では、画像処理装置から出力されるフレームは、基準フレームと時間的に同位相となるフレームである。これに対し、本実施形態では、第1〜第3の実施形態で出力されるフレームに対し逆ワーピング処理を行うことで、入力フレームの時間位相に合わせたフレームを生成する。この処理は、特に入力画像が動画像の場合に効果的である。
【0102】
図14に、第4の実施形態に係る画像処理装置のブロック図を示す。
【0103】
重み正規化部17で正規化されたフレームI
out(X,Y)は、時間的には基準フレームと同位相であり、入力フレームの時間位相とは異なる。そこでスケール変換された動きベクトルによって、正規化されたフレームを時間的に引き戻すこと(逆ワーピング)によって、入力フレームと同一時刻のフレームに変換する。この変換後のフレームを本装置の出力とする。動き推定部11で求めた動きベクトルは、入力フレームから基準フレームへの動きベクトルであるため、その動きベクトルを用いて、正規化されたフレームを引き戻すことによって、入力フレームの時間位相に合わせた出力フレームを得ることができる。
【0104】
以下、逆ワーピング処理について詳細に説明する。
【0105】
入力フレームの座標(x,y)と、蓄積フレーム(あるいは正規化されたフレーム)の座標(X,Y)の関係は、次のようになっている。
【0106】
したがって、座標(X,Y)の動きベクトルは、以下のように表すことができる。
【0107】
ここで、U
x、U
yは動きベクトルのx要素、y要素とする。しかし、第1の実施形態で述べたように、動きベクトルは、入力画像の離散的な画素位置に対してのみ計算されているため、上記動きベクトル
は、計算されていない可能性がある。つまり、(1/ρ)×Xまたは(1/ρ)×Yが小数位置を示す場合、上記の動きベクトルは計算されていない。そこで、このような場合は、線形補間など、一般的な補間方法を用いて、当該動きベクトルを求めればよい。
【0108】
上記では、U(x,y)を利用して、蓄積フレームにおける画素位置の動きベクトルを計算したが、u(x,y)を利用してもよい。この場合、蓄積フレームの画素位置に対応する入力フレームの位置での動きベクトルu(x,y)を求め、当該u(x,y)に解像度比ρを乗じることで、U(X/ρ、Y/ρ)を求めればよい。このとき、u(x,y)は、計算されていない可能性があるため、その場合は、線形補間など、一般的な補間方法を用いて、計算すればよい。
【0109】
逆ワーピングによる引き戻しは、以下のようにすればよい。
【数14】
【0110】
ここで、フレームI
outは、正規化部17により出力されるフレームであり、I
outtは、逆ワーピング部19により出力されるフレームである。フレームI
outの値は、離散的な画素位置に対してしか、求められていない。そこで、ここでも線形補間などの一般的な補間方法を用いることで、フレームI
outの離散的な画素位置の値を計算すればよい。
【0111】
上記逆ワープの式について、より詳細に説明すると、次の通りである。動きベクトルU(X/ρ、Y/ρ)と、正規化されたフレームの画素の位置(X,Y)とを加算して、位置(X+Ux(X/ρ、Y/ρ)、Y+Uy(X/ρ、Y/ρ))を計算する。当該正規化されたフレームにおいて当該位置(X+Ux(X/ρ、Y/ρ)、Y+Uy(X/ρ、Y/ρ))に対応する出力画素値I
out(X+Ux(X/ρ、Y/ρ)、Y+Uy(X/ρ、Y/ρ))を求める。そして、当該出力画素値を、上記正規化されたフレームの画素の位置(X,Y)と同じ位置の画素(X,Y)に設定する。これにより、逆ワープにより引き戻しを行った出力フレームを生成する。
【0112】
以上、第4の実施形態によれば、正規化されたフレームに対して逆ワーピングによる引き戻しを行うことにより、入力フレームの時間位相に合わせた出力フレームを生成できる。
【0113】
なお、各実施形態の画像処理装置は、例えば、例えば、
図15に示すように、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。このコンピュータ装置200は、バス201にプロセッサ202、メモリ203、ハードディスク等の補助記憶部204が接続され、さらに外部I/F205を介して記憶媒体206が接続されている。画像処理装置内の各処理ブロックは、上記のコンピュータ装置に搭載されたプロセッサ202にプログラムを実行させることにより実現することができる。このとき、画像処理装置は、上記のプログラムをコンピュータ装置のメモリ203または補助記憶部204にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体206に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、画像処理装置内の各バッファは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ203、ハードディスク204もしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体206などを適宜利用して実現することができる。
【0114】
これまで、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。