以下図面を参照して本発明の実施形態を説明する。
本発明の実施形態を説明するに際し、本発明の実施形態に係る画像処理装置における自動閾値の算出処理について、その動作概念を図3を参照して説明する。
本発明の実施形態に係る画像処理装置に入力される映像は、単眼カメラ(単一のカメラ)で撮影したカメラ映像であり、周囲の明るさや撮像されている構造物、映像条件(ノイズの重畳状況、自動絞りの動作等)に応じて画面全体の輝度変動が発生する。固定閾値での設定のみとした場合には、昼間と夜間の明るさが変動する中で対象物のみを正確に抽出することは困難であり、閾値の決定は人間系によるものとなり、経験と勘など不確定要素によるところが大きくなる。そこで、本願発明者は、図3に示すように、QVGA(320×240画素)の全画素について、1画素当りで、nフレーム(例;30フレーム)の輝度(エッジ強度)集合の平均(μ:輝度平均)と、標準偏差(σ)を求め、この標準偏差(σ)を閾値に設定する自動閾値設定技術を確立した。この自動閾値設定手段は、上述したように、波の揺らぎや、波に反射する西日の影響、木の激しい揺れ、木の影の揺れ等に対して変化画素として判定してしまう過剰検知が見受けられた。
揺らぎのある画素とそうでない画素の特徴を調査した結果、揺らぎのある画素は、自動閾値の設定で利用する輝度の分散が大きく、そうでない画素は分散が極端に小さいことが分かった。
そこで、輝度の標準偏差(σ)を利用して閾値を設定する場合、上記の特徴から、輝度の標準偏差の2以上の整数倍を閾値として設定することを考えた。例えば輝度の標準偏差の3倍(3σ)を閾値として設定することを考えた。これにより、変動の大きい画素の閾値がより大きく(変動の小さな画素の閾値がより小さな値で安定して)設定されるように変更した。
この3σを閾値に利用した場合、時間軸で一定して、この閾値(3σ)が連続的に大きい画素を、揺らぎ画素と判断することができるため、移動平均にて最終閾値を決定することとした。なお、移動平均を利用した場合、閾値への反映にタイムラグを伴う(過去のデータから現在を予測するため)。そこで、その影響を極力少なくするために、重みを付けた移動平均(加重移動平均)を利用し、直近(最新)の算出結果の影響が大きい結果を得られるようにした。また、常時、揺らいでいる画素のみならず、動体が存在した画素も一時的にではあるが、輝度の標準偏差が増大する。そこで、下式のように、閾値(3σ)を仮の閾値として加重移動平均から閾値(3σ)の加重移動標準偏差を減算することで、その影響を極力少なくする工夫を実施した。なお、ここでは最小輝度値を0、最大輝度値を255としている。
輝度分散V=1/N×Σ(輝度)2 − (1/N×Σ輝度)2
仮閾値(3σ)=3*sqrt(V)、ただし、255超過の場合は、255とする sqrt:平方根
閾値=ΣWn×(3σ)/ΣWi − Sqrt(1/N×Σ(3σ)2 −1/N×Σ(3σ))2)
:(3σの加重移動平均)−(3σの標準偏差)
この結果、波の揺らぎや波への西日の反射、木の揺れに順応した揺らぎがない安定した画素での安定的対象物の検知が可能になった。またダイナミックに変化する周囲の明るさに追従することが可能になった。この閾値の自動設定は、差分をとる対象画像が原画像、エッジ画像(空間微分画像、輪郭画像)のいずれにおいても適用できる。
上記した自動閾値の算出処理を毎フレーム全画素を対象に実施する技術は、波の揺らぎや波への西日の反射、木の揺れに順応する動き検出性能を持つが、画像が更新される度に、検出対象となる画像領域の全画素について煩雑な演算処理を繰り返し実施することから、システム全体の処理負荷に対して閾値算出に係る処理負荷の割合が大きく、かつその高負荷状態が定常的に継続される。
この問題を解消する手段として、画像上の閾値算出対象にある全画素領域について、画像上の複数画素単位のブロック(画素ブロック)を与え、ブロック毎に自動閾値算出対象となる注目画素をブロック内で順次一定のシフト方向に可変し巡回する処理を導入する。このブロック内で注目画素を順次一定のシフト方向に可変し巡回シフトする処理を、この実施形態では、説明内容に応じて、ブロック自動算出処理、もしくはブロック内巡回シフト処理、もしくは単に注目画素シフトと称している。
このブロック自動算出処理(ブロック内巡回シフト処理)の導入により、各画素の自動閾値更新処理がブロックサイズの画素数で決まるnフレームに一度の割合となり、フレーム当たり(画像更新時)の閾値算出に係る処理負荷を軽減することができる。
しかし、単に、ブロックサイズを固定値として決め、ブロック毎に自動閾値算出対象となる注目画素をブロック内で順次一定のシフト方向に可変するブロック自動算出処理を実施した場合、ブロック内のある注目画素について、閾値が更新されるまでに、ブロックサイズの画素数分の画像(フレーム)更新を待つことになり、ブロック内の注目画素に対する閾値更新のサンプリング周期がブロックサイズの画素数分、長くなり、ブロック内の全ての画素が更新されるまでに多くの時間(フレーム数)を要する。例えば、ブロックサイズを8×8画素とした場合、注目画素は64フレームの画像更新毎に抽出されることになり、30フレームの画像を用いて自動閾値を求めるとすると、30×64フレームの画像更新に対する画素当たりの輝度値変動をチェックした自動閾値の設定をすることになり、映像入力開始直後は自動閾値の算出がされていない固定閾値にて差分処理が動作するため、自動閾値の算出が全画素分終了するまでの間、過剰検知が発生するなどの不具合が生じる虞がある。このため、パン、チルト、ズームの制御が可能なカメラで定周期にプリセット(予め設定されているポジション)への変更をする監視形態などにより、入力画像が短期に切り替わる(環境変動の高い)条件下では適用範囲が制限される。
そこで、この実施形態においては、上記した注目画素のブロック内巡回シフト機能をもつブロック自動算出処理において、ブロックサイズを所定のサイズまで段階的に大きくして、各画素における注目画素のサンプリング周期を、漸次、長くすることによって、自動閾値更新処理に係る処理負荷を軽減するとともに環境変動に対して一定の監視性能を保有する。
このブロック内巡回シフト処理を実施するブロックサイズを動的に可変する処理の導入により、自動閾値算出処理に係る処理負荷(算出対象画素)を、例えば1/4〜1/64程度に、漸次、軽減することができる。このブロック内巡回シフト処理を実施するブロックサイズを動的に可変する処理を、この実施形態ではブロックサイズ動的可変処理と称している。
このブロックサイズ動的可変処理の具体的な処理イメージを図4に例示している。ここでは、1フレーム320×240画素の全領域(マスク領域なし)を自動閾値算出対象画素領域としており、ブロックサイズを所定のサイズまで段階的に可変(拡大)する場合、第1ステージ(初段)は、全画素の閾値を毎フレーム更新した、最小画素ブロック(1×1画素ブロック)となる、320×240=76800回分の演算量、第2ステージ(画素ブロック=2×2画素)は、第1ステージの1/4にあたる、160×120=19200回分の演算量、第3ステージ(画素ブロック=4×2画素)は、第1ステージの1/8にあたる、80×120=9600回分の演算量、第4ステージ(画素ブロック=4×4画素)は、第1ステージの1/16に当たる、80×60=4800回分の演算量、と、ステージの更新(ブロックサイズの段階的ステップ更新)毎に、演算量が漸減してゆく。この実施形態では、最終ステージ(終段)の最大画素ブロックを8×8ブロックとして、第1ステージの1/64にあたる40×30=1200回分の演算量まで漸減する。
ブロック内巡回シフトは、例えば、第2ステージ(画素ブロック=2×2画素)の場合、ブロック内において、自動閾値の算出対象となる注目画素が、ハッチで示す[左上→右上→左下→右下]の順に巡回(シフト)する。従って、例えば左上の画素を注目画素とすると、当該注目画素は4フレームの画像更新毎に抽出されることになる。最終ステージ(最大画素ブロック=8×8画素)の場合、注目画素は64フレームの画像更新毎に抽出されることになる。
さらに、この実施形態では、上記したブロック内巡回シフト処理を複数回繰り返し行う処理を実施する。この処理をこの実施形態ではブロック内巡回シフトの循環処理と称している。
上記各ステージの処理において、上記ブロック指定とともに外部パラメータとして、ブロック内における各画素の循環回数を指定するステップ数が与えられ、このステップ数により、上記各ステージのブロック内循環回数(ブロック内巡回シフトの循環回数)が指定される。例えば、各ステージにステップ数[2]が外部パラメータとして与えられると、各ステージにおいて、ブロック内巡回シフトが2巡、繰り返し実施される。
上記図3に示した閾値設定手段に拠る自動閾値算出処理を基に、図4に示した、閾値算出対象となる全画素領域を複数のブロックに分割して分割した各ブロック内で閾値の算出対象となる注目画素を順次シフトするブロック内巡回シフトの循環処理をブロックのサイズを段階的に拡大させながら実施することにより、初段回(第1ステージ)の全画素による閾値の算出によって速やかに入力映像の短期的映像変動に追従した閾値を設定するとともに、以降、段階毎に閾値設定に係る処理負荷を軽減して、パン、チルト、ズームなどにより撮像条件が切り替わった際の環境変動への追従が可能となる。このブロック内巡回シフトの循環処理をブロックのサイズを段階的に拡大させながら実施する処理を、この実施形態では、ステップブロッキング設定処理と称している。
以下、図1乃至図16を参照して本発明の実施形態を説明する。
本発明の実施形態に係る画像処理装置全体の構成を図1に示す。なお、この実施形態では、カメラ(単眼カメラ)から取り込んだ1フレーム(1画面)分の画像データを、単に画像若しくは画面上の画像若しくは一画面分の画像と称している。
本発明の実施形態に係る画像処理装置は、図1に示すように、カメラ11と、キャプチャ部12と、画像処理記憶部13と、画像処理部14と、表示部15とを具備して構成される。
カメラ11は、レンズユニットとレンズユニットの結像位置に設けられた撮像素子(例えばCCD固体撮像素子、若しくはCMOSイメージセンサ)とを具備して、屋外若しくは屋内の動きを伴う被写体(動物体)を対象に、撮像した一画面分の画像を所定の画素単位(例えば1フレーム320×240画素=QVGA)で出力する。
キャプチャ部12は、カメラ11が撮像したフレーム単位の画像を画像処理部14の処理対象画像(入力画像)として取り込み、画像処理記憶部13内の画像バッファに保持する処理機能をもつ。この画像バッファに取り込む画面上の入力画像は、ここでは原画像とするが、エッジ画像であってもよい。
画像処理記憶部13は、キャプチャ部12が取り込んだ入力画像および画像処理部14によって画像処理される途中/結果の各画像を含む各種画像データを記憶する。この画像処理記憶部13には、画像処理部14の制御の下で、キャプチャ部12が取り込んだフレーム単位の画像のうち、今回取り込んだ一画面分の画像(現在画像)と、前回取り込んだ複数画面分の画像(過去画像)をそれぞれ処理対象画像として保持する画像バッファ(リングバッファ)を構成する領域が確保されるとともに、画像処理部14の処理に用いられる画像領域が確保される。ここでは、1フレーム(1画像)を240×320画素(高さ方向の画素数(IMG HEIGHT)×幅方向の画素数(IMG WIDTH))とした30フレーム分の画像バッファ(リングバッファ)領域が確保される。さらに画像処理記憶部13には、画像処理部14の処理に供される各種のパラメータおよび制御データを記憶する記憶領域、確定および未確定オブジェクトの登録、並びに追跡処理に於いて生成若しくは取得される各種情報の記憶領域等も確保される。この画像処理記憶部13における、変化画素を抽出するための閾値の自動設定機能を実現するデータ要素については、図2を参照して後述する。
画像処理部14は、画像処理記憶部13の画像バッファに保持された過去画像と現在画像を差分処理して二値化した差分二値化画像を生成し、この差分二値化画像に含まれるノイズを除去して、このノイズが除去された差分二値化画像から変化画素を含む矩形の領域を抽出し、この抽出した矩形の領域を処理対象に領域を追跡する、一連の画像処理を行う。この画像処理部14は、前処理部141、差分処理部142、二値化処理部143、ノイズ除去フィルタ144、領域化処理部145、領域追跡処理部146等を具備して構成される。
上記した画像処理部14の各構成要素のうち、前処理部141は、画像処理記憶部13の画像バッファに貯えた過去画像と現在画像との比較(変化画素領域を抽出するための差分処理)に際し、キャプチャ部12が取り込んだ一画面分の入力画像に対して予め定められた前処理(平滑化処理、エッジ処理等)を実行する。
差分処理部142は、前処理部141を介した過去画像と現在画像とを画素単位で比較して差分領域を抽出するもので、差分画像を生成する。この差分画像は、画像処理記憶部13に予め確保した領域(差分画像領域)に記憶される。この変化画素の抽出に、本発明の実施形態に係る閾値の自動算出処理機能が適用される。
この閾値の自動算出処理機能を実現する処理手段として、この実施形態では、環境適応型自動閾値算出処理部20Aと、標準偏差設定型自動閾値算出処理部20Bを用意し、そのいずれか一方の自動閾値算出処理部を外部からの指示(設定)により選択的に用いる構成としている。これら環境適応型自動閾値算出処理部20A、および標準偏差設定型自動閾値算出処理部20Bの処理の概要を図3に示している。
標準偏差設定型自動閾値算出処理部20Bによる標準偏差設定型自動閾値算出処理では、図3に示すように、入力した一定期間内の複数の画像を対象に、画素当たりの輝度平均値と標準偏差σを算出し、この標準偏差σを、変化画素を抽出するための、対応する画素(注目画素)の閾値として設定する。この閾値算出処理の詳細は同一出願人により既に出願された特開2008−250892号公報に記載されている。環境適応型自動閾値算出処理部20Aによる環境適応型自動閾値算出処理では、図3に示すように、上記算出した現在の注目画素の標準偏差σと上記一定期間内の最古画像を最も軽く最新画像を最も重く重み付けした上記注目画素の移動平均(加重移動平均)をもとに(3σの加重移動平均)−(3σの標準偏差)の値を算出し、この値を、変化画素を抽出するための、対応する画素(注目画素)の閾値として設定する。この環境適応型自動閾値算出処理部20Aの処理手順については図10乃至図16のフローチャートを参照して後述する。
この各自動閾値算出処理部20A,20Bに対して、ステップブロッキング設定処理部30により、閾値算出対象となる注目画素の抽出処理が実施される。ステップブロッキング設定処理部30は自動閾値算出処理部20A,20Bに対して、図4を用いて動作概要を説明した、ブロック内巡回シフトの循環処理をブロックのサイズを段階的に拡大させながら実施する、ステップブロッキング設定処理を実施する。このステップブロッキング設定処理部30におけるステップブロッキング設定処理については、図5乃至図9を参照して後述する。
二値化処理部143は、差分処理部142で差分処理した画像を二値化処理して、差分二値化画像を生成する。この差分二値化画像は、画像処理記憶部13に予め確保した領域(差分二値化画像領域)に記憶される。この差分二値化画像の作成に、上述した閾値の自動算出処理機能が適用される。
ノイズ除去フィルタ144は、拡散フィルタと収縮フィルタとを有して構成され、上記差分二値化画像から動物体領域の抽出に不要なノイズ(ごま塩状の変化画素)を除去する。このうち拡散フィルタは、上記差分二値化画像の最外周を除く各画素に対して注目画素を順次設定し、設定した注目画素に隣接する斜め方向の画素中(4画素中)に変化画素が存在するとき、その注目画素を変化画素とする拡散フィルタリング処理を行う。また収縮フィルタは、上記拡散フィルタで処理した画像に対して、上記注目画素に隣接する周囲8画素、若しくは4画素をもとに収縮フィルタリング処理を行う。このノイズ除去フィルタ144でノイズ除去したフレーム(画面)毎の差分二値化画像は、画像処理記憶部13の画像領域に記憶される。
領域化処理部145は、上記ノイズ除去フィルタ144でノイズ除去した差分二値化画像を画面上の矩形の領域に領域化する処理を行う。この領域化処理では、差分二値化画像として抽出された変化画素領域を矩形で囲い、画面上からこの矩形の領域を抽出することによって、差分二値化画像を画面上の矩形の領域に領域化する。領域化処理部145は、この矩形の画面上の位置及び大きさを現す左上(x0,y0)および右下(x1,y1)の座標データを、矩形の領域情報として領域追跡処理部146に送出する。
領域追跡処理部146は、領域化処理部145から受けた矩形の領域情報をもとに、矩形の領域を追跡する処理を行う。領域追跡処理部146は、領域化処理部145が矩形の領域を抽出する都度、抽出した矩形の領域を追跡処理対象オブジェクトとして追跡処理する。
表示部15は、上記画像処理部14で画像処理された動物体領域を表示出力する。
画像処理記憶部13には、図2に示すような、変化画素を抽出するための閾値の自動設定機能を実現する構成要素並びにデータ要素が格納される。画像処理記憶部13には、図2に示すように、画像処理部14の制御を司る画像処理プログラム内に、変化画素を抽出するための閾値の自動設定機能を実現する構成要素として、環境適応型自動閾値算出処理部20Aおよび標準偏差設定型自動閾値算出処理部20Bを実現する自動閾値設定処理プログラムが格納される。この自動閾値設定処理プログラムには、図4を参照して動作概要を説明した、閾値の算出対象となる全画素領域を複数のブロックに分割し、分割した各ブロック内で閾値の算出対象となる注目画素を順次シフトするブロック内巡回シフト処理を前記ブロックのサイズを段階的に拡大させながら実施するステップブロッキング設定処理(SB設定処理)プログラムが付随して設けられている。このステップブロッキング設定処理プログラムによる処理手順については、図5乃至図9を参照して後述する。また、自動閾値設定処理プログラムの処理手順については、図10乃至図16を参照して後述する。さらに画像処理記憶部13には、自動閾値設定処理を実現するための情報として、2組の画像バッファ131,132、閾値バッファ133、閾値統計量バッファ134、外部パラメータ設定ファイル135等が格納される。
2組の画像バッファ131,132は、それぞれ、リングバッファにより構成され、カメラ11で撮影した、現在画像を含む、例えば最大30フレーム分の時系列画像を貯える領域を有している。このうち、画像バッファ131には、カメラ11で撮影した30フレーム分の原画像(空間微分画像)が時系列に順次貯えられる。また画像バッファ132には、同じく30フレーム分のエッジ画像(輪郭画像)が時系列に順次貯えられる。
さらに画像バッファ131,132は、上記した画像の他に、画像サイズ、バッファの現在の要素番号、バッファ識別情報等の記憶領域を有している。画像バッファ131は、アクセス時において入力画像バッファポインタ(図示せず)により先頭アドレスが指定される。画像バッファ132は、アクセス時においてエッジ画像バッファポインタ(図示せず)により先頭アドレスが指定される。
閾値バッファ133は、リングバッファにより構成され、上記画像バッファ131(または画像バッファ132)が記憶可能なフレーム数以内の所定数を最大値として、設定された複数枚分の時系列のフレームを閾値演算の処理対象として貯える領域と、取り込んだ画像全体の画素当たりの標準偏差(σ)を閾値として貯える領域とを有して構成される。さらに、取り込んだ画像の輝度値、輝度値の二乗、輝度値二乗の総和、固定閾値、閾値上下限値、バッファの現在の要素番号、画像バッファ識別情報等の記憶領域を有して構成される。閾値バッファ133は、上記画像バッファ131(または画像バッファ132)に貯えられた画像から、設定したフレーム数の画像を取り込み、取り込んだ画像すべての画素(ピクセル)当たりの閾値の算出並びに設定後に、1画像単位で先入先出法による画像の更新(最古の画像を棄て最新の画像を取り込む画像の差し替え処理)、並びに、この画像の更新に伴う、加重移動平均を算出するための重み付けの更新処理等が実施される。
この閾値バッファ133上に展開されたn画像に対する画素当たりの閾値の算出処理概念を図3に示している。ここでは、30フレーム分の画像を貯えるバッファ構成(n=30)を例に示している。
閾値統計量バッファ134は環境適応型自動閾値算出処理に用いられる加重移動平均算出用のバッファであり、図3に示した加重移動平均の演算処理に適用されるもので、画像バッファ(リングバッファ)に貯えられた画像の画素当たりの閾値情報を記憶している。
外部パラメータ設定ファイル135には、差分処理の画像タイプ(例えば、1;原画像(ORIGINAL)、2;エッジ画像(EDGE))、自動閾値を計算するための参照フレーム数(n;図3に示す例は、n=30)、原画像用の最低閾値上下限値、エッジ画像用の最低閾値上下限値等、各種の設定情報が記憶される。なお、この実施形態では、1画面分の画像(1画像)について、動物体の追跡処理を行わない領域を任意の矩形領域で指定可能であり、この指定されたマスク領域についても外部パラメータとしてパラメータ設定ファイル135に記憶される。
上記画像処理記憶部13に格納された、環境適応型自動閾値算出処理部20Aを実現する自動閾値設定処理プログラムの処理手順を図10乃至図16に示している。なお、標準偏差設定型自動閾値算出処理部20Bの処理については、その処理手順の詳細を割愛している。
ここで、上記図4を参照して動作概要を説明したステップブロッキング設定処理(ブロック内巡回シフトの循環処理)について説明する。
上記した各自動閾値算出処理部20A,20Bは、それぞれステップブロッキング設定処理部30によりフレーム当たりの閾値算出量が制御される。
ステップブロッキング設定処理部30は、フレーム内の閾値の算出対象となる全画素領域を複数のブロックに分割し、分割した各ブロック内で閾値の算出対象となる注目画素を順次シフトするブロック内巡回シフト処理機能と、このブロック内巡回シフト処理をブロックのサイズを段階的に拡大させながら実施するステップブロッキング処理機能を実現する。
ステップブロッキング設定処理部30は、ブロックサイズを一定とした、ブロックサイズの段階的ステップ更新を行わないブロック自動算出処理(固定ブロック内シフト処理)モードで実施するか、ブロックサイズを動的に可変する、ブロックサイズの段階的ステップ更新を行うステップブロッキング設定処理モードで実施するかを選択するブロッキングモードの選択機能を有する。
ステップブロッキング設定処理部30は、ステップブロッキング設定処理において、最小画素ブロックから最大画素ブロックに至る複数種の画素ブロックと、上記各画素ブロック内における各画素の循環回数を指定するステップ数とを外部パラメータ(閾値算出処理パラメータ)として、最小画素ブロックから最大画素ブロックに至る各ブロックのブロック内巡回シフトにより自動閾値の算出対象となる注目画素を抽出し、最大画素ブロックのブロック内巡回シフトによる閾値の算出対象画素抽出状態に至るまで、画像の更新に伴い1フレーム当たりの自動閾値の算出対象となる画素数を、各段階(ステージ)毎に漸減してゆく。
このステップブロッキング設定処理の処理手順を図5に示し、図5の処理で実施される注目画素のブロック内巡回シフトの具体例を図6乃至図9に示している。
図5に示す処理の実施に際して、自動閾値の算出対象となる注目画素抽出処理を実施するための外部パラメータが設定される。ここではブロックサイズを動的に可変する(ブロックサイズの段階的ステップ更新を行う)ステップブロッキング設定処理を実施する場合、ステップブロッキング設定処理部30に、外部パラメータとして、最小画素ブロックから最大画素ブロックまで構成画素数が漸増する複数段の画素ブロックのうちの最終段となる最大画素ブロックと、画素ブロック内における各画素の循環回数を指定するステップ数が設定される。また、ブロックサイズを一定(固定)とした(ブロックサイズの段階的ステップ更新を行わない)ブロック自動算出処理(固定ブロック内シフト処理)を実施する場合、ステップブロッキング設定処理部30に、任意のブロックサイズによる一種の画素ブロックと、上記ステップ数を0(Null値)とした外部パラメータが設定される。
画素ブロックとしては、例えば、前述のステージ0で実施したフレーム内の自動閾値算出対象にある全画素を注目画素(自動閾値算出対象画素)とする、最小画素ブロック(1×1画素ブロック)構成の自動閾値ブロッキングタイプ0(m_ThresholdBlockingType=0)、2×2画素ブロック(4画素ブロック)構成の自動閾値ブロッキングタイプ1(m_ThresholdBlockingType=1)、4×2画素ブロック(8画素ブロック)構成の自動閾値ブロッキングタイプ2(m_ThresholdBlockingType=2)、4×3画素ブロック(12画素ブロック)構成の自動閾値ブロッキングタイプ3(m_ThresholdBlockingType=3)、4×4画素ブロック(16画素ブロック)構成の自動閾値ブロッキングタイプ4(m_ThresholdBlockingType=4)、8×4画素ブロック(32画素ブロック)構成の自動閾値ブロッキングタイプ5(m_ThresholdBlockingType=5)、最大画素ブロックとなる8×8画素ブロック(64画素ブロック)構成の自動閾値ブロッキングタイプ6(m_ThresholdBlockingType=6)がそれぞれ定義される。以下、自動閾値ブロッキングタイプを単にブロッキングタイプと呼称する。
ブロッキングタイプ1(m_ThresholdBlockingType=1)の2×2画素ブロック内巡回シフト例(ハッチ部分がサンプリング抽出画素)を図6に示し、ブロッキングタイプ2(m_ThresholdBlockingType=2)の4×2画素ブロック内巡回シフト例(ハッチ部分がサンプリング抽出画素)を図7に示し、ブロッキングタイプ3(m_ThresholdBlockingType=3)の4×3画素ブロック内巡回シフト例(ハッチ部分がサンプリング抽出画素)を図8に示し、ブロッキングタイプ4(m_ThresholdBlockingType=4)の4×4画素ブロック内巡回シフト例(ハッチ部分がサンプリング抽出画素)を図9に示している。なお、ブロッキングタイプ5(m_ThresholdBlockingType=5)およびブロッキングタイプ6(m_ThresholdBlockingType=6)のブロック内巡回シフトについては図6乃至図9から容易に類推できるので図の表記を割愛している。
これらのブロッキングタイプにおけるブロック内の注目画素のシフト処理に係るパラメータとして、ブロッキングタイプ(m_ThresholdBlockingType)別に、Δi(x方向のシフト量;m_ThresholdBlockingShift_x)とΔj(y方向のシフト量;m_ThresholdBlockingShift_y)が外部パラメータ読込み時点で与えられる(画像ループのシフト量として利用する)。さらに、ThresholdBlockingCurNum=m_ThresholdBlockingType×4(ここで示す4は、ブロッキング単位の最小値、THRESHOLD_BLOCKING_UNITとしてDefine.hで定義する)を超えない循環整数を準備し、循環整数に基づき注目画素のシフトを更に与える。
Δx=ThresholdBlockingCurNum % Δi … Δiの剰余
Δy=(int)(ThresholdBlockingCurNum / Δi) …Δiの商
注目画素=p_InputImgData[curNum].image[i]+Δx+(J+Δy)*IMG_HEIGHT
上記注目画素シフト量の算出には、閾値ブロック参照番号(m_ThresholdBlockingCurNum 初期値=0)、注目画素シフト量(offset_x ,offset_y)などのデータが用いられる。
ここで、図5に示すフローチャートを参照してステップブロッキング設定処理部30の処理動作を説明する。
ステップブロッキング設定処理部30は、外部パラメータとして設定されたステップ数が、1以上の自然数であるか、0(またはNull値)であるかを判断し(図5ステップA1)、設定されたステップ数が1以上の値であれば、ステップブロッキング設定処理による自動閾値算出対象画素抽出処理を実施し(図5ステップA2a〜A9,A4〜)、ステップ数が0(またはNull値)であれば、ブロックサイズを一定(固定)としたブロック自動算出処理を実施する(図5ステップA2b〜A8,A4〜)。
例えば、設定されたステップ数の値が2である場合(図5ステップA1 Yes)、処理に用いる現在ブロッキングサイズとして、ブロッキングタイプ0(m_ThresholdBlockingType=0)を設定し(図5ステップA2a)、現在ステップ数を0(=初期値)にして(図5ステップA3)、ブロッキングタイプ0(m_ThresholdBlockingType=0)による全画素を自動閾値の算出対象(注目画素)とした1ステップ分(1巡目)の自動閾値算出処理を実施する(図5ステップA4)。
1ステップ分(1巡目)の自動閾値算出処理が終了すると、現在ステップ数を0から1に更新(現在ステップ数をインクリメント)し(図5ステップA5)、更新した現在ステップ数が設定ステップ数に達しているか否かを判断する(図5ステップA6)。
ここでは、現在ステップ数が設定ステップ数に達していないので(図5ステップA6 No)、現在ステップ数を1から2に更新し(図5ステップA7b)、再び、ブロッキングタイプ0(m_ThresholdBlockingType=0)による全画素を自動閾値算出対象となる注目画素とした1ステップ分(2巡目)の自動閾値算出処理を実施する(図5ステップA4)。
1ステップ分(2巡目)の自動閾値算出処理が終了すると、現在ステップ数を1から2に更新し(図5ステップA5)、更新した現在ステップ数が設定ステップ数に達しているか否かを判定する(図5ステップA6)。
ここでは、現在ステップ数が設定ステップ数に達したので(図5ステップA6 Yes)、現在ステップ数を0に初期化し(図5ステップA7a)、現在ブロッキングサイズが設定ブロッキングサイズより小さいサイズであるか否かを判断する(図5ステップA8)。
例えば、設定された最大ブロッキングサイズがブロッキングタイプ6(m_ThresholdBlockingType=6)(=8×8画素ブロック)であるとすると、ここでは、現在ブロッキングサイズが設定ブロッキングサイズより小さいサイズなので(図5ステップA8 Yes)、現在ブロッキングサイズをブロッキングタイプ0(m_ThresholdBlockingType=0)(1×1画素ブロック=全画素)からブロッキングタイプ1(m_ThresholdBlockingType=1)(=2×2画素ブロック)に拡大し(図5ステップA9)、更新したブロッキングタイプ1(m_ThresholdBlockingType=1)による自動閾値算出処理を実施する(図5ステップA4)。
上記した処理を更新したブロッキングサイズ毎に2巡ずつ繰り返し実施し、現在ブロッキングサイズがブロッキングタイプ6(m_ThresholdBlockingType=6)(=8×8画素ブロック)となって、現在ブロッキングサイズが設定ブロッキングサイズまで拡大すると(図5ステップA8 No)、以降、ブロッキングタイプ6(m_ThresholdBlockingType=6)(=8×8画素ブロック)による自動閾値算出処理を繰り返し実施する(図5ステップA4〜A8,A4〜A8,…)。このようにして、ステップブロッキング設定処理が実施される。
また、設定されたステップ数の値が0である場合(図5ステップA1 No)、外部パラメータとして与えられた、例えばブロッキングタイプ6(m_ThresholdBlockingType=6)(=8×8画素ブロック)を処理に用いる現在ブロッキングサイズとして設定し(図5ステップA2b)、現在ステップ数を0に初期化して(図5ステップA3)、ブロッキングタイプ6(m_ThresholdBlockingType=6)による自動閾値算出処理を実施する(図5ステップA4)。
この自動閾値算出処理が終了すると、現在ステップ数を0から1に更新し(図5ステップA5)、更新した現在ステップ数が設定ステップ数に達しているか否かを判断する(図5ステップA6)。
ここでは、現在ステップ数が設定ステップ数に達しているので(図5ステップA6 Yes)、現在ステップ数を0に初期化し(図5ステップA7a)、現在ブロッキングサイズが設定ブロッキングサイズより小さいサイズであるか否かを判断する(図5ステップA8)。ここではサイズが等しいことから(図5ステップA8 No)、再びブロッキングタイプ6(m_ThresholdBlockingType=6)(=8×8画素ブロック)による自動閾値算出処理を繰り返し実施する(図5ステップA4〜A8,A4〜A8,…)。このようにして、ブロック自動算出処理が実施される。
ここで、上記したステップブロッキング設定処理を実施する環境適応型自動閾値算出処理部20Aの処理手順を図10乃至図16に示すフローチャートを参照して説明する。なお、このフローチャートでは乗算記号を*で表している。
この実施形態は、カメラで撮影した画像を順次入力し、入力した現在画像と過去画像から変化画素を含む領域を抽出する領域抽出処理手段を備えた画像処理装置において、領域抽出処理手段で適用する閾値の設定処理について、標準偏差設定型自動閾値算出処理と、環境適応型自動閾値算出処理とを選択対象に、そのいずれかの閾値算出処理手段を選択可能にしている(図10ステップS1)。
ここで標準偏差設定型自動閾値算出処理が選択(設定)されているときは、標準偏差設定型自動閾値算出処理部20Bにより、注目画素に対して変化画素領域を抽出するための閾値が算出され設定される。この標準偏差設定型自動閾値算出処理部20Bによる標準偏差設定型自動閾値算出処理では、図3に示すように、入力した一定期間内の複数の画像を対象に、画素当たりの輝度平均値と標準偏差σを算出し、この標準偏差σを、変化画素を抽出するための、対応する画素(注目画素)の閾値として設定する(図10ステップS2)。
また、環境適応型自動閾値算出処理が選択(設定)されているときは、環境適応型自動閾値算出処理部20Aにより、注目画素に対して変化画素領域を抽出するための閾値が算出され設定される。この環境適応型自動閾値算出処理部20Aによる環境適応型自動閾値算出処理では、図3に示すように、上記算出した現在の注目画素の標準偏差σと上記一定期間内の最古画像を最も軽く最新画像を最も重く重み付けした上記注目画素の移動平均(加重移動平均)をもとに(3σの加重移動平均)−(3σの標準偏差)の値を算出し、この値を、変化画素を抽出するための、対応する画素(注目画素)の閾値として設定する。
この環境適応型自動閾値算出処理部20Aによる自動閾値算出処理手順を図10ステップS11乃至図16ステップS77に示している。この処理動作は、画像バッファにn枚フレーム分の画像が貯えられていることを前提とする。また、環境適応型自動閾値算出処理部20Aによる自動閾値算出処理に際しては、外部パラメータの設定時において、ブロッキングタイプにおけるブロック内の注目画素のシフト処理に係るパラメータとして、ブロッキングタイプ(m_ThresholdBlockingType)別に、画像ループのシフト量として利用する、ブロック内シフトのための、Δi(x方向のシフト量;m_ThresholdBlockingShift_x)とΔj(y方向のシフト量;m_ThresholdBlockingShift_y)が設定される。
この環境適応型自動閾値算出処理では、先ず、画像要素番号や閾値バッファ要素番号等のメンバ変数を初期化し(図10ステップS11)、画像バッファ131(または132)内の処理対象となる現在の画像要素番号を取得し(図10ステップS12)、閾値バッファ133内の処理対象となる現在の閾値バッファ要素番号を取得した(図10ステップS13)後、差分処理の対象となる画像が、原画像(ORIGINAL)であるかエッジ画像(EDGE)であるかを判断する(図10ステップS14)。
ここで、処理対象画像が「原画像」であると判定したき(図10ステップS14 原画像)、原画像バッファポインタに従い画像バッファ131をアクセスし、外部パラメータで与えられる原画像用の最低閾値上下限値を閾値バッファ133に設定する(図10ステップS15,S16)。また処理対象画像が「エッジ画像」であると判定したき(図10ステップS14 エッジ画像)、エッジ画像バッファポインタに従い画像バッファ132をアクセスし、外部パラメータで与えられるエッジ画像用の最低閾値上下限値を閾値バッファ133に設定する(図10ステップS17、S18)。
さらに、処理対象となる入力画像のうち、処理の対象から外されたマスク領域を除くの各画素(ピクセル)について、処理に用いる現在ブロッキングタイプ(m_ThresholdBlockingType)の注目画素シフト量(offset_x ,offset_y)を算出する(図10ステップS19)。
次に、処理対象となる入力画像のうち、処理の対象から外されたマスク領域を除くの各画素(ピクセル)について、ステップブロッキング設定処理部30で抽出された注目画素を対象に、変化画素を抽出するための閾値の算出処理、次画面の閾値を取得するための各種算出処理を実施する(図11S20〜図13ステップS50,S51)。
ここでは入力された1画面分の画像について各画素を一定の方向に順次走査し(高さ方向のjループ(0〜IMG HEIGHT)と幅方向のkループ(0〜IMG WIDTH)とによる画像サイズ分(240×320画素)のループ処理により各画素を走査し)、処理の対象から外されたマスク領域を除く各画素(ピクセル)について、変化画素を抽出するための閾値の算出処理、次画面の閾値算出のための画像の更新(最古の画像を棄て最新の画像を取り込む画像の差し替え)に伴う加重閾値総和の更新、並びにこの更新に伴う各種値(標準偏差、二乗標準偏差、輝度値、輝度値二乗等)の算出処理等を実施する。
この処理では、現在ブロッキングタイプ(m_ThresholdBlockingType)の注目画素シフト量(offset_x ,offset_y)を用いて現在注目画素番号を算出し、その注目画素がマスク画素であるか否か(予め設定されたマスク領域の画素であるか否か)をチェックする(図11ステップS21,S22)。
ここで、注目画素がマスク画素であるときは、以降の図11ステップS23乃至図13ステップS49の処理をスキップする。また、注目画素がマスク画素でない(自動閾値の算出対象となる注目画素である)場合は、画像バッファの画像要素番号をインクリメント(+1)して(図11ステップS23)、入力画像の輝度値と、輝度値の二乗を算出した結果をそれぞれ所定のバッファ(閾値バッファ133内の輝度値バッファ、輝度値二乗バッファ)に格納する(図11ステップS24)。
次に、注目画素の輝度値二乗の総和を求め、その総和から輝度値二乗の平均値を算出する(図11ステップS25)。同じく、注目画素の輝度値の総和を求め、その総和から輝度値の平均値を算出する(図11ステップS26)。そして、この2つの平均値をもとに、注目画素の標準偏差を求める(図11ステップS27)。
上記注目画素の閾値バッファ番号(画像バッファの画像要素番号)を取得し(図12ステップS28)、既に求めた閾値の加重総和、閾値の総和、閾値2乗の総和を用いて、設定する閾値を算出する(図12ステップS29〜S32)。ここでは、既に算出している閾値2乗総和を利用して、閾値2乗平均値(thresholdSqMean)を算出し(図12ステップS29)、既に算出している閾値総和を利用して、閾値平均値(thresholdMean)を算出し、既に算出している加重閾値総和を利用して、加重閾値平均値(weightThresholdMean)を算出し、この閾値2乗平均値(thresholdSqMean)と閾値平均値(thresholdMean)と加重閾値平均値(weightThresholdMean)とを用いて設定する閾値(tempThreshold)を算出する。
次に算出した設定閾値の最小、最大チェックを行い、適正な値にする(図12ステップS33〜S37)。ここでは算出した閾値が輝度最小値(輝度値0)より小さいとき(Tempthreshold<BRIGHTNESS_MIN)、算出した閾値を輝度最小値に置換し(m_ThreBufSet.threshold[i]=BRIGHTNESS_MIN)、算出した閾値が輝度最大値(輝度値255)より大きいとき(Tempthreshold>BRIGHTNESS_MAX)、算出した閾値を輝度最大値に置換して(m_ThreBufSet.threshold[i]=BRIGHTNESS_MAX)、算出した閾値を輝度値0〜255の範囲内に収めて設定し、それ以外のときは、算出した閾値をそのまま設定する(m_ThreBufSet.threshold[i]=tempThreshold)。
次に、輝度の標準偏差(σ)から3σを求め、次の画像の閾値を算出するための処理を行う。
この処理では、上記標準偏差(σ)を3倍した値(3σ)を現在閾値(calcThreshold)として求め、求めた現在閾値が最大輝度以上の場合は、最大輝度に変更して(図13ステップS41)、求めた現在閾値の2乗を求める(図13ステップS42)。
次に、画像の更新(最古の画像を棄て最新の画像を取り込む画像の差し替え)に伴う処理として、過去加重閾値データの合計から過去閾値合計を減算し、現在閾値に重みを乗じた値を加算して、総和を求め(図13ステップS43)、注目画素の閾値合計を求め、注目画素の閾値の2乗合計を求める(図13ステップS44)。算出した現在閾値をバッファに格納し、算出した現在閾値2乗をバッファに格納して(図13ステップS45)、算出閾値格納先バッファを更新する(図13ステップS46)。
次に、自動閾値を算出した画像サイズ分の標準偏差の総和と二乗標準偏差の総和を求め(図13ステップS47)、既にある総和に対して、バッファに存在する最も古い(現在の要素番号にある)輝度値、輝度値二乗を減算し、図11ステップS2う算出した輝度値、輝度値二乗の値を加算(総和の計算)して(図13ステップS48)、この輝度値、輝度値二乗をバッファへ格納する(図13ステップS49)。
上記した処理が1画面分の画像について実施される(図13ステップS50,S51)。
上記処理の後、自動閾値算出画素が0に達したか否かを調べ、自動閾値算出画素が0より大きい場合は、以下の図14ステップS53乃至図15ステップS71の処理を実行し、自動閾値算出画素が0に達した場合は、図14ステップS53乃至図15ステップS71の処理を実行しない(図14ステップS52)。
自動閾値算出画素が0より大きい場合、自動閾値算出画素分の標準偏差を算出していることから、標準偏差の平均値と二乗標準偏差の平均値を求め、自動閾値算出画素分の標準偏差の標準偏差を求め(図14ステップS53)、ここで求めたデータを用いて、平均値+3σを求め、仮の最低閾値Aとして格納する。(tempLowerLimitByStdev)(図14ステップS54)。さらに、ここで求めた最低閾値が輝度階調内に入っているかをチェックし、入っていない場合は、輝度階調内の値に置換する。すなわち、最低閾値が輝度最小値より小さいときは輝度最小値に置換し、最低閾値が輝度最大値より大きいときは輝度最大値に置換する(図14ステップS55)。標準偏差の平均値に感度を乗じた値を仮の最低閾値Bとして格納する。(tempLowerLimitByMean)(図14ステップS56)。ここで求めた最低閾値が輝度階調内に入っているかをチェックし、入っていない場合は、上記した図14ステップS55と同様に輝度階調内の値(輝度最小値、輝度最大値)に置換する(図14ステップS57)。
上記の最低閾値A、Bを比較し、大きい方を最低閾値(LowerLimit)として採用する(図14ステップS58,S59,S60)。セットした最低閾値が、下限閾値より小さい場合は、下限閾値をセットし、上限閾値より大きい場合は上限閾値をセットする(図15ステップS61〜S64)。
次に画像サイズ分ループし(図15ステップS65〜S71)、当該画素の閾値が最低閾値を下回った閾値設定となっている場合は、最低閾値で置換する(図15ステップS67〜S69)。
その後、閾値ブロック内現在参照番号に1加算し(図16ステップS72)、閾値ブロック内参照番号最大値に達したか否かをチェックして(図16ステップS73)、達している場合は0で初期化し(図16ステップS74)、現在要素番号に1加算し(図16ステップS75)、その要素番号が最大値を超えたか否かをチェックして(図16ステップS76)、超えた場合は0で初期化する(図16ステップS77)。
上記した一連の処理により、単眼カメラで撮影した画像から変化画素を含む矩形の領域を抽出する領域抽出処理機能を有する画像処理装置において、波の揺らぎや波への西日の反射、木の揺れに順応し、揺らぎがない安定した画素での安定的対象物の検知が可能な閾値の自動設定機能を実現できる。これにより、カメラの設置条件、使用条件、撮影条件等の諸条件に対して安定した精度の高い変化画素領域の抽出を可能にした画像処理装置が提供できる。
上述した図5および図10乃至図16に示す処理手順を有する自動閾値設定処理プログラムは、画像処理装置に常駐する形で固定的に組み込まれる構成であってもよいし、プログラム単体で必要に応じて取り扱われる構成であってもよい。
また、上記した実施形態では、ステップブロッキング設定処理(ブロック内巡回シフトの循環処理)に用いる自動閾値ブロッキングタイプ(m_ThresholdBlockingType)を7例、示したが、これに限らず、また、ブロック内巡回シフトの方向、抽出順位なども任意に変更可能である。