JP2007323458A - 画像処理装置および画像処理方法 - Google Patents

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

Info

Publication number
JP2007323458A
JP2007323458A JP2006154215A JP2006154215A JP2007323458A JP 2007323458 A JP2007323458 A JP 2007323458A JP 2006154215 A JP2006154215 A JP 2006154215A JP 2006154215 A JP2006154215 A JP 2006154215A JP 2007323458 A JP2007323458 A JP 2007323458A
Authority
JP
Japan
Prior art keywords
motion vector
block
vector
global motion
sad
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.)
Pending
Application number
JP2006154215A
Other languages
English (en)
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 JP2006154215A priority Critical patent/JP2007323458A/ja
Publication of JP2007323458A publication Critical patent/JP2007323458A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】ブロックマッチングを用いて1画面分単位でのグローバル動きベクトルを検出する場合において、動きベクトルの誤検出を軽減する。
【解決手段】元画面中において複数のターゲットブロックを設定して、参照画面に設定された複数のサーチ範囲のそれぞれにおいて参照ブロックとの間でブロックマッチングを行い、複数のターゲットブロックのそれぞれに対応する複数のブロック毎動きベクトルを検出する。参照画面と元画面との間のグローバル動きベクトルとして、異なる算出手法による第1のグローバル動きベクトルと、第2のグローバル動きベクトルとを算出し、それら第1および第2のグローバル動きベクトルに基づいて複数のブロック毎動きベクトルのそれぞれを評価する。その評価結果に基づいて、参照画面についてのグローバル動きベクトルを出力として用いるか否かを判定する。
【選択図】図1

Description

この発明は、例えば、デジタルスチルカメラやビデオカメラなどの撮像装置において撮像されて得られた画像情報に含まれるいわゆる手ぶれ成分などからなる画像の1画面単位での動きベクトルを検出する画像処理装置および画像処理方法に関する。
一般に、デジタルスチルカメラやビデオカメラなどの撮像装置を手で持って構えて撮影をした場合、撮影時の手ぶれによる撮像装置の振動が、撮像画像の画面単位での振動となって現われる。
このような手ぶれによる撮像画像の振動を補正する方法として、昨今の市場においては、ジャイロセンサの低価格化、高性能化、小型化に伴い、ジャイロ(角速度)センサを用いた光学式の手ぶれ補正方式が主流を占めている。
しかし、ここ数年においては、デジタルスチルカメラの急速な普及と、それと機を同じくした急速な高画素化の流れが、新たな問題を生み始めている。それは、低照度(露光時間が長い)ときの静止画においても、手ぶれ補正が強く求められているものの、解がジャイロセンサ等のセンサを用いたものしか存在せず、ジャイロセンサ自体の検出精度の甘さなどのジャイロセンサの弱点やその他の問題が露呈しつつある点である。
現在市場に出回っている民生機における、静止画用途の手ぶれ補正は、全て、遍くジャイロセンサもしくは加速度センサを使って手ぶれベクトルを計測し、それを機構系にフィードバックして、CCD(Charge Coupled Device)イメージャやCMOS(Complementary Metal Oxide Semiconductor)イメージャなどのイメージセンサに射影される像が、ぶれを起こさないように高速に制御する、というものである。
ここでいう機構系としては、レンズ、プリズム、イメージャ(もしくはイメージャと一体化したモジュール)が提案されており、それぞれ、レンズシフト、プリズムシフト、イメージャシフトと呼ばれている。
このような方法で手ぶれ補正がなされている以上、先に挙げたジャイロセンサ自体の精度誤差に加え、機構系へのフィードバック遅延、もしくはフィードバック遅延を回避するための予測誤差、そして、機構系の制御誤差も重畳され、とてもピクセル精度で補正をかけることは不可能である。
以上に挙げたように、現状のセンサを使用した手ぶれ補正には、原理的に、精度を追求できない、という大きな問題があるにも関わらず、市場で高評価を得ているのは、手ぶれを補正できないまでも低減できるからである。
しかしながら、今後益々の高画素化が予想される中、ピクセルサイズが小さくなるに従って、補正限界がピクセル精度と益々開いて行かざるを得ない、という事実に市場が気付くのも時間の問題である。
一方、手ぶれによる撮像画像の振動を補正する方法の他の一つとして、撮像画像の画面単位の動きベクトルを検出し、この動きベクトルに基づいて、画像メモリに蓄えられている撮像画像データの読み出し位置をシフトして手ぶれ補正をするセンサレス手ぶれ補正方法が知られている。
撮像画像の画面単位の動きベクトルを撮像画像情報自身から検出する方法としては、2画面分の撮像画像間の相関を求めるブロックマッチングが知られている。このブロックマッチングを用いるセンサレス手ぶれ補正方法は、原理的に、ロール軸方向の回転成分を含んだピクセル精度の手ぶれベクトル検出が実現可能であり、また、ジャイロセンサなどの機械的な部品が不要なので、撮像装置の小型、軽量化を実現することができるという点でも有利である。
図51および図52は、ブロックマッチングの概要を図示したものである。また、図53には、その処理フローチャートの一般例を示す。
ブロックマッチングは、撮像装置部からの撮像画像について、注目画面である参照画面と、当該参照画面よりも前、例えば1画面分前の撮像画面である元画面との間の1画面分単位での動きベクトルを、所定の大きさの矩形領域のブロックについて、参照画面と元画面との相関を算出することにより算出する方法である。
なお、ここで画面とは、1フレームまたは1フィールドの画像データからなる画像を意味しているが、この明細書では、説明の便宜上、画面は1フレームからなるものとして、画面をフレームと称することとする。したがって、参照画面は参照フレーム、元画面は元フレーム(ターゲットフレーム)と称する。
例えば、参照フレームの画像データは、撮像装置部からの現フレームの画像データ、または現フレームの画像データがフレームメモリに格納されて1フレーム分遅延されたものとされる。元フレームの画像データは、参照フレームの画像データがさらにフレームメモリに格納されて1フレーム分遅延されたものとされる。
ブロックマッチングにおいては、図51に示すように、元フレーム101の任意の所定の位置において、水平方向の複数画素および垂直方向の複数ライン分からなる所定の大きさの矩形領域からなるターゲットブロック103が設定される。
これに対して、参照フレーム102において、元フレームのターゲットブロック103の位置と同じ位置に、ターゲットブロックの射影イメージブロック104(図51の点線参照)を想定し、このターゲットブロックの射影イメージブロック104を中心としたサーチ範囲105(図51の一点鎖線参照)を設定すると共に、ターゲットブロック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(図51参照)で表現される。各参照ブロック106の参照ベクトル107は、参照ブロック106の参照フレーム102上の位置に応じた値となるが、従来のブロックマッチングでは、SAD値が最小値となる参照ブロック106の参照ベクトルを、ターゲットブロック103に対する動きベクトルとして検出するものである。
そこで、ブロックマッチングでは、一般に、図52に示すように、サーチ範囲105内において設定される複数個の参照ブロック106のそれぞれとターゲットブロック103との間におけるSAD値(以下、説明の簡単のため参照ブロックについてのSAD値という)を、サーチ範囲105内におけるそれぞれの参照ブロック106の位置に応じた参照ベクトル107のそれぞれに対応させて、メモリに記憶しておき、そのメモリに記憶された全ての参照ブロック106についてのSAD値の中から、最小のSAD値の参照ブロック106を検出することで、ターゲットブロック103に対する動きベクトル110を検出するようにしている。
サーチ範囲105内に設定された複数個の参照ブロック106の位置に応じた参照ベクトル107のそれぞれに対応させて、それぞれの参照ブロック106についてのSAD値を記憶したものを、差分絶対値和テーブル(以下SADテーブルという)と呼ぶ。図52のSADテーブル108が、これを示しており、このSADテーブル108において、それぞれの参照ブロック106についてのSAD値をSADテーブル要素109という。
なお、上述の説明において、ターゲットブロック103および参照ブロック106の位置とは、それらのブロックの任意の特定の位置、例えば中心位置を意味するものであり、参照ベクトル107は、参照フレーム102におけるターゲットブロック103の射影イメージブロック104の位置と、参照ブロック106の位置との間のずれ量(方向を含む)を示すものである。図51および図52の例では、ターゲットブロック103は、フレームの中心位置にあるとしている場合である。
そして、各参照ブロック106に対応する参照ベクトル107は、参照フレーム102上のターゲットブロック103に対応する位置に対する当該各参照ブロック106の位置ずれとなっているので、参照ブロック106の位置が特定されると、その位置に対応して参照ベクトルの値も特定される。したがって、SADテーブル108のメモリにおける参照ブロックのSADテーブル要素のアドレスが特定されると、対応する参照ベクトルは特定されることになる。
以上説明した従来のブロックマッチングの処理を、図53のフローチャートを参照して説明すると、次のようになる。
先ず、サーチ範囲105内の1つの参照ブロックIiを指定するが、これは、当該参照ブロックIiに対応する参照ベクトルを指定することに等しい(ステップS1)。ここで、図52において、(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つのターゲットブロックに対するブロックマッチングによる動きベクトルの検出処理は、終了となる。
実際的には、一つのターゲットブロックについての動きベクトルでは、元フレームに対する参照フレームについての精度の良い手ぶれベクトルを得ることが困難である。そのため、元フレームにおいては、ターゲットブロックは、元フレームの全範囲をカバーするように、複数個が設定され、一方、参照フレームにおいては、図54に示すように、その複数個のターゲットブロックの射影イメージ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号公報
動画の手ぶれ補正システムにおいては、精度よりも処理時間を重視した、大まかな手ぶれベクトルのリアルタイム検出が求められており、従来技術によるセンサレス手ぶれ補正手法でも、殆どの状況において満足のいく結果が得られる。
しかしながら、例えば、ユーザが動画撮影中に、他のカメラマンがフラッシュを焚くことにより、1フレームだけ突然明るさが変化(画面全体が明滅)するような場合、動きベクトルが誤検出されてしまうという問題が指摘されている。
これを回避するために、従来は、フレーム内の各動きベクトル毎の最小SAD値を信頼性として用いたり、時間軸方向の動きベクトルの変化量から、手ぶれ周波数を算出し、次のフレームの動きベクトルを予測したりすることで、著しく予測と異なるベクトルを排除する、という手法が採られている。
ところが、例えば、細かい波面のある水面を動画撮影する場合、フレーム内に設定された複数のターゲットブロックについて検出された各動きベクトルがバラバラになる上、複数フレームに渡って最小SAD値は、比較的小さい良好な値を示すため、上述した画面明滅の際のような手法が通用しない。また、ありふれた被写体として、木や草が風になびく情景もあるが、この場合も、誤った手ぶれベクトルを検出する場合が多い。
このような問題が従来のセンサレス手ぶれ補正において生じる理由のうち、最も主要なものは、従来のセンサレス手ぶれ補正方式の殆どが、グローバル動きベクトルとしての手ぶれベクトルを検出する方法として、1フレームについて検出された複数個の動きベクトルについて多数決を取り、方向および大きさが最も多い動きベクトルをグローバル動きベクトルとして検出する多数決方式を採用し、当該多数決方式のみでグローバル動きベクトルを検出していることに基づくものである。
そして、上述のような誤検出が行われた場合、実際の手ぶれと異なったベクトルに従って手ぶれ補正がなされてしまうため、結果の画像として、著しく不快な感覚をユーザに与えてしまう。現在、ジャイロセンサを用いた光学式の手ぶれ補正に、電子式手ぶれ補正が淘汰されつつある理由の1つには、この課題が解決されていないことが挙げられる。
しかし、前述の通り、デジタルカメラなどの撮像装置では、今後益々高密度画素化が進み、高性能化が求められると予想されるが、このような状況においては、静止画の撮影時の手ぶれ補正を、ジャイロ(角速度)センサを用いないセンサレスで実現する意義は非常に大きい。
そこで、上述したように、ブロックマッチングを用いて、センサレスで、手ぶれ動きベクトルを検出し、その検出した動きベクトルを用いて手ぶれ補正を行なうことが有望であり、上述した課題の解決が重要である。
この発明は、以上の点にかんがみ、上述した従来のセンサレス手ぶれ補正方式の問題点を解決することができる画像処理方法および装置を提供することを目的とする。
上記の課題を解決するために、請求項1の発明は、
画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の1画面分単位でのグローバル動きベクトルを算出する画像処理装置であって、
前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを検出するブロック毎動きベクトル検出手段と、
所定の手法により、前記参照画面と前記元画面との間の第1のグローバル動きベクトルを算出する第1のグローバル動きベクトル算出手段と、
前記第1のグローバル動きベクトル算出手段とは異なる手法により、前記参照画面と前記元画面との間の第2のグローバル動きベクトルを算出する第2のグローバル動きベクトル算出手段と、
前記ブロック毎動きベクトル検出手段で検出された複数の前記ブロック毎動きベクトルのそれぞれについて、前記第1のグローバル動きベクトルで算出された前記第1のグローバル動きベクトルに基づいて評価する第1の評価手段と、
前記ブロック毎動きベクトル検出手段で検出された複数の前記ブロック毎動きベクトルのそれぞれについて、前記第2のグローバル動きベクトルで算出された前記第2のグローバル動きベクトルに基づいて評価する第2の評価手段と、
前記第1の評価手段の評価結果と、前記第2の評価手段の評価結果とに基づいて、対象となる前記参照画面についてのグローバル動きベクトルの信頼性を判定する判定手段と、
を備え、
前記判定手段で、前記グローバル動きベクトルの信頼性が高いと判定された参照画面のみを前記グローバル動きベクトルを後段の処理に用いる
ことを特徴とする画像処理装置を提供する。
上述の構成の請求項1の発明による画像処理装置においては、参照画面において、元画面中に設定された複数のターゲットブロックのそれぞれについての複数個のブロック毎動きベクトルが、ブロック毎動きベクトル検出手段で検出される。
そして、当該参照画面と元画面との間のグローバル動きベクトルが、互いに異なる手法を用いる第1のグローバル動きベクトル算出手段と第2のグローバル動きベクトル算出手段とにより、それぞれ第1および第2のグローバル動きベクトルとして算出される。
そして、ブロック毎動きベクトル検出手段で検出された複数個のブロック毎動きベクトルのそれぞれが、第1の評価手段で、第1のグローバル動きベクトルに基づいて評価される。この場合、ブロック毎動きベクトルのうちの多数が第1のグローバル動きベクトルと同一あるいは近似するものであれば、高評価となる。
同様に、ブロック毎動きベクトル検出手段で検出された複数個のブロック毎動きベクトルのそれぞれが、第2の評価手段で、第2のグローバル動きベクトルに基づいて評価される。この場合、ブロック毎動きベクトルのうちの多数が第2のグローバル動きベクトルと同一あるいは近似するものであれば、高評価となる。
ここで、複数のブロック毎動きベクトルについての、第1の評価手段と第2の評価手段での評価が共に高評価であれば、この複数のブロック毎動きベクトルが求められた参照画面は、グローバル動きベクトルを検出する際に誤りが少ないであろうことが推定できる。
また、複数のブロック毎動きベクトルについての、第1の評価手段と第2の評価手段での評価が低い場合には、当該複数のブロック毎動きベクトルが求められた参照画面からは、正しいグローバル動きベクトルの算出が困難であろうことが推定できる。
請求項1の発明においては、このことにかんがみ、第1および第2の評価手段での評価結果を用いて、参照画面について検出されるグローバル動きベクトルを、後段の処理で用いるために出力するかどうかを判定する。
これにより、正しいグローバル動きベクトルの算出が困難である参照画面についてのグローバル動きベクトルを出力しないようにして、後段の処理では、その参照画面についてのグローバル動きベクトルを無視して処理をすることができるようになり、後段の処理部において誤った処理結果を出力することを防止することができる。
また、請求項2の発明は、請求項1に記載の画像処理装置において、
前記判定手段で前記対象となる前記参照画面についてのグローバル動きベクトルを出力として用いると判定したときには、前記第1の評価手段および前記第2の評価手段の少なくとも一方により、高評価とされたブロック毎動きベクトルに対応するターゲットブロックのみについてのブロックマッチングの結果に基づいて、前記参照画面についての前記グローバル動きベクトルを再検出する手段を備える
ことを特徴とする。
この請求項2の発明においては、出力されるグローバル動きベクトルは、第1の評価手段および第2の評価手段の少なくとも一方により、高評価とされたブロック毎動きベクトルに対応するターゲットブロックのみについてのブロックマッチングの結果に基づいて検出される。つまり、より正しいグローバル動きベクトルと同じまたは近似するブロック毎動きベクトルが検出されるターゲットブロックのみが用いられてグローバル動きベクトルが検出される。これは、動被写体などの影響があるターゲットブロックなど、誤った動きベクトルの検出がなされてしまうであろうターゲットブロックを排除してグローバル動きベクトルを検出することに等しい。
この発明によれば、ブロックマッチングを用いて、センサレスで、グローバル動きベクトルを検出する場合において、動被写体が含まれていたり、誤検出をし易い特殊な被写体であったりしても、グローバル動きベクトルについての誤検出を軽減することができる。
以下、この発明による画像処理方法および画像処理装置の実施形態を、撮像装置および撮像方法に適用した場合を例にとって、図を参照しながら説明する。
[この発明による画像処理方法の実施形態の概要]
この発明による画像処理方法の実施形態においては、上述したブロックマッチングを用いて、2フレーム間の動きベクトルを検出するに当たって、前述の場合と同様に、元フレームについて、複数個のターゲットフレームを設定して、その複数個のターゲットフレームのそれぞれについてブロックマッチングを施す。
以下に説明する実施形態においては、元フレームに、例えば16個のターゲットブロックTGi(i=1,2,・・・,16)を設定し、参照フレーム102には、図3に示すように、元フレームの16個のターゲットブロックに対応する16個の射影イメージ104i(i=1,2,・・・,16)を設定する。そして、それぞれの射影イメージに対するサーチ範囲105i(i=1,2,・・・,16)を設定し、それぞれのサーチ範囲105i(i=1,2,・・・,16)において、対応するターゲットブロックについてのSADテーブルTBLi(i=1,2,・・・,16)を作成する。
そして、この実施形態では、このターゲットブロックについてのSADテーブルTBLiのそれぞれから、各ターゲットブロックについてのブロック毎動きベクトルBLK_Viを検出するようにしている。
そして、この実施形態では、複数種類のグローバル動きベクトルの算出手法を用いて、元画面に対する参照画面についてのグローバル動きベクトルを、複数個算出し、その算出した複数個のグローバル動きベクトルと、複数個この例では16個のブロック毎動きベクトルとを用いて、グローバル動きベクトルを算出しようとしている参照画面から、グローバル動きベクトルを正しく算出することができるか否かの信頼性の判定し、グローバル動きベクトルを信頼性を確保して算出することが困難な参照画面(参照フレーム)であると判定したときには、この実施形態では、当該参照フレームについては、グローバル動きベクトルの検出を行わずに、当該参照フレームについてのグローバル動きベクトルは出力しないようにする。
そして、前記の信頼性の判定の結果、グローバル動きベクトルを高い信頼性で算出することができる参照画面(参照フレーム)であると判定したときには、この実施形態では、
すなわち、この実施形態においては、参照フレームについて検出して出力される手ぶれベクトル(グローバル動きベクトル)の信頼性を高めるための方策を施すものである。
これにより、この実施形態では、グローバル動きベクトルが正しく算出されると判定される参照フレームについてのみから得られる信頼性の高いグローバル動きベクトルだけを用いて、撮像装置における手ぶれをセンサレス方式で補正することができ、誤検出されたグローバル動きベクトルを用いることによる生じる撮像装置における不具合を防止することができるようにする。
この実施形態では、前記信頼性を判定するために用いるグローバル動きベクトルの算出方法としては、2種類用いる。その一つは、後述する合算SADテーブルを用いて算出する合算動きベクトルであり、他の一つは冒頭で述べた多数決方式である。なお、グローバル動きベクトルの算出手法としては、これらに限らないことは言うまでもない。
多数決方式は、先に述べたように、従来、複数個のブロック毎動きベクトルからグローバル動きベクトルを算出する手法として用いられているものであり、前記複数個のブロック毎動きベクトルについて多数決を取り、多数決トップのブロック毎動きベクトルをグローバル動きベクトルとするものである。
また、合算SADテーブルおよび合算動きベクトルは、この実施形態で提案する新規な手法である。次に、この合算SADテーブルおよび合算動きベクトルについて説明する。
すなわち、まず、前述のようにして作成した複数個、この例では16個のターゲットブロックについてのSADテーブルTBLiについて、特に、この実施形態では、図3に示すように、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から、元画面に対する参照画面のグローバル動きベクトルとしての合算動きベクトルSUM_Vを検出する。
合算SADテーブルSUM_TBLからグローバル動きベクトルとしての合算動きベクトルSUM_Vを算出する方法としては、合算SADテーブルSUM_TBLにおいて合算SAD値の最小値の位置を検出し、その検出した合算SAD値の最小値位置に対応する参照ベクトルを、合算動きベクトルSUM_Vとして検出する従来の方法を用いることができる。
しかし、この最小値の合算SAD値を用いる方法では、1画素単位の精度の合算動きベクトルSUM_Vしか得られないので、この実施形態では、後述するように、合算SAD値の最小値位置の合算SAD値およびその近傍の複数個の合算SAD値を用いて、近似曲面補間を行うことで、合算動きベクトルSUM_Vを検出する。すなわち、合算SAD値の最小値位置の合算SAD値およびその近傍の複数個の合算SAD値を用いて、近似高次曲面を生成し、その近似高次曲面の極小値位置を検出することで、1画素単位以下の小数点精度で、グローバル動きベクトルとしての合算動きベクトルSUM_Vを検出することができるようにしている。
この実施形態では、上述の合算動きベクトルSUM_Vと、上述の多数決トップのグローバル動きベクトルと、複数個のターゲットブロックについてのブロック毎動きベクトルBLK_Viとを用いて信頼性の判定をし、その判定結果に基づいて、信頼性が確保できる場合にのみ、参照フレームについて、より高精度のグローバル動きベクトルを算出するようにしている。
特に、この実施形態では、手ぶれによる画面全体の動きベクトルではない動被写体による動きベクトル成分を、手ぶれによるグローバル動きベクトルの検出に際しては、できるだけ排除することにより、より精度の高いグローバル動きベクトルの検出ができるようにしている。
従来は、元画面に設定された複数個のターゲットブロックのそれぞれについて、動きベクトル(ターゲットブロック毎動きベクトル)を求め、その求められた複数個の動きベクトルについての多数決によりグローバル動きベクトルを算出するようにしていたが、これとは異なり、この実施形態における合算SAD値からなる合算SADテーブルは、フレーム全体をまとめてブロックマッチングした結果と等価になる。
このため、この合算SADテーブルから求められた合算動きベクトルを用いて手ぶれ補正をした場合には、フラッシュが焚かれたときのフレーム全体の明滅や水面の波面等の被写体に対しても、従来手法を用いる場合のような大きく間違った補正を回避することができると共に、そのような被写体でない場合にも、従来よりも高精度の補正が可能となる。つまり、ロバスト性と高精度を両立した手ぶれ補正を提供することが可能となる。
そこで、この実施形態においては、基本的には、合算SADテーブルからグローバル動きベクトルを算出する手法を採用する。この合算SADテーブルからグローバル動きベクトルを算出する方法を用いることにより、例えば、次のようにして精度の高いグローバル動きベクトルを算出することができる。
すなわち、まず、合算SADテーブルから求めた合算動きベクトルSUM_Vと、各ターゲットブロックについてのSADテーブルTBLiから求められた動きベクトル(ブロック毎動きベクトル)BLK_Viとを比較して、両者が同一または近似しているターゲットブロックのSADテーブルTBLiを検出する。そして、その検出したSADテーブルTBLiのみを用いて、合算SADテーブルの再算出を行う。次に、この再算出した合算SADテーブル(再合算SADテーブル)RSUM_TBLを用いて、手ぶれベクトルとなるグローバル動きベクトルを検出するようにする。このようにすれば、精度の高いグローバル動きベクトル、つまり、手ぶれベクトルを検出することができる。
ただし、この場合において、1フレームについての複数個、この例では、16個のブロック毎動きベクトルは、当該フレームについての手ぶれベクトル(グローバル動きベクトル)を求めるために、信頼性があるものであるか否かの判定を行い、信頼性が高いと判定される場合にのみ、再合算SADテーブルRSUM_TBLの算出およびグローバル動きベクトルの算出を行うようにする。
このフレーム単位の信頼性の判定、つまり、ここでは、フレーム内複数ブロック毎動きベクトルの信頼性の判定は、次のようにして行う。
まず、元フレームに設定された複数個、この例では16個のターゲットブロックTGi(i=1,2,・・・,16)のそれぞれに対するSADテーブルTBLiを求め、その最小SAD値MINiの座標位置からブロック毎動きベクトルBLK_Vi(図5(A)参照)を求める。次に、前述した(式3)にしたがって、16個のSADテーブルTBLiから合算SADテーブルSUM_TBLを求め、その最小SAD値MINsの座標位置から合算動きベクトルSUM_V(図5(B)参照)を求める。
次に、この実施形態においては、合算動きベクトルSUM_V、すなわち、合算SADテーブルSUM_TBLの最小SAD値MINsの座標位置を基準に、16個のターゲットブロックのそれぞれの動きベクトルBLK_Vi(すなわち、合算SADテーブルSUM_TBLの最小SAD値MINsの座標位置)と、それぞれのSAD値とから、当該16個のターゲットブロックのそれぞれについて、図6に示すような条件の判定を行い、図6に示すようなラベル付けおよびスコアの算出を行う。
図7に、このラベル付けおよびスコア算出の処理の一例のフローチャートを示す。この図7の処理は、1枚の参照フレームについての処理であり、この図5の処理が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個のターゲットブロックのすべてのスコアの合計となっている。
なお、図7のフローチャートは一例であり、第1の条件、第2の条件および第3の条件の合致判定は、順序不動であり、いずれを先に行ってもよい。
以上のような1フレーム内の16個のターゲットブロックについてラベル付けおよびスコア算出の処理ルーチンが終了したら、算出した合計スコアsum_scoreと、信頼性についての閾値とを比較する。このとき、合計スコアsum_scoreが閾値よりも小さいときには、当該フレームで求められる動きベクトルは、グローバル動きベクトルの検出のためには信頼性が低いと判定することができる。
逆に、合計スコアsum_scoreが閾値以上であることは、当該フレームで求められた合算動きベクトルを用いるグローバル動きベクトルの検出は、一応の信頼性が得られることになる。したがって、合計スコアsum_scoreが閾値以上であると判定されたときには、スコアが高い第1の条件および第2の条件を満足するターゲットブロック(ラベル「TOP」およびラベル「NEXT_TOP」)のSADテーブルのSAD値のみを用いて再合算SADテーブルを生成して、その再合算SADテーブルに基づいてグローバル動きベクトルを算出するようにしても良い。
しかし、この実施形態では、より高い信頼性を得るために、さらに次のような処理を施すようにする。
この実施形態で用いる合算SADテーブルは、ブロック毎のSADテーブルではなく、フレーム全体をまとめてブロックマッチングした結果とほぼ等価である。通常の被写体においては、従来技術で説明した多数決により勝ち残った動きベクトル、つまり多数決トップの動きベクトルと、合算SADテーブルから求められる合算動きベクトルは、等しいものとなる。しかし、フレーム全体が明滅する場合や水面の波面等の苦手被写体の場合、多数決の結果は、信頼性が低く、ランダムに近い動きベクトルとなるのに対し、合算動きベクトルは、比較的正解に近い結果を導き出す可能性が高い。
したがって、合算SADテーブルから求めた合算動きベクトルと、多数決により決定したグローバル動きベクトルという、両者の結果を比較することにより、少なくとも、現在のフレームの結果の信頼性を、定量的に判定することが可能となる。従来提案では、各ブロックの動きベクトルの信頼性を判定することに主眼が置かれていたが、この実施形態では、フレーム全体の信頼性を重視し、疑わしきは補正しない、という方針のもと、違和感の少ない、安定した手ぶれ補正システムを実現する点が特徴である。
この点を考慮して、この実施形態では、従来のブロックマッチングの場合と同様に、16個のターゲットブロックについて検出されたブロック毎動きブロックBLK_Viについて多数決を取り、多数決トップ(大きさおよび方向が同一または同等であるブロック毎動きベクトルの数が最大)の動きベクトルを検出する。
そして、この検出した多数決トップの動きベクトルを基準として、図6における合算動きベクトルに基準とした場合と同様に、16個のターゲットブロックについて検出されたブロック毎動きブロックBLK_Viと、それぞれのSAD値とから、図6に示したようなラベル付けおよびスコア割り当てを行う。
これは、図6において、合算動きベクトル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が所定の閾値以上、であるときに、当該フレームについて求められる動きベクトルは信頼性が高いと判定する。
そして、このように信頼性が高いと判定されたときにのみ、この例では、合算動きベクトルを基準にしてラベル付けされたターゲットブロックのラベルのうち、「TOP」および「NEXT_Top」が付与されたターゲットブロックについてのSADテーブルのSAD値のみを用いて、再合算SADテーブルRSUM_TBLを生成する。
そして、この再合算SADテーブルRSUM_TBLの最小SAD値およびその近傍座標位置のSAD値について、近似曲面補間を適用してグローバル動きベクトルを算出するものである。
なお、従来から提案されている、時間軸方向の動きベクトルの周波数から、動きベクトル(グローバル動きベクトル)を予測する手法と、上述したこの発明の実施形態の手法とを組み合わせることにより、更なる信頼性並びに精度の向上を図るようにしても良い。
上述したように、この実施形態では、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つの問題を解決するようにしている、
図8〜図10は、この実施形態で用いる新規なブロックマッチング方法の概要を説明するための図である。図8は、従来のSADテーブルTBLoと、実施形態の画像処理方法において生成される縮小SADテーブルTBLsとの関係を示すものである。
この実施形態においても、図54に示したように、従来と同様に参照フレームにおいて、元フレームに設定された複数個、この例では16個のターゲットブロックの位置のそれぞれを中心として複数個のサーチ範囲が設定される。そして、この複数個のサーチ範囲のそれぞれにおいて、前述したような複数の参照ブロックが設定され、各参照ブロック内の画素とターゲットブロック内の対応する画素の輝度値の差分の絶対値の総和、つまり、SAD値が求められる。
従来は、求められたSAD値は、図8に示すように、対象となっている参照ブロックの参照ベクトルRVに対応するアドレスのテーブル要素tblとしてSADテーブルTBLoに書き込まれる。
したがって、従来のブロックマッチングでは、ターゲットブロックと参照ブロックとのフレーム画像上における位置ずれ量を表わす参照ベクトルRVと、SADテーブルTBLoの各テーブル要素である参照ブロックのSAD値とは、1対1に対応している。すなわち、従来のSADテーブルTBLoでは、サーチ範囲で取り得る参照ベクトルRVと等しい数のSAD値のテーブル要素数を備えるものとなっている。
これに対して、この実施形態におけるブロックマッチングでは、図8および図9(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)としたときに、図9(A)に示すように、(−3,−5)の位置を示す参照ブロックRVを、水平方向および垂直方向に、1/n=1/4倍に縮小すると、その参照縮小ベクトルCVで示される位置は、図9(B)に示すように、(−0.75,−1.25)となる。
したがって、参照縮小ベクトルCVで示される位置は小数成分が発生し、参照ベクトルで示される位置とは一致しない。
そこで、この場合には、図10に示すように、当該参照縮小ベクトルCVが示す位置の近傍位置を示す複数個の近傍参照ベクトルが検出される。図10の例では、1つの参照縮小ベクトルCVに対して、4個の近傍参照ベクトルNV1,NV2,NV3,NV4が検出される。
そして、前述したように、この実施形態では、参照ベクトルRVの参照ブロックについて求められたSAD値は、これら4個の近傍参照ベクトルNV1,NV2,NV3,NV4に対応するSAD値として分散加算される。
この場合に、この実施形態では、4個の近傍参照ベクトルNV1,NV2,NV3,NV4のそれぞれに分散加算するSAD値は、参照縮小ベクトルCVで示される位置P0(図10において×印として示す)と、4個の近傍参照ベクトルNV1,NV2,NV3,NV4のそれぞれで示される位置P1,P2,P3,P4(図10において○印として示す)との位置関係を用いて線形加重分散値として算出する。
図10の例の場合には、参照縮小ベクトル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値を求めるようにすれば良い(図8参照)。
したがって、この実施形態の場合には、縮小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次曲面を定めるためには、図11(A)または(B)に示すように、整数精度最小値テーブル要素tmと、当該テーブル要素tmをその両側から挟む位置の、当該テーブル要素tmの近傍の4個の整数精度テーブル要素t1,t2,t3,t4が最低限必要である。
そして、図12に示すように、参照フレームのサーチ範囲内の縮小SADテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置(0,0)として、水平方向および垂直方向のずれ量(参照縮小ベクトルに対応)の軸vx/nおよび軸vy/nを考えると共に、これらの軸vx/nおよび軸vy/nに垂直な軸として、SAD値の軸を考え、これら3軸からなる座標空間を想定する。
そして、例えば、整数精度最小値テーブル要素tmのSAD値と、当該整数精度最小値テーブル要素tmを挟む2個のテーブル要素t1、t3のSAD値とから、図10の座標空間において2次曲線を生成する。また、整数精度最小値テーブル要素tmのSAD値と、当該最小値テーブル要素tmを挟む他の2個のテーブル要素t2、t4のSAD値とから、図12の座標空間において、他の2次曲線を生成する。そして、これら2個の2次曲線を含む2次曲面201を、最小自乗法により求め、その2次曲面201を、図12に示すように、座標空間において生成する。
そして、生成されたSAD値の2次曲面201の最小値202を検出し、その最小値を取るSAD値に対応する位置(vx/n,vy/n)(図12の位置203)を検出し、当該検出した位置(vx/n,vy/n)を、小数精度のテーブル要素(テーブルアドレス)として検出する。そして、検出した小数精度テーブル要素に対応するベクトル(最小値ベクトル)204を、図13に示すようにn倍して、元の大きさ精度の動きベクトル205を得る。
例えば、図14に示すように、参照ベクトルを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個の矩形領域のテーブル要素を用いる例]
図15に、整数精度最小値テーブル要素tmを中心として、その周囲の水平方向×垂直方向=3×3個の矩形領域(図15で塗りを付して示してある)のテーブル要素を用いるようにする例を示す。
この図15の例の場合には、図15(A)に示すように、整数精度最小値テーブル要素tmと、その近傍の8個の近傍テーブル要素のSAD値を用いて、図15(B)に示すような2次曲面201を、最小自乗法により生成する。そして、生成されたSAD値の2次曲面201の最小値202を検出し、その最小値を取るSAD値に対応する位置(vx/n,vy/n)(図15(B)の位置203)を検出し、当該検出した位置203を、小数精度の最小値テーブル要素位置(小数精度最小値テーブルアドレス)として検出する。
そして、検出した小数精度テーブル要素位置203に対応するベクトル(最小値ベクトル)204を、前述した図13に示すようにn倍して、元の大きさ精度の動きベクトル205を得る。
ここで、SAD値の2次曲面201の最小値202に対応する位置203の算出方法は、次のようになる。すなわち、図16に示すように、整数精度最小値テーブル要素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位置となる。
そして、図16のテーブルにおける各テーブル要素のSAD値を、Sxyとする。したがって、例えば、整数精度最小値テーブル要素tm(位置(0,0))のSAD値はS00と表され、また、右下の位置(1,1)のテーブル要素値のSAD値はS11と表される。
すると、整数精度最小値テーブル要素tmの位置を原点(0,0)とする(x,y)座標における小数精度の位置(dx、dy)は、図17に示す(式A)および(式B)により、求めることができる。
図17の(式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個の矩形領域のテーブル要素を用いる例]
図18に、整数精度最小値テーブル要素tmをほぼ中心として、その周囲の水平方向×垂直方向=4×4個の矩形領域のテーブル要素(図18で塗りを付して示してある)を用いるようにする例を示す。
この場合に、整数精度最小値テーブル要素tmと、その近傍の8テーブル要素(3×3)や、その近傍の24テーブル要素(5×5)のように、前記mの値が奇数である場合には、整数精度最小値テーブル要素tmは、常に、使用する矩形領域の複数のテーブル要素の中心になるため、使用するテーブル範囲は単純に決定する。
これに対して、近傍の15テーブル要素(4×4)のように、mが偶数である場合には、整数精度最小値テーブル要素tmは、使用する矩形領域の複数のテーブル要素の中心位置とはならないので、若干の工夫が必要となる。
つまり、整数精度最小値テーブル要素tmから見て、水平方向に左右の隣接テーブル要素のSAD値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の4列目として採用する。同様に、垂直方向に上下の隣接テーブル要素のSAD値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の4行目として採用する。
図18の例では、整数精度最小値テーブル要素tmの水平方向に左右の隣接テーブル要素のSAD値は、「177」と「173」であるので、SAD値が小さい右隣の値「173」のテーブル要素のさらに右隣の列を第4列目として採用する。また、整数精度最小値テーブル要素tmの垂直方向に上下の隣接テーブル要素のSAD値は、「168」と「182」であるので、SAD値が小さい上隣の値「168」のテーブル要素のさらに上隣の行を第4行目として採用する。
そして、図18の例の場合には、整数精度最小値テーブル要素tmと、その近傍の15個の近傍テーブル要素のSAD値を用いて、2次曲面201を、最小自乗法により生成する。そして、生成されたSAD値の2次曲面201の最小値202を検出し、その最小値を取るSAD値に対応する位置(vx/n,vy/n)(図18の位置203)を検出し、当該検出した位置203を、小数精度の最小値テーブル要素位置(小数精度最小値テーブルアドレス)として検出する。
そして、検出した小数精度テーブル要素位置203に対応するベクトル(最小値ベクトル)204を、前述した図13に示すようにn倍して、元の大きさ精度の動きベクトル205を得る。
ここで、この例の場合におけるSAD値の2次曲面201の最小値202に対応する位置203の算出方法は、次のようになる。すなわち、図19に示すように、整数精度最小値テーブル要素tmの位置を原点(0,0)とする(x,y)座標を考える。
この例の場合には、16テーブル要素からなる矩形領域中における整数精度最小値テーブル要素tmの位置に応じて、図19(A),(B),(C),(D)のような4通りのテーブル要素配置を考える必要がある。
この場合、周辺の15個のテーブル要素の位置は、図19(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位置となる。
そして、図19のテーブルにおける各テーブル要素のSAD値を、Sxyとする。したがって、例えば、整数精度最小値テーブル要素tm(位置(0,0))のSAD値はS00と表され、また、位置(1,1)のテーブル要素値のSAD値はS11と表される。
すると、整数精度最小値テーブル要素tmおよびその周辺の16テーブル要素からなる矩形領域中の中心位置を原点(0,0)とする(x,y)座標における小数精度の位置(dx,dy)は、図20に示す(式C)および(式D)により、求めることができる。
ここで、図20の(式C)および(式D)において、KxおよびKyは、図21に示すように、整数精度最小値テーブル要素tmおよびその周辺の16テーブル要素からなる矩形領域中の中心位置を原点(0,0)とする(Kx,Ky)座標を考えたときの、前記図17(A),(B),(C),(D)に示した4通りのテーブル要素配置に応じた値となる。
すなわち、前記図19(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
となる。
また、前記図19(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
となる。
また、前記図19(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
となる。
また、前記図19(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
となる。
また、図20の(式C)および(式D)におけるΔxおよびΔyは、(Kx,Ky)座標に対する図21(A),(B),(C),(D)の各テーブル要素配置における(x,y)座標とのずれ量を表しており、図21から分かるように、
図19(A)に対応する場合には、Δx=−0.5、Δy=−0.5、
図19(B)に対応する場合には、Δx=−0.5、Δy=0.5、
図19(C)に対応する場合には、Δx=0.5、Δy=−0.5、
図19(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)を検出して、検出した位置を小数精度の最小値アドレスとするものである。
図22は、この第2の例を説明するための図である。前述の第1の例と同様にして、整数精度最小値テーブル要素tmと、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素、図22の例では、4×4=16個のテーブル要素を求める(図22(A)で塗りを付した部分参照)。
次に、第1の例と同様にして、図22(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を、前述した図13に示すようにn倍して、元の大きさ精度の動きベクトルを得る。
すなわち、第2の例は、第1の例で説明した方法により、水平方向、垂直方向のそれぞれの4個のテーブル要素を確定し、図22(B)に示すように、水平方向、垂直方向のそれぞれで、3次曲線を一意に定める手法である。
ここで、SAD値の3次曲線206および209の最小値202に対応する位置208の算出方法は、次のようになる。すなわち、水平方向または垂直方向のいずれかの方向における3次曲線において、最小値の近傍の4点のSAD値を、前記水平方向または垂直方向のいずれかの方向に沿った順番に、S、S、S、Sとしたとき、小数精度の最小値が、図23に示す3つの区間Ra,Rb,Rcのいずれにあるかにより、最小値を取る小数成分uを算出する式が異なる。
ここで、区間RaはSAD値Sとなる位置とSAD値Sとなる位置との間の区間、RbはSAD値Sとなる位置とSAD値Sとなる位置との間の区間、RcはSAD値Sとなる位置とSAD値Sとなる位置との間の区間である。
そして、小数精度の最小値が、図23に示す区間Raにあるときには、図24の(式E)により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分uが算出される。
また、同様に、小数精度の最小値が、図23に示す区間Rbにあるときには、図24の(式F)により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分uが算出される。
さらに、小数精度の最小値が、図23に示す区間Rcにあるときには、図24の(式G)により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分uが算出される。
そして、小数精度の最小値が、図23に示す3つの区間Ra,Rb,Rcのいずれにあるかの判別は、次のようにして行なう。
すなわち、図25は、その判別を説明するための図である。図25(A),(B),(C)に示すように、先ず、整数精度のSAD値の最小値Sminと、2番目に小さい整数精度のSAD値Sn2とを検出し、小数精度の最小値は、検出された整数精度のSAD値の最小値Sminの位置と、2番目に小さい整数精度のSAD値Sn2の位置との間の区間に存在するとして検出する。次に、整数精度のSAD値の最小値Sminと、2番目に小さい整数精度のSAD値Sn2とが、図23に示したSAD値S、S、S、Sのいずれの位置となっているかにより、検出した区間が区間Ra,Rb,Rcのいずれであるかの判別を行なう。
なお、図25(D)に示すように、整数精度のSAD値の最小値SminがSAD値のまたは位置にあって、4個のテーブル要素値の端に位置する場合には、最小位置が推定できないとして、この実施形態では、エラーとして扱い、最小値位置の算出は行なわないようにする。もっとも、この図25(D)のような場合においても、最小値位置を算出するようにしてもよい。
以上のようにして、この実施形態によれば、1/nにスケールダウンした小さいサイズの縮小SADテーブルを用いて、元の画像スケールにおける動きベクトルを検出することができる。この場合に、1/nにスケールダウンした小さいサイズの縮小SADテーブルを用いているにも関わらず、従来とほぼ同様のベクトル検出結果が得られることを図26に示す。
図26の横軸は、水平方向または垂直方向の一方についての1次元方向の縮小倍率nであり、また、縦軸は、検出される動きベクトルについての誤差(ベクトル誤差)を示している。図26のベクトル誤差の数値は画素数で表されている。
図26において、曲線301は、縮小倍率に対するベクトル誤差の平均値である。また、曲線302は、縮小倍率に対するベクトル誤差の分散σの3倍値(3σ(99.7%))を示している。曲線303は、曲線302の近似曲線を示している。
図26は、1次元方向の縮小倍率nに対するベクトル誤差を示しているが、SADテーブルは2次元のため、図26に示されるものの2乗の割合でテーブルサイズ(テーブル要素数)が削減されるのに対し、ベクトル誤差は、線形程度にしか増加しないことから、この実施形態による手法の有用性が分かる。
また、n=64(縮小率1/64)倍の縮小倍率でも、ベクトル誤差は小さく、全く異なる動きベクトルを検出出力とするような破綻は見られないことから、実質、1/4096に、SADテーブルのサイズを削減可能であると言える。
また、前述したように、動画の手ぶれ補正においては、リアルタイム性とシステム遅延の削減が強く求められるのに対し、精度については、破綻した全く異なる動きベクトルが検出される場合を除き、ある程度のベクトル検出誤差に対して寛容である。したがって、破綻しないままSADテーブルのサイズを大きく削減することができる、この実施形態は有用性が高いと言える。
そして、この実施形態では、参照フレーム102を複数の領域に分割し、それぞれの分割領域において動きベクトル(ブロック毎動きベクトル)205を検出するようにする。これは、前述したように、フレーム内には動く被写体が含まれる可能性も高いため、例えば、図27のように参照フレーム102の1フレーム内において16個の動きベクトル205を検出し、過去のフレームにおけるそれらの動きベクトル205からの推移も加味しながら統計的に処理することで、1フレームについて1つのグローバル動きベクトル、即ち、フレームの手ぶれベクトルを確定するようにするためである。
この場合、図27に示すように、検出したい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テーブルを、図3に示したように、重ね合わせるように並べて、サーチ範囲内で互いに対応する参照ブロック位置、つまり、縮小SADテーブルで同じ座標位置のSAD値を合算し、合算SAD値を求める。そして、その合算SAD値からなるSADテーブルとして、一つのサーチ範囲内の複数参照ブロック位置分についての合算縮小SADテーブルを生成する。したがって、この実施形態では、合算SADテーブルSUM_TBLは、合算縮小SADテーブルの構成である。
そして、この実施形態では、この縮小SADテーブルTBLi、この縮小SADテーブルTBLiについて上述のような近似補間処理をすることで求められるブロック毎動きベクトル205、および合算SADテーブルSUM_TBLを用いて、図4〜図7に示したような信頼性の判定処理および再合算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関数の一形態として良い。
図28〜図30の上側には、それぞれ縮小倍率が1/2倍、1/4倍、1/8倍のときのsinc関数(ローパスフィルタの理想特性)の形状を示す。この図28〜図30から、縮小倍率が大きくなればなる程、関数がタップ軸方向に拡大して行くことが分かる。つまり、無限タップのsinc関数を主要な係数のみで近似する場合にも、FIRフィルタのタップ数を増加させなければならないと言える。
また、一般的に、より低い帯域のカットオフ周波数を実現するフィルタは、フィルタ形状よりもタップ数が、その性能に対して支配的になって行くことが知られている。
したがって、特許文献3に記載の従来手法の縮小画像を用いる動きベクトル演算手法の場合、画像の縮小倍率が大きくなればなる程、そのSADテーブル削減効果が大きいにも関わらず、画像生成する際の前処理用フィルタとしてのローパスフィルタは、縮小倍率が大きくなればなる程、コストが増加してしまう、という矛盾を併せ持つのである。
一般に、高次タップのFIRフィルタを実現する場合、演算ロジックのコストがタップ数の2乗に比例して増加するため、問題となるが、より大きい問題は、垂直フィルタ実現のためのラインメモリ数の増加である。近年のデジタルスチルカメラにおいては、画素数向上に伴うラインメモリのサイズ削減のため、いわゆる短冊処理を行なっているが、例え、1ライン当たりのサイズを削減したとしても、ラインメモリそのものの本数が増加することは、物理レイアウトエリアで換算されるトータルコストを著しく押し上げる。
以上、述べたように、特許文献3に記載の従来手法の画像縮小によるアプローチは、特に垂直ローパスフィルタの実現において、大きな壁が立ちはだかっていることが分かる。それに対し、この発明の手法は、全く異なる形で簡潔にこの問題を解決している。
図28〜図30の下側に、この発明による手法におけるローパスフィルタのイメージを示す。この発明による手法においては、画像縮小処理を伴っていないが、縮小SADテーブルの生成演算過程におけるローパスフィルタのイメージを図示したものである。
図28〜図30の下側に示されるように、このローパスフィルタの特性は、sinc関数の主要係数部分を線形で近似した、シンプルなフィルタ特性ではあるものの、縮小倍率に連動してタップ数が増加していることが分かる。これは、先に述べた、カットオフ周波数が低くなる程、ローパスフィルタの性能はタップ数が支配的になる、という事実に好適である。つまり、実施形態の線形加重分散加算を行なう処理のような、この実施形態におけるSAD値の分散加算を行なう処理そのものが、倍率連動の高性能ローパスフィルタを、シンプルな回路で実現していることと等価なのである。
このローパスフィルタに絡んで、他にもメリットがある。特許文献3に記載の従来手法では、ローパスフィルタをかけた後、リサンプリングすることで画像を縮小するが、この時点で相当数の画像情報が失われる。つまり、ローパスフィルタの演算において、画像情報の輝度値の語長は大幅に丸められてメモリに格納され、殆どの画素情報の下位ビットは、縮小後の画像に影響を与えないのである。
一方、この実施形態による手法においては、全ての画素の輝度値の全ビット情報を、遍く平等に使用してSAD値を演算し、その分散加算値を求めて縮小SADテーブルに加算する。縮小SADテーブルの各テーブル要素値の語長さえ増やせば、最終的なSAD値の出力まで、一切の丸め誤差を含まない形で演算可能である。縮小SADテーブルの面積はフレームメモリに比較して小さいため、縮小SADテーブルの語長拡張は大きな問題にならない。その結果として、縮小SADテーブル並びに動きベクトル検出を、高精度に実現できるのである。
[この発明による画像処理装置の実施形態]
次に、この発明による画像処理方法を用いた画像処理装置の実施形態として、撮像装置の場合を例にとって、図を参照しながら説明する。図31は、この発明の画像処理装置の実施形態としての撮像装置の一例のブロック図を示すものである。
図31に示すように、この実施形態の撮像装置は、システムバス2にCP(Central Processing Unit)1が接続されると共に、システムUバス2に、撮像信号処理系10や、ユーザ操作入力部3、画像メモリ部4、記録再生装置部5などが接続されて構成されている。なお、この明細書においては、CPU1は、種々のソフトウエア処理を行なうプログラムを記憶するROM(Read Only Memory)やワークエリア用RAM(Random Access Memory)などを含むものとしている。
ユーザ操作入力部3を通じた撮像記録開始操作を受けて、図31の撮像装置は、後述するような撮像画像データの記録処理を行なう。また、ユーザ操作入力部3を通じた撮像記録画像の再生開始操作を受けて、図31の撮像装置は、記録再生装置部5の記録媒体に記録された撮像画像データの再生処理を行なう。
図31に示すように、撮像レンズ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データ)に変換し、そのデジタル撮像信号をシステムバスを介して、画像メモリ部4に供給する。
画像メモリ部4は、この図31の例においては、2個のフレームメモリ41,42からなり、データ変換部14からのデジタル撮像信号は、先ず、フレームメモリ41に格納される。そして、1フレーム経過すると、フレームメモリ41に記憶されているデジタル撮像信号が、フレームメモリ42に転送されると共に、フレームメモリ41には、データ変換部14からの新たなフレームのデジタル撮像信号が書き込まれる。したがって、フレームメモリ42には、フレームメモリ41に格納されているフレーム画像よりも1フレーム分前のフレーム画像が格納されている。
そして、手ぶれベクトル検出部15は、システムバス2を介して、これら2個のフレームメモリ41およびフレームメモリ42をアクセスして、その格納データを読み出し、前述したような、1フレーム当たり16個のSADテーブル生成処理、ブロック毎動きベクトル検出処理、合算SADテーブル生成処理、再合算SADテーブル生成処理、グローバル動きベクトル検出処理などの処理を実行する。この場合、フレームメモリ42に格納されているフレーム画像は、元フレームの画像とされ、また、フレームメモリ41に格納されているフレーム画像は、参照フレームの画像とされる。なお、実際には、フレームメモリ41と42とは、ダブルバッファとしてローテーションされる。
手ぶれベクトル検出部15は、その検出結果である手ぶれベクトル(グローバル動きベクトル)を、その後段の解像度変換部16に制御信号として伝達する。
解像度変換部16は、手ぶれベクトル検出部15から受け取った手ぶれベクトルにしたがって、フレームメモリ42に格納されている遅延フレームの画像データを切り出しながら、必要な解像度および画像サイズに変換する処理をする。このフレームメモリ42からの動きベクトルにしたがった切り出しにより、変換後の画像は、手ぶれが除去された画像となる。
この解像度変換部16からの手ぶれが除去された画像データは、NTSC(National Television System Committee)エンコーダ18によりNTSC方式の標準カラー映像信号に変換され、電子式ビューファインダーを構成するモニターディスプレイ6に供給され、撮影時の画像がその表示画面にモニター表示される。
このモニター表示と並行して、解像度変換部16からの手ぶれが除去された画像データはコーデック部17で記録変調などのコーディング処理された後、記録再生装置部5に供給されて、DVD(Digital Versatile Disc)などの光ディスクやハードディスクなどの記録媒体に記録される。
この記録再生装置部5の記録媒体に記録された撮像画像データは、ユーザ操作入力部3を通じた再生開始操作に応じて読み出され、コーデック部17に供給されて、再生デコードされる。そして、再生デコードされた画像データはNTSCエンコーダ18を通じてモニターディスプレイ6に供給され、再生画像がその表示画面に表示される。なお、図29では、図示を省略したが、NTSCエンコーダ18からの出力映像信号は、映像出力端子を通じて外部に導出することが可能とされている。
上述した手ぶれベクトル検出部15は、ハードウエアにより構成することできるし、また、DSP(Digital Signal Processor)を用いて構成することもできる。さらには、CPU1によりソフトウエア処理とすることもできる。また、ハードウエアやDSP処理と、CPU1によるソフトウエア処理との組み合わせとすることもできる。
[手ぶれベクトル検出部15における処理動作]
この手ぶれベクトル検出部15における処理動作の流れの一例を、図1および図2のフローチャートを参照して、以下に説明する。
なお、この図1および図2は、一つの参照フレームについての処理であり、この図1および図2の処理ルーチンが各参照フレームにおいて実行されるものである。この場合に、ステップS31の処理は、最初の参照フレームについて設定したら、その後の参照フレームにおいては省略することができる。
まず、前述の図27に示したように、16個のターゲットブロックについての16個のサーチ範囲について、それぞれのターゲットブロックの中心位置を、それぞれのサーチ範囲の中心としてサーチ範囲のオフセットをゼロに設定すると共に、それぞれのサーチ範囲を、この実施形態において想定される最大範囲に設定する(図1のステップS31)。
次に、16個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小SADテーブルおよびブロック毎動きベクトルの算出処理を実行する(ステップS32)。このステップS32の詳細処理ルーチンは後述する。
そして、16個のターゲットブロックについての縮小SADテーブルの生成が終了すると、16個の縮小SADテーブルにおいて、図4に示した(式3)により、サーチ範囲のそれぞれで対応する参照ブロック位置のSAD値を合算する処理を行い、縮小SADテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小SADテーブルを生成する(ステップS33)。
次に、生成した合算縮小SADテーブルにおいて、最小SAD値を検出し、検出した最小SAD値とその近傍の複数SAD値を用いて、前述した近似曲面補間の処理を行って、合算動きベクトルを算出する(ステップS34)。
次に、ステップS34で算出された合算動きベクトルを基準にして、16個の縮小SADテーブルのSAD値と、ブロック毎動きベクトルとから、図4に示した条件の判定を行い、16個のターゲットブロックのそれぞれについてのSADテーブルについての前述したようなラベル付けおよび当該参照フレームについての合計スコアsum_scoreの算出処理を行い、算出されたそれらのラベル付け結果および合計スコアsum_scoreを保持する(ステップS35)。
次に、ステップS32で算出された16個のブロック毎動きベクトルについて多数決を取り(ステップS36)、多数決トップのブロック毎動きベクトルを基準にして、16個の縮小SADテーブルのSAD値と、ブロック毎動きベクトルとから、前述したような図6に対応する条件の判定を行い、16個のターゲットブロックのそれぞれについてのSADテーブルについての前述したようなラベル付けおよび当該参照フレームについての合計スコアmany_scoreの算出処理を行い、算出されたそれらのラベル付け結果および合計スコアmany_scoreを保持する(ステップS37)。
そして、ステップS34で算出した合算動きベクトルと、ステップS36での多数決処理の結果、検出される多数決トップの動きベクトルとを比較し、両動きベクトルが縮小SADテーブル上の座標位置として、1隣接以内(座標位置が上下左右斜め方向に1位置しか違わない)であるか否か判別する(ステップS38)。
ステップS38で、合算動きベクトルと多数決トップの動きベクトルとの差異が1隣接以内ではないと判別したときには、当該参照フレームのグローバル動きベクトルは信頼性が無いと判断して、当該参照フレームのグローバル動きベクトルは、手ぶれベクトルとはしないように、例えばグローバル動きベクトルがゼロとする(ステップS39)。そして、この処理ルーチンを終了する。
なお、ステップS39では、ゼロではなく、当該フレームのグローバル動きベクトルをその前フレームの参照フレームで算出されたグローバル動きベクトルと同一値とするようにしてもよい。
また、ステップS38で、合算動きベクトルと多数決トップの動きベクトルとの差異が1隣接以内であると判別したときには、ステップS35で求められた合計スコアsum_scoreが予め定められた所定の閾値θth1以上であり、かつ、ステップS37で求められた合計スコアmany_scoreが予め定められた所定の閾値θth2以上であるか否か判別する(図2のステップ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)。この例では、図15を用いて説明した3×3個の矩形領域のテーブル要素を用いる近似曲面補間処理を実行する。
そして、この近似曲面補間処理の結果として検出される動きベクトルを、グローバル動きベクトルとして確保し、手ぶれベクトルとして、解像度変換部16に渡すようにする(ステップS44)。以上で、1つの参照フレームについての手ぶれベクトル検出部15における処理動作は終了となる。
なお、図1および図2のフローチャートにおいて、ステップS31〜ステップS34までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。その場合には、算出された手ぶれベクトルは、CPU1から解像度変換部16に供給される。あるいは、CPU1が、算出された手ぶれベクトルにしたがって、画像メモリ部4のフレームメモリ42に格納されている遅延フレームの画像データを切り出し(読み出し)をして、解像度変換部16に供給するようにしてもよい。
また、前述もしたように、手ぶれベクトル(グローバル動きベクトル)の検出に際しては、上述のようにしてグローバル動きベクトルを確保する処理手法に、さらに、従来から提案されている時間軸方向の動きベクトルの周波数から、グローバル動きベクトルを予測する手法を組み合わせることにより、更なる信頼性並びに精度の向上を図るようにしても良い。ただし、動画の場合には、処理時間が極めて短いことが要求されるため、注意が必要である。
また、上述の例では、再合成縮小SADテーブルは、ステップS35でラベル付けをした各ブロックのうちの「TOP」および「NEXT_TOP」のラベルが付与されたブロックの縮小SADテーブルのSAD値のみを用いるようにしたが、ステップS37でラベル付けした各ブロックのうちの「TOP」および「NEXT_TOP」のラベルが付与されたブロックの縮小SADテーブルのSAD値のみを用いるようにしても良いし、さらには、ステップS35とステップS37の両方でラベル付けをした各ブロックのうちの「TOP」および「NEXT_TOP」のラベルが付与されたブロックの縮小SADテーブルのSAD値を用いて、再合算縮小SADテーブルを生成するようにしても良い。
また、上述の例においては、各ブロック毎動きベクトルに付与したラベルに対応するスコアの合計sum_scoreおよびmany_scoreを、動きベクトルを算出している対象の参照フレームについてのグローバル動きベクトルの評価判定の一つの材料としたが、この合計スコアの代わりに、ブロック毎動きベクトルに付与されたラベルが「TOP」および「NEXT_TOP」の数が所定の閾値以上であるか否かを評価判定の材料とし、ラベルが「TOP」および「NEXT_TOP」の数が所定の閾値以上であれば、高評価であると判定するようにしても良い。
[図1のステップS32の処理ルーチン例]
次に、図1のステップS32における各ターゲットブロックについての縮小SADテーブル生成処理およびブロック毎動きベクトル算出の処理ルーチンの例を説明する。
<第1の例>
図32および図33は、ステップS32における各ターゲットブロックについての縮小SADテーブルおよびブロック毎動きベクトル算出処理ルーチンの第1の例を示すものである。
先ず、前述の図27に示したようなサーチ範囲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までの処理は、図53に示したフローチャートのステップ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までの演算処理を完了したか否か判別する(図33のステップ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つのターゲットブロックに対する、この実施形態におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図25に示したような、1フレームについて設定した複数個、この例では、16個のターゲットブロックについての縮小SADテーブルおよび動きベクトルを検出する場合、対象とするターゲットブロックを変える毎に、サーチ範囲および縮小倍率1/nを再設定して、上述の図32および図33に示した処理を、各分割領域について繰り返すものである。
なお、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは言うまでもない。
なお、図32および図33のフローチャートにおいて、ステップS101〜ステップS111までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
<第2の例>
上述の第1の例においては、1つの参照ブロック(参照ベクトル)について、そのSAD値を求めた後、そのSAD値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値を求め、分散加算処理を行なうようにした。
これに対して、この第2の例においては、参照ブロック内の各画素の、ターゲットブロックの画素との差分を検出したときに、その差分値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値(SAD値ではなく差分値)を求め、求めた差分値を分散加算処理するようにする。この第2の例によれば、1つの参照ブロック内のすべての画素についての差分演算を終了したときには、縮小SADテーブルが生成されることになる。
図34および図35は、この第2の例による動きベクトル検出処理のフローチャートを示すものである。
図34のステップS121〜ステップS123までの処理は、図32のステップ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までの演算処理を完了したか否か判別する(図35のステップ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の例におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図27に示したような、1フレームについて設定した複数個、この例では、16個のターゲットブロックについての縮小SADテーブルおよび動きベクトルを検出する場合、対象とするターゲットブロックを変える毎に、サーチ範囲および縮小倍率1/nを再設定して、上述の図34および図35に示した処理を、各分割領域について繰り返すものである。
なお、この第2の例においても、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは言うまでもない。
なお、図34および図35のフローチャートにおいて、ステップS121〜ステップS131までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
<第3の例>
図26に示したように、この実施形態による動きベクトルの検出手法を用いた場合には、参照ベクトルの縮小倍率が1/64の場合でも、全く異なる動きベクトルを出力するような破綻は見られないことから、実質的に1/4096に、SADテーブルを削減可能である。
つまり、1/4096に削減した縮小SADテーブルを用意しておき、縮小倍率1/64で1回目の動きベクトルを検出する。次に、1回目で検出したその動きベクトルを中心にしてサーチ範囲を狭め、2回目の検出を、1回目よりも小さい例えば縮小倍率1/8で行なうようにすればよい。すなわち、1回目と2回目とで縮小倍率を変えて、1回目のベクトル誤差範囲内に収まるように、2回目の縮小倍率を設定すれば、かなりの高精度で、動きベクトル検出が可能である。
この第3の例の場合における動きベクトル検出処理を、図36〜図39のフローチャートを参照しながら説明する。
この図36〜図39に示す第3の例は、基本的な動き検出処理として上述した第1の例を用いている。したがって、図36のステップS141〜ステップS149の処理ステップおよび図37のステップS151〜ステップS155までの処理ステップは、図32のステップS101〜ステップS109の処理ステップおよび図33のステップS111〜ステップS115までの処理ステップと全く同様である。
この第3の例においては、図37のステップS155で動きベクトルを算出したら、そこで処理を終了するのではなく、当該ステップS155で算出した動きベクトルは、1回目の動きベクトルとして、次のステップS156において、この1回目で算出した動きベクトルに基づき、同じ参照フレーム内で、サーチ範囲を絞り、また、参照ベクトルの縮小倍率を、1回目の縮小倍率1/naよりも小さい縮小倍率1/nb(ここで、na>nbである)に変更する。
すなわち、図40に示すように、1回目の処理で設定されたサーチ範囲SR_1において、ターゲットブロックTBについての動きベクトルBLK_Viが算出されると、その算出された動きベクトルBLK_Viから、参照フレームと元フレームとの間で、相関のあるブロック範囲がおおよそ検出できる。そこで、2回目の処理のサーチ範囲SR_2としては、図40の下側に示すように、その相関のあるブロック範囲を中心とした、絞ったサーチ範囲を設定することができる。この場合、図40に示すように、1回目のサーチ範囲SR_1の中心位置POi_1と、2回目のサーチ範囲SR_2の中心位置POi_2との間の位置ずれ(サーチ範囲オフセット)が、1回目で検出された動きベクトルBLK_Viに相当している。
そして、この実施形態では、さらに、1回目よりも参照ベクトルに対する縮小倍率を小さくすることで、より誤差の少ない状態で、2回目の動きベクトルの算出が可能になると期待できる。
こうして、ステップS156で、絞ったサーチ範囲を設定し、新たな縮小倍率を設定したら、1回目と全く同様にして、2回目の動きベクトルの検出処理を、ステップS157〜ステップS158、図38のステップS161〜ステップS168、さらに、図39のステップS171〜ステップS174により実行する。これらのステップの処理は、図32のステップS101〜ステップS109の処理ステップおよび図33のステップS111〜ステップS115までの処理ステップと全く同様である。
こうして、最終的に、ステップS174において、2回目の動きベクトルとして、目的とするブロック毎動きベクトルが得られる。
以上の例は、ブロック毎動きベクトルの検出方法として、前述した第1の例を用い、それを2段階、繰り返した場合であるが、サーチ範囲をさらに絞り、かつ、必要に応じて縮小倍率を変更しながら、2段階以上、繰り返すようにしても、勿論良い。
また、ブロック毎動きベクトルの検出方法としては、前述した第1の例の代わりに、前述した第2の例を用いることができることは言うまでもない。また、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは前述の例と同様である。
なお、図36〜図39のフローチャートにおいて、ステップS141〜ステップS168までの処理を手ぶれベクトル検出部15で行い、それ以降の処理をCPU1がソフトウエアにより処理するように構成してもよい。
[画像処理装置の第2の実施形態]
上述した画像処理装置の第1の実施形態としての撮像装置における手ぶれベクトル検出部15においては、図31に示したように、画像メモリ部4は、2枚の画像、つまり元フレームの画像と、参照フレームの画像とが、両方共、フレームメモリに格納されていることを前提にしていた。このため、動きベクトルの検出タイミングは、1フレーム分遅延されることとなる。
これに対して、この第2の実施形態では、撮像素子11からの垂れ流し画像データを参照フレームとする構成として、ラスタスキャンのストリームデータに対して、リアルタイムでSAD値を演算することができるようにしている。
図41に、この第2の実施形態の場合における撮像装置の構成例のブロック図を示す。この図41から分かるように、撮像信号処理系10の構成ブロックおよびその他の構成ブロックは、図31に示した第1の実施形態と全く同様であるが、この第2の実施形態においては、画像メモリ部4は1個のフレームメモリ43からなる。なお、実際的には、書き込みと読み出しとが同時にできないフレームメモリを用いる場合、フレームメモリ43は、周知のように、2枚のフレームメモリを、書き込みと、読み出しで1フレーム毎に交互に切り替えて用いるものである。
この第2の実施形態では、元フレームがフレームメモリ43に格納されており、参照フレームは、データ変換部14からストリームで入力されて来るものとされる。手ぶれベクトル検出部15は、第1の実施形態では、2個のフレームメモリ41,42に格納された2枚の画像データを用いて、参照ブロックについてのSAD値を求める処理をするようにした。これに対して、この第2の実施形態では、図41に示すように、データ変換部14からのストリーム画像データを参照フレームの画像データとすると共に、フレームメモリ43に格納されている画像データを元フレームの画像データとして、参照ブロックについてのSAD値を求めるようにする。
そして、解像度変換部16は、フレームメモリ43からの画像データの切り出しを、手ぶれベクトル検出部15で検出された動きベクトルに基づいて行なうことで、手ぶれの無い画像データを出力するようにしている。その他の構成および動作は、第1の実施形態と同様である。
上述したように、この第2の実施形態では、データ変換部14からのストリーム画像データを参照フレームの画像データとする。このため、ある入力画素に対して、この画素を要素とする参照ブロックが、参照フレーム上に同時に複数存在することになる。図42は、そのことを説明するための図である。
すなわち、参照フレーム102上のサーチ範囲105における入力画素Dinは、例えば、参照ベクトル1071が対応する参照ブロック1061の左側に位置する画素であると共に、参照ベクトル1072が対応する参照ブロック1062の右上に位置する画素となっていることが、この図42から分かる。
したがって、入力画素Dinが参照ブロック1061に属するとした場合には、ターゲットブロック103の画素D1を読み出して、その差分を算出する必要がある。また、入力画素Dinが参照ブロック1062に属するとした場合には、ターゲットブロック103の画素D2を読み出して、その差分を算出する必要がある。
図42および後述の図43では簡単のため、2つの参照ブロックのみを図示しているが、実際上は、入力画素Dinを、その参照ブロック内の画素とする参照ブロックは多数となる。
この第2の実施形態の場合のSAD演算は、入力画素Dinの輝度値Yと、各々の参照ブロック内の入力画素Dinの位置に対応した、ターゲットブロック内の画素の輝度値Yとの差分絶対値を算出し、その算出した差分絶対値を、それぞれの参照ブロックに対応した参照ベクトルに従って、SADテーブルに加算してゆくようにして行なう。
例えば、入力画素Dinが参照ブロック1061に属するとした場合における、ターゲットブロック103の画素D1と入力画素Dinとの差分絶対値は、図43に示すように、SADテーブル108の参照ベクトル1071が対応するSADテーブル要素1092のSAD値に加算して書き込むようにする。また、入力画素Dinが参照ブロック1062に属するとした場合における、ターゲットブロック103の画素D2と入力画素Dinとの差分絶対値は、図43に示すように、SADテーブル108の参照ベクトル1072が対応するSADテーブル要素1092のSAD値に加算して書き込むようにする。
したがって、サーチ範囲内の全ての領域の入力画素が入力されて処理が終了したときには、SADテーブルが完成することになる。
図43の説明は、従来手法に、リアルタイムSAD算出処理を適用した場合である。この第2の実施形態においては、図43において、SADテーブル108の参照ベクトル1071または1072が対応するSADテーブル要素1091または1092のSAD値として、算出した差分絶対値のそれぞれを、加算して書き込むのではなく、前述した第1の実施形態のように、参照ベクトル1071,1072を縮小倍率1/nで縮小した参照縮小ベクトルを算出し、その参照縮小ベクトルの近傍の複数の参照ベクトルに、前記算出した差分絶対値から、それぞれを分散加算するための分散加算値を求め、求めた分散加算値を、前記近傍の複数の参照ベクトルに対応するSAD値に加算するようにするものである。
SADテーブル(縮小SADテーブル)が完成した後の正確な動きベクトルを検出するための処理は、この第2の実施形態においても、前述した第1の実施形態で述べた手法と全く同様にして、2次曲面や、水平方向および垂直方向の3次曲線を用いた手法を用いることができる。
この第2の実施形態の場合の手ぶれベクトル検出部15における、前記図30のステップS32における各ターゲットブロックについての縮小SADテーブル生成処理およびブロック毎動きベクトル検出処理の動作のフローチャートを図44および図45に示す。
先ず、手ぶれベクトル検出部15では、入力画像のフレーム(参照フレーム)の任意の位置(x,y)の画素データDin(x,y)を受け取る(ステップS181)。次に、当該画素の位置(x,y)を含む複数の参照ブロックの一つに対応する参照ベクトル(vx,vy)を設定する(ステップS182)。
次に、設定された参照ベクトル(vx,vy)の参照ブロックIiの当該画素値Ii(x,y)と、これに対応するターゲットブロックIo内の画素値Io(x−vx,y−vy)との差分の絶対値αを算出する(ステップS183)。すなわち、差分絶対値αは、
α=|Io(x−vx,y−vy)−Ii(x,y)| ・・・(式4)
として算出される。
次に、縮小倍率を1/nとして、参照ベクトル(vx,vy)を1/nに縮小した参照縮小ベクトル(vx/n,vy/n)を算出する(ステップS184)。
次いで、参照縮小ベクトル(vx/n,vy/n)の近傍の複数の参照ベクトル、この例では、上述したように4個の近傍参照ベクトルを検知する(ステップS185)。そして、検知した4個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値(差分絶対値)を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップS183で求めた差分絶対値αから、線形加重分散値として求める(ステップS186)。そして、求めた4個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するSADテーブル要素値に加算する(ステップS187)。
次に、入力画素Din(x,y)を含む参照ブロックの全てについての上記ステップS182〜ステップS187の演算を行なったか否か判別し(ステップS188)、当該入力画素Din(x,y)を含む他の参照ブロックがあると判別したときには、ステップS182に戻り、当該入力画素Dinを含む他の参照ブロック(vx,vy)を設定し、このステップS182〜ステップS187の処理を繰り返す。
また、ステップS188で、入力画素Din(x,y)を含む参照ブロックの全てについての上記ステップS182〜ステップS187の演算を行なったと判別したときには、サーチ範囲内の全ての入力画素Dinについて、上記の演算ステップの処理を終了したか否か判別し(図45のステップS191)、終了していないと判別したときには、ステップS181に戻り、サーチ範囲内の次の入力画素Dinを取り込み、このステップS181以降の処理を繰り返す。
そして、ステップS191で、サーチ範囲内の全ての入力画素Dinについて、上記の演算ステップの処理を終了したと判別すると、縮小SADテーブルが完成したとして、当該完成した縮小SADテーブルにおいて、最小値となっているSAD値を検出する(ステップS192)。
次に、当該最小値となっているテーブル要素アドレス(mx,my)のSAD値(最小値)と、その近傍の複数個、この例では、上述したように15個の近傍テーブル要素のSAD値を用いて2次曲面を生成し(ステップS193)、その2次曲面の最小値のSAD値が対応する小数精度の位置を示す最小値ベクトル(px,py)を算出する(ステップS194)。この最小値ベクトル(px,py)は、小数精度の最小テーブル要素アドレスに対応している。
そして、算出した小数精度の位置を示す最小値ベクトル(px,py)をn倍することにより、求める動きベクトル(px×n,py×n)を算出する(ステップS195)。
なお、この例においても、小数精度の位置を示す最小値ベクトル(px,py)を算出する方法としては、前述した水平方向および垂直方向の3次曲線を用いる方法を用いても良いことは前述の例と同様である。
また、前述の第1の実施形態の第3の例と同様にして、この第2の実施形態においても、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、2段階以上、縮小SADテーブルを用いた動きベクトル検出処理を繰り返すようにしても、勿論良い。
この第2の実施形態のメリットは、フレームメモリを、第1の実施形態に比べて1枚分削減できることと、フレームメモリに入力画像を格納する時間を短縮できることである。メモリ削減の効果は言うまでもないが、処理時間の短縮も、近年、重要視されて来ている。特に動画を扱う場合、そのままシステム遅延の短縮に繋がるため、システム遅延が原因で生じる、実際の被写体とパネル表示画像の間に生じる違和感をなるべく無くすことは、ユーザへの訴求効果が高い。
[第3の実施形態]
以上の第1および第2の実施形態は、動画の手ぶれ補正システムを想定したものであり、その前提でここまでの議論を進めて来たが、この発明によるブロックマッチング手法は、静止画の手ぶれ補正システムにも容易に展開可能である。第3の実施形態は、この静止画の手ぶれ補正システムに、この発明を適用した場合である。なお、この第3の実施形態は、静止画用に限定されるわけではなく、本質的には動画にも適用可能である。動画の場合には、リアルタイム性のため加算枚数(フレーム数)に上限はあるが、フレーム毎に本手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現できる。
この第3の実施形態においては、第2の実施形態と同様に、入力画像フレームを参照フレームとして、この入力画像フレームと、フレームメモリ内の入力画像フレームを1フレーム遅延させた画像フレームとの間で動きベクトル検出を行なう。そして、この第3の実施形態における静止画についての手ぶれ補正は、連続的に撮影した複数枚の画像、例えば3fpsの画像を、手ぶれ補正を行いながら重ね合わせることにより行なう。
このように、第3の実施形態においては、撮影した静止画の手ぶれ補正を、連写した複数の画像について手ぶれ補正をかけながら重ね合わせて行くため、ピクセル精度(1画素精度)に近い精度が求められる。つまり、第3の実施形態においては、手ぶれ動きベクトルとしてのフレーム間の水平方向および垂直方向の平行移動成分と同時に、フレーム間の回転成分も検出する必要が生じる。
図46は、この第3の実施形態の場合の撮像装置の構成例を示すブロック図である。この図46の例は、図41に示した第2の実施形態において、手ぶれベクトル検出部15と、解像度変換部16との間に回転・平行移動加算部19を設けると共に、画像メモリ部4に、フレームメモリ43の他に、もう1つのフレームメモリ44を設け、このフレームメモリ44を、動きベクトルの回転成分の検出用およびフレーム画像の重ね合わせ用として用いるようにする。その他は、図41の構成と同様である。
手ぶれベクトル検出部15は、前述の第2の実施形態で説明した動画の場合と同様にして、データ変換部14からの入力画素データを、参照フレームの画素データとすると共に、フレームメモリ43の格納データを元フレームのデータとして、縮小SADテーブル生成処理、ブロック毎動きベクトルの検出処理、合算SADテーブル生成処理およびグローバル動きベクトル(手ぶれベクトル)検出処理を行なう。そして、この第3の実施形態においては、手ぶれベクトル検出部15では、グローバル動きベクトル(手ぶれの平行移動成分)に加えて、参照フレームの元フレームに対する回転角度を検出する。
なお、この例の場合、手ぶれベクトル検出部15では、常に1フレーム前の画像との相対手ぶれベクトルを求めることになるので、1枚目の基準画像(図47の画像フレーム120参照)との相対手ぶれを算出するために、1枚目からそれまでの手ぶれ成分を積分しておくものである。
そして、回転・平行移動加算部19は、この検出された手ぶれの平行移動成分と回転角度に従って、1フレーム遅延の後、フレームメモリ43に格納されている画像フレームを、切り出しと同時に回転させながら、フレームメモリ44の画像に加算もしくは平均化して行く。この過程を繰り返すことにより、フレームメモリ44には、手ぶれの無い、より高S/Nで、より高解像度の静止画像の画像フレーム120が生成される(図47参照)。
そして、解像度変換部16は、フレームメモリ44のフレーム画像から、CPU1からの制御指示に応じた所定の解像度および所定の画像サイズを切り出して、前述したように、記録撮像画像データとしてコーデック部17に供給すると共に、モニター画像データとしてNTSCエンコーダ18に供給する。
この第3の実施形態においても、手ぶれベクトル検出部15においては、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、2段階以上、縮小SADテーブルおよび合算SADテーブルを用いた動きベクトル検出処理を繰り返すようにすることができる。この第3の実施形態の、静止画についての手ぶれベクトル検出および手ぶれ補正処理においては、リアルタイム性の制約が少なく、画素数が多く、高精度の動きベクトルの検出が必要であるので、複数段階の階層的な動きベクトル検出処理が非常に有効である。
そのような複数段階の階層的な動きベクトル検出処理を行う場合において、後の回の動きベクトル検出におけるサーチ範囲は、前の回で算出されたグローバル動きベクトル分をサーチ範囲オフセットとして設定し、より狭いサーチ範囲を設定するものである。
[第4の実施形態]
上述の第3の実施形態の例では、第2の実施形態における動きベクトルの検出方法を用いるようにしたが、第1の実施形態における動きベクトルの検出方法を用いるようにしても良い。
図48は、第3の実施形態と同様の静止画の手ぶれ補正システムにおいて、第1の実施形態における動きベクトルの検出方法を用いる場合の画像処理装置の第4の実施形態の構成例を示すものである。
この第4の実施形態においては、図31に示した第1の実施形態において、手ぶれベクトル検出部15と、解像度変換部16との間に回転・平行移動加算部19を設けると共に、画像メモリ部4には、第1の実施形態の図31に示したフレームメモリ41およびフレームメモリ42に加えて、フレームメモリ44を設ける。そして、動きベクトルおよびグローバル動きベクトルを用いて、複数枚のフレームを回転および平行移動させて重ね合わせる基準となる1枚目のフレームの画像データは、図48において破線で示すように、フレームメモリ44にも書き込むようにする。
そして、2枚目以降の画像フレームについては、フレームメモリ42に格納された後、フレームメモリ41に格納されている画像データを用いて、常に1フレーム前の画像との相対的な手ぶれベクトルの検出が、手ぶれベクトル検出部15で実行される。このとき、1枚目の基準画像との相対手ぶれを算出するために、それまでの手ぶれベクトルを積分しておくようにする。また、手ぶれベクトル検出部15では、2枚目以降の画像フレームの、1枚目の基準画像フレームに対する相対的な回転角度が検出される。
手ぶれベクトル検出部15は、検出した1枚目の画像フレームに対する2枚目以降の画像フレームのそれぞれについての相対的な手ぶれベクトルと回転角度の情報をCPU1に供給する。
そして、フレームメモリ42に格納されている2枚目以降の画像は、算出された1枚目のフレームの基準画像との相対手ぶれ成分を相殺するように、CPU1の制御により、フレームメモリ42から読み出されて、回転・平行移動加算部19に供給される。そして、回転・平行移動加算部19では、CPU1からの制御信号により、1枚目の基準画像フレームに対する相対回転角度に応じて2枚目以降の画像フレームのそれぞれが回転させられて、フレームメモリ44から読み出された画像フレームに対して加算もしくは平均化される。その加算もしくは平均結果の画像フレームは、フレームメモリ44に書き戻される。
そして、フレームメモリ44の画像フレームのデータは、CPU1の制御指示に応じた所定の解像度および所定の画像サイズで切り出されて解像度変換部16に供給される。そして、解像度変換部16は、前述したように、記録撮像画像データとしてコーデック部17に供給すると共に、モニター画像データとしてNTSCエンコーダ18に供給する。
[第5の実施形態]
上述の第3の実施形態および第4の実施形態では、入力画像に対し、常に1フレーム前の画像との比較によって、手ぶれベクトルと回転角度を求める方式であったが、実際には、図47に示したように、1枚目を基準として、以降のフレームを足し合わせるため、動きベクトル検出も1枚目を基準にする方が誤差は小さくなる。第5の実施形態は、この点を考慮したものである。
図49に、この第5の実施形態による撮像装置の構成例のブロック図を示す。この図49の構成例は、第3の実施形態の場合に適用した例である。
すなわち、この図49の例においては、画像メモリ部4には、図46の第3の実施形態におけるフレームメモリ43およびフレームメモリ44に加えて、フレームメモリ45を設ける。そして、データ変換部14からの画像データは、フレームメモリ43とフレームメモリ45とに書き込むようにする。
そして、この第4の実施形態においては、フレームメモリ45を、ターゲットとなる1枚目のフレーム(元フレームおよび基準画像のフレーム)格納用として用いて、常に、この画像に対する入力画像の参照ベクトルを算出するシステムの構成を示す。この構成においても、フレームメモリ44に加算画像結果が格納される。
この例においても、基準となる1枚目のフレームの画像データは、図49において破線で示すように、フレームメモリ44にも書き込むようにする。
そして、2枚目以降の画像フレームは、フレームメモリ43に書き込むと共に、手ぶれベクトル検出部15に供給する。手ぶれベクトル検出部15では、データ変換部14からの2枚目以降の画像フレームのそれぞれと、フレームメモリ45から読み出された1枚目の画像データとの間の相対的な手ぶれベクトルの検出を行うと共に、回転角度の検出を行う。
手ぶれベクトル検出部15は、検出した1枚目の画像フレームに対する2枚目以降の画像フレームのそれぞれについての相対的な手ぶれベクトルと回転角度の情報をCPU1に供給する。
そして、フレームメモリ43に格納されている2枚目以降の画像は、算出された1枚目のフレームの基準画像との相対手ぶれ成分を相殺するように、CPU1の制御により、フレームメモリ42から読み出されて、回転・平行移動加算部19に供給される。そして、回転・平行移動加算部19では、CPU1からの制御信号により、1枚目の基準画像フレームに対する相対回転角度に応じて2枚目以降の画像フレームのそれぞれが回転させられて、フレームメモリ44から読み出された画像フレームに対して加算もしくは平均化される。その加算もしくは平均結果の画像フレームは、フレームメモリ44に書き戻される。
そして、フレームメモリ44の画像フレームのデータは、CPU1の制御指示に応じた所定の解像度および所定の画像サイズで切り出されて解像度変換部16に供給される。そして、解像度変換部16は、前述したように、記録撮像画像データとしてコーデック部17に供給すると共に、モニター画像データとしてNTSCエンコーダ18に供給する。
第4の実施形態に対しても、上述した第5の実施形態の考え方を適用して、常に、1枚目の基準画像フレームに対する相対的な手ぶれベクトルおよび回転角度を、2枚目以降のフレームについて検出するようにする場合には、図48において、フレームメモリ42を1枚目の画像専用に固定するか、1枚目の画像の代表点を、ローカルメモリ(SRAM)に保存しておき、それを用いてブロックマッチングを行って、SAD値を用いるようにすればよい。
なお、上述の第4の実施形態および第5の実施形態において、入力画像の1フレーム目を基準画像として、無限加算もしくは無限平均加算も可能なシステムを示したが、もしメモリ容量がふんだんに存在するか、記録再生装置部5への一時的な退避が許されるならば、予め加算対象の画像を全て保存しておき、それらをトーナメント式に加算、もしくは平均加算して行く方法を採用しても良い。
[第6の実施形態]
以上説明した第1〜第5の実施形態によるセンサレス手ブレ補正と、現存技術である光学手ぶれ補正とを組み合わせることによって、より高い効果が得られる。
冒頭で説明したように、ジャイロセンサを用いる光学手ぶれ補正は、大まかな補正を得意としており、また、回転補正が難しいのに対し、ブロックマッチングを使用したセンサレス手ブレ補正は、回転補正も含めた精度は高いが、サーチ範囲が広くなると、SADテーブルのコストが急上昇するか、この実施形態の手法を用いたとしても、複数段階の動き検出処理による場合には処理時間を要するからである。
したがって、光学手ぶれ補正で大まかに補正して、センサレベル手ぶれ補正のための動きベクトル検出用のサーチ範囲を狭め、そのサーチ範囲において、動きベクトルを検出して、センサレス手ブレ補正をかけることにより、低コスト、高精度、高速の手ぶれ補正システムが実現できる。
ところで、近年、手ぶれだけでなく動被写体ぶれも防ぐための手法として、手ぶれも動被写体ぶれも発生しにくい、1/60秒程度の短い露光時間で高感度に撮影する、高感度撮影が市場の耳目を集めている。
この場合に問題となるのが、S/Nを抑えながら、どこまでのISO感度に対応できるか、である。通常、感度を向上させると、同時にノイズも目立ってしまうため、デジタルカメラ各社は、様々な手法を用いてノイズ・リダクションを行い、一定水準のS/Nを維持できる、最高ISO感度の数値の大きさを、性能として謳っている。
この発明で主題の一つとしている静止画の手ぶれ補正も、目的の一つはノイズ・リダクションであり、複数枚の加算を行う際に、動被写体部分を検出し、加算を行わないか、その部分だけ別途サーチし、追跡加算を行うことで、動被写体ぶれにも対応した、見かけ上の高感度なノイズ・リダクションを実現することは可能である。
ランダムノイズを対象とした場合、N枚(Nは2以上の整数)を加算すれば、統計的に、そのノイズ成分はNの平方根の比率に削減される。つまり、ISO3200相当の実力値を持つデジタルカメラにおいて、動被写体に対応した16枚加算を行えば、そのセットのISO感度を、4倍のISO12800として謳うことができる。
[実施形態の効果]
以上説明したように、上述の第1および第2の実施形態においては、動きベクトルの信頼性を判定する新たな尺度として、合算SADを提案し、これを用いた動画の手ぶれ補正アルゴリズムを示した。これにより、フレーム全体の明滅や水面の波面などの苦手被写体に対して、従来手法のような大きく間違った補正を回避することができる上、苦手被写体でない場合にも、従来よりも高精度な補正が可能で、ロバスト性と高精度を両立した、動画の手ぶれ補正システムを実現することができる。
また、上述の第3〜第5の実施形態のブロックマッチング手法を用いたセンサレス手ぶれ補正手法は、これまで提案されている、センサレス静止画手ぶれ補正技術に対しては、コスト、精度、処理時間、ロバスト性の、いずれにおいても優位に立つ。
現在市場に出回っている静止画の手ぶれ補正の全ては、ジャイロセンサとレンズシフト等の光学補正を組み合わせて用いたシステムであるが、誤差が大きく、満足のいく画質ではなかった。これに対して、この発明による手法により、センサや機構部分を無くした、低コストかつ高精度の手ぶれ補正が実現する。
[その他の変形例]
上述の実施形態の説明では、グローバル動きベクトルを検出するための信頼性の参照フレームの元フレームに対する複数個のブロック単位動きベクトル、延いては参照フレームについてのグローバル動きベクトルを検出するための信頼性の評価のための第1のグローバル動きベクトルは合算動きベクトルとし、第2のグローバル動きベクトルは多数決トップのブロック毎動きベクトルとしたが、これら信頼性の評価のためのグローバル動きベクトルの算出方法は、その他の算出手法を用いるものを用いることもできる。
また、前記信頼性評価のためのグローバル動きベクトルは、第1および第2のグローバル動きベクトルに加えて第3、さらには第4のグローバル動きベクトルを用いるようにしても良い。
また、上述の実施形態の説明では、縮小SADテーブルを求める際の参照ベクトルに対する縮小倍率は水平方向と垂直方向とで同一としたが、水平方向と、垂直方向とで、縮小倍率を異ならせるようにしても良いことは前述した通りである。
また、上述の実施形態では、参照ブロックおよびターゲットブロック内の全ての画素についてSAD値を求めるようにしたが、例えばk個(kは自然数)おきの画素のみを用いてSAD値を求めるようにしても良い。
また、リアルタイム処理の動きベクトル検出システムでは、演算コストと処理時間削減を目的として、ターゲットブロック内の代表点のみを参照ブロック内でサーチする、SAD演算がしばしば行われている。
すなわち、図50に示すように、ターゲットブロック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)の帯域削減を図っても良い。
ターゲットブロックについて代表点を用いる場合の処理に関する以上の説明は、図51〜図53を用いて説明した手法におけるものについてであるが、図41〜図45を用いて説明した第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の実施形態におけるブロック毎動きベクトル検出処理の第2の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第2の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第1の実施形態におけるブロック毎動きベクトル検出処理の第3の例を説明するために用いる図である。 この発明による画像処理装置の第2の実施形態の構成例を示すブロック図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理を説明するための図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理を説明するための図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第2の実施形態におけるブロック毎動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。 この発明による画像処理装置の第3の実施形態の構成例を示すブロック図である。 この発明による画像処理装置の第3の実施形態における手ぶれ補正処理を説明するための図である。 この発明による画像処理装置の第4の実施形態の構成例を示すブロック図である。 この発明による画像処理装置の第5の実施形態の構成例を示すブロック図である。 この発明による画像処理方法の他の例を説明するために用いる図である。 ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。 ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。 ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。 ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。
符号の説明
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 (9)

  1. 画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の1画面分単位でのグローバル動きベクトルを算出する画像処理装置であって、
    前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを検出するブロック毎動きベクトル検出手段と、
    所定の手法により、前記参照画面と前記元画面との間の第1のグローバル動きベクトルを算出する第1のグローバル動きベクトル算出手段と、
    前記第1のグローバル動きベクトル算出手段とは異なる手法により、前記参照画面と前記元画面との間の第2のグローバル動きベクトルを算出する第2のグローバル動きベクトル算出手段と、
    前記ブロック毎動きベクトル検出手段で検出された複数の前記ブロック毎動きベクトルのそれぞれについて、前記第1のグローバル動きベクトルで算出された前記第1のグローバル動きベクトルに基づいて評価する第1の評価手段と、
    前記ブロック毎動きベクトル検出手段で検出された複数の前記ブロック毎動きベクトルのそれぞれについて、前記第2のグローバル動きベクトルで算出された前記第2のグローバル動きベクトルに基づいて評価する第2の評価手段と、
    前記第1の評価手段の評価結果と、前記第2の評価手段の評価結果とに基づいて、対象となる前記参照画面についてのグローバル動きベクトルの信頼性を判定する判定手段と、
    を備え、
    前記判定手段で、前記グローバル動きベクトルの信頼性が高いと判定された参照画面のみを前記グローバル動きベクトルを後段の処理に用いる
    ことを特徴とする画像処理装置。
  2. 請求項1に記載の画像処理装置において、
    前記判定手段で前記対象となる前記参照画面についてのグローバル動きベクトルを出力として用いると判定したときには、前記第1の評価手段および前記第2の評価手段の少なくとも一方により、高評価とされたブロック毎動きベクトルに対応するターゲットブロックのみについてのブロックマッチングの結果に基づいて、前記参照画面についての前記グローバル動きベクトルを再検出する手段を備える
    ことを特徴とする画像処理装置。
  3. 請求項1に記載の画像処理装置において、
    前記判定手段は、前記第1のグローバル動きベクトルと前記第2のグローバル動きベクトルとの差が所定値以内ではないときには、前記参照画面についてのグローバル動きベクトルは信頼性が低いと判定する
    ことを特徴とする画像処理装置。
  4. 請求項1に記載の画像処理装置において、
    前記第1評価手段および第2の評価手段は、前記ブロック毎動きベクトルのそれぞれについて評価値を付与するものであり、
    前記判定手段は、前記第1の評価手段による評価値が所定値以上ではなく、または、前記第1の評価手段による評価値が所定値以上ではないときには、前記参照画面についてのグローバル動きベクトルは信頼性が低いと判定する
    ことを特徴とする画像処理装置。
  5. 請求項1に記載の画像処理装置において、
    前記第1評価手段および第2の評価手段は、前記ブロック毎動きベクトルのそれぞれについて評価値を付与するものであり、
    前記判定手段は、前記第1のグローバル動きベクトルと前記第2のグローバル動きベクトルとの差が所定値以内であり、前記第1の評価手段による評価値が所定値以上であり、かつ、前記第1の評価手段による評価値が所定値以上であるときに、前記参照画面についてのグローバル動きベクトルは信頼性が高いと判定する
    ことを特徴とする画像処理装置。
  6. 請求項1に記載の画像処理装置において、
    前記ブロック毎動きベクトル検出手段は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
    前記差分絶対値和算出手段で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成手段と、
    前記差分絶対値和テーブルのそれぞれにおける、前記差分絶対値和の最小値の座標位置から前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを検出する手段と、
    を備え、
    前記第1のグローバル動きベクトル算出手段は、
    前記複数の差分絶対値和テーブルのそれぞれ前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
    前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記第1のグローバル動きベクトルを検出する手段と、
    を備え、
    前記第2のグローバル動きベクトル算出手段は、前記複数のブロック毎動きベクトルについて多数決処理をして、前記第2のグローバル動きベクトルを算出するものからなる
    ことを特徴とする画像処理装置。
  7. 請求項1に記載の画像処理装置において、
    前記ブロック毎動きベクトル検出手段は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
    前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
    前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
    を備え、
    前記縮小差分絶対値和テーブル生成手段は、
    前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
    前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、
    前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
    を備えると共に、
    前記第1のグローバル動きベクトル算出手段は、
    前記縮小差分絶対値和テーブル生成手段により生成された、複数の前記縮小差分絶対値和テーブルについて、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置の前記差分絶対値和を合算して合算差分絶対値和を求め、合算縮小差分絶対値和テーブルを生成する合算縮小差分絶対値和テーブル生成手段と、
    前記合算縮小差分絶対値和テーブル生成手段で生成された前記合算縮小差分絶対値和テーブルから、前記元画面に対する前記参照画面の動きベクトルを算出する動きベクトル算出手段と、
    を備え、
    前記第2のグローバル動きベクトル算出手段は、前記ブロック毎動きベクトル検出手段で生成された前記複数のブロック毎動きベクトルについて多数決処理をして、前記第2のグローバル動きベクトルを算出するものからなる
    ことを特徴とする画像処理装置。
  8. 請求項1に記載の画像処理装置において、
    前記ブロック毎動きベクトル検出手段は、
    前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分を求める差分算出手段と、
    前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
    前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての縮小差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
    を備え、
    前記縮小差分絶対値和テーブル生成手段は、
    前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
    前記差分算出手段で算出された前記参照ブロックのそれぞれについての前記差分値から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分値のそれぞれを算出する分散加算値算出手段と、
    前記分散加算値算出手段で算出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分値を、それまでの前記近傍の複数の前記参照ベクトルに対応する前記差分絶対値和に加算する加算手段と、
    を備えると共に、
    前記第1のグローバル動きベクトル算出手段は、
    前記縮小差分絶対値和テーブル生成手段により生成された、複数の前記縮小差分絶対値和テーブルについて、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置の前記差分絶対値和を合算して合算差分絶対値和を求め、合算縮小差分絶対値和テーブルを生成する合算縮小差分絶対値和テーブル生成手段と、
    前記合算縮小差分絶対値和テーブル生成手段で生成された前記合算縮小差分絶対値和テーブルから、前記元画面に対する前記参照画面の動きベクトルを算出する動きベクトル算出手段と、
    を備え、
    前記第2のグローバル動きベクトル算出手段は、前記ブロック毎動きベクトル検出手段で生成された前記複数のブロック毎動きベクトルについて多数決処理をして、前記第2のグローバル動きベクトルを算出するものからなる
    ことを特徴とする画像処理装置。
  9. 画面単位で順次に入力される画像について、注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の1画面分単位でのグローバル動きベクトルを算出する画像処理方法であって、
    前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを検出するブロック毎動きベクトル検出工程と、
    所定の手法により、前記参照画面と前記元画面との間の第1のグローバル動きベクトルを算出する第1のグローバル動きベクトル算出工程と、
    前記第1のグローバル動きベクトル算出工程とは異なる手法により、前記参照画面と前記元画面との間の第2のグローバル動きベクトルを算出する第2のグローバル動きベクトル算出工程と、
    前記ブロック毎動きベクトル検出工程で検出された複数の前記ブロック毎動きベクトルのそれぞれについて、前記第1のグローバル動きベクトルで算出された前記第1のグローバル動きベクトルに基づいて評価する第1の評価工程と、
    前記ブロック毎動きベクトル検出手段で検出された複数の前記ブロック毎動きベクトルのそれぞれについて、前記第2のグローバル動きベクトルで算出された前記第2のグローバル動きベクトルに基づいて評価する第2の評価工程と、
    前記第1の評価工程の評価結果と、前記第2の評価工程の評価結果とに基づいて、対象となる前記参照画面についてのグローバル動きベクトルの信頼性を判定する判定工程と、
    を備え、
    前記判定手段で、前記グローバル動きベクトルの信頼性が高いと判定された参照画面のみを前記グローバル動きベクトルを後段の処理に用いる
    ことを特徴とする画像処理方法。
JP2006154215A 2006-06-02 2006-06-02 画像処理装置および画像処理方法 Pending JP2007323458A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006154215A JP2007323458A (ja) 2006-06-02 2006-06-02 画像処理装置および画像処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006154215A JP2007323458A (ja) 2006-06-02 2006-06-02 画像処理装置および画像処理方法

Publications (1)

Publication Number Publication Date
JP2007323458A true JP2007323458A (ja) 2007-12-13

Family

ID=38856197

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006154215A Pending JP2007323458A (ja) 2006-06-02 2006-06-02 画像処理装置および画像処理方法

Country Status (1)

Country Link
JP (1) JP2007323458A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2070667A1 (en) 2007-12-14 2009-06-17 Fujitsu Component Limited Rotary cutter unit and printer device having the unit
JP2009278578A (ja) * 2008-05-19 2009-11-26 Sony Corp 画像処理装置および画像処理方法
JP2010233208A (ja) * 2009-02-12 2010-10-14 Ceva Dsp Ltd 高速サブピクセル動き推定
JP2013502101A (ja) * 2009-08-12 2013-01-17 インテル・コーポレーション 共通処理要素に基づく動画安定化及び動画ショット境界検出を実行する技術
JP2015008428A (ja) * 2013-06-25 2015-01-15 オリンパス株式会社 画像処理装置、画像処理方法及び画像処理プログラム

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2070667A1 (en) 2007-12-14 2009-06-17 Fujitsu Component Limited Rotary cutter unit and printer device having the unit
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
JP2010233208A (ja) * 2009-02-12 2010-10-14 Ceva Dsp Ltd 高速サブピクセル動き推定
JP2013502101A (ja) * 2009-08-12 2013-01-17 インテル・コーポレーション 共通処理要素に基づく動画安定化及び動画ショット境界検出を実行する技術
JP2015008428A (ja) * 2013-06-25 2015-01-15 オリンパス株式会社 画像処理装置、画像処理方法及び画像処理プログラム

Similar Documents

Publication Publication Date Title
JP4178480B2 (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法
JP4304528B2 (ja) 画像処理装置および画像処理方法
JP4178481B2 (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法
JP4655957B2 (ja) 撮像画像の歪み補正方法、撮像画像の歪み補正装置、撮像方法および撮像装置
JP4340915B2 (ja) 撮像画像信号の歪み補正方法、撮像画像信号の歪み補正装置、撮像方法および撮像装置
JP2007215114A (ja) 撮像画像の歪み補正方法、撮像画像の歪み補正装置および撮像装置
JP4754939B2 (ja) 画像処理装置
US8072511B2 (en) Noise reduction processing apparatus, noise reduction processing method, and image sensing apparatus
WO2011129249A1 (ja) 画像処理装置、撮像装置、プログラム及び画像処理方法
JP2009071689A (ja) 画像処理装置、画像処理方法および撮像装置
JP2009105533A (ja) 画像処理装置、撮像装置、画像処理方法および撮像画像処理方法
JP4904925B2 (ja) 画像処理装置および画像処理方法
JP2007323458A (ja) 画像処理装置および画像処理方法
JP4670630B2 (ja) 画像処理装置、画像処理方法、撮像装置および撮像方法
CN100559843C (zh) 图像处理装置和图像处理方法
JP2007281654A (ja) 画像再生装置
JP5780747B2 (ja) 画像処理装置、画像処理方法及びプログラム
JP5669556B2 (ja) 画像処理装置、画像処理方法及びプログラム