<実施形態1>
図1は、本発明の実施形態1における撮像装置のブロック図を示す。図1において、結像光学系1を通過して入射した被写体像は、撮像部2が有する撮像素子で電気信号に光電変換される。A/D変換部3は、撮像部2から出力されるアナログの映像信号をデジタルの画像データに変換するものである。信号処理部4は、A/D変換部3から出力される画像データを後述の手ブレ検出部9において使用するYUVデータ形式の画像データに変換するため、ホワイトバランス回路、ガンマ補正回路、マトリクス変換回路等を含む。この信号処理部4から出力される画像データは、メモリI/F5を介して一時的にメモリ部6に蓄積される。ここで、図2に示すように、メモリ部6はフレームメモリ領域6−1と、合成処理用フレームメモリ領域6−2の少なくとも2つの記憶領域を有する。本実施形態1においては、合成処理用フレームメモリ領域6−2には、フレームメモリ領域6−1より広い記憶領域が設定される。
またフレームメモリ領域6−1には、撮像枚数をNとしたときN枚目の画像データが記憶されており、合成処理用フレームメモリ領域6−2にはN−1枚目までの複数の画像データが合成された合成画像データが記憶されている。手ぶれ検出部9は、メモリ部6のフレームメモリ領域6−1に記憶されているN枚目の画像データと合成処理用フレームメモリ領域6−2に記憶されている合成画像データからN−1枚目までの合成画像データの領域部分を抽出する。そしてN枚目の画像データと、この抽出した画像データから、手ぶれによる画像データの画像の移動量、即ち撮像装置の手ぶれの量が求められる。
画像データの手ぶれ量の検出方法は、基本的に動きベクトルを検出するもので、まず画像データの画面を複数の領域に分割する。そして、それぞれの領域ごとの局所的な移動量の平均化等の統計的処理により、画面全体の移動量を求め、これにより撮像装置の手ぶれ量を決定する。このとき手ぶれ検出部9に入力されるN−1枚目の画像データは合成画像データから抜き出すため、N枚目の画像データと輝度レベルが異なる場合がある。
したがって、合成画像データが、信号レベルを考慮せずに単に信号の合成された合成画像データの場合には、抜き出されるN−1枚目の画像データは1/(N-1)倍に信号レベルが下げられてから手ぶれ検出部9に入力される。以上の動作について図2で説明すると、まずN枚目の画像データは、フレームメモリ領域6−1からメモリI/F5を介して、手ぶれ検出部9に入力される。一方、合成処理用フレームメモリ領域6−2領域からのN−1枚目までの合成画像データは、メモリI/F5を介し、さらに信号レベル調整部18を介して手ぶれ検出部9に入力される。信号レベル調整部18は、N−1枚目までの合成画像データの信号レベルを1/(N-1)倍に下げてから、手ぶれ検出部9に入力する。信号レベル調整部18は、CPU13からのレベル制御信号にしたがって、信号レベルを調整する機能を有する。
このように、信号レベルが合された2つの画像データとの間で手ぶれ検出処理が実行される。手ぶれ検出部9で求めた手ぶれによる画像データの移動情報はCPU13へ送られる。この移動情報に基づき、ウィンドウ制御部7は、メモリI/F5を介してメモリ部6の合成処理用フレームメモリ領域6−2領域にN枚目の画像データが重ねられるメモリ記憶領域を示すウィンドウを設定する(ウィンドウWin-A)。また合成画像データの全領域を示すウィンドウもウィンドウ制御部7が設定する(ウィンドウWin-B)。この2つのウインドウを基準に電子手ぶれ補正の処理が行われる。
この電子手ぶれ補正の処理の動作について、図3で説明すると、合成演算部8は、機能的に信号レベル調整部19と加算部20を有し、N枚目の画像データがフレームメモリ領域6−1から、メモリI/F5を介して合成演算部8に入力される。一方、合成処理用フレームメモリ領域6−2領域からのN−1枚目の画像データも、メモリI/F5を介して合成演算部8に入力される。この2つの画像データを加算するにあたり、合成処理用フレームメモリ領域6−2領域からのN−1枚目の画像データは信号レベル調整部19で信号レベルが1/(N-1)倍に変換されて、加算部20に入力される。このことで、合成される2つの画像データの信号レベルが合され、合成された画像データは、加算部20からメモリI/F5を介してメモリ部6の合成処理用フレームメモリ領域6−2領域に再び書込まれる。
図1の説明にもどるが、図1の実施形態1の撮像装置は、さらに、表示制御部10、表示I/F11及び表示部12を備える。したがって、表示部12により、撮影前の画像及び、撮影されてメモリ部6に蓄積された画像データを見ることが可能である。また、CPU13を動作させるために、各種プログラムが格納されたROM14、さらに、CPU13の動作のワークメモリとしてのRAM15を備える。また、ユーザが行う、各種の調整、切り換え、シャッタ操作等をおこなう操作部17が、操作入力I/F16を介してCPU13に結合され、ROM14に格納されたプログラムに従って撮像装置は動作する。操作関係に限られることなく、各種の信号処理、また本発明の実施形態に係る動作もCPU13により制御することが可能である。さらに、フラッシュメモリ等で構成される着脱可能なメモリカード30を備え、メモリ部6に蓄積された画像データを順次蓄積することが可能に構成されている。
図4に、メモリ部6のフレームメモリ領域6−1と、合成処理用フレームメモリ領域6−2に設定される2つのウィンドウの動作を説明するためのイメージ図を示す。まず、図4のフレームメモリ領域6−1において、(a)と(b)に示すように、撮像されて記憶された1枚目(N=1)の画像データは、フレームメモリ領域6−1から合成処理用フレームメモリ領域6−2に格納される。格納記憶領域は先に設定されたウィンドウWin-Aで決定される。
次に、(b)に示すように、2回目の撮像で得られた2枚目(N=2)の画像データがフレームメモリ領域6−1に記憶される。次に、(b)のフレームメモリ領域6−1に記憶された2枚目の画像データと、合成処理用フレームメモリ領域6−2の(d)に示すウィンドウWin-A内の画像データとで手ぶれ検出処理が行われる。この検出処理結果に基づいて、合成処理用フレームメモリ領域6−2の(e)に示すように、ウィンドウWin-Aの位置が手ぶれ補正処理される方向にずらされる。また、ウィンドウWin-Aのズレに追従してウィンドウWin-Bも図で実線で示すように領域が広げられる。
つぎに、合成処理用フレームメモリ領域6−2の(e)のウィンドウWin-Aに、フレームメモリ領域6−1の(b)に格納されている2枚目の画像データが重ね合わされる。このときの重ね合わせについては後述の合成処理方法で詳細を説明する。
次に、フレームメモリ領域6−1の(c)に示すように、3回目の撮像で得られた3枚目(N=3)の画像データがフレームメモリ領域6−1に記憶される。そして、フレームメモリ領域6−1の(c)の3枚目の画像データと、合成処理用フレームメモリ領域6−2の(e)のウィンドウWin-A内の画像データとで手ぶれ検出処理が行われる。この検出処理結果に基づき、合成処理用フレームメモリ領域6−2の(f)に示すように、ウィンドウWin-Aの位置がずらされる。そして、合成処理用フレームメモリ領域6−2の(f)のウィンドウWin-Aに、フレームメモリ領域6−1の(c)に格納されている3枚目の画像データが重ね合わされる。以降、ユーザが設定した撮影回数のN回が終わるまで同様の処理が行われる。図4において、フレームメモリ領域6−1及び合成処理用フレームメモリ領域6−2には、あたかも、それぞれ3フレーム分の記憶領域が設定される図となっている。しかしながら、これは動作の説明のためであって、基本的に、フレームメモリ領域6−1及び合成処理用フレームメモリ領域6−2には、図2及び3で示すように、基本的に1フレーム分の記憶領域が設定されるものである。
次に、図5および図6を用いて、本発明の実施形態1における撮像装置のウィンドウ制御部7の処理手順を説明する。
まず図6について説明するが、図6はメモリ部6の合成処理用フレームメモリ領域6−2のメモリ記憶領域をイメージ化した図である。
メモリ部6の合成処理用フレームメモリ領域6−2の記憶領域にはウィンドウ制御部7によって2つのウィンドウが設定される。1つのウィンドウは、手ぶれ検出処理結果をもとにN−1枚目の画像データとズラして重ねられるN枚目の画像データの領域を示すウィンドウで、本実施形態1ではウィンドウWin-Aとして明示している。また、もう1つのウィンドウは、合成画像データの領域を示すウィンドウで、本実施形態1ではウィンドウWin-Bとして明示している。このWin-Bは、N枚目の画像データが重ねられることで合成画像データの領域が広がると、実線で示すように、それに合わせて領域のサイズが変更されるウィンドウである。
各々のウィンドウに関して相互的な関係を詳細に説明する。まず合成処理用フレームメモリ領域6−2のメモリ領域を図6の(a)に示すように左上の座標を(0、0)、右下の座標を(n、n)として設定する(n≧0)。
またウィンドウWin-Aは、初め、1枚目の画像データを記憶する領域を示すウィンドウとして座標が初期化されている。例えば図6の(a)に示すように、ウィンドウWin-Aの左上の座標は(xs(1)、ys(1))、また右下の座標は(xe(1)、ye(1))とする。
また図6の(b)に示すように、ウィンドウWin-Bの左上の座標は(Xs、Ys)、右下の座標は(Xe、Ye)と設定する。ここでウィンドウWin-Bは合成画像データの領域を示すウィンドウであるが、1枚目の画像データに関してはウィンドウWin-Aの初期座標と同じ座標が設定される。
つまり
Xs=xs(1)・・・(a)、
Ys=ys(1)・・・(b)、
Xe=xe(1)・・・(c)及び
Ye=ye(1)・・・(d)となる。
またウィンドウWin-Bは、画像データが重ねられていくにつれ合成画像データ領域が広がると座標を更新していく。本実施形態1では、下記条件を満たすとき座標が更新される。
つまり、
xs(N)<Xsであれば、Xsにxs(N)を代入・・・(e)、
ys(N)<Ysであれば、Ysにys(N)を代入・・・(f)、
xe(N)>Xeであれば、Xeにxe(N)を代入・・・(g)及び
ye(N)>Yeであれば、Yeにye(N)を代入・・・(h)となる。
次に2枚目の画像データが取り込まれた時のウィンドウの変更について説明する。2枚目の画像データが取り込まれると、手ぶれ検出部9は、ウィンドウWin-Aの領域の画像データと2枚目の画像データにより手ぶれ量を検出する。ここでウィンドウWin-Aは1枚目の画像データが置かれている領域を示している。
手ぶれ検出部9における手ぶれの検出処理方法は、まず輝度信号成分のみの画像データを複数の領域に分割し、それぞれの領域ごとの局所的な移動量の平均化等の統計的処理により画面全体の移動量を求め、撮像装置の手ぶれ量を決定する。
この決定された手ぶれ量に基づき、ウィンドウWin-Aは1枚目の画像データよりもズレた領域として設定される。例えば図6の(c)に示すように、1枚目の画像データよりも右下の方向にズレた位置に2枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標は(xs(2)、ys(2))、右下の座標は(xe(2)、ye(2))として設定される。
ここでウィンドウWin-Bは、
xe(2)>Xe・・・(i)及び
ye(2)>Ye・・・(j)
の条件を満たすため、Xeにはxe(2)が、Yeにはye(2)が設定される。これにより図6の(d)に示すように、ウィンドウWin-Bは1枚目と2枚目の画像データが置かれる全ての領域を示すウィンドウとして座標が更新される。
次に3枚目の画像データが取り込まれた時のウィンドウの変更について説明する。3枚目の画像データが取り込まれると、手ぶれ検出部9は、ウィンドウWin-Aの領域の画像データと3枚目の画像データとにより手ぶれ量を検出する。ここで、ウィンドウWin-Aは2枚目の画像データが置かれている領域を示している。
検出された手ぶれ量に基づき、ウィンドウWin-Aは2枚目の画像データよりもズレた位置の領域として設定される。例えば図6の(e)に示すように、2枚目の画像データよりも左上の方向にズレて3枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標は(xs(3)、ys(3))、右下の座標は(xe(3)、ye(3))として設定される。
ここでウィンドウWin-Bは
xs(3)<Xs・・・(k)及び
ys(3)<Ys・・・(l)
の条件を満たすため、Xsにはxs(3)が、またYsにはys(3)が設定される。これにより図6の(f)に示すように、ウィンドウWin-Bは合成画像データと3枚目の画像データが置かれる全ての領域を示すウィンドウとして座標が更新される。
次に4枚目の画像データが取り込まれた時のウィンドウの変更について説明する。4枚目の画像データが取り込まれると、手ぶれ検出部9は、ウィンドウWin-Aの領域の画像データと4枚目の画像データとにより手ぶれ量を検出する。ここで、ウィンドウWin-Aは3枚目の画像データが置かれている領域を示している。
検出された手ぶれ量に基づきウィンドウWin-Aは、3枚目の画像データよりもズレた位置の領域として設定される。例えば図6の(g)に示すように、3枚目の画像データよりも左上の方向にズレて4枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標(xs(4)、ys(4))は合成処理用フレームメモリ領域6−2の左上の座標(0、0)である事から、
xs(4)<0・・・(m)及び
ys(4)<0・・・(n)
の条件を満たすため、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2の外側であるため座標の更新が行なわれない。
これにより図6の(f)に示すようにウィンドウWin-Bは、合成画像と3枚目の画像が置かれる全ての領域を示すウィンドウとして座標が維持される。以上の処理により撮影枚数3/N回分の画像の合成が行なわれる。
次に、図5のフローチャートを用いて、本発明の実施形態1に係る撮像装置におけるウィンドウ制御の動作を説明する。
図5において、処理の開始後まず処理手順S100で、ウィンドウWin-Aの位置を表す座標の初期化と合成処理用フレームメモリ領域6−2の全領域の値を0で初期化する。またユーザが何枚のフレーム画像を使用して手ぶれ補正を行うかをNmaxとして設定する。また初め撮像枚数Nは0である。次に処理手順S101で撮像枚数Nが1枚分足されN+1とされ、処理手順S102でN(=1)枚目の撮像が行われる。処理手順S103では撮像枚数が1枚目か、又は2枚目以降かが判断され、1枚目のときは処理手順110に進み、ウィンドウWin-Bの位置を示す座標にウィンドウWin-Aの座標が入力される。
次に処理手順S111で1枚目の画像データがウィンドウWin-Aの領域に格納される。また処理手順S103で撮像枚数が2枚目以降と判断されると処理手順S104に進む。処理手順S104では、合成画像においてN−1枚目の画像データの領域を示すウィンドウWin-Aの画像データと撮像されたN枚目の画像データとで手ぶれ検出処理が行われる。このとき手ぶれ検出には輝度信号成分のみを使用し、ウィンドウWin-Aから読み出される画像データは1/(N−1)倍に信号レベルが調整されて手ぶれ検出部9に入力される。この動作は、図2を用いて機能的に説明されたものである。
次に処理手順S105では手ぶれ検出結果をもとにウィンドウWin-Aの座標が手ぶれ補正されるように、手ぶれ方向とは逆の方向に座標が補正される。この座標変更により処理手順S120では、図6に示した座標を用いて下記条件を満たした時、ウィンドウWin-Aは合成処理用フレームメモリ領域6−2よりも外側にずれたと解釈する。
xs(N)<0、またはys(N)<0、またはxe(N)>n、またはye(N)>n・・・(o)
上記の判断で、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2よりも外側にずれた時、ウィンドウWin-Bの画像データに対し、Nmax/(N−1)倍のレベル調整が処理手順S121で行なわれ、処理フローを終了する。
しかしながら、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2よりも内側の領域であれば、処理手順105で座標変更を行う。この座標変更により処理手順S106でウィンドウWin-AがウィンドウWin-Bよりも側外の領域にずれた時、ウィンドウWin-Bの座標が処理手順S107において更新される。またウィンドウWin-AがウィンドウWin-Bよりも外の領域にずれない時はウィンドウWin-Bの座標は更新されない。
ここで本実施形態1では、図6に示した座標を用いて下記条件を満たした時、ウィンドウWin-AはウィンドウWin-Bの領域よりも外にずれたと解釈し、ウィンドウWin-Bの座標を更新するとした。
xs(N)<Xs、またはys(N)<Ys、またはxe(N)>Xe、またはye(N)>Ye・・・(p)
の時ウィンドウWin-Bの座標を更新する。
次に処理手順S108では、N枚目に撮像された画像データがウィンドウWin-Aの領域に合成される。この処理手順S108における画像合成処理については図7のフローチャートを用いて後述する。
処理手順S109ではユーザが設定したNmaxに撮像枚数Nが達していれば処理フローを抜けて処理を終了し、達していなければ処理手順S101へもどり、それ以降の処理フローを繰り返す。
以上説明するように、図5のフローチャートに従い、合成処理用フレームメモリ領域6−2に納まらない手ぶれが合っても、メモリ領域を破壊せずに、合成処理用フレームメモリ領域6−2に、2つのウィンドウWin-A、Win-Bが設定される。またこれらのウィンドウWによって、合成画像からN−1枚目の画像データを抜き出し、N枚目の画像データで手ぶれ検出を行うことが可能となる。
次に、図7を用いて本実施形態1の画像合成について、更に詳しく説明する。図7は、画像合成時にメモリ部6におけるフレームメモリ領域6−1と合成処理用フレームメモリ領域6−2における画像データの配置をイメージ表現した図である。合成処理用フレームメモリ領域6−2は、図5のフローチャートで説明したようにはじめ全記憶領域が0で初期化されている。
まず1枚目の撮像で図7の(a)に示すように、フレームメモリ領域6−1に1枚目の画像データが置かれる。つぎに、前述のウィンドウWin-Aの領域にこの1枚目の画像データが図7の(e)に示すように合成処理用フレームメモリ領域6−2に置かれる。
つぎに2枚目の撮像で、図7の(b)に示すように、フレームメモリ領域6−1に2枚目の画像データが記憶される。そして図7の(f)に示す様に、この2枚目の画像データは1枚目の画像よりも手ぶれ移動量分補正された位置にウィンドウWin-Aが設定されて画像データが合成される。
この合成処理は、図7の(f)において、ウィンドウWin-Bよりも内側で、且つウィンドウWin-Aよりも外側の領域はN/(N-1)倍、つまり2倍に信号レベルが調整されて格納される。そしてウィンドウWin-Aよりも内側の領域で、且つ合成処理用フレームメモリ領域6−2のデータが0の時は2枚目の画像データをN倍、つまり2倍に信号レベルが調整されて、合成処理用フレームメモリ領域6−2に格納される。この部分は、図中ハッチングで示す。またウィンドウWin-Aよりも内側の領域で、且つ合成処理用フレームメモリ領域6−2のデータが0以外の時は、2枚目の画像データと合成処理用フレームメモリ領域6−2に格納されている画像データを積算し書き戻す。以上により1枚目と2枚目の画像データが重ならない領域においても信号レベル調整が行われ、合成画像データの全領域において同じ信号レベルで画像合成処理が行われる。
次に3枚目の撮像で図7の(c)に示すように、フレームメモリ領域6−1に3枚目の画像データが記憶される。そして図7の(g)に示す様に、3枚目の画像データは2枚目の画像データよりも手ぶれ移動量分補正された位置にウィンドウWin-Aが設定され画像データが合成される。
この合成処理は、図7の(g)において、ウィンドウWin-Bよりも内側で、且つウィンドウWin-Aよりも外側の領域はN/(N-1)倍、つまり3/2倍に信号レベルが調整されて格納される。また、ウィンドウWin-Aよりも内側の領域で、且つ合成処理用フレームメモリ領域6−2のデータが0の時は、3枚目の画像データをN倍、つまり3倍にして合成処理用フレームメモリ領域6−2に格納する。さらにウィンドウWin-Aよりも内側の領域で、且つ合成処理用フレームメモリ領域6−2のデータが0以外の時は、3枚目の画像データと合成処理用フレームメモリ領域6−2に格納されているデータを積算し書き戻す。以上により2枚目までの合成画像データと、3枚目の画像データが重ならない領域においても信号レベル調整が行われ、合成画像データの全領域において同じ信号レベルで画像合成処理が行われる。
次に、4枚目の撮像で図7の(d)に示すように、フレームメモリ領域6−1に4枚目の画像データが記憶される。そして図7の(h)に示す様に、4枚目の画像データは2枚目の画像データよりも手ぶれ移動量分補正された位置にウィンドウWin-Aが設定され画像データが合成される。
この合成処理は、図7の(h)において、ウィンドウWin-Bよりも内側で、且つウィンドウWin-Aよりも外側の領域はN/(N-1)倍、つまり4/3倍に信号レベルが調整されて格納される。また、ウィンドウWin-Aよりも内側の領域で、且つ合成処理用フレームメモリ領域6−2のデータが0の時は、3枚目の画像データをN倍、つまり4倍にして合成処理用フレームメモリ領域6−2に格納する。さらにウィンドウWin-Aよりも内側の領域で、且つ合成処理用フレームメモリ領域6−2のデータが0以外の時は、4枚目の画像データと合成処理用フレームメモリ領域6−2に格納されているデータを積算し書き戻す。
以上により3枚目までの合成画像データと、4枚目の画像データが重ならない領域においても信号レベル調整が行われ、合成画像データの全領域において同じ信号レベルで画像合成処理が行われる。以上の処理が撮影枚数のN回分行われる。
上記の説明において、信号レベルの調整は、図3で説明した信号レベル調整部19に対して各種の調整レベルに対応するレベル制御信号を与えることで実行される。
次に、図8のフローチャートと図9を用いて、画像合成処理方法の処理手順を説明する。本実施形態1において画像合成処理は、図5の処理手順S108において行われる。まず図8の処理手順S200において、処理の開始後、ウィンドウWin-Bの領域から1画素ずつ画像データを読み出す。本実施形態1では、図9に示すようにウィンドウWin-Bの領域の、左上のstartアドレスから順にラスタ形式で読み出す。処理手順S201では、ウィンドウWin-Bの領域より読み出した画素データがウィンドウWin-Aの領域内にあるかどうかを判別する。このとき読み出した画素データがウィンドウWin-Aの領域よりも外の領域に位置する場合は処理手順S207に進む。
処理手順S207では、ウィンドウWin-Bの領域より読み出した画素データをN/(N−1)倍にレベル調整し処理手順S205へ進む。また処理手順S201において、ウィンドウWin-Bの領域より読み出した画素データがウィンドウWin-Aの領域よりも中にあると判断されると、処理手順S202へ進む。また処理手順S202では、読み出した画素データとN枚目の画像データとが加算される。
次に処理手順S203において処理手順S200において、ウィンドウWin-Bの領域より読み出した画素データの値が0かどうかが判断され、値が0のときは処理手順S204へ移る。ステップS204では画素データがN倍にレベル調整されて処理手順S205へ移る。また処理手順S203において読み出した画素データの値が0でないと判断された時は処理手順S205へ進む。
処理手順S205では、読み出してきたアドレスと同じアドレスに加算またはレベル調整した画素データを合成処理用フレームメモリ領域6−2に書き戻す。次に処理手順S206においてウィンドウWin-Bの領域内の画素データが全て読み出されたか判断され、全て読み出されていないと処理手順S200に戻り、それ以降の処理手順を繰り返す。また処理手順S206においてウィンドウWin-Bの領域内の画素データが全て読み出されたと判断されると図8の処理フローを抜け処理を終了する。上記の説明において、画素信号レベルの調整は、図3で説明した信号レベル調整部19に対して各種の調整レベルに対応するレベル制御信号を与えることで実行される。
以上により、画像データの合成処理時、フレーム毎に加算領域以外のレベル調整を行いながら画像合成処理を行うため、合成画像データの全領域において同じレベルで記憶されるため、1フレームよりも広い範囲から画像データを抽出することが可能となる。このようにして電子手ぶれ補正がされた画像信号が合成処理用フレームメモリ領域6−2に合成映像信号として蓄積されることとなる。この合成映像信号が表示部12に表示され、また、メモリカード30に記憶される。
また本実施形態1は本発明の一例を説明するものであって、その構成は実施形態1に示した構成に限定されるものではない。たとえば、上記の実施形態1は、手ぶれ検出を時間的に連続するフレーム画像から移動ベクトルを求めていたが、手ぶれ検出に機械装置を用いて回路規模を削減しても構わない。その場合、例えば図8に示すような回路構成が考えられる。
<実施形態1の変形例>
実施形態1では、手ぶれ検出を時間的に連続するフレーム画像から移動ベクトルを求めていたが、手ぶれ検出に機械的装置を用いて回路規模を削減しても構わない。その場合、例えば図10に示すような回路構成が考えられる。図10において、図1の実施形態1における撮像装置と共通な部分に関しては、同じ参照番号を付し、詳細な説明は省略する。
図10において、結像光学系1を通って入射した被写体像を、撮像部2の有する撮像素子で電気信号に光電変換する。A/D変換部3は、撮像部1から出力される映像信号をデジタル画像データ信号に変換するものである。信号処理部4は、A/D変換部3から出力される画像データを後述の手ブレ検出部9において使用するYUVデータ形式の画像データに変換するため、ホワイトバランス回路、ガンマ補正回路、マトリクス変換回路等を含む。信号処理部4から出力される画像データはメモリI/F5を介して一時的にメモリ部6に保存される。
この変形例の撮像装置においては、実施形態1における撮像装置の手ぶれ検出部9にかわり、機械的手ぶれ検出部40が設けられる。この機械的手ぶれ検出部40は、加速度検出装置やジャイロといった機械的物理量で、撮像装置の振動(手ぶれ等による)を捕らえて出力する装置を含み、撮像装置本体に装着されている。従って、この機械的手ぶれ検出部40によって、撮像装置の移動量および移動方向が検出される。この機械的手ぶれ検出部40で得られた手ぶれによる画像データの移動情報はCPU13へ送られる。この動き情報に基づき、ウィンドウ制御部7は、メモリI/F5を介してメモリ部6の合成処理用フレームメモリ領域6−2に、N枚目の画像データが重ねられるメモリ領域を示すウィンドウWin-Aを生成する。また合成画像データの全領域を示すウィンドウWin-Bもウィンドウ制御部7で生成される。
また、合成演算部8ではウィンドウ制御部107のウィンドウ情報をもとに、メモリ部6に設定されたフレームメモリ領域6−1に記録されている画像データと合成処理用フレームメモリ領域6−2に格納されている画像データを合成する。そして、メモリI/F5を介してメモリ部6の合成処理用フレームメモリ領域6−2に書き戻していく。これにより、手ぶれ補正された画像データがメモリ部6の109の合成処理用フレームメモリ領域6−2に蓄積される。その他の動作に関しては、実施形態1と同じ動作であるので、説明は省略する。
以上、この明細書で説明した実施形態1は、本発明の一例を説明するために引用したものであって、本発明の請求項で表現された発明を満すものであれば、その構成は、本明細書に開示した実施形態に限られない。
例えば、本実施形態1及びその変形例において加算時のレベル調整は、N枚目の画像データとウィンドウWin-Bより読み出した画像データを加算した後に行ったが、加算前にそれぞれのデータにレベル調整を行ったうえで加算する構成をとっても構わない。
また、上記の実施形態においては、ウィンドウ制御としてメモリ領域をイメージ化し、座標でウィンドウ領域を表現したが、メモリのアドレスを直接用いてウィンドウ内の領域を表現しても構わない。
<実施形態2>
次に、本発明の実施形態2に係る撮像装置を図6、図11及び図12を用いて説明する。
尚、本実施形態2に係る撮像装置の基本的なシステム構成は、上述した実形態1の図1乃至3と同一であるから、これら各図を流用して説明する。
図11は、図6と同様にメモリ部6の合成処理用フレームメモリ領域6−2をイメージ化した図である。以下、本実施形態2に係る撮像装置のメモリ部6の合成処理用フレームメモリ領域6−2の動作について説明する。
本実施形態2において、上述した実施形態1と異なる点は、手ぶれ検出結果をもとにN−1枚目とズラして重ねられるN枚目の画像データの領域を示すウィンドウWin-Aが、合成処理用フレームメモリ領域6−2の外側であっても合成を行なう点である。
合成処理用フレームメモリ領域6−2にはウィンドウ制御部7によって二つのウィンドウを持つ。ひとつは手ぶれ検出結果をもとにN−1枚目とズラして重ねられるN枚目の画像データの領域を示すウィンドウで、本実施形態2ではウィンドウWin-Aとして明示している。またもうひとつのウィンドウは合成画像の領域を示すウィンドウで、本実施形態2ではウィンドウWin-Bとして明示している。このウィンドウWin-Bは、N枚目の画像データが重ねられることで合成画像の領域が広がるとそれに合わせて領域のサイズが変更されるウィンドウである。
各々のウィンドウに関して相互的な関係を以下詳細に説明する。手ぶれ量に対する1〜3枚目の画像データの合成処理は、図6の(a)乃至図6の(f)に示す実施形態1の場合と同一であり、4枚目の画像データが取り込まれた時のウィンドウの変更について図11を用いて説明する。
4枚目の画像データが取り込まれると、手ぶれ検出部9においてウィンドウWin-Aの領域の画像データと4枚目の画像データから手ぶれ量が検出される。ここで、ウィンドウWin-Aは3枚目の画像データが置かれている領域を示している。
検出された手ぶれ量に基づきウィンドウWin-Aは、3枚目の画像データよりもズレた領域として設定される。例えば図6の(g)に示すように、3枚目の画像データよりも左上の方向にズレて3枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標(xs(4)、ys(4))は、合成処理用フレームメモリ領域の左上の座標(0、0)である事から、実施形態1で説明した
xs(4)<0・・・(m)
ys(4)<0・・・(n)
の条件を満たすため、Xs には“0”が、またYsには“0”が設定される。これにより、図11の(i)に示すように、ウィンドウWin-Bは合成画像と合成処理用フレームメモリ領域内の4枚目の画像が置かれる全ての領域を示すウィンドウとして座標が更新される。以上の処理が撮影枚数N回分行われる。
以上の処理について、図12のフローチャートを使用して説明する。まず、図12において、処理の開始後、処理手順S400で、ウィンドウWin-Aの位置を表す座標の初期化と合成処理用フレームメモリ領域の全領域の値を0で初期化する。またユーザが何枚のフレーム画像を使用して手ぶれ補正を行うかをNmaxとして設定する。また初め撮像枚数Nは0と設定される。
次に処理手順S401に進み、撮像枚数Nが1N=N+1として1枚分足されて処理手順S402でN(=1)枚目の撮像が行われる。処理手順S403では撮像枚数が1枚目か2枚目以降かが判断され、1枚目のときは処理手順410に進み、ウィンドウWin-Bの位置を示す座標にウィンドウWin-Aの座標が入力される。次に処理手順S411では1枚目の画像データがウィンドウWin-Aの領域に格納される。また処理手順S403で撮像枚数が2枚目以降だと判断されると、処理手順S404に進む。
処理手順S404では合成画像においてN−1枚目の画像領域を示すウィンドウWin-Aの画像データと撮像されたN枚目の画像データとで手ぶれ検出処理が行われる。このとき手ぶれ検出には輝度信号成分のみを使用し、ウィンドウWin-Aから読み出される画像データは1/(N−1)倍にレベル調整によりレベルが小さくされ、手ぶれ検出部9に入力される。次に処理手順S405では手ぶれ検出結果をもとにウィンドウWin-Aの座標が手ぶれ補正されるように手ぶれ方向とは逆の方向にその座標が補正される。
この座標変更により処理手順S420では、図6に示した座標を用いて、実施形態1でも使用した下記条件を満たした時、ウィンドウWin-Aは合成処理用フレームメモリ領域6−2よりも外にずれたと解釈する。
xs(N)<0、またはys(N)<0、またはxe(N)>n、またはye(N)>n・・・(o)
ウィンドウWin-Aが合成処理用フレームメモリ領域6−2よりも外にずれた時、ウィンドウWin-Bの座標が処理手順S421において、Xs には“0”が、Ysには“0”が更新され、次の処理手順S409に進む。
一方、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2よりも内側の領域であれば、処理手順405での座標変更が行われる。これにより処理手順S406でウィンドウWin-AがウィンドウWin-Bよりも外の領域にずれた時ウィンドウWin-Bの座標が処理手順S407において更新される。またウィンドウWin-AがウィンドウWin-Bよりも外側の領域にずれない時はウィンドウWin-Bの座標は更新されない。ここで本実施形態2では、図6に示した座標を用いて下記条件を満たした時、ウィンドウWin-AはウィンドウWin-Bの領域よりも外側にずれたと解釈しウィンドウWin-Bの座標を更新するとした。
xs(N)<Xs、またはys(N)<Ys、またはxe(N)>Xe、またはye(N)>Ye・・・(p)
の時ウィンドウWin-Bの座標を更新する。この条件の実施形態1で用いた条件である。
次に処理手順S408では、N枚目に撮像された画像データがウィンドウWin-Aの領域に合成される。この処理手順S408における合成方法については、実施形態1の図8のフローチャートと同一であり、その説明は省略する。
また処理手順S409では、ユーザが設定したNmaxに撮像枚数Nが達していれば処理フローを終了し、達していなければ処理手順S401へもどり、それ以降の処理フローを繰り返す。
以上説明するように、合成処理用フレームメモリ領域に納まらない手ぶれが生じても合成処理用フレームメモリ領域6−2を破壊せずに、合成処理用フレームメモリ領域6−2に2つのウィンドウが設定される。したがって、該ウィンドウによって全フレームの合成画像から手ぶれ補正を行うことが可能となる。
<実施形態3>
次に、本発明の実施形態3に係る撮像装置を、図6、図11、図13及び図14を用いて説明する。
尚、本実施形態3に係る撮像装置の基本的なシステム構成は、上述した実施形態1の図1乃至図3と同一であるから、これら各図を流用して説明する。
先に説明したように、図11は、図6と同様にメモリ部6の合成処理用フレームメモリ領域6−2イメージ化した図である。以下、本実施形態3に係る撮像装置のメモリ部6の合成処理用フレームメモリ領域6−2の動作について説明する。
本実施形態3において、上述した実施形態1、2と異なる点は、手ぶれ検出結果をもとにN−1枚目とズラして重ねられるN枚目の画像データの領域を示すウィンドウWin-Aが、合成処理用フレームメモリ領域6−2の外側であったとする。この場合、外側にずれた方向とは反対側にN−1枚目までの合成画像データのメモリ領域をズラして合成を行なう事である。
次に、本実施形態3に係る撮像装置のメモリ部6に設定される合成処理用フレームメモリ領域での動作を具体的に説明する。
合成処理用フレームメモリ領域6−2にはウィンドウ制御部7によって二つのウィンドウを持つことになる。ひとつは手ぶれ検出結果をもとにN−1枚目とズラして重ねられるN枚目の画像データの領域を示すウィンドウで、本実施形態3ではウィンドウWin-Aとして明示している。またもうひとつのウィンドウは合成画像の領域を示すウィンドウで本実施形態3ではウィンドウWin-Bとして明示している。このウィンドウWin-Bは、N枚目の画像データが重ねられることで合成画像の領域が広がるとそれに合わせて領域のサイズが変更されるウィンドウである。
各々のウィンドウに関して相互的な関係を詳細に説明する。手ぶれ量に対する1乃至3枚目の画像データの合成処理は、図6の(a)乃至図6(f)に示す実施形態1の場合と同一であり、4枚目の画像データが取り込まれた時のウィンドウの変更につい図11を用いて説明する。
4枚目の画像データが取り込まれると、手ぶれ検出部9においてウィンドウWin-Aの領域の画像データと4枚目の画像データにより手ぶれ量が検出される。ここでウィンドウWin-Aは、3枚目の画像データが置かれている領域を示している。検出された手ぶれ量に基づき、ウィンドウWin-Aは3枚目の画像データよりもズレた領域として設定される。例えば図11の(j)に示すように、3枚目の画像データよりも左上の方向にズレて3枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標(xs(4)、ys(4))は合成処理用フレームメモリ領域の左上の座標(0、0)である事から、実施形態1で使用した
xs(4)<0・・・(m)
ys(4)<0・・・(n)
の条件を満たすため
Xsにはxs(4)+|xe(4)−n|
Ysにはys(4)+|ye(4)−n|
Xeにはn
Yeにはnが設定される。
これにより、図11の(k)に示すように、ウィンドウWin-Bは合成画像と4枚目の画像が置かれる全ての領域を示すウィンドウとして右下を基準に座標が更新される。
次に5枚目の画像データが取り込まれると、手ぶれ検出部9においてにおいてウィンドウWin-Aの領域の画像データと5枚目の画像データにより手ぶれ量が検出される。ここでウィンドウWin-Aは4枚目の画像データが置かれている領域を示している。
検出された手ぶれ量に基づき、ウィンドウWin-Aは4枚目の画像データよりもズレた領域として設定される。例えば図11の(l)に示すように、4枚目の画像データよりも左上の方向にズレて5枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標(xs(5)、ys(5))は合成処理用フレームメモリ領域の左上の座標(0、0)である事から、先の条件の
xs(5)<0・・・(m)
ys(5)<0・・・(n)
の条件を満たすため、ウィンドウWin-Aが合成処理用フレームメモリ領域の外側であるため座標の更新が行なわれない。これにより、図11の(k)に示すように、ウィンドウWin-Bは合成画像と4枚目の画像データが置かれる全ての領域を示すウィンドウとして座標が維持される。以上の処理により撮影枚数4/N回分の合成が行なわれる。
図13を用いて、図11で説明した画像合成時のメモリ制御の詳細を説明する。図13において、図13の(a)は、N−1枚目の画像データよりも下方向にズレてN枚目の画像データが重なるように補正される場合を示す。この時、Nフレームの画像データとN−1フレーム合成された画像データを左上から順次読み出す。そして、Nフレームの画像データとN−1フレーム合成された画像データを合成し、Nフレーム合成された画像データが生成される。次に、Nフレーム合成された画像データは、合成処理用フレームメモリ領域には、N−1フレーム合成された画像データより上方から書き込みが開始される。これにより、N−1フレーム合成された画像データを破壊せずにNフレーム合成された画像データがメモリ上に生成される。
図13の(b)は、N−1枚目の画像データよりも上方向にズレてN枚目の画像データが重なるように補正される場合を示す。この時、Nフレームの画像データとN−1フレーム合成された画像データを左下から順次読み出し、Nフレームの画像データとN−1フレーム合成された画像データを合成し、Nフレーム合成された画像データが生成される。次に、Nフレーム合成された画像データは、合成処理用フレームメモリ領域には、N−1フレーム合成された画像データより下方から書き込みが開始される。これにより、N−1フレーム合成された画像データを破壊せずにNフレーム合成された画像データがメモリ上に生成される。
また、図13の(c)は、N−1枚目の画像データよりも左方向にズレてN枚目の画像データが重なるように補正される場合を示す。この時、Nフレームの画像データとN−1フレーム合成された画像データを左下から順次読み出し、Nフレームの画像データとN−1フレーム合成された画像データを合成し、Nフレーム合成された画像データが生成される。次に、Nフレーム合成された画像データは、合成処理用フレームメモリ領域には、N−1フレーム合成された画像データより下方から書き込みが開始される。
これにより、N−1フレーム合成された画像データを破壊せずにNフレーム合成された画像データがメモリ上に生成される。こので、図13の(c)において、N−1枚目の画像データよりも左方向にズレてN枚目の画像データが重なるように補正されるとする説明した。しかし、図13の(d)のように上方より読み出し、上方から書き込みを開始する構成や、図13の(e)のように、書込みアドレスをズラす構成としても良い。
次に、本実施形態3におけるウィンドウ制御の処理手順を、図14に示すフローチャートを用いて説明する。図14において、処理の開始後、まず処理手順S500で、ウィンドウWin-Aの位置を表す座標の初期化と合成処理用フレームメモリ領域の全領域の値を0で初期化する。さらに、ユーザが何枚のフレーム画像を使用して手ぶれ補正を行うかをNmaxとして設定する。また初め撮像枚数Nは0である。
次に処理手順S501で撮像枚数NがN=N+1として1枚分足されて処理手順S502でN(=1)枚目の撮像が行われる。処理手順S503では撮像枚数が1枚目か2枚目以降かが判断され、1枚目のときは処理手順S510に進み、ウィンドウWin-Bの位置を示す座標にウィンドウWin-Aの座標が入力される。次に処理手順S511で1枚目の画像データがウィンドウWin-Aの領域に格納される。
また処理手順S503で撮像枚数が2枚目以降だと判断されると処理手順S504に進む。処理手順S504では、合成画像においてN−1枚目の画像領域を示すウィンドウWin-Aの画像データと撮像されたN枚目の画像データで手ぶれ検出処理が行われる。このとき手ぶれ検出には輝度信号成分のみを使用し、ウィンドウWin-Aから読み出される画像データは1/(N−1)倍に信号のレベルが下げられて手ぶれ検出部9に入力される。次に処理手順S505では、手ぶれ検出結果をもとにウィンドウWin-Aの座標が手ぶれ補正されるように手ぶれ方向とは逆の方向に座標が補正される。
この座標変更により処理手順S520では、図6及び図11に示した座標を用いて下記条件を満たした時ウィンドウWin-Aは合成処理用フレームメモリ領域6−2よりも外側にずれたと解釈する。
xs(N)<0、またはys(N)<0、またはxe(N)>n、またはye(N)>n・・・(o)
ウィンドウWin-Aが合成処理用フレームメモリ領域6−2よりも外側にずれた時、処理手順S521に進む。
処理手順S521では、xs(N)<0である時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より左方向にずれたと解釈し、処理手順S522に進む。処理手順S522では、図6及び図11に示した座標を用いて下記条件を満たした時合成後のウィンドウWin-Bの水平サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
|xs(N)|≦|Xe−n|
合成後のウィンドウWin-Bが、合成処理用フレームメモリ領域6−2よりも大きい時、ウィンドウWin-Bの画像データにNmax/(N−1)倍の信号レベルの増加が処理手順S530で行なわれ、処理を終了する。一方、合成後のウィンドウWin-Bの水平サイズが、合成処理用フレームメモリ領域6−2よりも小さい時、処理手順S525に進む。
また、先の処理手順S521で、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より左方向にずれていない時は、処理手順S523に進む。処理手順S523では、xe(N)>nである時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より右方向にずれたと解釈し、処理手順S524に進む。処理手順S524では、座標を用いて下記条件を満たした時、合成後のウィンドウWin-Bの水平サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
Xs≧|xe(N)−n|
合成後のウィンドウWin-Bの水平サイズが、合成処理用フレームメモリ領域6−2よりも大きい時、ウィンドウWin-Bの画像データにNmax/(N−1)倍の信号レベルの調整が処理手順S530で行なわれ、処理を終了する。
処理手順S525では、ys(N)<0である時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より上方向にずれたと解釈し、処理手順S526に進む。処理手順S526では、図6及び図11に示した座標を用いて下記条件を満たした時、合成後のウィンドウWin-Bの垂直サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
|ys(N)|≦|Ye−n|
合成後のウィンドウWin-Bが、合成処理用フレームメモリ領域6−2よりも大きい時、ウィンドウWin-Bの画像データにNmax/(N−1)倍のレベル調整が処理手順S530で行なわれ、処理フローを抜ける。
また、合成後のウィンドウWin-Bの垂直サイズが、合成処理用フレームメモリ領域6−2よりも小さい時、処理手順S529に移る。また処理手順S525でウィンドウWin-Aが合成処理用フレームメモリ領域6−2より上方向にずれていない時、処理手順S527に移る。処理手順S527では、ye(N)>nである時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より下方向にずれたと解釈し、処理手順S528に進む。処理手順S528では、座標を用いて下記条件を満たした時、合成後のウィンドウWin-Bの垂直サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
Ys≧|ye(N)−n|
合成後のウィンドウWin-Bの垂直サイズが、合成処理用フレームメモリ領域6−2よりも大きい時、ウィンドウWin-Bの画像データにNmax/(N−1)倍の信号レベルの調整が処理手順S530で行なわれ、処理を終了する。
また、処理手順S529では、ウィンドウWin-Bの座標が、
xs(N)<0ならば、Xs=xs(N)+|xe−n|、Xe=n
xe(N)>nならば、Xs=0、Xe=xe(N)−xs(N)
ys(N)<0ならば、Ys=ys(N)+|ye−n|、Ye=n
ye(N)>nならば、Ys=0、Ye=ye(N)−ys(N)
が更新され、次の処理手順S508に進む。次に処理手順S508では、N枚目に撮像された画像データがウィンドウWin-Aの領域に合成される。この処理手順S508における合成方法については、実施形態1の図8のフローチャートと同一であり、説明は省略する。
また処理手順S509では、ユーザが設定したNmaxに撮像枚数Nが達していれば処理を終了し、達していなければ処理手順S501へ戻り、それ以降の処理フローを繰り返す。
以上のフローチャートに従いより広範囲の手ぶれ検出を可能とし、更に合成処理用フレームメモリ領域に納まらない手ぶれが有っても、合成処理用フレームメモリ領域6−2を破壊せずに、合成処理用フレームメモリ領域6−2に2つのウィンドウが設定される。また該ウィンドウによって合成画像からN−1枚目の画像を抜き出しN枚目の画像データで手ぶれ補正を行うことが可能となる。
また、実施形態3の説明において、合成処理用フレームメモリ領域に納まらない手ぶれが有った時に、画像データの合成を停止する構成とした。しかし、前記実施形態2に示すように、合成処理用フレームメモリ領域に納まらない領域のみ画像データの合成をしないとする構成をとっても良い。
<実施形態4>
次に、本発明の実施形態4に係る撮像装置を図6、図11及び図15を用いて説明する。
尚、本実施形態4に係る撮像装置の基本的なシステム構成は、上述した実施形態1の図1乃至図3と同一であるから、これら各図を流用して説明する。
以下、本実施形態4に係る撮像装置のメモリ部6の合成処理用フレームメモリ領域6−2の動作について説明する。
本実施形態4において、上述した実施形態3と異なる点は、手ぶれ検出結果をもとにN−1枚目とズラして重ねられるN枚目の画像データの領域を示すウィンドウWin-Aが、合成処理用フレームメモリ領域に納まらない手ぶれが有るとする。この場合に、N枚目から別の合成処理用フレームメモリ領域で画像合成を行なう事である。
合成処理用フレームメモリ領域6−2にはウィンドウ制御部7によって二つのウィンドウが設定される。ひとつは手ぶれ検出結果をもとにN−1枚目とズラして重ねられるN枚目の画像データの領域を示すウィンドウで、本実施形態4ではウィンドウWin-Aとして明示している。またもうひとつのウィンドウは合成画像の領域を示すウィンドウで、本実施形態4ではウィンドウWin-Bとして明示している。このウィンドウWin-Bは、N枚目の画像データが重ねられることで合成画像の領域が広がるとそれに合わせて領域のサイズが変更されるウィンドウである。
各々のウィンドウに関して相互的な関係を、以下詳細に説明する。
手ぶれ量に対する1乃至3枚目の画像データの合成処理は、図6の(a)乃至図6の(f)に示す実施形態3と同一であり、4枚目の画像データが取り込まれた時のウィンドウの変更について図11を用いて説明する。
4枚目の画像データが取り込まれると、手ぶれ検出部9においてウィンドウWin-Aの領域の画像データと4枚目の画像データとにより手ぶれ量が検出される。ここでウィンドウWin-Aは3枚目の画像データが置かれている領域を示している。
検出された手ぶれ量に基づきウィンドウWin-Aは、3枚目の画像データよりもズレた領域として設定される。例えば図11の(j)に示すように、3枚目の画像データよりも左上の方向にズレて3枚目の画像データが重なるように補正されるとする。このときのウィンドウWin-Aの左上の座標(xs(4)、ys(4))は合成処理用フレームメモリ領域の左上の座標(0、0)である事から、
xs(4)<0・・・(m)
ys(4)<0・・・(n)
の条件を満たすため
Xsにはxs(4)+|xe(4)−n|
Ysにはys(4)+|ye(4)−n|
Xeにはn
Yeにはnが設定される。
これにより、図11の(k)に示すように、ウィンドウWin-Bは合成画像と4枚目の画像が置かれる全ての領域を示すウィンドウとして右下を基準に座標が更新される。
次に5枚目の画像データが取り込まれると、手ぶれ検出部9においてウィンドウWin-Aの領域の画像データと5枚目の画像データにより手ぶれ量が検出される。ここでウィンドウWin-Aは4枚目の画像データが置かれている領域を示している。
検出された手ぶれ量に基づきウィンドウWin-Aは、4枚目の画像データよりもズレた領域として設定される。例えば図11の(m)に示すように、4枚目の画像データよりも左上の方向にズレて5枚目の画像データが重なるように補正される。このときのウィンドウWin-Aの左上の座標(xs(5)、ys(5))は合成処理用フレームメモリ領域の左上の座標(0、0)である事から、
xs(5)<0・・・(m)
ys(5)<0・・・(n)
の条件を満たすため、ウィンドウWin-Aが合成処理用フレームメモリ領域の外側であるため、合成処理用フレームメモリ領域のアドレスが更新される。これにより、図11の(n)に示すように図11の(k)とは異なる領域に第2の合成処理用フレームメモリ領域の座標が更新される。
次に5枚目の画像データは、1枚目の画像データと同様に、まず合成処理用フレームメモリ領域を図6の(a)に示すように、フレームの左上の座標を(0、0)、右下の座標を(n、n)とする(n≧0)。
またウィンドウWin-Aは、5枚目の画像データを記憶する領域を示すウィンドウとして座標が初期化されている。例えば図6の(a)に示すように、ウィンドウWin-Aの左上の座標は(xs(1)、ys(1))、右下の座標は(xe(1)、ye(1))とする。また、図6の(b)に示すように、ウィンドウWin-Bの左上の座標は(Xs、Ys)、右下の座標は(Xe、Ye)と表現する。
ここで、ウィンドウWin-Bは合成画像の領域を示すウィンドウであるが、1枚目の撮像に関してはウィンドウWin-Aの初期座標と同じ座標が設定される。つまり
Xs=xs(1)・・・(a)、
Ys=ys(1)・・・(b)、
Xe=xe(1)・・・(c)及び
Ye=ye(1)・・・(d)となる。
これにより、図11の(n)には、第2の合成処理用フレームメモリ領域に座標が更新され、図6の(b)に示す座標と同様となり、以後の合成は第2の合成処理用フレームメモリ領域で行なわれる。以上の処理が撮影枚数N回分行われる。
図15のフローチャートを用いて実施形態4のウィンドウ制御の処理手順を説明する。図15において、処理の開始後まず処理手順S600で、ウィンドウWin-Aの位置を表す座標の初期化と合成処理用フレームメモリ領域の全領域の値を0で初期化する。またユーザが何枚のフレーム画像を用いて手ぶれ補正を行うかをNmaxとして設定する。また初め撮像枚数Nは0である。
次に処理手順S601で撮像枚数NがN=N+1として1枚分足されて処理手順S602でN(=1)枚目の撮像が行われる。処理手順S603では撮像枚数が1枚目か2枚目以降かが判断され、1枚目のときは処理手順S610に進み、ウィンドウWin-Bの位置を示す座標にウィンドウWin-Aの座標が入力される。次に処理手順S611で1枚目の画像データがウィンドウWin-Aの領域に格納される。
また処理手順S603で撮像枚数が2枚目以降だと判断されると処理手順S604に進む。処理手順S604では合成画像において、N−1枚目の画像領域を示すウィンドウWin-Aの画像データと撮像されたN枚目の画像データで手ぶれ検出処理が行われる。このとき手ぶれ検出には輝度信号成分のみを使用し、ウィンドウWin-Aから読み出される画像データは1/(N−1)倍に信号レベルが減少されて手ぶれ検出部9に入力される。次に処理手順S605では手ぶれ検出結果をもとにウィンドウWin-Aの座標が手ぶれ補正されるように手ぶれ方向とは逆の方向に座標が補正される。
この座標変更により処理手順S620では、図6及び図11に示した座標を用いて下記条件を満たした時、ウィンドウWin-Aは合成処理用フレームメモリ領域6−2よりも外にずれたと解釈する。
xs(N)<0、またはys(N)<0、またはxe(N)>n、またはye(N)>n・・・(o)
ウィンドウWin-Aが合成処理用フレームメモリ領域6−2よりも外にずれた時、処理手順S621に進む。処理手順S621では、xs(N)<0である時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より左方向にずれたと解釈し、処理手順S622に進む。処理手順S622では、図6及び図11に示した座標を用いて下記条件を満たした時、合成後のウィンドウWin-Bの水平サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
|xs(N)≦|Xe−n|
合成後のウィンドウWin-Bが、合成処理用フレームメモリ領域6−2よりも大きい時、処理手順S630に進む。また、合成後のウィンドウWin-Bの水平サイズが、合成処理用フレームメモリ領域6−2よりも小さい時、処理手順S625に進む。
また処理手順S621で、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より左方向にずれていない時、処理手順S623に進む。処理手順S623では、xe(N)>nである時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より右方向にずれたと解釈し、処理手順S624に進む。処理手順S624では、座標を用いて下記条件を満たした時合成後のウィンドウWin-Bの水平サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
Xs≧|xe(N)−n|
合成後のウィンドウWin-Bの水平サイズが、合成処理用フレームメモリ領域6−2よりも大きい時、処理手順S630に移る。
処理手順S625では、ys(N)<0である時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より上方向にずれたと解釈し、処理手順S626に移る。処理手順S626では、図6及び図11に示した座標を用いて下記条件を満たした時、合成後のウィンドウWin-Bの垂直サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
|ys(N)|≦|Ye−n|
合成後のウィンドウWin-Bが、合成処理用フレームメモリ領域6−2よりも大きい時、処理手順S630に移る。また、合成後のウィンドウWin-Bの垂直サイズが、合成処理用フレームメモリ領域6−2よりも小さい時、処理手順S629に移る。
また処理手順S625でウィンドウWin-Aが合成処理用フレームメモリ領域6−2より上方向にずれていない時、処理手順S627に進む。処理手順S627では、ye(N)>nである時、ウィンドウWin-Aが合成処理用フレームメモリ領域6−2より下方向にずれたと解釈し、処理手順S628に進む。処理手順S628では、座標を用いて下記条件を満たした時、合成後のウィンドウWin-Bの垂直サイズが合成処理用フレームメモリ領域6−2よりも小さいと解釈する。
Ys≧|ye(N)−n|
合成後のウィンドウWin-Bの垂直サイズが、合成処理用フレームメモリ領域6−2よりも大きい時、処理手順S630に移る。処理手順S630では、合成処理用フレームメモリ領域6−2とは異なる領域に第2の合成処理用フレームメモリ領域のアドレスを更新する。そして、ウィンドウWin-Aの位置を表す座標の初期化と第2の合成処理用フレームメモリ領域の全領域の値を0で初期化が行なわれ、処理手順S610に移る。
また、処理手順S629では、ウィンドウWin-Bの座標が、
xs(N)<0ならば、Xs=xs(N)+|xe−n|、Xe=n
xe(N)>nならば、Xs=0、Xe=xe(N)−xs(N)
ys(N)<0ならば、Ys=ys(N)+|ye−n|、Ye=n
ye(N)>nならば、Ys=0、Ye=ye(N)−ys(N)
が更新され、次の処理手順S608に移る。次に処理手順S608では、N枚目に撮像された画像データがウィンドウWin-Aの領域に合成される。この処理手順S608における合成方法については、実施形態1の図8のフローチャートと同一であるので説明は省略する。
処理手順S609では、ユーザが設定したNmaxに撮像枚数Nが達していれば処理を終了し、達してなければ処理手順S601へ戻り、それ以降の処理フローを繰り返す。以上のフローに従いより広範囲の手ぶれ検出を可能とし、更に合成処理用フレームメモリ領域に納まらない手ぶれが有っても、合成処理用フレームメモリ領域を複数生成する事により、リアルタイムに手ぶれ補正を継続する事が可能となる。
また、上記の実施形態4の説明において、合成処理用フレームメモリ領域に納まらない手ぶれが有った時に、合成処理用フレームメモリ領域を複数生成する構成とした。しかしながら、各合成処理用フレームメモリ領域から画像を抜き出し、画像データをフレームメモリ分生成する構成としても良い。また、複数の合成処理用フレームメモリ領域を合成し、複数の合成したフレームメモリから画像を抜き出し画像データを生成する構成としても良い。
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給しても達成可能である。すなわち、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性の半導体メモリカード、ROMなどを用いることができる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現される場合もある。しかし、さらにそのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれる場合もあり得る。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。