画像処理装置およびその方法
【課題】撮像装置の振れに起因する画像の暈けを高精度に補正する。
【解決手段】補正処理部100は、撮像データ、動き情報と被写体の距離情報を入力する。初期ベクトル生成部107は、撮像データを画像ベクトルデータに設定し、画像ベクトルデータを用いて基底ベクトルデータを設定する。振れ作用部110は、動き情報と距離情報を用いる射影変換により、基底ベクトルデータに撮像装置の振れを表す振れを与えた振れベクトルデータを生成する。逆振れ作用部111は、振れ作用部110による射影変換と逆変換の関係にある射影変換により、振れベクトルデータに逆振れを与えた振れベクトルデータを生成する。ベクトル更新部108は、振れベクトルデータを用いて、画像ベクトルデータと基底ベクトルデータを更新する。補正処理部100は、終了条件を満たすまで振れベクトルデータの生成、更新を繰り返し、終了条件を満たすと画像ベクトルデータを出力する。
【解決手段】補正処理部100は、撮像データ、動き情報と被写体の距離情報を入力する。初期ベクトル生成部107は、撮像データを画像ベクトルデータに設定し、画像ベクトルデータを用いて基底ベクトルデータを設定する。振れ作用部110は、動き情報と距離情報を用いる射影変換により、基底ベクトルデータに撮像装置の振れを表す振れを与えた振れベクトルデータを生成する。逆振れ作用部111は、振れ作用部110による射影変換と逆変換の関係にある射影変換により、振れベクトルデータに逆振れを与えた振れベクトルデータを生成する。ベクトル更新部108は、振れベクトルデータを用いて、画像ベクトルデータと基底ベクトルデータを更新する。補正処理部100は、終了条件を満たすまで振れベクトルデータの生成、更新を繰り返し、終了条件を満たすと画像ベクトルデータを出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、撮像装置の振れに起因する画像の暈けを補正する画像処理に関する。
【背景技術】
【0002】
撮像装置の高画素化、高ズーム化に伴い、撮影時の手振れによる撮影画像の画像劣化、つまり画像の暈けが問題になっている。この手振れに起因する問題を解決するため、振れ補正機構を搭載した撮像装置が普及している。
【0003】
撮像装置の振れ補正機構は、例えば手振れによる撮像装置の動きをジャイロセンサで検出し、検出した動きを打ち消すようにレンズと撮像デバイスの相対的位置を制御して、光学的に振れを補正する光学式振れ補正方式が一般的である。
【0004】
一方、画像処理による振れ補正技術としては、振れによって暈けた画像をフィルタ処理して暈けを補正する手法が提案されている(例えば、特許文献1)。この手法は、ジャイロセンサが検出した撮像装置の動きに基づき暈けを回復するフィルタ(以下、回復フィルタ)を生成し、回復フィルタを用いるデコンボリューションによって暈けのない画像を回復する。
【0005】
しかし、特許文献1の手法には以下のような問題がある。本来、画像の場所によって、振れの軌跡が異なる筈である。しかし、特許文献1の手法は、画像上の振れを一つの軌跡で代表するため、精度の高い補正を行うことができない。また、ピッチ、ロール、ヨー以外の撮像装置の運動には対応していない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006-279807公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明は、撮像装置の振れに起因する画像の暈けを高精度に補正することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、前記の目的を達成する一手段として、以下の構成を備える。
【0009】
本発明にかかる画像処理は、撮像装置が撮影した撮像データ、並びに、前記撮影における前記撮像装置の動き情報および被写体の距離情報を入力し、前記撮像データを画像ベクトルデータに設定し、前記画像ベクトルデータを用いて基底ベクトルデータを設定し、前記動き情報および前記距離情報を用いる射影変換により、前記基底ベクトルデータに前記撮影における前記撮像装置の振れを表す振れを与えた第一の振れベクトルデータを生成し、前記振れ作用手段による射影変換と逆変換の関係にある射影変換により、前記第一の振れベクトルデータに逆振れを与えた第二の振れベクトルデータを生成し、前記第一および第二の振れベクトルデータを用いて、前記画像ベクトルデータおよび前記基底ベクトルデータを更新し、所定の終了条件を満たすまで前記生成、前記更新を繰り返し、前記終了条件を満たすと前記画像ベクトルデータを出力することを特徴とする。
【発明の効果】
【0010】
本発明によれば、撮像装置の振れに起因する画像の暈けを高精度に補正することができる。
【図面の簡単な説明】
【0011】
【図1】実施例における処理の概要を説明する図。
【図2】実施例の補正処理部の構成例を説明するブロック図。
【図3】振れ作用部の構成例を説明するブロック図。
【図4】補正処理部が行う暈け補正処理を説明するフローチャート。
【図5】初期ベクトルの生成を説明するフローチャート。
【図6】振れ作用部の処理を説明するフローチャート。
【図7】被写体と投影面の関係を説明する図。
【図8】異なる時刻における被写体と投影面の関係を説明する図。
【図9】補正処理部による暈け補正の結果例を示す図。
【図10】実施例2の補正処理部による暈け補正の結果例を示す図。
【図11】撮像装置の構成例を示すブロック図。
【図12】PCに供給する画像データファイルの構成例を説明する図。
【発明を実施するための形態】
【0012】
以下、本発明にかかる実施例の画像処理を図面を参照して詳細に説明する。なお、以下では、一枚の画像の、振れによる暈けを当該画像から補正(回復)する画像処理を説明する。
【実施例1】
【0013】
[発明の概要]
図1により実施例における処理の概要を説明する。図1は、画像中のある点を中心に振れが発生した場合の各点の振れの軌跡を示している。各点の振れの軌跡を劣化フィルタと考えると、振れによって暈けた画像は次式で表される。
Iblur = A・I …(1)
ここで、Iblurは暈けた画像、
Iは暈けのない画像、
Aは振れ行列(各点の劣化フィルタの集合)。
【0014】
詳細は後述するが、式(1)に示す連立方程式をIについて解けば、暈けのない画像を復元することができる。なお、画像の暈けに起因する撮像装置の振れは、アフィン写像も包含する射影変換による振れと考えることができる。
【0015】
[装置の構成]
図2のブロック図により実施例の補正処理部100の構成例を説明する。なお、補正処理部100は、例えば撮像装置の一部として撮像装置の画像処理部に組み込まれる。あるいは、補正処理部100を実現するプログラムを例えばパーソナルコンピュータなどのコンピュータ機器(PC)に供給し、PCが当該プログラムを実行することによっても補正処理部100を実現することが可能である。
【0016】
補正処理部100は、入力端子105から画像データを入力する。そして、補正処理部100は、画像データを撮影した際の、各時刻における撮像装置の、位置ベクトルを入力端子101を介して入力し、向きベクトルを入力端子102を介して入力し、露光条件を入力端子103を介して入力する。また、画像データを撮影した際の撮像装置と被写体の間の距離(以下、距離情報)を入力する。また、出力端子106から暈けを補正した画像データを出力する。なお、位置ベクトルと向きベクトルの集合を撮像装置の「動き情報」と呼ぶ場合がある。
【0017】
詳細は後述するが、初期ベクトル生成部107は、補正に必要な初期化を行う。ベクトルデータベース(DB)109は、補正に必要な各ベクトルを格納する。ベクトル更新部108は、ベクトルDB109が格納するベクトルを更新する。振れ作用部110は各ベクトルに振れを与え、逆振れ作用部111は各ベクトルに逆振れを与える。
【0018】
[振れ作用部]
図3のブロック図により振れ作用部110の構成例を説明する。
【0019】
振れ作用部110は、入力端子201を介してベクトルDB109からベクトルデータを入力し、入力したベクトルデータに振れを与え、振れを与えたベクトルデータを出力端子202を介してベクトルDB109に出力する。
【0020】
シフトベクトル算出部203は、位置ベクトル、向きベクトル、距離情報に基づきシフトベクトルを算出する。なお、シフトベクトルは、撮像装置の振れに対応し、例えば撮像装置の三軸を回転しないように振れが発生した場合は画像内の移動量と向きを表す。
【0021】
内積算出部204は、異なる時刻におけるシフトベクトルと向きベクトルの内積、異なる時刻における向きベクトル同士の内積を演算し、演算結果を射影変換のパラメータとする。
【0022】
射影変換部205は、内積算出部204が算出した射影変換のパラメータを基に、入力端子201を介して入力されるベクトルデータを射影変換する。乗算器208は、射影変換されたベクトルデータに露光条件を乗算する。加算器206は、露光条件が乗算されたベクトルデータを、振れベクトルデータベース(DB)207が格納する振れベクトルデータに加算する。
【0023】
逆振れ作用部111は、基本的に、振れ作用部110と同様の構成を有する。ただし、内積算出部204が算出する射影変換のパラメータが、振れ作用部110において算出される射影変換のパラメータと異なる。
【0024】
[暈け補正処理]
図4のフローチャートにより補正処理部100が行う暈け補正処理を説明する。なお、以下では、画像データを、ラスタ順に一列に並んだデータの集合として扱う。画素値をI(x, y)、画素数を横M×縦Nとすると、画像データの集合は{I(0, 0), I(1, 0), …, I(M-1, 0), I(0, 1), I(1, 1), …, I(M-2, N-1), I(M-1, N-1)}である。つまり、補正処理部100は、画像データの集合をベクトルデータとして処理を行う。
【0025】
補正処理部100は、画像データをベクトルデータIblurとして入力する(S301)。初期ベクトル生成部107は、詳細は後述するが、基底ベクトルデータp、残差ベクトルデータr、更新用画像ベクトルデータIを初期化し、それらベクトルデータをベクトルDB109に格納する(S302)。なお、ベクトルDB109は、繰返回数をカウンタkで表すと、pk、rk、rk+1、Ik、および、pkに振れを与えた振れベクトルデータを格納する。なお、以下では、各ベクトルデータの初期値を「・0」で表す。
【0026】
振れ作用部110は、基底ベクトルデータpkに、撮像装置において発生した振れ(以下、装置振れ)と同様の振れを与えた振れベクトルデータp'kを生成する。そして、振れベクトルデータp'k(第一の振れベクトルデータ)をベクトルDB109に格納する(S303)。
【0027】
逆振れ作用部111は、振れベクトルデータp'kに、詳細は後述するが、上記の振れを得る変換と逆変換の関係にある振れ(以下、逆振れ)を与えた振れベクトルデータp"k(第二の振れベクトルデータ)を生成する。そして、振れベクトルデータp"kをベクトルDB109に格納する(S304)。
【0028】
ベクトル更新部108は、下式により、振れベクトルデータp'k、p"kを用いて、更新用画像ベクトルデータIk、残差ベクトルデータrk、基底ベクトルデータpkをそれぞれ更新する(S305)。
Ik+1 = Ik + αkpk
rk+1 = rk - αkp"k …(2)
pk+1 = rk+1 + βkpk
ここで、αk = (rk, rk)/(pk, p"k)、
βk = (rk+1, rk+1)/(rk, rk)、
(・,・)は内積を表す。
【0029】
次に、補正処理部100は、カウンタkをインクリメントして(S306)、ベクトルDB109が格納する残差ベクトルデータrkのノルムと、その目標値を判定する(S307)。そして、ノルムが目標値より大きい場合は処理をステップS303に戻し、ノルムが目標値以下の(残差が充分に小さい)場合は更新用画像ベクトルデータIkを補正後の画像データとして出力し(S308)、画像データの補正処理を終了する。
【0030】
なお、補正処理の終了条件として残差ベクトルデータrのノルムを利用したが、繰し返しの回数の上限K(所定数)を設定してカウンタkのカウント値と上限Kを比較して(S307)、k=Kを補正処理の終了条件にしてもよい。その場合、残差ベクトルデータrは不要である。
【0031】
[初期ベクトルの生成]
図5のフローチャートにより初期ベクトルの生成を説明する。初期ベクトル生成部107は、更新用画像ベクトルデータIの初期値I0にベクトルデータIblurを設定する(S401)。
【0032】
振れ作用部110は、更新用画像ベクトルデータIの初期値I0に振れを与えた振れベクトルデータI'を生成する(S402)。
【0033】
逆振れ作用部111は、振れベクトルデータI'に逆振れを与えた振れベクトルデータI"を生成し(S403)、ベクトルデータIblurに逆振れを与えたベクトルデータI"blurを生成する(S404)。
【0034】
次に、初期ベクトル生成部107は、ベクトルデータI"blurと振れベクトルデータI"の差分を計算し、その差分を残差ベクトルデータrの初期値r0に設定する(S405)。さらに、基底ベクトルデータpの初期値p0に残差ベクトルデータの初期値r0を設定して(S406)、初期化を終了する。
【0035】
[振れ作用部]
図6のフローチャートにより振れ作用部110の処理を説明する。ここでは、更新用画像ベクトルデータJに振れを与えて振れベクトルデータJ'を得るものとし、撮像装置の露光時間をτとする。
【0036】
振れ作用部110は、撮影の開始時刻t=0(以下、時刻0)における全要素(全画素){J(0, 0), …, J(M-1, N-1)}に零を設定した振れベクトルデータJ'を振れベクトルDB207に格納する(S500)。そして、時刻t=Δt(>0)を設定する(S501)。なお、Δtは、動き情報などの取得間隔を表す時間の刻み幅である。
【0037】
シフトベクトル算出部203は、詳細は後述するが、位置ベクトル、向きベクトル、距離情報を基に時刻tおけるシフトベクトルc(t)を算出する(S502)。内積算出部204は、時刻tにおける向きベクトルと時刻0における向きベクトルの内積、および、時刻0における向きベクトルと時刻tにおけるシフトベクトルc(t)の内積を算出する(S503)。
【0038】
射影変換部205は、内積の計算結果を基に時刻tにおける射影変換のパラメータを決定する(S504)。そして、詳細は後述するが、ベクトルDB109から読み込んだ更新画像ベクトルデータIを射影変換したベクトルデータP(t)を生成する(S505)。
【0039】
乗算器208は、ベクトルデータP(t)に時刻tの露光条件h(t)と、刻み幅Δtを乗算する(S506)。加算器206は、振れベクトルDB207から読み込んだ振れベクトルデータJ'に乗算結果h(t)P(t)Δtを加算して、加算結果によって振れベクトルDB207の振れベクトルデータJ'を更新する(S507)。
【0040】
振れ作用部110は、時刻tをt+Δtに更新し(S508)、時刻tが露光時間τに達したか否かを判定して(S509)、t≦τならば処理をステップS502に戻す。また、t>τならば振れベクトルDB207に格納された振れベクトルデータJ'を出力する(S510)。
【0041】
図7により被写体と投影面の関係を説明する。
【0042】
図7において、点601は、撮像装置の光軸中心の位置を示す。点602は、被写体606を投影面603に射影した、投影面(仮想スクリーン)上の投影点(座標(x, y))を示す。なお、点601の位置を表すベクトルをC、被写体606の位置ベクトルをXで表し、投影面603は点601から距離fにあるとする。
【0043】
ベクトル604は撮像装置の単位法線ベクトルVnを示し、ベクトル605は撮像装置の単位接ベクトルVtを示す。単位接ベクトルVtは投影面603上に存在する。ベクトル607は、単位接ベクトルVt、単位法線ベクトルVnと直交し、投影面603を張る単位ベクトルVuである。
【0044】
●位置ベクトルX→投影点(x, y)
被写体606の位置ベクトルXから投影点602の座標(x, y)への変換を求める。
γf(X - C) = X' - C = x・Vu + y・Vt + f・Vn …(3)
ここで、γfは定数。
【0045】
式(3)の両辺にVu、Vn、Vtを順次作用させると次式が得られる。
┌ ┐ ┌ ┐
│x│ │VuT│
│y│= γf│VtT│(X - C) …(4)
│f│ │VnT│
└ ┘ └ ┘
ここで、Tは転置を表す。
【0046】
式(4)の第三成分から定数γfを計算すると次式が得られる。
γf = f/{(X - C)Vn} …(5)
【0047】
式(5)を式(4)に代入すると、位置ベクトルXを投影点602の座標(x,y)へ変換する次式が得られる。
┌ ┐ ┌ ┐
│x│ │VuT│
│y│= f/{(X - C)Vn}│VtT│(X - C) …(6)
│f│ │VnT│
└ ┘ └ ┘
【0048】
●投影点(x, y)→位置ベクトルX
投影点602の座標(x, y)から被写体606の位置ベクトルXへの変換を求める。このとき、位置ベクトルX=(Xs, Ys, Zs)におけるZsは距離情報によって既知である。
X - C = γi(x - C) = γi(x・Vu + y・Vt + f・Vn) …(7)
ここで、γiは定数。
【0049】
式(7)においてz成分に着目すると下式が得られる。
Zs - Cz = γi(x・Vuz + y・Vtz + f・Vnz)
γi = (Zs - Cz)/(x・Vuz + y・Vtz + f・Vnz) …(8)
【0050】
式(8)を式(7)に代入すると、投影点602の座標(x,y)を位置ベクトルXへ変換する次式が得られる。
X - C = {Zs - Cz/(x・Vuz+y・Vtz+f・Vnz)}(x・Vu+y・Vt+f・Vn) …(9)
【0051】
●異なる時刻における投影点(x, y)の変換
異なる時刻における投影点(x, y)の変換式を求める。なお、この変換が、射影変換部205が計算する射影変換に相当する。図8により異なる時刻における被写体と投影面の関係を説明する。
【0052】
時刻0において、点701は撮像装置の光軸中心を示し、点703は被写体606の投影面705における投影点(x0, y0)を示す。また、時刻t>0において、点702は撮像装置の光軸中心を示し、点704は被写体606の投影面706における投影点(xt, yt)を示す。なお、被写体606は、静止状態にあるものとする。
【0053】
投影点(xt, yt)から投影点(x0, y0)への変換を求めると、式(9)から次式が得られる。
X-C(t) = [Zs-Cz(t)/{xtVuz(t)+ytVtz(t)+fVnz(t)}]{xtVu(t)+ytVt(t)+fVn(t)}
…(10)
【0054】
次に、被写体の位置ベクトルXから(x0, y0)に射影すると、式(6)から次式が得られる。
┌ ┐ ┌ ┐
│x0│ │Vu(0)T│
│y0│= f/[{X - C(0)}Vn(0)]│Vt(0)T│{X - C(0)} …(11)
│f │ │Vn(0)T│
└ ┘ └ ┘
【0055】
式(10)と(11)をまとめると次式が得られる。
┌ ┐ ┌ ┐
│x0│ │Vu(0)T│
│y0│= f/[{xtVu(t)+ytVt(t)+c(t)}Vn(0)]│Vt(0)T│{xtVu(t)+ytVt(t)+c(t)}
│f │ │Vn(0)T│
└ ┘ └ ┘
…(12)
c(t) = fVn(t)+{C(t)-C(0)/Zs-Cz(t)}{xtVuz(t)+ytVtz(t)+fVnz(t)} …(13)
【0056】
式(12)は射影変換を示し、式(13)はシフトベクトルc(t)を表す。シフトベクトル算出部203は、式(13)に示すシフトベクトルc(t)を算出する。内積算出部204は、撮影の開始後の時刻t(>0)の向きベクトルと撮影の開始時刻0の向きベクトルの内積、および、時刻tのシフトベクトルc(t)と時刻0の向きベクトルの内積を算出して、式(12)に示す射影変換の各パラメータを求める。
【0057】
式(12)(13)が示す変換を式(14)で表し、時刻0における振れがない画像をI(x, y)とすると、時刻t>0に投影点(x, y)に入射する光情報は、式(14)を用いて時刻0に変換すれば式(15)で表される。
(x0, y0) = g(xt, yt, t) …(14)
I(x0, y0) = I{g(x, y, t)} …(15)
【0058】
射影変換部205は、更新画像ベクトルデータIの各要素{I(0, 0), …, I(M-1, N-1)}を式(15)に従って射影変換する。
【0059】
[逆振れ作用部]
逆振れ作用部111の構成は、前述したように、振れ作用部110の構成と基本的に同じである。逆振れ作用部111の処理において、振れ作用部110と異なるのは、シフトベクトル算出部203と内積算出部204の処理である。
【0060】
式(12)を導いたのと同様の方法により、図8において、投影点(x0, y0)から投影点(xt, yt)への変換を求めると次式が得られる。
┌ ┐ ┌ ┐
│xt│ │Vu(t)T│
│yt│= f/[{x0Vu(0)+y0Vt(0)+c'(t)}Vn(t)]│Vt(t)T│{x0Vu(0)+y0Vt(0)+c'(t)}
│f │ │Vn(t)T│
└ ┘ └ ┘
…(16)
c'(t) = fVn(0)+{C(0)-C(t)/Zs-Cz(0)}{x0Vuz(0)+y0Vtz(0)+fVnz(0)} …(17)
【0061】
式(16)は射影変換を示し、式(17)はシフトベクトルc'(t)を表す。逆振れ作用部111のシフトベクトル算出部203は、式(17)に示すシフトベクトルc'(t)を算出する。逆振れ作用部111の内積算出部204は、時刻tの向きベクトルと時刻0の向きベクトルの内積、および、時刻tのシフトベクトルc'(t)と時刻tの向きベクトルの内積を算出して、式(16)に示す射影変換の各パラメータを求める。
【0062】
式(16)(17)が示す変換を式(18)で表す。また、式(19)に示すように、式(14)のgと式(18)のfには逆変換の関係がある。
(xt, yt) = f(x0, y0, t) …(18)
(x, y) = g(f(x, y ,t), t) = f(g(x, y, t), t) …(19A)
I(x0, y0) = I{g(x, y, t)} …(19B)
【0063】
逆振れ作用部111の射影変換部205は、更新画像ベクトルデータIの各要素{I(0, 0), …, I(M-1, N-1)}を式(19B)に従って射影変換する。
【0064】
[振れ補正部の動作原理]
式(15)に時刻tにおける露光条件h(t)を乗算し、時刻t=0からτまで積分した結果は、振れによって暈けた画像を示す。
Iblur(X) = 1/τ・∫h(t)I(g(X, t))dt …(20)
ここで、Iは暈けを補正した画像、
Iblurは装置振れにより像が暈けた画像、
h(t)は露光強度を表す関数(シャッタや絞りなどによる露光光量の制御を示す)、
積分範囲はt=0からτまで。
【0065】
非整数値の座標にも対応可能なように補間カーネルφ(X)を導入して、非整数値の座標の画素の値を次のように定義する。
I(X) ≡ Σφ(X - j)I(j) …(21)
ここで、Σ演算の範囲はj∈Z/MZ×Z/NZ、
Zは整数の集合を表し、
Z/MZは[0, 1, 2, …, M-1]、
M×Nは画素数。
【0066】
なお、式(21)において、Z/MZは[0, 1, 2, …, M-1]の集合を表し、0とMを同一視するものとする。つまり、φ(0)=φ(M)である。Z/MZ×Z/NZは[(0, 0), (1, 0), …, (M-1, 0), (0,1), …, (M-1, N-1)]の集合を表し、第一成分に関しては周期0とMを、第二成分に関しては0とNを同一視するものとする。
【0067】
なお、式(21)は通常の補間式と同一である。式(21)を式(20)に代入すると次式が得られる。
Iblur(i) = 1/τ・∫h(t)Σφ(g(i, t) - j)I(j)dt ≡ K・I …(22)
ここで、K(i, j) = 1/τ・∫h(t)Σφ(g(i, t) - j)dt。
【0068】
画像を一次元のベクトルとして表現すると、KはNM×NMの行列として表現される。つまり、振れによる暈けは次の連立方程式に帰着する。従って、次の連立方程式を解いてIを求めれば、振れによる暈けをなくした(回復した)画像が得られる。
Iblur = K・I …(23)
【0069】
式(23)に示す連立方程式を間接法を用いて解くとすると、KとKTをベクトルデータに繰り返し作用させて、ベクトルデータを更新することになる。計算の高速化には、ベクトルデータに対するKとKTの作用を簡潔に表す必要がある。
【0070】
●ベクトルデータに対するKとKTの作用
式(21)から、ベクトルデータに対するKの作用は、撮像装置において発生した振れと同様の振れをベクトルデータに与えることに等しい。また、式(22)から、KTは次式で表される。
KT(i, j) = K(j, i) = 1/τ・∫h(t)φ(g(j, t) - i)dt …(24)
【0071】
従って、ベクトルデータに対するKTの作用は次式で表される。
(KT・J)i = ΣKT(i, j)J(j) = 1/τ・∫h(t)Σφ(g(j, t) - i)J(j)dt …(25)
【0072】
Σφ(g(j, t) - i)J(j)の部分をさらに変形すると次式が得られる。なお、φp(X)≡φ(-X)を定義し、式(19)によりj=f(g(j, t), t)が成り立つことを用いる。
Σφ(g(j, t) - i)J(j) = Σφp(i - g(j, t))J(f(g(j, t), t)) …(26)
【0073】
jが格子点を動くとき、g(j, t)もほぼ格子点を網羅するように動くと仮定すると次式が得られる。
Σφp(i - g(j, t))J(f(g(j, t), t)) 〜 Σφp(i - j')J(f(j', t)) …(27)
【0074】
φpを用いた補間結果を式(28)で定義して、式(27)の近似を仮定すると、式(29)のようになる。
Jp(X) ≡ Σφp(X - i)J(i) …(28)
Σφp(g(j, t) - i)J(j) ≒ Jp(f(i, t)) …(29)
【0075】
式(29)を式(25)に代入すると次式が得られる。
(KT・J)i ≒ 1/τ・∫h(t)Jp(f(i, t))dt …(30)
【0076】
式(30)は、ベクトルデータに対するKTの作用が、撮像装置の振れによる射影変換と逆変換の関係にある射影変換によって、振れをベクトルデータJに与えることを意味する。つまり、式(22)と式(30)が示すように、ベクトルデータにKとKTtを作用させることは、ベクトルデータに振れを与えることに等しい。
【0077】
●連立方程式の解法
連立方程式(23)を間接法を用いて解くが、ここでは一例として共役勾配法を用いる。Kは、通常、対称行列ではないので、KTを式(23)に作用させる。
KT・Iblur = KTK・I = A・I …(31)
ここで、Aは対称行列。
【0078】
共役勾配法は、式(32)に従ってベクトルデータを更新する。
Ik+1 = Ik + αkpk
rk+1 = rk - αkA・pk …(32)
pk+1 = rk+1 + βkpk
ここで、αk = (rk, rk)/(pk, A・pk)、
βk = (rk+1, rk+1)/(rk, rk)。
【0079】
更新を行うには、A・pk=KTK・pkを求める必要がある。これは、前述したように、pkに撮像装置の振れと同じ振れを与え、続いて、撮像装置の振れによる射影変換と逆変換の関係にある射影変換によって、振れを与えればよい。式(32)の振れを与える過程は、図4に示すステップS303とS304に対応する。
【0080】
また、共役勾配法は、下式に従って各ベクトルデータを初期化する。
I0 = Iblur
r0 = b - A・I0 …(33)
p0 = r0
【0081】
対称行列Aの作用は、上述したように、撮像装置の振れと同じ振れをベクトルデータに与えればよい。式(33)は、図5に示す処理に対応する。
【0082】
[暈け補正の結果]
図9により補正処理部100による暈け補正の結果例を示す。図8(a)はピッチとして0.1度、ヨーとして0.2度の振れを与えた画像を示す。図9(b)は、補正処理部100によって、図9(a)に示す暈けが回復された画像を示す。
【0083】
このように、振れ軌跡を示す情報と露光条件を用いて、一枚の画像の画像データから、当該画像の装置振れによる暈けを補正することができる。従って、振れの軌跡が複雑な場合も良好に暈け補正することができる。
【実施例2】
【0084】
以下、本発明にかかる実施例2の画像処理を説明する。なお、実施例2において、実施例1と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【0085】
補正処理部100の補正において、画像の端部に位置する暈けは、画像情報が欠如するため正しく補正することができない。これを考慮すると、補正処理部100は、補正処理の途中または補正処理の後、画像の端部領域をクロップする(切除する)ように画像データを削除して、画像の中央部に相当する画像データを出力することが好ましい。なお、端部領域のクロップを考慮したより広い範囲の画像を取得してもよい。勿論、端部領域に関しては補正処理をしなくてもよい。
【0086】
端部領域の決定方法を説明する。振れ軌跡を示す情報から被写体Xの投影点は下式に従って移動する。
(xt, yt) = f(x, y, t)
【0087】
ある時刻tにおいて、(xt, yt)が一度でも画像外に出た場合は、被写体Xが端部領域にあると判定する。この操作をすべての投影点に対して行い、画像の端部領域を決定する。勿論、この決定方法は必要最低限であり、より広い領域を端部領域に決定してもよい。
【0088】
図10により実施例2の補正処理部100による暈け補正の結果例を示す。図10(a)は補正処理後の画像データが示す画像であり、端部領域の暈けが補正されていない。図10(b)は、図10(a)に示す画像の端部領域をクロップした画像を示し、端部領域のクロップにより、良好な画像を得ることができる。
【実施例3】
【0089】
以下、本発明にかかる実施例3の画像処理を説明する。なお、実施例3において、実施例1、2と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【0090】
図11のブロック図により撮像装置の構成例を示す。
【0091】
被写体からの反射光は、撮像部1000に入射し、レンズ1002およびシャッタ1003を介して、撮像デバイス1004上に結像する。撮像デバイス1004が出力するアナログ信号は、アナログ-ディジタル変換器(A/D)1005によってディジタル信号に変換されて補正処理部100に入力される。なお、図11には撮像デバイス1004の出力をA/D変換した信号(例えばRAWデータのような撮像データ)を補正処理部100に入力する例を示す。しかし、A/D変換した信号にデモザイキングなどの現像処理を施した画像データを補正処理部100に入力してもよい。
【0092】
露光制御部1006は、図示しない撮像装置の制御部によって設定された露光条件に基づき、レンズ1002内の絞りやシャッタ1003の開閉を制御し、露光条件を補正処理部100に出力する。
【0093】
動き情報取得部1007は、撮像部1000の動きを示す、向きベクトルや位置ベクトルなどの動き情報を取得して、動き情報を補正処理部100に出力する。なお、撮像装置の動きは、ジャイロセンサや加速度センサなどによって測定してもよいし、複数の画像を取得し、それら画像から推定してもよい。
【0094】
レンズ制御部1008は、撮像装置の制御部によって設定された撮影条件に基づき、レンズ1002のズーム設定、撮影距離などを制御し、撮影距離を距離情報として補正処理部100に出力する。
【0095】
補正処理部100は、撮像データ(または画像データ)、露光情報、動き情報、距離情報を入力して、実施例1、2において説明した補正処理を実行する。
【0096】
なお、撮像装置が光学式振れ補正方式を搭載する場合、光学式振れ補正によって除去しきれなかった振れによる暈けを補正処理部100によって補正する。
【実施例4】
【0097】
以下、本発明にかかる実施例4の画像処理を説明する。なお、実施例4において、実施例1、2と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【0098】
補正処理部100を実現するプログラムを例えばパーソナルコンピュータなどのコンピュータ機器(PC)に供給し、PCが当該プログラムを実行することによっても補正処理部100を実現することが可能である。図12によりPCに供給する画像データファイルの構成例を説明する。
【0099】
画像データファイル1100は、各時刻の動き情報が記録された動き情報部1101、露光条件が記録された露光条件部1102、距離情報が記録された距離情報部1103、撮像データ(または画像データ)が記録されたデータ部1104を有する。PCは、画像データファイルから読み出した動き情報、露光条件、距離情報に基づき、画像データファイルから読み出した撮像データの暈けを回復する。
【0100】
[その他の実施例]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、撮像装置の振れに起因する画像の暈けを補正する画像処理に関する。
【背景技術】
【0002】
撮像装置の高画素化、高ズーム化に伴い、撮影時の手振れによる撮影画像の画像劣化、つまり画像の暈けが問題になっている。この手振れに起因する問題を解決するため、振れ補正機構を搭載した撮像装置が普及している。
【0003】
撮像装置の振れ補正機構は、例えば手振れによる撮像装置の動きをジャイロセンサで検出し、検出した動きを打ち消すようにレンズと撮像デバイスの相対的位置を制御して、光学的に振れを補正する光学式振れ補正方式が一般的である。
【0004】
一方、画像処理による振れ補正技術としては、振れによって暈けた画像をフィルタ処理して暈けを補正する手法が提案されている(例えば、特許文献1)。この手法は、ジャイロセンサが検出した撮像装置の動きに基づき暈けを回復するフィルタ(以下、回復フィルタ)を生成し、回復フィルタを用いるデコンボリューションによって暈けのない画像を回復する。
【0005】
しかし、特許文献1の手法には以下のような問題がある。本来、画像の場所によって、振れの軌跡が異なる筈である。しかし、特許文献1の手法は、画像上の振れを一つの軌跡で代表するため、精度の高い補正を行うことができない。また、ピッチ、ロール、ヨー以外の撮像装置の運動には対応していない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006-279807公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明は、撮像装置の振れに起因する画像の暈けを高精度に補正することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、前記の目的を達成する一手段として、以下の構成を備える。
【0009】
本発明にかかる画像処理は、撮像装置が撮影した撮像データ、並びに、前記撮影における前記撮像装置の動き情報および被写体の距離情報を入力し、前記撮像データを画像ベクトルデータに設定し、前記画像ベクトルデータを用いて基底ベクトルデータを設定し、前記動き情報および前記距離情報を用いる射影変換により、前記基底ベクトルデータに前記撮影における前記撮像装置の振れを表す振れを与えた第一の振れベクトルデータを生成し、前記振れ作用手段による射影変換と逆変換の関係にある射影変換により、前記第一の振れベクトルデータに逆振れを与えた第二の振れベクトルデータを生成し、前記第一および第二の振れベクトルデータを用いて、前記画像ベクトルデータおよび前記基底ベクトルデータを更新し、所定の終了条件を満たすまで前記生成、前記更新を繰り返し、前記終了条件を満たすと前記画像ベクトルデータを出力することを特徴とする。
【発明の効果】
【0010】
本発明によれば、撮像装置の振れに起因する画像の暈けを高精度に補正することができる。
【図面の簡単な説明】
【0011】
【図1】実施例における処理の概要を説明する図。
【図2】実施例の補正処理部の構成例を説明するブロック図。
【図3】振れ作用部の構成例を説明するブロック図。
【図4】補正処理部が行う暈け補正処理を説明するフローチャート。
【図5】初期ベクトルの生成を説明するフローチャート。
【図6】振れ作用部の処理を説明するフローチャート。
【図7】被写体と投影面の関係を説明する図。
【図8】異なる時刻における被写体と投影面の関係を説明する図。
【図9】補正処理部による暈け補正の結果例を示す図。
【図10】実施例2の補正処理部による暈け補正の結果例を示す図。
【図11】撮像装置の構成例を示すブロック図。
【図12】PCに供給する画像データファイルの構成例を説明する図。
【発明を実施するための形態】
【0012】
以下、本発明にかかる実施例の画像処理を図面を参照して詳細に説明する。なお、以下では、一枚の画像の、振れによる暈けを当該画像から補正(回復)する画像処理を説明する。
【実施例1】
【0013】
[発明の概要]
図1により実施例における処理の概要を説明する。図1は、画像中のある点を中心に振れが発生した場合の各点の振れの軌跡を示している。各点の振れの軌跡を劣化フィルタと考えると、振れによって暈けた画像は次式で表される。
Iblur = A・I …(1)
ここで、Iblurは暈けた画像、
Iは暈けのない画像、
Aは振れ行列(各点の劣化フィルタの集合)。
【0014】
詳細は後述するが、式(1)に示す連立方程式をIについて解けば、暈けのない画像を復元することができる。なお、画像の暈けに起因する撮像装置の振れは、アフィン写像も包含する射影変換による振れと考えることができる。
【0015】
[装置の構成]
図2のブロック図により実施例の補正処理部100の構成例を説明する。なお、補正処理部100は、例えば撮像装置の一部として撮像装置の画像処理部に組み込まれる。あるいは、補正処理部100を実現するプログラムを例えばパーソナルコンピュータなどのコンピュータ機器(PC)に供給し、PCが当該プログラムを実行することによっても補正処理部100を実現することが可能である。
【0016】
補正処理部100は、入力端子105から画像データを入力する。そして、補正処理部100は、画像データを撮影した際の、各時刻における撮像装置の、位置ベクトルを入力端子101を介して入力し、向きベクトルを入力端子102を介して入力し、露光条件を入力端子103を介して入力する。また、画像データを撮影した際の撮像装置と被写体の間の距離(以下、距離情報)を入力する。また、出力端子106から暈けを補正した画像データを出力する。なお、位置ベクトルと向きベクトルの集合を撮像装置の「動き情報」と呼ぶ場合がある。
【0017】
詳細は後述するが、初期ベクトル生成部107は、補正に必要な初期化を行う。ベクトルデータベース(DB)109は、補正に必要な各ベクトルを格納する。ベクトル更新部108は、ベクトルDB109が格納するベクトルを更新する。振れ作用部110は各ベクトルに振れを与え、逆振れ作用部111は各ベクトルに逆振れを与える。
【0018】
[振れ作用部]
図3のブロック図により振れ作用部110の構成例を説明する。
【0019】
振れ作用部110は、入力端子201を介してベクトルDB109からベクトルデータを入力し、入力したベクトルデータに振れを与え、振れを与えたベクトルデータを出力端子202を介してベクトルDB109に出力する。
【0020】
シフトベクトル算出部203は、位置ベクトル、向きベクトル、距離情報に基づきシフトベクトルを算出する。なお、シフトベクトルは、撮像装置の振れに対応し、例えば撮像装置の三軸を回転しないように振れが発生した場合は画像内の移動量と向きを表す。
【0021】
内積算出部204は、異なる時刻におけるシフトベクトルと向きベクトルの内積、異なる時刻における向きベクトル同士の内積を演算し、演算結果を射影変換のパラメータとする。
【0022】
射影変換部205は、内積算出部204が算出した射影変換のパラメータを基に、入力端子201を介して入力されるベクトルデータを射影変換する。乗算器208は、射影変換されたベクトルデータに露光条件を乗算する。加算器206は、露光条件が乗算されたベクトルデータを、振れベクトルデータベース(DB)207が格納する振れベクトルデータに加算する。
【0023】
逆振れ作用部111は、基本的に、振れ作用部110と同様の構成を有する。ただし、内積算出部204が算出する射影変換のパラメータが、振れ作用部110において算出される射影変換のパラメータと異なる。
【0024】
[暈け補正処理]
図4のフローチャートにより補正処理部100が行う暈け補正処理を説明する。なお、以下では、画像データを、ラスタ順に一列に並んだデータの集合として扱う。画素値をI(x, y)、画素数を横M×縦Nとすると、画像データの集合は{I(0, 0), I(1, 0), …, I(M-1, 0), I(0, 1), I(1, 1), …, I(M-2, N-1), I(M-1, N-1)}である。つまり、補正処理部100は、画像データの集合をベクトルデータとして処理を行う。
【0025】
補正処理部100は、画像データをベクトルデータIblurとして入力する(S301)。初期ベクトル生成部107は、詳細は後述するが、基底ベクトルデータp、残差ベクトルデータr、更新用画像ベクトルデータIを初期化し、それらベクトルデータをベクトルDB109に格納する(S302)。なお、ベクトルDB109は、繰返回数をカウンタkで表すと、pk、rk、rk+1、Ik、および、pkに振れを与えた振れベクトルデータを格納する。なお、以下では、各ベクトルデータの初期値を「・0」で表す。
【0026】
振れ作用部110は、基底ベクトルデータpkに、撮像装置において発生した振れ(以下、装置振れ)と同様の振れを与えた振れベクトルデータp'kを生成する。そして、振れベクトルデータp'k(第一の振れベクトルデータ)をベクトルDB109に格納する(S303)。
【0027】
逆振れ作用部111は、振れベクトルデータp'kに、詳細は後述するが、上記の振れを得る変換と逆変換の関係にある振れ(以下、逆振れ)を与えた振れベクトルデータp"k(第二の振れベクトルデータ)を生成する。そして、振れベクトルデータp"kをベクトルDB109に格納する(S304)。
【0028】
ベクトル更新部108は、下式により、振れベクトルデータp'k、p"kを用いて、更新用画像ベクトルデータIk、残差ベクトルデータrk、基底ベクトルデータpkをそれぞれ更新する(S305)。
Ik+1 = Ik + αkpk
rk+1 = rk - αkp"k …(2)
pk+1 = rk+1 + βkpk
ここで、αk = (rk, rk)/(pk, p"k)、
βk = (rk+1, rk+1)/(rk, rk)、
(・,・)は内積を表す。
【0029】
次に、補正処理部100は、カウンタkをインクリメントして(S306)、ベクトルDB109が格納する残差ベクトルデータrkのノルムと、その目標値を判定する(S307)。そして、ノルムが目標値より大きい場合は処理をステップS303に戻し、ノルムが目標値以下の(残差が充分に小さい)場合は更新用画像ベクトルデータIkを補正後の画像データとして出力し(S308)、画像データの補正処理を終了する。
【0030】
なお、補正処理の終了条件として残差ベクトルデータrのノルムを利用したが、繰し返しの回数の上限K(所定数)を設定してカウンタkのカウント値と上限Kを比較して(S307)、k=Kを補正処理の終了条件にしてもよい。その場合、残差ベクトルデータrは不要である。
【0031】
[初期ベクトルの生成]
図5のフローチャートにより初期ベクトルの生成を説明する。初期ベクトル生成部107は、更新用画像ベクトルデータIの初期値I0にベクトルデータIblurを設定する(S401)。
【0032】
振れ作用部110は、更新用画像ベクトルデータIの初期値I0に振れを与えた振れベクトルデータI'を生成する(S402)。
【0033】
逆振れ作用部111は、振れベクトルデータI'に逆振れを与えた振れベクトルデータI"を生成し(S403)、ベクトルデータIblurに逆振れを与えたベクトルデータI"blurを生成する(S404)。
【0034】
次に、初期ベクトル生成部107は、ベクトルデータI"blurと振れベクトルデータI"の差分を計算し、その差分を残差ベクトルデータrの初期値r0に設定する(S405)。さらに、基底ベクトルデータpの初期値p0に残差ベクトルデータの初期値r0を設定して(S406)、初期化を終了する。
【0035】
[振れ作用部]
図6のフローチャートにより振れ作用部110の処理を説明する。ここでは、更新用画像ベクトルデータJに振れを与えて振れベクトルデータJ'を得るものとし、撮像装置の露光時間をτとする。
【0036】
振れ作用部110は、撮影の開始時刻t=0(以下、時刻0)における全要素(全画素){J(0, 0), …, J(M-1, N-1)}に零を設定した振れベクトルデータJ'を振れベクトルDB207に格納する(S500)。そして、時刻t=Δt(>0)を設定する(S501)。なお、Δtは、動き情報などの取得間隔を表す時間の刻み幅である。
【0037】
シフトベクトル算出部203は、詳細は後述するが、位置ベクトル、向きベクトル、距離情報を基に時刻tおけるシフトベクトルc(t)を算出する(S502)。内積算出部204は、時刻tにおける向きベクトルと時刻0における向きベクトルの内積、および、時刻0における向きベクトルと時刻tにおけるシフトベクトルc(t)の内積を算出する(S503)。
【0038】
射影変換部205は、内積の計算結果を基に時刻tにおける射影変換のパラメータを決定する(S504)。そして、詳細は後述するが、ベクトルDB109から読み込んだ更新画像ベクトルデータIを射影変換したベクトルデータP(t)を生成する(S505)。
【0039】
乗算器208は、ベクトルデータP(t)に時刻tの露光条件h(t)と、刻み幅Δtを乗算する(S506)。加算器206は、振れベクトルDB207から読み込んだ振れベクトルデータJ'に乗算結果h(t)P(t)Δtを加算して、加算結果によって振れベクトルDB207の振れベクトルデータJ'を更新する(S507)。
【0040】
振れ作用部110は、時刻tをt+Δtに更新し(S508)、時刻tが露光時間τに達したか否かを判定して(S509)、t≦τならば処理をステップS502に戻す。また、t>τならば振れベクトルDB207に格納された振れベクトルデータJ'を出力する(S510)。
【0041】
図7により被写体と投影面の関係を説明する。
【0042】
図7において、点601は、撮像装置の光軸中心の位置を示す。点602は、被写体606を投影面603に射影した、投影面(仮想スクリーン)上の投影点(座標(x, y))を示す。なお、点601の位置を表すベクトルをC、被写体606の位置ベクトルをXで表し、投影面603は点601から距離fにあるとする。
【0043】
ベクトル604は撮像装置の単位法線ベクトルVnを示し、ベクトル605は撮像装置の単位接ベクトルVtを示す。単位接ベクトルVtは投影面603上に存在する。ベクトル607は、単位接ベクトルVt、単位法線ベクトルVnと直交し、投影面603を張る単位ベクトルVuである。
【0044】
●位置ベクトルX→投影点(x, y)
被写体606の位置ベクトルXから投影点602の座標(x, y)への変換を求める。
γf(X - C) = X' - C = x・Vu + y・Vt + f・Vn …(3)
ここで、γfは定数。
【0045】
式(3)の両辺にVu、Vn、Vtを順次作用させると次式が得られる。
┌ ┐ ┌ ┐
│x│ │VuT│
│y│= γf│VtT│(X - C) …(4)
│f│ │VnT│
└ ┘ └ ┘
ここで、Tは転置を表す。
【0046】
式(4)の第三成分から定数γfを計算すると次式が得られる。
γf = f/{(X - C)Vn} …(5)
【0047】
式(5)を式(4)に代入すると、位置ベクトルXを投影点602の座標(x,y)へ変換する次式が得られる。
┌ ┐ ┌ ┐
│x│ │VuT│
│y│= f/{(X - C)Vn}│VtT│(X - C) …(6)
│f│ │VnT│
└ ┘ └ ┘
【0048】
●投影点(x, y)→位置ベクトルX
投影点602の座標(x, y)から被写体606の位置ベクトルXへの変換を求める。このとき、位置ベクトルX=(Xs, Ys, Zs)におけるZsは距離情報によって既知である。
X - C = γi(x - C) = γi(x・Vu + y・Vt + f・Vn) …(7)
ここで、γiは定数。
【0049】
式(7)においてz成分に着目すると下式が得られる。
Zs - Cz = γi(x・Vuz + y・Vtz + f・Vnz)
γi = (Zs - Cz)/(x・Vuz + y・Vtz + f・Vnz) …(8)
【0050】
式(8)を式(7)に代入すると、投影点602の座標(x,y)を位置ベクトルXへ変換する次式が得られる。
X - C = {Zs - Cz/(x・Vuz+y・Vtz+f・Vnz)}(x・Vu+y・Vt+f・Vn) …(9)
【0051】
●異なる時刻における投影点(x, y)の変換
異なる時刻における投影点(x, y)の変換式を求める。なお、この変換が、射影変換部205が計算する射影変換に相当する。図8により異なる時刻における被写体と投影面の関係を説明する。
【0052】
時刻0において、点701は撮像装置の光軸中心を示し、点703は被写体606の投影面705における投影点(x0, y0)を示す。また、時刻t>0において、点702は撮像装置の光軸中心を示し、点704は被写体606の投影面706における投影点(xt, yt)を示す。なお、被写体606は、静止状態にあるものとする。
【0053】
投影点(xt, yt)から投影点(x0, y0)への変換を求めると、式(9)から次式が得られる。
X-C(t) = [Zs-Cz(t)/{xtVuz(t)+ytVtz(t)+fVnz(t)}]{xtVu(t)+ytVt(t)+fVn(t)}
…(10)
【0054】
次に、被写体の位置ベクトルXから(x0, y0)に射影すると、式(6)から次式が得られる。
┌ ┐ ┌ ┐
│x0│ │Vu(0)T│
│y0│= f/[{X - C(0)}Vn(0)]│Vt(0)T│{X - C(0)} …(11)
│f │ │Vn(0)T│
└ ┘ └ ┘
【0055】
式(10)と(11)をまとめると次式が得られる。
┌ ┐ ┌ ┐
│x0│ │Vu(0)T│
│y0│= f/[{xtVu(t)+ytVt(t)+c(t)}Vn(0)]│Vt(0)T│{xtVu(t)+ytVt(t)+c(t)}
│f │ │Vn(0)T│
└ ┘ └ ┘
…(12)
c(t) = fVn(t)+{C(t)-C(0)/Zs-Cz(t)}{xtVuz(t)+ytVtz(t)+fVnz(t)} …(13)
【0056】
式(12)は射影変換を示し、式(13)はシフトベクトルc(t)を表す。シフトベクトル算出部203は、式(13)に示すシフトベクトルc(t)を算出する。内積算出部204は、撮影の開始後の時刻t(>0)の向きベクトルと撮影の開始時刻0の向きベクトルの内積、および、時刻tのシフトベクトルc(t)と時刻0の向きベクトルの内積を算出して、式(12)に示す射影変換の各パラメータを求める。
【0057】
式(12)(13)が示す変換を式(14)で表し、時刻0における振れがない画像をI(x, y)とすると、時刻t>0に投影点(x, y)に入射する光情報は、式(14)を用いて時刻0に変換すれば式(15)で表される。
(x0, y0) = g(xt, yt, t) …(14)
I(x0, y0) = I{g(x, y, t)} …(15)
【0058】
射影変換部205は、更新画像ベクトルデータIの各要素{I(0, 0), …, I(M-1, N-1)}を式(15)に従って射影変換する。
【0059】
[逆振れ作用部]
逆振れ作用部111の構成は、前述したように、振れ作用部110の構成と基本的に同じである。逆振れ作用部111の処理において、振れ作用部110と異なるのは、シフトベクトル算出部203と内積算出部204の処理である。
【0060】
式(12)を導いたのと同様の方法により、図8において、投影点(x0, y0)から投影点(xt, yt)への変換を求めると次式が得られる。
┌ ┐ ┌ ┐
│xt│ │Vu(t)T│
│yt│= f/[{x0Vu(0)+y0Vt(0)+c'(t)}Vn(t)]│Vt(t)T│{x0Vu(0)+y0Vt(0)+c'(t)}
│f │ │Vn(t)T│
└ ┘ └ ┘
…(16)
c'(t) = fVn(0)+{C(0)-C(t)/Zs-Cz(0)}{x0Vuz(0)+y0Vtz(0)+fVnz(0)} …(17)
【0061】
式(16)は射影変換を示し、式(17)はシフトベクトルc'(t)を表す。逆振れ作用部111のシフトベクトル算出部203は、式(17)に示すシフトベクトルc'(t)を算出する。逆振れ作用部111の内積算出部204は、時刻tの向きベクトルと時刻0の向きベクトルの内積、および、時刻tのシフトベクトルc'(t)と時刻tの向きベクトルの内積を算出して、式(16)に示す射影変換の各パラメータを求める。
【0062】
式(16)(17)が示す変換を式(18)で表す。また、式(19)に示すように、式(14)のgと式(18)のfには逆変換の関係がある。
(xt, yt) = f(x0, y0, t) …(18)
(x, y) = g(f(x, y ,t), t) = f(g(x, y, t), t) …(19A)
I(x0, y0) = I{g(x, y, t)} …(19B)
【0063】
逆振れ作用部111の射影変換部205は、更新画像ベクトルデータIの各要素{I(0, 0), …, I(M-1, N-1)}を式(19B)に従って射影変換する。
【0064】
[振れ補正部の動作原理]
式(15)に時刻tにおける露光条件h(t)を乗算し、時刻t=0からτまで積分した結果は、振れによって暈けた画像を示す。
Iblur(X) = 1/τ・∫h(t)I(g(X, t))dt …(20)
ここで、Iは暈けを補正した画像、
Iblurは装置振れにより像が暈けた画像、
h(t)は露光強度を表す関数(シャッタや絞りなどによる露光光量の制御を示す)、
積分範囲はt=0からτまで。
【0065】
非整数値の座標にも対応可能なように補間カーネルφ(X)を導入して、非整数値の座標の画素の値を次のように定義する。
I(X) ≡ Σφ(X - j)I(j) …(21)
ここで、Σ演算の範囲はj∈Z/MZ×Z/NZ、
Zは整数の集合を表し、
Z/MZは[0, 1, 2, …, M-1]、
M×Nは画素数。
【0066】
なお、式(21)において、Z/MZは[0, 1, 2, …, M-1]の集合を表し、0とMを同一視するものとする。つまり、φ(0)=φ(M)である。Z/MZ×Z/NZは[(0, 0), (1, 0), …, (M-1, 0), (0,1), …, (M-1, N-1)]の集合を表し、第一成分に関しては周期0とMを、第二成分に関しては0とNを同一視するものとする。
【0067】
なお、式(21)は通常の補間式と同一である。式(21)を式(20)に代入すると次式が得られる。
Iblur(i) = 1/τ・∫h(t)Σφ(g(i, t) - j)I(j)dt ≡ K・I …(22)
ここで、K(i, j) = 1/τ・∫h(t)Σφ(g(i, t) - j)dt。
【0068】
画像を一次元のベクトルとして表現すると、KはNM×NMの行列として表現される。つまり、振れによる暈けは次の連立方程式に帰着する。従って、次の連立方程式を解いてIを求めれば、振れによる暈けをなくした(回復した)画像が得られる。
Iblur = K・I …(23)
【0069】
式(23)に示す連立方程式を間接法を用いて解くとすると、KとKTをベクトルデータに繰り返し作用させて、ベクトルデータを更新することになる。計算の高速化には、ベクトルデータに対するKとKTの作用を簡潔に表す必要がある。
【0070】
●ベクトルデータに対するKとKTの作用
式(21)から、ベクトルデータに対するKの作用は、撮像装置において発生した振れと同様の振れをベクトルデータに与えることに等しい。また、式(22)から、KTは次式で表される。
KT(i, j) = K(j, i) = 1/τ・∫h(t)φ(g(j, t) - i)dt …(24)
【0071】
従って、ベクトルデータに対するKTの作用は次式で表される。
(KT・J)i = ΣKT(i, j)J(j) = 1/τ・∫h(t)Σφ(g(j, t) - i)J(j)dt …(25)
【0072】
Σφ(g(j, t) - i)J(j)の部分をさらに変形すると次式が得られる。なお、φp(X)≡φ(-X)を定義し、式(19)によりj=f(g(j, t), t)が成り立つことを用いる。
Σφ(g(j, t) - i)J(j) = Σφp(i - g(j, t))J(f(g(j, t), t)) …(26)
【0073】
jが格子点を動くとき、g(j, t)もほぼ格子点を網羅するように動くと仮定すると次式が得られる。
Σφp(i - g(j, t))J(f(g(j, t), t)) 〜 Σφp(i - j')J(f(j', t)) …(27)
【0074】
φpを用いた補間結果を式(28)で定義して、式(27)の近似を仮定すると、式(29)のようになる。
Jp(X) ≡ Σφp(X - i)J(i) …(28)
Σφp(g(j, t) - i)J(j) ≒ Jp(f(i, t)) …(29)
【0075】
式(29)を式(25)に代入すると次式が得られる。
(KT・J)i ≒ 1/τ・∫h(t)Jp(f(i, t))dt …(30)
【0076】
式(30)は、ベクトルデータに対するKTの作用が、撮像装置の振れによる射影変換と逆変換の関係にある射影変換によって、振れをベクトルデータJに与えることを意味する。つまり、式(22)と式(30)が示すように、ベクトルデータにKとKTtを作用させることは、ベクトルデータに振れを与えることに等しい。
【0077】
●連立方程式の解法
連立方程式(23)を間接法を用いて解くが、ここでは一例として共役勾配法を用いる。Kは、通常、対称行列ではないので、KTを式(23)に作用させる。
KT・Iblur = KTK・I = A・I …(31)
ここで、Aは対称行列。
【0078】
共役勾配法は、式(32)に従ってベクトルデータを更新する。
Ik+1 = Ik + αkpk
rk+1 = rk - αkA・pk …(32)
pk+1 = rk+1 + βkpk
ここで、αk = (rk, rk)/(pk, A・pk)、
βk = (rk+1, rk+1)/(rk, rk)。
【0079】
更新を行うには、A・pk=KTK・pkを求める必要がある。これは、前述したように、pkに撮像装置の振れと同じ振れを与え、続いて、撮像装置の振れによる射影変換と逆変換の関係にある射影変換によって、振れを与えればよい。式(32)の振れを与える過程は、図4に示すステップS303とS304に対応する。
【0080】
また、共役勾配法は、下式に従って各ベクトルデータを初期化する。
I0 = Iblur
r0 = b - A・I0 …(33)
p0 = r0
【0081】
対称行列Aの作用は、上述したように、撮像装置の振れと同じ振れをベクトルデータに与えればよい。式(33)は、図5に示す処理に対応する。
【0082】
[暈け補正の結果]
図9により補正処理部100による暈け補正の結果例を示す。図8(a)はピッチとして0.1度、ヨーとして0.2度の振れを与えた画像を示す。図9(b)は、補正処理部100によって、図9(a)に示す暈けが回復された画像を示す。
【0083】
このように、振れ軌跡を示す情報と露光条件を用いて、一枚の画像の画像データから、当該画像の装置振れによる暈けを補正することができる。従って、振れの軌跡が複雑な場合も良好に暈け補正することができる。
【実施例2】
【0084】
以下、本発明にかかる実施例2の画像処理を説明する。なお、実施例2において、実施例1と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【0085】
補正処理部100の補正において、画像の端部に位置する暈けは、画像情報が欠如するため正しく補正することができない。これを考慮すると、補正処理部100は、補正処理の途中または補正処理の後、画像の端部領域をクロップする(切除する)ように画像データを削除して、画像の中央部に相当する画像データを出力することが好ましい。なお、端部領域のクロップを考慮したより広い範囲の画像を取得してもよい。勿論、端部領域に関しては補正処理をしなくてもよい。
【0086】
端部領域の決定方法を説明する。振れ軌跡を示す情報から被写体Xの投影点は下式に従って移動する。
(xt, yt) = f(x, y, t)
【0087】
ある時刻tにおいて、(xt, yt)が一度でも画像外に出た場合は、被写体Xが端部領域にあると判定する。この操作をすべての投影点に対して行い、画像の端部領域を決定する。勿論、この決定方法は必要最低限であり、より広い領域を端部領域に決定してもよい。
【0088】
図10により実施例2の補正処理部100による暈け補正の結果例を示す。図10(a)は補正処理後の画像データが示す画像であり、端部領域の暈けが補正されていない。図10(b)は、図10(a)に示す画像の端部領域をクロップした画像を示し、端部領域のクロップにより、良好な画像を得ることができる。
【実施例3】
【0089】
以下、本発明にかかる実施例3の画像処理を説明する。なお、実施例3において、実施例1、2と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【0090】
図11のブロック図により撮像装置の構成例を示す。
【0091】
被写体からの反射光は、撮像部1000に入射し、レンズ1002およびシャッタ1003を介して、撮像デバイス1004上に結像する。撮像デバイス1004が出力するアナログ信号は、アナログ-ディジタル変換器(A/D)1005によってディジタル信号に変換されて補正処理部100に入力される。なお、図11には撮像デバイス1004の出力をA/D変換した信号(例えばRAWデータのような撮像データ)を補正処理部100に入力する例を示す。しかし、A/D変換した信号にデモザイキングなどの現像処理を施した画像データを補正処理部100に入力してもよい。
【0092】
露光制御部1006は、図示しない撮像装置の制御部によって設定された露光条件に基づき、レンズ1002内の絞りやシャッタ1003の開閉を制御し、露光条件を補正処理部100に出力する。
【0093】
動き情報取得部1007は、撮像部1000の動きを示す、向きベクトルや位置ベクトルなどの動き情報を取得して、動き情報を補正処理部100に出力する。なお、撮像装置の動きは、ジャイロセンサや加速度センサなどによって測定してもよいし、複数の画像を取得し、それら画像から推定してもよい。
【0094】
レンズ制御部1008は、撮像装置の制御部によって設定された撮影条件に基づき、レンズ1002のズーム設定、撮影距離などを制御し、撮影距離を距離情報として補正処理部100に出力する。
【0095】
補正処理部100は、撮像データ(または画像データ)、露光情報、動き情報、距離情報を入力して、実施例1、2において説明した補正処理を実行する。
【0096】
なお、撮像装置が光学式振れ補正方式を搭載する場合、光学式振れ補正によって除去しきれなかった振れによる暈けを補正処理部100によって補正する。
【実施例4】
【0097】
以下、本発明にかかる実施例4の画像処理を説明する。なお、実施例4において、実施例1、2と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【0098】
補正処理部100を実現するプログラムを例えばパーソナルコンピュータなどのコンピュータ機器(PC)に供給し、PCが当該プログラムを実行することによっても補正処理部100を実現することが可能である。図12によりPCに供給する画像データファイルの構成例を説明する。
【0099】
画像データファイル1100は、各時刻の動き情報が記録された動き情報部1101、露光条件が記録された露光条件部1102、距離情報が記録された距離情報部1103、撮像データ(または画像データ)が記録されたデータ部1104を有する。PCは、画像データファイルから読み出した動き情報、露光条件、距離情報に基づき、画像データファイルから読み出した撮像データの暈けを回復する。
【0100】
[その他の実施例]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
撮像装置が撮影した撮像データ、並びに、前記撮影における前記撮像装置の動き情報および被写体の距離情報を入力する入力手段と、
前記撮像データを画像ベクトルデータに設定し、前記画像ベクトルデータを用いて基底ベクトルデータを設定する設定手段と、
前記動き情報および前記距離情報を用いる射影変換により、前記基底ベクトルデータに前記撮影における前記撮像装置の振れを表す振れを与えた第一の振れベクトルデータを生成する振れ作用手段と、
前記振れ作用手段による射影変換と逆変換の関係にある射影変換により、前記第一の振れベクトルデータに逆振れを与えた第二の振れベクトルデータを生成する逆振れ作用手段と、
前記第一および第二の振れベクトルデータを用いて、前記画像ベクトルデータおよび前記基底ベクトルデータを更新する更新手段と、
所定の終了条件を満たすまで前記振れ作用手段、前記逆振れ作用手段、前記更新手段に処理を繰り返させ、前記終了条件を満たすと前記画像ベクトルデータを出力する出力手段とを有することを特徴とする画像処理装置。
【請求項2】
前記動き情報は、前記撮影における各時刻の前記撮像装置の位置および向きを示す位置ベクトルおよび向きベクトルを含み、
前記振れ作用手段および前記逆振れ作用手段は、前記位置ベクトルおよび前記距離情報を用いて前記撮像装置の振れに対応するシフトベクトルを算出するシフトベクトル算出手段、前記撮影の開始時刻における向きベクトルと前記撮影の開始後の時刻における向きベクトルの内積、および、前記開始時刻における向きベクトルと前記開始後の時刻におけるシフトベクトルの内積を算出する内積算出手段、並びに、前記内積をパラメータとして前記射影変換を行う変換手段を有することを特徴とする請求項1に記載された画像処理装置。
【請求項3】
前記入力手段は、さらに前記撮影における前記撮像装置の露光条件を入力し、
前記振れ作用手段および前記逆振れ作用手段は、前記射影変換の結果に前記露光条件を乗算して前記第一および第二の振れベクトルデータを生成する乗算手段を有することを特徴とする請求項1または請求項2に記載された画像処理装置。
【請求項4】
前記設定手段は、前記画像ベクトルデータの初期値に前記振れ作用手段によって前記振れを与えたベクトルデータと、前記ベクトルデータに前記逆振れ作用手段によって前記逆振れを与えたベクトルデータの差分を算出し、前記差分を前記基底ベクトルデータの初期値に設定することを特徴とする請求項1に記載された画像処理装置。
【請求項5】
前記設定手段は前記差分を残差ベクトルデータの初期値に設定し、前記更新手段は前記第一および第二の振れベクトルデータを用いて前記残差ベクトルデータを更新し、前記出力手段は、前記残差ベクトルデータのノルムが所定の目標値以下になると、前記終了条件が満たされたと判定することを特徴とする請求項4に記載された画像処理装置。
【請求項6】
前記出力手段は、前記繰り返しの回数が所定数に達すると、前記終了条件が満たされたと判定することを特徴とする請求項1から請求項4の何れか一項に記載された画像処理装置。
【請求項7】
前記出力手段は、前記撮像装置の振れによる暈けを補正した撮像データとして、前記画像ベクトルデータを出力することを特徴とする請求項1から請求項6の何れか一項に記載された画像処理装置。
【請求項8】
入力手段、設定手段、振れ作用手段、逆振れ作用手段、更新手段、出力手段を有する画像処理装置の画像処理方法であって、
前記入力手段が、撮像装置が撮影した撮像データ、並びに、前記撮影における前記撮像装置の動き情報および被写体の距離情報を入力し、
前記設定手段が、前記撮像データを画像ベクトルデータに設定し、前記画像ベクトルデータを用いて基底ベクトルデータを設定し、
前記振れ作用手段が、前記動き情報および前記距離情報を用いる射影変換により、前記基底ベクトルデータに前記撮影における前記撮像装置の振れを表す振れを与えた第一の振れベクトルデータを生成し、
前記逆振れ作用手段が、前記振れ作用手段による射影変換と逆変換の関係にある射影変換により、前記第一の振れベクトルデータに逆振れを与えた第二の振れベクトルデータを生成し、
前記更新手段が、前記第一および第二の振れベクトルデータを用いて、前記画像ベクトルデータおよび前記基底ベクトルデータを更新し、
前記出力手段が、所定の終了条件を満たすまで前記振れ作用手段、前記逆振れ作用手段、前記更新手段に処理を繰り返させ、前記終了条件を満たすと前記画像ベクトルデータを出力することを特徴とする画像処理方法。
【請求項9】
コンピュータを請求項1から請求項7の何れか一項に記載された画像処理装置の各手段として機能させることを特徴とするプログラム。
【請求項1】
撮像装置が撮影した撮像データ、並びに、前記撮影における前記撮像装置の動き情報および被写体の距離情報を入力する入力手段と、
前記撮像データを画像ベクトルデータに設定し、前記画像ベクトルデータを用いて基底ベクトルデータを設定する設定手段と、
前記動き情報および前記距離情報を用いる射影変換により、前記基底ベクトルデータに前記撮影における前記撮像装置の振れを表す振れを与えた第一の振れベクトルデータを生成する振れ作用手段と、
前記振れ作用手段による射影変換と逆変換の関係にある射影変換により、前記第一の振れベクトルデータに逆振れを与えた第二の振れベクトルデータを生成する逆振れ作用手段と、
前記第一および第二の振れベクトルデータを用いて、前記画像ベクトルデータおよび前記基底ベクトルデータを更新する更新手段と、
所定の終了条件を満たすまで前記振れ作用手段、前記逆振れ作用手段、前記更新手段に処理を繰り返させ、前記終了条件を満たすと前記画像ベクトルデータを出力する出力手段とを有することを特徴とする画像処理装置。
【請求項2】
前記動き情報は、前記撮影における各時刻の前記撮像装置の位置および向きを示す位置ベクトルおよび向きベクトルを含み、
前記振れ作用手段および前記逆振れ作用手段は、前記位置ベクトルおよび前記距離情報を用いて前記撮像装置の振れに対応するシフトベクトルを算出するシフトベクトル算出手段、前記撮影の開始時刻における向きベクトルと前記撮影の開始後の時刻における向きベクトルの内積、および、前記開始時刻における向きベクトルと前記開始後の時刻におけるシフトベクトルの内積を算出する内積算出手段、並びに、前記内積をパラメータとして前記射影変換を行う変換手段を有することを特徴とする請求項1に記載された画像処理装置。
【請求項3】
前記入力手段は、さらに前記撮影における前記撮像装置の露光条件を入力し、
前記振れ作用手段および前記逆振れ作用手段は、前記射影変換の結果に前記露光条件を乗算して前記第一および第二の振れベクトルデータを生成する乗算手段を有することを特徴とする請求項1または請求項2に記載された画像処理装置。
【請求項4】
前記設定手段は、前記画像ベクトルデータの初期値に前記振れ作用手段によって前記振れを与えたベクトルデータと、前記ベクトルデータに前記逆振れ作用手段によって前記逆振れを与えたベクトルデータの差分を算出し、前記差分を前記基底ベクトルデータの初期値に設定することを特徴とする請求項1に記載された画像処理装置。
【請求項5】
前記設定手段は前記差分を残差ベクトルデータの初期値に設定し、前記更新手段は前記第一および第二の振れベクトルデータを用いて前記残差ベクトルデータを更新し、前記出力手段は、前記残差ベクトルデータのノルムが所定の目標値以下になると、前記終了条件が満たされたと判定することを特徴とする請求項4に記載された画像処理装置。
【請求項6】
前記出力手段は、前記繰り返しの回数が所定数に達すると、前記終了条件が満たされたと判定することを特徴とする請求項1から請求項4の何れか一項に記載された画像処理装置。
【請求項7】
前記出力手段は、前記撮像装置の振れによる暈けを補正した撮像データとして、前記画像ベクトルデータを出力することを特徴とする請求項1から請求項6の何れか一項に記載された画像処理装置。
【請求項8】
入力手段、設定手段、振れ作用手段、逆振れ作用手段、更新手段、出力手段を有する画像処理装置の画像処理方法であって、
前記入力手段が、撮像装置が撮影した撮像データ、並びに、前記撮影における前記撮像装置の動き情報および被写体の距離情報を入力し、
前記設定手段が、前記撮像データを画像ベクトルデータに設定し、前記画像ベクトルデータを用いて基底ベクトルデータを設定し、
前記振れ作用手段が、前記動き情報および前記距離情報を用いる射影変換により、前記基底ベクトルデータに前記撮影における前記撮像装置の振れを表す振れを与えた第一の振れベクトルデータを生成し、
前記逆振れ作用手段が、前記振れ作用手段による射影変換と逆変換の関係にある射影変換により、前記第一の振れベクトルデータに逆振れを与えた第二の振れベクトルデータを生成し、
前記更新手段が、前記第一および第二の振れベクトルデータを用いて、前記画像ベクトルデータおよび前記基底ベクトルデータを更新し、
前記出力手段が、所定の終了条件を満たすまで前記振れ作用手段、前記逆振れ作用手段、前記更新手段に処理を繰り返させ、前記終了条件を満たすと前記画像ベクトルデータを出力することを特徴とする画像処理方法。
【請求項9】
コンピュータを請求項1から請求項7の何れか一項に記載された画像処理装置の各手段として機能させることを特徴とするプログラム。
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図11】
【図12】
【図1】
【図9】
【図10】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図11】
【図12】
【図1】
【図9】
【図10】
【公開番号】特開2012−147202(P2012−147202A)
【公開日】平成24年8月2日(2012.8.2)
【国際特許分類】
【出願番号】特願2011−3399(P2011−3399)
【出願日】平成23年1月11日(2011.1.11)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成24年8月2日(2012.8.2)
【国際特許分類】
【出願日】平成23年1月11日(2011.1.11)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]