JP2007336121A - 画像処理装置、画像処理方法、撮像装置および撮像方法 - Google Patents

画像処理装置、画像処理方法、撮像装置および撮像方法 Download PDF

Info

Publication number
JP2007336121A
JP2007336121A JP2006164209A JP2006164209A JP2007336121A JP 2007336121 A JP2007336121 A JP 2007336121A JP 2006164209 A JP2006164209 A JP 2006164209A JP 2006164209 A JP2006164209 A JP 2006164209A JP 2007336121 A JP2007336121 A JP 2007336121A
Authority
JP
Japan
Prior art keywords
block
motion vector
vector
absolute value
difference absolute
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006164209A
Other languages
English (en)
Other versions
JP4178480B2 (ja
Inventor
Toru Kurata
徹 倉田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2006164209A priority Critical patent/JP4178480B2/ja
Priority to EP20070010921 priority patent/EP1868389A2/en
Priority to US11/757,134 priority patent/US7817185B2/en
Priority to KR20070057762A priority patent/KR20070119525A/ko
Priority to CN2007101086584A priority patent/CN101090456B/zh
Publication of JP2007336121A publication Critical patent/JP2007336121A/ja
Application granted granted Critical
Publication of JP4178480B2 publication Critical patent/JP4178480B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/68Control of cameras or camera modules for stable pick-up of the scene, e.g. compensating for camera body vibrations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/20Analysis of motion
    • G06T7/223Analysis of motion using block-matching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/527Global motion vector estimation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/533Motion estimation using multistep search, e.g. 2D-log search or one-at-a-time search [OTS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/537Motion estimation other than block-based
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/59Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial sub-sampling or interpolation, e.g. alteration of picture size or resolution
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/68Control of cameras or camera modules for stable pick-up of the scene, e.g. compensating for camera body vibrations
    • H04N23/681Motion detection
    • H04N23/6811Motion detection based on the image signal

Abstract

【課題】ブロックマッチングを用いて手ぶれを補正した画像を得る場合において、手ぶれの平行移動成分のみではなく、回転成分をも補正して、高精度の補正を実現する。
【解決手段】画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するに、元画面中の複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを複数個設定して、参照画面との間でブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出する。算出された複数のブロック毎動きベクトルから、元画面に対する参照画面の平行移動量と、元画面に対する参照画面の回転角を算出する。算出された平行移動量と、回転角とを用いて、複数枚の画面を重ね合わせて、手ぶれを補正した画像を得る。
【選択図】図1

Description

この発明は、例えば、デジタルスチルカメラやビデオカメラなどの撮像装置において撮像されて得られた画像情報に含まれるいわゆる手ぶれ成分を補正して、当該手ぶれの無い画像を得ることができるようにする画像処理装置、画像処理方法、撮像装置および撮像方法に関する。
一般に、デジタルスチルカメラやビデオカメラなどの撮像装置を手で持って構えて撮影をした場合、撮影時の手ぶれによる撮像装置の振動が、撮像画像の画面単位での振動となって現われる。
このような手ぶれによる撮像画像の振動を補正する方法として、昨今の市場においては、ジャイロセンサの低価格化、高性能化、小型化に伴い、ジャイロ(角速度)センサを用いた光学式の手ぶれ補正方式が主流を占めている。
しかし、ここ数年においては、デジタルスチルカメラの急速な普及と、それと機を同じくした急速な高画素化の流れが、新たな問題を生み始めている。それは、低照度(露光時間が長い)ときの静止画においても、手ぶれ補正が強く求められているものの、解がジャイロセンサ等のセンサを用いたものしか存在せず、ジャイロセンサ自体の検出精度の甘さなどのジャイロセンサの弱点やその他の問題が露呈しつつある点である。
現在市場に出回っている民生機における、静止画用途の手ぶれ補正は、全て、遍くジャイロセンサもしくは加速度センサを使って手ぶれベクトルを計測し、それを機構系にフィードバックして、CCD(Charge Coupled Device)イメージャやCMOS(Complementary Metal Oxide Semiconductor)イメージャなどのイメージセンサに射影される像が、ぶれを起こさないように高速に制御する、というものである。
ここでいう機構系としては、レンズ、プリズム、イメージャ(もしくはイメージャと一体化したモジュール)が提案されており、それぞれ、レンズシフト、プリズムシフト、イメージャシフトと呼ばれている。
このような方法で手ぶれ補正がなされている以上、先に挙げたジャイロセンサ自体の精度誤差に加え、機構系へのフィードバック遅延、もしくはフィードバック遅延を回避するための予測誤差、そして、機構系の制御誤差も重畳され、とてもピクセル精度で補正をかけることは不可能である。
以上に挙げたように、現状のセンサを使用した手ぶれ補正には、原理的に、精度を追求できない、という大きな問題があるにも関わらず、市場で高評価を得ているのは、手ぶれを補正できないまでも低減できるからである。
しかしながら、今後益々の高画素化が予想される中、ピクセルサイズが小さくなるに従って、補正限界がピクセル精度と益々開いて行かざるを得ない、という事実に市場が気付くのも時間の問題である。
一方、手ぶれによる撮像画像の振動を補正する方法の他の一つとして、撮像画像の画面単位の動きベクトルを算出し、この動きベクトルに基づいて、画像メモリに蓄えられている撮像画像データの読み出し位置をシフトして手ぶれ補正をするセンサレス手ぶれ補正方法が知られている。
撮像画像の画面単位の動きベクトルを撮像画像情報自身から検出する方法としては、2画面分の撮像画像間の相関を求めるブロックマッチングが知られている。このブロックマッチングを用いるセンサレス手ぶれ補正方法は、原理的に、ロール軸方向の回転成分を含んだピクセル精度の手ぶれベクトル検出が実現可能であり、また、ジャイロセンサなどの機械的な部品が不要なので、撮像装置の小型、軽量化を実現することができるという点でも有利である。
図71および図72は、ブロックマッチングの概要を図示したものである。また、図73には、その処理フローチャートの一般例を示す。
ブロックマッチングは、撮像装置部からの撮像画像について、注目画面である参照画面と、当該参照画面よりも前、例えば1画面分前の撮像画面である元画面との間の1画面分単位での動きベクトルを、所定の大きさの矩形領域のブロックについて、参照画面と元画面との相関を算出することにより算出する方法である。
なお、ここで画面とは、1フレームまたは1フィールドの画像データからなる画像を意味しているが、この明細書では、説明の便宜上、画面は1フレームからなるものとして、画面をフレームと称することとする。したがって、参照画面は参照フレーム、元画面は元フレーム(ターゲットフレーム)と称する。
例えば、参照フレームの画像データは、撮像装置部からの現フレームの画像データ、または現フレームの画像データがフレームメモリに格納されて1フレーム分遅延されたものとされる。元フレームの画像データは、参照フレームの画像データがさらにフレームメモリに格納されて1フレーム分遅延されたものとされる。
ブロックマッチングにおいては、図71に示すように、元フレーム101の任意の所定の位置において、水平方向の複数画素および垂直方向の複数ライン分からなる所定の大きさの矩形領域からなるターゲットブロック103が設定される。
これに対して、参照フレーム102において、元フレームのターゲットブロック103の位置と同じ位置に、ターゲットブロックの射影イメージブロック104(図71の点線参照)を想定し、このターゲットブロックの射影イメージブロック104を中心としたサーチ範囲105(図71の一点鎖線参照)を設定すると共に、ターゲットブロック103と同じ大きさの参照ブロック106を考える。
そして、この参照ブロック106の位置を参照フレーム102のサーチ範囲105内において移動させ、各位置において参照ブロック106に含まれる画像内容と、ターゲットブロック103の画像内容との相関を求め、最も相関が強いとして検出された参照ブロック106の位置を、元フレームのターゲットブロック103が、参照フレーム102において移動した位置として検出するようにする。そして、その検出した参照フレーム106の位置と、ターゲットブロックの位置との間の位置ずれ量を、方向成分を含む量としての動きベクトルとして検出するようにする。
この場合、参照ブロック106は、サーチ範囲105を、例えば水平方向および垂直方向に、1画素または複数画素単位で移動させるようにする。したがって、サーチ範囲105内には、複数個の参照ブロックが設定されることになる。
ここで、ターゲットブロック103と、サーチ範囲105内を移動する各参照ブロック16との相関は、ターゲットブロック103内の各画素の輝度値と、参照ブロック106内の対応する各画素の輝度値との差分の絶対値の、ブロック内の全画素についての総和(この差分の絶対値の総和を差分絶対値和と呼ぶ。以下、この差分絶対値和をSAD(Sum of Absolute Difference)値と記載することとする)を求めることにより検出する。すなわち、SAD値が最小となる位置の参照ブロック106が最も相関が強い参照ブロックとして検出され、その検出された参照ブロック106のターゲットブロック103の位置に対する位置ずれ量が動きベクトルとして検出される。
ブロックマッチングでは、サーチ範囲105内に設定される複数個の参照ブロック106のそれぞれの、ターゲットブロック103の位置に対する位置ずれ量は、方向成分を含む量としての参照ベクトル107(図71参照)で表現される。各参照ブロック106の参照ベクトル107は、参照ブロック106の参照フレーム102上の位置に応じた値となるが、従来のブロックマッチングでは、SAD値が最小値となる参照ブロック106の参照ベクトルを、ターゲットブロック103に対する動きベクトルとして検出するものである。
そこで、ブロックマッチングでは、一般に、図72に示すように、サーチ範囲105内において設定される複数個の参照ブロック106のそれぞれとターゲットブロック103との間におけるSAD値(以下、説明の簡単のため参照ブロックについてのSAD値という)を、サーチ範囲105内におけるそれぞれの参照ブロック106の位置に応じた参照ベクトル107のそれぞれに対応させて、メモリに記憶しておき、そのメモリに記憶された全ての参照ブロック106についてのSAD値の中から、最小のSAD値の参照ブロック106を検出することで、ターゲットブロック103に対する動きベクトル110を検出するようにしている。
サーチ範囲105内に設定された複数個の参照ブロック106の位置に応じた参照ベクトル107のそれぞれに対応させて、それぞれの参照ブロック106についてのSAD値を記憶したものを、差分絶対値和テーブル(以下SADテーブルという)と呼ぶ。図72のSADテーブル108が、これを示しており、このSADテーブル108において、それぞれの参照ブロック106についてのSAD値をSADテーブル要素109という。
なお、上述の説明において、ターゲットブロック103および参照ブロック106の位置とは、それらのブロックの任意の特定の位置、例えば中心位置を意味するものであり、参照ベクトル107は、参照フレーム102におけるターゲットブロック103の射影イメージブロック104の位置と、参照ブロック106の位置との間のずれ量(方向を含む)を示すものである。図71および図72の例では、ターゲットブロック103は、フレームの中心位置にあるとしている場合である。
そして、各参照ブロック106に対応する参照ベクトル107は、参照フレーム102上のターゲットブロック103に対応する位置に対する当該各参照ブロック106の位置ずれとなっているので、参照ブロック106の位置が特定されると、その位置に対応して参照ベクトルの値も特定される。したがって、SADテーブル108のメモリにおける参照ブロックのSADテーブル要素のアドレスが特定されると、対応する参照ベクトルは特定されることになる。
以上説明した従来のブロックマッチングの処理を、図73のフローチャートを参照して説明すると、次のようになる。
先ず、サーチ範囲105内の1つの参照ブロックIiを指定するが、これは、当該参照ブロックIiに対応する参照ベクトルを指定することに等しい(ステップS1)。ここで、図72において、(vx,vy)は、ターゲットブロックのフレーム上の位置を基準位置(0,0)としたときに、指定された参照ベクトルにより示される位置を示し、vxは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、vyは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。
ここでは、ずれ量vx、vyは、画素を単位とした値とされ、例えばvx=+1は、基準位置(0,0)に対して、水平方向の右方向に1画素分ずれた位置を示し、また、vx=−1は、基準位置(0,0)に対して、水平方向の左方向に1画素分ずれた位置を示している。また、例えばvy=+1は、基準位置(0,0)に対して、垂直方向の下方向に1画素分ずれた位置を示し、また、vy=−1は、基準位置(0,0)に対して、垂直方向の上方向に1画素分ずれた位置を示している。
以上のように、(vx、vy)は、参照ベクトルで示される基準位置に対する位置(以下、簡単のため、参照ベクトルで示される位置という)を示しており、参照ベクトルのそれぞれに対応している。つまり、vxおよびvyを整数としたとき、(vx、vy)は参照ベクトルのそれぞれを表すことになる。したがって、以下の説明においては、(vx、vy)の位置を示す参照ベクトルを、参照ベクトル(vx、vy)と記載することがある。
ここで、サーチ範囲の中心位置をターゲットブロックの位置、つまり前記基準位置(0,0)とし、サーチ範囲を、水平方向には±Rx、垂直方向には±Ryとしたとき、
−Rx≦vx≦+Rx、−Ry≦vy≦+Ry
とされるものである。
次に、ターゲットブロックIo内の1つの画素の座標(x,y)を指定する(ステップS2)。次に、ターゲットブロックIo内の指定された1つの座標(x,y)の画素値Io(x,y)と、参照ブロックIi内の対応する画素位置の画素値Ii(x+vx,y+vy)との差分の絶対値αを算出する(ステップS3)。すなわち、差分絶対値αは、
α=|Io(x,y)−Ii(x+vx,y+vy)| ・・・(式1)
として算出される。
そして、算出した差分絶対値αを、当該参照ブロックIiの参照ベクトル(vx,vy)が指し示すアドレス(テーブル要素)の、それまでのSAD値に加算し、その加算であるSAD値を、当該アドレスに書き戻すようにする(ステップS4)。すなわち、参照ベクトル(vx,vy)に対応するSAD値を、SAD(vx,vy)と表すと、
SAD(vx,vy)=Σα=Σ|Io(x,y)−Ii(x+vx,y+vy)|
・・・(式2)
として算出し、当該参照ベクトル(vx,vy)が指し示すアドレスに書き込むようにする。
次に、ターゲットブロックIo内の全ての座標(x,y)の画素について、上記の演算を行なったか否かを判別し(ステップS5)、ターゲットブロックIo内の全ての座標(x,y)の画素については、未だ、演算は終了していないと判別したときには、ステップS2に戻り、ターゲットブロックIo内の次の座標(x,y)の画素位置を指定し、このステップS2以降の処理を繰り返す。
また、ステップS5で、ターゲットブロックIo内の全ての座標(x,y)の画素について、上記の演算を行なったと判別したときには、当該参照ブロックについてのSAD値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル(vx,vy)についての上記の演算処理を完了したか否か判別する(ステップS6)。
ステップS6で、未だ、上記の演算処理を完了していない参照ベクトル(vx,vy)があると判別すると、ステップS1に戻り、上記の演算処理を完了していない次の参照ベクトル(vx,vy)を設定して、このステップS1以降の処理を繰り返す。
そして、ステップS6で、上記の演算処理を完了していない参照ベクトル(vx,vy)はサーチ範囲内になくなったと判別すると、SADテーブルが完成したとして、当該完成したSADテーブルにおいて、最小値となっているSAD値を検出する(ステップS7)。そして、当該最小値となっているSAD値のアドレスに対応する参照ベクトルを、ターゲットブロックIoに対する動きベクトルとして検出する(ステップS8)。ここで、SADの最小値をSAD(mx,my)と書き表すと、目的とする動きベクトルは、位置(mx,my)を示すベクトル(mx,my)として算出される。
以上で、1つのターゲットブロックに対するブロックマッチングによる動きベクトルの検出処理は、終了となる。
実際的には、一つのターゲットブロックについての動きベクトルでは、元フレームに対する参照フレームについての精度の良い手ぶれベクトルを得ることが困難である。そのため、元フレームにおいては、ターゲットブロックは、元フレームの全範囲をカバーするように、複数個が設定され、一方、参照フレームにおいては、図74に示すように、その複数個のターゲットブロックの射影イメージ104、104、・・・について、それぞれサーチ範囲105、105、・・・を設定して、それぞれのサーチ範囲について、対応するターゲットブロックに対する動きベクトル110、110、・・・の検出を行うようにする。
そして、検出された複数個の動きベクトル110、110、・・・から、元フレームに対する参照フレームについての手ぶれベクトル(グローバル動きベクトル)を検出するようにする。
この複数個の動きベクトル110から、手ぶれベクトル(グローバル動きベクトル)を検出する手法としては、複数の動きベクトルの多数決によるもの、すなわち、複数個の動きベクトル110で、向きおよび大きさが同等である動きベクトルの数が最も多い動きベクトルをグローバル動きベクトルとする手法が主として提案されている。また、この多数決による手法と、時間軸方向の動きベクトルの変化量(周波数)による信頼性評価との併用方法が提案されている。
従来技術としてのセンサレス手ぶれ補正は、特許文献1(特開2003-78807号公報)に代表されるように、その殆どが動画をターゲットとしている。また、センサレス手ぶれ補正を静止画で実現する手法としては、特許文献2(特開平7−283999号公報)を始め、幾つか提案はされている。この特許文献2は、手ぶれの発生しない程度の短い露光時間で何枚かの静止画を連写撮影し、その静止画間の手ぶれベクトルを求め、その手ぶれベクトルに従って、前記連射撮影した複数枚の静止画を移動させながら加算して行くことで、最終的に手ぶれと低照度ノイズの無い高画質(高解像度)の静止画を得る、というアルゴリズムである。
実現できるレベルの現実的な提案としては、特許文献3(特開2005−38396公報)を挙げることができる。この特許文献3に示されたものは、画像を縮小変換したサイズで動ベクトルを求める手段と、同一のSADテーブルを複数のブロックで共有する手段から構成される。画像の縮小変換と、SADテーブルの複数ブロックでの共有化は、SADテーブルサイズの削減を実現するための、非常に良い手法であり、MPEG(Moving Picture Experts Group)画像圧縮方式における動きベクトル検出やシーンチェンジ検出等、他分野でも使われている。
しかし、この特許文献3のアルゴリズムの問題点として、画像の縮小変換と、その際のメモリ(DRAM(Dynamic RAM(Random Access Memory)))アクセスに、時間とメモリ容量を消費することと、SADテーブルを複数ブロックで時分割アクセスする手法のため、メモリアクセスが非常に増加し、この処理にも時間を要してしまうという課題がある。動画の手ぶれ補正においては、リアルタイム性と同時にシステム遅延時間の短縮が求められるため、この処理時間の問題が課題となってしまうのである。
また、元画像を縮小変換する際には、エイリアシング(折り返し歪み)や、低照度ノイズ除去のためのローパスフィルタを、縮小処理の前処理として実装するが必要である。しかし、縮小倍率に応じて、ローパスフィルタの特性が変化する上、特に、垂直方向のローパスフィルタの場合、多タップのデジタルフィルタとした場合に、多くのラインメモリと演算ロジックを必要としなければならず、回路規模増加の問題が生じる。
上記の先行技術文献は、次の通りである。
特開2003−78807号公報 特開平7−283999号公報 特開2005−38396号公報
動画の手ぶれ補正システムにおいては、精度よりも処理時間を重視した、大まかな手ぶれベクトルのリアルタイム検出が求められており、従来技術によるセンサレス手ぶれ補正手法でも、殆どの状況において満足のいく結果が得られる。
一方、静止画の手ブレ補正システムにおける従来技術は、アイデアレベルの提案が多く、また、画素数が今日の1000万画素レベルを想定していないことが多い。そのため、手ぶれの回転成分まで考慮されていなかったり、考慮されていても、膨大な演算量が必要であったりする等、デジタルスチルカメラなどの現在のモバイル機器をターゲットとした、現実的配慮に欠けていた。
しかし、前述の通り、デジタルカメラなどの撮像装置では、今後益々高密度画素化が進み、高性能化が求められると予想されるが、このような状況においては、静止画の撮影時の手ぶれ補正を、ジャイロ(角速度)センサを用いないセンサレスで実現する意義は非常に大きい。
そこで、上述したように、ブロックマッチングを用いて、センサレスで、手ぶれ動きベクトルを算出し、その検出した動きベクトルを用いて手ぶれ補正を行なうことが有望であり、上述した課題の解決が重要である。
この発明は、以上の点にかんがみ、上述した従来のセンサレス手ぶれ補正方式の問題点を解決して、高画質の画像を得ることができる画像処理方法および装置を提供することを目的とする。
上記の課題を解決するために、請求項1の発明は、
画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角を算出する回転角算出手段と、
前記平行移動量算出手段で算出された平行移動量と、前記回転角算出手段で算出された回転角とを用いて、複数枚の画面を重ね合わせる回転・平行移動加算手段と、
を備える画像処理装置を提供する。
上述の構成の請求項1の発明による画像処理装置においては、ブロック毎動きベクトル算出手段で算出された複数のブロック毎動きベクトルから、元画面に対する参照画面の平行移動量と回転角とが算出される。そして、算出された平行移動量と回転角とを用いて、複数枚の画面を順次に重ね合わせる。この重ね合わされた結果の画像は、例えば撮像画像の場合であれば、手ぶれが除去された高画質の画像となる。
また、請求項2の発明は、請求項1に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満である前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
ことを特徴とする。
この請求項2の発明によれば、元画面に対する参照画面全体についてのグローバル動きベクトルが用いられて、複数のブロック毎動きベクトルのそれぞれが評価され、その評価値が高いブロック毎動きベクトルの数が予め定められた閾値未満であるような信頼性の低い参照画面は、回転・平行移動加算手段において重ね合わせ画面から排除される。
したがって、信頼性の高い参照画面のみが回転・平行移動加算手段において重ね合わされることになり、手ぶれの無い、より高画質の画像が得られると期待できる。
また、請求項3の発明は、請求項1に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記平行移動量算出手段および前記回転角算出手段においては、前記評価手段で付与された評価値が高い複数個の前記ブロック毎動きベクトルのみから前記平行移動量および前記回転角を算出する
ことを特徴とする。
この請求項3の発明によれば、ブロック毎動きベクトル算出手段で算出された複数のブロック毎動きベクトルのうちの信頼性の高いブロック毎動きベクトルのみが用いられて、平行移動量および回転角が算出されるので、精度の良い平行移動量および回転角が算出される。
したがって、回転・平行移動加算手段においては、この精度の良い平行移動量および回転角が用いられて参照画像の重ね合わせがなされ、手ぶれの無い、より高画質の画像が得られると期待できる。
また、請求項4の発明は、請求項2または請求項3に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記差分絶対値和算出手段で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成手段と、
前記差分絶対値和テーブルのそれぞれから前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記グローバル動きベクトル生成手段は、
前記複数の差分絶対値和テーブルのそれぞれの前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記グローバル動きベクトルを検出する手段と、
を備えることを特徴とする。
ブロック毎動きベクトル検出手段に関しては、参照画面のサーチ範囲内のそれぞれの参照ブロックと、元画面のターゲットブロックとの間の差分絶対値和(SAD値)を求め、この差分絶対値和から差分絶対値和テーブルを生成し、その差分絶対値和テーブルからブロック毎動きベクトルを算出するのは従来と同様である。
この発明においては、グローバル動きベクトル生成手段では、前記参照画面について求められた複数の差分絶対値和テーブルのそれぞれの差分絶対値和について、複数のサーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算し、合算差分絶対値和(合算SAD値という)を求める。これにより、一つのサーチ範囲内の複数参照ブロック位置分の合算SAD値が求められ、それらの合算SAD値を記憶する合算差分絶対値和テーブルが生成される。そして、この合算SADテーブルから、元画面に対する参照画面のグローバル動きベクトルが検出される。
従来は、元画面に設定された複数個のターゲットブロックのそれぞれについて、動きベクトル(ターゲットブロック毎動きベクトル)を求め、その求められた複数個の動きベクトルについての例えば多数決によりグローバル動きベクトルを算出するようにしていたが、これとは異なり、この発明における合算SAD値からなる合算SADテーブルは、フレーム全体をまとめてブロックマッチングした結果と等価になる。
このため、この合算SADテーブルから求められたグローバル動きベクトルは、従来よりも高精度のグローバル動きベクトルとなる。
また、請求項5の発明は、請求項1に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記縮小差分絶対値和テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、
前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
を備えることを特徴とする。
この請求項5の発明においても、上述の請求項1と同様に、参照画面のサーチ範囲内のそれぞれの参照ブロックと、元画面のターゲットブロックとの間のSAD値を、SAD算出手段で求めるのは従来と同様である。
この発明においては、求めた参照ブロックのSAD値を、その参照ブロックの参照ベクトルに対応して記憶するのではなく、その参照ベクトルを縮小した参照縮小ベクトルに対応して記憶する縮小差分絶対値和テーブル生成手段を備える。
この場合に、参照縮小ベクトルは、参照ブロックのそれぞれが対応する参照ベクトルとは一致していないので、縮小差分絶対値和テーブル生成手段は、先ず、参照縮小ベクトルの近傍の複数個の参照ベクトルを検出する。そして、それら近傍の複数の参照ベクトルのそれぞれに対応するSAD値を、SAD算出手段で算出したSAD値から算出する。
そして、算出した近傍の複数の参照ベクトルのそれぞれに対応するSAD値を、それまでの当該近傍の複数の参照ベクトルのそれぞれに対応するSAD値に加算する。
こうして得られたSADテーブルは、参照縮小ベクトルのそれぞれの近傍の複数個の参照ベクトルのみについてのSAD値のテーブルとなっており、参照ベクトルの縮小率に応じて縮小されたものとなっている。
つまり、換言すると、生成されたSAD値のテーブルは、参照ベクトルの縮小率に応じて縮小されたフレーム画像についてのSADテーブルに対応する。この場合において、ターゲットブロックおよび参照ブロックの大きさは縮小されていないので、生成されたSADテーブル(縮小差分絶対値和テーブル)のサイズは、小さくなる。
請求項5の発明においては、このような縮小差分絶対値和テーブルが、複数個のターゲットブロックのそれぞれについて求められる。そして、求められた複数のターゲットブロックの縮小差分絶対値和テーブルのそれぞれからブロック毎動きベクトルが算出される。
そして、この請求項5の発明においては、縮小SADテーブルは、上述したように、従来のブロックマッチングにおけるSADテーブルよりも容量の小さいものとなり、実現が現実的なものとなる。
この発明においては、ブロック毎動きベクトル算出手段で算出された参照画面についての複数のブロック毎動きベクトルから、元画面に対する参照画面の平行移動量と回転角とが算出され、その算出された平行移動量と回転角とが用いられて、複数枚の画面が順次に重ね合わせられる。この重ね合わされた結果の画像として、例えば撮像画像の場合であれば、手ぶれが除去された高画質の画像が得られる。
以下、この発明による画像処理方法および画像処理装置の実施形態を、撮像装置および撮像方法に適用した場合を例にとって、図を参照しながら説明する。
[この発明による画像処理方法の実施形態の概要]
以下に説明する実施形態は、主として静止画の手ぶれ補正システムに、この発明を適用した場合である。
この実施形態においては、入力画像フレームを参照フレームとして、この入力画像フレームと、入力画像フレームよりも前の元フレーム、例えば1フレーム遅延させた元フレームとの間で動きベクトル検出を行なう。そして、この実施形態における静止画についての手ぶれ補正は、連続的に撮影した複数枚の画像、例えば3fpsの画像を、手ぶれ補正を行いながら重ね合わせることにより行なう。
このように、この実施形態においては、撮影した静止画の手ぶれ補正を、連写した複数の画像について手ぶれ補正をかけながら重ね合わせて行くため、ピクセル精度(1画素精度)に近い精度が求められる。そして、この実施形態においては、手ぶれ動きベクトルとしてのフレーム間の水平方向および垂直方向の平行移動成分と同時に、フレーム間の回転成分も検出し、フレームの平行移動と共に回転移動させて、複数フレームを重ね合わせるようにする。
なお、以下に説明する実施形態は、静止画用に限定されるわけではなく、本質的には動画にも適用可能である。動画の場合には、リアルタイム性のため、後述する加算枚数(重ね合わせるフレーム数)に上限はあるが、フレーム毎にこの実施形態の手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現できる。
以下に説明する実施形態においても、上述したブロックマッチングを用いて、2フレーム間の動きベクトルを算出するに当たって、前述したように、元フレームについて、複数個のターゲットフレームを設定して、その複数個のターゲットフレームのそれぞれについてブロックマッチングを施す。
以下に説明する実施形態においては、元フレームに、例えば16個のターゲットブロックTGi(i=0,1,2,・・・,15)を設定し、参照フレーム102には、図2に示すように、元フレームの16個のターゲットブロックTGiに対応する16個の射影イメージ104i(i=0,1,2,・・・,15)を設定する。そして、それぞれの射影イメージに対するサーチ範囲105i(i=0,1,2,・・・,15)を設定し、それぞれのサーチ範囲105i(i=0,1,2,・・・,15)において、対応するターゲットブロックについてのSADテーブルTBLi(i=0,1,2,・・・,15)を作成する。
そして、この実施形態では、作成されたSADテーブルTBLiのそれぞれから、各ターゲットブロックについての動きベクトル、すなわち、ブロック毎動きベクトルBLK_Viを検出する。
そして、基本的には、これらの複数個のブロック毎動きベクトルBLK_Viから、元フレームに対する参照フレームの平行移動成分を算出すると共に、回転角を算出し、その算出した平行移動成分および回転角を用いて、参照フレームを元フレームに重ね合わせるようにする。元フレームが、1フレーム毎に順次に次のフレームに更新される場合には、以上の処理を繰り返して、順次にフレームを重ね合わせることにより、手ぶれの除去された高品質の画像が得られることになる。
この場合において、2枚以上の複数枚のフレームを重ね合わせる際には、実際には、図3に示すように、1枚目を基準として、以降のフレームを重ね合わせることになる。このため、2枚目以降の、重ね合わせるフレームについての1フレーム前のフレームとの間の平行移動量と回転角とは、順次に積算されて、1枚目のフレームに対する平行移動量および回転角とされる。
[平行移動量および回転角度の算出方法の第1の例]
ブロックマッチング(ブロックマッチングを、この明細書では検波と呼ぶことにする)を用いて元フレームと参照フレームとの間の平行移動量および回転角度を求める方法の一つは、元フレームに対する参照フレーム全体としてのグローバル動きベクトルから求める方法である。すなわち、グローバル動きベクトルは、前のフレームに対する当該フレームの動きであるので、そのまま平行移動量とすることができる。
すなわち、グローバル動きベクトルの水平方向(x方向)の成分が水平方向の平行移動量であり、また、グローバル動きベクトルの垂直方向(y方向)の成分が垂直方向の平行移動量である。
また、前のフレームについて求められたグローバル動きベクトルに対する、今回の注目フレーム(参照フレーム)について求められたグローバル動きベクトルの相対的な回転角度は、今回の注目フレームの前のフレームに対する相対的な回転角度となる。
この場合におけるグローバル動きベクトルの算出方法としては、従来のブロックマッチングの場合と同様に、16個のターゲットブロックについて検出されたブロック毎動きブロックBLK_Viについて多数決を取り、多数決トップ(大きさおよび方向が同一または同等であるブロック毎動きベクトルの数が最大)のブロック毎動きベクトルを、グローバル動きベクトルとして算出する方法を採用することができる。
しかし、この多数決トップのブロック毎動きベクトルをグローバル動きベクトルとする場合には、被写体が動画の場合であって、当該動画撮影中の被写体が、例えば、細かい波面のある水面や木や草が風になびく情景などのときには、誤ったグローバル動きベクトル(手ぶれベクトル)を検出してしまう場合が多いという問題がある。最近のデジタルカメラにおいては、静止画のみでなく、動画を撮像記録の対象とするものも多いので、多数決方式によりグローバル動きベクトルを算出する方法は、実装上は、好ましくない。
そこで、この実施形態では、次に説明するような合算SAD値を用いる合算SADテーブルから、グローバル動きベクトルを算出するようにする。
すなわち、この実施形態では、前述のようにして作成した16個のターゲットブロックについてのSADテーブルTBLiについて、図2に示すように、16個のSADテーブルTBLiを重ね合わせるように縦方向に並べたときに、SADテーブルTBLiのそれぞれを求めるサーチ範囲内で互いに対応する参照ブロック位置のSAD値を合算し、合算差分絶対値和(合算SAD値という)を求める。そして、その合算SAD値からなるSADテーブルとして、一つのサーチ範囲内の複数参照ブロック位置分についての合算SADテーブルSUM_TBLを生成する。
ここで、合算SADテーブルSUM_TBLの座標位置(x,y)の合算SAD値SUM_TBL(x,y)は、各SADテーブルTBLiの対応する座標位置(x,y)のSAD値をTBLi(x,y)とすると、
SUM_TBL(x,y)=TBL1(x,y)+TBL2(x,y)+・・・
+TBL16(x,y)
=ΣTBLi(x,y)
となる(図4の(式3)参照)。
そして、この実施形態では、合算SADテーブルSUM_TBLから、元画面に対する参照画面の動きベクトル(グローバル動きベクトル;撮像装置における手ぶれベクトルとなる)を検出する。
合算SADテーブルSUM_TBLからグローバル動きベクトルを算出する方法としては、合算SADテーブルSUM_TBLにおいて合算SAD値の最小値の位置を検出し、その検出した合算SAD値の最小値位置に対応する参照ベクトルを、グローバル動きベクトルとして検出する従来の方法を用いることができる。
しかし、この最小値の合算SAD値を用いる方法では、1画素単位の精度の動きベクトルしか得られないので、この実施形態では、合算SAD値の最小値位置の合算SAD値およびその近傍の複数個の合算SAD値を用いて、近似曲面補間を行うことで、グローバル動きベクトルを算出する。すなわち、合算SAD値の最小値位置の合算SAD値およびその近傍の複数個の合算SAD値を用いて、近似高次曲面を生成し、その近似高次曲面の極小値位置を検出することで、1画素単位以下の小数点精度で、グローバル動きベクトルを算出することができるようにしている。この近似曲面補間処理については、後で詳細に説明する。
こうして合算SADテーブルから求められるグローバル動きベクトルは、合算SAD値からなる合算SADテーブルが、フレーム全体をまとめてブロックマッチングした結果と等価になるため、多数決方式が苦手とする前述したような動画の被写体の場合にも、誤りの少ないグローバル動きベクトルが得られる。
そこで、この合算SADテーブルから求められるグローバル動きベクトルから、元フレームに対する平行移動量と回転角を求めて、上述のようなフレームの重ね合わせをすることができる。
なお、このときに求めるグローバル動きベクトルとしては、合算SADテーブルから求める合算動きベクトルに限られるものではなく、例えば多数決方式により多数決トップのブロック毎動きベクトルをグローバル動きベクトルとするようにしてもよいが、上述のような理由で合算動きベクトルが好ましい。
[平行移動量および回転角度の算出方法の第2の例]
平行移動量および回転角度を算出する方法としては、グローバル動きベクトルを算出し、その算出したグローバル動きベクトルを用いて平行移動量や回転角度を算出するのではなく、参照フレームについて算出される複数個のブロック毎動きベクトルからフレームについての平行移動量および回転角を求める方法を採用することもできる。
フレームの平行移動量は、原理的には、16個のブロック毎動きベクトルの水平方向および垂直方向の移動量の平均値として求める。ここで、複数のターゲットブロックに対応する複数の射影イメージに関するサーチ範囲を検波枠と称することとしたとき、この検波枠番号i(=0,1,2,・・・,15)は、一つの参照フレーム上において、図5のように付与することができる。
そして、検波枠番号iのブロック毎動きベクトルの水平方向成分をVxi、垂直方向成分をVyiとして、そのブロック毎動きベクトルを(Vxi、Vyi)と表すとすると、水平方向(x方向)の平行移動量α、および垂直方向(y方向)の平行移動量βは、図6の(式4)および(式5)に示すように、16個のブロック毎動きベクトルの水平方向成分および垂直方向成分の平均値とすることができる。
また、フレームの回転角γは、原理的には、16個のブロック毎動きベクトルを用いて次のようにして求めることができる。
すなわち、まず、図5と同様に図7(A)に示すように一つの参照フレームについての検波枠番号を定義する。このとき、図7(A)に示すように、一つの検波枠のサイズを、横(水平方向)2a、縦(垂直方向)2bとする。ここで、
a=(1参照ブロックの水平画素数)+(隣接参照ブロックとの水平間隔(画素数))
b=(1参照ブロックの垂直画素数)+(隣接参照ブロックとの垂直間隔(画素数))
である。
次に、検波枠番号0〜15のすべての検波枠の中心Ocを原点として、図7(B)に示すように、座標系を取る。そして、検波枠番号iに対応する値Pxiおよび値Pyiを、図7(C)および(D)に示すように定義する。この値Pxiおよび値Pyiは、すべての検波枠の中心Ocからの各検波枠の中心までの水平方向(x方向)および垂直方向(y方向)の距離の重みを表している。
この値Pxiおよび値Pyiを用いると、各検波枠番号iの検波枠の中心座標は、(Pxi・a,Pyi・b)で表すことができる。
したがって、フレームについての平行移動量を(α,β)、回転角度をγとすると、検波枠番号iの理論的なブロック毎動きベクトルWiは、図8(A)に示す(式6)に示すようなものとすることができる。
なお、複数の被験者による手ぶれによる回転角度γを測定したところ、例えば3fpsの場合には、
γ[rad]=arctan1/64=0.0156237...
程度であり、cosγ≒1、sinγ≒γであるとすることができるので、(式6)のように表すことができる。
実際に検出された検波枠番号iのブロック毎動きベクトルBLK_Viを、Viと略記すると、理論的なブロック毎動きベクトルWiと実際に検出されたブロック毎動きベクトルViとの間のエラーεiは、図8(B)の(式7)のようになるので、それを回転角度γで偏微分すると、図8(C)の(式8)のようになる。
なお、図8において、「δF(γ)/δγ」は、関数F(γ)に関する回転角度γについての偏微分を意味している。
参照フレームについて実際に検出されたブロック毎動きベクトルが実際の回転角度γを正しく含んでいるとすれば、参照フレームの複数個のすべてのブロック毎動きベクトルViについてのエラーの総和Σεiの回転角度γによる偏微分の値は、ゼロとなるはずであるので、回転角度γは、図8(D)の(式9)のようになる。
したがって、求めるべき参照フレームについて回転角度γは、図8(E)に示す(式10)から求めることができる。
[より高精度の平行移動量および回転角度の算出方法の例]
ところで、静止画の場合には、このグローバル動きベクトルや複数個のブロック毎動きベクトルから求められた平行移動量や回転角度を用いたとしても、精度が足りないおそれがある。
そこで、この実施形態では、この点にかんがみ、さらに、より高精度で平行移動量や回転角度を算出し、その高精度の平行移動量および回転角度を用いてフレーム画像の重ね合わせができるように考慮している。
前述もしたように、動被写体などのために、一つの参照フレームについて求められた複数のブロック毎動きベクトルのすべてが、手ぶれベクトルの検出という観点からは信頼性の高いものとなっているわけではない。
そこで、この実施形態では、一つの参照フレームについて求められた複数のブロック毎動きベクトルについて、次のようにして信頼性の判定を行い、信頼性が高いと判定されたブロック毎動きベクトルのみを用いて平行移動量および回転角度の算出を行うことにより、算出される平行移動量および回転角度の精度を向上させるようにしている。
すなわち、この実施形態では、手ぶれによる画面全体の動きベクトルではない動被写体による動きベクトル成分を、できるだけ排除することにより、より精度の高い平行移動量および回転角度の算出ができるようにしている。
そのために、この実施形態では、当該参照フレームについて算出したグローバル動きベクトル、この例では合算SADテーブルから求めたグローバル動きベクトル(以下、これを合算動きベクトルという)SUM_Vと、各ターゲットブロックについてのSADテーブルTBLi(i=0,1,2,・・・,15)から求められたブロック毎動きベクトルBLK_Viとを比較して、両者が同一または近似している信頼性が高いブロック毎動きベクトルを探す。
信頼性の高いブロック毎動きベクトルの数が少なく、予め定めた閾値未満であるときには、この実施形態では、当該フレームは重ね合わせるフレームとは用いないと決定して、この実施形態における静止画処理を、当該フレームについてはスキップして、次のフレームの処理に移行する。
信頼性の高いブロック毎動きベクトルの数が、前記閾値以上であるときには、当該信頼性の高いブロック毎動きベクトルが算出されたターゲットブロックについてのSADテーブルから、後述するような1画素未満の精度の高精度ブロック毎動きベクトルの算出を行う。そして、算出した高精度ブロック毎動きベクトルのみを用いて、前述した平行移動量の算出および回転角度の検出を行う。
この場合において、平行移動量の算出の際には、上述の第1の例および第2の例を用いることができる。
例えば上述の第2の例を用いる場合においては、図5に示す16個の検波枠のうちの、信頼性の高い検波枠番号iの検波枠のみについて求められた高精度ブロック毎動きベクトルを用いて平行移動量を算出するのである。ただし、この実施形態では、平行移動量の算出に当たっては、信頼性が低く平行移動量の算出から除外された検波枠番号qの検波枠のみではなく、当該除外された検波枠番号qに対して、すべての検波枠の中心Ocに対して点対称の位置にある検波枠番号(15−q)の検波枠のブロック毎動きベクトルも、平行移動量の算出対象から除外する。
これは、この実施形態では、フレームの回転を考慮しているため、中心Ocに対して点対称の位置にある一方の検波枠のブロック毎動きベクトルの信頼性が低いとして、それを平行移動量の演算対象から除外したときには、点対称の位置にある他方のブロック毎動きベクトルをも平行移動量の演算対象から除外しないと、平行移動量の算出結果に誤差が生じてしまうことになるからである。
これに対して、回転角度の演算時には、信頼性が低いとされた検波枠のブロック毎動きベクトルのみを、回転角度の演算対象から除外するだけで、その除外した検波枠と点対称の位置にある検波枠の高精度ブロック毎動きベクトルは、回転角度の演算対象に含めるようにする。
以上のようにして、信頼性の高い検波枠のみを用いてフレームの平行移動量および回転角度を算出することにより、高精度で平行移動量および回転角度を算出することができると期待できる。
以上説明したフレーム単位の信頼性の判定、つまり、フレーム内複数ブロック毎動きベクトルの信頼性の判定は、次のようにして行う。
まず、元フレームに設定された複数個、この例では16個のターゲットブロックTGi(i=0,1,2,・・・,15)のそれぞれに対するSADテーブルTBLiを求め、その最小SAD値MINiの座標位置からブロック毎動きベクトルBLK_Vi(図9(A)参照)を求める。次に、前述した(式3)にしたがって、16個のSADテーブルTBLiから合算SADテーブルSUM_TBLを求め、その最小SAD値MINsの座標位置から合算動きベクトルSUM_V(図9(B)参照)を求める。
次に、この実施形態においては、合算動きベクトルSUM_V、すなわち、合算SADテーブルSUM_TBLの最小SAD値MINsの座標位置を基準に、16個のターゲットブロックのそれぞれの動きベクトルBLK_Vi(すなわち、合算SADテーブルSUM_TBLの最小SAD値MINsの座標位置)と、それぞれのSAD値とから、当該16個のターゲットブロックのそれぞれについて、図10に示すような条件の判定を行い、図10に示すようなラベル付けおよびスコア(評価点)の算出を行う。
図11に、このラベル付けおよびスコア算出の処理の一例のフローチャートを示す。この図11の処理は、1枚の参照フレームについての処理であり、この図11の処理が1フレーム毎に繰り返されるものである。
まず、ラベル付けおよびスコアの算出を行う対象ターゲットブロックについて求められた動きベクトルBLK_Viと、合算動きベクトルSUM_Vとが等しいかどうかを第1の条件とする判定をする(ステップS11)。これは、対象ターゲットブロックのSADテーブルTBLiの最小SAD値MINiの座標位置と、合算SADテーブルSUM_TBLの最小SAD値MINsの座標位置が等しいか否かを条件判定することに等しい。
対象ターゲットブロックについて、この第1の条件に合致すると判定されると、当該対象ターゲットブロックについは「TOP」というラベルが付与され、この例では最大のスコア値として「4」が割り当てられる(ステップS12)。
対象ターゲットブロックについて、第1の条件には合致しないと判定されると、第2の条件に合致するかどうかの判定をする(ステップS13)。この第2の条件は、対象ターゲットブロックについて求められた動きベクトルBLK_Viと、合算動きベクトルSUM_Vとが同一ではないが、SADテーブル上で最も隣接するものとなっているかどうかであり、具体的には、対象ターゲットブロックのSADテーブルTBLiの最小SAD値MINiの座標位置と、合算SADテーブルSUM_TBLの最小SAD値MINsの座標位置が、上下、左右、斜めの方向に1座標値だけ異なる隣接するものであるかどうかである。
対象ターゲットブロックについて、この第2の条件に合致すると判定されると、当該対象ターゲットブロックについは「NEXT_TOP」というラベルが付与され、この例ではスコア値として「2」が割り当てられる(ステップS14)。
対象ターゲットブロックについて、第2の条件には合致しないと判定されると、第3の条件に合致するかどうかの判定をする(ステップS15)。この第3の条件は、対象ターゲットブロックのSADテーブルにおいて、動きベクトルBLK_Viとなる座標位置のSAD値(最小SAD値MINi)と、合算動きベクトルSUM_Vとなる合算SADテーブル上の座標位置(最小SAD値MINsの座標位置)に対応する座標位置のSAD値との差が、所定の閾値以下であるかどうかである。ここで、所定の閾値は、1画素あたりに換算したときの閾値とすることが望ましい。これは、この実施形態では、1画素精度の手ぶれ補正を想定しているためである。
対象ターゲットブロックについて、この第3の条件に合致すると判定されると、当該対象ターゲットブロックについは「NEAR_TOP」というラベルが付与され、この例ではスコア値として「1」が割り当てられる(ステップS16)。
対象ターゲットブロックについて、第3の条件には合致しないと判定されると、当該対象ターゲットブロックについは「OTHERS」というラベルが付与され、この例ではスコア値として「0」が割り当てられる(ステップS17)。
ステップS12、ステップS14、ステップS16およびステップS17のラベル付けおよびスコアの割り当てが終了した後には、割り当てられたスコアを累積加算して、合計スコアsum_scoreを算出する(ステップS18)。
次に、1フレーム内の16個のすべてのターゲットブロックについて上記の処理が終了したか否かを判別し(ステップS19)、終了していなければ、次のターゲットブロックのラベル付けおよびスコア算出を指示し(ステップS20)、その後、ステップS11に戻って、上述した処理を繰り返す。
1フレーム内の16個のすべてのターゲットブロックについて上記の処理が終了したと判別したときには、この1フレーム内の16個のターゲットブロックについてラベル付けおよびスコア算出の処理ルーチンを終了する。このときにステップS18で算出されている合計スコアsum_scoreは、16個のターゲットブロックのすべてのスコアの合計となっている。
なお、図11のフローチャートは一例であり、第1の条件、第2の条件および第3の条件の合致判定は、順序不動であり、いずれを先に行ってもよい。
以上のような1フレーム内の16個のターゲットブロックについてラベル付けおよびスコア算出の処理ルーチンが終了したら、算出した合計スコアsum_scoreと、信頼性についての閾値とを比較する。このとき、合計スコアsum_scoreが閾値よりも小さいときには、当該フレームで求められる動きベクトルは、グローバル動きベクトルの検出のためには信頼性が低いと判定することができる。
あるいは、第1の条件および第2の条件を満足するため信頼性が高いとして付与された、ラベルが「TOP」および「NEXT_TOP」のターゲットブロックのブロック毎動きベクトルの数を算出し、その数が、予め定められた閾値数未満であるときに、当該フレームで求められる動きベクトルは、グローバル動きベクトルの検出のためには信頼性が低いと判定するようにしてもよい。
合計スコアsum_scoreが閾値以上であること、あるいはラベルが「TOP」および「NEXT_TOP」のターゲットブロックのブロック毎動きベクトルの数が予め定められた閾値数以上であることは、当該フレームで求められるグローバル動きベクトルの検出は、一応の信頼性が得られると判定できることになる。
したがって、合計スコアsum_scoreが閾値以上であると判定されたとき、または、ラベルが「TOP」および「NEXT_TOP」のターゲットブロックのブロック毎動きベクトルの数が予め定められた閾値数以上であるときには、高い第1の条件および第2の条件を満足する信頼性の高いターゲットブロック(ラベル「TOP」およびラベル「NEXT_TOP」)のSADテーブルのSAD値のみを用いて合算SADテーブルを再度生成して、その再度生成した合算SADテーブルに基づいてグローバル動きベクトルとしての合算動きベクトルを再度算出し、その再算出した合算動きベクトルからフレームの平行移動量および回転角度を算出するようにすることができる。
このときに求めるグローバル動きベクトルとしては、合算SADテーブルから求める合算動きベクトルに限られるものではなく、例えば信頼性の高いブロック毎動きベクトルについて多数決をとることにより得られるものであっても良い。
また、上述したように、グローバル動きベクトルから平行移動量および回転角を算出するのではなく、信頼性の高いラベル「TOP」およびラベル「NEXT_TOP」のブロック毎動きベクトルのみを用いて、図6〜図8を用いて説明した(式4)〜(式10)に基づいて、平行移動量(α,β)および回転角度γを求めることができる。
上述もしたように、この実施形態では、信頼性の高いラベル「TOP」およびラベル「NEXT_TOP」のブロック毎動きベクトルのみを用いて平行移動量(α,β)および回転角度γを算出する方法を採用する。
しかし、この実施形態では、より高い信頼性を得るために、さらに次のような処理を施すようにする。
すなわち、この実施形態では、各ターゲットブロックに対するサーチ範囲を、徐々に絞り込んで、ブロックマッチング処理(ここでは、参照フレーム全体についてのブロックマッチングを検波と呼ぶことにする)を複数段階行うようにする。以下の実施形態では、ブロックマッチング(検波)は、2段階で行う。
そして、図12(A)に示すように、各ターゲットブロックTGi毎の1回目のサーチ範囲SR_1は最大にして、上述のような複数個のブロック毎動きベクトルBLK_Viを求める。そして、1回目の検波が終了して複数個のターゲットブロックについてのブロック毎動きベクトルを算出したら、それらの複数個のブロック毎動きベクトルを評価して、評価値の高いブロック毎動きベクトルを探索し、その評価値の高いブロック毎動きベクトルのみを用いて、前述した(式4)および(式5)を実行し、1回目の平行移動量(α,β)を求める。そして、この1回目の平行移動量から、各ターゲットブロックについての2回目のサーチ範囲を定める。
あるいは、評価値の高いブロックのみからグローバル動きベクトル(手ぶれベクトル)を算出し、そのグローバル動きベクトルから1回目の平行移動量を算出し、その1回目の平行移動量から、各ターゲットブロックについての2回目のサーチ範囲を定めるようにしてもよい。
図12(A)に示すように、1回目の処理で設定されたサーチ範囲SR_1において、各ターゲットブロックTGiについての動きベクトルBLK_Viが算出され、それら複数個のブロック毎動きベクトルから平行移動量が算出され、あるいはグローバル動きベクトルから平行移動量が算出されると、その算出された平行移動量から、参照フレームと元フレームとの間で、相関のあるブロック範囲がおおよそ検出できる。
そこで、各ターゲットブロックについての2回目の検波処理のサーチ範囲SR_2としては、図12(B)に示すように、その相関のあるブロック範囲を中心とした、1回目よりも狭い範囲に絞ったサーチ範囲を設定することができる。この場合、図12(B)に示すように、1回目のサーチ範囲SR_1の中心位置POi_1と、2回目のサーチ範囲SR_2の中心位置POi_2との間の位置ずれ(サーチ範囲オフセット)が、1回目で検出された平行移動量(グローバル動きベクトルに対応)に相当している。
このように、各ターゲットブロックに対して、絞り込んだサーチ範囲SR_2として検波処理をすることにより、2回目の検波の結果は、1段階検波処理よりも高精度のブロックマッチング結果が得られる。
そこで、この実施形態では、この2回目の検波で得られたブロック毎動きベクトルのうちで、高評価のブロック毎動きベクトルを用いて、上述のようにして、フレームについての平行移動量および回転角度の算出を行うことにより、高精度の平行移動量および回転角度を得ることができる。
ところで、この実施形態で用いる合算SADテーブルは、ブロック毎のSADテーブルではなく、フレーム全体をまとめてブロックマッチングした結果とほぼ等価である。通常の被写体においては、従来技術で説明した多数決により勝ち残った動きベクトル、つまり多数決トップの動きベクトルと、合算SADテーブルから求められる合算動きベクトルは、等しいものとなる。しかし、複数枚のフレームを重ね合わせる場合において、他人がフラッシュを炊いたりしてフレーム全体が明滅する場合や水面の波面等の被写体の場合、多数決の結果は、信頼性が低く、ランダムに近い動きベクトルとなるのに対し、合算動きベクトルは、比較的正解に近い結果を導き出す可能性が高い。
したがって、合算SADテーブルから求めた合算動きベクトルと、多数決により決定したグローバル動きベクトルという、両者の結果を比較することにより、少なくとも、現在のフレームの結果の信頼性を、定量的に判定することが可能となる。従来提案では、各ブロックの動きベクトルの信頼性を判定することに主眼が置かれていたが、この実施形態では、フレーム全体の信頼性を重視し、疑わしきは重ね合わせ対象から除外する、という方針のもと、違和感の少ない、安定した手ぶれ補正システムを実現する点が特徴である。
この点を考慮して、この実施形態の一つの方法では、従来のブロックマッチングの場合と同様に、16個のターゲットブロックについて検出されたブロック毎動きブロックBLK_Viについて多数決を取り、多数決トップ(大きさおよび方向が同一または同等であるブロック毎動きベクトルの数が最大)の動きベクトルを算出する。
そして、この検出した多数決トップの動きベクトルを、図10における合算動きベクトルに代わる基準として用いて、16個のターゲットブロックについて検出されたブロック毎動きブロックBLK_Viと、それぞれのSAD値とから、図10に示したようなラベル付けおよびスコア割り当てを行う。
これは、図10において、合算動きベクトルSUM_Vに代えて、多数決トップの動きベクトルが用いられることに等しい。
すなわち、第1の条件は、ラベル付けおよびスコアの算出を行う対象ターゲットブロックについて求められた動きベクトルBLK_Viと、多数決トップの動きベクトルとが等しいかどうかである。つまり、対象ターゲットブロックのSADテーブルTBLiの最小SAD値MINiの座標位置と、多数決トップの動きベクトルとなる座標位置とが等しいか否かを条件判定するものである。
また、第2の条件は、対象ターゲットブロックについて求められた動きベクトルBLK_Viと、多数決トップの動きベクトルとが同一ではないが、SADテーブル上で最も隣接するものとなっているかどうかであり、具体的には、対象ターゲットブロックのSADテーブルTBLiの最小SAD値MINiの座標位置と、多数決トップの動きベクトルに対応する座標位置とが、上下、左右、斜めの方向に1座標値だけ異なる隣接するものであるかどうかである。
また、第3の条件は、対象ターゲットブロックのSADテーブルにおいて、動きベクトルBLK_Viとなる座標位置のSAD値(最小SAD値MINi)と、多数決トップの動きベクトルに対応するSADテーブル上の座標位置のSAD値との差が、所定の閾値以下であるかどうかである。
以上のようにして、1フレームについての16個のターゲットブロックについての動きベクトルについて、その多数決トップの動きベクトルを基準にしたラベル付けおよびスコア割り当てを行う。そして、割り当てられたスコアの合計スコアmany_scoreを算出する。
そして、この実施形態では、合算動きベクトルSUM_Vに対応する最小SAD値の座標位置と、多数決トップの動きベクトルに対応するSAD値の座標位置との差が所定以内、例えば前記差が1隣接画素以内であって、前記合計スコアsum_scoreが所定の閾値以上、かつ、前記合計スコアmany_scoreが所定の閾値以上、であるときに、当該フレームについて求められる動きベクトルは信頼性が高いと判定する。
逆に、合算動きベクトルSUM_Vに対応する最小SAD値の座標位置と、多数決トップの動きベクトルに対応するSAD値の座標位置との差が所定以内、例えば前記差が1隣接画素以内でないときには、当該フレームからは信頼性の高い手ぶれベクトルが検出できないと判定して、当該フレームは、複数枚のフレームの重ね合わせ対象から除外する。
また、合計スコアsum_scoreが所定の閾値未満、または、前記合計スコアmany_scoreが所定の閾値未満であるときにも、当該フレームからは信頼性の高い手ぶれベクトルが検出できないと判定して、当該フレームは、複数枚のフレームの重ね合わせ対象から除外する。
そして、前記ように信頼性が高いと判定されたときにのみ、この例では、合算動きベクトルを基準にしてラベル付けされたターゲットブロックのラベルのうち、「TOP」および「NEXT_Top」が付与されたターゲットブロックについてのSADテーブルのSAD値のみを用いて、再合算SADテーブルRSUM_TBLを生成する。
そして、この再合算SADテーブルRSUM_TBLの最小SAD値およびその近傍座標位置のSAD値について、近似曲面補間を適用してグローバル動きベクトル(合算動きベクトル)を算出するものである。そして、算出した合算動きベクトルを用いて2回目検波の際のサーチ範囲を決定し、あるいは、平行移動量および回転角度を算出する。
または、「TOP」および「NEXT_Top」が付与されたターゲットブロックについてのブロック毎動きベクトルのみを用いて、前記(式4)、(式5)を用いて、平行移動量を算出して2回目検波の際のサーチ範囲を決定し、または、前記(式4)〜前記(式10)を基にした演算をして、平行移動量および回転角度を算出する。
なお、従来から提案されている、時間軸方向の動きベクトルの周波数から、動きベクトル(グローバル動きベクトル)を予測する手法と、上述したこの発明の実施形態の手法とを組み合わせることにより、更なる信頼性並びに精度の向上を図るようにしても良い。
上述したように、この実施形態では、1フレーム内の複数個のターゲットブロックのそれぞれについて、SADテーブルを生成し、ブロック毎動きベクトルを算出するようにする。この場合に、この実施形態では、現在の500万画素オーバーの撮像素子を用いる撮像装置に適用しようとすると、1画面分の画素数に比例してSADテーブルの規模が増加するため、現実的な回路規模で実現するのが困難であるという問題がある。
実現できるレベルの現実的な提案としては、前述した特許文献3(特開2005−38396公報)を挙げることができる。この特許文献3に示されたものは、画像を縮小変換したサイズで動ベクトルを求める手段と、同一のSADテーブルを複数のブロックで共有する手段から構成される。画像の縮小変換と、SADテーブルの複数ブロックでの共有化は、SADテーブルサイズの削減を実現するための、非常に良い手法であり、MPEG(Moving Picture Experts Group)画像圧縮方式における動きベクトル検出やシーンチェンジ検出等、他分野でも使われている。
しかし、この特許文献3のアルゴリズムの問題点として、画像の縮小変換と、その際のメモリ(DRAM(Dynamic RAM(Random Access Memory)))アクセスに、時間とメモリ容量を消費することと、SADテーブルを複数ブロックで時分割アクセスする手法のため、メモリアクセスが非常に増加し、この処理にも時間を要してしまうという課題がある。動画の手ぶれ補正においては、リアルタイム性と同時にシステム遅延時間の短縮が求められるため、この処理時間の問題が課題となってしまうのである。
多人数評価の結果、例えば3フレーム/秒(3fps)の静止画の場合における手ぶれ範囲は、全フレームを100%として±10%程度であることが判明している。既に高級機では世に出ている1200万画素を仮定し、現状で提案されている技術のまま、必要なSADテーブルサイズを見積もると、約80メガビットである。しかも、現実的な処理速度を満たそうとすると、このSADテーブル情報を格納するメモリは、内蔵SRAM(Static RAM(Random Access Memory))であることが求められる。半導体プロセスルールが進んだとは言え、このサイズは、ほぼ3桁程度、現実的なレベルからはかけ離れている。
また、元画像を縮小変換する際には、エイリアシング(折り返し歪み)や、低照度ノイズ除去のためのローパスフィルタを、縮小処理の前処理として実装するが必要である。しかし、縮小倍率に応じて、ローパスフィルタの特性が変化する上、特に、垂直方向のローパスフィルタの場合、多タップのデジタルフィルタとした場合に、多くのラインメモリと演算ロジックを必要としなければならず、回路規模増加の問題が生じる。
そこで、この実施形態では、以上の点にかんがみ、ブロックマッチングを用いて2フレーム間のグローバル動きベクトルを算出する場合において、SADテーブルサイズの大幅な削減が可能である画像処理方法および装置を用いる。
また、特許文献3に記載された画像の縮小変換によるSADテーブルの削減手法に関して、画像の縮小変換に伴う処理時間の増大並びにメモリ容量の消費と、画像の縮小変換に伴うエイリアシング回避のための適切なローパスフィルタの実装に伴う回路増大という、2つの問題を提起した。この実施形態では、これらの問題点をも解決することができるようにしている。
すなわち、この実施形態では、ターゲットブロックと参照ブロック間において求められるSAD値を、参照ブロックの参照ベクトルに対応して記憶するのではなく、当該参照ベクトルを縮小し、その縮小した参照縮小ベクトルに対応する、当該参照縮小ベクトルの近傍の複数の参照ベクトルに分散加算して記憶するようにする。
これにより、従来のSADテーブルに比較して、SADテーブルのサイズを大幅に縮小すると共に、画像の縮小変換に伴う処理時間の増大並びにメモリ容量の消費と、画像の縮小変換に伴うエイリアシング回避のための適切なローパスフィルタの実装に伴う回路増大という、2つの問題を解決するようにしている、
図13〜図15は、この実施形態で用いる新規なブロックマッチング方法の概要を説明するための図である。図13は、従来のSADテーブルTBLoと、実施形態の画像処理方法において生成される縮小SADテーブルTBLsとの関係を示すものである。
この実施形態においても、図74に示したように、従来と同様に参照フレームにおいて、元フレームに設定された複数個、この例では16個のターゲットブロックの位置のそれぞれを中心として複数個のサーチ範囲が設定される。そして、この複数個のサーチ範囲のそれぞれにおいて、前述したような複数の参照ブロックが設定され、各参照ブロック内の画素とターゲットブロック内の対応する画素の輝度値の差分の絶対値の総和、つまり、SAD値が求められる。
従来は、求められたSAD値は、図13に示すように、対象となっている参照ブロックの参照ベクトルRVに対応するアドレスのテーブル要素tblとしてSADテーブルTBLoに書き込まれる。
したがって、従来のブロックマッチングでは、ターゲットブロックと参照ブロックとのフレーム画像上における位置ずれ量を表わす参照ベクトルRVと、SADテーブルTBLoの各テーブル要素である参照ブロックのSAD値とは、1対1に対応している。すなわち、従来のSADテーブルTBLoでは、サーチ範囲で取り得る参照ベクトルRVと等しい数のSAD値のテーブル要素数を備えるものとなっている。
これに対して、この実施形態におけるブロックマッチングでは、図13および図14(A)、(B)に示すように、対象となっている参照ブロックの参照ベクトルRVは、縮小率1/n(nは自然数)で縮小されて参照縮小ベクトルCVとされる。
ここで、以下の説明においては、説明の便宜上、水平方向縮小倍率と垂直方向の縮小倍率とを同じとしているが、水平方向縮小倍率と垂直方向の縮小倍率とは独立の異なる値でも良い。また、後で述べるが、水平方向縮小倍率と垂直方向の縮小倍率とを独立に任意の自然数分の1として設定できるようにしておく方が、柔軟性も高く好都合である。
この実施形態においても、前述の従来例で説明したのと同様に、サーチ範囲の中心とされるターゲットブロックの位置を基準位置(0,0)とし、参照ベクトルは、当該基準位置からの画素単位の水平方向および垂直方向のずれ量(vx,vy)(vx、vyは、整数)を指し示すものとされ、参照ベクトルRVのそれぞれは、参照ベクトル(vx,vy)で表される。
参照ベクトル(vx,vy)が、水平方向および垂直方向のそれぞれについて1/nに縮小された参照縮小ベクトル(vx/n,vy/n)で示される位置(vx/n,vy/n)は、整数ではなく、小数成分が発生することがある。このため、この実施形態では、縮小前の元の参照ベクトルRVに対応して求められたSAD値を、参照縮小ベクトルCVに最も近い1つの参照ベクトルに対応するテーブル要素として記憶してしまうと誤差が生じることになる。
そこで、この実施形態では、まず、参照縮小ベクトルCVで示される位置(vx/n,vy/n)の近傍の複数の参照ベクトルで示される複数の位置(テーブル要素)を検出する。そして、参照ベクトルRVの参照ブロックについて求められたSAD値は、その検出した近傍の複数の参照ベクトルに対応するSAD値に分散して加算するようにする。
この場合に、この実施形態では、参照縮小ベクトルCVで示される位置の近傍の周囲の複数個の参照ベクトルで示される位置に対応するテーブル要素tblに書き込むべき成分として分散加算する値は、縮小前の元の参照ベクトルRVに対応して求められたSAD値から、参照縮小ベクトルとその近傍の参照ベクトルとのそれぞれが示す位置の関係を用いて、前記近傍の参照ベクトルのそれぞれに対応して分散加算するSAD値を算出し、算出したSAD値のそれぞれを、対応する参照ベクトルのテーブル要素成分として加算するようにする。
ここで、分散するだけでなく加算するというのは、参照縮小ベクトルの近傍の複数の参照ベクトルは、異なる複数の参照縮小ベクトルについて重複して検出されることになるので、1つの参照ベクトルについて、重複したSAD値は加算するという意味である。
なお、参照縮小ベクトルCVが示す位置(vx/n,vy/n)が、参照ベクトルが示す位置に一致する場合、つまり、vx/nおよびvy/nの値が整数であるときには、周辺の複数の参照ベクトルを検出する必要はなく、当該位置(vx/n,vy/n)を示す参照ベクトルに対応して、縮小前の元の参照ベクトルRVに対応して求められたSAD値を記憶するようにするものである。
次に、具体例を挙げて、以上の処理を説明する。例えば、ターゲットブロックの位置を基準(0,0)としたときに、図14(A)に示すように、(−3,−5)の位置を示す参照ブロックRVを、水平方向および垂直方向に、1/n=1/4倍に縮小すると、その参照縮小ベクトルCVで示される位置は、図14(B)に示すように、(−0.75,−1.25)となる。
したがって、参照縮小ベクトルCVで示される位置は小数成分が発生し、参照ベクトルで示される位置とは一致しない。
そこで、この場合には、図15に示すように、当該参照縮小ベクトルCVが示す位置の近傍位置を示す複数個の近傍参照ベクトルが検出される。図15の例では、1つの参照縮小ベクトルCVに対して、4個の近傍参照ベクトルNV1,NV2,NV3,NV4が検出される。
そして、前述したように、この実施形態では、参照ベクトルRVの参照ブロックについて求められたSAD値は、これら4個の近傍参照ベクトルNV1,NV2,NV3,NV4に対応するSAD値として分散加算される。
この場合に、この実施形態では、4個の近傍参照ベクトルNV1,NV2,NV3,NV4のそれぞれに分散加算するSAD値は、参照縮小ベクトルCVで示される位置P0(図15において×印として示す)と、4個の近傍参照ベクトルNV1,NV2,NV3,NV4のそれぞれで示される位置P1,P2,P3,P4(図15において○印として示す)との位置関係を用いて線形加重分散値として算出する。
図15の例の場合には、参照縮小ベクトルCVで示される位置P0は、周辺近傍の4個の参照ベクトルNV1,NV2,NV3,NV4のそれぞれで示される位置P1,P2,P3,P4を、水平方向に1:3、垂直方向に3:1に内分する位置にある。
そこで、縮小前の元の参照ベクトルRVに対応して求められたSAD値をSαとしたとき、周辺近傍の4個の参照ベクトルNV1,NV2,NV3,NV4のそれぞれで示される位置P1,P2,P3,P4に対応するSADテーブル要素に分散加算する値SADp1,SADp2,SADp3,SADp4のそれぞれは、
SADp1=Sα×9/16
SADp2=Sα×3/16
SADp3=Sα×3/16
SADp4=Sα×1/16
となる。
そして、この実施形態では、求められた値SADp1,SADp2,SADp3,SADp4のそれぞれを、近傍の4個の参照ベクトルNV1,NV2,NV3,NV4のそれぞれで示される位置P1,P2,P3,P4に対応するSADテーブル要素にそれぞれ加算する。
この実施形態では、以上の処理を、サーチ範囲内のすべての参照ブロックについて行なう。
以上のことから、この実施形態では、参照ベクトルRVを1/nに縮小する場合には、全ての参照ベクトルに1対1に対応する従来サイズのSADテーブルTBLoに対して、水平方向に1/n、また、垂直方向に1/nに縮小した縮小SADテーブルTBLsを用意して、この縮小SADテーブルTBLsのテーブル要素として、参照縮小ベクトルCVの近傍の参照ベクトルに対応するSAD値を求めるようにすれば良い(図13参照)。
したがって、この実施形態の場合には、縮小SADテーブルTBLsのテーブル要素の数は、従来のSADテーブルTBLoのテーブル要素数の1/nとなり、テーブルサイズを大幅に小さくすることが可能である。
なお、上述の実施形態の説明においては、参照縮小ベクトルCVの近傍の4個の参照ベクトルを検出し、当該4個の近傍参照ベクトルに対応するSADテーブル要素に対して、対照の参照ブロック(参照ベクトルRV)について算出したSAD値を線形加重分散加算するようにしたが、参照縮小ベクトルCVの近傍の複数の参照ベクトルの選び方およびその近傍参照ベクトルに対応するSADテーブル要素に対する分散加算の方法は、上述の例に限られるものではない。
例えば、参照縮小ベクトルCVの近傍の9個もしくは16個の参照ベクトルを検出し、当該9個もしくは16個の近傍参照ベクトルに対応するSADテーブル要素に対して、いわゆるキュービック(Cubic)補間による分散加算を行なうようにすれば、より精度は高くなる。しかし、リアルタイム性と演算回路の削減を重視すると、上述した近傍4個の参照ベクトルに対応するテーブル要素への線形加重分散加算が、より有効である。
この実施形態においても、参照ブロックをサーチ範囲内で遍く移動させ、全ての参照ブロックのSAD値に対してSADテーブル(この実施形態では縮小SADテーブル)への代入を行う点は、従来手法と同じである。
ただし、従来は、参照ベクトルとSADテーブル要素のアドレスが1対1に対応していたため、SADテーブルへは単なる代入で済んだが、この実施形態による手法では、参照ブロックについて算出したSAD値を分散加算させるため、縮小SADテーブルにおいて、参照ベクトル(縮小参照ベクトル)とテーブルアドレスは1対1ではない。したがって、この実施形態の手法の場合には、SAD値のテーブルアドレスへの単なる代入ではなく、加算して代入する、いわゆる代入加算である必要がある。また、そのため、SADテーブル(縮小SADテーブル)の各テーブル要素は、最初に初期化(0クリア)しておかなければならない。
ところで、従来のブロックマッチングでは、以上のようにして完成させたSADテーブルにおいて、SAD値が最小値となるテーブル要素を探索し、その最小値となるテーブル要素のテーブルアドレスを、参照ベクトルに変換すれば、動ベクトルの検出を完了した。
これに対して、この実施形態による手法では、SADテーブルは、参照ベクトルを縮小した縮小参照ベクトルに対応した縮小SADテーブルであるため、当該縮小SADテーブルの最小値がそのまま正確な動きベクトルには対応していない。
もっとも、ある程度の誤差を許す装置の場合には、縮小SADテーブルの最小値となるテーブル要素のテーブルアドレスを、参照ベクトルに変換したものを、さらに縮小率1/nの逆数倍、つまりn倍することで、動きベクトルを算出するようにすることもできる。
しかし、より正確な動きベクトルを算出するようにする場合には、以下に説明するように、縮小SADテーブルのテーブル要素値に対して補間処理を施すことで、元のベクトル精度で、正確な動きベクトル(ブロック毎動きベクトル)を検出するようにする。
なお、上述の説明において、縮小参照ベクトルを用いない従来の参照ベクトルを用いるブロックマッチング手法を用いて複数個のターゲットブロックについてのSADテーブルを求め、そして、求めた複数個のSADテーブルの対応する座標位置のSAD値を合算することで合算SADテーブルを求め、その合算SADテーブルについて、近似曲線補間を行うことによりグローバル動きベクトルを算出することを記述したが、以下に説明する補間処理は、この場合の近似曲線補間として用いることができるものでもある。
[より正確な動きベクトルを算出するための補間処理の第1の例]
より正確な動きベクトルを算出するための補間処理の第1の例は、縮小SADテーブルにおける複数個のSADテーブル要素値(SAD値)を、1つの2次曲面で近似する手法である。
すなわち、縮小SADテーブルにおいて、SAD値が最小値となるテーブル要素(整数精度最小値テーブル要素(整数精度テーブルアドレス))と、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素とを求め、それらのテーブル要素のSAD値を用いて、最小自乗法によりSAD値の2次曲面を決定し、この2次曲面の最小値となるSAD値を検出し、当該検出した最小値となるSAD値に対応する位置(参照フレーム上において、基準位置に対してずれた位置)を検出し、当該検出した位置を小数精度の最小値テーブルアドレス(縮小SADテーブルにおいてSAD値が最小値となるベクトル(最小値ベクトルという)に対応)とする。
この場合、一意の2次曲面を定めるためには、図16(A)または(B)に示すように、整数精度最小値テーブル要素tmと、当該テーブル要素tmをその両側から挟む位置の、当該テーブル要素tmの近傍の4個の整数精度テーブル要素t1,t2,t3,t4が最低限必要である。
そして、図17に示すように、参照フレームのサーチ範囲内の縮小SADテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置(0,0)として、水平方向および垂直方向のずれ量(参照縮小ベクトルに対応)の軸vx/nおよび軸vy/nを考えると共に、これらの軸vx/nおよび軸vy/nに垂直な軸として、SAD値の軸を考え、これら3軸からなる座標空間を想定する。
そして、例えば、整数精度最小値テーブル要素tmのSAD値と、当該整数精度最小値テーブル要素tmを挟む2個のテーブル要素t1、t3のSAD値とから、図17の座標空間において2次曲線を生成する。また、整数精度最小値テーブル要素tmのSAD値と、当該最小値テーブル要素tmを挟む他の2個のテーブル要素t2、t4のSAD値とから、図17の座標空間において、他の2次曲線を生成する。そして、これら2個の2次曲線を含む2次曲面201を、最小自乗法により求め、その2次曲面201を、図17に示すように、座標空間において生成する。
そして、生成されたSAD値の2次曲面201の最小値202を検出し、その最小値を取るSAD値に対応する位置(vx/n,vy/n)(図17の位置203)を検出し、当該検出した位置(vx/n,vy/n)を、小数精度のテーブル要素(テーブルアドレス)として検出する。そして、検出した小数精度テーブル要素に対応するベクトル(最小値ベクトル)204を、図18に示すようにn倍して、元の大きさ精度の動きベクトル205を得る。
例えば、図18に示すように、参照ベクトルを1/4に縮小した場合における縮小SADテーブルTBLsの、小数精度テーブル要素の最小値アドレスから求められる最小値ベクトル204が、(−0.777,−1.492)の場合に、これらを4倍した(−3.108,−5.968)が、動きベクトル205となる。この動きベクトル205は、元画像のスケールにおける動きベクトルを再現したものとなっている。
以上の説明は、整数精度最小値テーブル要素tmと、その近傍の4テーブル要素を用いた場合として説明したが、SAD値の2次曲面を最小自乗法により求めるためには、より多くの複数近傍テーブル要素を用いたほうがよい。そこで、一般には、整数精度最小値テーブル要素tmを中心として、その周囲の水平方向×垂直方向=m×m個(mは3以上の整数)の矩形領域のテーブル要素を用いるようにする。
しかし、この複数近傍テーブル要素の数は、多ければ良いというものではなく、広い範囲のテーブル要素を用いると、演算量の増加を招く上、画像パターンに依存するローカルミニマムの偽値を使用してしまう可能性も高まるので、適切な複数近傍テーブル要素の数からなる矩形領域のテーブル要素を用いるようにする。
適切な複数近傍テーブル要素の数からなる矩形領域のテーブル要素の例として、この実施形態では、整数精度最小値テーブル要素tmを中心として、その周囲の水平方向×垂直方向=3×3個の矩形領域のテーブル要素を用いるようにする例と、整数精度最小値テーブル要素tmを中心として、その周囲の水平方向×垂直方向=3×3個の矩形領域のテーブル要素を用いるようにする例とについて説明する。
[3×3個の矩形領域のテーブル要素を用いる例]
図20に、整数精度最小値テーブル要素tmを中心として、その周囲の水平方向×垂直方向=3×3個の矩形領域(図20で塗りを付して示してある)のテーブル要素を用いるようにする例を示す。
この図20の例の場合には、図20(A)に示すように、整数精度最小値テーブル要素tmと、その近傍の8個の近傍テーブル要素のSAD値を用いて、図20(B)に示すような2次曲面201を、最小自乗法により生成する。そして、生成されたSAD値の2次曲面201の最小値202を検出し、その最小値を取るSAD値に対応する位置(vx/n,vy/n)(図20(B)の位置203)を検出し、当該検出した位置203を、小数精度の最小値テーブル要素位置(小数精度最小値テーブルアドレス)として検出する。
そして、検出した小数精度テーブル要素位置203に対応するベクトル(最小値ベクトル)204を、前述した図18に示すようにn倍して、元の大きさ精度の動きベクトル205を得る。
ここで、SAD値の2次曲面201の最小値202に対応する位置203の算出方法は、次のようになる。すなわち、図21に示すように、整数精度最小値テーブル要素tmの位置を原点(0,0)とする(x,y)座標を考える。この場合、周辺の8個のテーブル要素の位置は、3個のx軸方向の位置、すなわち、x=−1、x=0、x=1と、3個のY軸方向の位置、すなわち、y=−1、y=0、y=1との繰り合わせで表され、(−1,−1)、(0,−1)、(1,−1)、(−1,0)、(0,1)、(−1,1)、(0,1)、(1,1)の8位置となる。
そして、図21のテーブルにおける各テーブル要素のSAD値を、Sxyとする。したがって、例えば、整数精度最小値テーブル要素tm(位置(0,0))のSAD値はS00と表され、また、右下の位置(1,1)のテーブル要素値のSAD値はS11と表される。
すると、整数精度最小値テーブル要素tmの位置を原点(0,0)とする(x,y)座標における小数精度の位置(dx、dy)は、図22に示す(式A)および(式B)により、求めることができる。
図22の(式A)および(式B)において、
x=−1のとき、Kx=−1
x=0のとき、Kx=0
x=0のとき、Kx=1
となる。また、
y=−1のとき、Ky=−1
y=0のとき、Ky=0
y=0のとき、Ky=1
となる。
こうして求められた小数精度の位置(dx,dy)は、整数精度最小値テーブル要素tmの位置を原点(0,0)とする位置であるので、この小数精度の位置(dx,dy)と整数精度最小値テーブル要素tmの位置とから、求めるサーチ範囲の中心位置からの位置203を検出することができる。
[4×4個の矩形領域のテーブル要素を用いる例]
図23に、整数精度最小値テーブル要素tmをほぼ中心として、その周囲の水平方向×垂直方向=4×4個の矩形領域のテーブル要素(図23で塗りを付して示してある)を用いるようにする例を示す。
この場合に、整数精度最小値テーブル要素tmと、その近傍の8テーブル要素(3×3)や、その近傍の24テーブル要素(5×5)のように、前記mの値が奇数である場合には、整数精度最小値テーブル要素tmは、常に、使用する矩形領域の複数のテーブル要素の中心になるため、使用するテーブル範囲は単純に決定する。
これに対して、近傍の15テーブル要素(4×4)のように、mが偶数である場合には、整数精度最小値テーブル要素tmは、使用する矩形領域の複数のテーブル要素の中心位置とはならないので、若干の工夫が必要となる。
つまり、整数精度最小値テーブル要素tmから見て、水平方向に左右の隣接テーブル要素のSAD値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の4列目として採用する。同様に、垂直方向に上下の隣接テーブル要素のSAD値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の4行目として採用する。
図23の例では、整数精度最小値テーブル要素tmの水平方向に左右の隣接テーブル要素のSAD値は、「177」と「173」であるので、SAD値が小さい右隣の値「173」のテーブル要素のさらに右隣の列を第4列目として採用する。また、整数精度最小値テーブル要素tmの垂直方向に上下の隣接テーブル要素のSAD値は、「168」と「182」であるので、SAD値が小さい上隣の値「168」のテーブル要素のさらに上隣の行を第4行目として採用する。
そして、図23の例の場合には、整数精度最小値テーブル要素tmと、その近傍の15個の近傍テーブル要素のSAD値を用いて、2次曲面201を、最小自乗法により生成する。そして、生成されたSAD値の2次曲面201の最小値202を検出し、その最小値を取るSAD値に対応する位置(vx/n,vy/n)(図23の位置203)を検出し、当該検出した位置203を、小数精度の最小値テーブル要素位置(小数精度最小値テーブルアドレス)として検出する。
そして、検出した小数精度テーブル要素位置203に対応するベクトル(最小値ベクトル)204を、前述した図18に示すようにn倍して、元の大きさ精度の動きベクトル205を得る。
ここで、この例の場合におけるSAD値の2次曲面201の最小値202に対応する位置203の算出方法は、次のようになる。すなわち、図24に示すように、整数精度最小値テーブル要素tmの位置を原点(0,0)とする(x,y)座標を考える。
この例の場合には、16テーブル要素からなる矩形領域中における整数精度最小値テーブル要素tmの位置に応じて、図24(A),(B),(C),(D)のような4通りのテーブル要素配置を考える必要がある。
この場合、周辺の15個のテーブル要素の位置は、図24(A),(B),(C),(D)から分かるように、4個のx軸方向の位置、すなわち、x=−1、x=0、x=1、x=2またはx=−2と、4個のY軸方向の位置、すなわち、y=−1、y=0、y=1、y=2またはy=−2との繰り合わせで表される15位置となる。
そして、図24のテーブルにおける各テーブル要素のSAD値を、Sxyとする。したがって、例えば、整数精度最小値テーブル要素tm(位置(0,0))のSAD値はS00と表され、また、位置(1,1)のテーブル要素値のSAD値はS11と表される。
すると、整数精度最小値テーブル要素tmおよびその周辺の16テーブル要素からなる矩形領域中の中心位置を原点(0,0)とする(x,y)座標における小数精度の位置(dx,dy)は、図25に示す(式C)および(式D)により、求めることができる。
ここで、図25の(式C)および(式D)において、KxおよびKyは、図26に示すように、整数精度最小値テーブル要素tmおよびその周辺の16テーブル要素からなる矩形領域中の中心位置を原点(0,0)とする(Kx,Ky)座標を考えたときの、前記図17(A),(B),(C),(D)に示した4通りのテーブル要素配置に応じた値となる。
すなわち、前記図24(A)に対応する場合には、
x=−2のとき、Kx=−1.5
x=−1のとき、Kx=−0.5
x=0のとき、Kx=0.5
x=1のとき、Kx=1.5
となる。また、
y=−2のとき、Ky=−1.5
y=−1のとき、Ky=−0.5
y=0のとき、Ky=0.5
y=1のとき、Ky=1.5
となる。
また、前記図24(B)に対応する場合には、
x=−2のとき、Kx=−1.5
x=−1のとき、Kx=−0.5
x=0のとき、Kx=0.5
x=1のとき、Kx=1.5
となる。また、
y=−1のとき、Ky=−1.5
y=0のとき、Ky=−0.5
y=1のとき、Ky=0.5
y=2のとき、Ky=1.5
となる。
また、前記図24(C)に対応する場合には、
x=−1のとき、Kx=−1.5
x=0のとき、Kx=−0.5
x=1のとき、Kx=0.5
x=2のとき、Kx=1.5
となる。また、
y=−2のとき、Ky=−1.5
y=−1のとき、Ky=−0.5
y=0のとき、Ky=0.5
y=1のとき、Ky=1.5
となる。
また、前記図24(D)に対応する場合には、
x=−1のとき、Kx=−1.5
x=0のとき、Kx=−0.5
x=1のとき、Kx=0.5
x=2のとき、Kx=1.5
となる。また、
y=−1のとき、Ky=−1.5
y=0のとき、Ky=−0.5
y=1のとき、Ky=0.5
y=2のとき、Ky=1.5
となる。
また、図25の(式C)および(式D)におけるΔxおよびΔyは、(Kx,Ky)座標に対する図24(A),(B),(C),(D)の各テーブル要素配置における(x,y)座標とのずれ量を表しており、図26から分かるように、
図24(A)に対応する場合には、Δx=−0.5、Δy=−0.5、
図24(B)に対応する場合には、Δx=−0.5、Δy=0.5、
図24(C)に対応する場合には、Δx=0.5、Δy=−0.5、
図24(D)に対応する場合には、Δx=0.5、Δy=0.5、
となる。
こうして求められた小数精度の位置(dx,dy)は、整数精度最小値テーブル要素tmの位置を原点(0,0)とする位置であるので、この小数精度の位置(dx,dy)と整数精度最小値テーブル要素tmの位置とから、求めるサーチ範囲の中心位置からの位置203を検出することができる。
[より正確な動きベクトルを算出するための補間処理の第2の例]
より正確な動きベクトルを算出するための補間処理の第2の例は、縮小SADテーブルにおける整数精度最小値テーブル要素を含む複数個の水平方向のテーブル要素のSAD値を用いて水平方向の3次曲線を生成すると共に、整数精度最小値テーブル要素を含む複数個の垂直方向のテーブル要素のSAD値を用いて垂直方向の3次曲線を生成し、それぞれの3次曲線の極小値となる位置(vx,vy)を検出して、検出した位置を小数精度の最小値アドレスとするものである。
図27は、この第2の例を説明するための図である。前述の第1の例と同様にして、整数精度最小値テーブル要素tmと、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素、図27の例では、4×4=16個のテーブル要素を求める(図27(A)で塗りを付した部分参照)。
次に、第1の例と同様にして、図27(B)に示すように、参照フレームのサーチ範囲内の縮小SADテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置(0,0)として、水平方向および垂直方向のずれ量(参照縮小ベクトルに対応)の軸vx/nおよび軸vy/nを考えると共に、これらの軸vx/nおよび軸vy/nに垂直な軸として、SAD値の軸を考え、これら3軸からなる座標空間を想定する。
次に、整数精度最小値テーブル要素tmの周囲の16個のテーブル要素のうち、整数精度最小値テーブル要素tmを含む4個の水平方向のテーブル要素のSAD値を用いて、前記座標空間に水平方向の3次曲線206を生成する。この水平方向の3次曲線206の極小値に対応する水平方向の位置vx/nとして、小数精度最小値テーブル要素位置の水平方向位置を検出する。
次に、整数精度最小値テーブル要素tmの周囲の16個のテーブル要素のうち、整数精度最小値テーブル要素tmを含む4個の垂直方向のテーブル要素のSAD値を用いて、前記座標空間に垂直方向の3次曲線207を生成する。この垂直方向の3次曲線207の極小値に対応する垂直方向の位置vy/nとして、小数精度最小値テーブル要素位置の垂直方向位置を検出する。
以上により求めた小数精度最小値テーブル要素位置の水平方向の位置と、垂直方向の位置から、小数精度最小値テーブル要素位置(小数精度最小値テーブルアドレス)208を検出する。そして、当該検出した小数精度テーブル要素位置208に対応するベクトル(最小値ベクトル)209を、前述した図18に示すようにn倍して、元の大きさ精度の動きベクトルを得る。
すなわち、第2の例は、第1の例で説明した方法により、水平方向、垂直方向のそれぞれの4個のテーブル要素を確定し、図27(B)に示すように、水平方向、垂直方向のそれぞれで、3次曲線を一意に定める手法である。
ここで、SAD値の3次曲線206および209の最小値202に対応する位置208の算出方法は、次のようになる。すなわち、水平方向または垂直方向のいずれかの方向における3次曲線において、最小値の近傍の4点のSAD値を、前記水平方向または垂直方向のいずれかの方向に沿った順番に、S、S、S、Sとしたとき、小数精度の最小値が、図28に示す3つの区間Ra,Rb,Rcのいずれにあるかにより、最小値を取る小数成分uを算出する式が異なる。
ここで、区間RaはSAD値Sとなる位置とSAD値Sとなる位置との間の区間、RbはSAD値Sとなる位置とSAD値Sとなる位置との間の区間、RcはSAD値Sとなる位置とSAD値Sとなる位置との間の区間である。
そして、小数精度の最小値が、図28に示す区間Raにあるときには、図29の(式E)により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分uが算出される。
また、同様に、小数精度の最小値が、図28に示す区間Rbにあるときには、図29の(式F)により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分uが算出される。
さらに、小数精度の最小値が、図28に示す区間Rcにあるときには、図29の(式G)により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分uが算出される。
そして、小数精度の最小値が、図28に示す3つの区間Ra,Rb,Rcのいずれにあるかの判別は、次のようにして行なう。
すなわち、図30は、その判別を説明するための図である。図30(A),(B),(C)に示すように、先ず、整数精度のSAD値の最小値Sminと、2番目に小さい整数精度のSAD値Sn2とを検出し、小数精度の最小値は、検出された整数精度のSAD値の最小値Sminの位置と、2番目に小さい整数精度のSAD値Sn2の位置との間の区間に存在するとして検出する。次に、整数精度のSAD値の最小値Sminと、2番目に小さい整数精度のSAD値Sn2とが、図28に示したSAD値S、S、S、Sのいずれの位置となっているかにより、検出した区間が区間Ra,Rb,Rcのいずれであるかの判別を行なう。
なお、図30(D)に示すように、整数精度のSAD値の最小値SminがSAD値のまたは位置にあって、4個のテーブル要素値の端に位置する場合には、最小位置が推定できないとして、この実施形態では、エラーとして扱い、最小値位置の算出は行なわないようにする。もっとも、この図30(D)のような場合においても、最小値位置を算出するようにしてもよい。
以上のようにして、この実施形態によれば、1/nにスケールダウンした小さいサイズの縮小SADテーブルを用いて、元の画像スケールにおける動きベクトルを算出することができる。この場合に、1/nにスケールダウンした小さいサイズの縮小SADテーブルを用いているにも関わらず、従来とほぼ同様のベクトル検出結果が得られることを図31に示す。
図31の横軸は、水平方向または垂直方向の一方についての1次元方向の縮小倍率nであり、また、縦軸は、検出される動きベクトルについての誤差(ベクトル誤差)を示している。図31のベクトル誤差の数値は画素数で表されている。
図31において、曲線301は、縮小倍率に対するベクトル誤差の平均値である。また、曲線302は、縮小倍率に対するベクトル誤差の分散σの3倍値(3σ(99.7%))を示している。曲線303は、曲線302の近似曲線を示している。
図31は、1次元方向の縮小倍率nに対するベクトル誤差を示しているが、SADテーブルは2次元のため、図31に示されるものの2乗の割合でテーブルサイズ(テーブル要素数)が削減されるのに対し、ベクトル誤差は、線形程度にしか増加しないことから、この実施形態による手法の有用性が分かる。
また、n=64(縮小率1/64)倍の縮小倍率でも、ベクトル誤差は小さく、全く異なる動きベクトルを算出出力とするような破綻は見られないことから、実質、1/4096に、SADテーブルのサイズを削減可能であると言える。
また、前述したように、動画の手ぶれ補正においては、リアルタイム性とシステム遅延の削減が強く求められるのに対し、精度については、破綻した全く異なる動きベクトルが検出される場合を除き、ある程度のベクトル検出誤差に対して寛容である。したがって、破綻しないままSADテーブルのサイズを大きく削減することができる、この実施形態は有用性が高いと言える。
そして、この実施形態では、前述したように、参照フレーム102を複数の領域、この例では16領域に分割し、それぞれの分割領域において動きベクトル(ブロック毎動きベクトル)205を検出するようにする。これは、前述したように、フレーム内には動く被写体が含まれる可能性も高いため、例えば、図32のように参照フレーム102の1フレーム内において16個の動きベクトル205を検出し、過去のフレームにおけるそれらの動きベクトル205からの推移も加味しながら統計的に処理することで、1フレームについて1つのグローバル動きベクトル、即ち、フレームの手ぶれベクトルを確定するようにするためである。
この場合、図32に示すように、1回目の検波においては、検出したい16個の動きベクトル205の基準位置PO1〜PO16のそれぞれを中心とするサーチ範囲SR1,SR2,・・・,SR16を定め、各サーチ範囲において、ターゲットブロックの射影イメージブロックIB1,IB2,・・・,IB16を想定する。
そして、この射影イメージブロックIB1,IB2,・・・,IB16と同じ大きさの参照ブロックを設定し、各サーチ範囲SR1,SR2,・・・,SR16内を、設定した参照ブロックを移動させて、上述と同様にして、縮小SADテーブルを生成すると共に、各サーチ範囲SR1,SR2,・・・,SR16における動きベクトル205を検出するようにする。したがって、この実施形態では、SADテーブルTBLiは、縮小SADテーブルの構成である。
そして、この実施形態では、16個のサーチ範囲のターゲットブロックについて求めた16個の縮小SADテーブルを、図2に示したように、重ね合わせるように並べて、サーチ範囲内で互いに対応する参照ブロック位置、つまり、縮小SADテーブルで同じ座標位置のSAD値を合算し、合算SAD値を求める。そして、その合算SAD値からなるSADテーブルとして、一つのサーチ範囲内の複数参照ブロック位置分についての合算縮小SADテーブルを生成する。したがって、この実施形態では、合算SADテーブルSUM_TBLは、合算縮小SADテーブルの構成である。
そして、この実施形態では、この縮小SADテーブルTBLi、この縮小SADテーブルTBLiについて上述のような近似補間処理をすることで求められるブロック毎動きベクトル205、および合算SADテーブルSUM_TBLを用いて、図10〜図11に示したような信頼性の判定処理、および信頼性の高いブロック毎動きベクトルが得られるターゲットブロックについての再合算SADテーブルRSUM_TBLの生成、さらに、生成した再合算SADテーブルRSUM_TBLの最小SAD値およびその近傍の複数個のSAD値を用いた曲線近似補間処理をすることにより、高精度のグローバル動きベクトルを算出する。
以上説明した実施形態の縮小SADテーブルを用いる画像処理方法は、従来手法として説明した特許文献3に記載された画像を縮小変換したサイズで動きベクトルを算出する手法に比べて、次に挙げる2つの点において、大きく異なるメリットを有するものである。
まず、第一に、この実施形態による手法は、特許文献3に記載された従来手法と異なり、画像を縮小変換するプロセスを全く必要としない。この実施形態による手法においては、参照ブロックについて算出したSAD値を、SADテーブル(縮小SADテーブル)に代入加算する際に、同時に縮小倍率に相当するアドレス変換を行なうからである。
これにより、この実施形態による手法においては、特許文献3に記載された従来手法のような画像の縮小変換のためのロジックも、縮小した画像をメモリに格納する時間およびバンド幅の浪費も、縮小画像をメモリに貼る領域確保も必要ない、というメリットを有する。
特許文献3に記載された従来手法のもう1つ重要な問題点として、前述も使用にしたように、画像を縮小変換する際のエイリアシング(折り返し歪み)や、低照度ノイズ除去のためのローパスフィルタの存在の問題がある。すなわち、画像縮小する際には、適切なローパスフィルタを通してからリサンプリングを行なわなければならず、さもないと、不要なエイリアシングが発生し、その縮小画像を用いた動きベクトルの精度が著しく損なわれるからである。
縮小変換の際の理想的なローパスフィルタの特性としては、sinc関数に類似した関数であることが、理論的に証明されている。sinc関数自体は、sin(xπ)/(xπ)の形で表されるカットオフ周波数f/2の無限タップのFIR(Finite Impulse Response)フィルタであるが、縮小倍率1/nのときの理想的なカットオフ周波数f/(2n)のローパスフィルタとしては、sin(xπ/n)/(xπ/n)と表される。しかし、これもsinc関数の一形態として良い。
図33〜図35の上側には、それぞれ縮小倍率が1/2倍、1/4倍、1/8倍のときのsinc関数(ローパスフィルタの理想特性)の形状を示す。この図33〜図35から、縮小倍率が大きくなればなる程、関数がタップ軸方向に拡大して行くことが分かる。つまり、無限タップのsinc関数を主要な係数のみで近似する場合にも、FIRフィルタのタップ数を増加させなければならないと言える。
また、一般的に、より低い帯域のカットオフ周波数を実現するフィルタは、フィルタ形状よりもタップ数が、その性能に対して支配的になって行くことが知られている。
したがって、特許文献3に記載の従来手法の縮小画像を用いる動きベクトル演算手法の場合、画像の縮小倍率が大きくなればなる程、そのSADテーブル削減効果が大きいにも関わらず、画像生成する際の前処理用フィルタとしてのローパスフィルタは、縮小倍率が大きくなればなる程、コストが増加してしまう、という矛盾を併せ持つのである。
一般に、高次タップのFIRフィルタを実現する場合、演算ロジックのコストがタップ数の2乗に比例して増加するため、問題となるが、より大きい問題は、垂直フィルタ実現のためのラインメモリ数の増加である。近年のデジタルスチルカメラにおいては、画素数向上に伴うラインメモリのサイズ削減のため、いわゆる短冊処理を行なっているが、例え、1ライン当たりのサイズを削減したとしても、ラインメモリそのものの本数が増加することは、物理レイアウトエリアで換算されるトータルコストを著しく押し上げる。
以上、述べたように、特許文献3に記載の従来手法の画像縮小によるアプローチは、特に垂直ローパスフィルタの実現において、大きな壁が立ちはだかっていることが分かる。それに対し、この実施形態の手法は、全く異なる形で簡潔にこの問題を解決している。
図33〜図35の下側に、この実施形態による手法におけるローパスフィルタのイメージを示す。この実施形態による手法においては、画像縮小処理を伴っていないが、縮小SADテーブルの生成演算過程におけるローパスフィルタのイメージを図示したものである。
図33〜図35の下側に示されるように、このローパスフィルタの特性は、sinc関数の主要係数部分を線形で近似した、シンプルなフィルタ特性ではあるものの、縮小倍率に連動してタップ数が増加していることが分かる。これは、先に述べた、カットオフ周波数が低くなる程、ローパスフィルタの性能はタップ数が支配的になる、という事実に好適である。つまり、実施形態の線形加重分散加算を行なう処理のような、この実施形態におけるSAD値の分散加算を行なう処理そのものが、倍率連動の高性能ローパスフィルタを、シンプルな回路で実現していることと等価なのである。
このローパスフィルタに絡んで、他にもメリットがある。特許文献3に記載の従来手法では、ローパスフィルタをかけた後、リサンプリングすることで画像を縮小するが、この時点で相当数の画像情報が失われる。つまり、ローパスフィルタの演算において、画像情報の輝度値の語長は大幅に丸められてメモリに格納され、殆どの画素情報の下位ビットは、縮小後の画像に影響を与えないのである。
一方、この実施形態による手法においては、全ての画素の輝度値の全ビット情報を、遍く平等に使用してSAD値を演算し、その分散加算値を求めて縮小SADテーブルに加算する。縮小SADテーブルの各テーブル要素値の語長さえ増やせば、最終的なSAD値の出力まで、一切の丸め誤差を含まない形で演算可能である。縮小SADテーブルの面積はフレームメモリに比較して小さいため、縮小SADテーブルの語長拡張は大きな問題にならない。その結果として、縮小SADテーブル並びに動きベクトル検出を、高精度に実現できるのである。
[この発明による画像処理装置の第1の実施形態]
次に、この発明による画像処理方法を用いた画像処理装置の第1の実施形態として、撮像装置の場合を例にとって、図を参照しながら説明する。図1は、この発明の画像処理装置の実施形態としての撮像装置の一例のブロック図を示すものである。
この図1の第1の実施形態は、静止画の手ぶれ補正システムに、この発明を適用した場合である。なお、この実施形態は、静止画用に限定されるわけではなく、本質的には動画にも適用可能である。動画の場合には、リアルタイム性のため加算枚数(フレーム数)に上限はあるが、フレーム毎に本手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現できる。
この第1の実施形態においては、入力画像フレームを参照フレームとして、この入力画像フレームと、フレームメモリ内の入力画像フレームを1フレーム遅延させた画像フレームとの間で動きベクトル検出を行なう。そして、この第1の実施形態における静止画についての手ぶれ補正は、連続的に撮影した複数枚の画像、例えば3fpsの画像を、手ぶれ補正を行いながら重ね合わせることにより行なう。
このように、第1の実施形態においては、撮影した静止画の手ぶれ補正を、連写した複数の画像について手ぶれ補正をかけながら重ね合わせて行くため、ピクセル精度(1画素精度)に近い精度が求められる。つまり、第1の実施形態においては、前述したように、手ぶれ動きベクトルとしてのフレーム間の水平方向および垂直方向の平行移動成分と同時に、フレーム間の回転成分も検出するようにする。
図1に示すように、この実施形態の撮像装置は、システムバス2にCPU(Central Processing Unit)1が接続されると共に、システムバス2に、撮像信号処理系10や、ユーザ操作入力部3、画像メモリ部4、記録再生装置部5などが接続されて構成されている。なお、この明細書においては、CPU1は、種々のソフトウエア処理を行なうプログラムを記憶するROM(Read Only Memory)やワークエリア用RAM(Random Access Memory)などを含むものとしている。
ユーザ操作入力部3を通じた撮像記録開始操作を受けて、図1の例の撮像装置は、後述するような撮像画像データの記録処理を行なう。また、ユーザ操作入力部3を通じた撮像記録画像の再生開始操作を受けて、図1の例の撮像装置は、記録再生装置部5の記録媒体に記録された撮像画像データの再生処理を行なう。
図1に示すように、撮像レンズ10Lを備えるカメラ光学系(図示は省略)を通じた被写体からの入射光は、撮像素子11に照射されて撮像される。この例では、撮像素子11は、CCD(Charge Coupled Device)イメージャで構成されている。なお、撮像素子11は、CMOS(Complementary Metal Oxide Semiconductor)イメージャで構成してもよい。
この例の撮像装置においては、撮像記録開始操作がなされると、撮像素子11からは、タイミング信号発生部12からのタイミング信号によりサンプリングされることにより、赤(R)、緑(G)、青(B)の3原色から構成されるベイヤー配列のRAW信号であるアナログ撮像信号が出力される。出力されたアナログ撮像信号は、前処理部13に供給され、欠陥補正やγ補正等の前処理が施され、データ変換部14に供給される。
データ変換部14は、これに入力されたアナログ撮像信号から、輝度信号成分Yと、色差信号成分Cb/Crとにより構成されるデジタル撮像信号(YCデータ)に変換し、そのデジタル撮像信号をシステムバス2を介して、画像メモリ部4に供給する。
画像メモリ部4は、この図1の例においては、3個のフレームメモリ41,42および43からなり、データ変換部14からのデジタル撮像信号は、先ず、フレームメモリ41に格納される。そして、1フレーム経過すると、フレームメモリ41に記憶されているデジタル撮像信号が、フレームメモリ42に転送されると共に、フレームメモリ41には、データ変換部14からの新たなフレームのデジタル撮像信号が書き込まれる。したがって、フレームメモリ42には、フレームメモリ41に格納されているフレーム画像よりも1フレーム分前のフレーム画像が格納されている。
そして、手ぶれベクトル検出部15は、システムバス2を介して、これら2個のフレームメモリ41およびフレームメモリ42をアクセスして、その格納データを読み出し、前述したような、1フレーム当たり16個のSADテーブル生成処理、ブロック毎動きベクトル検出処理、合算SADテーブル生成処理、再合算SADテーブル生成処理、グローバル動きベクトル検出処理などの処理、さらにフレームについての平行移動量および回転角度の算出処理を実行する。
この場合、フレームメモリ42に格納されているフレーム画像は、元フレームの画像とされ、また、フレームメモリ41に格納されているフレーム画像は、参照フレームの画像とされる。なお、実際には、フレームメモリ41と42とは、ダブルバッファとしてローテーションされる。
この第1の実施形態における手ぶれベクトル検出部15においては、前述したように、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、2段階以上、縮小SADテーブルおよび合算SADテーブルを用いた動きベクトル検出処理を繰り返すようにする。
特に、静止画についての手ぶれベクトル検出および手ぶれ補正処理においては、リアルタイム性の制約が少なく、画素数が多く、高精度の動きベクトルの検出が必要であるので、複数段階の階層的な動きベクトル検出処理が非常に有効である。
この第1の実施形態においては、画像メモリ4には、複数枚のフレームを回転および平行移動させて重ね合わせた結果を記憶するためのフレームメモリ43を設ける。前述したように、画像フレームの重ね合わせは、1枚目の基準画像(図3の画像フレーム120参照)に対して行うようにする。
複数枚のフレームを回転および平行移動させて重ね合わせる基準となる1枚目のフレームの画像データは、図1において破線で示すように、フレームメモリ43にも書き込まれる。
そして、2枚目以降の画像フレームについては、フレームメモリ42に格納された後、フレームメモリ41に格納されている画像データを用いて、常に1フレーム前の画像との相対的な手ぶれベクトルの検出が、手ぶれベクトル検出部15で実行される。このとき、1枚目の基準画像との相対手ぶれを算出するために、それまでの手ぶれベクトルを積分しておくようにする。また、手ぶれベクトル検出部15では、2枚目以降の画像フレームの、1枚目の基準画像フレームに対する相対的な回転角度が検出される。
手ぶれベクトル検出部15は、検出した1枚目の画像フレームに対する2枚目以降の画像フレームのそれぞれについての相対的な手ぶれベクトルと回転角度の情報をCPU1に供給する。
そして、フレームメモリ42に格納されている2枚目以降の画像は、算出された1枚目のフレームの基準画像との相対手ぶれ成分(平行移動量の成分)を相殺するように、CPU1の制御により、フレームメモリ42から読み出されて、回転・平行移動加算部19に供給される。このフレームメモリ42からの相対手ぶれ成分にしたがった切り出しにより、回転平行移動加算部19には、手ぶれによる平行移動量が除去された状態で供給される。
回転・平行移動加算部19では、CPU1からの制御信号により、1枚目の基準画像フレームに対する相対回転角度に応じてフレームメモリ42から読み出された2枚目以降の画像フレームのそれぞれが回転させられて、フレームメモリ43から読み出された画像フレームに対して加算もしくは平均化される。その加算もしくは平均結果の画像フレームは、フレームメモリ43に書き戻される。
そして、フレームメモリ44の画像フレームのデータは、CPU1の制御指示に応じた所定の解像度および所定の画像サイズとなるように切り出されて解像度変換部16に供給される。解像度変換部16は、CPU1からの制御を受けて、CPU1の制御指示に応じた所定の解像度および所定の画像サイズの画像データを生成して、出力する処理を実行する。
この解像度変換部16からの手ぶれが除去された画像データは、NTSC(National Television System Committee)エンコーダ18によりNTSC方式の標準カラー映像信号に変換され、電子式ビューファインダーを構成するモニターディスプレイ6に供給され、撮影時の画像がその表示画面にモニター表示される。
このモニター表示と並行して、解像度変換部16からの手ぶれが除去された画像データはコーデック部17で記録変調などのコーディング処理された後、記録再生装置部5に供給されて、DVD(Digital Versatile Disc)などの光ディスクやハードディスクなどの記録媒体に記録される。
この記録再生装置部5の記録媒体に記録された撮像画像データは、ユーザ操作入力部3を通じた再生開始操作に応じて読み出され、コーデック部17に供給されて、再生デコードされる。そして、再生デコードされた画像データはNTSCエンコーダ18を通じてモニターディスプレイ6に供給され、再生画像がその表示画面に表示される。なお、図1では、図示を省略したが、NTSCエンコーダ18からの出力映像信号は、映像出力端子を通じて外部に導出することが可能とされている。
上述した手ぶれベクトル検出部15は、ハードウエアにより構成することできるし、また、DSP(Digital Signal Processor)を用いて構成することもできる。さらには、CPU1によりソフトウエア処理とすることもできる。また、ハードウエアやDSP処理と、CPU1によるソフトウエア処理との組み合わせとすることもできる。
手ぶれベクトル検出部15では、相対的なフレーム間のブロック毎動きベクトルおよびグローバル動きベクトルの算出のみを行い、相対的な高精度のグローバル動きベクトルや平行移動量、回転角度の算出、また、1枚目に対する平行移動量および回転角度の算出処理は、CPU1が実行するようにしても良い。
なお、この実施形態では、回転・平行移動加算部19においては、後述するように、「単純加算」、「平均加算」、「トーナメント加算」の3通りのフレーム加算処理方法が、実行できるようにされている。そして、ユーザ操作入力部3には、それら3通りのフレーム加算処理方法のいずれを実行するかを指定する選択指定操作手段(図1では図示を省略)が設けられ、CPU1は、ユーザのこの選択指定操作手段を通じた選択指定に応じた選択制御信号を回転・平行移動加算部19に供給する。回転・平行移動加算部19は、3通りのフレーム加算処理方法のうちの、CPU1からの選択制御信号により指定されるフレーム加算処理方法を実行する。
[手ぶれベクトル検出部15における処理動作]
[第1の例]
この実施形態における手ぶれベクトル検出部15における処理動作の流れの第1の例を、図36〜図39のフローチャートを参照して、以下に説明する。この第1の例は、参照フレームについてのグローバル動きベクトルから平行移動量および回転角度を算出するようにする場合である。
なお、この図36〜図39は、一つの参照フレームについての処理であり、この図36〜図39の処理ルーチンが各参照フレームにおいて実行されるものである。この場合に、ステップS31の1回目のサーチ範囲の設定処理は、最初の参照フレームについて設定したら、その後の参照フレームにおいては省略することができる。
まず、1回目検波について説明する。前述の図32に示したように、16個のターゲットブロックについての16個のサーチ範囲について、それぞれのターゲットブロックの中心位置を、それぞれのサーチ範囲の中心としてサーチ範囲のオフセットをゼロに設定すると共に、それぞれのサーチ範囲を、この実施形態において想定される最大範囲に設定する(図36のステップS31)。
次に、16個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小SADテーブルおよびブロック毎動きベクトルの算出処理を実行する(ステップS32)。このステップS32の詳細処理ルーチンは後述する。
そして、16個のターゲットブロックについての縮小SADテーブルの生成が終了すると、16個の縮小SADテーブルにおいて、図4に示した(式3)により、サーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算する処理を行い、縮小SADテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小SADテーブルを生成する(ステップS33)。
次に、生成した合算縮小SADテーブルにおいて、最小SAD値を検出し、検出した最小SAD値とその近傍の複数SAD値を用いて、前述した近似曲面補間の処理を行って、合算動きベクトルを算出する(ステップS34)。
次に、ステップS34で算出された合算動きベクトルを基準にして、16個の縮小SADテーブルのSAD値と、ブロック毎動きベクトルとから、図10に示した条件の判定を行い、16個のターゲットブロックのそれぞれについての縮小SADテーブルについての前述したような「TOP」、「NEXT_TOP」、「NEAR_TOP」、「OTHERS」のラベル付けおよび当該参照フレームについての合計スコアsum_scoreの算出処理を行う。そして、算出されたそれらのラベル付け結果および合計スコアsum_scoreを保持する(ステップS35)。なお、このとき、「NEAR_TOP」、「OTHERS」のラベル付けをしたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグが設定される。
次に、ステップS32で算出された16個のブロック毎動きベクトルについて多数決を取り(ステップS36)、多数決トップのブロック毎動きベクトルを基準にして、16個の縮小SADテーブルのSAD値と、ブロック毎動きベクトルとから、前述したような図9に対応する条件の判定を行い、16個のターゲットブロックのそれぞれについてのSADテーブルについての前述したような「TOP」、「NEXT_TOP」、「NEAR_TOP」、「OTHERS」のラベル付けおよび当該参照フレームについての合計スコアmany_scoreの算出処理を行い、算出されたそれらのラベル付け結果および合計スコアmany_scoreを保持する(ステップS37)。
そして、ステップS34で算出した合算動きベクトルと、ステップS36での多数決処理の結果、検出される多数決トップの動きベクトルとを比較し、両動きベクトルが縮小SADテーブル上の座標位置として、1隣接以内(座標位置が上下左右斜め方向に1位置しか違わない)であるか否か判別する(ステップS38)。
ステップS38で、合算動きベクトルと多数決トップの動きベクトルとの差異が1隣接以内ではないと判別したときには、当該参照フレームのグローバル動きベクトルは信頼性が無いと判断して、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする(ステップS39)。そして、この処理ルーチンを終了する。
また、ステップS38で、合算動きベクトルと多数決トップの動きベクトルとの差異が1隣接以内であると判別したときには、ステップS35で求められた合計スコアsum_scoreが予め定められた所定の閾値θth1以上であり、かつ、ステップS37で求められた合計スコアmany_scoreが予め定められた所定の閾値θth2以上であるか否か判別する(図37のステップS41)。
ステップS41で、合計スコアsum_scoreおよび合計スコアmany_scoreの一方または両者が、閾値θth1および閾値θth2以上である条件を満足しなかったときには、ステップS39に進んで、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする。そして、この処理ルーチンを終了する。
また、ステップS41で、合計スコアsum_scoreおよび合計スコアmany_scoreの両者が、閾値θth1および閾値θth2以上である条件を満足したときには、ステップS35でラベル付けされたターゲットブロックに対するSADテーブルのうち、「TOP」および「NEXT_TOP」のラベルが付与されたSADテーブルのSAD値のみを用いて、合算SAD値を再算出し、合算縮小SADテーブルを再算出する(ステップS42)。
そして、再作成により求めた再合算縮小SADテーブルにおける最小SAD値の座標位置およびその近傍座標位置の複数個のSAD値を用いて近似曲面補間処理を行う(ステップS43)。この例では、このステップS43では、図20を用いて説明した3×3個の矩形領域のテーブル要素を用いる近似曲面補間処理を実行する。
そして、この近似曲面補間処理の結果として検出される動きベクトルを、グローバル動きベクトルとして、2回目検波の際のサーチ範囲オフセットを設定するために用いるために確保する(ステップS44)。
次に、手ぶれベクトル検出部15は、図38および図39に示す2回目検波を続いて実行する。
すなわち、16個のターゲットブロックについての16個のサーチ範囲を、図12(B)に示したように、ステップS39で確保した1回目検波で得られたグローバル動きベクトル分、つまり、平行移動量分だけオフセットした位置を中心としたものとし、かつ、1回目検波時よりも狭い範囲として設定する(図38のステップS51)。
次に、16個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小SADテーブルおよびブロック毎動きベクトルの算出処理を実行する(ステップS52)。
そして、ステップS52での複数個のターゲットブロックについての縮小SADテーブルの生成が終了すると、1回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「TOP」および「NEXT_TOP」のターゲットブロックについての縮小SADテーブルにおいて、図4に示した(式3)により、サーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算する処理を行い、縮小SADテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小SADテーブルを生成する(ステップS53)。なお、ステップS52の縮小SADテーブルおよびブロック毎動きベクトルの算出処理を、1回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「TOP」および「NEXT_TOP」のターゲットブロックについてのみ行うようにしても良い。
次に、ステップS53で生成した合算縮小SADテーブルにおいて、最小SAD値を検出し、検出した最小SAD値とその近傍の複数SAD値を用いて、前述した近似曲面補間の処理を行って、小数精度の合算動きベクトルを算出する(ステップS54)。
次に、ステップS54で算出された合算動きベクトルを基準にして、1回目検波でマスクフラグが立てられていないターゲットブロックについての縮小SADテーブルのSAD値と、そのブロック毎動きベクトルとから、図10に示した条件の判定を行い、前記のターゲットブロックのそれぞれについての縮小SADテーブルについての前述したような「TOP」、「NEXT_TOP」、「NEAR_TOP」、「OTHERS」のラベル付けおよび当該参照フレームについての合計スコアsum_scoreの算出処理を再度行い、算出されたそれらのラベル付け結果および合計スコアsum_scoreを保持する(ステップS55)。なお、この際にも、新たに「NEAR_TOP」、「OTHERS」のラベル付けがなされたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグが設定される。
次に、ステップS52で算出されたブロック毎動きベクトルのうちの、1回目検波でマスクフラグが立てられていないターゲットブロックについてのブロック毎動きベクトルについて多数決を取り(ステップS56)、その結果としての多数決トップのブロック毎動きベクトルを基準にして、前記マスクフラグが立てられていないターゲットブロックの縮小SADテーブルのSAD値と、そのブロック毎動きベクトルとから、前述したような図9に対応する条件の判定を行い、前述したような「TOP」、「NEXT_TOP」、「NEAR_TOP」、「OTHERS」のラベル付けおよび当該参照フレームについての合計スコアmany_scoreの算出処理を行い、算出されたそれらのラベル付け結果および合計スコアmany_scoreを保持する(ステップS57)。
そして、ステップS54で算出した合算動きベクトルと、ステップS56での多数決処理の結果、検出される多数決トップの動きベクトルとを比較し、両動きベクトルが縮小SADテーブル上の座標位置として、1隣接以内(座標位置が上下左右斜め方向に1位置しか違わない)であるか否か判別する(ステップS58)。
ステップS58で、合算動きベクトルと多数決トップの動きベクトルとの差異が1隣接以内ではないと判別したときには、当該参照フレームのグローバル動きベクトルは信頼性が無いと判断して、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする(ステップS59)。そして、この処理ルーチンを終了する。
また、ステップS58で、合算動きベクトルと多数決トップの動きベクトルとの差異が1隣接以内であると判別したときには、ステップS55で求められた合計スコアsum_scoreが予め定められた所定の閾値θth3以上であり、かつ、ステップS37で求められた合計スコアmany_scoreが予め定められた所定の閾値θth4以上であるか否か判別する(図39のステップS61)。
ステップS61で、合計スコアsum_scoreおよび合計スコアmany_scoreの一方または両者が、閾値θth3および閾値θth4以上である条件を満足しなかったときには、ステップS59に進んで、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする。そして、この処理ルーチンを終了する。
また、ステップS61で、合計スコアsum_scoreおよび合計スコアmany_scoreの両者が、閾値θth3および閾値θth4以上である条件を満足したときには、ステップS55でラベル付けされたターゲットブロックに対するSADテーブルのうち、「TOP」および「NEXT_TOP」のラベルが付与されたSADテーブルのSAD値のみを用いて、合算SAD値を再算出し、合算縮小SADテーブルを再算出する(ステップS62)。
そして、再作成により求めた再合算縮小SADテーブルにおける最小SAD値の座標位置およびその近傍座標位置の複数個のSAD値を用いて近似曲面補間処理を行い、グローバル動きベクトルとしての合算動きベクトルを算出し、保持する(ステップS63)。この例では、このステップS63では、図20を用いて説明した3×3個の矩形領域のテーブル要素を用いる近似曲面補間処理を実行する。
そして、算出された合算動きベクトルにより、当該フレームの静止画についての一つ前フレームに対する相対的な平行移動量を決定し、この決定した平行移動量を積算することにより、1枚目のフレームに対する平行移動量を算出する(ステップS64)。
次に、一つ前のフレームについて同様にして検出されて保持されている合算動きベクトルと、ステップS63で検出された当該フレームの合算動きベクトルとの間の回転角度として、当該フレームの静止画についての一つ前のフレームに対する相対的な回転角度を算出し、この算出した回転角度を積算することにより、1枚目のフレームに対する回転角度を算出する(ステップS65)。
手ぶれベクトル検出部15は、以上により手ぶれによるフレーム単位の平行移動量および回転角度の算出処理を終了し、算出結果の平行移動量および回転角度をCPU1に供給する。そして、算出結果の平行移動量および回転角度が用いられて、回転・平行移動加算部19で、1枚目のフレームに対する重ね合わせの処理が実行される。
なお、上述の説明では、ステップS64およびステップS65では、1枚目のフレームに対する平行移動量および回転角度をも算出するようにしたが、これらのステップS64およびステップS65では、一つ前のフレームに対する相対的な平行移動量および回転角度の算出のみを行うようにして、1枚目のフレームに対する平行移動量および回転角度の算出は、CPU1が行うようにしても良い。
以上で、1つの参照フレームについての手ぶれベクトル検出部15における処理動作は終了となる。
なお、図36および図37、また、図38および図39のフローチャートにおいて、ステップS31〜ステップS34までの処理、また、ステップS51〜ステップS54までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
また、手ぶれベクトル(グローバル動きベクトル)の検出に際しては、上述のようにしてグローバル動きベクトルを確保する処理手法に、さらに、従来から提案されている時間軸方向の動きベクトルの周波数から、グローバル動きベクトルを予測する手法を組み合わせることにより、更なる信頼性並びに精度の向上を図るようにしても良い。
また、上述の例では、再合成縮小SADテーブルは、ステップS35またはステップS55でラベル付けをした各ブロックのうちの「TOP」および「NEXT_TOP」のラベルが付与されたブロックの縮小SADテーブルのSAD値のみを用いるようにしたが、ステップS37またはステップS57でラベル付けした各ブロックのうちの「TOP」および「NEXT_TOP」のラベルが付与されたブロックの縮小SADテーブルのSAD値のみを用いるようにしても良いし、さらには、ステップS35またはステップS55とステップS37またはステップS57の両方でラベル付けをした各ブロックのうちの「TOP」および「NEXT_TOP」のラベルが付与されたブロックの縮小SADテーブルのSAD値を用いて、再合算縮小SADテーブルを生成するようにしても良い。
また、上述の例においては、各ブロック毎動きベクトルに付与したラベルに対応するスコアの合計sum_scoreおよびmany_scoreを、動きベクトルを算出している対象の参照フレームについてのグローバル動きベクトルの評価判定の一つの材料としたが、この合計スコアの代わりに、ブロック毎動きベクトルに付与されたラベルが「TOP」および「NEXT_TOP」の数が所定の閾値以上であるか否かを評価判定の材料とし、ラベルが「TOP」および「NEXT_TOP」の数が所定の閾値以上であれば、高評価であると判定するようにしても良い。
[第2の例]
この実施形態における手ぶれベクトル検出部15における処理動作の流れの第2の例を、図40〜図42のフローチャートを参照して、以下に説明する。この第2の例は、参照フレームについてのブロック毎動きベクトルのうちの、信頼性の高いブロック毎動きベクトルのみを用いて、前述した図5〜図8に示したような手法により、参照フレームについての平行移動量および回転角度を算出するようにする場合である。
この図40〜図42の処理も、一つの参照フレームについての処理であり、この図40〜図42の処理ルーチンが各参照フレームにおいて実行されるものである。この場合に、ステップS71の1回目のサーチ範囲の設定処理は、最初の参照フレームについて設定したら、その後の参照フレームにおいては省略することができる。
まず、1回目検波について説明する。前述の図32に示したように、16個のターゲットブロックについての16個のサーチ範囲について、それぞれのターゲットブロックの中心位置を、それぞれのサーチ範囲の中心としてサーチ範囲のオフセットをゼロに設定すると共に、それぞれのサーチ範囲を、この実施形態において想定される最大範囲に設定する(図40のステップS71)。
次に、16個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小SADテーブルおよびブロック毎動きベクトルの算出処理を実行する(ステップS72)。このステップS72の詳細処理ルーチンは後述する。
そして、16個のターゲットブロックについての縮小SADテーブルの生成が終了すると、16個の縮小SADテーブルにおいて、図4に示した(式3)により、サーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算する処理を行い、縮小SADテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小SADテーブルを生成する(ステップS73)。
次に、生成した合算縮小SADテーブルにおいて、最小SAD値を検出し、検出した最小SAD値とその近傍の複数SAD値を用いて、前述した近似曲面補間の処理を行って、合算動きベクトルを算出する(ステップS74)。
次に、ステップS74で算出された合算動きベクトルを基準にして、16個の縮小SADテーブルのSAD値と、ブロック毎動きベクトルとから、図10に示した条件の判定を行い、16個のターゲットブロックのそれぞれについての縮小SADテーブルについての前述したような「TOP」、「NEXT_TOP」、「NEAR_TOP」、「OTHERS」のラベル付けを行う。このとき、「NEAR_TOP」、「OTHERS」のラベル付けをしたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグを立てる(ステップS75)。
次に、ラベル「TOP」が付与されたターゲットブロックの数が、予め定められた所定の閾値θth5未満であるか否か判別する(ステップS76)。ラベル「TOP」が付与されたターゲットブロックの数が、閾値θth5未満であると判別したときには、ラベル「NEXT_TOP」が付与されたターゲットブロックの数が、予め定められた所定の閾値θth6未満であるか否か判別する(ステップS77)。
このステップS77で、ラベル「NEXT_TOP」が付与されたターゲットブロックの数が、閾値θth6未満であると判別したときには、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする(ステップS78)。そして、この処理ルーチンを終了する。
また、ステップS76でラベル「TOP」が付与されたターゲットブロックの数が、閾値θth5以上であると判別したとき、また、ステップS77でラベル「NEXT_TOP」が付与されたターゲットブロックの数が、閾値θth6以上であると判別したときには、マスクフラグが立っていないラベルが「TOP」および「NEXT_TOP」のターゲットブロックの縮小SADテーブルについて、前述した図17、図20、図23、図27により説明したような近似曲面補間の処理を行って、高精度(小数点精度)のブロック毎動きベクトルを算出する(ステップS79)。
次に、前述の図5および図6を用いて説明したようにして、ステップS79で算出された信頼性の高いブロック毎動きベクトルのみを用いて当該フレームについての前フレームに対する平行移動量の算出を行う(ステップS80)。ここで、算出された平行移動量は、前述の第1の例におけるグローバル動きベクトルに対応するものであり、これは2回目検波の際のサーチ範囲のオフセットの設定に利用される。以上で、1回目検波の処理は終了である。
次に、手ぶれベクトル検出部15は、図41および図42に示す2回目検波を続いて実行する。
すなわち、16個のターゲットブロックについての16個のサーチ範囲を、図12(B)に示したように、ステップS80で確保した1回目検波で得られた平行移動量分だけオフセットした位置を中心としたものとし、かつ、1回目検波時よりも狭い範囲として設定する(図41のステップS81)。
次に、16個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小SADテーブルおよびブロック毎動きベクトルの算出処理を実行する(ステップS82)。
そして、ステップS82での複数個のターゲットブロックについての縮小SADテーブルの生成が終了すると、1回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「TOP」および「NEXT_TOP」のターゲットブロックについての縮小SADテーブルにおいて、図4に示した(式3)により、サーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算する処理を行い、縮小SADテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小SADテーブルを生成する(ステップS83)。なお、ステップS82の縮小SADテーブルおよびブロック毎動きベクトルの算出処理を、1回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「TOP」および「NEXT_TOP」のターゲットブロックについてのみ行うようにしても良い。
次に、ステップS83で生成した合算縮小SADテーブルにおいて、最小SAD値を検出し、検出した最小SAD値とその近傍の複数SAD値を用いて、前述した近似曲面補間の処理を行って、小数精度の合算動きベクトルを算出する(ステップS84)。
次に、ステップS84で算出された合算動きベクトルを基準にして、1回目検波でマスクフラグが立てられていないターゲットブロックについての縮小SADテーブルのSAD値と、そのブロック毎動きベクトルとから、図10に示した条件の判定を行い、前記のターゲットブロックのそれぞれについての縮小SADテーブルについての前述したような「TOP」、「NEXT_TOP」、「NEAR_TOP」、「OTHERS」のラベル付け行うとともに、「NEAR_TOP」、「OTHERS」のラベル付けをしたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグを立てる(ステップS85)。
次に、マスクフラグが立てられていないターゲットブロックの数が、予め定められている所定の閾値θth7未満であるか否か判別し(ステップS86)、所定の閾値θth7未満であると判別したときには、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする(ステップS87)。そして、この処理ルーチンを終了する。
ステップS86で、マスクフラグが立てられていないターゲットブロックの数が、予め定められている所定の閾値θth7以上であると判別したときには、マスクフラグが立っていないラベルが「TOP」および「NEXT_TOP」のターゲットブロックの縮小SADテーブルについて、前述した図17、図20、図23、図27により説明したような近似曲面補間の処理を行って、高精度(小数点精度)のブロック毎動きベクトルを算出する(ステップS88)。
次に、前述の図5および図6を用いて説明したようにして、ステップS88で算出された信頼性の高いブロック毎動きベクトルのみを用いて当該フレームについての前フレームに対する平行移動量(α,β)の算出を行う(図42のステップS91)。
また、前述の図6〜図8を用いて説明したようにして、ステップS88で算出された信頼性の高いブロック毎動きベクトルのみを用いて当該フレームについての前フレームに対する回転角度γの算出を行う(ステップS92)。
次に、ステップS91で求められた平行移動量(α,β)と、ステップS92で求められた回転角度γとを元にして、各ターゲットブロックについての理想的なブロック毎動きベクトルを算出し、その理想的なブロック毎動きベクトルと、実際に算出された各ターゲットブロックについてのブロック毎動きベクトルViとの誤差ERRiを計算するとともに、その総和ΣERRiを算出する(ステップS93)。ここで、誤差ERRiは、図43の(式H)により算出することができる。そして、算出された誤差の総和ΣERRiは、当該フレームの誤差の総和となる。
なお、前述の(式6)について説明したように、複数の被験者による手ぶれによる回転角度の測定値は、非常に小さいことが確認されており、このため、回転行列Rについては、cosγ≒1、sinγ≒γであるとすることができるので、図43のように表すことができるものである。
次に、ステップS93で算出された誤差の総和ΣERRiが、予め定められている所定の閾値θth8未満であるか否か判別し(ステップS94)、所定の閾値θth8未満ではないと判別したときには、ステップS93で算出された各ターゲットブロックについてのブロック毎動きベクトルViの誤差ERRiのうちで、最大値となっているターゲットブロックについてマスクフラグを立てる(ステップS95)。
そして、ステップS95の次には、図41のステップS83に戻り、マスクフラグが立てられたターゲットブロックを除くターゲットブロックについての縮小SADテーブルにおいて、図4に示した(式3)により、サーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算する処理を再度行い、縮小SADテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小SADテーブルを生成する。そして、前述したステップS84以降の処理を繰り返すようにする。
また、ステップS94で、ステップS93で算出された誤差の総和ΣERRiが、所定の閾値θth8未満であると判別したときには、ステップS91およびステップS92で算出された平行移動量(α,β)および回転角度γを、手ぶれ成分として確定し、この2回目検波処理を終了する。
そして、手ぶれベクトル検出部15は、算出結果の平行移動量および回転角度をCPU1に供給する。CPU1は、受け取った算出結果の平行移動量および回転角度から、1枚目のフレームに対する平行移動量および回転角度を算出し、それを回転・平行移動加算部19に渡す。そして、回転・平行移動加算部19では、受け取った平行移動量および回転角度を用いて、1枚目のフレームに対する重ね合わせの処理を実行する。
なお、この第2の例においても、手ぶれベクトル検出部15で、1枚目のフレームに対する平行移動量および回転角度を算出してもよい。
また、この例においても、図40のステップS71〜ステップS74までの処理、および図41のステップS81〜ステップS84までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
また、上述の例では、ブロック毎動きベクトルの信頼性の判定を行うグローバル動きベクトルは、合算動きベクトルを用いるようにしたが、多数決トップの動きベクトルを基準に用いても良い。
なお、1回目検波の場合には、上述した図35に示したような第1の例の方法を用いて、グローバル動きベクトルとしての合算動きベクトルから第2の検波のサーチ範囲オフセットを定め、2回目検波は、図41および図42を用いて説明した第2の例の方法を用いるようにしても良い。
すなわち、1回目検波の場合、元々、各ブロック毎動きベクトルの精度がそれほど期待できないため、図5および図6を用いた平行移動量を求める手法を用いずに、ラベル「TOP」および「NEXT_TOP」のターゲットブロックについてのブロックマッチングの結果から求めたグローバル動きベクトルにより、2回目の検波のサーチ範囲オフセットを定めるようにしても良い。
一般に、手ぶれに回転成分が含まれている場合には、より確度の高い手ぶれの平行移動成分の算出方法として、図5および図6を用いて説明した手法が有効であるが、この手法が活かせるのは、精度の高いブロック毎動きベクトルが得られる2回目以降の検波時であるからである。
なお、1回目検波の後、グローバル動きベクトルや平行移動量のみにより2回目検波のサーチオフセットを定めるのではなく、1回目検波の後、前のフレームのグローバル動きベクトルとの間での回転角度や、前述した図7および図8を用いて説明した回転角度の算出方法により回転角度までも算出しておき、2回目検波のサーチ範囲オフセットを、回転角度にも併せて、各ターゲットブロック毎に独立して設定するようにしても良い。このようにした場合には、よりサーチ範囲を限定することができて、精度や処理速度の向上が期待できる。
また、上述の説明では、1回目検波および2回目検波の両方において、合算動きベクトルに近似するブロック毎動きベクトルを有効なブロック毎動きベクトルとしたが、2回目検波では、1回目検波でマスクフラグが立てられたターゲットブロック以外のすべてのターゲットブロックについてのブロック毎動きベクトルを有効とするようにしてもよい。2回目検波では、各ブロック毎動きベクトルの精度が高く、手ぶれの回転成分まで検出可能であるため、これらは平均化された合算動きベクトルトルと類似するとは限らない場合があるからである。
上述した手ぶれベクトル検出処理は、静止画の場合には、動画に比較して処理時間に余裕がある代わりに精度が要求されるため、非常に有効である。より精度を高めるために、上述のような2回検波ではなく、3回以上の複数回の検波を行うようにしても良い。その場合には、最終回までは、サーチ範囲オフセットを伴うサーチ範囲の絞り込み、および高信頼度のブロック毎動きベクトルの探索を行い、最終回において、例えば図41および図42に示したようにして、平行移動量および回転角度の算出をする。
[ステップS32、S52、S72、S82の処理ルーチン例]
次に、図36のステップS32、図38のステップS52、図40のステップS72および図41のステップS82における各ターゲットブロックについての縮小SADテーブル生成処理およびブロック毎動きベクトル算出の処理ルーチンの例を説明する。
<第1の例>
図44および図45は、ステップS32、S52、S72、S82における各ターゲットブロックについての縮小SADテーブルおよびブロック毎動きベクトル算出処理ルーチンの第1の例を示すものである。
先ず、前述の図32に示したようなサーチ範囲SR内の1つの参照ブロック位置に対応する参照ベクトル(vx、vy)を指定する(ステップS101)。前述したように、(vx,vy)は、ターゲットブロックのフレーム上の位置(サーチ範囲の中心位置である)を基準位置(0,0)としたときに、指定された参照ベクトルにより示される位置を示し、vxは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、vyは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。そして、前述の従来例で述べたのと同様に、ずれ量vx、vyは、画素を単位とした値とされている。
ここで、サーチ範囲の中心位置を前記基準位置(0,0)とし、サーチ範囲を、水平方向には±Rx、垂直方向には±Ryとしたとき、
−Rx≦vx≦+Rx、−Ry≦vy≦+Ry
とされるものである。
次に、ターゲットブロックIo内の1つの画素の座標(x,y)を指定する(ステップS102)。次に、ターゲットブロックIo内の指定された1つの座標(x,y)の画素値Io(x,y)と、参照ブロックIi内の対応する画素位置の画素値Ii(x+vx,y+vy)との差分絶対値αを、前述した(式1)に示したようにして算出する(ステップS103)。
そして、算出した差分絶対値αを、当該参照ブロックIiの参照ベクトル(vx,vy)が指し示すアドレス(テーブル要素)の、それまでのSAD値に加算し、その加算であるSAD値を、当該アドレスに書き戻すようにする(ステップS104)。すなわち、参照ベクトル(vx,vy)に対応するSAD値を、SAD(vx,vy)と表したとき、これを、前述した(式2)、すなわち、
SAD(vx,vy)=Σα=Σ|Io(x,y)−Ii(x+vx,y+vy)|
・・・(式2)
として算出し、当該参照ベクトル(vx,vy)が指し示すアドレスに書き込むようにする。
次に、ターゲットブロックIo内の全ての座標(x,y)の画素について、上記のステップS102〜ステップS104の演算を行なったか否かを判別し(ステップS105)、ターゲットブロックIo内の全ての座標(x,y)の画素については、未だ、その演算は終了していないと判別したときには、ステップS102に戻り、ターゲットブロックIo内の次の座標(x,y)の画素位置を指定し、このステップS102以降の処理を繰り返す。
以上のステップS101〜ステップS105までの処理は、図73に示したフローチャートのステップS1〜ステップS5と全く同様である。
この実施形態では、ステップS105で、ターゲットブロックIo内の全ての座標(x,y)の画素について、上記の演算を行なったと判別したときには、縮小倍率を1/nとして、参照ベクトル(vx,vy)を1/nに縮小した参照縮小ベクトル(vx/n,vy/n)を算出する(ステップS106)。
次いで、参照縮小ベクトル(vx/n,vy/n)の近傍の複数の参照ベクトル、この例では、上述したように4個の近傍参照ベクトルを検知する(ステップS107)。そして、検知した4個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップS104で求めたSAD値から、線形加重分散値として求める(ステップS108)。そして、求めた4個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するSADテーブル要素値に加算する(ステップS109)。
このステップS109が終了すると、注目中の参照ブロックについてのSAD値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル(vx,vy)についての上記のステップS101からステップS109までの演算処理を完了したか否か判別する(図45のステップS111)。
ステップS111で、未だ、上記の演算処理を完了していない参照ベクトル(vx,vy)があると判別すると、ステップS101に戻り、上記の演算処理を完了していない次の参照ベクトル(vx,vy)を設定して、このステップS101以降の処理を繰り返す。
そして、ステップS111で、上記の演算処理を完了していない参照ベクトル(vx,vy)はサーチ範囲内になくなったと判別すると、縮小SADテーブルが完成したとして、当該完成した縮小SADテーブルにおいて、最小値となっているSAD値を検出する(ステップS112)。
次に、当該最小値となっているテーブル要素アドレス(mx,my)のSAD値(最小値)と、その近傍の複数個、この例では、上述したように15個の近傍テーブル要素のSAD値を用いて2次曲面を生成し(ステップS113)、その2次曲面の最小値のSAD値が対応する小数精度の位置を示す最小値ベクトル(px,py)を算出する(ステップS114)。この最小値ベクトル(px,py)は、小数精度の最小テーブル要素アドレスに対応している。
そして、算出した小数精度の位置を示す最小値ベクトル(px,py)をn倍することにより、求めるべく動きベクトル(px×n,py×n)を算出する(ステップS115)。
以上で、1つのターゲットブロックに対する、この実施形態におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図32に示したような、1フレームについて設定した複数個、この例では、16個のターゲットブロックについての縮小SADテーブルおよび動きベクトルを算出する場合、対象とするターゲットブロックを変える毎に、サーチ範囲および縮小倍率1/nを再設定して、上述の図44および図45に示した処理を、各分割領域について繰り返すものである。
なお、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは言うまでもない。
なお、図44および図45のフローチャートにおいて、ステップS101〜ステップS111までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
<第2の例>
上述の第1の例においては、1つの参照ブロック(参照ベクトル)について、そのSAD値を求めた後、そのSAD値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値を求め、分散加算処理を行なうようにした。
これに対して、この第2の例においては、参照ブロック内の各画素の、ターゲットブロックの画素との差分を検出したときに、その差分値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値(SAD値ではなく差分値)を求め、求めた差分値を分散加算処理するようにする。この第2の例によれば、1つの参照ブロック内のすべての画素についての差分演算を終了したときには、縮小SADテーブルが生成されることになる。
図46および図47は、この第2の例による動きベクトル検出処理のフローチャートを示すものである。
図46のステップS121〜ステップS123までの処理は、図44のステップS101〜ステップS103までの処理と全く同様であるので、ここでは、その詳細な説明は省略する。
この第2の例においては、ステップS123で、座標(x,y)の画素についての参照ブロックとターゲットブロック間での差分値αが算出すると、次には、縮小倍率を1/nとして、参照ベクトル(vx,vy)を1/nに縮小した参照縮小ベクトル(vx/n,vy/n)を算出する(ステップS124)。
次に、参照縮小ベクトル(vx/n,vy/n)の近傍の複数の参照ベクトル、この例では、上述したように4個の近傍参照ベクトルを検知する(ステップS125)。そして、検知した4個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき差分値を、前述したように、ステップS123で求めた差分値αから、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、線形加重分散値(差分値)として求める(ステップS126)。
そして、求めた4個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するテーブル要素値に加算する(ステップS127)。
このステップS127が終了したら、ターゲットブロックIo内の全ての座標(x,y)の画素について、上記のステップS122〜ステップS127の演算を行なったか否かを判別し(ステップS128)、ターゲットブロックIo内の全ての座標(x,y)の画素については、未だ、その演算は終了していないと判別したときには、ステップS122に戻り、ターゲットブロックIo内の次の座標(x,y)の画素位置を指定し、このステップS122以降の処理を繰り返す。
ステップS128で、ターゲットブロックIo内の全ての座標(x,y)の画素について、上記の演算を行なったと判別したときには、注目中の参照ブロックについてのSAD値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル(vx,vy)についての上記のステップS121からステップS128までの演算処理を完了したか否か判別する(図47のステップS131)。
ステップS131で、未だ、上記の演算処理を完了していない参照ベクトル(vx,vy)があると判別すると、ステップS121に戻り、上記の演算処理を完了していない次の参照ベクトル(vx,vy)を設定して、このステップS121以降の処理を繰り返す。
そして、ステップS121で、上記の演算処理を完了していない参照ベクトル(vx,vy)はサーチ範囲内になくなったと判別すると、縮小SADテーブルが完成したとして、当該完成した縮小SADテーブルにおいて、最小値となっているSAD値を検出する(ステップS132)。
次に、当該最小値となっているテーブル要素アドレス(mx,my)のSAD値(最小値)と、その近傍の複数個、この例では、上述したように15個の近傍テーブル要素のSAD値を用いて2次曲面を生成し(ステップS133)、その2次曲面の最小値のSAD値が対応する小数精度の位置を示す最小値ベクトル(px,py)を算出する(ステップS134)。この最小値ベクトル(px,py)は、小数精度の最小テーブル要素アドレスに対応している。
そして、算出した小数精度の位置を示す最小値ベクトル(px,py)をn倍することにより、求めるべく動きベクトル(px×n,py×n)を算出する(ステップS135)。
以上で、1つのターゲットブロックに対する、この第2の例におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図32に示したような、1フレームについて設定した複数個、この例では、16個のターゲットブロックについての縮小SADテーブルおよび動きベクトルを算出する場合、対象とするターゲットブロックを変える毎に、サーチ範囲および縮小倍率1/nを再設定して、上述の図46および図47に示した処理を、各分割領域について繰り返すものである。
なお、この第2の例においても、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは言うまでもない。
なお、図46および図47のフローチャートにおいて、ステップS121〜ステップS131までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
<第3の例>
図31に示したように、この実施形態による動きベクトルの検出手法を用いた場合には、参照ベクトルの縮小倍率が1/64の場合でも、全く異なる動きベクトルを出力するような破綻は見られないことから、実質的に1/4096に、SADテーブルを削減可能である。
つまり、1/4096に削減した縮小SADテーブルを用意しておき、縮小倍率1/64で1回目の動きベクトルを算出する。次に、1回目で検出したその動きベクトルを中心にしてサーチ範囲を狭め、2回目の検出を、1回目よりも小さい例えば縮小倍率1/8で行なうようにすればよい。すなわち、1回目と2回目とで縮小倍率を変えて、1回目のベクトル誤差範囲内に収まるように、2回目の縮小倍率を設定すれば、かなりの高精度で、動きベクトル検出が可能である。
この第3の例の場合における動きベクトル検出処理を、図48〜図71のフローチャートを参照しながら説明する。
この図48〜図71に示す第3の例は、基本的な動き検出処理として上述した第1の例を用いている。したがって、図48のステップS141〜ステップS149の処理ステップおよび図49のステップS151〜ステップS155までの処理ステップは、図44のステップS101〜ステップS109の処理ステップおよび図45のステップS111〜ステップS115までの処理ステップと全く同様である。
この第3の例においては、図49のステップS155で動きベクトルを算出したら、そこで処理を終了するのではなく、当該ステップS155で算出した動きベクトルは、1回目の動きベクトルとして、次のステップS156において、この1回目で算出した動きベクトルに基づき、同じ参照フレーム内で、サーチ範囲を絞り、また、参照ベクトルの縮小倍率を、1回目の縮小倍率1/naよりも小さい縮小倍率1/nb(ここで、na>nbである)に変更する。
すなわち、図72に示すように、1回目の処理で設定されたサーチ範囲SR_1において、ターゲットブロックTBについての動きベクトルBLK_Viが算出されると、その算出された動きベクトルBLK_Viから、参照フレームと元フレームとの間で、相関のあるブロック範囲がおおよそ検出できる。そこで、2回目の処理のサーチ範囲SR_2としては、図72の下側に示すように、その相関のあるブロック範囲を中心とした、絞ったサーチ範囲を設定することができる。この場合、図72に示すように、1回目のサーチ範囲SR_1の中心位置POi_1と、2回目のサーチ範囲SR_2の中心位置POi_2との間の位置ずれ(サーチ範囲オフセット)が、1回目で検出された動きベクトルBLK_Viに相当している。
そして、この実施形態では、さらに、1回目よりも参照ベクトルに対する縮小倍率を小さくすることで、より誤差の少ない状態で、2回目の動きベクトルの算出が可能になると期待できる。
こうして、ステップS156で、絞ったサーチ範囲を設定し、新たな縮小倍率を設定したら、1回目と全く同様にして、2回目の動きベクトルの検出処理を、ステップS157〜ステップS158、図50のステップS161〜ステップS168、さらに、図71のステップS171〜ステップS174により実行する。これらのステップの処理は、図44のステップS101〜ステップS109の処理ステップおよび図45のステップS111〜ステップS115までの処理ステップと全く同様である。
こうして、最終的に、ステップS174において、2回目の動きベクトルとして、目的とするブロック毎動きベクトルが得られる。
以上の例は、ブロック毎動きベクトルの検出方法として、前述した第1の例を用い、それを2段階、繰り返した場合であるが、サーチ範囲をさらに絞り、かつ、必要に応じて縮小倍率を変更しながら、2段階以上、繰り返すようにしても、勿論良い。
また、ブロック毎動きベクトルの検出方法としては、前述した第1の例の代わりに、前述した第2の例を用いることができることは言うまでもない。また、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは前述の例と同様である。
なお、図48〜図71のフローチャートにおいて、ステップS141〜ステップS168までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
[回転・平行移動加算部19での加算処理]
以上のようにして、手ぶれによる平行移動成分(フレームの平行移動量)と回転成分(フレームの回転角度)が、静止画のフレーム単位に求められると、回転・平行移動加算部19で、加算(重ね合わせ)処理が行われる。
この実施形態では、前述したように、様々な被写体に対して、ユーザが意図する通りに、いわゆる絵作りを行えるようにするため、この例では、3通りの加算手法を予め撮像装置に用意しておき、ユーザがその3通りの加算手法の中から、意図する絵作りに応じた加算手法を、ユーザ操作入力部3を通じて選択操作をすることにより、選択することができるようにしている。
なお、前述もしたように、この実施形態では、説明の簡単のために、静止画の被写体のみの場合としているが、本質的には動画にも適用可能である。動画の場合、リアルタイム性のため加算枚数に上限はあるが、フレーム毎にこの実施形態の手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現することができる。
この実施形態では、加算(重ね合わせ)手法として、単純加算手法、平均加算手法、トーナメント加算手法の3つの手法を、選択的に実現できるように、図1の例の撮像装置の回転・平行移動加算部19は構成されている。以下に、各手法の詳細を順に説明する。なお、この実施形態では、重ね合わせる画像フレームの枚数は、例えば8枚とされている。
(1)単純加算手法
この単純加算手法の場合における回転・平行移動加算部19と、画像メモリ4との関係を考慮したブロック図を図73に示す。この場合、回転・平行移動加算部19には、回転・平行移動処理部191と、ゲインアンプ192および193と、加算部194とが設けられる。
前述したように、画像メモリ4のフレームメモリ43は、加算後の画像フレームFmを格納するが、順次画像フレームが入力されて来る場合、1枚目の画像フレームF1が基準となるため、1枚目の画像フレームF1は、直接、このフレームメモリ43に書き込まれる。一方、2枚目以降の画像フレームFj(j=2,3,4・・・)は、画像メモリ4のフレームメモリ42に格納された後、回転・平行移動加算部19に供給される。なお、画像フレームの加算結果は平行移動量(α、β)および回転角度γに応じた分のずれ分を見込んだ画像フレームの大きさを想定する必要があるので、画像メモリ4の少なくともフレームメモリ43は、1フレーム分よりも平行移動(α、β)および回転角度γに応じた分のずれ分を見込んだ分だけ広い領域分を備えるメモリとされている。
回転・平行移動処理部191は、CPU1からの1枚目の画像フレームF1に対する平行移動量(α,β)および回転角度γの情報を受けて、2枚目以降の画像フレームFjを平行移動させ、また、回転させる。回転・平行移動処理部191は、1枚目の画像フレームF1に対する相対手ぶれを相殺するように、2枚目以降の画像フレームFjを、フレームメモリ42から読み出すことで平行移動および回転処理をする。
すなわち、回転・平行移動処理部191は、フレームメモリ43からの1枚目または加算結果後の画像フレームFmの画素と重ね合わせるべきフレームメモリ42からの2枚目以降の画像フレームの画素アドレスを、CPU1からの、画像フレームFjについての1枚目の画像フレームに対する平行移動量(α,β)および回転角度γの情報から計算し、フレームメモリ42の、その計算結果のアドレスから画像フレームFjの画素データを読み出す。
なお、この実施形態では、フレームメモリ42からの2枚目以降の画像フレームの加算処理時には、フレームメモリ43からは、1枚目の画像フレームが書き込まれたアドレス位置の画素データが順次に読み出されるものとされる。そして、回転・平行移動処理部191は、フレームメモリ43の読み出しアドレス位置に対応する、2枚目以降の画像フレームについてのフレームメモリ42の画素アドレスを順次に計算するものである。
ゲインアンプ192は、回転・平行移動処理部191からの、平行移動され、また、回転された2枚目以降の画像フレームFjの画素データ(輝度信号成分および色差信号成分)のそれぞれを、ゲイン(乗算係数)w1倍して、加算部194に供給する。また、ゲインアンプ193は、フレームメモリ43からの1枚目あるいは加算後の画像フレームFmの画素データのそれぞれを、ゲイン(乗算係数)w2倍して、加算部194に供給する。
加算部194は、加算後の画像フレームFmの画素データのそれぞれを、フレームメモリ43の同じアドレスに書き戻す(上書きする)。
この実施形態では、読み出された2枚目以降の画像フレームFj(加算画像という)の画素データに対するゲインアンプ192のゲインw1は、常に、w1=1とされる。
一方、フレームメモリ43からの1枚目あるいは加算結果の画像フレームFm(被加算画像という)の画素データに対するゲインアンプ193のゲインw2は、2枚目以降の画像フレームFjに、対応する加算すべき画素があるときと、対応する加算すべき画素が存在しないとき(2枚の画像フレームが平行移動および回転により重なっていない領域であるとき)とで、異なるものとされる。
すなわち、加算画像を回転および平行移動させる結果、被加算画像に加算すべき加算画像の画素が存在しない領域が必ず存在するが、ゲインw2は、加算すべき画素があるときには、w2=1とされる。また、加算すべき画素が無いときには、重ね合わせられる加算画像フレームFjが何枚目であるかにより異なる値となり、j枚目の画像フレームについてのゲインw2は、w2=j/(j−1)とされる。
この実施形態では、このようにすることにより、加算結果の画像において、加算すべき画素が存在している領域と存在していない領域との境界部分における違和感を削減するようにしている。
このようなゲイン制御のため、この実施形態では、回転・平行移動処理部191では、画像フレームFmの画素と重ね合わせるべきフレームメモリ42からの2枚目以降の画像フレームの画素アドレスが、フレームメモリ42にあるか否か、つまり、加算すべき画素があるか無いか、を示す情報EXを、CPU1に供給するようにする。CPU1は、これを受けて、ゲインアンプ193のゲインw2を制御するようにする。
なお、CPU1がゲインアンプ193のゲインw2を制御するのではなく、回転・平行移動処理部191が、画像フレームFmの画素と重ね合わせるべきフレームメモリ42からの2枚目以降の画像フレームの画素アドレスがフレームメモリ42にあるか否かに応じたゲインw2をゲインアンプ193に供給するように構成しても良い。
この単純加算手法の場合における各j枚目の画像フレームについての加算の様子を、図74に示す。図74には、加算部194とフレームメモリ43とが繰り返し使用されて、複数枚、図74の例では8枚の画像フレームが重ね合わされる様子を示している。図74において、丸数字は、何枚目の画像フレームであるかを示しており、また、被加算画像のゲイン(乗算係数)w2のうち、括弧で括った値は、加算画素が存在しない場合の値である。
図55に、この実施形態の撮像装置における、この単純加算手法を回転・平行移動加算部19で実行する場合の処理手順を説明するためのフローチャートを示す。なお、この図55のフローチャートにおける各ステップは、主としてCPU1の制御に基づいてなされるものである。
まず、CPU1は、1枚目の画像フレームをフレームメモリ43に保存するように制御する(ステップS181)。次に、CPU1は、処理対象の画像フレームの枚数を示す変数jを、2枚目を示すj=2にする(ステップS182)。
そして、CPU1は、j枚目の画像フレームをフレームメモリ42に保存するように制御する(ステップS183)。次に、前述したように、CPU1の制御指示の下、手ぶれベクトル検出部15は、1枚目の画像フレームに対するj枚目の画像フレームのグローバル動きベクトルあるいは平行移動量と、回転角度とを算出し、算出した平行移動量および回転角度をCPU1に送る(ステップS184)。
次に、回転・平行移動加算部19は、CPU1からの平行移動量と、回転角度とを受けて、j枚目の画像フレームを、回転および平行移動させながら、フレームメモリ42から読み出す。また、同時に、フレームメモリ43からは1枚目あるいは加算結果の画像フレームを読み出す(ステップS185)。なお、フレーム42から読み出された画像を、ここでは加算画像と称し、また、フレーム43から読み出された画像を被加算画像と称することとする。
次に、回転・平行移動加算部19は、加算画像の画素データと被加算画像の画素データとを、ゲインw1およびw2を両方とも「1」として加算する。ただし、被加算画像のうち加算画像と重ならない領域、すなわち、被加算画像の画素データに対して加算する加算画像の画素データが存在しないときには、加算画像の画素データに対するゲインw1は、w1=0、被加算画像の画素データに対するゲインw2は、w2=j/(j−1)とする(ステップS186)。
そして、回転・平行移動加算部19は、加算結果の画像データを、フレームメモリ43に書き戻す(ステップS187)。
次に、CPU1は、所定の枚数の画像フレームを重ね合わせたか否か判別し(ステップS188)、所定の枚数の重ね合わせを終了していないと判別したときには、処理対象の画像フレームの枚数を示す変数jをインクリメントして、j=j+1にする(ステップS189)。そして、ステップS183に戻り、このステップS183以降の処理を繰り返す。
また、ステップS188で、所定の枚数の重ね合わせを終了したと判別したときには、CPU1は、この図55の処理ルーチンを終了する。
この単純加算手法は、加算画素が存在しない領域を除けば、被加算画像と加算画像とを、輝度信号および色差信号の区別無く、常に両者のゲインを「1」として加算してゆくものであり、加算画像は徐々に明るくなってゆく。
このため、この単純加算手法を用いる場合には、連写を繰り返しながら、途中の加算結果(被加算画像)をモニター表示し、画像が意図した明るさに達した時点で、ユーザが連写を止める、といった撮影モードを実現することができる。
本来ならば長時間露光が必要な低照度の被写体を、カメラのISO感度を抑えながら連写するため、ユーザは、加算画像が徐々に明るくなって行く様子を確認でき、これは長時間露光のイメージと合っている。途中加算画像と同時に、そのヒストグラムをモニターできるようにすれば、なお好適である。また、当然、撮像装置側で自動的に加算枚数を決定しても良い。
(2)平均加算手法
この平均加算手法は、上述した単純加算手法と類似しているが、加算画像および被加算画像についてのゲインw1およびw2の値が、単純加算手法とは異なる。すなわち、この平均加算手法においては、1枚目画像に対する2枚目画像の加算においては、ゲインw1およびw2の値は、ともに1/2としてゲインを掛けて加算するが、j枚目の加算時には、加算画像のゲインw1は、w1=1/j、非加算画像のゲインw2は、w2=(j−1)/jとして加算する。
つまり、加算結果である被加算画像の明るさを、加算枚数に依らず一定にしつつ、j枚の加算画像のそれぞれの重みを等しくするようにする。ただし、平行移動及び回転により、被加算画像の画素と加算するべき加算画像の画素が存在しない場合は、被加算画像の画素データに対するゲインw2を1とすることで、加算結果の明るさを、フレーム全体に渡って維持するようにする。
この平均加算手法の場合における回転・平行移動加算部19と、画像メモリ4との関係を考慮したブロック図を図56に示す。この場合、回転・平行移動加算部19には、回転・平行移動処理部191と、ゲインアンプ192および193と、加算部194とが設けられるのは、図73に示した単純加算手法の場合と同じであるが、ゲインアンプ193および194のゲインw1およびゲインw2を、加算する画像フレームが何枚目であるかにより異なるので、これらゲインw1およびゲインw2の値が、CPU1から供給されるようにされる点が、単純加算手法の場合と異なる。
この平均加算手法の場合における各j枚目の画像フレームについての加算の様子を、図57に示す。図57には、加算部194とフレームメモリ43とが繰り返し使用されて、複数枚、図57の例では8枚の画像フレームが重ね合わされる様子を示している。図57において、丸数字は、何枚目の画像フレームであるかを示しており、また、被加算画像のゲイン(乗算係数)w2のうち、括弧で括った値は、加算画素が存在しない場合の値である。
図57に示すように、j枚目の加算画像のゲインw1は、w1=1/jとされ、また、j枚目の加算における非加算画像のゲインw2は、w2=(j−1)/jとされる。
図58に、この実施形態の撮像装置における、この平均加算手法を回転・平行移動加算部19で実行する場合の処理手順を説明するためのフローチャートを示す。なお、この図58のフローチャートにおける各ステップは、主としてCPU1の制御に基づいてなされるものである。
まず、CPU1は、1枚目の画像フレームをフレームメモリ43に保存するように制御する(ステップS181)。次に、CPU1は、処理対象の画像フレームの枚数を示す変数jを、2枚目を示すj=2にする(ステップS192)。
そして、CPU1は、j枚目の画像フレームをフレームメモリ42に保存するように制御する(ステップS193)。次に、前述したように、CPU1の制御指示の下、手ぶれベクトル検出部15は、1枚目の画像フレームに対するj枚目の画像フレームのグローバル動きベクトルあるいは平行移動量と、回転角度とを算出し、算出した平行移動量および回転角度をCPU1に送る(ステップS194)。
次に、回転・平行移動加算部19は、CPU1からの平行移動量と、回転角度とを受けて、j枚目の画像フレームを、回転および平行移動させながら、フレームメモリ42から読み出す。また、同時に、フレームメモリ43からは1枚目あるいは加算結果の画像フレームを読み出す(ステップS195)。なお、フレーム42から読み出された画像を、ここでは加算画像と称し、また、フレーム43から読み出された画像を被加算画像と称することとする。
次に、回転・平行移動加算部19は、加算画像の画素データに対するゲインw1を、w1=1/jとし、被加算画像の画素データに対するゲインw2を、(j−1)/jとして、加算を実行する。ただし、被加算画像のうち加算画像と重ならない領域、すなわち、被加算画像の画素データに対して加算する加算画像の画素データが存在しないときには、加算画像の画素データに対するゲインw1は、w1=0、被加算画像の画素データに対するゲインw2は、w2=1とする(ステップS196)。
そして、回転・平行移動加算部19は、加算結果の画像データを、フレームメモリ43に書き戻す(ステップS197)。
次に、CPU1は、所定の枚数の画像フレームを重ね合わせたか否か判別し(ステップS198)、所定の枚数の重ね合わせを終了していないと判別したときには、処理対象の画像フレームの枚数を示す変数jをインクリメントして、j=j+1にする(ステップS199)。そして、ステップS193に戻り、このステップS193以降の処理を繰り返す。
また、ステップS198で、所定の枚数の重ね合わせを終了したと判別したときには、CPU1は、この図58の処理ルーチンを終了する。
この平均加算手法を用いるアプリケーションとして、この実施形態の撮像装置では、動被写体が消えて行くギミック(特殊効果)の機能を備えるものである。すなわち、この平均加算手法によれば、1枚目の加算時から画像の明るさは変わらないものの、連写する毎に、画像フレーム内の動いている部分(動被写体)が、少しずつボケて消えて行くような、今までに無い撮影モードが実現できるものである。なお、画像フレームの加算を繰り返す毎に、その加算効果で、画像フレーム内のノイズも無くなって行くが、これは副次的な効果となる。
(3)トーナメント加算手法
単純加算手法や平均加算手法の場合、常に1枚目を基準画像とし、1枚目に対して、2枚目以降の画像の位置合わせをして加算して行く。これに対して、トーナメント加算手法の場合、いずれの画像も等しく扱う。そのため、基準画像を1枚目の画像に限らず、何枚目の画像に設定しても構わない。その代わりに、加算対象の2枚の画像を、いずれも平行移動並びに回転させる必要がある。
このトーナメント加算手法の場合における回転・平行移動加算部19と、画像メモリ4との関係を考慮したブロック図を図59に示す。この場合、回転・平行移動加算部19には、2個の回転・平行移動処理部195および196と、ゲインアンプ197および198と、加算部199とが設けられる。
画像メモリ4には、前述したように、手ぶれベクトル検出部15での手ぶれベクトル検出処理のために、少なくとも2個のフレームメモリ41,42が設けられると共に、画像加算結果の画像フレームが格納されるフレームメモリ43が設けられるが、このトーナメント加算手法のためには、さらに、画像メモリ43には、加算する枚数分の画像フレームを格納することができるように構成されている。
すなわち、このトーナメント加算手法が選択されたときには、撮像装置は、加算する枚数分だけ連写し、そのすべての画像フレームを画像フレーム43に蓄積した上で、基準画像をいずれかに設定し、加算処理を開始する。
以下に説明する例では、8枚の画像フレームを用いてトーナメント加算するようにする。図59において、画像メモリ43内において、丸で囲んで示されるF1〜F8は、連写されて蓄積された8枚の画像フレームを示している。
手ぶれベクトル検出部15により、8枚の画像フレームについての各ブロック毎動きベクトル、グローバル動きベクトルなどは、加算処理が開始される時点では、すべて算出済みであるとする。
しかし、上述したように、手ぶれベクトル検出部15では、直前のフレームとの相対動きベクトルか、1枚目を基準とした動きベクトルしか検出できないため、累積誤差を許すか、設定した基準画像を使って検波し直す必要がある。
図60は、このトーナメント加算手法の概要を示すものである。図60において、丸数字は、8枚の画像フレームF1〜F8に対応しており、この例では、まず、第1段階の加算として、画像フレームF1とF2、画像フレームF3とF4、画像フレームF5とF6、画像フレームF7とF8、の加算を行う。
この第1段階の加算においては、それぞれ加算を行う2枚の画像フレームについて、設定された基準画像に対する相対手ぶれ分だけ、それぞれ回転・平行移動処理部195,196において、平行移動および回転する処理がなされる。
この第1段階の加算が終了したら、当該第1段階での加算結果の画像について、第2段階の加算を行う。この第2段階の加算は、図60の例では、画像フレームF1とF2の加算結果と画像フレームF3とF4の加算結果との加算と、画像フレームF5とF6の加算結果と画像フレームF7とF8の加算結果との加算を行う。この第2段階の加算においては、加算しようとする画像フレームのそれぞれは、基準画像に合致するようにされているので、回転・平行移動処理部195,196においては、平行移動および回転する処理は不要である。
そして、第2段階の加算が終了したら、当該第2段階での加算結果の画像について、第3段階の加算を行う。この第3段階の加算は、図60の例では、画像フレームF1とF2とF3とF4の加算結果と、画像フレームF5とF6とF7とF8の加算結果との加算を行う。この第3段階の加算においては、加算しようとする画像フレームのそれぞれは、基準画像に合致するようにされているので、回転・平行移動処理部195,196においては、平行移動および回転する処理は不要である。
図59に戻った説明をするに、加算処理が開始されると、まず、CPU1は第1段階の加算をすべき2枚の画像フレームを設定し、その設定した画像フレームについての、例えば基準画像に対する平行移動量および回転角度を、回転・平行移動処理部195および196に供給する。
回転・平行移動処理部195および196のそれぞれは、CPU1から受け取った画像フレームの平行移動量および回転角度を用いて、画像メモリ4から、対応する2枚の画像フレームの画像データを、基準画像に対する相対手ぶれを相殺するように、平行移動および回転を伴って読み出す。
そして、回転・平行移動処理部195および196からの2枚の画像フレームは、それぞれゲインアンプ197および198により、それぞれゲインw3倍およびゲインw4倍された後、加算部199において加算される。そして、その加算後の画像データは、画像メモリ4のバッファメモリに書き込まれる。
CPU1は、図60に示した第1段階の加算をすべき他の2枚の画像フレームについて、上述と同様の処理をする。したがって、これに対応して、回転・平行移動処理部195および196が上述と同様にして、指定された他の2枚の画像フレームについての平行移動および回転をしながらの加算を行い、その加算結果を画像メモリ4に格納するようにする。
そして、第1段階の加算が終了すると、CPU1は、第2段階の加算を行うべく、画像メモリ4から読み出すべき画像フレームを、第1段階の加算結果の画像フレームに設定し、平行移動量および回転角度はゼロとして、回転・平行移動処理部195および196に読み出し指示する。
回転・平行移動処理部195および196は、このCPU1からの情報および指示に応じて、第1段階の加算結果の画像フレームの画像データを読み出して、図60に示した第2段階の加算処理をする。
そして、第2段階の加算が終了すると、CPU1は、第3段階の加算を行うべく、画像メモリ4から読み出すべき画像フレームを、第2段階の加算結果の画像フレームに設定し、平行移動量および回転角度はゼロとして、回転・平行移動処理部195および196に読み出し指示する。
回転・平行移動処理部195および196は、このCPU1からの情報および指示に応じて、第2段階の加算結果の画像フレームの画像データを読み出して、図60に示した第3段階の加算処理をする。以上で、この例のトーナメント加算を終了する。
このトーナメント加算手法の場合における8枚の画像フレームについての加算におけるゲインアンプ197,198におけるゲイン(乗算係数)w3、w4、およびその加算処理の流れの様子を、図61に示す。
図61に示した乗算係数w3、w4は、前述した平均加算手法に基づいた例であり、2枚の画像フレームで重なり合う領域では、w3=w4=1/2とされ、また、重なり合わない領域では、w3=1、w4=1とされる。
なお、乗算係数w3,w4は、平均加算手法に基づいた値に限らず、単純加算手法に基づいて値を用いるようにしても良い。
上述の説明においては省略したが、この実施形態のトーナメント加算手法においては、第2階層以降の加算において、第1階層の加算をする2枚の画像について基準画像に対して回転および平行移動をするために、基準画像の領域においては、2枚共に、対応する画素が存在しない画素位置を判定できる仕組みを設けるようにしている。
すなわち、第1階層の加算時に、加算結果の輝度成分Yの画素値が「0」のものを、「1」に値を置き換える。そして、その代わりに、平行移動と回転の結果、第1段階の加算を行う2枚の画像共に、対応する画素が存在しない画素位置の加算結果の輝度成分Yの画素値を「0」とする。
そして、第2階層以降の加算では、2枚共に輝度成分Yの画素値が「0」の場合、加算後の輝度成分Yも「0」にする。全ての画像を加算したとき、必ず全ての画素には有効画素(基準画像の画素)が含まれるため、輝度値が「0」の画素は、基準画像の画素値に置き換るようにする。
このように、輝度成分Yの画素値「0」を無効画素フラグとすることで、画像データのフォーマットを維持したまま、容量を増加させずに、重ね合わせ際の有効画素が存在しない画素の判定フラグを設けることができる。
勿論、上述のような重ね合わせ際の有効画素が存在しない画素位置に対して、無効画素フラグを1ビット別途設けても構わないし、また、輝度成分Y、色差成分Cb/Crに依らず、どの画素値をフラグとして用いても構わない。しかし、コストや画質への影響を鑑みると、上述したこの実施形態の無効画素フラグの手法が最適であると考えられる。
図62および図63に、この実施形態の撮像装置における、上述したトーナメント加算手法を回転・平行移動加算部19で実行する場合の処理手順を説明するためのフローチャートを示す。なお、この図62および図63のフローチャートにおける各ステップは、主としてCPU1の制御に基づいてなされるものである。
まず、CPU1は、1〜8枚目までの画像フレームの画像データを、順次に画像メモリ4のフレームメモリに書き込んで保存する(ステップS201)。次に、CPU1は、1〜8枚目までの画像の中で、基準画像を1枚設定する(ステップS202)。そして、CPU1は、1〜8枚目までの画像フレームについて、基準画像の画像フレームに対する平行移動量および回転角度の算出をしておく(ステップS203)。
次に、CPU1は、第1段階の加算処理を開始し、1枚目と2枚目の画像フレームについての基準画像フレームに対する平行移動量および回転角度の情報の回転・平行移動加算部19を供給する。回転・平行移動加算部19は、1枚目と2枚目の画像フレームの画像データを、CPU1からの、その2枚の画像フレームについての平行移動量および回転角度の情報を元にして、基準画像の画像フレームに対する回転角度および平行移動量を相殺するように、画像メモリ4の対応するフレームメモリから同時に読み出す(ステップS204)。
そして、回転・平行移動加算部19は、CPU1の制御の下、1枚目と2枚目の画像フレームの画像データを読み出しながら、ゲインw3=1/2、ゲインw4=1/2として加算処理を実行し、その加算結果を画像メモリ4のフレームメモリに書き込む(ステップS205)。
そして、ステップS205では、基準画像の画像フレーム領域内の画素位置(加算後の画素データを書き込む画素位置)を順次に設定し、その設定した画素位置のそれぞれについて、1枚目と2枚目の画像フレームの画像データ中から、対応する画素を検索して読み出し、その画素同士を加算するようにするが、1枚目と2枚目の画像フレームのうちで一方の画素が存在しない場合には、当該画素が存在しない方の画像フレームの画像データのゲインは「0」とし、画素が存在する方の画像フレームの画像データのゲインは「1」とする。
さらに、ステップS205では、1枚目と2枚目の画像フレームに、対応する画素が共に存在しない場合には、加算結果の輝度成分Yの画素値は「0」とする。また、対応する画素が存在している場合の画素データの加算結果が「0」となっている場合には、その画素値は「1」に変更しておく。
次に、CPU1は、3枚目と4枚目、5枚目と6枚目、7枚目と8枚目についても、ステップS204およびステップS205の処理を行うように、回転・平行移動加算部19に対して指示を行い、回転・平行移動加算部19がその処理を実行する(図63のステップS211)。
次に、CPU1は、第2段階の加算処理を開始するように、回転・平行移動加算処理部19に指示する。回転・平行移動加算処理部19は、CPU1からの指示に応じて、1枚目と2枚目の画像の加算結果の画像データと、3枚目と4枚目の加算結果の画像データとを、画像メモリ4から、平行移動および回転を行わずに読み出す。そして、ゲインw3およびw4を、共に1/2として、前記2つの画像データの加算を行う(ステップS212)。
そして、このステップS212においては、加算しようとする1枚目と2枚目の画像の加算結果の画素データの輝度成分Y、または、3枚目と4枚目の加算結果の画素データの輝度成分Yの一方が「0」である場合には、加算使用とする2枚の画像のうち、輝度成分Yが「0」である画像の画素データのゲインは「0」とし、他方の画像の画素データのゲインは「1」とする。
また、さらに、ステップS212において、加算しようとする2つの画像の画素データの輝度成分Yが共に「0」の場合には、その加算結果の輝度成分Yの値も「0」とする。
次に、CPU1は、5枚目と6枚目の画像の加算結果の画像データと、7枚目と8枚目の加算結果の画像データとについても、上述のステップS212の処理を行うように、回転・平行移動加算部19に指示し、回転・平行移動加算部19はその処理を実行する(ステップS213)。
次に、CPU1は、第3段階の加算、つまり、1〜4枚目の画像フレームの加算結果と、5〜8枚目の画像フレームの加算結果とについて、上述したステップS212の処理を行うように、回転・平行移動加算部19に指示し、回転・平行移動加算部19はその処理を実行する(ステップS214)。
以上で、この実施形態のトーナメント加算手法による複数枚の画像フレームの加算処理を終了する。
以上説明したこの実施形態のトーナメント加算手法におけるポイントは2つあり、1つは、トーナメントの第1段階(初段)では、基準画像以外は、2枚の加算画像のいずれも、平行移動と回転を伴いながら加算するのに対し、第2段階以降は、平行移動も回転も行わずに加算することである。第1段階の加算が、図62のAの処理に相当し、第段階以降の加算が、図63のBの処理に相当する。
この実施形態のトーナメント加算手法における、もう1つのポイントは、第2段階以降の加算において、第1段階の2枚の画像が、両画像共に画素が存在しない画素位置を、判定できる仕組みを設けた点である。
なお、上述の例では、8枚の画像フレームをトーナメント加算する例を示したが、この実施形態のトーナメント加算手法では、予め連写した画像を画像メモリ4に溜めておくことが重要であり、枚数は重要ではない。ただし、トーナメント加算手法の性質を考慮すると、2のベキ乗で表される加算枚数が好ましい。
この実施形態のトーナメント加算手法のメリットは、2つある。1つは、先述したように、加算しようする全ての画像を撮影しておいてから、任意の基準画像を選択できることである。連写しながら手ぶれベクトルを求めておき、連写中の手ぶれ軌跡の中央に位置するフレームを、基準画像として選択すれば、加算結果画像の有効領域を最も広く取れるというメリットがある。
もう1つのメリットは、各フレームの画像を完全に等価に扱うことができる点である。例えば、既説した平均加算手法の場合も、加算結果における各フレームの比重が等しくなるように、加算係数をフレーム枚数に応じて変化させているが、どうしてもデジタルの丸め誤差が発生する。その結果として、各フレームの比重は完全に同じにはならない。それに対し、この実施形態のトーナメント加算手法の場合は、完全に同じ係数で各フレームを加算するため、丸め誤差の影響に偏りがないのである。
ただし、トーナメント加算手法においては、予め全ての画像をメモリに格納しておく方式のため、大量にメモリを必要とすることと、そのため、連写枚数に上限があり、先述した単純加算手法や平均加算手法のような、無限に加算し続けることはできないという問題がある。
しかし、例えば、ハードディスクのような、ビット単価の極めて安い外部ストレージに、連写した画像を一時保存するアーキテクチャを採れば、上記の問題は回避可能である。
ところで近年、手ぶれだけでなく、動被写体ぶれも防ぐための手法として、手ぶれも動被写体ぶれも発生しにくい、1/60秒程度の短い露光時間で高感度に撮影する、高感度撮影が市場の耳目を集めている。
この場合に問題となるのが、S/Nを抑えながら、どこまでのISO感度に対応できるか、である。通常、感度を向上させると、同時に画像のノイズも目立ってしまうため、デジタルカメラ各社は、様々な手法を用いてノイズ・リダクションを行い、一定水準のS/Nを維持できる、最高ISO感度の数値の大きさを、性能として謳っている。
この実施形態で主題としている静止画の手ぶれ補正も、目的の1つはノイズ・リダクションであり、複数枚の画像の加算を行う際に、動被写体部分を検出し、加算を行わないか、その部分だけ別途サーチし、追跡加算を行うことで、動被写体ぶれにも対応した、見かけ上の高感度なノイズ・リダクションを実現することは可能である。
ランダムノイズを対象とした場合、N枚の画像を加算すれば、統計的にそのノイズ成分はNの平方根の比率に削減される。つまり、ISO3200相当の実力値を持つデジタルカメラにおいて、動被写体に対応した16枚加算を行えば、そのセットのISO感度を、4倍のISO12800として謳うことができるのである。
この場合に求められる加算の方式としては、固定枚数の加算でも、処理時間を多少要しても構わない代わりに、できるだけ高画質なものである。この要件を満たすものが、この実施形態のトーナメント加算手法であり、逆に言うと、トーナメント加算手法に好適なアプリケーションとして、高感度撮影時のISO感度向上が挙げられる。
上述したように、この実施形態の撮像装置は、単純加算手法、平均加算手法、トーナメント加算手法の3つの加算手法を具備している。上記の3つの加算手法のそれぞれには、それぞれに最適なデジタルカメラのアプリケーションがあることは上述した。
この実施形態の撮像装置においては、これら3つの加算方式のうちのいずれを使用するかを、ユーザ操作入力部3を通じて、ユーザが選択することができるので、ユーザは、自分が欲する加算結果に応じて、加算手法を選択することができるというメリットがある。
なお、ユーザが直接的に3種の加算手法のいずれかを選択するのではなく、撮像装置が、上述した3種の加算手法に最適なアプリケーションを選択可能な機能として備えるように構成し、ユーザがいずれかアプリケーションを選択したときに、CPU1が、各アプリケーションに最適な加算手法を自動的に選択するように構成することもできる。
そして、1つのデジタルカメラで、手持ち長時間露光撮影、動被写体が徐々に消えて行くギミック、実力値以上の高感度撮影、の3つの新しいアプリケーションが同時に実装できるというメリットもある。
[画像処理装置の第2の実施形態]
上述した画像処理装置の第1の実施形態としての撮像装置における手ぶれベクトル検出部15においては、図1に示したように、画像メモリ部4は、2枚の画像、つまり元フレームの画像と、参照フレームの画像とが、両方共、フレームメモリに格納されていることを前提にしていた。このため、動きベクトルの検出タイミングは、1フレーム分遅延されることとなる。
これに対して、この第2の実施形態では、撮像素子11からの垂れ流し画像データを参照フレームとする構成として、ラスタスキャンのストリームデータに対して、リアルタイムでSAD値を演算することができるようにしている。
図64に、この第2の実施形態の場合における撮像装置の構成例のブロック図を示す。この図64から分かるように、撮像信号処理系10の構成ブロックおよびその他の構成ブロックは、図1に示した第1の実施形態と全く同様であるが、この第2の実施形態においては、画像メモリ部4は2個のフレームメモリ44および45からなる。フレームメモリ44は、動きベクトル検出処理用であり、フレームメモリ45は、フレーム画像の重ね合わせ用である。
なお、実際的には、書き込みと読み出しとが同時にできないフレームメモリを用いる場合、フレームメモリ44は、周知のように、2枚のフレームメモリを、書き込みと、読み出しで1フレーム毎に交互に切り替えて用いるものである。
手ぶれベクトル検出部15は、後述するように、データ変換部14からの入力画素データを、参照フレームの画素データとすると共に、フレームメモリ43の格納データを元フレームのデータとして、縮小SADテーブル生成処理、ブロック毎動きベクトルの検出処理、合算SADテーブル生成処理およびグローバル動きベクトル(手ぶれベクトル)検出処理を行なう。そして、この第2の実施形態においては、手ぶれベクトル検出部15では、前述と同様に、グローバル動きベクトル(手ぶれの平行移動成分)や平行移動量(α、β)に加えて、参照フレームの元フレームに対する回転角度γを検出する。
なお、この例の場合、手ぶれベクトル検出部15では、常に1フレーム前の画像との相対手ぶれベクトルを求めることになるので、1枚目の基準画像(図3の画像フレーム120参照)との相対手ぶれを算出するために、1枚目からそれまでの手ぶれ成分を積分しておくものである。
そして、回転・平行移動加算部19は、上述した第1の実施形態と全く同様にして、この検出された手ぶれの平行移動成分と回転角度に従って、1フレーム遅延の後、フレームメモリ44に格納されている画像フレームを、切り出しと同時に回転させながら、フレームメモリ45の画像に加算もしくは平均化して行く。この過程を繰り返すことにより、フレームメモリ45には、手ぶれの無い、より高S/Nで、より高解像度の静止画像の画像フレーム120が生成される(図3参照)。
そして、解像度変換部16は、フレームメモリ45のフレーム画像から、CPU1からの制御指示に応じた所定の解像度および所定の画像サイズを切り出して、前述したように、記録撮像画像データとしてコーデック部17に供給すると共に、モニター画像データとしてNTSCエンコーダ18に供給する。
この第2の実施形態では、元フレームがフレームメモリ44に格納されており、参照フレームは、データ変換部14からストリームで入力されて来るものとされる。手ぶれベクトル検出部15は、第1の実施形態では、2個のフレームメモリ41,42に格納された2枚の画像データを用いて、参照ブロックについてのSAD値を求める処理をするようにした。これに対して、この第2の実施形態では、図64に示すように、データ変換部14からのストリーム画像データを参照フレームの画像データとすると共に、フレームメモリ44に格納されている画像データを元フレームの画像データとして、参照ブロックについてのSAD値を求めるようにする。
上述したように、この第2の実施形態では、データ変換部14からのストリーム画像データを参照フレームの画像データとする。このため、ある入力画素に対して、この画素を要素とする参照ブロックが、参照フレーム上に同時に複数存在することになる。図65は、そのことを説明するための図である。
すなわち、参照フレーム102上のサーチ範囲105における入力画素Dinは、例えば、参照ベクトル1071が対応する参照ブロック1061の左側に位置する画素であると共に、参照ベクトル1072が対応する参照ブロック1062の右上に位置する画素となっていることが、この図65から分かる。
したがって、入力画素Dinが参照ブロック1061に属するとした場合には、ターゲットブロック103の画素D1を読み出して、その差分を算出する必要がある。また、入力画素Dinが参照ブロック1062に属するとした場合には、ターゲットブロック103の画素D2を読み出して、その差分を算出する必要がある。
図65および後述の図66では簡単のため、2つの参照ブロックのみを図示しているが、実際上は、入力画素Dinを、その参照ブロック内の画素とする参照ブロックは多数となる。
この第2の実施形態の場合のSAD演算は、入力画素Dinの輝度値Yと、各々の参照ブロック内の入力画素Dinの位置に対応した、ターゲットブロック内の画素の輝度値Yとの差分絶対値を算出し、その算出した差分絶対値を、それぞれの参照ブロックに対応した参照ベクトルに従って、SADテーブルに加算してゆくようにして行なう。
例えば、入力画素Dinが参照ブロック1061に属するとした場合における、ターゲットブロック103の画素D1と入力画素Dinとの差分絶対値は、図66に示すように、SADテーブル108の参照ベクトル1071が対応するSADテーブル要素1092のSAD値に加算して書き込むようにする。また、入力画素Dinが参照ブロック1062に属するとした場合における、ターゲットブロック103の画素D2と入力画素Dinとの差分絶対値は、図66に示すように、SADテーブル108の参照ベクトル1072が対応するSADテーブル要素1092のSAD値に加算して書き込むようにする。
したがって、サーチ範囲内の全ての領域の入力画素が入力されて処理が終了したときには、SADテーブルが完成することになる。
図66の説明は、従来手法に、リアルタイムSAD算出処理を適用した場合である。この第2の実施形態においては、図65において、SADテーブル108の参照ベクトル1071または1072が対応するSADテーブル要素1091または1092のSAD値として、算出した差分絶対値のそれぞれを、加算して書き込むのではなく、前述した第1の実施形態のように、参照ベクトル1071,1072を縮小倍率1/nで縮小した参照縮小ベクトルを算出し、その参照縮小ベクトルの近傍の複数の参照ベクトルに、前記算出した差分絶対値から、それぞれを分散加算するための分散加算値を求め、求めた分散加算値を、前記近傍の複数の参照ベクトルに対応するSAD値に加算するようにするものである。
SADテーブル(縮小SADテーブル)が完成した後の正確な動きベクトルを算出するための処理は、この第2の実施形態においても、前述した第1の実施形態で述べた手法と全く同様にして、2次曲面や、水平方向および垂直方向の3次曲線を用いた手法を用いることができる。
この第2の実施形態の場合の手ぶれベクトル検出部15における、前記図36のステップS32、図38のステップS52、図40のステップS72および図41のステップS82における各ターゲットブロックについての縮小SADテーブル生成処理およびブロック毎動きベクトル検出処理の動作のフローチャートを図67および図68に示す。
先ず、手ぶれベクトル検出部15では、入力画像のフレーム(参照フレーム)の任意の位置(x,y)の画素データDin(x,y)を受け取る(ステップS221)。次に、当該画素の位置(x,y)を含む複数の参照ブロックの一つに対応する参照ベクトル(vx,vy)を設定する(ステップS222)。
次に、設定された参照ベクトル(vx,vy)の参照ブロックIiの当該画素値Ii(x,y)と、これに対応するターゲットブロックIo内の画素値Io(x−vx,y−vy)との差分の絶対値αを算出する(ステップS223)。すなわち、差分絶対値αは、
α=|Io(x−vx,y−vy)−Ii(x,y)| ・・・(式4)
として算出される。
次に、縮小倍率を1/nとして、参照ベクトル(vx,vy)を1/nに縮小した参照縮小ベクトル(vx/n,vy/n)を算出する(ステップS224)。
次いで、参照縮小ベクトル(vx/n,vy/n)の近傍の複数の参照ベクトル、この例では、上述したように4個の近傍参照ベクトルを検知する(ステップS225)。そして、検知した4個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値(差分絶対値)を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップS223で求めた差分絶対値αから、線形加重分散値として求める(ステップS226)。そして、求めた4個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するSADテーブル要素値に加算する(ステップS227)。
次に、入力画素Din(x,y)を含む参照ブロックの全てについての上記ステップS222〜ステップS227の演算を行なったか否か判別し(ステップS228)、当該入力画素Din(x,y)を含む他の参照ブロックがあると判別したときには、ステップS222に戻り、当該入力画素Dinを含む他の参照ブロック(vx,vy)を設定し、このステップS222〜ステップS227の処理を繰り返す。
また、ステップS228で、入力画素Din(x,y)を含む参照ブロックの全てについての上記ステップS222〜ステップS227の演算を行なったと判別したときには、サーチ範囲内の全ての入力画素Dinについて、上記の演算ステップの処理を終了したか否か判別し(図68のステップS231)、終了していないと判別したときには、ステップS221に戻り、サーチ範囲内の次の入力画素Dinを取り込み、このステップS221以降の処理を繰り返す。
そして、ステップS231で、サーチ範囲内の全ての入力画素Dinについて、上記の演算ステップの処理を終了したと判別すると、縮小SADテーブルが完成したとして、当該完成した縮小SADテーブルにおいて、最小値となっているSAD値を検出する(ステップS232)。
次に、当該最小値となっているテーブル要素アドレス(mx,my)のSAD値(最小値)と、その近傍の複数個、この例では、上述したように15個の近傍テーブル要素のSAD値を用いて2次曲面を生成し(ステップS233)、その2次曲面の最小値のSAD値が対応する小数精度の位置を示す最小値ベクトル(px,py)を算出する(ステップS234)。この最小値ベクトル(px,py)は、小数精度の最小テーブル要素アドレスに対応している。
そして、算出した小数精度の位置を示す最小値ベクトル(px,py)をn倍することにより、求める動きベクトル(px×n,py×n)を算出する(ステップS235)。
なお、この例においても、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは前述の例と同様である。
また、前述の第1の実施形態において、図48〜図71のフローチャートを参照しながら説明した第3の例と同様にして、この第2の実施形態においても、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、2段階以上、縮小SADテーブルを用いた動きベクトル検出処理を繰り返すようにしても、勿論良い。
この第2の実施形態のメリットは、フレームメモリを、第1の実施形態に比べて1枚分削減できることと、フレームメモリに入力画像を格納する時間を短縮できることである。メモリ削減の効果は言うまでもないが、処理時間の短縮も、近年、重要視されて来ている。
[第3の実施形態]
上述の第2の実施形態では、入力画像に対し、常に1フレーム前の画像との比較によって、手ぶれベクトルと回転角度を求める方式であったが、前述もしたように、実際には、図3に示したように、1枚目を基準として、以降のフレームを足し合わせるため、動きベクトル検出も1枚目を基準にする方が誤差は小さくなる。第3の実施形態は、この点を考慮したものである。
図69に、この第3の実施形態による撮像装置の構成例のブロック図を示す。
すなわち、この図69の例においては、画像メモリ部4には、図64の第2の実施形態におけるフレームメモリ44およびフレームメモリ45に加えて、フレームメモリ46を設ける。そして、データ変換部14からの画像データは、フレームメモリ44とフレームメモリ46とに書き込むようにする。
そして、この第3の実施形態においては、フレームメモリ46を、ターゲットとなる1枚目のフレーム(元フレームおよび基準画像のフレーム)格納用として用いて、常に、この画像に対する入力画像の参照ベクトルを算出するシステムの構成を示す。この構成においても、フレームメモリ45に加算画像結果が格納される。
この例においても、基準となる1枚目のフレームの画像データは、図69において破線で示すように、フレームメモリ45にも書き込むようにする。
そして、2枚目以降の画像フレームは、フレームメモリ44に書き込むと共に、手ぶれベクトル検出部15に供給する。手ぶれベクトル検出部15では、データ変換部14からの2枚目以降の画像フレームのそれぞれと、フレームメモリ46から読み出された1枚目の画像データとの間の相対的な手ぶれベクトルの検出を行うと共に、回転角度の検出を行う。
手ぶれベクトル検出部15は、検出した1枚目の画像フレームに対する2枚目以降の画像フレームのそれぞれについての相対的な手ぶれベクトルと回転角度の情報をCPU1に供給する。
そして、フレームメモリ44に格納されている2枚目以降の画像は、算出された1枚目のフレームの基準画像との相対手ぶれ成分を相殺するように、CPU1の制御により、フレームメモリ44から読み出されて、回転・平行移動加算部19に供給される。そして、回転・平行移動加算部19では、CPU1からの制御信号により、1枚目の基準画像フレームに対する相対回転角度に応じて2枚目以降の画像フレームのそれぞれが回転させられて、フレームメモリ46から読み出された画像フレームに対して加算もしくは平均化される。その加算もしくは平均結果の画像フレームは、フレームメモリ46に書き戻される。
そして、フレームメモリ46の画像フレームのデータは、CPU1の制御指示に応じた所定の解像度および所定の画像サイズで切り出されて解像度変換部16に供給される。そして、解像度変換部16は、前述したように、記録撮像画像データとしてコーデック部17に供給すると共に、モニター画像データとしてNTSCエンコーダ18に供給する。
なお、上述の第3の実施形態において、入力画像の1フレーム目を基準画像として、無限加算もしくは無限平均加算も可能なシステムを示したが、もしメモリ容量がふんだんに存在するか、記録再生装置部5への一時的な退避が許されるならば、予め加算対象の画像を全て保存しておき、それらをトーナメント加算手法による加算、もしくは平均加算手法による加算をしてゆく方法を採用しても良い。
[第6の実施形態]
以上説明した第1〜第3の実施形態によるセンサレス手ブレ補正と、現存技術である光学手ぶれ補正とを組み合わせることによって、より高い効果が得られる。
冒頭で説明したように、ジャイロセンサを用いる光学手ぶれ補正は、大まかな補正を得意としており、また、回転補正が難しいのに対し、ブロックマッチングを使用したセンサレス手ブレ補正は、回転補正も含めた精度は高いが、サーチ範囲が広くなると、SADテーブルのコストが急上昇するか、この実施形態の手法を用いたとしても、複数段階の動き検出処理による場合には処理時間を要するからである。
したがって、光学手ぶれ補正で大まかに補正して、センサレベル手ぶれ補正のための動きベクトル検出用のサーチ範囲を狭め、そのサーチ範囲において、動きベクトルを算出して、センサレス手ブレ補正をかけることにより、低コスト、高精度、高速の手ぶれ補正システムが実現できる。
[実施形態の効果]
上述の第1〜第3の実施形態のブロックマッチング手法を用いたセンサレス手ぶれ補正手法は、これまで提案されている、センサレス静止画手ぶれ補正技術に対しては、コスト、精度、処理時間、ロバスト性の、いずれにおいても優位に立つ。
現在市場に出回っている静止画の手ぶれ補正の全ては、ジャイロセンサとレンズシフト等の光学補正を組み合わせて用いたシステムであるが、誤差が大きく、満足のいく画質ではなかった。これに対して、この発明による手法により、センサや機構部分を無くした、低コストかつ高精度の手ぶれ補正が実現する。
[その他の変形例]
上述の実施形態の説明では、参照ベクトルに対する縮小倍率は水平方向と垂直方向とで同一としたが、水平方向と、垂直方向とで、縮小倍率を異ならせるようにしても良いことは前述した通りである。
また、上述の実施形態では、参照ブロックおよびターゲットブロック内の全ての画素についてSAD値を求めるようにしたが、例えばk個(kは自然数)おきの画素のみを用いてSAD値を求めるようにしても良い。
また、リアルタイム処理の動きベクトル検出システムでは、演算コストと処理時間削減を目的として、ターゲットブロック内の代表点のみを参照ブロック内でサーチする、SAD演算がしばしば行われている。
すなわち、図70に示すように、ターゲットブロック103を、例えば横×縦=n×m個(n、mは1以上の整数)からなる複数画素毎に分割し、その分割単位である複数画素のうちの1点の画素を代表点TPとする。そして、SAD演算においては、ターゲットブロック103については、このようにして定めた複数個の代表点TPのみを使用する。
一方、参照ブロック106では全画素をSAD値演算の対象とするもので、ターゲットブロック103の一つの代表点TPに対しては、一つの参照ブロック106において、代表点TPが設定される分割単位であるn×m個からなる複数画素の領域ARに含まれる全画素を使用する。
そして、ターゲットブロック103と、一つの参照ブロック106との間においては、ターゲットブロック102の各代表点TPの画素値と、参照ブロック106の、各代表点TPに対応するそれぞれの領域ARに含まれるn×m個からなる複数の画素のそれぞれの画素値との差分の合計が求められ、そして、求められた代表点TPについての差分の合計が、ターゲットブロック103のすべての代表点TPについて合計されることになる。これが、SADテーブルの一つの要素値となる。
そして、ターゲットブロック103についてのサーチ範囲のすべての参照ブロックについて、上記と同様の代表点TPを用いた差分演算が行われて、SADテーブルが生成されることになる。ただし、この例の場合には、サーチ範囲に設定する複数個の参照ブロックは、前述した分割単位であるn×m個からなる複数画素毎、あるいは当該複数画素の整数倍毎にずれたものとされる。
上述のようにターゲットブロックについて代表点を用いるようにする場合には、SAD値を算出する際のターゲットブロックについてのメモリアクセスは、参照ブロックの領域ARの複数画素毎に対して、一つの代表点TPの1回でよくなり、メモリアクセス数を大幅に少なくすることができる。
また、代表点TPのみを用いる場合には、ターゲットブロックのデータとしては、ブロック内の全画素のうちの代表点TPの画素データのみを記憶すればよいので、元フレーム(ターゲットフレーム)のターゲットブロックのデータを記憶するフレームメモリの容量を削減することができる。
また、フレームメモリとは別に、小規模な代表点メモリ(SRAM)をローカルで持ち、当該ローカルメモリに元フレーム(ターゲットフレーム)のターゲットブロックのデータを保持するようにすることにより、画像メモリ4(DRAM)の帯域削減を図っても良い。
ターゲットブロックについて代表点を用いる場合の処理に関する以上の説明は、図71〜図73を用いて説明した手法におけるものについてであるが、図65〜図68を用いて説明した第2の実施の形態における手法の場合にも適用できることは言うまでもない。
この第2の実施形態における手法において、ターゲットブロックについて代表点TPのみを用いる場合には、入力される参照フレームの画素(入力画素)ごとに、サーチ範囲の全範囲において、当該入力画素を含む領域AR(当該画素の位置は領域ARにおいて同じではない)を備えるすべての参照ブロックを検出し、その検出したすべての参照ブロックのそれぞれにおける領域ARに対応するターゲットブロックの代表点を判定する。
そして、その判定結果として得られる複数個の代表点の画素値を、元フレーム(ターゲットフレーム)の画像データを記憶するメモリからそれぞれ読み出して、その代表点の画素値と当該入力画素との差分をそれぞれ演算し、その演算結果を、SADテーブルにおいて、対応する参照ブロック(参照ベクトル)の座標位置に累積するようにする。
この場合には、メモリアクセスは、ターゲットブロックの代表点のみを読み出すだけであるので、メモリアクセス数を大幅に削減することができるものである。
なお、代表点を用いる処理は、上述した縮小SADテーブルを用いる場合にも適用できることは言うまでもない。
なお、上述の実施形態では、画素の差分値およびSAD値は、画素の輝度値Yのみを用いて演算するものとしたが、動ベクトル検出のために、輝度値Yだけでなく、色差成分Cb/Crを用いてもよい。また、データ変換部14で輝度値Yおよび色差成分Cb/Crに変換される前のRAWデータを対象として、動きベクトル検出処理を行ってもよい。
また、前述もしたが、手ぶれベクトル検出部15は、ハードウエア処理による構成とする場合に限定されるものではなく、ソフトウエアで実現しても良い。
この発明による画像処理装置の第1の実施形態の構成例を示すブロック図である。 この発明による画像処理方法の実施形態の概要を説明するために用いる図である。 この発明による画像処理方法の実施形態の概要を説明するために用いる図である。 この発明による画像処理方法の実施形態の概要を説明するために用いる図である。 この発明による画像処理方法の実施形態においてフレームの手ぶれの平行移動成分を算出する処理を説明するために用いる図である。 この発明による画像処理方法の実施形態においてフレームの手ぶれの平行移動成分を算出する処理を説明するために用いる図である。 この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。 この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。 この発明による画像処理方法の実施形態の概要を説明するための図である。 この発明による画像処理方法の実施形態の概要を説明するために用いる図である。 この発明による画像処理方法の実施形態の概要を説明するために用いるフローチャートを示す図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを複数段階に渡って算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。 この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理例の処理性能を説明するための図である。 この発明による画像処理方法の実施形態の概要を説明するための図である。 この発明による画像処理方法の実施形態の特徴を、従来の手法と比較して説明するために用いる図である。 この発明による画像処理方法の実施形態の特徴を、従来の手法と比較して説明するために用いる図である。 この発明による画像処理方法の実施形態の特徴を、従来の手法と比較して説明するために用いる図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第1の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するための図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第1の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第1の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第2の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第2の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するために用いる図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の構成例を示すブロック図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の構成例を説明するための図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の処理例を説明するためのフローチャートを示す図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の構成例を示すブロック図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の構成例を説明するための図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の処理例を説明するためのフローチャートを示す図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の構成例を示すブロック図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の構成例を説明するための図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の処理例を説明するためのフローチャートを示す図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の処理例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態における回転・平行移動加算部19の処理例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第3の実施形態の構成例を示すブロック図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理を説明するための図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理を説明するための図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第3の実施形態の構成例を示すブロック図である。 この発明による画像処理方法の他の例を説明するために用いる図である。 ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。 ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。 ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。 ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。
符号の説明
101…元フレーム、102…参照フレーム、103…ターゲットブロック、105…サーチ範囲、106…参照ブロック、107…参照ベクトル、15…手ぶれ動きベクトル検出部、41〜45…フレームメモリ、TBLi…SADテーブル、SUM_TBL…合算SADテーブル、TBLs…縮小SADテーブル、TBLo…従来のSADテーブル、RV…参照ベクトル、CV…参照縮小ベクトル、NV1〜NV4…近傍参照ベクトル、BLK_Vi…ブロック毎動きベクトル、SUM_V…合算動きベクトル

Claims (28)

  1. 画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
    前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
    前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角を算出する回転角算出手段と、
    前記平行移動量算出手段で算出された平行移動量と、前記回転角算出手段で算出された回転角とを用いて、複数枚の画面を重ね合わせる回転・平行移動加算手段と、
    を備えることを特徴とする画像処理装置。
  2. 請求項1に記載の画像処理装置において、
    前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを算出するグローバル動きベクトル算出手段と、
    前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
    を備え、
    前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満である前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
    ことを特徴とする画像処理装置。
  3. 請求項1に記載の画像処理装置において、
    前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成手段と、
    前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
    を備え、
    前記平行移動量算出手段および前記回転角算出手段においては、前記評価手段で付与された評価値が高い複数個の前記ブロック毎動きベクトルのみから前記平行移動量および前記回転角を算出する
    ことを特徴とする画像処理装置。
  4. 請求項2または請求項3に記載の画像処理装置において、
    前記ブロック毎動きベクトル算出手段は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
    前記差分絶対値和算出手段で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成手段と、
    前記差分絶対値和テーブルのそれぞれから前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを算出する手段と、
    を備え、
    前記グローバル動きベクトル生成手段は、
    前記複数の差分絶対値和テーブルのそれぞれの前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
    前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記グローバル動きベクトルを検出する手段と、
    を備えることを特徴とする画像処理装置。
  5. 請求項1に記載の画像処理装置において、
    前記ブロック毎動きベクトル算出手段は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
    前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
    前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
    前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
    を備え、
    前記縮小差分絶対値和テーブル生成手段は、
    前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
    前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、
    前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
    を備えることを特徴とする画像処理装置。
  6. 請求項1に記載の画像処理装置において、
    前記ブロック毎動きベクトル算出手段は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分を求める差分算出手段と、
    前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
    前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての縮小差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
    前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
    を備え、
    前記縮小差分絶対値和テーブル生成手段は、
    前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
    前記差分算出手段で算出された前記参照ブロックのそれぞれについての前記差分値から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分値のそれぞれを算出する分散加算値算出手段と、
    前記分散加算値算出手段で算出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分値を、それまでの前記近傍の複数の前記参照ベクトルに対応する前記差分絶対値和に加算する加算手段と、
    を備えることを特徴とする画像処理装置。
  7. 請求項1に記載の画像処理装置において、
    前記ブロック毎動きベクトル算出手段における前記ブロックマッチングの結果から前記参照画面全体についてのグローバル動きベクトルを算出するグローバル動きベクトル算出手段を設け、
    前記ブロック毎動きベクトル算出手段では、一つの前記参照画面についての前記ブロックマッチングの処理を複数回、各回における前記サーチ範囲を、その前の回のブロックマッチングの結果から求められる前記グローバル動きベクトル算出手段で算出される前記グローバル動きベクトルに応じてオフセットさせた範囲とすると共に、前の回のサーチ範囲よりも狭めた範囲として実行し、
    前記平行移動量算出手段および前記回転角算出手段は、前記ブロック毎動きベクトル算出手段における最終回のブロックマッチングにより得られる複数個のブロック毎動きベクトルから、前記平行移動量および前記回転角を算出する
    ことを特徴とする画像処理装置。
  8. 請求項7に記載の画像処理装置において、
    各回のブロックマッチングの結果から求められる前記参照画面全体についてのグローバル動きベクトルを用いて、当該回のブロックマッチングで求められたブロック毎動きベクトルのそれぞれを評価する評価手段を備え、
    前記グローバル動きベクトル算出手段では、前記評価手段における評価により信頼性が低いとされたブロック毎動きベクトルが得られたターゲットブロックについては、次回のグローバル動きベクトルの算出の際には、計算対象から外すようにし、
    前記平行移動量算出手段および前記回転角算出手段においては、前記ブロック毎動きベクトル算出手段における最終回のブロックマッチングにより得られる複数個のブロック毎動きベクトルのうちの、前記計算対象から外されたターゲットブロック以外のターゲットブロックについてのブロック毎動きベクトルのみから前記平行移動量および前記回転角を算出する
    ことを特徴とする画像処理装置。
  9. 請求項7に記載の画像処理装置において、
    各回のブロックマッチングの結果から求められる前記参照画面全体についてのグローバル動きベクトルを用いて、当該回のブロックマッチングで求められた複数のブロック毎動きベクトルのそれぞれを評価する評価手段を備え、
    前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満の前記参照画面は、前記回転・平行移動加算手段において重ね合わせる画面から排除する
    ことを特徴とする画像処理装置。
  10. 請求項7に記載の画像処理装置において、
    各回のブロックマッチングの結果から求められる前記参照画面全体についてのグローバル動きベクトルを用いて、当該回のブロックマッチングで求められた複数のブロック毎動きベクトルのそれぞれを評価する評価手段を備え、
    前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が所定数以上であるときには、当該評価値が高い前記複数のブロック毎動きベクトルから、当該回のグローバル動きベクトルを再算出し、前記再算出したグローバル動きベクトルに基づいてその次の回のサーチ範囲の前記オフセットを決める
    ことを特徴とする画像処理装置。
  11. 請求項7〜請求項10に記載の画像処理装置において、
    前記ブロック毎動きベクトル算出手段は、
    前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲に対応して複数生成する差分絶対値和テーブル生成手段と、
    前記差分絶対値和テーブル生成手段で生成された前記複数の差分絶対値和テーブルのそれぞれから、前記ブロック毎動きベクトルのそれぞれを算出する手段と、
    を備えると共に、
    前記グローバル動きベクトル算出手段は、
    前記複数のサーチ範囲のそれぞれにおいて前記差分絶対値和算出手段で算出された前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
    前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記元画面に対する前記参照画面の前記グローバル動きベクトルを算出する算出手段と、
    を備えることを特徴とする画像処理装置。
  12. 請求項1〜請求項11のいずれかに記載の画像処理装置において、
    前記平行移動量算出手段で算出された前記平行移動量および前記回転角算出手段で算出された前記回転角に対する、前記ブロック毎動きベクトルのそれぞれが示す平行移動量および回転角の誤差を求める誤差算出手段と、
    前記誤差算出手段で求めた前記誤差の前記複数のブロック毎動きベクトルについての総和が所定の閾値未満であるか否かを判定する判定手段と、
    前記判定手段で、前記複数のブロック毎動きベクトルについての総和が所定の閾値未満であるときに、前記回転・平行移動加算手段における処理を実行するように制御する制御手段と
    を設けることを特徴とする画像処理装置。
  13. 請求項12に記載の画像処理装置において、
    前記判定手段で、前記複数のブロック毎動きベクトルについての総和が所定の閾値以上であるときには、前記誤差算出手段で求められた前記誤差が最大の前記ブロック毎動きベクトルを排除して、前記平行移動量算出手段および前記回転角算出手段による前記平行移動量および回転角を再算出する
    ことを特徴とする画像処理装置。
  14. 請求項1〜請求項13のいずれかに記載の画像処理装置において、
    前記回転・平行移動加算手段では、前記複数枚の画面を、単純加算する
    ことを特徴とする画像処理装置。
  15. 請求項1〜請求項13のいずれかに記載の画像処理装置において、
    前記回転・平行移動加算手段では、前記複数枚の画面を、平均値加算する
    ことを特徴とする画像処理装置。
  16. 請求項1〜請求項13のいずれかに記載の画像処理装置において、
    前記回転・平行移動加算手段では、前記複数枚の画面を、トーナメント加算する
    ことを特徴とする画像処理装置。
  17. 撮像部と、
    前記撮像部からの前記撮像画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
    前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
    前記ブロック毎動きベクトル算出手段で検出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角を算出する回転角算出手段と、
    前記平行移動量算出手段で算出された平行移動量と、前記回転角算出手段で算出された回転角とを用いて、前記撮像部からの前記撮像画像の複数枚の画面を重ね合わせる回転・平行移動加算手段と、
    前記回転・平行移動加算手段で重ね合わされた撮像画像のデータを記録媒体に記録する記録手段と、
    を備えることを特徴とする撮像装置。
  18. 請求項17に記載の撮像装置において、
    前記回転・平行移動加算手段は、
    前記複数枚の画像を単純加算する単純加算手段と、
    前記複数枚の画像を平均値加算する平均値加算手段と、
    前記複数枚の画像をトーナメント加算するトーナメント加算手段と、
    前記単純加算手段と、前記平均値加算手段と、前記トーナメント加算手段と、
    のいずれかを選択する選択手段と、
    を備え、
    前記単純加算手段、前記平均値加算手段または前記トーナメント加算手段のいずれを前記回転・平均移動加算手段で行わせるかのユーザ選択操作入力を受け付けるユーザ入力受付手段と、
    前記ユーザ入力受付手段で受け付けられたユーザ選択操作入力に応じて、前記選択手段制御する制御手段と、
    を設けることを特徴とする画像処理装置。
  19. 画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出工程と、
    前記ブロック毎動きベクトル算出工程で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出工程と、
    前記ブロック毎動きベクトル算出工程で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角を算出する回転角算出工程と、
    前記平行移動量算出工程で算出された平行移動量と、前記回転角算出工程で算出された回転角とを用いて、複数枚の画面を重ね合わせる回転・平行移動加算工程と、
    を備えることを特徴とする画像処理方法。
  20. 請求項19に記載の画像処理方法において、
    前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成工程と、
    前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価工程と、
    を備え、
    前記評価工程で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満である前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
    ことを特徴とする画像処理方法。
  21. 請求項20に記載の画像処理方法において、
    前記ブロック毎動きベクトル算出工程は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出工程と、
    前記差分絶対値和算出工程で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成工程と、
    前記差分絶対値和テーブルのそれぞれから前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを算出する工程と、
    を備え、
    前記グローバル動きベクトル生成工程は、
    前記複数の差分絶対値和テーブルのそれぞれ前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成工程と、
    前記合算差分絶対値和テーブル生成工程で生成された前記合算差分絶対値和テーブルから、前記グローバル動きベクトルを検出する工程と、
    を備えることを特徴とする画像処理方法。
  22. 請求項20に記載の画像処理方法において、
    前記ブロック毎動きベクトル算出工程は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出工程と、
    前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得工程と、
    前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成工程と、
    前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する工程と、
    を備え、
    前記縮小差分絶対値和テーブル生成工程は、
    前記参照縮小ベクトル取得工程で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出工程と、
    前記差分絶対値和算出工程で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出工程で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出工程と、
    前記分散差分絶対値和算出工程で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算工程と、
    を備えることを特徴とする画像処理方法。
  23. 請求項20に記載の画像処理方法において、
    前記ブロック毎動きベクトル算出工程は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分を求める差分算出工程と、
    前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得工程と、
    前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての縮小差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成工程と、
    前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する工程と、
    を備え、
    前記縮小差分絶対値和テーブル生成工程は、
    前記参照縮小ベクトル取得工程で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出工程と、
    前記差分算出工程で算出された前記参照ブロックのそれぞれについての前記差分値から、前記近傍参照ベクトル検出工程で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分値のそれぞれを算出する分散加算値算出工程と、
    前記分散加算値算出工程で算出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分値を、それまでの前記近傍の複数の前記参照ベクトルに対応する前記差分絶対値和に加算する加算工程と、
    を備えることを特徴とする画像処理方法。
  24. 請求項20に記載の画像処理方法において、
    前記ブロック毎動きベクトル算出工程では、一つの前記参照画面についての前記ブロックマッチングの処理を複数回、各回における前記サーチ範囲を、その前の回のブロックマッチングの結果から求められる前記参照画面全体についてのグローバル動きベクトルに応じてオフセットさせた範囲とすると共に、前の回のサーチ範囲よりも狭めた範囲として実行し、
    前記平行移動量算出工程および前記回転角算出工程は、前記ブロック毎動きベクトル算出手段における最終回のブロックマッチングにより得られる複数個のブロック毎動きベクトルから、前記平行移動量および前記回転角を算出する
    ことを特徴とする画像処理方法。
  25. 請求項24に記載の画像処理方法において、
    前記ブロック毎動きベクトル算出工程では、各回のブロックマッチングの結果から求められる前記参照画面全体についてのグローバル動きベクトルを用いて、当該回のブロックマッチングで求められたブロック毎動きベクトルのそれぞれを評価し、当該評価により信頼性が低いとされたブロック毎動きベクトルが得られたターゲットブロックについては、次回のグローバル動きベクトルの算出の際には、計算対象から外すようにし、
    前記平行移動量算出工程および前記回転角算出工程においては、前記ブロック毎動きベクトル算出工程における最終回のブロックマッチングにより得られる複数個のブロック毎動きベクトルのうちの、前記計算対象から外されたターゲットブロック以外のターゲットブロックについてのブロック毎動きベクトルのみから前記平行移動量および前記回転角を算出する
    ことを特徴とする画像処理方法。
  26. 請求項24に記載の画像処理方法において、
    前記グローバル動きベクトルを用いて、当該回のブロックマッチングで求められた複数のブロック毎動きベクトルのそれぞれを評価する評価工程を備え、
    前記評価工程で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満の前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
    ことを特徴とする画像処理方法。
  27. 請求項24に記載の画像処理方法において、
    前記グローバル動きベクトルを用いて、当該回のブロックマッチングで求められた複数のブロック毎動きベクトルのそれぞれを評価する評価工程を備え、
    前記評価工程で付与された評価値が高い前記複数のブロック毎動きベクトルの数が所定数以上であるときには、当該評価値が高い前記複数のブロック毎動きベクトルから、当該回のグローバル動きベクトルを再算出し、前記再算出したグローバル動きベクトルに基づいてその次の回のサーチ範囲の前記オフセットを決める
    ことを特徴とする画像処理方法。
  28. 撮像部からの前記撮像画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出工程と、
    前記ブロック毎動きベクトル算出工程で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出工程と、
    前記ブロック毎動きベクトル算出工程で検出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角を算出する回転角算出工程と、
    前記平行移動量算出工程で算出された平行移動量と、前記回転角算出工程で算出された回転角とを用いて、前記撮像部からの前記撮像画像の複数枚の画面を重ね合わせる回転・平行移動加算工程と、
    前記回転・平行移動加算工程で重ね合わされた撮像画像のデータを記録媒体に記録する記録工程と、
    を備えることを特徴とする撮像方法。
JP2006164209A 2006-06-14 2006-06-14 画像処理装置、画像処理方法、撮像装置および撮像方法 Expired - Fee Related JP4178480B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2006164209A JP4178480B2 (ja) 2006-06-14 2006-06-14 画像処理装置、画像処理方法、撮像装置および撮像方法
EP20070010921 EP1868389A2 (en) 2006-06-14 2007-06-01 Motion estimation for camera stabilitsation
US11/757,134 US7817185B2 (en) 2006-06-14 2007-06-01 Image processing device, image processing method, image pickup device, and image pickup method for superimposing a plurality of pictures on each other
KR20070057762A KR20070119525A (ko) 2006-06-14 2007-06-13 화상 처리 장치, 화상 처리 방법, 촬상 장치 및 촬상 방법
CN2007101086584A CN101090456B (zh) 2006-06-14 2007-06-14 图像处理装置和方法、图像拾取装置和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006164209A JP4178480B2 (ja) 2006-06-14 2006-06-14 画像処理装置、画像処理方法、撮像装置および撮像方法

Publications (2)

Publication Number Publication Date
JP2007336121A true JP2007336121A (ja) 2007-12-27
JP4178480B2 JP4178480B2 (ja) 2008-11-12

Family

ID=38353705

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006164209A Expired - Fee Related JP4178480B2 (ja) 2006-06-14 2006-06-14 画像処理装置、画像処理方法、撮像装置および撮像方法

Country Status (5)

Country Link
US (1) US7817185B2 (ja)
EP (1) EP1868389A2 (ja)
JP (1) JP4178480B2 (ja)
KR (1) KR20070119525A (ja)
CN (1) CN101090456B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009278578A (ja) * 2008-05-19 2009-11-26 Sony Corp 画像処理装置および画像処理方法
JP2011050430A (ja) * 2009-08-31 2011-03-17 Nidek Co Ltd 眼底画像処理装置
US8731327B2 (en) 2010-09-03 2014-05-20 Pentax Ricoh Imaging Company, Ltd. Image processing system and image processing method

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8130330B2 (en) * 2005-12-05 2012-03-06 Seiko Epson Corporation Immersive surround visual fields
JP2007325027A (ja) * 2006-06-01 2007-12-13 Oki Electric Ind Co Ltd 画像分割方法、画像分割装置、および画像分割プログラム
JP2008219141A (ja) * 2007-02-28 2008-09-18 Sanyo Electric Co Ltd 動きベクトル検出装置、それを用いた画像符号化装置および撮像装置
FR2919143B1 (fr) * 2007-07-16 2009-10-23 Commissariat Energie Atomique Procede et dispositif de detection de mouvement a algorithme sigma-delta a seuil adaptatif
US8953685B2 (en) * 2007-12-10 2015-02-10 Qualcomm Incorporated Resource-adaptive video interpolation or extrapolation with motion level analysis
JP2009290827A (ja) * 2008-06-02 2009-12-10 Sony Corp 画像処理装置および画像処理方法
US20110211633A1 (en) * 2008-11-12 2011-09-01 Ferran Valldosera Light change coding
US20110216828A1 (en) * 2008-11-12 2011-09-08 Hua Yang I-frame de-flickering for gop-parallel multi-thread viceo encoding
WO2010056327A1 (en) * 2008-11-13 2010-05-20 Thomson Licensing Multiple thread video encoding using hrd information sharing and bit allocation waiting
US8107750B2 (en) * 2008-12-31 2012-01-31 Stmicroelectronics S.R.L. Method of generating motion vectors of images of a video sequence
US9208690B2 (en) * 2009-03-18 2015-12-08 Saab Ab Calculating time to go and size of an object based on scale correlation between images from an electro optical sensor
BRPI0924384B1 (pt) * 2009-03-18 2024-01-30 Saab Ab Método e sistema de cálculo do tempo para chegada e do tamanho de um objeto com base em uma escala de correlação entre as imagens provenientes de um sensor eletro-óptico
US9113169B2 (en) * 2009-05-07 2015-08-18 Qualcomm Incorporated Video encoding with temporally constrained spatial dependency for localized decoding
EP3651466A1 (fr) * 2009-07-03 2020-05-13 Orange Prédiction d'un vecteur mouvement d'une partition d'image courante de forme géometrique ou de taille différente de celle d'au moins une partition d'image de référence voisine, codage et decodage utilisant une telle prediction
EP2523161A1 (en) * 2010-01-08 2012-11-14 Nec Corporation Similarity degree calculation device, similarity degree calculation method, and program
KR101682147B1 (ko) * 2010-04-05 2016-12-05 삼성전자주식회사 변환 및 역변환에 기초한 보간 방법 및 장치
JP2011254125A (ja) * 2010-05-31 2011-12-15 Sony Corp 画像処理装置、カメラシステム、画像処理方法、およびプログラム
KR101030744B1 (ko) * 2010-08-20 2011-04-26 엘아이지넥스원 주식회사 동영상 압축 장치 및 방법, 동영상 압축/복원 시스템 및 방법
EP2732615A1 (en) * 2011-07-13 2014-05-21 Entropic Communications, Inc. Method and apparatus for motion estimation in video image data
JP5988213B2 (ja) * 2011-11-28 2016-09-07 パナソニックIpマネジメント株式会社 演算処理装置
US8731335B2 (en) * 2011-11-28 2014-05-20 Ati Technologies Ulc Method and apparatus for correcting rotation of video frames
CN103150542A (zh) * 2011-12-06 2013-06-12 联咏科技股份有限公司 在动态图像中搜寻移动小物体的方法
WO2013105791A1 (ko) * 2012-01-09 2013-07-18 삼성전자 주식회사 움직임 벡터 정규화에 기초한 영상의 부호화 방법 및 장치, 영상의 복호화 방법 및 장치
TWI466538B (zh) * 2012-01-20 2014-12-21 Altek Corp 影像處理方法及其裝置
ITVI20120087A1 (it) 2012-04-17 2013-10-18 St Microelectronics Srl Stabilizzazione video digitale
JP6074198B2 (ja) * 2012-09-12 2017-02-01 キヤノン株式会社 画像処理装置及び画像処理方法
US9111444B2 (en) * 2012-10-31 2015-08-18 Raytheon Company Video and lidar target detection and tracking system and method for segmenting moving targets
KR101749925B1 (ko) * 2012-12-05 2017-06-23 한화테크윈 주식회사 영상 처리 방법 및 장치
US9596481B2 (en) * 2013-01-30 2017-03-14 Ati Technologies Ulc Apparatus and method for video data processing
JP6135220B2 (ja) * 2013-03-18 2017-05-31 富士通株式会社 動画処理装置、動画処理方法および動画処理プログラム
CN104122770A (zh) * 2013-04-27 2014-10-29 京东方科技集团股份有限公司 一种偏差补正方法和装置
WO2015177845A1 (ja) * 2014-05-19 2015-11-26 株式会社島津製作所 画像処理装置
JP6370140B2 (ja) * 2014-07-16 2018-08-08 キヤノン株式会社 ズーム制御装置、撮像装置、ズーム制御装置の制御方法、ズーム制御装置の制御プログラムおよび記憶媒体
CN104182940B (zh) * 2014-08-20 2017-04-19 阔地教育科技有限公司 一种模糊图像恢复方法及系统
JP6390275B2 (ja) * 2014-09-01 2018-09-19 株式会社ソシオネクスト 符号化回路、符号化方法
JP6394876B2 (ja) * 2014-09-17 2018-09-26 株式会社ソシオネクスト 符号化回路、符号化方法
CN107409167B (zh) * 2015-01-15 2020-01-21 株式会社岛津制作所 图像处理装置
US20160232672A1 (en) * 2015-02-06 2016-08-11 Qualcomm Incorporated Detecting motion regions in a scene using ambient-flash-ambient images
JP6497987B2 (ja) * 2015-03-12 2019-04-10 キヤノン株式会社 画像処理装置及び画像処理方法、プログラム、記憶媒体
TWI562635B (en) * 2015-12-11 2016-12-11 Wistron Corp Method and Related Camera Device for Generating Pictures with Object Moving Trace
WO2018051629A1 (ja) * 2016-09-14 2018-03-22 富士フイルム株式会社 撮像装置及び撮像制御方法
US11240407B2 (en) * 2016-10-31 2022-02-01 Eizo Corporation Image processing device, image display device, and program
CN106651918B (zh) * 2017-02-16 2020-01-31 国网上海市电力公司 抖动背景下的前景提取方法
JP6932531B2 (ja) * 2017-03-28 2021-09-08 キヤノン株式会社 像ブレ補正装置、撮像装置および撮像装置の制御方法
EP3613015A4 (en) 2017-04-21 2021-02-24 Zenimax Media Inc. SYSTEMS AND PROCEDURES FOR TOY GENERATED MOTION VECTORS
GB2562529B (en) * 2017-05-18 2019-12-11 Samsung Electronics Co Ltd Method and apparatus for stabilising 360 degree video
WO2018212514A1 (ko) * 2017-05-18 2018-11-22 삼성전자 주식회사 360도 영상을 처리하는 방법 및 장치
CN109672818B (zh) * 2017-10-16 2020-12-22 华为技术有限公司 一种调整图像质量的方法及装置
CN108648173A (zh) * 2018-03-30 2018-10-12 湖北工程学院 合拼面膜位置校正方法和装置
JP7319365B2 (ja) 2018-11-22 2023-08-01 北京字節跳動網絡技術有限公司 サブブロックに基づくインター予測のための調整方法
CN109788200B (zh) * 2019-01-31 2021-04-06 长安大学 一种基于预测分析的摄像稳定控制方法
RU2701058C1 (ru) * 2019-04-12 2019-09-24 Общество с ограниченной ответственностью "Научно-производственная фирма "САД-КОМ" Способ компенсации движения и устройство для его реализации
CN110458820A (zh) * 2019-08-06 2019-11-15 腾讯科技(深圳)有限公司 一种多媒体信息植入方法、装置、设备及存储介质
WO2021027862A1 (en) * 2019-08-13 2021-02-18 Beijing Bytedance Network Technology Co., Ltd. Motion precision in sub-block based inter prediction
JP7481430B2 (ja) 2019-08-13 2024-05-10 北京字節跳動網絡技術有限公司 サブブロックに基づくインター予測における動き精度
TWI733188B (zh) * 2019-09-11 2021-07-11 瑞昱半導體股份有限公司 用於獨立物件之運動估計的裝置以及方法
CN114762330A (zh) 2019-09-22 2022-07-15 北京字节跳动网络技术有限公司 视频的子图片编码和解码
CN112084286B (zh) * 2020-09-14 2021-06-29 智慧足迹数据科技有限公司 空间数据处理方法、装置、计算机设备及存储介质
CN112422773B (zh) * 2020-10-19 2023-07-28 慧视江山科技(北京)有限公司 基于块匹配的电子稳像方法及系统
CN112383677B (zh) * 2020-11-04 2023-04-28 三星电子(中国)研发中心 视频处理方法及装置
US11494881B2 (en) * 2020-12-29 2022-11-08 Hb Innovations, Inc. Global movement image stabilization systems and methods

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07283999A (ja) 1994-04-07 1995-10-27 Sony Corp 画像合成装置及び画像撮影装置
JP3006560B2 (ja) 1997-09-10 2000-02-07 日本電気株式会社 位置合わせ装置及び位置合わせプログラムを記録したコンピュータが読み取り可能な記録媒体
JP3679988B2 (ja) * 2000-09-28 2005-08-03 株式会社東芝 画像処理装置及び画像処理方法
JP4639555B2 (ja) 2001-08-31 2011-02-23 ソニー株式会社 動きベクトル検出装置および方法、手振れ補正装置および方法、並びに撮像装置
CN1332556C (zh) * 2002-12-26 2007-08-15 三菱电机株式会社 修正抖动的图像处理装置和图像处理方法
JP4613510B2 (ja) 2003-06-23 2011-01-19 ソニー株式会社 画像処理方法および装置、並びにプログラム
JP4340968B2 (ja) * 2004-05-07 2009-10-07 ソニー株式会社 画像処理装置および方法、記録媒体、並びにプログラム
JP4408779B2 (ja) * 2004-09-15 2010-02-03 キヤノン株式会社 画像処理装置
JP4507855B2 (ja) * 2004-11-25 2010-07-21 ソニー株式会社 撮影装置の制御方法および制御装置、並びに制御プログラム
JP4695972B2 (ja) * 2005-12-14 2011-06-08 キヤノン株式会社 画像処理装置、撮像装置および画像処理方法
JP4620607B2 (ja) * 2006-02-24 2011-01-26 株式会社モルフォ 画像処理装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009278578A (ja) * 2008-05-19 2009-11-26 Sony Corp 画像処理装置および画像処理方法
JP4506875B2 (ja) * 2008-05-19 2010-07-21 ソニー株式会社 画像処理装置および画像処理方法
US8885715B2 (en) 2008-05-19 2014-11-11 Sony Corporation Image processing apparatus and image processing method
JP2011050430A (ja) * 2009-08-31 2011-03-17 Nidek Co Ltd 眼底画像処理装置
US8731327B2 (en) 2010-09-03 2014-05-20 Pentax Ricoh Imaging Company, Ltd. Image processing system and image processing method

Also Published As

Publication number Publication date
CN101090456A (zh) 2007-12-19
US20080175439A1 (en) 2008-07-24
US7817185B2 (en) 2010-10-19
CN101090456B (zh) 2011-12-07
KR20070119525A (ko) 2007-12-20
EP1868389A2 (en) 2007-12-19
JP4178480B2 (ja) 2008-11-12

Similar Documents

Publication Publication Date Title
JP4178480B2 (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法
JP4178481B2 (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法
JP4304528B2 (ja) 画像処理装置および画像処理方法
JP4655957B2 (ja) 撮像画像の歪み補正方法、撮像画像の歪み補正装置、撮像方法および撮像装置
JP4340915B2 (ja) 撮像画像信号の歪み補正方法、撮像画像信号の歪み補正装置、撮像方法および撮像装置
US7692688B2 (en) Method for correcting distortion of captured image, device for correcting distortion of captured image, and imaging device
JP4882956B2 (ja) 画像処理装置および画像処理方法
JP4754939B2 (ja) 画像処理装置
US8072511B2 (en) Noise reduction processing apparatus, noise reduction processing method, and image sensing apparatus
JP2009071689A (ja) 画像処理装置、画像処理方法および撮像装置
WO2011129249A1 (ja) 画像処理装置、撮像装置、プログラム及び画像処理方法
JP2009105533A (ja) 画像処理装置、撮像装置、画像処理方法および撮像画像処理方法
US20080218606A1 (en) Image processing device, camera device, image processing method, and program
JP4904925B2 (ja) 画像処理装置および画像処理方法
JP4670630B2 (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法
JP2007323458A (ja) 画像処理装置および画像処理方法
JP2006279144A (ja) 歪補正装置
JP2009116763A (ja) 画像処理装置および画像データのメモリアクセス方法
JP4998134B2 (ja) 画像処理装置および画像処理方法
JP4888306B2 (ja) 画像処理装置および画像処理方法
JP2020088419A (ja) 撮像装置、画像補正方法、プログラム
JP2009065323A (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080508

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080707

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080731

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080813

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110905

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120905

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees