JP2016126576A - 画像処理装置、画像処理方法 - Google Patents
画像処理装置、画像処理方法 Download PDFInfo
- Publication number
- JP2016126576A JP2016126576A JP2015000508A JP2015000508A JP2016126576A JP 2016126576 A JP2016126576 A JP 2016126576A JP 2015000508 A JP2015000508 A JP 2015000508A JP 2015000508 A JP2015000508 A JP 2015000508A JP 2016126576 A JP2016126576 A JP 2016126576A
- Authority
- JP
- Japan
- Prior art keywords
- motion vector
- motion
- image processing
- image
- group
- 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
Links
Images
Landscapes
- Studio Devices (AREA)
- Image Analysis (AREA)
Abstract
【課題】背景に含まれる動きベクトルと非背景に含まれる動きベクトルの分類性能を向上させるための技術を提供する。
【解決手段】画像処理装置は、画像における動きベクトル群を取得し、取得した動きベクトル群に基づいて、異なる複数の背景部分の動きを推定する。動きベクトル群のうち、推定された異なる複数の背景部分の動きにいずれも対応していない動きベクトルを非背景の動きベクトルとして特定する。
【選択図】図2
【解決手段】画像処理装置は、画像における動きベクトル群を取得し、取得した動きベクトル群に基づいて、異なる複数の背景部分の動きを推定する。動きベクトル群のうち、推定された異なる複数の背景部分の動きにいずれも対応していない動きベクトルを非背景の動きベクトルとして特定する。
【選択図】図2
Description
本発明は、画像から検出した動きベクトルから非背景に含まれる動きベクトルを分類するための技術に関するものである。
動体検出方法には、背景差分法や検出した動きベクトルを解析する方法などがある。背景差分法は、その処理負荷は少ないものの、撮影中のカメラにパン・チルトなどの操作がなされた場合、あるいは、手ブレが発生した場合、動体領域の差分を正しく検出できないという問題がある。一方、近年は動きベクトル解析処理が重要になってきている。従来、高精度の動きベクトル解析処理は負荷の重い処理であり、高いハードウェアコストが必要であったが、半導体プロセス技術の向上に伴い、低コストでの実装が可能となってきている。
動きベクトル解析してカメラのパン・チルト・ブレに対応した動体検出を行うためには、カメラの動き(背景の動き)推定を行うことにより、カメラの動きと動体の動き(前景の動き)を分類する必要がある。以降の説明では、画像の広い範囲を占める、地面、壁、空、静止体の集合を背景と表現し、動体と区別して説明する。
カメラの動き推定は、時間的に連続する画像から複数の動きベクトルを算出し、これらの動きベクトルから背景の動きを表現する射影変換行列をロバスト推定によって算出することによってなされる。射影変換行列の一つに、3次元空間内の平面を異なる平面に射影するホモグラフィ行列がある。ホモグラフィ行列によってカメラの動きを表現する場合、背景とみなす被写体が十分に遠い位置にあり、カメラの動きと背景の動きが対応するという前提が存在する。
動きベクトルの算出方法は、ブロックマッチングによる動き探索や、特徴点とその特徴量を算出して、特徴点の対応を求め、対応した特徴点の座標を動きベクトルとするなどの方法がある。
動きベクトルからカメラの動きを表現する射影変換行列を推定し、背景と動体の動きベクトルとして分類する画像処理方法において、カメラが動き且つ撮影対象の構図に奥行きがある場合、背景成分に含まれる動きベクトルであっても、被写体の奥行き位置によって再投影誤差が大きくなり、動体の動きベクトルと分類されてしまうことがあった。
本発明はこのような問題に鑑みてなされたものであり、背景に含まれる動きベクトルと非背景に含まれる動きベクトルの分類性能を向上させるための技術を提供する。
本発明の一様態は、画像における動きベクトル群を取得する取得手段と、前記取得手段によって取得された動きベクトル群に基づいて、異なる複数の背景部分の動きを推定する推定手段と、前記取得手段によって取得された動きベクトル群のうち、前記推定手段によって推定された異なる複数の背景部分の動きにいずれも対応していない動きベクトルを非背景の動きベクトルとして特定する特定手段とを備えることを特徴とする。
本発明の構成によれば、背景に含まれる動きベクトルと非背景に含まれる動きベクトルの分類性能を向上させることができる。
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の1つである。
[第1の実施形態]
本実施形態では、動画像を構成する各フレームの画像や、それぞれ異なる時刻に撮像された静止画像など、時間的に連続して撮像された複数枚の画像を対象とし、該画像から検出した動きベクトル群から非背景部分の動きベクトル群を抽出する技術について説明する。
本実施形態では、動画像を構成する各フレームの画像や、それぞれ異なる時刻に撮像された静止画像など、時間的に連続して撮像された複数枚の画像を対象とし、該画像から検出した動きベクトル群から非背景部分の動きベクトル群を抽出する技術について説明する。
先ず、本実施形態に係る画像処理装置の構成例について、図1(a)のブロック図を用いて説明する。図1(a)に示した構成を有する画像処理装置が適用可能な装置には様々な装置が考えられ、例えば、一般のPC(パーソナルコンピュータ)に適用可能である。本実施形態では、画像処理装置はカメラ(外部撮像部109)が接続されているPCであるものとして説明する。しかし、画像処理装置は、カメラ装置、組込みシステム、タブレット端末、スマートフォン等の情報機器を用いて実施することもできる。また、以下では、CPU105がコンピュータプログラムやデータを用いて処理を実行することで、目的とする処理を実現するケースについて説明するが、一部の処理を専用のハードウェアに実行させるようにしても構わない。
CPU105は、RAM102に格納されているコンピュータプログラムやデータを用いて処理を実行することで、画像処理全体の動作制御を行うと共に、画像処理装置が行うものとして後述する各処理を実行若しくは制御する。なお、本実施形態では、画像処理装置に搭載されているCPU105の数を1として説明するが、複数であっても構わない。画像処理装置に複数のCPU105が搭載されている場合、以下に説明する各処理はマルチスレッド処理による並列動作によって達成されることになる。
RAM102は、外部ストレージ107からロードされたコンピュータプログラムやデータ、ネットワークI/F(インターフェース)108を介して外部から受信したコンピュータプログラムやデータ、を記憶するためのエリアを有する。さらに、RAM102は、外部撮像部109から入力された画像を記憶するためのエリアや、CPU105やグラフィックプロセッサ103が各種の処理を実行する際に用いるワークエリアを有する。すなわち、RAM102は、各種のエリアを適宜提供することができる。
外部ストレージ107は、ハーディスクドライブ装置等の大容量情報記憶装置の一例であり、OS(オペレーティングシステム)や、画像処理装置が行うものとして後述する各処理をCPU105に実行若しくは制御させるためのコンピュータプログラムやデータが保存されている。また、外部ストレージ107には、以下の説明において既知の情報として取り扱う情報についても保存されている。外部ストレージ107に保存されているコンピュータプログラムやデータは、CPU105による制御に従って適宜RAM102にロードされ、CPU105による処理対象となる。なお、外部ストレージ107は、大容量情報記憶装置として機能するものであれば如何なる記憶装置であってもよく、SSD(フラッシュメモリを使用したソリッドステートドライブ)等の他の記憶装置であっても良い。
ネットワークI/F108は、本装置をLANやインターネットなどのネットワークに接続するためのものであり、画像処理装置は該ネットワークI/F108を介して、該ネットワークに接続されている他の機器とのデータ通信を行うことができる。なお、外部ストレージ107からRAM102にロードされるものとして後述するコンピュータプログラムやデータの一部若しくは全部を、ネットワークI/F108を介して外部の機器からダウンロードするようにしても構わない。
外部撮像部109は、バス101に接続されている機器であり、動画像や静止画像を撮像可能な装置である。本実施形態では、外部撮像部109は、上記の如く、動画像や、それぞれ異なる撮像時刻の静止画像など、連続して複数枚の画像を撮像可能な装置である。外部撮像部109によって撮像された画像は、バス101を介してRAM102や外部ストレージ107に格納される。
グラフィックプロセッサ103は、画像に対する様々な画像処理、例えば、画像に対してマトリクスを用いて回転変換などの幾何変換処理を行うものであり、グラフィックプロセッサ103によって処理された画像は、RAM102や外部ストレージ107に格納され、ディスプレイ104に表示される。
ディスプレイ104は、CPU105やグラフィックプロセッサ103による処理結果を画像や文字などでもって表示することができる装置である。
ユーザI/F106は、マウスやキーボード、タッチパネルなどの機器により構成されており、ユーザが操作することで各種の指示をCPU105に対して入力することができる機器である。なお、ユーザI/F106がタッチパネルである場合、ユーザI/F106は、ディスプレイ104の表示面に重ねて配置されることになり、ユーザによるタッチパネル上のタッチ操作位置を検出する。
上記のRAM102、外部ストレージ107、ネットワークI/F108、外部撮像部109、グラフィックプロセッサ103、CPU105、ユーザI/F106は何れも、バス101に接続されている。
次に、図2を用いて本実施形態に係る画像処理装置の処理フローチャートを説明する。図2では、時間的に前後して撮影された2枚の画像から、平面とみなされる背景部分の動きを表現する射影変換行列を推定して、該画像から検出した動きベクトル群から非背景部分の動きベクトル群を抽出する処理が説明されている。なお、以下に説明する「背景部分」とは、3次元の実空間上では静止しているが、撮像装置であるカメラが動いたときに相対的な動きベクトルを有する背景部分(領域あるいは物体)を指す。また、「非背景」「前景」は、3次元の実空間上で移動している物体のことを指す。
なお、以下では、フローチャートに関しては、特記のない限り、図で説明した矢印の順番に、それぞれのステップが実行されるものとして説明する。また、互いに依存関係のない独立した処理については記載のステップ順に処理を実行する必要はなく、順序を入れ替えて実行したり、複数のCPUや専用処理回路が存在する場合には処理を並列に実行したりすることも可能である。同様に、ステップが存在するサブルーチンも限定はなく、処理結果が同等以上であれば、異なるサブルーチン内で処理を実行してもよく、また、サブルーチンの構成にも限定はない。
<ステップS2010>
外部撮像部109によって撮影された撮像画像は順次、RAM102や外部ストレージ107に格納される。ここで、外部撮像部109から出力される撮像画像はRGB画像であっても、YUV画像であっても、モノクロの輝度画像であっても構わないが、本ステップでは、外部撮像部109による撮像画像から動きベクトル群を抽出するので、RAM102や外部ストレージ107に格納する際には、輝度画像に変換する必要がある。もちろん、外部撮像部109が撮像画像として輝度画像を出力するようにしても構わない。また、動きベクトル群を抽出する段階で撮像画像を輝度画像に変換するようにしても構わない。また、撮像画像サイズについては特定の画像サイズに限るものではなく、1920×1088等、如何なる画像サイズであっても構わない。また、外部撮像部109が動画像を撮像する場合、その動画像のフレームレートについても特定のフレームレートに限るものではなく、30fps等、如何なるフレームレートを採用しても構わない。
外部撮像部109によって撮影された撮像画像は順次、RAM102や外部ストレージ107に格納される。ここで、外部撮像部109から出力される撮像画像はRGB画像であっても、YUV画像であっても、モノクロの輝度画像であっても構わないが、本ステップでは、外部撮像部109による撮像画像から動きベクトル群を抽出するので、RAM102や外部ストレージ107に格納する際には、輝度画像に変換する必要がある。もちろん、外部撮像部109が撮像画像として輝度画像を出力するようにしても構わない。また、動きベクトル群を抽出する段階で撮像画像を輝度画像に変換するようにしても構わない。また、撮像画像サイズについては特定の画像サイズに限るものではなく、1920×1088等、如何なる画像サイズであっても構わない。また、外部撮像部109が動画像を撮像する場合、その動画像のフレームレートについても特定のフレームレートに限るものではなく、30fps等、如何なるフレームレートを採用しても構わない。
CPU105は、RAM102や外部ストレージ107に格納されている撮像画像群のうち撮像時刻が隣接する2枚の撮像画像(動画像の場合は隣接するフレームの画像)から動きベクトル群を抽出する(もちろん、1フレームおきなど、隣接した撮像時刻の撮像画像でなくても良い)。
動きベクトル群の抽出では、撮像時刻が隣接する2枚の撮像画像のそれぞれから特徴点を検出し、該2枚の撮像画像間で「特徴量の非類似度が最も小さい(類似性が高い)特徴点のペア」を複数検索する。そして、それぞれのペアについて、該ペアにおける一方の特徴点を始点、他方の特徴点を終点、とする動きベクトルを求める。
特徴点の検出方法には、例えば、FAST方式が適用可能であり、特徴量の算出方法には、BRIEFが適用可能である。この場合、非類似度は、BRIEFにより生成された2つのバイナリ特徴量データのハミング距離となる。しかし、方式はこれに限るものではなく、SIFT方式を用いてもよく、その場合の非類似度は多次元ベクトルであるSIFT特徴量のL2ノルムとなる。また、本実施形態では、特徴点の検出では、そのアルゴリズムのスコアを使って上位2000点を抽出するものとする。よって動きベクトルの数も最大2000本になる。ただし、2000本という数に限定はなく、画面解像度、処理時間などを考慮して設定すればよい。
また、動き検出は次のようにして行ってもよい。画像を縦32画素×横32画素のブロックに分割する。このブロック単位でSAD(Sum of Absolute Difference)やSSD(Sum of Squared Difference)が最小となる動きベクトルを探索して動きベクトルを決定する。動き探索を用いた場合の非類似度は、SADまたはSSDとなる。
このようにして、CPU105は、撮像時刻が隣接する2枚の撮像画像から動きベクトル群を抽出する。そしてCPU105は、抽出したそれぞれの動きベクトルについて、該動きベクトルに係る情報を動きベクトル情報として生成してRAM102や外部ストレージ107に格納する。
RAM102や外部ストレージ107に格納するそれぞれの動きベクトルの動きベクトル情報のフォーマット例について、図3(a)を用いて説明する。
「非信頼度」は、動きベクトルを求めた際に求めた特徴点間の非類似度であり、その値が小さいほど、信頼性が高い動きベクトルとみなされる。「始点X座標」は、動きベクトルの始点におけるx座標値である。「始点Y座標」は、動きベクトルの始点におけるy座標値である。「終点X座標」は、動きベクトルの終点におけるx座標値である。「終点Y座標」は、動きベクトルの終点におけるy座標値である。
なお、動きベクトル情報のフォーマットは図3(a)に示したフォーマットに限るものではない。例えば、動きベクトルの始点及び終点の座標の型は「符号有りの整数型」に限るものではない。また、非信頼度(非類似度)の代わりに、信頼度(類似度)を用いても構わず、同義である。
ここで、以下の説明において用いる記法について説明する。本実施形態では、一つの動きベクトルは始点と終点の座標から構成される有向線分であり、一つの動きベクトルに対応する動きベクトル情報vをv=(A,B,U)=((x’、y’)、(x、y)、U)と表現する。このとき、A,Bはそれぞれ、動きベクトルの始点と終点を表す。Uは、動きベクトルの非信頼度を表す。また、動きベクトル情報vに対応する動きベクトルの始点A及び終点Bのそれぞれの座標は、関数start(v)、end(v)により取得可能とし、該動きベクトルの非信頼度をunreliability(v)により取得可能とする。また、動きベクトル情報vに対応する動きベクトルの2次元のベクトル成分をv→=AB→=(x−x’、y−y’)=vec(v)と表現する。また、画像から抽出したそれぞれの動きベクトルの動きベクトル情報v1,v2,v3,…の集合をX={v1,v2,v3,…}としたとき、集合Xに含まれるi番目の動きベクトル情報viは、vi=(Ai,Bi,Ui)=((xi’、yi’)、(xi、yi)、Ui)と表記することができる。以下では、v、A、B、U、x’、y’、x、y、Uのように添え字がない場合は、特に触れない限りは、同じ動きベクトルに対するものであるとする。
<ステップS2020>
CPU105は、ステップS2010で抽出した動きベクトル情報の集合Xを、信頼度が高い動きベクトル情報の集合V0と、信頼度が低い集合である集合(集合Xから集合V0を取り除いた残りの集合)Rと、に分類する。この処理は、データ量を削減することによって後工程の処理負荷を削減する効果がある。ステップS2020における処理の詳細については、図4のフローチャートを用いて後述する。
CPU105は、ステップS2010で抽出した動きベクトル情報の集合Xを、信頼度が高い動きベクトル情報の集合V0と、信頼度が低い集合である集合(集合Xから集合V0を取り除いた残りの集合)Rと、に分類する。この処理は、データ量を削減することによって後工程の処理負荷を削減する効果がある。ステップS2020における処理の詳細については、図4のフローチャートを用いて後述する。
<ステップS2030>
CPU105は、以下の処理で用いる変数iの値を0に初期化する。
CPU105は、以下の処理で用いる変数iの値を0に初期化する。
<ステップS2040>
CPU105は、集合Viに含まれている動きベクトル情報を用いてロバスト推定を行い、ある平面から異なる平面への背景部分の動きを表現する射影変換行列であるホモグラフィ行列Hiを推定する。ホモグラフィ行列Hiの推定処理については、図5のフローチャートを用いて後述する。
CPU105は、集合Viに含まれている動きベクトル情報を用いてロバスト推定を行い、ある平面から異なる平面への背景部分の動きを表現する射影変換行列であるホモグラフィ行列Hiを推定する。ホモグラフィ行列Hiの推定処理については、図5のフローチャートを用いて後述する。
更にCPU105は、集合Viに含まれている動きベクトル情報のうち、ホモグラフィ行列Hiを求める際にアウトライアベクトルとなった動きベクトルの動きベクトル情報の集合Vi+1を生成する。なお、アウトライアベクトルとは、ホモグラフィ行列Hiに対応する平面とみなされた背景部分の動きに対応していないベクトルのことを指す。
<ステップS2050>
CPU105は、ステップS2040で推定したホモグラフィ行列Hiを用いて、信頼度が高い動きベクトル情報の集合が除かれた集合Rに含まれているそれぞれの動きベクトル情報に対応する動きベクトルの再投影誤差を計算する。そして、CPU105は、集合Rに含まれているそれぞれの動きベクトル情報のうち、再投影誤差が閾値以下となった動きベクトル情報を、集合Rから削除する。以下に説明するロバスト推定では、動きベクトルの始点座標を射影変換行列で変換し、終点と変換された始点との座標の誤差(再投影誤差)が閾値以下の動きベクトルをインライアベクトル、それ以外をアウトライアベクトルと呼ぶ。インライアベクトルおよびアウトライアベクトルの分類方法は再投影誤差に基づく方法以外の方法を用いてもよい。
CPU105は、ステップS2040で推定したホモグラフィ行列Hiを用いて、信頼度が高い動きベクトル情報の集合が除かれた集合Rに含まれているそれぞれの動きベクトル情報に対応する動きベクトルの再投影誤差を計算する。そして、CPU105は、集合Rに含まれているそれぞれの動きベクトル情報のうち、再投影誤差が閾値以下となった動きベクトル情報を、集合Rから削除する。以下に説明するロバスト推定では、動きベクトルの始点座標を射影変換行列で変換し、終点と変換された始点との座標の誤差(再投影誤差)が閾値以下の動きベクトルをインライアベクトル、それ以外をアウトライアベクトルと呼ぶ。インライアベクトルおよびアウトライアベクトルの分類方法は再投影誤差に基づく方法以外の方法を用いてもよい。
以下に、具体的な再投影誤差の計算方法について説明する。なお、以下の(式1)、(式2)、(式3)、(式5)、(式6)、(式7)に従った計算は、浮動小数点で計算され、整数で表現された座標値も浮動小数に変換されてから計算がなされるものとして説明する。先ず、再投影誤差を計算する射影変換行列Mを以下のように定義する。
|m11 m12 m13|
M=|m21 m22 m23|
|m31 m32 m33|
また、入力座標を(xin,yin)、行列Hiによる射影変換後の座標を(xout,yout)とすると、射影変換関数projは下記のように表せる。これは同次座標系の変換を示すものである。
M=|m21 m22 m23|
|m31 m32 m33|
また、入力座標を(xin,yin)、行列Hiによる射影変換後の座標を(xout,yout)とすると、射影変換関数projは下記のように表せる。これは同次座標系の変換を示すものである。
また、ベクトルのL2ノルムは下記のように表現されるものとする。
ここで、集合Xのうち条件conditionを満足する部分集合を{v∈X|condition}と表記する。また、集合X,Yに対し、「X+Y」、「X−Y」という表現は、それぞれ和集合(集合Xに属する要素と集合Yに属する要素とから成る集合)、差集合(集合Xに属する要素のうち集合Yに属する要素を取り除いた残りの要素から成る集合)を表すものとし、X=X−Yといった代入は、集合Xを差集合(X−Y)に置き換えることを表す。つまり、XからYを除外していることになる。これらからすれば、ステップS2050では、以下の(式3)を計算していることになる。
この式によれば、集合Rから、「集合Rに属する動きベクトル情報vであって、始点の座標をホモグラフィ行列Hiで変換した変換済み座標から終点の座標を差し引いた結果の大きさが閾値e以下となる動きベクトルに対応する動きベクトル情報v」を削除することで、該集合Rを更新する。すなわち、ホモグラフィ行列Hiに対応する平面とみなされる背景部分とみなされる動きベクトルを集合Rから除く。この閾値eは、予め定められたものであり、例えば、1である。
なお、上記の集合を用いた演算の結果をRAM102や外部ストレージ107上で管理する方法には様々な方法が考えられるが、本実施形態では、「集合」は配列としてRAM102や外部ストレージ107上で管理する。また、本実施形態では、集合同士の加算や減算等の演算を行った場合、演算元の集合を管理する配列はそのまま残し、別途配列を用意して該配列で該演算の結果を管理する。また、本実施形態では、(式3)のように、集合の部分集合を求めた場合、該部分集合も、別途配列を用意して該配列で該部分集合を管理する。(式3)の場合、本実施形態では、集合Rを管理する配列はそのまま残し、(式3)の右辺の演算結果を、集合Rを管理する配列とは別個の配列で管理する。しかし、動きベクトル情報のフォーマットとして図3(b)のフォーマットを採用した場合には、別途配列を用意する必要はない。図3(b)のフォーマットは、図3(a)のフォーマットに「除外フラグ」が追加されており、「除外フラグ」は1ビットの符号なし整数のデータ型で表現される。この「除外フラグ」の初期値は「0」であり、ステップS2050において上記の条件「集合Rに属する動きベクトル情報vであって、始点の座標をホモグラフィ行列Hiで変換した変換済み座標から終点の座標を差し引いた結果の大きさが閾値e以下となる動きベクトルに対応する動きベクトル情報v」に該当する場合には、「除外フラグ」は「1」に更新され、以降の処理では、「除外フラグ」が「1」の動きベクトル情報は以下の処理に使用しないものとする。
このように、配列の要素を除外した配列を再生成することなく、集合Rを管理する配列内で「除外フラグ」の更新のみを行うことで、(式3)の右辺の演算結果を集合Rを管理する配列で管理することができる。
なお、動きベクトル情報のフォーマットとして図3(a)のフォーマットを採用するのか、それとも図3(b)のフォーマットを採用するのかについては、CPU105の性能や処理データの数に応じて決定する。処理データの数が多い場合は、配列を再生成するよりも除外フラグを用いたほうが速度的に有利である。
なお、配列を用いて集合を管理する方法は上記の方法に限るものではない。また、集合は配列を用いて管理することに限るものではなく、例えばリストとして管理されても良く、データの集合を取り扱うデータ構造は特定のデータ構造に限るものではない。
<ステップS2060>
CPU105は、変数iの値を1つインクリメントする。
CPU105は、変数iの値を1つインクリメントする。
<ステップS2070>
CPU105は、2つの判定式の論理積を取り、該論理積の結果が真(該2つの判定式が共に満たされている)であるか否かを判断する。この判断の結果、真である場合には、処理はステップS2040に進み、偽(該2つの判定式のうち少なくとも一方は満たされてない)の場合には、処理はステップS2080に進む。
CPU105は、2つの判定式の論理積を取り、該論理積の結果が真(該2つの判定式が共に満たされている)であるか否かを判断する。この判断の結果、真である場合には、処理はステップS2040に進み、偽(該2つの判定式のうち少なくとも一方は満たされてない)の場合には、処理はステップS2080に進む。
ここで、2つの判定式のうち、第一の条件式である「i<N」について説明する。この条件式では、変数iの値が、ステップS2040〜S2060のループ処理の既定回数N未満であるかを判定している。Nは2以上の整数であり、外部撮像部109による撮像画像における奥行きの度合いや、プロセッサの性能に応じて設定される(例えば、規定時間内に処理が完了するように)。本実施形態ではN=4とする。
次に、第二の条件式である「i>1 && (|V0|−|V1|)*ratio<|Vi−1|−|Vi|」について説明する。ここで、|P|は、ベクトルPの要素数を表す。第二の条件式において、「i>1」は、一回目のループの判定でi=1であるため、最低2回のループ処理がなされることを保証する条件である。「|V0|−|V1|」は、ホモグラフィ行列H0に対応するインライアベクトルの数、|Vi−1|−|Vi|は、ホモグラフィ行列Hi−1に対応するインライアベクトルの数である。なお、ratioについては、本実施形態では0.3(1未満の正の係数)とするが、その値は様々な条件に応じて適宜設定すればよい。また、インライアベクトルとは、ホモグラフィ行列Hiおよびホモグラフィ行列Hi−1にそれぞれ対応する平面とみなされる背景部分の動きに起因して生じたとみなされるベクトルのことを指す。すなわち、インライアベクトルが多ければ、背景部分の動きを表現する寄与度が高いといえる。第二の条件式では、H0に対応するインライアベクトルの数とHi−1に対応するインライアベクトルの数の比を計算することによって、相対的な寄与度が十分であるかを判定する。相対的な寄与度が十分でないと判定されたときには、繰り返しの処理を終了し、非背景部分の動きベクトルを特定する処理に進むことになる。一方、相当な寄与度が十分である場合、繰り返し処理が継続される。
<ステップS2080>
ステップS2080に処理が進んだ時点で、(変数iの値−1)がNN(2≦NN<N)であったとすると、CPU105は、集合VNNに属する動きベクトル情報群と、集合Rに含まれている動きベクトル情報群と、を要素とする集合D(集合VNNと集合Rとの和集合)を生成する。この処理は、以下の(式4)によって表される。
ステップS2080に処理が進んだ時点で、(変数iの値−1)がNN(2≦NN<N)であったとすると、CPU105は、集合VNNに属する動きベクトル情報群と、集合Rに含まれている動きベクトル情報群と、を要素とする集合D(集合VNNと集合Rとの和集合)を生成する。この処理は、以下の(式4)によって表される。
<ステップS2090>
CPU105は、集合Dに含まれている動きベクトル情報群から、時間的および空間的に近接した動きベクトルの動きベクトル情報を抽出し、該抽出した動きベクトル情報から成る集合D’を、非背景部分(すなわち前景オブジェクト)の動きベクトル群に対応する動きベクトル情報の集合として生成する。すなわち、集合Dから集合D’を求める処理とは、集合Dから、誤った動きベクトルの動きベクトル情報を除去する処理である。非背景部分とは、背景以外の画像領域を指し、例えば、動体が写っている部分である。
CPU105は、集合Dに含まれている動きベクトル情報群から、時間的および空間的に近接した動きベクトルの動きベクトル情報を抽出し、該抽出した動きベクトル情報から成る集合D’を、非背景部分(すなわち前景オブジェクト)の動きベクトル群に対応する動きベクトル情報の集合として生成する。すなわち、集合Dから集合D’を求める処理とは、集合Dから、誤った動きベクトルの動きベクトル情報を除去する処理である。非背景部分とは、背景以外の画像領域を指し、例えば、動体が写っている部分である。
そしてCPU105は、生成した集合D’を、外部ストレージ107に保存したり、ネットワークI/F108を介して外部の機器に対して送信したりする。集合D’の出力先は特定の出力先に限るものではない。また、CPU105は、生成した集合D’を用いて、撮像画像から非背景領域を認識するなど、適当な処理を実行してもよい。ステップS2090における処理の詳細については、図6のフローチャートを用いて後述する。
次に、上記のステップS2020における処理の詳細について、図4のフローチャートを用いて説明する。
<ステップS4010>
CPU105は、集合Xに属するそれぞれの動きベクトル情報を、非類似度が低い順(信頼性が高い順)にソートする。
CPU105は、集合Xに属するそれぞれの動きベクトル情報を、非類似度が低い順(信頼性が高い順)にソートする。
<ステップS4020>
CPU105は、ステップS4010でソートされた動きベクトル情報のうち上位(最も非類似度が低い)から順にN_RANSAC個の動きベクトル情報を抽出し、該抽出したN_RANSAC個の動きベクトル情報から成る集合V0を生成する。本実施形態では、N_RANSAC=300とする。
CPU105は、ステップS4010でソートされた動きベクトル情報のうち上位(最も非類似度が低い)から順にN_RANSAC個の動きベクトル情報を抽出し、該抽出したN_RANSAC個の動きベクトル情報から成る集合V0を生成する。本実施形態では、N_RANSAC=300とする。
次に、上記のステップS2040において実行される、平面とみなされる背景部分の動きを推定するためのホモグラフィ行列の推定処理について、図5のフローチャートを用いて説明する。
<ステップS5000>
CPU105は、何回繰り返し処理されたかを示すイタレーション(Iteration)数をカウントするための変数Lの値を1つインクリメントする。変数Lの値は、図5のフローチャートに従った処理が開始されるたびに0に初期化される。
CPU105は、何回繰り返し処理されたかを示すイタレーション(Iteration)数をカウントするための変数Lの値を1つインクリメントする。変数Lの値は、図5のフローチャートに従った処理が開始されるたびに0に初期化される。
<ステップS5010>
CPU105は、集合Viに属する動きベクトル情報群からランダムに複数の動きベクトル情報を取得し、該取得した複数の動きベクトル情報から仮のホモグラフィ行列Hiを算出する。本実施形態では、4つの動きベクトル情報から得られる座標を示す16変数から方程式を解いてホモグラフィ行列のそれぞれの要素を算出する。ホモグラフィ行列の算出方法には様々な方法があり、如何なる方法を採用しても構わない。なお、ホモグラフィ行列の算出方法によっては、動きベクトル情報の選び方によってはホモグラフィ行列が算出できない場合がある。ホモグラフィ行列の算出が不可能か否かを判定して、失敗と判定された場合には、処理をステップS5010へ遷移させ、再度、処理が行われるなどの構成をとってもよい。
CPU105は、集合Viに属する動きベクトル情報群からランダムに複数の動きベクトル情報を取得し、該取得した複数の動きベクトル情報から仮のホモグラフィ行列Hiを算出する。本実施形態では、4つの動きベクトル情報から得られる座標を示す16変数から方程式を解いてホモグラフィ行列のそれぞれの要素を算出する。ホモグラフィ行列の算出方法には様々な方法があり、如何なる方法を採用しても構わない。なお、ホモグラフィ行列の算出方法によっては、動きベクトル情報の選び方によってはホモグラフィ行列が算出できない場合がある。ホモグラフィ行列の算出が不可能か否かを判定して、失敗と判定された場合には、処理をステップS5010へ遷移させ、再度、処理が行われるなどの構成をとってもよい。
<ステップS5020>
CPU105は、集合Viに属するそれぞれの動きベクトル情報について、ステップS5010で求めたホモグラフィ行列Hiを用いて再投影誤差を求める。そして、集合Viに属するそれぞれの動きベクトル情報のうち再投影誤差が許容誤差内の動きベクトル情報の数をインライアベクトル数としてカウントする。ホモグラフィ行列をH、インライアベクトルの集合をWとすると、Wは以下の(式5)を計算することで求めることができる。
CPU105は、集合Viに属するそれぞれの動きベクトル情報について、ステップS5010で求めたホモグラフィ行列Hiを用いて再投影誤差を求める。そして、集合Viに属するそれぞれの動きベクトル情報のうち再投影誤差が許容誤差内の動きベクトル情報の数をインライアベクトル数としてカウントする。ホモグラフィ行列をH、インライアベクトルの集合をWとすると、Wは以下の(式5)を計算することで求めることができる。
一般に、ロバスト推定を行う場合にはe=3とすることが多いが、本実施形態では、背景と非背景の動きを正確に分類するという考えからe=1としている。なお、許容誤差は、解像度などにも依存する項目であり、一般的なロバスト推定よりも、小さい値を設定することが好ましいが、1に限定されるものではない。インライアベクトル数は|W|であり、Wの要素数をカウントすることにより得られる。
<ステップS5030>
CPU105は、ステップS5020で求めたインライアベクトル数が、RAM102や外部ストレージ107に保持している最大インライアベクトル数よりも大きいか否かを判断する。この判断の結果、ステップS5020で求めたインライアベクトル数が最大インライアベクトル数よりも大きい場合には、処理はステップS5040に進み、ステップS5020で求めたインライアベクトル数が最大インライアベクトル数以下である場合には、処理はステップS5050に進む。なお、例外として、一回目のステップS5030では、このような判断を行うことなく処理は必ずステップS5040に進む。
CPU105は、ステップS5020で求めたインライアベクトル数が、RAM102や外部ストレージ107に保持している最大インライアベクトル数よりも大きいか否かを判断する。この判断の結果、ステップS5020で求めたインライアベクトル数が最大インライアベクトル数よりも大きい場合には、処理はステップS5040に進み、ステップS5020で求めたインライアベクトル数が最大インライアベクトル数以下である場合には、処理はステップS5050に進む。なお、例外として、一回目のステップS5030では、このような判断を行うことなく処理は必ずステップS5040に進む。
<ステップS5040>
CPU105は、ステップS5020で求めたインライアベクトル数を最大インライアベクトル数としてRAM102や外部ストレージ107に格納すると共に、ステップS5010で求めたホモグラフィ行列HiをベストパラメータとしてRAM102や外部ストレージ107に格納する。なお、RAM102や外部ストレージ107にすでにベストパラメータとしてホモグラフィ行列が格納されていた場合には、ステップS5040では、すでに格納されているホモグラフィ行列に上書きして格納する。
CPU105は、ステップS5020で求めたインライアベクトル数を最大インライアベクトル数としてRAM102や外部ストレージ107に格納すると共に、ステップS5010で求めたホモグラフィ行列HiをベストパラメータとしてRAM102や外部ストレージ107に格納する。なお、RAM102や外部ストレージ107にすでにベストパラメータとしてホモグラフィ行列が格納されていた場合には、ステップS5040では、すでに格納されているホモグラフィ行列に上書きして格納する。
このように、ステップS5040の処理を行うたびに、RAM102や外部ストレージ107に格納されているホモグラフィ行列は、最新のベストパラメータであるホモグラフィ行列に更新される。
<ステップS5050>
CPU105は、変数Lの値が上限数に達したか否かを判断する。本実施形態では、上限値を1000とするが、この値に限るものではない。例えば、外部撮像部109から入力される動画像のフレームレートが30fpsであって、この動画像をリアルタイムに処理する場合、図2のフローチャートに従った処理は33ms以内で完了する必要がある。そのたため、上限値は、CPU105の処理性能に応じて、時間内に処理が終了する最適な値に設定すればよい。変数Lの値が上限値に達した場合には、処理はステップS5070に進み、変数Lの値が上限値に達していない場合には、処理はステップS5060に進む。
CPU105は、変数Lの値が上限数に達したか否かを判断する。本実施形態では、上限値を1000とするが、この値に限るものではない。例えば、外部撮像部109から入力される動画像のフレームレートが30fpsであって、この動画像をリアルタイムに処理する場合、図2のフローチャートに従った処理は33ms以内で完了する必要がある。そのたため、上限値は、CPU105の処理性能に応じて、時間内に処理が終了する最適な値に設定すればよい。変数Lの値が上限値に達した場合には、処理はステップS5070に進み、変数Lの値が上限値に達していない場合には、処理はステップS5060に進む。
<ステップS5060>
CPU105は、変数Lの値が十分であるか否かを判断する。より具体的には、変数Lの値が、以下の(式6)によって求まる値LNを超えた場合には十分と判断し、超えていない場合には十分ではないと判断する。
CPU105は、変数Lの値が十分であるか否かを判断する。より具体的には、変数Lの値が、以下の(式6)によって求まる値LNを超えた場合には十分と判断し、超えていない場合には十分ではないと判断する。
ここで、psampleは、正しい動きベクトル情報が最低一つ存在する確率である。本実施形態では、99%の確率で存在すると仮定し、psample=0.99とする。mは、パラメータの算出に必要な動きベクトルの数である。ホモグラフィ行列の場合は、m=4となる。(式6)は、同じrinlierであれば、mが小さいほど小さいLNを導出する式である。つまり、図5のフローチャートに従った処理では、mが小さいほどイタレーション数が少なくなることになる。(式6)中のrinlier(インライア率)は下記の式により算出される。
この判断の結果、変数Lの値が十分と判断した場合には、処理はステップS5070に進む。一方、変数Lの値が十分ではないと判断した場合には、処理はステップS5000に進む。
<ステップS5070>
CPU105は、ステップS5040でRAM102や外部ストレージ107に格納したベストパラメータであるホモグラフィ行列を、以降で用いるホモグラフィ行列とする。
CPU105は、ステップS5040でRAM102や外部ストレージ107に格納したベストパラメータであるホモグラフィ行列を、以降で用いるホモグラフィ行列とする。
次に、上記のステップS2090における類似ベクトルの抽出処理の詳細について、図6のフローチャートを用いて説明する。なお、図6のフローチャートに従った処理の開始段階(少なくとも、初めてステップS6080の処理を行う前)において、集合D’を空集合に初期化する。実際には、集合D’を管理する配列の各要素を0やNULLなどの適当な値で初期化する。
<ステップS6010>
CPU105は、以下の処理で用いる変数kの値を0に初期化する。
CPU105は、以下の処理で用いる変数kの値を0に初期化する。
<ステップS6020>
CPU105は、以下の処理で用いる変数jの値を(k+1)に初期化すると共に、以下の処理で用いる変数countの値を0に初期化する。
CPU105は、以下の処理で用いる変数jの値を(k+1)に初期化すると共に、以下の処理で用いる変数countの値を0に初期化する。
<ステップS6030>
集合Dに含まれているそれぞれの動きベクトル情報のうちk番目の動きベクトル情報をD[k]と表記した場合、CPU105は、「集合Dに含まれているそれぞれの動きベクトル情報のうちk番目の動きベクトル情報に含まれている始点の座標と、j番目の動きベクトル情報に含まれている始点の座標と、の差分(距離)が閾値dist未満、且つk番目の動きベクトル情報に含まれているベクトル成分(x成分及びy成分)と、j番目の動きベクトル情報に含まれているベクトル成分(x成分及びy成分)と、の差分(距離)が閾値vdist未満」という条件が満たされているか否かを判断する。本実施形態では、dist=96、vdist=4とするが、dist、vdistの値はこれに限るものではない。
集合Dに含まれているそれぞれの動きベクトル情報のうちk番目の動きベクトル情報をD[k]と表記した場合、CPU105は、「集合Dに含まれているそれぞれの動きベクトル情報のうちk番目の動きベクトル情報に含まれている始点の座標と、j番目の動きベクトル情報に含まれている始点の座標と、の差分(距離)が閾値dist未満、且つk番目の動きベクトル情報に含まれているベクトル成分(x成分及びy成分)と、j番目の動きベクトル情報に含まれているベクトル成分(x成分及びy成分)と、の差分(距離)が閾値vdist未満」という条件が満たされているか否かを判断する。本実施形態では、dist=96、vdist=4とするが、dist、vdistの値はこれに限るものではない。
そしてこの判断の結果、この条件が満たされている場合には、処理はステップS6040に進む。一方、この条件が満たされていない場合には、処理はステップS6050に進む。
なお、ステップS6030では、k番目の動きベクトル情報が規定する動きベクトルとj番目の動きベクトル情報が規定する動きベクトルとがほぼ同じ位置にあり且つほぼ同じサイズを有する動きベクトルであるか否かを判断することができれば良いため、ステップS6030で使用する条件は上記の条件に限るものではない。例えば、上記の条件において「k番目の動きベクトル情報に含まれているベクトル成分(x成分及びy成分)と、j番目の動きベクトル情報に含まれているベクトル成分(x成分及びy成分)と、の差分(距離)が閾値vdist未満」を、「k番目の動きベクトル情報に含まれている終点の座標と、j番目の動きベクトル情報に含まれている終点の座標と、の差分(距離)が閾値edist未満」に置き換えても構わない。
<ステップS6040>
CPU105は、変数countの値を1つインクリメントする。このカウントアップにより、k番目の動きベクトル情報が規定する動きベクトルとほぼ同じ位置に位置しており、且つほぼ同じサイズを有する動きベクトルの数を計数している。
CPU105は、変数countの値を1つインクリメントする。このカウントアップにより、k番目の動きベクトル情報が規定する動きベクトルとほぼ同じ位置に位置しており、且つほぼ同じサイズを有する動きベクトルの数を計数している。
<ステップS6050>
CPU105は、変数jの値を1つインクリメントする。
CPU105は、変数jの値を1つインクリメントする。
<ステップS6060>
CPU105は、変数jの値が、集合Dに含まれている動きベクトル情報の数=|D|に達したか否かを判断する。この判断の結果、達した場合には、処理はステップS6070に進み、未だ達していない場合には、処理はステップS6030に進む。
CPU105は、変数jの値が、集合Dに含まれている動きベクトル情報の数=|D|に達したか否かを判断する。この判断の結果、達した場合には、処理はステップS6070に進み、未だ達していない場合には、処理はステップS6030に進む。
<ステップS6070>
CPU105は、変数countの値が閾値count_thより大きいか否かを判断する。本実施形態では、count_thの値は4とするが、count_thの値は4に限るものではない。
CPU105は、変数countの値が閾値count_thより大きいか否かを判断する。本実施形態では、count_thの値は4とするが、count_thの値は4に限るものではない。
この判断の結果、変数countの値が閾値count_thより大きい場合には、処理はステップS6080に進み、変数countの値が閾値count_th以下である場合には、処理はステップS6090に進む。
<ステップS6080>
CPU105は、集合D’に、集合Dに含まれているそれぞれの動きベクトル情報のうちk番目の動きベクトル情報を登録する。
CPU105は、集合D’に、集合Dに含まれているそれぞれの動きベクトル情報のうちk番目の動きベクトル情報を登録する。
<ステップS6090>
CPU105は、変数kの値を1つインクリメントする。
CPU105は、変数kの値を1つインクリメントする。
<ステップS6100>
CPU105は、変数kの値が、集合Dに含まれている動きベクトル情報の数=|D|に達したか否かを判断する。この判断の結果、達した場合には、図6のフローチャートに従った処理は完了すると共に、図2のフローチャートに従った処理も完了する。一方、未だ達していない場合には、処理はステップS6020に進む。
CPU105は、変数kの値が、集合Dに含まれている動きベクトル情報の数=|D|に達したか否かを判断する。この判断の結果、達した場合には、図6のフローチャートに従った処理は完了すると共に、図2のフローチャートに従った処理も完了する。一方、未だ達していない場合には、処理はステップS6020に進む。
以上の処理を行うことで、集合D’には、集合Dから乱雑な動きベクトルの動きベクトル情報を除いた残りの動きベクトル情報のうち近接領域で類似している動きベクトルの動きベクトル情報(集合Dに属する動きベクトル群において、互いに類似する動きベクトルの数が所定数以上となる動きベクトル)が登録されることになる。同じ被写体に属する動きベクトルは類似するので、集合D’にはこのような動体の動きベクトルの動きベクトル情報が含まれていることになる。
パン・チルトなどのカメラワークでカメラ自体が動いた場合には、撮像画面上は背景も動いたこととみなされ、ゼロベクトルでない動きベクトルが発生する。連続する撮像画像の動きベクトルからホモグラフィ行列をロバスト推定により推定するということは、撮像画像内の背景の動きに起因する動きベクトルを抽出しながら、3次元空間内の背景とみなされる平面の射影変換、つまり、背景の動きをホモグラフィ行列として算出することである。ロバスト推定は、動きベクトルの集合から、動体の動きベクトル、誤検出された動きベクトルを除去しながら、背景の動きに起因する動きベクトルから背景の動きを表現するホモグラフィ行列を推定する動作である。このとき、背景に分類される全ての静止被写体の位置がカメラに対して十分に遠い場合、全ての被写体が無限遠にある平面上に存在するとみなすことができるものとすると、背景の動きを代表する十分に精度の高いホモグラフィ行列を一つ算出することができる。よって、入力された動きベクトル群から、推定したホモグラフィ行列での再投影誤差が閾値以下のベクトルを除去した場合、残りの動きベクトルは、動体の動きベクトルと誤検出された動きベクトルの集合となる。誤検出された動きベクトルは、ベクトルの長さや方向が乱雑であるため、動きが乱雑な動きベクトルを除去すれば、動体の動きベクトルを抽出することができる。しかし、背景とみなされるべき静止被写体がカメラの位置に対し近距離と遠距離に存在し、カメラをパン・チルトさせた場合、2次元画像上での移動量は異なり、一つのホモグラフィ行列で背景の動きを代表させることは難しい。然るに本実施形態では、段階的に複数のホモグラフィ行列を推定し、それぞれのホモグラフィ行列で再投影誤差が閾値より大きい動きベクトルを抽出している。これにより、入力された動きベクトルから背景の動きベクトルをより多く除去でき、奥行きのあるシーンにおいても動体の動きベクトルの抽出能力が向上する。
すなわち、本実施形態に係る画像処理装置の構成及び動作を要約すれば、以下のようになる。先ず、画像における動きベクトル群を、動きベクトルの信頼度が高い第1の動きベクトル群と、該第1の動きベクトル群以外の第2の動きベクトル群と、に分類する。そして、第1の動きベクトル群のうち、背景とみなされる平面から平面への射影変換を行うためのホモグラフィ行列を求める際にアウトライアベクトルとなる動きベクトル群を第1の対象動きベクトル群として特定(第1の特定)し、第2の動きベクトル群のうち、ホモグラフィ行列に基づく再投影誤差が規定値よりも大きくなる動きベクトル群を第2の対象動きベクトル群として特定(第2の特定)する。そして、第1の対象動きベクトル群及び第2の対象動きベクトル群のうち、他と類似する対象動きベクトルの集合を、画像における非背景部分の動きベクトルの集合として特定(第3の特定)する。
そしてこの第1の特定では、次のような処理を行っていることになる。
(A) 第1の動きベクトル群のうち、該第1の動きベクトル群に基づくホモグラフィ行列を求める際に背景の動きに対応しないアウトライアベクトルとなる動きベクトル群を特定する。
(B) (A)において特定された背景の動きに対応しないアウトライアベクトルとなる動きベクトル群のうち、新たなホモグラフィ行列を求める際にアウトライアベクトルとなる動きベクトル群を特定する。
(C) (B)を繰り返して複数回行うことで得られる動きベクトル群を、第1の対象動きベクトル群として特定する。つまり、第1の対象動きベクトルは前景としてみなされるオブジェクトの動きに基づくベクトル群である。
また、第2の特定では、次のような処理を行っていることになる。
(D) 第2の動きベクトル群のうち、第1の動きベクトル群から推定されたホモグラフィ行列に基づく再投影誤差が規定値よりも大きくなる動きベクトル群を特定する。
(E) (D)の後、第1の特定でホモグラフィ行列を推定するたびに、第2の特定で前回特定した動きベクトル群のうち、該ホモグラフィ行列に基づく再投影誤差が規定値よりも大きくなる動きベクトル群を特定する。
(F) (E)により得られる動きベクトル群を、前景としてみなされるオブジェクトの動きに基づくベクトル群の1つである第2の対象動きベクトル群として特定する。
[第2の実施形態]
本実施形態では、図2のフローチャートに従った処理の代わりに、図7のフローチャートに従った処理を行う点が、第1の実施形態と異なる。以下では、第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとして説明する。図7において図2と同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
本実施形態では、図2のフローチャートに従った処理の代わりに、図7のフローチャートに従った処理を行う点が、第1の実施形態と異なる。以下では、第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとして説明する。図7において図2と同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
ステップS7070では、図2のステップS2070と比して、第二の条件式が、(i<N && (i>1 && (|Vi−2|−|Vi−1|)*ratio2<|Vi−1|−|Vi|)という条件式に変更されている。ratio2は、0.7(1未満の正の係数)とするが、この値に限らない。
第1の実施形態では、H0に対応するインライアベクトルの数とHi−1に対応するインライアベクトルの数の比を計算していたが、本実施形態では、H(i−2)に対応するインライアベクトルの数とHi−1に対応するインライアベクトルの数の比を計算しており、このような条件式の変更によっても、第1の実施形態と同様の効果を奏することができる。
[第3の実施形態]
本実施形態では、図2のフローチャートに従った処理の代わりに、図8のフローチャートに従った処理を行う点が、第1の実施形態と異なる。以下では、第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとして説明する。図8において図2と同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
本実施形態では、図2のフローチャートに従った処理の代わりに、図8のフローチャートに従った処理を行う点が、第1の実施形態と異なる。以下では、第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとして説明する。図8において図2と同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
<ステップS8020>
CPU105は、集合Xを複製したものを集合Rとして生成する。すなわち、集合Rは、集合Xに属する全ての動きベクトル情報から成る集合である。なお、集合Rを生成するのは、オリジナルの集合である集合Xを何らかの目的で残しておきたいというケースに対処するものであって、このようなケースを想定しなくても良い場合には、集合Rを生成することなく、以下の処理では集合Rではなく集合Xそのものを用いればよい。
CPU105は、集合Xを複製したものを集合Rとして生成する。すなわち、集合Rは、集合Xに属する全ての動きベクトル情報から成る集合である。なお、集合Rを生成するのは、オリジナルの集合である集合Xを何らかの目的で残しておきたいというケースに対処するものであって、このようなケースを想定しなくても良い場合には、集合Rを生成することなく、以下の処理では集合Rではなく集合Xそのものを用いればよい。
<ステップS8035>
CPU105は、集合Rに属するそれぞれの動きベクトル情報を、非類似度が低い順(信頼性が高い順)にソートし、該ソートされた動きベクトル情報のうち上位(最も非類似度が低い)から順にN_RANSAC個の動きベクトル情報を抽出し、該抽出したN_RANSAC個の動きベクトル情報から成る集合V’を生成する。本実施形態でも、N_RANSAC=300とする。
CPU105は、集合Rに属するそれぞれの動きベクトル情報を、非類似度が低い順(信頼性が高い順)にソートし、該ソートされた動きベクトル情報のうち上位(最も非類似度が低い)から順にN_RANSAC個の動きベクトル情報を抽出し、該抽出したN_RANSAC個の動きベクトル情報から成る集合V’を生成する。本実施形態でも、N_RANSAC=300とする。
この場合、ステップS2040では、集合Viの代わりに集合V’を用いる点が、第1の実施形態と異なる。すなわち、集合V’に含まれている動きベクトル情報を用いてロバスト推定を実施してホモグラフィ行列Hiを推定し、集合V’に含まれている動きベクトル情報のうち、ホモグラフィ行列Hiを求める際にアウトライアベクトルとなった動きベクトルの動きベクトル情報の集合Vi+1を生成する。なお、本実施形態ではV0=0とする。
本実施形態では、ホモグラフィ行列を求めるために用いる動きベクトル情報の数が常にN_RANSAC個(本実施形態では300個)となり、十分な数を維持できることから、ホモグラフィ行列の推定性能が向上する。
その後、ステップS8035では、ステップS2050において更新された集合Rを対象として処理を行う。なお、本実施形態においても、ステップS2070は、ステップS7070で置き換えても構わない。
すなわち、本実施形態に係る画像処理装置の構成及び動作を要約すれば、以下のようになる。先ず、画像における動きベクトル群のうち動きベクトルの信頼度が高い上位の所定数の動きベクトル群から背景とみなされる平面から平面への射影変換を行うためのホモグラフィ行列を求める。その際にアウトライアベクトルとなる動きベクトル群を第1の対象動きベクトル群として特定する(第1の特定)。また、該画像における動きベクトル群から、ホモグラフィ行列に基づく再投影誤差が規定値よりも大きくなる動きベクトル群を第2の対象動きベクトル群として特定する(第2の特定)。そして、第1の対象動きベクトル群及び第2の対象動きベクトル群のうち、他と類似する対象動きベクトルの集合を、画像における非背景部分の動きベクトルの集合として特定する(第3の特定)。
そしてこの第1の特定では、次のような処理を行っていることになる。
(A) 画像における動きベクトル群のうち信頼性の高い上位の所定数の動きベクトルに基づくホモグラフィ行列を求める際に背景の動きに対応しないアウトライアベクトルとなる動きベクトル群を特定する。
(B) (A)において特定された背景の動きに対応しないアウトライアベクトルとなる動きベクトル群のうちさらに信頼性の高い上位の所定数の動きベクトルに基づく新たなホモグラフィ行列を求める際にアウトライアベクトルとなる動きベクトル群を特定する。
(C) (B)を繰り返して複数回行うことで得られる動きベクトル群を、第1の対象動きベクトル群として特定する。つまり、第1の対象動きベクトルは前景としてみなされるオブジェクトの動きに基づくベクトル群である。
また、第2の特定では、次のような処理を行っていることになる。
(D) 画像における動きベクトル群から、該動きベクトル群のうち信頼性の高い上位の所定数の動きベクトルから推定されたホモグラフィ行列に基づく再投影誤差が規定値よりも大きくなる動きベクトル群を特定する。
(E) (D)の後、第1の特定でホモグラフィ行列を推定するたびに、第2の特定で前回特定した動きベクトル群のうち、該ホモグラフィ行列に基づく再投影誤差が規定値よりも大きくなる動きベクトル群を特定する。
(F) (E)により得られる動きベクトル群を、前景としてみなされるオブジェクトの動きに基づくベクトル群の1つである第2の対象動きベクトル群として特定する。
[第4の実施形態]
第1〜3の実施形態において説明した処理は、図1(b)に示した構成を有する画像処理装置によっても達成可能である。図1(b)に示した構成は、例えば、撮像装置に適用可能な構成である。図1(b)において、図1(a)に示した機能部と同じ機能部については同じ参照番号を付しており、該機能部に係る説明は省略する。
第1〜3の実施形態において説明した処理は、図1(b)に示した構成を有する画像処理装置によっても達成可能である。図1(b)に示した構成は、例えば、撮像装置に適用可能な構成である。図1(b)において、図1(a)に示した機能部と同じ機能部については同じ参照番号を付しており、該機能部に係る説明は省略する。
撮像部110は、レンズ、センサ、レンズ制御部、を有するものであり、レンズ制御部により駆動制御されたレンズを介して受光した外界からの光をセンサで受光し、該受光した光に基づく撮像画像を周知の方法でもって生成して出力する。撮像部110は更に、絞りやズーム量などのレンズの制御状態をも出力する。撮像部110から出力された撮像画像及びレンズの制御状態は、RAM102や外部ストレージ107に格納される。
動き検出部111は、RAM102や外部ストレージ107に格納されている撮像画像群のうち撮像時刻が隣接する2枚の撮像画像(動画像の場合は隣接するフレームの画像)から動きベクトル群を抽出する(もちろん、1フレームおきなど、隣接した撮像時刻の撮像画像でなくても良い)。
なお、画像処理装置の構成が図1(a)に示した構成であろうと、図1(b)に示した構成であろうと、その一部若しくは全部を1つのチップ上にまとめてハードウェア化して実装しても良い。例えば、CPU105、RAM102、外部ストレージ107、グラフィックプロセッサ103、ネットワークI/F108を配置したチップを構成しても良く、該チップとその他の機能部と、を有する画像処理装置を形成しても構わない。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
105:CPU
Claims (9)
- 画像における動きベクトル群を取得する取得手段と、
前記取得手段によって取得された動きベクトル群に基づいて、異なる複数の背景部分の動きを推定する推定手段と、
前記取得手段によって取得された動きベクトル群のうち、前記推定手段によって推定された異なる複数の背景部分の動きにいずれも対応していない動きベクトルを非背景の動きベクトルとして特定する特定手段と
を備えることを特徴とする画像処理装置。 - 前記特定手段により、前記動きベクトル群のうち、ある背景部分の動きに対応しないアウトライアベクトルとなる動きベクトル群を特定し、さらに前記推定手段により、前記特定されたアウトライアベクトルから異なる背景部分の動きを推定し、該推定された異なる背景部分に対応しないアウトライアベクトルとなる動きベクトル群を特定する処理を繰り返し行うことにより、非背景の動きベクトルを特定することを特徴とする請求項1に記載の画像処理装置。
- 更に、
前記取得手段によって取得された動きベクトル群のうち、信頼度の高い動きベクトル群と信頼度の低い動きベクトル群とに分類する分類手段を有し、
前記推定手段は、前記分類手段によって分類された信頼度の高い動きベクトル群に基づいて前記異なる複数の背景部分を特定することを特徴とする請求項1に記載の画像処理装置。 - 前記特定手段は、
前記分類手段によって分類された信頼度の低い動きベクトル群のうち、前記推定手段によって推定された前記異なる複数の背景部分の動きに対応しない動きベクトルを特定することを特徴とする請求項3に記載の画像処理装置。 - 前記特定手段は、前記背景部分の動きに対応するベクトルの数と、前回の処理において異なる背景部分の動きに対応するベクトルの数と、の比に基づいて繰り返し処理をおこなうかどうかを決定することを特徴とする請求項2に記載の画像処理装置。
- 前記特定手段は、互いに類似する所定数以上の動きベクトルの集合を、前記画像における非背景の動きベクトルの集合として特定することを特徴とする請求項1乃至4の何れか1項に記載の画像処理装置。
- 更に、
前記画像を撮像する撮像手段を備えることを特徴とする請求項1乃至6の何れか1項に記載の画像処理装置。 - 画像処理装置が行う画像処理方法であって、
画像における動きベクトル群を取得する取得工程と、
前記取得工程で取得された動きベクトル群に基づいて、異なる複数の背景部分の動きを推定する推定工程と、
前記取得工程で取得された動きベクトル群のうち、前記推定工程で推定された異なる複数の背景部分の動きにいずれも対応していない動きベクトルを非背景の動きベクトルとして特定する特定工程と
を備えることを特徴とする画像処理方法。 - コンピュータを、請求項1乃至7の何れか1項に記載の画像処理装置の各手段として機能させるためのコンピュータプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015000508A JP2016126576A (ja) | 2015-01-05 | 2015-01-05 | 画像処理装置、画像処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015000508A JP2016126576A (ja) | 2015-01-05 | 2015-01-05 | 画像処理装置、画像処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016126576A true JP2016126576A (ja) | 2016-07-11 |
Family
ID=56359530
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015000508A Pending JP2016126576A (ja) | 2015-01-05 | 2015-01-05 | 画像処理装置、画像処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2016126576A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020144760A1 (ja) * | 2019-01-09 | 2020-07-16 | オリンパス株式会社 | 画像処理装置、画像処理方法および画像処理プログラム |
-
2015
- 2015-01-05 JP JP2015000508A patent/JP2016126576A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020144760A1 (ja) * | 2019-01-09 | 2020-07-16 | オリンパス株式会社 | 画像処理装置、画像処理方法および画像処理プログラム |
JPWO2020144760A1 (ja) * | 2019-01-09 | 2021-11-18 | オリンパス株式会社 | 画像処理装置、画像処理方法および画像処理プログラム |
JP7110397B2 (ja) | 2019-01-09 | 2022-08-01 | オリンパス株式会社 | 画像処理装置、画像処理方法および画像処理プログラム |
US11948328B2 (en) | 2019-01-09 | 2024-04-02 | Olympus Corporation | Image-processing device, image-processing method, and image-processing program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10254845B2 (en) | Hand gesture recognition for cursor control | |
Ye et al. | Foreground–background separation from video clips via motion-assisted matrix restoration | |
US10354129B2 (en) | Hand gesture recognition for virtual reality and augmented reality devices | |
TWI543610B (zh) | 電子裝置及其影像選擇方法 | |
Li et al. | DeepI2P: Image-to-point cloud registration via deep classification | |
US20220222776A1 (en) | Multi-Stage Multi-Reference Bootstrapping for Video Super-Resolution | |
Cheng et al. | Implicit motion handling for video camouflaged object detection | |
WO2016054779A1 (en) | Spatial pyramid pooling networks for image processing | |
US9794588B2 (en) | Image processing system with optical flow recovery mechanism and method of operation thereof | |
US11049256B2 (en) | Image processing apparatus, image processing method, and storage medium | |
CN112561978B (zh) | 深度估计网络的训练方法、图像的深度估计方法、设备 | |
CN112184759A (zh) | 一种基于视频的运动目标检测与跟踪方法及系统 | |
CN109063549B (zh) | 基于深度神经网络的高分辨率航拍视频运动目标检测方法 | |
JP6849101B2 (ja) | 高速で漸進的なスーパーボクセルベースの時空間ビデオセグメンテーション法 | |
US9865061B2 (en) | Constructing a 3D structure | |
US9147256B2 (en) | Image processing apparatus and image processing method | |
Mansour et al. | Video background subtraction using semi-supervised robust matrix completion | |
JP2017068815A (ja) | アテンション検出装置及びアテンション検出方法 | |
CN108229281B (zh) | 神经网络的生成方法和人脸检测方法、装置及电子设备 | |
JP2013037539A (ja) | 画像特徴量抽出装置およびそのプログラム | |
Kryjak et al. | Real-time implementation of foreground object detection from a moving camera using the vibe algorithm | |
CN113793370B (zh) | 三维点云配准方法、装置、电子设备及可读介质 | |
CN111080683B (zh) | 图像处理方法、装置、存储介质及电子设备 | |
JP6341708B2 (ja) | 情報処理装置及びその制御方法、プログラム | |
JP2016126576A (ja) | 画像処理装置、画像処理方法 |