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

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

Info

Publication number
JP2011081675A
JP2011081675A JP2009234593A JP2009234593A JP2011081675A JP 2011081675 A JP2011081675 A JP 2011081675A JP 2009234593 A JP2009234593 A JP 2009234593A JP 2009234593 A JP2009234593 A JP 2009234593A JP 2011081675 A JP2011081675 A JP 2011081675A
Authority
JP
Japan
Prior art keywords
block
value
moving
feature amount
motion vector
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
JP2009234593A
Other languages
English (en)
Inventor
Michinao Hanefuji
通直 羽藤
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.)
Victor Company of Japan Ltd
Original Assignee
Victor Company of Japan Ltd
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 Victor Company of Japan Ltd filed Critical Victor Company of Japan Ltd
Priority to JP2009234593A priority Critical patent/JP2011081675A/ja
Publication of JP2011081675A publication Critical patent/JP2011081675A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Studio Devices (AREA)
  • Image Analysis (AREA)

Abstract

【課題】軽演算負荷の画像処理によって動体の時間方向の情報を高精度に導出する。
【解決手段】画像処理装置110は、任意の画像のフレーム間の差分を用いて、動体112の移動軌跡をグラデーションで表すモーションヒストリーイメージを生成するMHI生成部212と、生成されたモーションヒストリーイメージを所定の大きさの小ブロックに分割するブロック分割部214と、分割された小ブロックにおける動体の水平方向および垂直方向の移動速度に相当する特徴量を小ブロック毎に導出する特徴量導出部216と、特徴量から動体の動きベクトルを導出する動きベクトル導出部218と、を備える。
【選択図】図2

Description

本発明は、撮像した画像中における動体の動きベクトルを導出可能な画像処理装置および画像処理方法に関する。
近年、監視カメラで撮影した画像(映像)を画像処理技術によって解析し、不審者を検出する機械警備が普及している。
このような不審者等の動体を検出する手法として、一般に、背景差分法やフレーム間差分法が用いられている。背景差分法は、撮像軸方向の背景画像を予め取得しておき、この背景画像と現在の画像とを比較して、階調値の差分が所定の閾値を越える画像部分を動体とみなす方法である。また、フレーム間差分法は、連続するフレーム間における画像同士の差分を求め、階調値の差分が所定の閾値を越える画像部分を動体とみなす方法である。
しかし、かかる背景差分法やフレーム間差分法では、差分が生じている画像に基づいて動体の範囲を特定することは可能だが、動体の時間軸に関する情報、例えば、動体の移動軌跡等は得ることはできなかった。したがって、物品の置き去りや持ち去り等の検出と異なり、不正侵入や不正方向への移動(フェンス乗り越え、出口からの侵入)といった不審者の行動まで把握するのは困難であった。
そこで、画像中の各画素における明るさ等の空間的、時間的な傾き(オプティカルフロー)を求めることで、動体の時間方向の情報(動体の速度と移動方向)を得る手法が知られている。また、監視カメラにおける監視対象物のパターンを登録し、パターンマッチング技法を用いて、監視対象物以外を排除処理しつつ監視対象物を識別する技術も公開されている(例えば、特許文献1)。
特開2008−152586号公報
上述したような動体の動きを検出するための従来技術では、その動体の時間方向の情報を取得するため非常に高い演算能力が必要となるので、演算能力に乏しい監視カメラ単体で不審者の行動を把握するのは困難であった。したがって、不審者の行動を把握するため、演算能力の高い計算機を追加したり、撮像した画像を収集する専用サーバに負荷を分散したりしなければならず、経済的な問題が生じていた。このような背景から、演算能力に乏しい監視カメラでも動体の時間方向の情報を容易に演算できるような画像処理が望まれていた。
本発明は、このような課題に鑑み、軽演算負荷の画像処理によって動体の時間方向の情報を高精度に導出可能な、画像処理装置および画像処理方法を提供することを目的としている。
上記課題を解決するために、本発明は下記の画像処理装置および画像処理方法を提供するものである。
(1)任意の画像のフレーム間の差分を用いて、動体の移動軌跡をグラデーションで表すモーションヒストリーイメージを生成するMHI生成部と、生成された前記モーションヒストリーイメージを所定の大きさの小ブロックに分割するブロック分割部と、分割された前記小ブロックにおける前記動体の水平方向および垂直方向の移動速度に相当する特徴量を前記小ブロック毎に導出する特徴量導出部と、前記特徴量から前記動体の動きベクトルを導出する動きベクトル導出部と、を備えることを特徴とする、画像処理装置。
(2)前記特徴量導出部は、前記分割された小ブロックを水平方向に二分したときの両画素群の差分値および垂直方向に二分したときの両画素群の差分値に基づいて前記特徴量を導出することを特徴とする上記(1)に記載の画像処理装置。
(3)前記特徴量導出部は、複数の前記小ブロックを組み合わせた大ブロックについても前記特徴量を導出し、前記大ブロックと前記小ブロックとの面積比に応じて前記大ブロックの特徴量を小ブロックに換算し、小ブロックの特徴量を導出することを特徴とする上記(1)または(2)に記載の画像処理装置。
(4)前記大ブロックは、前記大ブロックに含まれるすべての小ブロックにおける水平方向および垂直方向の差分値の符号が前記大ブロックにおけるそれぞれ対応する方向の差分値の符号と一致し、かつ、輝度値が0となる画素が前記大ブロック中に所定数未満しか存在しないブロックのうち最大の大きさのブロックであることを特徴とする上記(3)に記載の画像処理装置。
(5)前記モーションヒストリーイメージによるグラデーションの変化方向と垂直な方向に向かって、前記グラデーションが形成されている帯の幅方向の端部を抽出する端部抽出部をさらに備え、前記動きベクトル導出部は、抽出された前記端部を含む小ブロックの特徴量と、前記特徴量導出部で導出された小ブロックの特徴量とを用いて動きベクトルを導出することを特徴とする上記(1)から(4)のいずれかに記載の画像処理装置。
(6)前記動きベクトル導出部は、抽出された前記端部を含む小ブロックの特徴量から実際の移動方向βを示すtanβを求め、前記特徴量導出部で導出された小ブロックの特徴量から前記モーションヒストリーイメージによるグラデーションの変化方向αを示すtanαと速度のy成分vryを求め、
…(数式1)
に代入することで動きベクトルを導出することを特徴とする上記(5)に記載の画像処理装置。
(7)任意の画像のフレーム間の差分を用いて、動体の移動軌跡をグラデーションで表すモーションヒストリーイメージを生成し、生成した前記モーションヒストリーイメージを所定の大きさの小ブロックに分割し、分割した前記小ブロックにおける前記動体の水平方向および垂直方向の移動速度に相当する特徴量を前記小ブロック毎に導出し、前記特徴量から前記動体の動きベクトルを導出することを特徴とする、画像処理方法。
以上説明したように本発明によれば、軽演算負荷の画像処理によって動体の時間方向の情報を高精度に導出することが可能となる。
画像処理システムの概略的な構成を示したシステム構成図である。 画像処理装置の基本的な構成を示した機能ブロック図である。 MHIを説明するための画面遷移図である。 特徴量導出部の動作を説明するための説明図である。 特徴量導出部の動作を説明するための説明図である。 特徴量導出部の動作を説明するための説明図である。 特徴量導出部の動作を説明するための説明図である。 特徴量導出部の動作を説明するための説明図である。 特徴量導出部の動作を説明するための説明図である。 特徴量の演算を説明するための説明図である。 動体が水平方向に移動した場合のMHIを例示した説明図である。 小ブロックと大ブロックとの関係を示した説明図である。 原理上生じ得る2つの問題を説明するための説明図である。 動体の水平移動によるMHIの輝度値の変化を示した説明図である。 動体の勾配によるMHIの軌跡を説明するための説明図である。 移動方向とMHIのグラデーションとの関係を示した説明図である。 速度の基準値kを説明するための説明図である。 動体の勾配と速度との関係を説明するための説明図である。 動体の勾配と速度との関係を説明するための説明図である。 合成ベクトルと実際の移動における動きベクトルとの関係を示した説明図である。 動体の移動方向を説明するための説明図である。 動体の移動方向を説明するための説明図である。 動きベクトルの求め方を説明するための説明図である。 動きベクトルの速度の求め方を説明するための説明図である。 角αが90°の場合における動きベクトルのxy成分vmx、vmyの計算方法を説明するための説明図である。 検証例を示す説明図である。 画像処理方法の全体的な処理の流れを示したフローチャートである。 ブロックサイズ毎の情報を格納する構造体のリンク周辺のメモリ・レイアウトを示している。 特徴量導出ステップの具体的な処理の流れを示したフローチャートである。 特徴量決定ステップの具体的な処理の流れを示したフローチャートである。 小ブロック特徴量決定ステップの具体的な処理の流れを示したフローチャートである。 特徴量比較ステップの具体的な処理の流れを示したフローチャートである。 小ブロック換算ステップの具体的な処理の流れを示したフローチャートである。 動きベクトル導出ステップの具体的な処理の流れを示したフローチャートである。 端部抽出ステップの具体的な処理の流れを示したフローチャートである。 端部抽出ステップの動作を説明するための説明図である。 端部抽出ステップの動作を説明するための説明図である。 端部到達判断ステップの具体的な処理の流れを示したフローチャートである。 デフォルト処理ステップの具体的な処理の流れを示したフローチャートである。
以下に添付図面を参照しながら、本発明の好適な実施形態について詳細に説明する。かかる実施形態に示す寸法、材料、その他具体的な数値等は、発明の理解を容易とするための例示にすぎず、特に断る場合を除き、本発明を限定するものではない。なお、本明細書及び図面において、実質的に同一の機能、構成を有する要素については、同一の符号を付することにより重複説明を省略し、また本発明に直接関係のない要素は図示を省略する。
(画像処理システム100)
図1は、画像処理システム100の概略的な構成を示したシステム構成図である。近年、建物の内外に拘わらず、不審者の行動を検出する画像処理システム(機械警備)100が採用されている。かかる画像処理システム100においては、監視カメラ等に代表される画像処理装置110が所定の位置に固定的にまたは方向変更可能に設置され、不審者等の動体112を撮像する。
そして、画像処理装置110は、撮影した画像(映像)を画像処理技術によって解析し、動体112の時間方向の情報(動体112の速度と移動方向または動きベクトル)を導出して、その画像と時間方向の情報とを、インターネット、ISDN(Integrated Services Digital Network)回線、専用回線等の通信網を通じて監視サーバ120に送信する。
監視サーバ120は、受信した時間方向の情報から動体112が不正侵入や不正方向への移動(フェンス乗り越え、出口からの侵入)といった行動をとっているか否か判断して、その行動に対する対応を指示する。例えば、監視サーバ120は、画面上に、本来制限されている方向に動体112が移動していた場合、その旨警告を発して管理者に報知する。こうして事故や犯罪を未然に防ぐことができる。
画像処理装置110は、上述したように、動体112の時間方向の情報まで導出して監視サーバ120に送信するのが望ましいが、従来では、その演算負荷が重すぎて、例えば演算能力に乏しい監視カメラにまで適用することが困難であった。本実施形態における画像処理装置110は、軽演算負荷の画像処理によって動体112の時間方向の情報を高精度に導出可能な、画像処理装置110および画像処理方法を提供することを目的としている。
以下、このような目的を達成するための画像処理装置110の具体的構成を述べ、その後、画像処理の流れを説明する。特に、本実施形態の特徴的な構成を、1.演算対象を小ブロックとする理由、2.大ブロックを利用する理由、3.モーションヒストリーイメージにおけるグラデーションが形成されている帯の幅方向の端部のブロックを利用する理由、に示された3つの考え方に基づいて詳細に説明している。
(画像処理装置110)
図2は、画像処理装置110の基本的な構成を示した機能ブロック図である。画像処理装置110は、撮像部150と、保持部170と、制御部180とを含んで構成される。
撮像部150は、焦点調整に用いられるフォーカスレンズ152と、露光調整に用いられる絞り154と、撮像レンズ156を通じて入射する光を画像データに変換する撮像素子158と、フォーカスレンズ152および絞り154を駆動させる駆動回路160とを含んで構成され、撮像方向の画像を画像処理装置110に取り込む。
保持部170は、RAM、EEPROM(Electrically Erasable and Programmable Read Only Memory)、不揮発性RAM、フラッシュメモリ、HDD(Hard Disk Drive)等で構成され、データを一時的に保持する。なお、HDDは正確には装置であるが、説明の便宜上本説明では他の記憶媒体と同義として扱う。
制御部180は、中央処理装置(CPU)、プログラム等が格納されたROM、ワークエリアとしてのRAM等を含む半導体集積回路により、画像処理装置110全体を制御する。特に本実施形態において、制御部180は、画像入力制御部210、MHI生成部212、ブロック分割部214、特徴量導出部216、動きベクトル導出部218、端部抽出部220、動きベクトル利用部222として機能する。
画像入力制御部210は、撮像部150を通じて取得された画像をRGBやYUV4:2:2などの情報に変換しフレーム単位で抽出する。ここで、フレームは、動画を構成する個々の静止画を言い、例えば、30フレーム/秒で連続してフレームを表示することで動画を表現する。
MHI生成部212は、フレーム毎の画像の情報、特にフレーム間(現フレームと前フレーム)の差分を用いて、動体112の移動軌跡を例えばその輝度のグラデーションで表現するモーションヒストリーイメージ(Motion History Image:MHI、以下単にMHIと略す。)を生成する。MHIは、画像上で動体112の軌跡が過去のものほど暗く、最近のものほど明るく表現されたものである。したがって、動体112が観察されなかった部分や観察はされているものの予め設定されている観察期間の間移動していない部分は暗く表現される。
仮に、動体112の動きベクトルを求めるために、MHIではなく、2つのフレームにおける各対応点を見つけ、その移動量を演算する従来のマッチング方法を用いると、演算負荷が重すぎて、画像解析のリアルタイム処理に支障を来してしまう。本実施形態では、フレーム間の同一座標の差分に基づいて動体112の移動軌跡がグラデーションで表される軽負荷のMHIを用いているので、演算量を著しく削減できる。
図3は、MHIを説明するための画面遷移図である。例えば、図3(a)に示した画面162の左側に位置する立方体の動体112が、画面162の左から右に水平移動して、図3(b)に示した画面162の右側に位置した場合に、その動体112の移動に対してMHIを生成させると、その表示画面は図3(c)のようなグラデーションを形成する。かかる図3(c)を参照すると、MHIのうち、図3(b)に位置する動体112に対応する部分は明るくなり、移動元である左方向に移行するに連れ暗くなっている。
具体的に、MHIを生成する場合、MHI生成部212は、まず、フレーム間の差分を用いて画素に変化があったか否かを判定する。そして、時刻tにおいてフレーム内の任意の座標(x,y)で輝度値が変化した場合のMHIの値Hτ(x,y,t)を新たに初期値τ(msec)に設定し(τは動体112の軌跡が消滅するまでの時間であり、かつMHIにおける最大輝度値に相当する。)、変化がない場合、フレーム間隔をΔt(msec)とした場合の値Hτ(x,y,t−Δt)−Δtが正の値を示している間はその値を、正の値ではなくなれば0を設定する。したがって、同一の座標で変化が検出され続けている間、その座標のMHIの値はτとなり、変化を検出しなくなると徐々に小さくなってτmsec後に0となる。
このようにして得られたMHIの値Hτ(x,y,t)を輝度情報等に変換して得られる画像(例えば、図3(c))は、動体112の軌跡が明るさのグラデーションで表現されているため、人間が見れば動体112の動きベクトルを直感的に認識することができる。
本実施形態の以下の計算では、算出された値Hτ(x,y,t)を随時輝度情報に変換して用いてもよいが、必ずしも輝度情報に変換する必要は無く、Hτ(x,y,t)の値をそのまま利用することもできる。以下、特に断らない場合、輝度情報に変換する前のHτ(x,y,t)の値と輝度情報に変換した値とを区別せず、共にMHIの輝度値として説明する。
このようなMHIを用いて時間軸方向の情報の導出を試みた場合、任意の画素(注目画素)周辺のMHIの度合いを示すMHI値を取得し、その最大値と最小値を抽出して移動方向を求める方法がオープンソース等で実現されている。しかし、単純に注目画素の周辺で最小値と最大値とを求める方法では、ノイズの影響を受け易く、誤った移動方向を認識してしまうといった問題が生じる。また、注目画素から時間軸方向の情報を求める上記の方法においては、動体112の速度(移動距離)aと移動方向θを求めるために、注目画素におけるX軸方向の移動距離をdx、Y軸方向の移動距離をdyとすると、a=√(dx+dy)、θ=tan−1(dy/dx)といった演算を要し、単純な加減算に比べて複雑で時間を費やす乗算やアークタンジェントを実行しなければならない。このため、演算負荷が重くなりすぎて、演算能力に乏しい画像処理装置110には適用できなかった。本実施形態では、画素単位ではなく、複数の画素を集めたブロック単位で時間軸方向の情報を演算する。
(1.演算対象を小ブロックとする理由)
ブロック分割部214は、MHI生成部212によって生成されたMHIを所定の大きさのブロックに分割する。そして後述する特徴量導出部216は、分割されたブロックについて動体112の水平方向および垂直方向の移動速度に相当する特徴量を導出する。ここでは、まず、特徴量導出部216が各ブロックの特徴量をどのように導出するのかを簡単に説明し、その上でブロック分割部214がブロックをどの程度の大きさに分割すべきかを述べる。
図4〜図9は、特徴量導出部216の動作を説明するための説明図である。特徴量導出部216は、ブロック分割部214によって分割された2nドット(ピクセル)×2nドットのブロック(nは正の整数)すべてを対象として、各ブロックを水平方向に二分(左右に二分)したときの両画素群のMHI値(輝度値)の差分値と垂直方向に二分(上下に二分)したときの両画素群のMHI値(輝度値)の差分値とを求める。
ここでは、図4(a)〜(c)に示すような2nドット×2nドット(ここでは8ドット×8ドット)の大きさの基底関数が準備されており、図4中、白色で示された画素122が加算を、斜線で示された画素122が減算を意味する。図4(a)の第1基底関数は、すべての画素122が白色なので、ブロック内のすべての画素122におけるMHIの輝度値を加算し、ブロック全体の明るさを表現することができる。また、図4(b)の第2基底関数は、左半分の画素122すべて(画素群)を減算、右半分の画素122すべて(画素群)を加算するので、ブロックにおける水平方向の明るさの違いを表現することとなり、図4(c)の第3基底関数は、上半分の画素122すべて(画素群)を加算、下半分の画素122すべて(画素群)を減算するので、垂直方向の明るさの違いを表現することとなる。以下では、水平方向に二分したときの両画素群の差分値を単に水平方向の差分値と言い、垂直方向に二分したときの両画素群の差分値を単に垂直方向の差分値と言う。
上述した第1基底関数、第2基底関数、第3基底関数はウォルシュ・アダマール変換における、直流成分および空間周波数が最も低い2つの成分に相当する。このように直流成分値や特徴量(差分値)をブロック内におけるMHIの輝度値の加減算のみで導出する構成により、乗算やアークタンジェントを用いる演算方式に比べ、演算負荷を著しく軽減することが可能となる。また、複数の画素の状態を平均化することになるためノイズにも強い。
図5(a)は、動体112が水平方向左から右へ、図5(b)は水平方向右から左へ、図5(c)は垂直方向上から下へ、図5(d)は垂直方向下から上へ、図5(e)は右下から左上へ傾斜して移動したときの8ドット×8ドットのブロックにおけるMHIと、各基底関数によって導出された値を示している。図5では、MHIのグラデーションにおける輝度値は、暗い方から64、128、192、255とする。
図5に示したMHIにおける8ドット×8ドットのブロックに対し、第1基底関数、第2基底関数、第3基底関数を演算すると、図5の下側に示したような値が導出される。図5から、第2基底関数を通じた値が水平方向の移動量を、第3基底関数を通じた値が垂直方向の移動量を表し、動体112の速度が等しければ、その絶対値も等しくなっているのが理解できる。
ただし、動体112の速度を求める場合、第2基底関数や第3基底関数の値と実際の移動量(速度)とは反比例の関係にあり、かつ、MHIを表現する時間(τ(msec))に依存するので、その速度を定量的に比較する場合には注意が必要である。ここでは、例えば、人間の歩行速度(時速約4km/h)を基準として、その歩行速度との相対的な値で定量的に表現する。例えば、人間の歩行速度による水平方向の差分値を定数kとすると、動体112のX軸方向の速度vは、導出されたX軸方向の差分値fを用いてv=k/fで、Y軸方向の速度vは、導出されたY軸方向の差分値fを用いてv=k/fで表すことができる。かかる差分値と速度との関係は後ほど詳述する。
しかし、動体112自体の大きさに比べて相対的にブロックの大きさが大きい場合、差分値から移動速度を正確に導出できなくなることもある。図6(a)、(b)を参照すると、図6(a)の動体112と図6(b)の動体112は同一の速度で移動しているものの、ブロック内に占める、移動方向に垂直な動体112の幅が異なり、第1基底関数の値もさることながら、同一の速度を示すべき第2基底関数の値も変化してしまう。したがって、たとえ速度が等しくとも、その動体112のブロック中の専有面積によっては移動速度を正確に導出できなくなる。
また、他の例でも移動速度が導出できない場合がある。図7の(a)〜(c)では、3つの動体112が、移動方向に垂直な動体112の幅が等しく、かつ同一の速度(図6(a)、(b)の半分の速度)で移動しているが、ブロック中の移動検出位置が異なっている。図7を参照すると、移動検出位置が中央より左右いずれにあるか、また左右の境界を跨っているかによって、第2基底関数の値のみならず符号も変化してしまうことが理解できる。これは、動体112の大きさや速度が等しくとも、ブロック中の動体112の検出位置によっては移動速度を正確に導出できなくなるおそれがあることを示す。
図6および図7では、動体112の水平方向の移動を挙げて説明したが、垂直方向に移動した場合も同様の問題が生じ得る。このように、動体112の大きさに比べてブロックの大きさが大きすぎると、即ち、ブロックが動体112の移動によるMHIに満たされていないと、動体112の速度および移動方向を誤って判断する可能性がある。ここで、MHIに満たされているとは、図8のブロック164のようにブロック164内をMHIが占有していることを言い、例えば、ブロック164内にMHIの輝度値が0となる画素が所定数未満しか存在しないことによってMHIに満たされているか否かを判断することができる。
したがって、ブロックの大きさは画面上の動体112の大きさに対して小さめに設定されなければならない。そこで本実施形態では演算対象として、可能な限り小さなブロック(後述する「小ブロック」)を採用する。
(2.大ブロックを利用する理由)
このように、ブロック分割部214は、MHIを有効利用するため、ブロックを小さめに分割する。しかし、ブロックが小さすぎてブロック内にMHIの階調差が現れない場合に新たな問題を生じ得る。以下、その問題点と解決手段を述べる。
ここで、ブロックの大きさを小さく設定すると、図9(a)の如く、ブロック内の各画素が動体112のMHIで満たされ、ブロック内のすべての画素で輝度値を得ることができる。しかし、MHIは輝度値といった単一の指標で示されるので、その階調は離散的(段階的)な表現となる。
例えば、図9(b)〜(d)に示された動体112は、図9(a)の動体112の2倍の速度で水平方向左から右に移動しており、図9(e)に至っては、図9(b)〜(d)のさらに2倍の速度で移動している。図9の第2基底関数による値を参照して理解できるように、動体112の速度と第2基底関数を通じた差分値は反比例している。例えば、図9(a)の速度を2倍にした図9(b)では第2基底関数を通じた差分値は約1/2倍になっている。
また、図9(a)〜(d)に関して、その第2基底関数を通じた差分値は粗い数値変化となっているが、速度は把握できる。しかし、図9(e)に至っては、第2基底関数の値が0となって最早速度を把握することはできない。図9(e)は、階調が一定だった場合であって、MHIの履歴保持時間τが極端に長く、かつ動体112の速度が検出できないほど極端に速かった場合に相当する。
本実施形態のように、ブロックを小さくすると、ブロック内をMHIのグラデーションで満たすことは可能となるが、1フレーム間に移動する動体112の距離がブロックサイズの半分を越えると、図9(e)のように動体112の速度を正確に把握できない場合が生じ得る。以下、具体的な数値を挙げてこの問題について詳述する。
例えば、ブロックのサイズが4ドット×4ドット、フレーム間隔が33msecであり、この1フレームの間に直方体の動体112が水平方向左から右へ1画素動く場合、MHIの値Hτ(x,y,t)は次のようになる。
{33,66,99,132
33,66,99,132
33,66,99,132
33,66,99,132}
かかるHτ(x,y,t)の第2基底関数を用いて、ブロックの左半分を減算し、右半分を加算して求まる水平方向の差分値fは、f=(−33−66+99+132)×4(行)=((33×2)×2(組))×4(行)=528となる。尚、符号が正の場合は右、負の場合は左に動体112が移動したことを示す。
ここで、動体112の速度が4倍になった場合、差分値fの期待値は、528の1/4倍に当たる132である。動体112の速度が4倍になった場合のMHIの値Hτ(x,y,t)は、ブロックの1行目だけ記述すると、
パターン1:(66,66,66,66)
パターン2:(33,66,66,66)
パターン3:(33,33,66,66)
パターン4:(33,33,33,66)
の4パターンが考えられる。
上述したそれぞれのパターンにおける特徴量fは、
パターン1:0
パターン2:−33×4(行)=132
パターン3:−33×2(組)×4(行)=264
パターン4:−33×4(行)=132
となり、パターン2と4は期待値通りになるが、パターン3は期待値の2倍の値、即ち、速度は1/2倍になったとしか判断されず、パターン1に関しては0倍の値であるから速度は無限大と判断される。この問題は、1フレーム間に動く動体112の距離がブロックサイズの半分を越えることに起因する。
同様に、動体112がフレーム間隔33msecの間に水平方向左から右へ1画素動く場合における、8ドット×8ドットのブロックの水平方向の特徴量fは、f=(−33−66−99−132+165+198+231+264)×8(行)=((33×4)×4(組))×8(行)=4224となる。ここで、4ドット×4ドットの場合と同様、動体112の速度を4倍にすると、水平方向の特徴量fの期待値は、4224の1/4倍である1056となる。ちなみに、8ドット×8ドットの場合、動体112の速度が4倍になっても1フレームの間に移動する動体112の距離はブロックサイズの半分である。
動体112の速度が4倍になった場合のHτ(x,y,t)は、ブロックの1行目だけを記述すると、
パターン1:(66,66,66,66,99,99,99,99)
パターン2:(33,66,66,66,66,99,99,99)
パターン3:(33,33,66,66,66,66,99,99)
パターン4:(33,33,33,66,66,66,66,99)
の4パターンが考えられ、それぞれの場合の特徴量fは、いずれのパターンでも1056となり期待値通りとなる。
このように、動体112の移動速度が大きくなり、小さいブロックではその移動速度を正確に測定できない場合が生じる一方で、ブロックサイズを大きくとるとその移動速度も正確に把握可能なことが理解できる。即ち、移動速度を正確に捉えるには、ブロックのサイズは大きい方が望ましいこととなる。ところが、ブロックサイズを単純に大きくすると、上述したMHIのグラデーションで満たされていないブロックが生じやすくなるばかりでなく、画像上のブロックの数が減って画像解析の粒度が荒くなってしまう。
そこで、本実施形態では、動体112の水平方向および垂直方向の移動速度を導出する演算対象となるブロックを、検出可能な最小の単位ブロックの2×2倍の小ブロックとし、その小ブロックで階調変化が検出されなかった場合には、その小ブロックを含み、かつ階調変化が検出される任意の大ブロックを利用する。即ち、小ブロックを含む大ブロックにおける動体112の水平方向および垂直方向の移動速度を小ブロックに反映することで、小ブロックでも動体112の速度を正確に表現することが可能となる。かかる演算基準に基づいて、ブロック分割部214は、現フレームの画像を1辺が例えば2MIN(MINは0以上の整数)画素の単位ブロックに分割することとなる。尚、ここでは、本実施形態の理解を容易にするため単位ブロックを2の正方ブロックとしたが、かかる場合に限られず、2以外の任意の数値を選択することも、水平方向のサイズと垂直方向のサイズを異ならせることも可能である。したがって小ブロックや大ブロックのサイズも2や正方ブロックに制約されるものではない。例えば、画面の大きさが640ドット×480ドットとすると、最大公約数は160ドットとなり、正方ブロックの大きさとしては、80ドット、40ドット、32ドット、20ドット、16ドット、10ドット、8ドット、…等が考えられるので、単位ブロックの一辺のサイズを10ドットの正方ブロックとすると、小ブロックや大ブロックの一辺のサイズを20ドット、40ドット、80ドット、160ドットのように設定できる。本実施形態のブロックサイズを利用環境に即した値に設定し、本実施形態に変更を加えることは、同業者であれば容易である。
ただし、大ブロックを利用する上で、その大ブロックがMHIのグラデーションで埋まっているか否かに留意する必要がある。
特徴量導出部216は、上述したように、分割されたブロック、ここでは分割されたすべての小ブロックにおける動体112の水平方向および垂直方向の移動速度に相当する特徴量を導出する。特徴量導出部216は、特徴量を導出するための各処理を担う、単位ブロック導出部250と、大小ブロック導出部252と、特徴量決定部254とを含んで構成される。
単位ブロック導出部250は、ブロック分割部214によって分割された1辺が2MINの単位ブロックそれぞれに対し、ブロックに含まれるMHIの値Hτ(x,y,t)の総和(直流成分値)を求める。かかる単位ブロックに関しては、直流成分値のみを求め、水平および垂直方向の差分値は求めない。
大小ブロック導出部252は、単位ブロック導出部250の対象である1辺が2MIN画素の単位ブロックを用いて、その単位ブロックを周囲4ブロック分結合し、面積を4倍にした1辺が2MIN+1画素の小ブロックにおけるMHIの直流成分値ならびに水平方向および垂直方向の差分値を導出する。そして、大小ブロック導出部252は、導出された直流成分値を用いて、以後、面積を4倍にした大ブロックの直流成分値および差分値を、そのサイズが最大となるまで繰り返し導出する。従って、最小単位である単位ブロックの直流成分値と、その4倍の小ブロックの直流成分値および差分値、その小ブロックの1辺を2、2、2…倍した大ブロックの直流成分値および差分値が機械的に求まり、そのうち、水平方向および垂直方向の差分値が各ブロック(小ブロック、大ブロック)の特徴量となる。
ここでは、動体112の速度を導出する上でどのサイズの大ブロックを採用するかをまだ判断せず、許容されるすべての大ブロックに関して特徴量を求めている。こうすることで、大小ブロック導出部252は、機械的な特徴量の導出処理にのみ集中でき、処理の効率化を図ることができる。
また、小ブロックや大ブロックの特徴量の演算には、そのブロックの面積が1/4の単位ブロック、小ブロック、大ブロックの直流成分値がそのまま用いられるので、演算負荷の軽減を図ることが可能となる。
図10は、特徴量の演算を説明するための説明図である。このとき画面162のサイズは640ドット×480ドット、単位ブロック166は1辺が2ドット、小ブロック168は1辺が2ドットであり、単位ブロック166は、小ブロック168を縦横に4等分したブロックに相当する。本実施形態の特徴量導出処理では、上述したように、小ブロックに対して図10(a)〜(c)の第1基底関数、第2基底関数、第3基底関数が用いられる。かかる基底関数と単位ブロック166との関係を踏まえると、小ブロック168の直流成分値や差分値は単位ブロック166の直流成分値の加減算で求まる。
具体的に、小ブロック168を構成する単位ブロック166をそれぞれd00、d01、d10、d11とし、各直流成分値をn00、n01、n10、n11とすると、小ブロック168の直流成分値は、4つの単位ブロックd00、d01、d10、d11の直流成分値の和n00+n01+n10+n11で表される。
同様に、小ブロック168の水平方向の差分値fは、左2つの単位ブロックd00、d10の直流成分値の和と右2つの単位ブロックd01、d11の直流成分値の和との差分−n00+n01−n10+n11で表され、垂直方向の差分値fは、上2つの単位ブロックd00、d01の直流成分値の和と下2つの単位ブロックd10、d11の直流成分値の和との差分n00+n01−n10−n11で表される。
また、他の大ブロックも、上記の原則を用いて、小ブロック168または自体より小さい大ブロックの直流成分値を用いて自体の直流成分値および特徴量を演算することが可能となる。また、ブロックサイズが大きくなるに従って、画像に含まれるブロック数が減るので、ブロックサイズ毎の演算量は2の累乗に反比例して少なくなる。このような、ブロックの演算の度に画素レベルの演算を行うことなく、自体より一回り小さいブロックの直流成分値を繰り返し演算に採用する構成により、効率的に特徴量を演算することが可能となる。
特徴量決定部254は、大小ブロック導出部252で導出された小ブロックおよび複数サイズの大ブロックの特徴量に基づいて、最終的に1辺が2MIN+1画素の小ブロックの特徴量を決定する。
上述したように、ブロックサイズを小さくすると、画像解析の粒度は細かくなり、ブロック内もMHIのグラデーションで満たされ易くなる反面、高速の動体112の動きを測定できなくなってしまう。特徴量決定部254は、大小ブロック導出部252の対象である複数サイズの大ブロックから動体112の速度を特定するのに適切なサイズの大ブロックを抽出し、その大ブロックにおける特徴量を、大ブロックを構成する小ブロックに適用することで小ブロックの特徴量を決定する。
上記の特徴量決定部254の動作を理論的に説明すると、例えば、上述した図4(b)の第2基底関数では、左半分の画素122を減算、右半分の画素122を加算する。かかる計算式は1ライン(1行)において、
…(数式2)
となる。かかる数式2を偏微分処理に表現しなおすと、
…(数式3)
となる。
ここで、特徴量決定部254は、nΔxを、測定を所望する最大の速度に設定することができる。例えば、1フレームの間に動体112が4画素移動する速度を測りたい場合はnΔxを4とする。したがって、nΔxの間に1回はMHIの輝度値の変化がある。つまり、数式3は、少なくとも1回は輝度値が変化するようにブロックのサイズを拡大して、注目画素f(x+n/2,y)の前方と後方で同様な演算を遂行し、最後にブロック内の各画素を平均してそのブロックの差分値とすることができることを示している(但し数式2は、最後にnで割る部分を省略している)。
MHIの水平方向の差分値を、座標(x+n/2,y+n/2)を中心とした前後左右のブロックまで考慮して求めると、
…(数式4)
となる。最後に、数式4の結果を1/n倍すればブロック内をすべて平均化したことになる。かかる数式2、3、4が垂直方向にも適用可能であることは言うまでもない。したがって、特徴量決定部254は、適切なサイズの大ブロックを抽出し、その大ブロックにおける特徴量を、大ブロックを構成する小ブロックに適用することで小ブロックの特徴量を決定している。
また、上述した図4(b)や図4(c)を、注目画素近辺のグラデーションの変化度合いを求めるための基底関数と考えると、sobelフィルタ等を適用してその基底関数に重み付けを行うことも考えられる。しかし本実施形態における直流成分値や特徴量は、注目ブロックでの動体112の時間方向の情報を導出するのみならず、後述する第2の問題を解決するために利用されるので、重み付けは行わない。
ところで、特徴量決定部254が抽出する適切な大ブロックとは、少なくとも1回の階調変化が認められ、かつMHIのグラデーションで満たされる最大サイズのブロックであることは上述した通りである。しかし、その条件だけでは、動体112の速度を正確に導出できない例外的な場合が生じ得る。
かかる例外的な場合とは、例えば、幅の狭い動体112が水平方向に非常にゆっくりと動いた場合である。この場合、1つの大ブロック182内に動体112の左側面のエッジで出来たグラデーションと右側面のエッジで出来たグラデーションの両方を含むこととなり、その2つのグラデーションの配置関係から誤った移動方向を検出することがある。
図11は、動体112が水平方向に移動した場合のMHIを例示した説明図である。縦長の動体112が水平方向左から右へゆっとりと移動したため、図11では、動体112の右側面のエッジで作られたMHIと左側面のエッジで作られたMHIとが共に大ブロック182内に現れている。そして、いずれのMHIも左方向に移行するに従って徐々に暗くなっている。
これを人間が見た場合、そのMHIのグラデーションの変化方向を総合的に判断して、動体112の移動方向は左から右であると視認することができる。したがって、当該大ブロック182における動体112の移動方向は白抜き矢印のように左から右と判断されるべきである。しかし、図11中の四角で示した小ブロック168の水平方向の差分値を機械的に求めると、小ブロック168の左半分が右半分よりも明るいためにハッチングした矢印のように水平方向右から左へ、即ち実際の移動方向の逆方向に移動したものと誤判断してしまう。このように、動体112の移動方向を誤ると、画像処理システム100において誤報を生じかねない。
ここで、画像処理装置110が十分な演算能力を備え、演算負荷に余裕があるようであれば、各ブロック内のMHIの値を詳細に調べてその移動方向を判断することも可能かもしれないが、演算能力に乏しい画像処理装置110においてリアルタイムに画像解析するには、高速に求めることのできるブロックの特徴量だけで、速度を求めるのに適しているか否かを判断すべきである。そこで本実施形態では、小ブロックに特徴量を反映する大ブロックの条件に、「MHIに収容されている動体112が単一のエッジで形成されていること」を加えて、上述した誤判断を回避する。
図12は、小ブロック168と大ブロック182との関係を示した説明図である。特徴量決定部254は、任意の大ブロック182に収容されている動体112が単一のエッジで形成されているか否かを大ブロック182と小ブロック168との水平方向および垂直方向の差分値の符号の一致を見て判断する。
かかる大ブロック182や小ブロック168の符号は、動体112の動きベクトルの水平成分と垂直成分の符号に対応するので、図12(a)に示されるように、大ブロック182とそれに含まれるすべての小ブロック168の間に矛盾がなければ、即ち、符号(ここでは水平方向の矢印で示す。)の相違がなければ、その部分のMHIは、単一の動体112のエッジによるものであると判断できる。この場合、特徴量決定部254は、より正確な速度が割り出せる矛盾のない大ブロック182における差分値を、大ブロック182と小ブロック168との面積比に応じて小ブロック168用に換算し直し、小ブロック168の特徴量として採用する。
一方、図12(b)に示されるように、大ブロック182とそれに含まれるすべての小ブロック168の間に矛盾が生じる場合には、その矛盾が生じた部分184のMHIは、異なる動体、あるいは、図12で示したように、単一の動体112の右側エッジと左側エッジとでできるようなグラデーションの不連続な部分になっていると判断できるので、小ブロック168における差分値をそのまま特徴量として採用する。
ただし、大ブロック182は複数のサイズで形成されるので、矛盾が生じる大ブロック182と小ブロック168との間に、図12(c)に示すように他のサイズ(例えば、大ブロック182の面積1/4倍の大きさ)の大ブロック186がある場合、特徴量決定部254は、そのサイズの異なる、大ブロック186と小ブロック168との差分値の符号の一致を判断する。ここでは、図12(c)に示した大ブロック186と小ブロック168との符号が一致するので、大ブロック186の差分値を小ブロック168に利用できる。
したがって、特徴量決定部254は、一致判断対象である大ブロック182中の複数の小ブロック168のうち1つでも大ブロック182の差分値の符号と一致しない差分値を持つ小ブロック168が検出された場合には、大ブロック182に含まれる1辺の長さが半分の4つの一回り小さな他のサイズの大ブロック186のそれぞれについて差分値の符号の一致判断を繰り返す。繰り返した結果、最終的に大ブロックが小ブロック168のサイズと等しくなるまで小さくなることもある。
特徴量決定部254は、差分値の符号がすべての小ブロック168と一致した大ブロック中の差分値を、その中に含まれるすべての小ブロック168用に換算し直し、小ブロック168の差分値、即ち、小ブロック168の特徴量とする。
このように大ブロックと小ブロック内の特徴量の符号が一致するか否かによって大ブロックの有効性を容易に判断する構成により、演算負荷の著しい軽減を図ることができる。
動きベクトル導出部218は、特徴量決定部254が導出した特徴量(差分値f、f)を用いて、対象となる動体112の小ブロック168毎の動きベクトルを導出する。上述したように、動体112のX軸方向の速度vは、水平方向の差分値fを用いてv=k/fで、Y軸方向の速度vは、垂直方向の差分値fを用いてv=k/fで表すことができる。
かかる動きベクトル導出部218が導出したX軸方向の値vやY軸方向の値vは、それぞれ独立した軸で利用できる。例えば、画像処理装置110の撮像範囲において、改札や出入り口等、動体112がX軸方向またはY軸方向に移動が制限されることが予め分かっているとき、動体112の逆方向の移動や速度違反を検出することができる。動体112がX軸およびY軸以外の方向に移動した場合の動きベクトルに関しては後ほど詳述する。
以上述べたように、本実施形態による画像処理装置110は、物体の置き去りや持ち去りのように動体112の移動方向やその速度を必要としない画像解析だけでなく、動体112の速度や移動方向を必要とするような、より高度な検知を、演算リソースが限られた画像処理装置110自体で実現させることが可能となる。
また、具体的な解析処理では、小ブロックにより画像解析の粒度を細かく維持しつつ、大ブロックを利用することで小ブロックのみでは測定困難な速度も高精度に導出することが可能となる。
(3.モーションヒストリーイメージにおけるグラデーションが形成されている帯の幅方向の端部のブロックを利用する理由)
ところで、MHIのグラデーションから動体112の動きベクトルを求めるとき、MHIの態様によっては原理上2つの問題が生じ得る。
図13は、原理上生じ得る2つの問題を説明するための説明図である。図13(a)は、図13(b)に示す動体112が水平方向に移動した場合における、4ドット×4ドットの、あるブロックの各画素のMHIの輝度値を示している。第1の問題は、動体112が「水平」方向に移動しているにも拘わらず、MHIの輝度値が水平方向に左右対称であるから、当該ブロックの水平方向の差分(微分値)は0になってしまうことである。第2の問題は、図13(b)に示す動体112が水平方向にしか移動していないにもかかわらず「垂直」方向にMHIの値が変化していることである。以下、かかる2つの問題について詳しく説明する。
第1の問題は、動体112の移動によって生成されるMHIの輝度値は、ほとんどの場合連続する複数の画素に跨るということに起因する。例えば、画面の横幅が720ドットで1秒間に30枚の画像を表示する場合(30fps)、1フレーム毎に1画素しか移動しないとすると、この物体が画面を横切る時間は、720/30=24(秒)となり、非常に遅いことが分かる。通常、動体112が画像処理装置110の撮像範囲に存在する時間はもっと短く、短時間に横切ることが多いため、1フレームの間に移動する距離は複数画素に亘ることになる。つまり、連続する複数画素がMHIの所定の値τで同時に初期化され、以後同期して徐々に値が小さくなっていく。
図14は、動体112の水平移動によるMHIの輝度値の変化を示した説明図である。例えば、任意のX軸上の1ライン(1行)を抜粋すると、MHIの輝度値は図14のように階段状に変化している。したがって、水平方向のMHIの変化が検出されるのは、MHIの値が階段状に変化している部分をブロック内に含む場合だけであり、動体112の速度のみならず、フレーム間隔にも依存する。かかる第1の問題は、上述した大ブロックを利用する構成により、既に解決手段が見いだされているので、ここでは言及しない。
第2の問題は、動体112のエッジが移動方向と垂直ではなく、垂直に対して傾いている場合において、MHIのグラデーションは、移動方向である水平方向のみならず、移動方向に垂直な方向にも変化してしまうことに起因する。
図15は、動体112の勾配によるMHIの軌跡を説明するための説明図である。例えば、画面上の任意の小ブロック168上を図15(a)のように直角三角形の物体が水平方向左から右に移動すると、図15(b)のようなMHIが形成される。ここでMHIは移動方向である水平方向のみならず垂直方向にもグラデーションを形成している。したがって、図15(b)に示したようなMHIは、図15(c)のように、直方体の動体112を斜め右下に移動させたときにも形成できることとなる。しかも理論上は、両者で全く同じMHI(図15(b))が形成され得る。この事象を、図16を用いて説明する。
図16は、移動方向とMHIのグラデーションとの関係を示した説明図である。時刻0において動体112の左側のエッジが図16中の破線部分188にあるとする。そしてその勾配を維持しつつ一定の速度で移動し、MHIの保持時間として予め設定した時間τmsec後に実線部分190に到達したとする。このとき、その経路は、A→B、A→C、A→Dのように無数考えられ、かつグラデーションのみからでは経路を特定することはできない。
どの経路を辿ったとしてもエッジの勾配を一定に保ったまま移動している限り、その移動に伴って形成されるMHIのグラデーションは同じである。何故なら、いずれの経路を辿っても、エッジ上のB、C、D点のMHIの値Hτ(B,t)、Hτ(C,t)、Hτ(D,t)は最大値τで初期化され、以後同期しながら減少するからである。MHIは、現在時刻における実線部分190の輝度が最高値であり、τmsec前の破線部分188の輝度が最低値となるから、いずれの経路を辿っても、小ブロック168の左上が暗く、右下が明るくなり、グラデーションの変化する方向も等しくなる。ただし、移動経路が異なれば移動距離も異なってくるので、同一のグラデーションを形成するためには、移動する速度を調整しなければならない。
つまり、経路A→Bであっても、経路A→Dであっても、動体112のエッジの勾配を一定に維持しつつ移動距離に応じて適切な速度で移動さえすれば、小ブロック168上に同じMHIを作ることができることになる。したがって、MHIを複数の小ブロック168に分割して演算する場合、注目する小ブロック168上のMHIだけから動体112の真の速度や移動方向を知ることはできない。
上述した原理上の第2の問題は、従来における、速度(移動距離)a=√(dx+dy)、移動方向θ=tan−1(dy/dx)という演算でも解決できない。例えば、図13(a)のブロックにおけるHMIの輝度値から移動方向θを導出しようとしても、水平方向の差分値(微分値)が0なので分母が0になり、dy/dxが∞になってしまう。
しかし、tan90゜=∞、tan(−90゜)=−∞であることを考慮すると、移動方向θは、90゜あるいは270゜(=−90゜)とみなすことができる。したがって、図13(a)における実際の移動方向(0゜:水平方向)とは著しく異なる、垂直方向に移動しているといった結果が得られる。かかる従来の計算式では動体112の速度が高くなるにしたがって同じ輝度値が続く画素数が広がるので、このような誤判断の影響も、より顕著になることが予想される。特に、従来の計算式では動体112の速度や移動方向を画素単位で求めるので、計算リソースが多くかかる割に、有効なデータが得られないといった状態に陥ることとなる。
短時間で生成可能なMHIを利用して、かつ、少ない演算負荷でリアルタイムの画像解析を望む場合、上記の第2の問題を、演算負荷を重くせずに解決しなくてはならない。そこで本実施形態では、上述した特徴量決定部254によって導出された小ブロックごとの特徴量を用い、動体112の動きベクトルを軽負荷かつ高精度に求めることを目的とする。
(動きベクトルの求め方)
以下、上記第2の問題の影響を受けない動きベクトルの導出手段を説明するが、その前に、小ブロック168の水平方向の差分値や垂直方向の差分値と動きベクトルとの関係について触れておく。ここでは、1フレームの間に直方体が1画素、水平方向左から右に移動したときの速度を基準とすべく、かかる移動により形成されるMHIから得られる水平方向の差分値を基準値(定数k)とする。
図17は、速度の基準値kを説明するための説明図である。例えば、フレーム間隔が33msecで1フレーム毎に1画素、水平方向左から右に移動する直方体の動体112によってできるHτ(x,y,t)は、図17(a)のようになるので、定数kは、132×(横)4組×(縦)8行=4224となる。そして動体112が任意の速度で水平方向に移動して形成されたMHIに対して第2基底関数を適用して得られた水平方向の差分値(特徴量)をfとすると、この動体112の速度v(画素/フレーム)は、基準値との相対的な関係により、数式5で求めることができる。
…(数式5)
例えば、1フレーム毎に2画素水平方向左から右に移動する直方体の動体112によってできるHτ(x,y,t)は、図17(b)のようになり、f=66×4組×8行=2112なので、v=4222/2112=2となって、確かに2倍の速度になっていることが理解できる。
同様に直方体の動体112が任意の速度で垂直方向に移動してできたMHIに対して第3基底関数を適用して得られた垂直方向の差分値(特徴量)をfyとすると、この動体112の速度v(画素/フレーム)は、数式6で求めることができる。
…(数式6)
しかし、第2の問題の説明で述べたように、水平方向にしか移動していない場合でも、動体112のエッジが移動方向に垂直な軸から傾いていると、水平方向の差分値だけでなく垂直方向の差分値まで検出されてしまう。
図18は、動体112の勾配と速度との関係を説明するための説明図である。例えば、図15(a)に示したような直角三角形の動体112が白抜き矢印のように水平方向左から右に1フレームに1画素移動すると、小ブロック168のHτ(x,y,t)は図18のように表すことができる。図18の破線は複数の時刻における動体112のエッジを表している。MHIの構成上、同時刻から同期して減算が始まるので、エッジ上のHτ(x,y,t)は同じ値になっている。この状態の小ブロック168に対し、数式5および数式6を用いて動体112の速度を求めると、v=v=1(画素/フレーム)となり、本来は水平方向にしか動いていないにも拘わらず、垂直方向にも水平方向と同じ速度で移動しているという結果が出てしまう。
ここで、図18のブロックが、図15(c)に示した直方体の動体112が図18のハッチングされた矢印の方向に移動して形成されたものであると仮定すると、斜め45゜右下に移動する速度は、図15(a)の水平方向の速度の1/√2倍となる。また、見方を変えると、図15(a)と図15(c)における注目ブロックのMHIのグラデーションの態様を等しくするには、図15(a)の水平方向の速度を図15(c)の水平方向の速度の2倍にすればよいことが理解できる。
次に、動体112のエッジがY軸に対して勾配を有しているとき、数式5および数式6によって得られる値を成分とする速度ベクトルの向きについて説明する。
図19は、動体112の勾配と速度との関係を説明するための説明図である。ここで、破線で示した、複数の時刻における動体112のエッジ192は、図19に示すようにY軸に対してαの角度を有している。図19中、実線矢印は、MHIのグラデーションの変化の方向を表している。また、一点鎖線矢印は、数式5および数式6から得られる速度ベクトルの方向を表している。
図19を参照して理解できるように、Y軸と破線で表したエッジとの角度も、Y軸と一点鎖線矢印で表した速度ベクトルとの角度も、arctan(2/1)で同一角度α(ここでは60°)である。把握しやすい表現に置き換えると、動体112のエッジの勾配と数式5および数式6から求められる速度ベクトルの方向は、Y軸を反射板にした場合の入射角と反射角の関係にある。以後、数式5および数式6から求められる速度ベクトルの方向を、説明の便宜上、反射角方向とよび、実際に反射角方向に動体112が移動した場合の速度ベクトルをVと表す。
任意のブロックにおいて、同一のMHIを生成する方法は、その動体112の速度と移動方向を調整することで幾通りもあることは、既に述べた通りである。ここでは、動体112が反射角方向に移動した場合の動きベクトルの大きさについて検討する。
動体112のエッジが図19に破線で示したような移動軌跡を辿った場合、数式5および数式6に基づくと、水平方向への移動速度v=2(画素/フレーム)、垂直方向への移動速度v=1(画素/フレーム)となる。かかる水平方向への移動速度と垂直方向への移動速度とを合成すると、その終点194は、2フレーム後のエッジ(1)上に現れ、一点鎖線で示した軌跡による1フレーム後の実際の終点196が現れるエッジ(2)と異なる。
図20は、合成ベクトルと実際の移動における動きベクトルとの関係を示した説明図である。上述した事象を改めて説明すると、動体112のエッジのX軸到達点とY軸到達点とを結ぶ結線上のHτ(x,y,t)は、図19を用いても理解できるように、同じ値となる。動体112のエッジが、フレーム間で、原点からこの線上まで反射角方向に移動した場合の動きベクトルの大きさは、図20に示したように、移動速度v=k/fとv=k/fを2つの辺の長さとする長方形の対角線の長さ(v,v)の半分に相当する。したがって、動体112がMHIの反射角方向に進んだ場合の動きベクトルは、次のようになる。
…(数式7)
このように、数式5および数式6から求められる速度ベクトルの大きさが、実際の速度ベクトルよりも大きくなってしまうのは、一種の錯覚に相当する、動体112のエッジの勾配の影響を含んでいるからである。
(動体112の移動方向:tanβ)
次に、動体112の実際の移動方向tanβを求める手順を説明する。
図21および図22は、動体112の移動方向を説明するための説明図である。ここでは、動体112のエッジによって図21のようなMHIが生成される。このとき、動体112によって形成されるMHIのグラデーションの変化方向は、おおよそ破線矢印に示す軌跡を辿っている。図21の場合、注目している小ブロック168a上を動体112が通過したときの移動方向は、MHIのグラデーションの変化方向と垂直の方向(実線矢印の方向)にあるMHIにおけるグラデーションの帯の幅方向の端部(以下、単にグラデーションの端部と言う。)を含む小ブロック168b、168cによって知ることができる。以下、その理由について詳述する。
図21に示すように、MHIのグラデーションの変化方向と垂直の方向(実線矢印の方向)を辿ると、いずれグラデーションの端部(他との境界)に到達する。図22(a)は、そのグラデーションの端部を含む小ブロック168を拡大した様子を表している。この図でハッチングが施されている部分の画素はMHIの輝度値として正の値が入っており、白い部分はMHIの輝度値0、即ちMHIが存在していない。画像処理においてエッジを検出するために、
…(数式8)
を用いているが、これは画像のエッジに垂直なベクトルの傾きを表しているに過ぎない。
ところで、ベクトル(a,b)をθ回転させる行列は、
…(数式9)
で表すことができるので、90゜回転させる回転行列は、
…(数式10)
となる。したがって、MHIのグラデーションの変化方向のベクトル、即ち移動方向は、
…(数式11)
で求められる。ここで、数式11の右辺に示した値の近似値に比例する値として小ブロック168b、168cの水平方向の差分値と垂直方向の差分値を代入すると、MHIのエッジの勾配tanβは、
…(数式12)
となる。
例えば、図22(a)において、斜線で示した部分の1画素のMHIの輝度値を定数cとしてブロックの水平方向の差分値fと垂直方向の差分値fを求めると、f=12c−4c=8c、f=−16cであるから、その傾きtanβは、8c/16c=1/2(0.5)となり、斜線部分の傾斜と一致しているのが分かる。しかし、数式12は、本来、画素に対して行う演算なので、必ずしも実際の傾斜と一致する値になるとは限らない。
例えば、図22(b)の場合、tanβの値は、
…(数式13)
となり、図22(c)の場合、tanβの値は、
…(数式14)
となって、実際の値である0.5から多少ぶれる。
しかし、グラデーションの端部を含む小ブロック168を複数集めると、例えば、図22(a)〜(c)の3つの小ブロック168のtanβの値を平均すると、(0.5+0.36+0.78)/3=0.546となり、対象となるブロックが多いほど平均化されて期待値である0.5に近くなる。即ち、個々のブロックの結果は正確な値とならない場合があるが、サンプル数が多くなれば全体として正しい値に近づく。
ここでは、グラデーションの端部を含む小ブロック168の水平方向の差分値fxおよび垂直方向の差分値fyに基づき、数式12を用いて、MHIのエッジの傾きtanβが求められることが理解できる。
(動きベクトルの求め方)
次に、動体112の移動方向の傾きがわかった場合の動きベクトルの求め方を説明する。
図23は、動きベクトルの求め方を説明するための説明図である。図23には、時刻0に破線で示される位置にあった動体112のエッジが時刻τmsec後に実線部分に移動する、3つの経路OA(一点差線矢印)、OB(実線矢印)、OC(二点鎖線矢印)が示されている。ここで、経路OAは、MHIのグラデーションの変化方向、経路OBは動体112の実際の移動経路、経路OCが反射角方向を示す。
今、注目している小ブロック168において、MHIによるグラデーションが等しくなるように、エッジの勾配を一定に保ちながら動体112を移動させたとする。OAの長さをa、OBの長さをb、/OCの長さをcとし、OAとOBとのなす角をθとすると、a=b×cosθで表すことができる。経路OAは、他の経路OB、OCよりも短いので、MHIによる等しいグラデーションを形成するときには、他の経路と比較して最も低速で移動することとなる。このMHIのグラデーションの変化方向の経路OAを進んだときの速度をVとし、実際に移動した経路OBにおける速度をVとすると、
…(数式15)
であるから、次の式が成り立つ。
…(数式16)
ところで、図23における点AからX軸に垂線を下ろした点をHとすると、破線で表した時刻0における動体112のエッジと、実線で表した時刻τにおける動体112のエッジとは平行であるため、∠DAH=∠OAD−∠OAH=90゜−∠OAH=αとなる。一方、三角形AOHに着目すると∠AOHも∠AOH=90゜−∠OAH=αとなる。
したがって、経路OAとOBとのなす角θは、X軸と経路OBとのなす角βを用いて、X軸を基準として反時計回りの角度を+、時計回りの角度を−で表現すると、θ=−α−(−β)=−α+βとなる。これを数式16に代入すると、次のようになる。
…(数式17)
同様に、反射角方向の経路OCのベクトルVと経路OAのベクトルVの関係を求める。ここで、図23の点AからY軸に垂線を下ろし、この点をGとすると、∠AOC=∠GOC−∠GOA=α−∠GOA=α−(π/2−∠AOH)=α−(π/2−α)=2α−π/2となる。したがって、つぎの式が成り立つ。
…(数式18)
かかる数式17および数式18から|V|を削除すると、次の式が導出される。
…(数式19)
ここでVの成分は、上述した数式7で求められるので、実際の移動方向の傾きβさえ分かれば、その方向の移動速度も求められる。但し、このままではsin2αやcos(α−β)等の演算負荷が重い三角関数の計算が残っているので、演算負荷を軽減すべく単純な式に変形する。
図24は、動きベクトルの速度の求め方を説明するための説明図である。図24に示すようにVのxy成分(X軸Y軸成分)を(vmx,vmy)、Vのxy成分を(vrx,vry)としたとき、数式19の左辺は、次のようになる。
…(数式20)
一方、数式19の右辺は、次のようになる。
…(数式21)
数式19では(左辺)=(右辺)なので、
…(数式22)
となり、Vのx成分Vmxは、
…(数式23)
となる。
また、図24を参照すると、動きベクトルのy成分vmy=vmxtanβであるから、動きベクトルのx成分vmxと動きベクトルのy成分vmyは次の式で求めることができる。
…(数式24)
ここで、図23で説明したように、角αは、MHIのグラデーションの変化方向O→Aであるから、次の式で求められる。
…(数式25)
ただし、数式24において変化方向の角αはnπ/2(n=0,1,2,…)、即ち90°の整数倍ではないとする。これは、角αが90°の整数倍であった場合、数式7の分母の水平方向の差分値fxと垂直方向の差分値fyのいずれかが0となるので反射角方向の動きベクトルが計算できないからである。また、角αが90°の整数倍となるときには、数式7を用いなくとも動きベクトルのxy成分vmx、vmyを別途簡単に求めることができる。
図25は、角αが90°の場合における動きベクトルのxy成分vmx、vmyの計算方法を説明するための説明図である。f=0のとき、MHIのグラデーションは図25(a)のように縦縞になっている。このとき、動きベクトルのxy成分vmx、vmyは、数式7を用いなくとも次のようにして求められる。
…(数式26)
一方、fx=0のとき、MHIのグラデーションは図25(b)のように横縞になっている。このとき、動きベクトルのxy成分vmx、vmyは、f=0のとき同様、次のようにして求められる。
…(数式27)
尚、数式27は、数式19において、
…(数式28)
即ちtanαを±∞としたときの式となっている。
(数式24の検証1〜5)
ここで、上述した数式24の確からしさを5つの検証例を上げて簡単に検証する。第1の検証例は、MHIのグラデーションの変化方向を示す角αと実際の移動方向を示す角βが共に同一方向(−45゜)であった場合である。これは、MHIのグラデーションの変化方向が反射角方向と一致する特殊な場合であり、図15(c)に示した移動で図18に示すMHIが生成された状態に相当する。この場合、tanα=tanβ=−1なので、数式24は、vmx=−vry,vmy=vryとなって確かに右斜め45゜に移動しているといった結果が生成されている。
第2の検証例は、αが−45゜でβが0゜で動体112が水平方向に移動した場合である。これは、動体112が図15(a)に示した移動軌跡を辿り、図18に示すようなMHIが生成された状態に相当する。この場合、tanα=−1,tanβ=0なので数式24は、vmx=−2vry,vmy=0となり、確かに垂直方向のベクトル成分は0で水平方向に移動しているといった結果が生成されているのが分かる。しかも、第1の検証例と比較して速度も2倍になっており、速度値も正しいことが理解できる。
第3の検証例は、図24に示す移動の場合である。図24では、tanα=−2,tanβ=−1/6,vry=25mmなので、これらを数式24に代入すると、
…(数式29)
となって、図の動きベクトルのxy成分vmx、vmyの長さ及び符号と一致する。
第4の検証例は、αが任意でβが0゜で動体112が水平方向に移動した場合である。tanβ=0を数式24に代入すると、vmy=0となり、vmxは、次のようになる。

…(数式30)
ここでfは水平方向の差分値、kは数式5で説明した定数である。k/fは、数式5で既に説明したように、直方体の動体112が水平方向に移動した場合の速度の求め方である。したがって、第4の検証例は、「動体112の移動方向が水平と仮定できる場合には、動体112のエッジの勾配による影響を気にすることなく水平方向の差分値から直ちに動体112の速度を求めることができる」ことを示している。これは動体112の移動方向が垂直と仮定できる場合も同様である。
図26は、検証例を示す説明図である。第5の検証例は、MHIの勾配が水平方向に+の向きの移動を示しているにもかかわらず、実際は−の向きに移動している図26のような一見無さそうで有りえる移動である。かかる図26では、tanα=−2,tanβ=3,vry=−25mmなので、これらを数式24に代入するとvmx=−20、vmy=−60となって、図のvmxとvmyの長さ及び符号と一致する。
尚、tanα×tanβ=−1(例えばα=45゜でβ=−45゜)のときには、数式24の分母が0になってしまうが、α=45゜でβ=−45゜のときはエッジの方向に動体112が移動している状態であり、そもそもMHI自体ができないので、数式24において分母が0になる事象は考慮しなくてよい。
以上説明したように、vry、tanα、tanβを導出して数式24に代入すると、第2の問題に影響されない真の動きベクトルを導出することが可能となる。ここでは、上述した事象を踏まえて、動きベクトル導出部218と、端部抽出部220とが動きベクトルの計算を実行する。
動きベクトル導出部218は、図21における注目ブロック(小ブロック168a)の水平方向の差分値と垂直方向の差分値を数式25に代入して、この注目ブロックのMHIのグラデーションの変化方向の傾きtanαを求める。
端部抽出部220は、動きベクトル導出部218で導出されたグラデーションの変化方向と垂直の方向に向かって、グラデーションの端部を抽出する。グラデーションの端部が抽出されると、動きベクトル導出部218は、そのグラデーションの端部を含むブロック168b、168cの水平方向の差分値と垂直方向の差分値を数式12に代入して動体112の移動方向を表すtanβを求める。ここでは、注目ブロック168aと同一時刻の動体112の移動方向の近似値を求めている。
続いて、動きベクトル導出部218は、注目ブロック168aの水平方向の差分値と垂直方向の差分値を数式7に代入して反射角方向の動きベクトル(vrx,vry)を求める。動きベクトル導出部218は、このようにして求めたvryとtanαとtanβとを数式24に代入して、実際の移動方向を経路とする動きベクトルを導出する。このようにして、注目ブロックの情報だけでは分からなかった実際の動きベクトルを求めることができる。
動きベクトル利用部222は、応用アプリケーション部分であり、ブロック毎に求めた動きベクトルを利用して、通過ゲートを逆方向に進んだり、一定速度以上で通り抜けたりしようとする動体を検知する。具体的に、特定の小ブロックの特徴量が、所定の向きや所定の大きさを示した場合に当該画像処理装置110の特定の出力をONにする等の動作を行う。
また、コンピュータを、上記画像処理装置110として機能させるプログラムや、そのプログラムを記憶した、コンピュータで読み取り可能な記憶媒体も提供される。
(画像処理方法)
次に、図27〜図39を用いて、撮像した画像中における動体112の動きベクトルを導出する画像処理方法について説明する。
図27は、画像処理方法の全体的な処理の流れを示したフローチャートである。図27において、まず、制御部180は、画像データの格納エリアや、MHIの格納エリアや、特徴量の格納エリアの確保などの初期化処理を行う(S400)。
図28は、初期化処理ステップ(S400)で確保すべき、ブロック(単位ブロック、小ブロック、1または複数の大ブロック)サイズ毎の情報を格納する構造体のリンク周辺のメモリ・レイアウトを示している。ここで、link pointer430は、サイズ毎のブロックの情報を格納する構造体のリンクを指している。
構造体432には、ブロックのサイズに関する情報(power)や、ブロック毎のMHIの直流成分値を格納する配列434へのポインタ(*dc)や、ブロック毎の水平方向の特徴量fxの値を格納する配列436へのポインタ(*fx)や、ブロック毎の垂直方向の特徴量fyの値を格納する配列438へのポインタ(*fy)や、移動が検出されない画素数nmの値を格納する配列440へのポインタ(*noMotionPixels)や、画像に含まれるブロックの数(blocks)や、次に大きなサイズのブロックに関する情報を格納する構造体へのポインタ(*next)や、必要であればリンクを逆に辿ることのできるポインタ(*before)などを含んでいる。
尚、構造体432の要素powerの値は、ブロックの一辺のサイズが2の累乗で示される場合における累乗値に相当する。例えば、この値が3の時は、ブロックのサイズは1辺が2=8画素である。また、next=0となっている構造体は、その構造体がリンクの最後であることを示している。
そして、制御部180の画像入力制御部210が、撮像部150を通じて画像を取得すると(S402のYes)、MHI生成部212は、入力された画像のフレーム間の差分を用いて、動体112の軌跡を階調画像で表現するMHIを生成する(S404)。画像入力制御部210による画像の取得が初回の場合、前フレームの画像が存在していないので、MHI生成部212は、現フレームの画像を前フレームに複製して差分0を求め、演算不能となるのを回避する。また、MHIの生成には、オープンソースのコンピュータビジョン用のライブラリを利用することもできる。
続いて、ブロック分割部214は、生成されたMHIを所定の大きさの小ブロック(正確にはさらに小さい単位ブロック)に分割する(S406)。かかる小ブロックの大きさは、特徴量(特に直流成分値)を導出する最小単位の単位ブロックの面積の4倍である。
特徴量導出部216は、分割された小ブロックにおける(を占有する)動体112の水平方向および垂直方向の移動速度に相当する特徴量を導出する。具体的に、特徴量導出部216として機能する単位ブロック導出部250は、ブロック分割部214によって分割された1辺が2MIN画素の単位ブロック、例えば、図28に1辺2画素(powor=3)で示した最小単位のブロックに含まれるMHIの値Hτ(x,y,t)の総和(直流成分値)を求める(S408)。かかる単位ブロックは、水平方向および垂直方向の差分値が不要なので、図28の配列436や配列438は空白または未設定でよい。
そして、大小ブロック導出部252は、単位ブロック導出部250の対象である1辺が2MIN画素の単位ブロックを用いて、その単位ブロックを周囲4ブロック分結合し、面積を4倍にした1辺が2MIN+1画素(図28の例では1辺2画素(powor=4))の小ブロックの特徴量を導出し、さらに小ブロックの1辺を2、2、2…倍した大ブロックの特徴量を導出する(S410)。特徴量決定部254は、大小ブロック導出部252で導出された小ブロックおよび1または複数サイズの大ブロックの特徴量に基づいて、最終的に1辺が2MIN+1画素の小ブロックの特徴量を決定する(S412)。
続いて、動きベクトル導出部218は、特徴量導出部216によって導出された特徴量(水平方向および垂直方向の差分値)からMHIのグラデーションの変化方向の傾きを示すtanαおよび反射角方向の動きベクトル(vrx,vry)を、端部抽出部220が抽出したグラデーションの端部を含むブロックの水平方向および垂直方向の差分値から動体112の移動方向を示すtanβを求め、動体112の真の動きベクトルを導出し(S414)、画像取得待ちステップ(S402)からを繰り返す。
(特徴量導出ステップ(S410))
図29は、上述した小ブロックおよび大ブロックの特徴量導出ステップ(S410)の具体的な処理の流れを示したフローチャートである。本実施形態では、特徴量演算の効率化を図るべく、小ブロックや大ブロックの特徴量を求めるときに、自体より一回り小さいブロックの直流成分値を繰り返し演算に採用する。ここでは、単位ブロック導出ステップ(S408)において、既にすべての単位ブロックの直流成分値が求められているので、その直流成分を利用して小ブロックおよび大ブロックの特徴量を導出する。
大小ブロック導出部252は、単位ブロックの情報を収めた構造体へのポインタsmallと小ブロックの情報を収めた構造体へのポインタlargeに、それぞれ図28のlink pointerの値とlink pointerの指す構造体のnextの内容を設定する(S450)。そして、next=0となっている最大の大ブロックのpowerを読み出して変数maxに、最小のブロックのpowerを変数mに格納し(S452)、変数mがmax以上であるか否か、即ち最大の大ブロックを示しているかどうか判断する(S454)。ここで、変数mがmax以上ではないと判断されると(S454のNo)、大小ブロック導出部252は、変数mをインクリメントして(S456)、現時点(初回)の大ブロックである小ブロックの数を読み出してnumに格納して、変数nをリセットする(S458)。
続いて、大小ブロック導出部252は、変数nがnum以上であるか否か、即ち対象ブロックの数全部に関して演算が完了したか否か判断し(S460)、変数nがnum以上ではないと判断されると(S460のNo)、largeによって示されるブロックのn番目に含まれる4つのブロックの直流成分値(n00、n01、n10、n11)を読み出し(S462)、直流成分値ならびに水平方向および垂直方向の差分値を含む特徴量を導出する(S464)。そして、nをインクリメントして(S466)、演算完了判断ステップ(S460)からを繰り返す。ここで、変数nがnum以上になれば(S460のYes)、次のサイズの大ブロックを演算すべく、最大ブロック判断ステップ(S454)からを繰り返す。そして変数mがmax以上になれば(S454のYes)、当該小ブロックおよび大ブロックの特徴量導出ステップ(S410)を終了する。
(特徴量決定ステップ(S412))
図30は、上述した小ブロックの特徴量決定ステップ(S412)の具体的な処理の流れを示したフローチャートである。ここでは、上述したように、大小ブロック導出部252で導出された小ブロックおよび1または複数サイズの大ブロックの特徴量に基づいて、最終的に1辺が2MIN+1画素(ここではpower=4)の小ブロックの特徴量を決定する。
特徴量決定部254は、まず、1枚のフレーム画像に含まれる最大サイズのブロックの個数を、図28においてnext=0となっているリンク末尾の構造体のblocksの値を読み出し、変数Mに格納する(S500)。かかるblocksの値は初期化処理ステップ(S400)で設定されている。続いて、特徴量決定部254は、ブロック番号を示す変数nをリセットし(S502)、その変数nとMを比較して、最終のブロックまで調べたかどうかを判定する(S504)。ここで、最終ブロックに至っていないと判断されると(S504のNo)、最大サイズのブロックのn番目に含まれる1辺が2MIN+1画素のすべての小ブロックの特徴量を最終的に決定する(S506)。その詳細な処理は図31で詳述する。そして、変数nをインクリメントして(S508)、最終ブロック判定ステップ(S504)に戻る。
最終ブロックに至っていると判断されると(S504のYes)、当該特徴量決定ステップ(S412)ですべての最大サイズのブロックについて処理し終えたこととなり、特徴量を求めたい解析の粒度である1辺が2MIN+1画素のブロックの最終的な特徴量が導出される。
(小ブロック特徴量決定ステップ(S506))
上述した小ブロックの特徴量を決定するステップ(S506)は、対象となるブロックのサイズとそのブロック番号nを引数とし、図31に示すように、再帰的に呼び出されるサブルーチンとして機能する。まず、特徴量決定部254は、図28のリンクを辿り、引数として取得されたサイズのブロックのn番目の特徴量を読み出す。そして、そのブロックに含まれる1辺が2MIN+1画素のすべての小ブロックの水平及び垂直方向の特徴量fxとfyの符号を比較する(S520)。例えば、上述した図12(a)において、大ブロック182の特徴量の符号と、その大ブロック182に含まれる小ブロック168すべての特徴量の符号とが、水平方向および垂直方向それぞれについて一致するか否か調べられる。その詳細な処理は図32で詳述する。
かかる特徴量比較ステップ(S520)において、大ブロックと小ブロックの特徴量が一致していないと(S522のNo)、前回調べたブロックよりも一回り小さな4つのブロックそれぞれについて再比較すべく、図28のブロックサイズ毎の構造体のリンクを1つ戻して当該小ブロック特徴量決定ステップ(S506)を再帰的に呼び出す(S524)。したがって、最初の比較で一致しないと、4回新たな比較を行うことになる。この再帰的な小ブロック特徴量決定ステップ(S506)の呼び出しを繰り返すと、最終的には比較対照が同じサイズの同じブロックになるので、最後は必ず特徴量が一致することとなる。
大ブロックと小ブロックの特徴量が一致すると(S522のYes)、大ブロックの特徴量を、大ブロックと小ブロックとの面積比に応じて小ブロック用に換算し、結果を格納する(S526)。その詳細な処理は図33で詳述する。
尚、図31のフローチャートでは小ブロックと最大の大ブロックとの間に他のサイズの大ブロックがある場合は、大ブロックを徐々に小さくしていくことで符合が一致する、なるべく大きなブロックを探すようにしたが、かかる場合に限られず、小さなブロックを集めて徐々に大きなブロックを形成する処理によって大ブロックを特定することもできる。
しかし、上述した小ブロックを集めて大ブロックを形成する場合、小ブロック群から一回り大きい大ブロックへと単純に処理を進めることはできない。例えば、上述した図12(b)および図12(c)の小ブロック168と大ブロック442のベクトルの向きが一致し、大ブロック442と大ブロック182のベクトルの向きが一致しているので、大ブロック182の特徴量を、大ブロック182と小ブロック168との面積比に応じて小ブロック168に換算し、小ブロック168の特徴量に上書きできるように思えるが、実際には、大ブロック182の中には、ベクトルの向きの一致していない(部分184)小ブロック168が含まれている。したがって、安易に大ブロック182を小ブロック168に反映するのは注意が必要である。
大ブロック186と大ブロック182のような状態は、図11を用いて説明したように、実際にあり得る。このような場合、大ブロック442と大ブロック182のベクトルの向きが一致しているからといって、ベクトルの向きが一致していない部分184のベクトル群に大ブロック182のベクトルを換算して上書きすることはできない。小さなブロックを集めて徐々に大きなブロックを形成する方法を採る場合は、符号の一致する小ブロックの範囲を見つけ、その範囲を含む最大サイズのブロックを求めるようにするとよい。
(特徴量比較ステップ(S520))
また、上述した特徴量比較ステップ(S520)では、図32に示すように、大ブロックとそれに含まれる小ブロックの特徴量の符号を比較する。ここでは、比較対象となる大ブロックを指定するために、大ブロックの情報を格納する構造体へのポインタと大ブロックのブロック番号、そしてどのサイズの小ブロックと比較するかを指定するために、小ブロックの情報を格納する構造体へのポインタを引数としてサブルーチンを構成している。
まず、特徴量決定部254は、引数largeで指される図28の構造体の情報から引数nで与えられたブロック番号の水平方向の特徴量fx[n]と垂直方向の特徴量fy[n]を読み出してそれぞれ変数largeFxとlargeFyに格納する(S540)。次に、引数largeとsmallを用いて、大ブロックと小ブロックのそれぞれのサイズに関する情報を読み出し(S542)、それぞれのブロックのサイズに関する情報を元に大ブロックにいくつの小ブロックが含まれるかを計算する(S544)。具体的に、それぞれのブロックの1辺の長さが2のL乗、2のS乗であれば、大ブロックの1行または1列に含まれる小ブロックの数は、2/2=2(L−S)によって求まる。即ち大ブロックには、2(L−S)行×2(L−S)列の小ブロックが含まれている。そして、計算された2(L−S)を変数lengthに格納する。
続いて、特徴量決定部254は、大ブロック内の小ブロックの行番号を表す変数yをリセットし(S546)、変数yがlength未満かどうか判定する(S548)。ここで変数yがlength未満であれば(S548のYes)、大ブロック内の小ブロックの列番号を表す変数xをリセットして(S550)、変数xがlength未満かどうかを判定する(S552)。変数xがlength未満であれば(S552のYes)、大ブロック内のy行x列の小ブロックのブロック番号mを求める(S554)。
例えば、1枚の画像の1行に含まれる大ブロックがちょうどW個だとすると、大ブロックのブロック番号nに含まれる0行0列目の小ブロックの小ブロックを単位とした画像内のX座標frameXとY座標frameYは、次のようになる。
frameX=length×(nをWで割った余り)
frameY=length×(nをWで割った商)
ここで、1枚の画像の1行に含まれる小ブロックがちょうどS個だとすると、ブロック番号mは、m=S×(frameY+y)+( frameX+x)で求めることができる。
続いて、特徴量決定部254は、ブロック番号nに含まれるy行x列目の小ブロックの水平方向の特徴量を読み出して変数smallFxに格納し、垂直方向の特徴量を読み出して変数smallFyに格納する(S556)。そして、largeFxとsmallFx、および、largeFyとsmallFyの符号を比較し(S558)、いずれの特徴量も大ブロックと小ブロックとで符号が一致していたら(S558のYes)、変数xをインクリメントして(S560)、変数x判定ステップ(S552)から繰り返す。
水平方向の特徴量と垂直方向の特徴量のいずれでも不一致が検出されると(S558のNo)、「符号不一致」という結果を伴い(S562)、当該特徴量比較ステップ(S520)を終了する。y行目のどのx列の小ブロックも大ブロックの特徴量と不一致とならずにy行目を比較し終わると(S552のNo)、変数yをインクリメントし(S564)、変数y判定ステップ(S548)からを繰り返す。このようにして大ブロックとそれに含まれるすべての小ブロックの特徴量の関係を調べ終わると(S548のNo)、「符号一致」という結果を伴い(S566)、当該特徴量の比較ステップ(S520)を終了する。
(小ブロック換算ステップ(S526))
また、上述した小ブロック換算ステップ(S526)では、図33に示すように、大ブロックの特徴量を、大ブロックと小ブロックとの面積比に応じて小ブロック用に換算する。ここでは、特徴量換算対象となる大ブロックを指定するために、大ブロックの情報を格納する構造体へのポインタと大ブロックのブロック番号、そしてどのサイズの小ブロック用に変換するかを指定するために、小ブロックの情報を格納する構造体へのポインタを引数としてサブルーチンを構成している。
まず、特徴量決定部254は、図28のリンクを辿り、引数として取得されたそれぞれのブロックのサイズを変数pとqに格納する(S570)。次に、変換する元になる三つの特徴量を図28の記憶領域から読み出し、直流成分値を変数dcに、水平方向の特徴量を変数fxに、垂直方向の特徴量を変数fyに格納する(S572)。
続いて、特徴量決定部254は、それぞれのブロックのサイズを比較し(S574)、pとqが等しければ(S574のYes)、当該小ブロック換算ステップ(S526)の引数で指定された二つのブロックはサイズが等しいこととなり、その特徴量を変換する必要が無いので、大ブロックの特徴量を単純に小ブロックにコピーする(S576)。尚、変換結果の格納先が図28のリンクの一部であれば、特徴量は上書きされることになる。したがって、上書きしたくない場合は、結果格納先の構造体を別途用意し、この構造体へのポインタをこのサブルーチンの引数として与えればよい。
一方、pとqが一致しない場合(S574のNo)、最初に求めた特徴量が正規化されていないので、ブロックのサイズに合わせた値の調整を行う(S578)。仮に、グラデーションの変化が均一な場合を考えると、ブロックの1辺の長さが2倍になれば、面積は4倍になるので大ブロックの直流成分の値は、小ブロックのそれの4倍となる。また、ブロックの1辺の長さが2倍になれば、ブロックの長さの半分の距離にあるMHIの値Hτ(x,y,t)の差は2倍となり、そうした差を持ったブロックの行(または列)の組み合わせ(図17(a)、(b)中、矢印で示す右半分と左半分(または上半分と下半分)の対応する画素)も列(または行)の数も2倍になるので、ブロック内の右(または上)半分のMHIの値Hτ(x,y,t)を加算し、ブロック内の左(または下)半分のMHIの値Hτ(x,y,t)を減算して求める特徴量の値は、2=8倍になる。したがって、面積が2×2倍(即ち、面積比4)の大ブロックの特徴量から小ブロックの特徴量を求める場合は、小ブロックの直流成分値は大ブロックの直流成分値の1/4倍に、水平及び垂直方向の差分値は大ブロックの差分値の1/8倍に調整することとする。
その結果、2N+1のサイズのブロック内のMHIは平均化され、2のサイズのブロックの特徴量として設定される。但し、動きベクトルを求めるには水平方向の特徴量と垂直方向の特徴量は必須であるが、直流成分値は必ずしも必要とされない。直流成分値は、目視によるリアルタイムのデバッグ情報として縮小MHIを作る時の輝度情報として利用される。したがって、直流成分値まで平均化してしまうと、この縮小MHIの隣接する2N+1のサイズブロック間で輝度差の変化が大きくなり、縮小MHIが見づらくなるので、敢えて直流成分値については調整しなくてもよい。
ブロック内のMHIの値Hτ(x,y,t)のグラデーションが一様であると仮定すると、大ブロックの1辺の長さが2で小ブロックの1辺の長さが2(p>q)の時、大ブロックの特徴量を小ブロック用に換算するには、直流成分値は、2(p−q)×2(p−q)、即ち2(p−q)×2で割り、水平方向の特徴量と垂直方向の特徴量は、2(p−q)×2(p−q)×2(p−q)、即ち2(p−q)×3で割ればよい。そして、特徴量決定部254は、この変換結果を大ブロック内のすべての小ブロックに設定する(S580)。
以上のようにして、複数のサイズのブロックで、並行してMHIの水平方向の差分と垂直方向の差分を求め、それらの符号を手がかりとして、状況に応じて適切な差分を特徴量として採用することにより、単一のサイズの小ブロックを採用したときよりも測定できる速度を広げ、精度を上げる事ができる。さらに、単一サイズの大ブロックを採用したときに生じ得る動体112の向きの誤判断も削減することが可能となる。
(動きベクトル導出ステップ(S414))
上述した動きベクトル導出ステップ(S414)では、図34に示すように、まず、動きベクトル導出部218が、特徴量導出部216が導出した図21の注目ブロック168aの特徴量である水平方向の差分値fxと垂直方向の差分値fyを読み出す(S600)。そして、読み出したfxやfyの例外処理を行う。
具体的に、動きベクトル導出部218は、水平方向の差分値fxと垂直方向の差分値fyが共に0かどうかを判定し(S602)、差分値fxと差分値fyが共に0であった場合(S602のYes)、動きベクトルのx成分vmxとy成分vmyを0として(S604)、当該動きベクトル導出ステップ(S414)を終了する。差分値fxと差分値fyが共に0でない場合(S602のNo)、図28のnoMotionPixelsを参照してMHIの輝度値が0となっている単位ブロック数を読み出し、その値が閾値を超えているか否かによってMHIのグラデーションで埋まっているか否かを判断する(S606)。ここで、MHIで埋まっていないと判断した場合(S606のNo)、動きベクトルのx成分vmxとy成分vmyを0として(S604)、当該動きベクトル導出ステップ(S414)を終了する。また、MHIで埋まっていると判断した場合(S606のYes)、変数vxとvyをリセットする(S608)。
続いて、動きベクトル導出部218は、差分値fxが0以外であるか否かを判定し(S610)、0でなければ(S610のYes)、数式5に相当する演算を行ってvxに設定する(S612)。そして、差分値fyが0以外であるか否かを判定し(S614)、0でなければ(S614のYes)、数式6に相当する演算を行ってvyに設定する(S616)。
次に、端部抽出部220は、図21を用いて説明した処理を通じ、グラデーションの端部を含むブロック(例えば、図21のブロック168bまたはブロック168c)を抽出する(S618)。かかる端部抽出ステップ(S618)は、図21の注目ブロック168aからそのグラデーションの変化方向と垂直の方向に向かって、グラデーションの端部を含むブロック(ブロック168bまたはブロック168c)を抽出する。その詳細な処理は図35で詳述する。
ここで、グラデーションの端部抽出が成功したか否か判断され(S620)、抽出が成功していなかったら(S620のNo)、それは、動体112が画面からはみ出していたり、グラデーションの端部がなくなったりしている場合を示しているとみなすことができるので、デフォルト処理を遂行する(S622)。その詳細な処理は図39で詳述する。
動きベクトル導出部218は、グラデーションの端部抽出が成功したと判断されると(S620のYes)、そのグラデーションの端部を含むブロックの特徴量である水平方向の差分値を変数efxに設定し、垂直方向の差分値を変数efyに設定する(S624)。そして、変数efxおよびefyが共に0であるか否か判断し(S626)、共に0であった場合(S626のYes)、グラデーションの端部が見つかった場合であっても、変数efxおよびefyを利用できないので、上述したデフォルト処理ステップ(S622)に移行する。
続いて、動きベクトル導出部218は、差分値efyが0かどうかを判定する(S628)。差分値efyが0の場合(S628のYes)、垂直方向に移動しているとみなせるので、動きベクトルのx成分vmxを0に、y成分vmyをvyに設定し(S630)、当該特徴量導出ステップ(S414)を終了する。差分値efyが0ではない場合(S628のNo)、動きベクトル導出部218は、端部ブロック(グラデーションの端部が含まれるブロック)の水平方向の差分値efxと垂直方向の差分値efyから数式24のtanβを計算する(S632)。このtanβは、図21のブロック168bのグラデーション部分の傾きを表している。
続いて、動きベクトル導出部218は、垂直方向の差分値fyが0かどうかを判定する(S634)。差分値fyが0であると判定された場合(S634のYes)、図25(a)の状況に相当し、数式26の計算を行って、vmxにvxをvmy=にvx*tanβを設定して(S636)、当該特徴量導出ステップ(S414)を終了する。
次に、動きベクトル導出部218は、水平方向の差分値fxが0かどうかを判定する(S638)。差分値fxが0であると判定された場合(S638のYes)、さらにtanβが0か否か判定し(S640)、0でなければ(S640のNo)、図25(b)の状況に相当し、数式27の計算を行って、vmyにvyをvmxにvmy/tanβを設定して(S642)、当該特徴量導出ステップ(S414)を終了する。tanβが0と判定された場合(S640のYes)、水平方向に移動していると推定されるにも拘わらずfx=0であるといった矛盾が生じるので、vmxとvmyに0を設定して(S644)、当該特徴量導出ステップ(S414)を終了する。
水平方向の差分値fxも垂直方向の差分値fyも0でなかった場合(S634のNoかつS638のNo)、数式24の計算を行う(S646)。具体的には、数式7を用いて反射角方向の動きベクトルのy成分vy/2をまず求め、次に注目ブロックの水平方向の差分値fxと垂直方向の差分値fyから数式25のtanαを計算する。このtanαは、図23では(HAの長さ)/(OHの長さ)に対応し、注目ブロックのグラデーションの変化の向きを表している。更に、動きベクトル導出部218は、既に求めたtanαとtanβの値及びvryを数式24に代入し、実際の動きベクトルのx成分を求めている。最後にvmxにtanβをかけて実際の動きベクトルのy成分を求める。
かかる処理を図23および図24を用いて説明すると、まず移動方向が反射角方向(O→C)であったと仮定した時の動きベクトルVrの各成分を最初に求め、次に、注目ブロックのグラデーションの変化方向の傾きαと本当の移動方向(O→B)を示す傾きtanβを端部ブロックから求める。最後に数式24を用いて真の動きベクトルの成分を求めている。
(端部抽出ステップ(S618))
上述した端部抽出ステップ(S618)では、図35に示すように、まず、動きベクトル導出部218が、注目ブロックの上下左右に何ブロックあるかを調べる(S650)。そして、注目ブロックの特徴量を取り出し、dcにブロック内のHτ(x,y,t)の総和を、fxに水平方向の差分値を、fyに垂直方向の差分値を設定する(S652)。そして、読み出したfxやfyの例外処理を行う。
次に、動きベクトル導出部218は、水平方向の差分値fxと垂直方向の差分値fyが共に0かどうかを判定し(S654)、差分値fxと差分値fyが共に0であった場合(S654のYes)、未判定であることを示唆して(S656)、当該端部抽出ステップ(S618)を終了する。差分値fxと差分値fyが共に0でない場合(S654のNo)、差分値fyが0か否かを判定する(S658)。
差分値fyが0でなければ(S658のNo)、端部ブロックの検索方向であるHτ(x,y,t)のグラデーションの変化方向と垂直な方向の傾きを−fx/fyで求め、これを変数tanに設定する(S660)。差分値fyが0の場合(S658のYes)、図25(a)のように端部ブロックの検索方向は垂直方向ということになり、tanに仮の値100を設定する(S662)。ここで設定した値100は以降のステップで端部ブロックの検索方向がY軸方向に1ブロックずつ移動して調べるパスを通るような大きい値であればどのような値をとることもでき、ここでは実際にtanβで示される傾きが垂直に近くなるように100とした。
次に、動きベクトル導出部218は、tanの絶対値が1より大きいかどうかを判定し(S664)、この値が1より大きい場合(S664のYes)、グラデーションの変化は、水平方向の変化より垂直方向の変化の方が大きいということになるので、図36に示すように、検索の度に毎回Y軸方向には1ブロック必ず移動し、X軸方向には必要に応じて移動してグラデーションの端部を検索することにする。一方、tanの絶対値が1より大きくない場合(S664のNo)、図40に示すように、逆に毎回X軸方向に1ブロック必ず移動し、Y軸方向には必要に応じて移動してグラデーションの端部を検索する。
具体的に、動きベクトル導出部218は、tanの絶対値が1より大きい場合(S664のYes)、垂直方向の差分値fyが0かどうかを判定し(S666)、差分値fyが0と判定された場合(S666のYes)、図25(a)の状況なので、端部ブロックをX軸方向には移動して探さないようにするため変数subに0を設定する(S668)。ここで、変数subは、図36に示すように、検索方向をY軸方向に1ブロック移動したときのX軸方向の移動距離(単位=ブロックサイズ)である。差分値fyが0ではないと判定された場合(S666のNo)、変数subに1/|tan|を設定する(S670)。
tanの絶対値が1より大きくない場合(S664のNo)、グラデーションの変化は、垂直方向の変化より水平方向の変化の方が大きいということになるので、図37に示すように、検索の度に毎回X軸方向に1ブロックは必ず移動し、Y軸方向には必要に応じて移動してグラデーションの端部を検索することにする。ここでは、差分値fxが0かどうか判定し(S672)、差分値fxが0ではないと判定された場合(S672のNo)、変数subに|tan|を設定し(S674)、0と判定された場合(S672のYes)、subに0を設定する(S676)。以後の処理は、Y軸に関するS678〜S700の処理をX軸とY軸とを置換することで理解できるため、ここではS678〜S700を説明することでその説明を省略する。
続いて、動きベクトル導出部218は、端部ブロックの検索方向の傾きを設定したtanの符号を調べる(S678)。ここで、tanの値が正の場合(S678のYes)、グラデーションの端部を検索する領域は、注目ブロックの中心を原点とするXY座標を考えると第1象限および第3象限になり、右肩上がり、または左肩下がりに調べることとなり、一方、tanの値が正でない場合(S678のNo)、第2象限および第4象限となり、左肩上がり、または右肩下がりに調べることとなる。tanの値が正でない場合(S678のNo)の処理(S680)は、tanの値が正の場合(S678のYes)と対応しているので、tanの値が正の場合(S678のYes)を説明することで、tanの値が正でない場合(S678のNo)の処理の説明を省略する。
第1象限および第3象限を調べる場合(S678のYes)、動きベクトル導出部218は、初期値としてdispに0.5を設定する。これは、図36の原点と原点を含むブロックの右端までの距離であり、最初の持ち点とみなすことができる。また、動きベクトル導出部218は、blockDispXに0を設定する。これは、調査するブロックの原点からの水平方向のブロック数である。さらに、動きベクトル導出部218は、blockDispYを1に設定する。これは、調査するブロックの原点からの垂直方向のブロック数である(S682)。
次に、動きベクトル導出部218は、blockDispYがupMarginより小さいかどうかを判定する(S684)。小さくなければ(S684のNo)、画面の端に達しているとみなすことができるので、この第1象限への調査を止めて、反対の象限である第3象限を左肩下がりに調べる(S686)。かかる第3象限の説明も第1象限と対応しているので、ここでは第1象限を説明することで、第3象限の説明を省略する。
動きベクトル導出部218は、blockDispYがupMarginより小さくなければ(S684のYes)、持ち点dispからsubを減じる(S688)。そして、持ち点dispか尽きたかどうかを判定し(S690)、dispが負になっていれば(S690のYes)、X軸方向にも1ブロック右に移動して調査する(S692)。具体的には、bloclDispXをインクリメントし、持ち点dispも+1回復させる。
持ち点dispが負でない場合(S690のNo)、動きベクトル導出部218は、グラデーションの端部を抽出するブロック番号を導出する(S694)。ここで、startは、注目ブロック番号である。例えば、現在、第一象限を右肩上がりに調べているので、調査するブロック番号として、blockNumにstart−(画面1行に含まれるブロック数×blockDispY)+blockDispXを設定する。
動きベクトル導出部218は、求めたブロック番号blockNumを引数として、グラデーションの端部に到達したかどうかを判断する(S696)。かかる判断が適切に行われれば、数式24のtanβの値が正確に導出され、最終的な動きベクトルを高精度に導出することが可能となる。その詳細な処理は図38で詳述する。そして、グラデーションの端部に到達したか否かを判定し(S698)、到達していれば(S698のYes)、blockNumを、グラデーションの端部を含むブロック番号として当該端部抽出ステップ(S618)を終了する。到達していなければ(S698のNo)、調査を継続すべく、blockDispYに1を加算し(S700)、blockDispY判定ステップ(S684)からの処理を繰り返す。
(端部到達判断ステップ(S696))
上述した端部到達判断ステップ(S696)では、図38に示すように、まず、動きベクトル導出部218は、注目ブロックの特徴量を取り出し、変数dcにブロック内のHτ(x,y,t)の総和を、fxに水平方向の差分値を、fyに垂直方向の差分値を設定し(S720)、端部抽出ステップ(S618)で求めたブロックの特徴量を取り出し、それぞれ変数tdc,tfx,tfyに設定する(S722)。そして、動きベクトル導出部218は、両特徴量の差分ベクトルの大きさ(絶対値)を導出する(S724)。
次に、動きベクトル導出部218は、調査ブロックのtdcを注目ブロックのdcで割った値が、閾値Lと閾値Hの間にあるかどうかを判定する(S726)。尚、閾値LとHは、実験により適切な値、例えば0.8や1.2を適用する。かかる端部ブロックの抽出では、注目ブロックのグラデーションの変化方向の傾きと垂直方向に検索しているので、図21からも分かるように、検索方向上にあるブロックは、どれも同じような明るさをしている。即ち、閾値判定ステップ(S726)は、調査ブロックが注目ブロックと同じような明るさか否かを判断するものである。ここで、調査対象のブロックが図21のブロック168bやブロック168cに達していれば、ブロックはMHIで満たされなくなり、tdcの値はdcよりも小さくなるはずである。閾値判定ステップ(S726)はその見極めを遂行している。
tdc/dcが閾値の範囲に収まっていなければ(S726のNo)、動きベクトル導出部218は、グラデーションの端部に達していると判断して到達を示唆し(S728)、当該端部到達判断ステップ(S696)を終了する。
tdc/dcが、閾値の範囲に収まっていれば(S726のYes)、差分ベクトルの大きさdが閾値D未満であるか否か判断され(S730)、閾値D未満であれば(S730のYes)、未到達を示唆して(S732)、当該端部到達判断ステップ(S696)を終了する。閾値D未満でなければ(S730のNo)、グラデーションの端部に達していると判断して到達を示唆し(S728)、当該端部到達判断ステップ(S696)を終了する。
尚、動体112が大きすぎて画面に収まりきらず、tanβを求めるのに適切な端部ブロックが見つからないなどの場合は、反射角方向に移動していると仮定するなどして動きベクトルを求めるなどの方法が考えられる。
(デフォルト処理ステップ(S622))
上述したデフォルト処理ステップ(S622)では、図39に示すように、まず、動きベクトル導出部218が、水平方向の差分値fxと垂直方向の差分値fyが共に0かどうかを判定し(S750)、差分値fxと差分値fyが共に0であった場合(S750のYes)、変数vmxとvmyのポインタをクリアして(S752)、当該デフォルト処理ステップ(S622)を終了する。差分値fxと差分値fyが共に0でない場合(S750のNo)、動きベクトルのx成分値vxとy成分値vyをリセットする(S754)。
続いて、動きベクトル導出部218は、差分値fxが0以外であるか否かを判定し(S756)、差分値fxが0でなければ(S756のYes)、数式5に基づいて水平方向の移動速度vxを導出する(S758)。そして、差分値fyが0以外であるか否かを判定し(S760)、差分値fyが0でなければ(S760のYes)、数式6に基づいて垂直方向の移動速度vyを導出する(S762)。
また、ユーザ設定で移動方向が水平に限定されている場合(S764のYes)、動きベクトルのx成分値vmxに水平方向の移動速度vxを、動きベクトルのy成分値vmyに0を格納する(S766)。同様に、ユーザ設定で移動方向が垂直に限定されている場合(S768のYes)、動きベクトルのx成分値vmxに0を、動きベクトルのy成分値vmyに垂直方向の移動速度vyを格納する(S770)。
以下は、MHIのグラデーションの変化方向を移動方向と見なす処理である。動きベクトル導出部218は、差分値fx=0であれば(S772のYes)、図25(b)の状態であるが、このパスは、MHIのグラデーションの変化方向を移動方向と見なしているので、動きベクトルのx成分値vmxに0を、動きベクトルのy成分値vmyに垂直方向の移動速度vyを格納する(S774)。同様に、差分値fy=0であれば(S776のYes)、図25(a)の状態であるが、このパスは、MHIのグラデーションの変化方向を移動方向と見なしているので、動きベクトルのx成分値vmxに水平方向の移動速度vxを、動きベクトルのy成分値vmyに0を格納する(S778)。
いずれの判断ステップにも当てはまらない場合、tanβにtanα=fy/fxを設定し、数式24を用いて動きベクトルを求める(S780)。
以上の画像処理方法においても、三角関数やルート演算を極力利用しないといった軽演算負荷の画像処理によって動体112の時間方向の情報を高精度に導出することができ、また、演算装置自体のコスト、消費電力、専有面積を削減することが可能となる。
以上、添付図面を参照しながら本発明の好適な実施形態について説明したが、本発明はかかる実施形態に限定されないことは言うまでもない。当業者であれば、特許請求の範囲に記載された範疇において、各種の変更例または修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
例えば、上述した実施形態では、グラデーションの端部を抽出して動きベクトルを求める際、各小ブロックの特徴量を求めるのと同様、複数の画素によるブロックの概念を利用したが、かかる場合に限らず、例えば、sobelフィルタ等を用いてtanβを求め、動きベクトルを生成することも可能である。
なお、本明細書の画像処理方法における各工程は、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいはサブルーチンによる処理を含んでもよい。
本発明は、撮像した画像中における動体の動きベクトルを導出可能な画像処理装置および画像処理方法に利用することができる。
110 …画像処理装置
112 …動体
166 …単位ブロック
168 …小ブロック
182、186 …大ブロック
212 …MHI生成部
214 …ブロック分割部
216 …特徴量導出部
218 …動きベクトル導出部
220 …端部抽出部
250 …単位ブロック導出部
252 …大小ブロック導出部
254 …特徴量決定部

Claims (7)

  1. 任意の画像のフレーム間の差分を用いて、動体の移動軌跡をグラデーションで表すモーションヒストリーイメージを生成するMHI生成部と、
    生成された前記モーションヒストリーイメージを所定の大きさの小ブロックに分割するブロック分割部と、
    分割された前記小ブロックにおける前記動体の水平方向および垂直方向の移動速度に相当する特徴量を前記小ブロック毎に導出する特徴量導出部と、
    前記特徴量から前記動体の動きベクトルを導出する動きベクトル導出部と、
    を備えることを特徴とする、画像処理装置。
  2. 前記特徴量導出部は、前記分割された小ブロックを水平方向に二分したときの両画素群の差分値および垂直方向に二分したときの両画素群の差分値に基づいて前記特徴量を導出することを特徴とする請求項1に記載の画像処理装置。
  3. 前記特徴量導出部は、複数の前記小ブロックを組み合わせた大ブロックについても前記特徴量を導出し、前記大ブロックと前記小ブロックとの面積比に応じて前記大ブロックの特徴量を小ブロックに換算し、小ブロックの特徴量を導出することを特徴とする請求項1または2に記載の画像処理装置。
  4. 前記大ブロックは、前記大ブロックに含まれるすべての小ブロックにおける水平方向および垂直方向の差分値の符号が前記大ブロックにおけるそれぞれ対応する方向の差分値の符号と一致し、かつ、輝度値が0となる画素が前記大ブロック中に所定数未満しか存在しないブロックのうち最大の大きさのブロックであることを特徴とする請求項3に記載の画像処理装置。
  5. 前記モーションヒストリーイメージによるグラデーションの変化方向と垂直な方向に向かって、前記グラデーションが形成されている帯の幅方向の端部を抽出する端部抽出部をさらに備え、
    前記動きベクトル導出部は、抽出された前記端部を含む小ブロックの特徴量と、前記特徴量導出部で導出された小ブロックの特徴量とを用いて動きベクトルを導出することを特徴とする請求項1から4のいずれか1項に記載の画像処理装置。
  6. 前記動きベクトル導出部は、抽出された前記端部を含む小ブロックの特徴量から実際の移動方向βを示すtanβを求め、前記特徴量導出部で導出された小ブロックの特徴量から前記モーションヒストリーイメージによるグラデーションの変化方向αを示すtanαと速度のy成分vryを求め、
    …(数式1)
    に代入することで動きベクトルを導出することを特徴とする請求項5に記載の画像処理装置。
  7. 任意の画像のフレーム間の差分を用いて、動体の移動軌跡をグラデーションで表すモーションヒストリーイメージを生成し、
    生成した前記モーションヒストリーイメージを所定の大きさの小ブロックに分割し、
    分割した前記小ブロックにおける前記動体の水平方向および垂直方向の移動速度に相当する特徴量を前記小ブロック毎に導出し、
    前記特徴量から前記動体の動きベクトルを導出することを特徴とする、画像処理方法。
JP2009234593A 2009-10-08 2009-10-08 画像処理装置および画像処理方法 Pending JP2011081675A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009234593A JP2011081675A (ja) 2009-10-08 2009-10-08 画像処理装置および画像処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009234593A JP2011081675A (ja) 2009-10-08 2009-10-08 画像処理装置および画像処理方法

Publications (1)

Publication Number Publication Date
JP2011081675A true JP2011081675A (ja) 2011-04-21

Family

ID=44075650

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009234593A Pending JP2011081675A (ja) 2009-10-08 2009-10-08 画像処理装置および画像処理方法

Country Status (1)

Country Link
JP (1) JP2011081675A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013143082A (ja) * 2012-01-12 2013-07-22 Fujitsu Ltd 指位置検出装置、指位置検出方法及び指位置検出用コンピュータプログラム
WO2018110803A1 (ko) * 2016-12-15 2018-06-21 경희대학교 산학협력단 데스크톱 스크린을 비중첩 동일 크기 블록으로 분할하기 위한 동적 분할 알고리즘
KR20180070438A (ko) * 2016-12-15 2018-06-26 경희대학교 산학협력단 데스크톱 스크린을 비중첩 동일 크기 블록으로 분할하기 위한 동적 분할 알고리즘
CN112433529A (zh) * 2020-11-30 2021-03-02 东软睿驰汽车技术(沈阳)有限公司 运动物体确定方法、装置及设备

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013143082A (ja) * 2012-01-12 2013-07-22 Fujitsu Ltd 指位置検出装置、指位置検出方法及び指位置検出用コンピュータプログラム
WO2018110803A1 (ko) * 2016-12-15 2018-06-21 경희대학교 산학협력단 데스크톱 스크린을 비중첩 동일 크기 블록으로 분할하기 위한 동적 분할 알고리즘
KR20180070438A (ko) * 2016-12-15 2018-06-26 경희대학교 산학협력단 데스크톱 스크린을 비중첩 동일 크기 블록으로 분할하기 위한 동적 분할 알고리즘
KR102077214B1 (ko) 2016-12-15 2020-02-14 경희대학교 산학협력단 데스크톱 스크린을 비중첩 동일 크기 블록으로 분할하기 위한 동적 분할 알고리즘
US10747558B2 (en) 2016-12-15 2020-08-18 University-Industry Cooperation Group Of Kyung Hee University Dynamic splitting algorithm for splitting a desktop screen into non-overlapping equal-size blocks
CN112433529A (zh) * 2020-11-30 2021-03-02 东软睿驰汽车技术(沈阳)有限公司 运动物体确定方法、装置及设备
CN112433529B (zh) * 2020-11-30 2024-02-27 东软睿驰汽车技术(沈阳)有限公司 运动物体确定方法、装置及设备

Similar Documents

Publication Publication Date Title
US10261574B2 (en) Real-time detection system for parked vehicles
Hu et al. Moving object detection and tracking from video captured by moving camera
EP2261604B1 (en) Computer arrangement for and method of calculating motion vectors using range sensor data
Spinello et al. People detection in RGB-D data
JP4541316B2 (ja) 映像監視検索システム
Zhu et al. VISATRAM: A real-time vision system for automatic traffic monitoring
WO2012127815A1 (ja) 移動体検出装置および移動体検出方法
JP5643543B2 (ja) 情報提示システム及びその制御方法、プログラム
JP2016099941A (ja) オブジェクト位置推定システム、及びそのプログラム
US9367920B2 (en) Method and apparatus for processing images
JP5956248B2 (ja) 画像監視装置
JP2006059252A (ja) 動き検出方法及び装置,プログラム,車両用監視システム
JP2013140515A (ja) 立体物検出装置及びプログラム
JP2011081675A (ja) 画像処理装置および画像処理方法
Zhang et al. Longitudinal-scanline-based arterial traffic video analytics with coordinate transformation assisted by 3D infrastructure data
JP2005332071A (ja) 視覚障害者追跡システム及び視覚障害者検出方法
JP6798609B2 (ja) 映像解析装置、映像解析方法およびプログラム
JP7407738B2 (ja) 情報処理装置、情報処理方法及びプログラム
Pun et al. A real-time detector for parked vehicles based on hybrid background modeling
KR101241813B1 (ko) Gpu를 이용한 파노라마 영상의 객체 검출 장치 및 방법
CN116259001A (zh) 一种多视角融合的三维行人姿态估计与追踪方法
JPH11328365A (ja) 画像監視装置及びその方法
Davis et al. Building adaptive camera models for video surveillance
JP4573590B2 (ja) 画像処理による移動物体計測方法及び装置
JP5960470B2 (ja) 画像監視装置

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20111012