以下、本発明の積分画像演算回路が適用された車両用画像検出装置の一実施形態について図1に基づいて説明する。図1は本実施形態の車両用画像検出装置10の構成を示すブロック図である。
車両用画像検出装置10は、例えばビデオカメラ30の撮影画像から歩行者の顔等の検出対象を検出するためのもので、図1に示すように、ビデオ入力部(図中Video Inと記す)11、前処理部12、インテグラルイメージ生成部13、検出器14、ビデオ出力部(図中Video Outと記す)15、CPU16、メモリコントローラ17、ダイレクトメモリアクセスコントローラ(図中DMACと記す)18、通信インターフェイス部(図中通信I/Fと記す)19、およびインターコネクト(図中Interconnectと記す)20から構成されている。
ビデオ入力部11は、ビデオカメラ30から送られる画像データが順次入力されるものである。本実施形態の画像データは、画像を構成する複数の画素のそれぞれに対応するもので、画素毎の輝度を示すデータである。画像は、複数の画素が行列状に配置してなるものである。ビデオカメラ30は、例えば車両前方の景色を順次撮影してこの撮影に応じた画像データを順次出力するものである。前処理部12は、ビデオ入力部11を介してビデオカメラ30から入力される画像データ、或いはインターコネクト20およびメモリコントローラ17を介して外部記憶媒体31から入力される画像データに対して前処理を施すものである。前処理とは、フィルタ処理、画像の拡大縮小、ピラミッド画像の生成などの処理のことである。
外部記憶媒体31は、ハードディスク、DVD-RAM、フラッシュメモリ等からなる記憶媒体であって、ビデオカメラ30により取得された画像データ、前処理後の画像データ、インテグラルイメージ(積分画像)などの各種データを記憶するものである。前処理後の画像データは、前処理部12により前処理が施された画像データである。
インテグラルイメージ生成部13は、後述するように、前処理部12から入力される前処理後の画像データ、或いはインターコネクト20を介して外部記憶媒体31から入力される前処理後の画像データに基づいて、インテグラルイメージ(すなわち、積分画像)を生成する。なお、インテグラルイメージ生成部13の詳細については後述する。
検出器14は、インテグラルイメージ生成部13により生成されたインテグラルイメージ(つまり、積分画像)に基づいて、ビデオカメラ30で撮影された画像が検出対象(例えば人の顔)を含む画像である否かを判定する。検出器14の判定の詳細については後述する。ビデオ出力部15は、検出器14の判定結果等をモニタ33に出力する。モニタ33は、検出器14の判定結果等を車室内に表示する表示ディスプレイである。
CPU16は、前処理部12、インテグラルイメージ生成部13、および検出器14などを制御する。メモリコントローラ17は、外部記憶媒体31から画像データを読み出したり、外部記憶媒体31に画像データに記憶させたりする。ダイレクトメモリアクセスコントローラ18は、メモリコントローラ17を制御する。
通信インターフェイス部19は、車載LAN32を介して他の電子制御装置(図示省略)との間で通信を行うもので、例えば、検出器14の判定結果等を他の電子制御装置に出力する。インターコネクト20は、前処理部12、インテグラルイメージ生成部13、検出器14、ビデオ出力部15、CPU16、メモリコントローラ17、ダイレクトメモリアクセスコントローラ18、および通信インターフェイス部19のうちいずれか2つの装置の間で画像データ、制御信号などを伝送するバスを構成する。
次に、本実施形態のインテグラルイメージ生成部13の構成の詳細について図2、図3、図4を参照して説明する。図2はインテグラルイメージ生成部13の構成の詳細を示す図である。図3、図4において画素の横方向の並びを列とし、画素の縦方向の並びを行とする。
インテグラルイメージ生成部13は、図2に示すように、入力セレクト部40、直立型インテグラルイメージ生成回路41、および回転型インテグラルイメージ生成回路42から構成されている。
入力セレクト部40は、インターコネクト20および前処理部12のうちいずれか一方とインテグラルイメージ生成回路41、42との間を接続する。すなわち、入力セレクト部40は、前処理部12からから入力される前処理後の画像データ、およびインターコネクト20を介して外部記憶媒体31から入力される前処理後の画像データのうちいずれか一方の前処理後の画像データを選択してこの選択された前処理後の画像データを画素毎の輝度値としてインテグラルイメージ生成回路41、42に与える。以下、インテグラルイメージ生成回路41、42に与えられる画素毎の輝度値を入力輝度値という。
直立型インテグラルイメージ生成回路41は、図2に示すように、列和ラインバッファ50、レジスタ51、および演算器52から構成されている。
列和ラインバッファ50は、画像を構成する(M+1)×(N+1)の画素(図3参照)の列に対応する(M+1)個のレジスタから構成される。m列n行の画素が入力画素の場合、列和ラインバッファ50のうちm列に対応するレジスタには、図3に示すように、m列において零行の画素から(n−1)行の画素までの画素毎の入力輝度値の総和R2を記憶値として記憶する。入力画素とは、後述するように、前処理部12(或いはインターコネクト20)から画像データとして入力される輝度値に対応する画素のことである。入力輝度値とは、入力画素の輝度値である。
レジスタ51は、積分値レジスタを構成するもので、後述するように、入力画素と同一行で入力画素よりも1画素分最小列(零列)側の画素に対応する積分値を記憶値R1として記憶する。つまり、レジスタ51は、演算器52により前回算出された積分値を記憶することになる。
演算器52は、算出手段を構成するもので、入力画素の行数をラインカウント値Lとして記憶するためのラインカウンタを有し、このラインカウント値L、列和ラインバッファ50およびレジスタ51にそれぞれ記憶される値、および入力輝度値に応じて、入力輝度値毎に積分値を求める。当該積分値とは、画像の基準位置(すなわち、図3中零列・零行の画素)と入力画素とをそれぞれ対角線上に位置する頂点とする矩形領域内の画素毎の輝度値を加算した値のことである。図3においてm列・n行の画素が入力画素となっている。積分値は、インテグラルイメージ(積分画像)を生成する際に用いられる。当該インテグラルイメージとは、入力画素毎に求められる積分値を入力画素の位置に対応する位置に配列した積分値の集合体である。
回転型インテグラルイメージ生成回路42は、後述するインテグラルイメージを生成するための回路である。ここで、インテグラルイメージ生成回路41、42で生成されるそれぞれのインテグラルイメージを便宜上区別するために、直立型インテグラルイメージ生成回路41で生成されるインテグラルイメージを直立型インテグラルイメージとし、回転型インテグラルイメージ生成回路42で生成されるインテグラルイメージを回転型インテグラルイメージとする。
回転型インテグラルイメージは、入力画素毎に求められる積分値を入力画素の位置に対応する位置に配列した積分値の集合体である。当該積分値は、画像のうち入力画素を頂点とする略三角形領域内の画素毎の輝度値を加算した値である。略三角形領域とは、画像のうち2つの線分に対して零行側(行の最小数側:図4中上側)の所定領域のことである。2つの線分は、頂点(すなわち、入力画素)で90°の角度を形成し、かつ頂点から零行側(図4中上側)に伸びて行方向および列方向に対して45°の角度で交差する線分のことである。
図4では、m列・n行の画素を入力画素としたときに、符号70、71が2つの線分を示している例を示している。なお、図では、複数の画素を便宜上拡大して示しているため、線分70、71が階段状の折れ線で示されているものの、実際の画素は非常に小さいものであるので、線分70、71をそれぞれ直線とみなしている。
ここで、画像のうちある1つの画素を頂点とした略三角形領域内の画素毎の輝度値の合計値を、以下、ある1つの画素に対応する積分値という。例えば、m列n行の画素を頂点とした略三角形領域内の画素毎の輝度値の合計値を、m列n行の画素に対応する積分値という。
以下、回転型インテグラルイメージ生成回路42の具体的な構成について説明する。回転型インテグラルイメージ生成回路42は、図2に示すように、積分値ラインバッファ60、61、輝度値ラインバッファ62、レジスタ63、64、および演算器65から構成されている。
積分値ラインバッファ60は、画像のうち入力画素に対して一画素分零行側(一画素分最小行側)の画素に対応する積分値を列毎に記憶する(M+1)個のレジスタからなる第2の積分値ラインバッファである。
積分値ラインバッファ61は、画像のうち入力画素に対して2行分零行側の(M+1)個の画素のそれぞれに対応する(M+1)個のレジスタからなる第1の積分値ラインバッファである。当該(M+1)個のレジスタは、それぞれ対応する画素に対応する積分値をそれぞれ記憶する。
輝度値ラインバッファ62は、画像のうち入力画素に対して1行分零行側(一画素分最小行側)の画素のそれぞれに対応する(M+1)個のレジスタから構成される。当該(M+1)個のレジスタは、それぞれ対応する画素に対応する入力輝度値をそれぞれ記憶する。
レジスタ63は、後述するように、積分値ラインバッファ60のうち入力画素に対して1画素分最大列側の画素に対応するレジスタに前回記憶された記憶値を記憶する第1のレジスタである。レジスタ64は、レジスタ63に前回記憶された記憶値を記憶する第2のレジスタである。
演算器65は、算出手段を構成するもので、後述するように入力画素の行数をラインカウント値Lとしてカウントするためのラインカウンタを有し、このラインカウント値L、積分値ラインバッファ60、61のそれぞれ記憶された積分値、輝度値ラインバッファ62に記憶された入力輝度値、レジスタ64に記憶された積分値、および入力輝度値に基づいて、入力輝度値毎に積分値を求める。
次に、本実施形態の車両用画像検出装置の作動について図5、図6、図7を参照して説明する。図5は車両用画像検出装置の処理の順序を示すフローチャートである。
まず、ステップS100において、ビデオカメラ30から画像データがビデオ入力部11を介して前処理部12にラスタスキャン順(図3中実線および鎖線の矢印参照)に順次、入力される。本実施形態の画像データは、画像を構成する複数の画素のそれぞれに対応するもので、画素毎の輝度を示すデータである。
次に、ステップS110において、前処理部12がビデオ入力部11を介してビデオカメラ30から入力される画像データに対して前処理を施すとともに、この前処理された画像データを順次インテグラルイメージ生成部13に出力する。
次に、ステップS120において、インテグラルイメージ生成部13のインテグラルイメージ生成回路41、42は、前処理部12から入力される前処理後の画像データ(すなわち、入力輝度値)に基づいて積分値を入力画素毎に算出し、この算出毎に入力画素毎の積分値をインターコネクト20およびメモリコントローラ17を通して外部記憶媒体31に出力する。このことにより、インテグラルイメージ生成回路41、42により算出される画像毎の積分値の集合体としてのインテグラルイメージ(つまり、積分画像)が外部記憶媒体31にそれぞれ記憶されることになる。なお、インテグラルイメージ生成回路41、42の処理の詳細について後述する。
次に、ステップS130において、検出器14が外部記憶媒体31に記憶されるインテグラルイメージに基づいて、Haar特徴量を用いた検出対象(例えば人の顔)の検出処理を実施する。つまり、検出器14は、外部記憶媒体31に記憶されるインテグラルイメージに基づいて、ビデオカメラ30で撮影された画像が検出対象を含む画像である否かを判定する。その後、ステップS140において、このような画像が検出対象を含む画像である否かの判定結果をビデオ出力部15を通してモニタ33に出力する。
例えば、検出器14がビデオカメラ30で撮影された画像が検出対象である人の顔を含む画像であると判定した際、CPU16は、外部記憶媒体31に対して予め前処理後の複数の画像データを記憶しておき、この前処理後の複数の画像データのうち人の顔の部分を他の部分と区別するための画像処理(例えば、顔の部分を枠で囲む画像処理)を実施する。これに伴い、メモリコントローラ17は、当該画像処理を実施後の画像データをインターコネクト20、およびビデオ出力部15を通してモニタ33に出力する。このことにより、当該画像処理が施されたビデオカメラ30の撮影画像がモニタ33に表示されることになる。
次に、本実施形態のインテグラルイメージ生成部13のインテグラルイメージ生成回路41、42の処理について説明する。以下、回転型インテグラルイメージ生成回路42に先だって、直立型インテグラルイメージ生成回路41によるインテグラルイメージの生成処理について図6を参照して説明する。図6は、直立型インテグラルイメージ生成回路41によるインテグラルイメージの生成処理を示すフローチャートである。直立型インテグラルイメージ生成回路41の演算部52は、図6のフローチャートにしたがって、インテグラルイメージの生成処理を実行する。
まず、ステップS200において、列和ラインバッファ50およびレジスタ51を初期化する。具体的には、列和ラインバッファ50を構成する複数のレジスタとレジスタ51とにそれぞれ初期値として零を記憶させる。
次に、ステップS210において、前処理後の画像データとしての入力輝度値が入力されたか否かを判定する。入力輝度値が入力されたときには、ステップS210においてYESと判定する。次のステップS220で、レジスタ51の記憶値R1(図3参照)と、列和ラインバッファ50のうち入力画素の列に対応するレジスタの記憶値R2と、前処理後の画像データとして入力される入力輝度値R3とをそれぞれ加算して加算値を積分値として求める。
例えば、零行・零列の入力画素の入力輝度値が前処理後の画像データとして入力されたときには、当該入力輝度値R3と、列和ラインバッファ50の零列に対応するレジスタの記憶値R2と、レジスタ51の記憶値R1とをそれぞれ加算して加算値(=R1+R2+R3)を積分値として求める。
ここで、列和ラインバッファ50のうち零列に対応するレジスタと、レジスタ51とにはそれぞれ零が記憶されている。このため、当該入力輝度値R3と同一値を積分値として算出するとともに、この算出された積分値をインターコネクト20を介してメモリコントローラ17に出力する。
次に、ステップS230において、列和ラインバッファ50のうち零列に対応するレジスタに対して、そのレジスタに記憶されている初期値に代えて、今回の入力輝度値を記憶させる。なお、ステップS230は、請求項2の第1の更正手段を構成する。
次に、ステップS240において、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に一致するか否かを判定する。
例えば、前処理部12から入力される入力輝度値の個数をカウントしてこのカウントされた画素カウント値KがMに一致するか否かで判定することにより、今回の入力画素の列数xがMに一致するか否かを判定することになる。画素カウント値KがMに一致した場合に画素カウント値Kを零にし、ラインカウント値Lをカウントアップする。ラインカウント値Lは、上述の如く、入力画素の行数を示す値である。ラインカウント値Lは、ステップS240で画素カウント値KがMに一致したと判定する毎に、演算部52によって、インクリメントされるものである。
また、画素カウント値KがM以下である場合でもビデオカメラ30からライン同期信号が入力された場合は画素カウント値Kを零にし、ラインカウント値Lをカウントアップする。ライン同期信号は、1フレーム分の画素毎の輝度値が伝送されてきた後で、次の1フレーム分の画素毎の輝度値が伝送される前に挿入される信号であって、フレームの終了(或いは開始)を示す信号である。
今回のステップS240では、上述の如く、零行・零列の入力画素の入力輝度値が入力されているので、カウント値KがMと一致しない。このため、今回の入力画素の列数xがM(最大列数)に不一致であるとしてステップS240でNOと判定する。
次のステップS250において、レジスタ51に対してそのレジスタ51に記憶されている初期値に代えて今回の算出した積分値を記憶させる。なお、ステップS250は、請求項2の第2の更正手段を構成する。
次のステップS260において、1画像分の積分値(つまり、1フレーム分の積分値)の算出が終了したか否かを判定する。例えば、上記ラインカウント値LがN+1に一致するか否かを判定することにより、1画像分の積分値の算出が終了したか否かを判定することになる。
今回のステップS260では、上記ラインカウント値LがN+1に不一致であるとしてNOと判定して、ステップS210に戻る。
次に、1列・零行の入力画素の入力輝度値が入力されると、ステップS210でYESと判定する。続いて、ステップS220において、今回の入力輝度値R3と、列和ラインバッファ50のうち1列に対応するレジスタの記憶値R2と、レジスタ51の記憶値R1とをそれぞれ加算して加算値を積分値として求める。
ここで、列和ラインバッファ50のうち1行に対応するレジスタには、記憶値としての零が記憶されている。レジスタ51には、前回算出された積分値が記憶されている。このため、今回の入力輝度値とレジスタ51に記憶されている前回の積分値とを加えて今回の積分値(=R1+R2+R3)を算出してこの今回の積分値を前回の積分値に代えてレジスタ51に記憶させる。これに加えて、今回の積分値をインターコネクト20を介してメモリコントローラ17に出力する。
次のステップS230において、列和ラインバッファ50のうち1行に対応するレジスタには、今回の入力輝度値を初期値に代えて記憶させる。
次にステップS240において、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に不一致であるとしてNOと判定する。これに伴い、ステップS250において、今回のステップS220で算出した積分値を前回のステップS220で算出した積分値に代えてレジスタ51に記憶させる。その後、ステップS260において、1画像分の積分値の算出が終了していないとしてNOと判定する。
このように、m(0≦m<M)列・零行の画素の入力輝度値が入力される毎に、今回の入力輝度値R3と、列和ラインバッファ50のうちm列に対応するレジスタの記憶値R2(=初期値)と、レジスタ51の記憶値R1(=前回の積分値)とを加算して今回の積分値(=R1+R2+R3)を求めるとともに、今回の積分値をインターコネクト20を介してメモリコントローラ17に出力する。
これに加えて、ステップS230において、列和ラインバッファ50のうち入力画素の列に対応するレジスタにおいてその前回の記憶値(=初期値)に代えて、
当該前回の記憶値に今回の入力輝度値を加算した値を記憶させる。これに加えて、ステップS250において、今回のステップ220で算出した積分値を前回のステップ220で算出した積分値に代えてレジスタ51に記憶させる。
その後、M列・零行の画素の入力輝度値が入力されると、ステップS210でYESと判定する。次のステップS220において、今回の入力輝度値R3と、列和ラインバッファ50のうちM列に対応するレジスタの記憶値R2(=初期値)と、レジスタ51の記憶値R1とを加算して今回の積分値(=R1+R2+R3)を求めるとともに、今回の積分値をインターコネクト20を介してメモリコントローラ17に出力する。
次に、ステップS230において、列和ラインバッファ50のうちM列に対応するレジスタにおいてその前回の記憶値(=初期値)に代えて、前記前回の記憶値に今回の入力輝度値を加算した値を記憶させる。
次に、ステップS240おいて、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に一致するとしてYESと判定する。これに伴い、ステップS255において、レジスタ51に前回記憶した積分値に代えて零をレジスタ51に記憶させる。なお、ステップS255は、請求項2の第3の更正手段を構成する。
その後、ステップS260において、1画像分の積分値の算出が終了していないとしてNOと判定する。次に、零列・1行の画素の入力輝度値が入力されると、ステップS210でYESと判定する。次のステップS220において、今回の入力輝度値R3と列和ラインバッファ50のうち零列に対応するレジスタの記憶値R2とレジスタ51の記憶値R1とを加算して今回の積分値(=R1+R2+R3)を求める。
ここで、列和ラインバッファ50のうち零列に対応するレジスタにおいて、このレジスタに前回記憶した記憶値に代えて、当該レジスタに前回記憶した記憶値と今回の入力輝度値とを足した値を記憶させる。このため、つまり、零列・零行の画素の入力輝度値と零列・1行の画素の入力輝度値との総和を列和ラインバッファ50のうち零列に対応するレジスタに記憶させることになる。
次のステップS240において、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に不一致であるとしてNOと判定する。これに伴い、ステップS250において、レジスタ51に前回記憶した積分値に代えて、今回のステップS220で算出した積分値をレジスタ51に記憶させる。その後、ステップS260において、1画像分の積分値の算出が終了していないとしてNOと判定する。
その後、画素毎の入力輝度値がラスタスキャン順に順次入力され、入力輝度値が入力される毎に、ステップS210でYESと判定する。m列・n行の画素の入力輝度値が入力された場合には、ステップS220において、今回の入力輝度値と、列和ラインバッファ50のうちm列に対応するレジスタの記憶値とレジスタ51の記憶値とを加えて積分値を求める。これに伴い、今回の積分値をインターコネクト20を介してメモリコントローラ17に出力する。
ここで、列和ラインバッファ50のうちm列に対応するレジスタには、m列において零列の画素から(n−1)行の画素までの画素毎の入力輝度値の総和が前回の記憶値として記憶されている。そこで、ステップS230において、列和ラインバッファ50のうちm列に対応するレジスタにおいて、このレジスタの前回の記憶値に今回の入力輝度値を足した値を記憶させる。このことにより、列和ラインバッファ50のうちm列に対応するレジスタの記憶値を更新することになる。
ここで、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に不一致である場合には、次のステップS240においてNOと判定する。これに伴い、ステップS250において、レジスタ51に前回記憶した積分値に代えて、今回のステップ220で算出した積分値をレジスタ51に記憶させる。
一方、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に一致する場合には、次のステップS240においてYESと判定する。これに伴い、ステップS255において、レジスタ51に前回記憶した積分値に代えて、零をレジスタ51に記憶させる。
このように入力画素の列数xがM(最大列数)に一致するか否かの判定によって、レジスタ51を更新する際にレジスタ51に記憶させる記憶値を変える。次いで、ステップS260において、1画像分の積分値の算出が終了していないとしてNOと判定する。
その後、M列・N行の画素の入力輝度値が入力された場合には、ステップS210でYESと判定する。次のステップS220において、今回の入力輝度値R3と、列和ラインバッファ50のうちM列に対応するレジスタの記憶値R2とレジスタ51の記憶値R1とを加えて今回の積分値(=R1+R2+R3)を求める。これに伴い、今回の積分値をインターコネクト20を介してメモリコントローラ17に出力する。
ここで、列和ラインバッファ50のうちM列に対応するレジスタには、M列において零行の画素から(N−1)行の画素までの画素毎の輝度値の総和が記憶されている。
つまり、列和ラインバッファ50のうち入力画素に対応するレジスタには、入力画素の行において「最小行の画素」から「入力画素より一列分最小行側の画素」までの画素毎の輝度値の総和が前回の記憶値として記憶されている。
そこで、ステップS230では、列和ラインバッファ50のうちM列に対応するレジスタにおいて、その前回の記憶値と今回の入力輝度値とを加算した加算値を記憶させる。
次のステップS240において、今回の入力輝度値に対応する入力画素の列数xがM(最大列数)に一致するとして、YESと判定する。これに伴い、ステップS255において、レジスタ51に前回記憶した積分値に代えて零をレジスタ51に記憶させる。次のステップS260において、ラインカウント値Lが(N+1)に一致して1画像分の積分値の算出が終了したとしてYESと判定する。
また、ラインカウント値Lが(N+1)に一致しない場合においてもフレーム同期信号が入力された場合には画素カウント値K、ラインカウント値Lおよび他のレジスタを初期化する。
このように入力輝度値の入力毎に積分値を算出してこの算出毎に積分値をインターコネクト20を介してメモリコントローラ17に出力する。このとき、メモリコントローラ17は、ダイレクトメモリアクセスコントローラ18により制御されて、入力画素毎の積分値を外部記憶媒体31のうち入力画素の位置に対応するメモリアドレスに配列する。入力画素の位置とは、画像のうち入力画素が占める位置(つまり、m列・n行)のことである。このことにより、外部記憶媒体31において、入力画素毎の積分値の集合体が直立型インテグラルイメージとして記憶されることになる。
次に、本実施形態の回転型インテグラルイメージ生成回路42の処理について図7を参照して説明する。図7は回転型インテグラルイメージ生成回路42による積分値算出処理を示すフローチャートである。回転型インテグラルイメージ生成回路42の演算部65は、図7に示すフローチャートにしたがって、積分値算出処理を実行する。
まず、ステップS300において、積分値ラインバッファ60、61、輝度値ラインバッファ62、およびレジスタ63、64を初期化する。具体的には、ラインバッファ60、61、62をそれぞれ構成する複数のレジスタおよびレジスタ63、64に初期値としての零をそれぞれ記憶させる。
次のステップS310において、前処理後の画像データとしての入力輝度値が入力されたか否かを判定する。今回の入力輝度値が入力されたときには、ステップS310においてYESと判定する。これに伴い、次のステップS315、S320、S325、S327、S330において、次の数式1によって積分値Sを算出する。
S=K1+K2−K3+K4+K5・・・・・・(数式1)
ここで、入力画素がm列n行の画素(図4参照)であるとして、数式1中の符号K1〜K5について説明する。
数式1中の符号K1はレジスタ64の記憶値を示すもので、前回レジスタ63に記憶した記憶値である。つまり、レジスタ64には、(m−1)列・(n−1)行の画素を頂点とする略三角形領域内の画素毎の輝度値の積分値Sが記憶されている。
符号K2は、(m+1)列・(n−1)行の画素を頂点とする略三角形領域内の輝度値の積分値Sである。つまり、符号K2は、積分値ラインバッファ60のうちm列n行の入力画素より1画素分最大列数M側の列に対応するレジスタの記憶値である。
符号K3は、m列・(n−2)行の画素を頂点とする略三角形領域内の画素毎の輝度値の積分値Sである。つまり、符号K3は、積分値ラインバッファ61のうちm列n行の入力画素の列に対応するレジスタの記憶値である。
符号K4は輝度値ラインバッファ62のうちm列n行の入力画素の列に対応する画素の入力輝度値を示している。符号K5は、今回の入力輝度値を示している。
ここで、符号K1に係る略三角形領域と符号K2に係る略三角形領域との間では、符号K3に係る略三角形領域が共通の領域となっている。このため、数式1では、積分値Sを算出する際に、K1とK2とK4とK5とを加算すると、符号K3の積分値S分だけ余分になる。このため、(K1+K2+K4+K5)からK3を引いて補正することにより積分値Sを算出することになる。
以下、積分値Sの算出処理の詳細について説明すると、まず、ステップS315で、今回の入力輝度値に対応する入力画素の列数xが零であるか否かを判定する。
例えば、零列・零行の入力画素の入力輝度値が前処理後の画像データとして入力されたときには、入力画素の列数xが零であるとしてステップS315でYESと判定する。この場合、符号K1は、(−1)列・(−1)行の入力画素に対応する積分値になる。このため、符号K1の積分値Sと符号K3の積分値Sとは、積分値Sの算出に際して必要がない。
そこで、ステップS320、S330では、数式1において符号K1、K3の項を消すために、K1をK3として使用して数式1によって積分値Sを算出する。
つまり、ステップS320、S330では、K1=K3として、数式1によって積分値Sを算出する。このため、(K2+K4+K5)を積分値Sとして算出することができる。
ここで、ラインバッファ60、62の各レジスタには、それぞれ初期値としての零が記憶されている。このため、K2とK4をそれぞれ零とする。
このように積分値Sを算出すると、この積分値Sをインターコネクト20を介してメモリコントローラ17に出力する。
次のステップS340において、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値をそれぞれ更新する。なお、ステップS340は、請求項4の第1〜第5の更正手段を構成する。
具体的には、レジスタ64に前回記憶した記憶値に代えてレジスタ63の記憶値をレジスタ64に記憶させる。
積分値ラインバッファ60のうち入力画素より1画素分最大列数側の行に対応するレジスタの記憶値(=K2)を、レジスタ63に前回記憶した記憶値に代えて、レジスタ63に記憶させる。
積分値ラインバッファ61のうち入力画素の列に対応するレジスタに対して、そのレジスタに前回記憶した記憶値に代えて、積分値ラインバッファ60のうち入力画素の列に対応するレジスタの記憶値を記憶させる。
積分値ラインバッファ60のうち今回の入力画素の列に対応するレジスタに対して、そのレジスタに前回記憶した記憶値に代えて、今回の積分値Sを記憶させる。
輝度値ラインバッファ62のうち今回の入力画素の列に対応するレジスタに対して、そのレジスタに前回記憶した記憶値に代えて、今回の入力輝度値を記憶させる。
次のステップS350において、1画像分の積分値の算出が終了したか否かを判定する。例えば、ラインカウント値Lが(N+1)に一致するか否かを判定することにより、1画像分の積分値の算出が終了したか否かを判定することになる。
ラインカウント値Lは、上述の如く、入力画素の行数を示す値である。ラインカウント値Lは、後述するように、ステップS325において、入力画素の列数xが最大列数Mに一致するとしてYESと判定する毎にインクリメントされる。
今回のステップS350では、ラインカウント値Lが(N+1)に不一致であるとしてNOと判定して、ステップS310に戻る。
次に、1列・零行の入力画素の入力輝度値が入力されると、ステップS310でYESと判定する。次のステップS315で、今回の入力画素の列数xが零ではないとしてNOと判定する。次にステップS325において、今回の入力画素の列数xが最大列数Mに一致するか否かを判定する。今回の入力画素の列数xが最大列数Mに不一致であるとしてNOと判定する。この場合、次のステップS330に進んで、上記数式1によって積分値Sを算出する。次にステップS340に進んで、上述の同様に、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値をそれぞれ更新する。その後、ステップS350において、1画像分の積分値の算出が終了していないとしてNOと判定して、ステップS310に戻る。
その後、m(0<m<M)列・零行の入力画素の入力輝度値が入力されると、入力輝度値の入力毎に、ステップS310でYESと判定し、次のステップS315でNOと判定してステップS325でNOと判定する。その後、ステップS330において、数式1にK1、K2、K3、K4、K5のそれぞれを代入して積分値Sを算出し、この積分値Sをインターコネクト20を介してメモリコントローラ17に出力する。次に、ステップS340に進んで、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値をそれぞれ更新する。その後、ステップS350においてNOと判定して、ステップS310に戻る。
次に、M列・零行の入力画素の入力輝度値が入力されると、ステップS310でYESと判定し、次のステップS315において、今回の入力画素の列数xが最小列数(零)に一致するか否かを判定する。このとき、今回の入力画素の列数xが最小列数零に不一致であるとしてNOと判定して、次のステップS325において、今回の入力画素の列数xが最大列数Mに一致するとしてYESと判定する。これに伴い、ラインカウント値Lをインクリメントする。
この場合、符号K2は、(M+1)列・−1行の入力画素に対応する積分値になる。このため、符号K2の積分値Sと符号K3の積分値Sとは、積分値Sの算出に際して必要がなくなる。
そこで、ステップS327、S330では、上記数式1において符号K2、K3の項を消すために、K2をK3として使用して上記数式1によって積分値Sを算出する。つまり、ステップS327、S330では、K2=K3として、上記数式1によって積分値Sを算出する。このため、(K1+K4+K5)を積分値Sとして算出することになる。この積分値Sをインターコネクト20を介してメモリコントローラ17に出力する。次のステップS340において、上述と同様に、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値をそれぞれ更新し、次のステップS350でNOと判定する。
その後、入力画素の入力輝度値が入力される毎に、ステップS310でYESと判定する。入力画素の列数xが最小列数(零)に一致するとステップS315でYESと判定して、次のステップS320、S330において、K1=K3として数式1によって積分値Sを算出する。
一方、入力画素の列数xが最小列数より大きく、かつ最大列数Mより小さい場合には(0<x<M)、ステップS315、S325でNOと判定して、数式1にK1、K2、K3、K4、K5のそれぞれを代入して積分値Sを算出する。
入力画素の列数xが最大列数Mに一致する場合には、ステップS315でNOと判定し、ステップS325でYESと判定してラインカウント値Lをインクリメントする。次のステップS327、S330で、K2=K3として数式1によって積分値Sを算出する。
このように積分値Sを算出すると、この積分値Sをインターコネクト20を介してメモリコントローラ17に出力する。次のステップS340において、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値をそれぞれ更新し、次のステップS350でNOと判定する。
次に、M列・N行の入力画素の入力輝度値が入力されると、ステップS315でNOと判定し、ステップS325でYESと判定し、次のステップS327、S330では、K2=K3として、数式1によって積分値Sを算出し、この積分値Sをインターコネクト20を介してメモリコントローラ17に出力する。次のステップS340において、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値をそれぞれ更新した後、ステップS350において、ラインカウント値Lが(N+1)に一致して1画像分の積分値の算出が終了したとしてYESと判定して、積分値算出処理の実行を終了する。
このように入力輝度値の入力毎に積分値を算出してこの算出毎に積分値をインターコネクト20を介してメモリコントローラ17に出力する。このとき、メモリコントローラ17は、ダイレクトメモリアクセスコントローラ18により制御されて、入力画素毎の積分値Sを外部記憶媒体31のうち入力画素の位置に対応するメモリアドレスに配列する。このことにより、外部記憶媒体31において、入力画素毎の積分値の集合体が回転型インテグラルイメージ(すなわち、45°インテグラルイメージ)として記憶されることになる。このように外部記憶媒体31において、回転型インテグラルイメージが直立型回転型インテグラルイメージとともに記憶されることになる。
次に、検出器14における図5のステップ130の検出処理について図8〜図11を参照して説明する。図8は検出器14による検出処理の概略を示す模式図である。
検出器14は、予め記憶した辞書(図9参照)を用いて、ビデオカメラ30で撮影された画像が検出対象を含む画像である否かを判定する。辞書は、図9に示すように、複数の矩形領域を組み合わせて人の顔を構成した四角形の画像データである。
図9は、辞書を拡大表示したものである。図9(a)〜(f)は、複数の矩形領域のうち検出器14の検出処理で用いられる判定対象の具体例を示すものである。判定対象は、2つの矩形領域、或いは3つの矩形領域から構成されて、眉毛、目、鼻、頬などの顔の特徴を表している。
図9(a)、(c)、(d)、(f)は2つの直立型の矩形領域A、Bを組み合わせたものである。図9(b)は、2つの回転型の矩形領域A、Bを組み合わせたものである。図9(e)は3つの直立型の矩形領域A1、B、A2を組み合わせたものである。
ここで、直立型の矩形領域とは、矩形領域を構成する4つの辺がそれぞれ画素の列方向(紙面縦方向)に直交、或いは平行になるように構成されているものである。回転型の矩形領域とは、矩形領域を構成する4つの辺がそれぞれ画素の列方向(或いは行方向)に45°で交差するように構成されているものである。
具体的には、検出器14は、直立型インテグラルイメージのうち辞書(つまり、人の顔)に対応する部分を候補画像80として抽出するとともに、回転型インテグラルイメージのうち辞書に対応する部分を候補画像81として抽出する。
次に、図9(a)〜(e)のそれぞれ判定対象について判定処理を判定対象毎に実施する。
(1) 図9(a)、(c)、(d)、(f)に示すように、判定対象が直立型の矩形領域A、Bから構成されている場合には、候補画像80(すなわち、回転型インテグラルイメージの一部)のうち矩形領域A、Bに対応する領域の積分値をそれぞれ算出する。
図10において候補画像80と矩形領域Aとの位置関係を示す。候補画像80において、基準点81と矩形領域Aの頂点82とを対角線上の頂点(すなわち、互いに対角となる頂点)とする矩形領域80aは、矩形領域X1、X2、X3および矩形領域Aから構成されることになる。そこで、候補画像80のうち矩形領域Aに対応する領域の積分値をSaとし、候補画像80のうち矩形領域80aに対応する領域の積分値をS4とし、候補画像80のうち矩形領域X1、X2、X3に対応する領域の積分値をS1、S2、S3としたとき、積分値S4から矩形領域X1、X2、X3の積分値S1、S2、S3とをそれぞれ引いて積分値Sa(=S4−S1−S2−S3)を求める。同様に、候補画像80のうち矩形領域B(図示省略)に対応する領域の積分値Sbを算出する。
これに加えて、積分値Saと積分値Sbとの差分としてのHaar特徴量dS(=Sa−Sb)を求め、このHaar特徴量dSが所定値以上であるか否かを判定対象毎に判定することにより、判定対象毎の重み付けを決定する。
Haar特徴量dSが所定値以上であるとしてYESと判定したときには、第1の値を重み付けとして決定し、差分dSが所定値未満であるとしてNOと判定したときには、第2の値を重み付けとして決定する。第1の値および第2の値は、判定対象毎に決められている。
(2) 図9(e)に示すように、判定対象が直立型の矩形領域A1、A2、Bから構成されている場合には、候補画像80のうち矩形領域A1、A2、Bのそれぞれに対応した領域の積分値Sa1、Sa2、Sbを算出する。積分値Sa1は、候補画像80のうち矩形領域A1に対応した領域の積分値である。積分値Sa2は、候補画像80のうち矩形領域A2に対応した領域の積分値である。積分値Sbは、候補画像80のうち矩形領域Bに対応した領域の積分値である。
これに加えて、積分値Sa1と積分値Sa2とを加算した加算値KS(=Sa1+Sa2)を求め、この加算値KSと積分値Sbとの差分としてのHaar特徴量dS(=KS−Sb)が所定値以上であるか否かを判定することにより、上記(1)と同様、判定対象毎の重み付けを決定する。
(3) 図9(b)に示すように、判定対象が回転型の矩形領域A、Bから構成されている場合には、候補画像80のうち矩形領域A、Bのそれぞれに対応した領域の積分値Sa、Sbを算出する。
図11において候補画像81と矩形領域Aとの位置関係を示す。候補画像81において、頂点83にて90度の角度を形成して底辺84が候補画像81の零行側(図示上側)の縁部からなる直角二等辺三角形領域80bは、直角二等辺三角形領域X1、X2、X3および矩形領域Aから構成される。
直角二等辺三角形領域X1は、頂点86にて90度の角度を形成して底辺が候補画像81の零行側の縁部からなる領域である。直角二等辺三角形領域X2は、頂点84にて90度の角度を形成して底辺が候補画像81の零行側の縁部からなる領域である。直角二等辺三角形領域X3は、頂点85にて90度の角度を形成して底辺が候補画像81の零行側の縁部からなる領域である。矩形領域Aは、頂点83、84、85、86を有する領域である。
候補画像81のうち直角二等辺三角形領域80bに対応する領域の積分値をS4とする。候補画像81のうち矩形領域Aに対応する領域の積分値をSaとする。候補画像81のうち直角二等辺三角形領域X1に対応する領域の積分値をS1とする。候補画像81のうち直角二等辺三角形領域X2に対応する領域の積分値をS2とする。候補画像81のうち直角二等辺三角形領域X3に対応する領域の積分値をS3とする。
そこで、積分値S4から積分値S2、S3をそれぞれ引いた値(=S4−S2−S3)に対して積分値S1を加算した加算値(=S4−S2−S3+S1)としての積分値Saを求めることになる。同様に、候補画像81のうち矩形領域B(図示省略)に対応する領域の積分値Sbを算出する。積分値Saと積分値Sbとの差分としてのHaar特徴量dS(=Sa−Sb)を求め、このHaar特徴量dSが所定値以上であるか否かを判定対象毎に判定することにより、判定対象毎の重み付けを決定する。
以上のように、判定対象毎に候補画像80、81のうちいずれか一方を用いてHaar特徴量を算出し、このHaar特徴量と所定値とを比較判定して、この判定結果に応じて重み付けを判定対象毎に決める。図8(a)〜(f)は判定対象毎に重み付けを決めた例を示している。図8(a)はYES判定により重み付けとしての「0.7」を決める。図8(b)はNO判定により重み付けとしての「0.2」を決める。図8(c)はYES判定により重み付けとしての「0.6」を決める。図8(d)はNO判定により重み付けとしての「0.9」を決める。図8(e)はYES判定により重み付けとしての「0.5」を決める。図8(f)はNO判定により重み付けとしての「0.8」を決める。
このように判定対象毎に重み付けを決定し、この決定した判定対象毎の重み付けの総和が閾値Thより大きいか否かを判定することにより、ビデオカメラ30で撮影された画像が検出対象としての顔画像を含む画像である否かを判定する。
判定対象毎の重み付けの総和が閾値Thより大きいときには、ビデオカメラ30で撮影された画像が検出対象としての顔画像を含む画像であると判定し、判定対象毎の重み付けの総和が閾値Th以下であるときには、ビデオカメラ30で撮影された画像が検出対象としての顔画像を含む画像ではないと判定する。
以上説明した本実施形態によれば、直立型インテグラルイメージ生成回路41は、画像を構成する画素の列毎に設けられて複数の画素のうち入力画素の列において零行の画素から「入力画素よりも1画素分零行側の画素」までの画素毎の輝度値の総和を記憶値R2として列毎に記憶する複数のレジスタを有する列和ラインバッファ50と、演算器52により前回算出された積分値R1を記憶するレジスタ51とを備え、演算器52は、輝度値の入力毎に、今回の入力輝度値R3と列和ラインバッファ50のうち今回の入力画素の列に対応するレジスタの記憶値R2とレジスタ51の記憶値R1とを加算して積分値を算出する。
ここで、演算器52は、列和ラインバッファ50のうち今回の入力画素の列に対応するレジスタにおいて当該レジスタに前回記憶された記憶値と今回の入力画素の輝度値R3とを加算した値を、当該レジスタに前回記憶された記憶値に代えて記憶させることにより、列和ラインバッファ50の記憶値を更新する。演算器52は、入力画素の列数が最大列数(M)よりも小さい場合には、レジスタ51に対して、当該レジスタ51に前回記憶した記憶値に代えて、今回の積分値を記憶させることにより、レジスタ51の記憶値を更新する。演算器52は、入力画素の列数が最大列数(M)と同一である場合には、レジスタ51に対して、レジスタ51に前回記憶された記憶値に代えて、零を記憶させることにより、レジスタ51の記憶値を更新する。
このように演算器52が入力輝度値の入力毎に、列和ラインバッファ50の記憶値とレジスタ51の記憶値とをそれぞれ更新する。このため、演算器52は、今回の入力輝度値R3と列和ラインバッファ50のうち今回の入力画素の列に対応するレジスタの記憶値R2とレジスタ51の記憶値R1とを用いて、輝度値の入力毎に、積分値を算出することができる。
一方、回転型インテグラルイメージ生成回路42は、画素の列毎に設けられて今回の入力画素に対して2画素分零行側の画素を1つの頂点とする略三角形領域内の画素毎の輝度値の積分値K3を記憶する積分値ラインバッファ61と、画素の列毎に設けられて今回の入力画素に対して1画素分零行側の画素を頂点とする略三角形領域内の画素毎の輝度値の積分値K2を列毎に記憶する複数のレジスタを有する積分値ラインバッファ60と、積分値ラインバッファ60に前回記憶した積分値を記憶するレジスタ63と、レジスタ63に前回記憶した積分値を記憶するレジスタ64と、画素の列毎に設けられて今回の入力画素に対して1画素分零行側の画素の輝度値K4を列毎に記憶する複数のレジスタを有する輝度値ラインバッファ62とを備える。演算器65は、入力輝度値の入力毎に、レジスタ64の記憶値K1と、積分値ラインバッファ60のうち入力画素より1画素分最大列側の列に対応するレジスタの記憶値K2と、輝度値ラインバッファ62のうち入力画素の列に対応するレジスタの記憶値K4と、今回の入力輝度値K5とを加算した加算値(K1+K2+K4+K5)から、積分値ラインバッファ61のうち入力画素の列に対応するレジスタの記憶値K3を引くことにより積分値Sを求める。
ここで、演算器65は、(1)〜(5)ように、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値を更新する。(1)積分値ラインバッファ60のうち今回の入力画素の列に対応するレジスタの記憶値を、積分値ラインバッファ61のうち今回の入力画素の列に対応するレジスタに対して、そのレジスタに前回記憶した記憶値に代えて、記憶させる。(2)今回算出した積分値Sを、積分値ラインバッファ60のうち今回の入力画素の列に対応するレジスタに対して、そのレジスタに前回記憶した記憶値に代えて、記憶させる。(3)レジスタ63の記憶値を、レジスタ64に対して、そのレジスタ64に前回記憶した記憶値に代えて、記憶させる。(4)積分値ラインバッファ60のうち今回の入力画素に対して1画素分最大列数側の列に対応するレジスタの記憶値を、レジスタ63に対して、そのレジスタ63に前回記憶した記憶値に代えて、記憶させる。(5)輝度値ラインバッファ62のうち今回の入力画素の列に対応するレジスタに対して、そのレジスタに前回記憶した記憶値に代えて、今回の入力画素の輝度値(K5)を記憶させる。
このように演算器65は、入力輝度値の入力毎に、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値を更新する。このため、演算器65は、入力輝度値の入力毎に、ラインバッファ60、61、62の記憶値およびレジスタ63、64の記憶値を用いて積分値Sを算出することができる。
このようにインテグラルイメージ生成回路41、42では、前処理部12から入力輝度値が入力される毎に積分値を求めることができる。
ここで、従来、ビデオカメラ30から一画面分(1フレーム分)の画像データを取り込んで、外部記憶媒体31に記憶し、この記憶された画像データに対して、前処理、インテグラルイメージ生成、および検出処理を時分割で実施していた(図12参照)。このため、ビデオカメラから画像データを取り込んでからインテグラルイメージ生成を終えるまでに例えば数十msecの遅延時間(レイテンシ)が生じることになる。ここで、通常のビデオカメラのフレームレートが30fps(frame per second)で、1フレーム単位の表示時間が約33msであることを考慮すると、数十msecの遅延時間が非常に長く無視できる時間ではないと思料する。
これに対して、本実施形態によれば、直立型インテグラルイメージ生成回路41では、演算部52が前処理部12から入力輝度値が入力される毎に積分値を求めることができる。これに加えて、回転型インテグラルイメージ生成回路42では、演算部65が前処理部12から入力輝度値が入力される毎に積分値をそれぞれ求めることができる。このため、前処理、および積分値の算出を並列的に行うことができる。これに伴い、前処理、およびインテグラルイメージ生成を並列的に実施できる(図13参照)。このため、上述のように、前処理、およびインテグラルイメージ生成を時分割で実施する場合に比べて、遅延時間(レイテンシ)を縮小してスループットを改善することができる。
本実施形態の回転型インテグラルイメージ生成回路42の演算部65は、画像を構成する全ての画素に亘って画素毎に上記数式1を用いて積分値Sを算出する。このため、演算部65は、簡素な処理で積分値Sを算出することができる。
さらに、本実施形態では、演算器52、65が1画像分の複数の積分値の算出の終了後ではなく、検出器14における判定対象毎の重み付けの算出に必要な積分値の算出が終了次第、検出器14における判定対象毎の重み付けの算出を開始することにより、演算器52、65の積分値の算出と検出器14の検出処理とを並列的に行うことができる。このため、ビデオカメラ30から画素毎の画像データを取り込んでから検出器14の検出処理の終了までに生じる遅延時間を短くすることができる。
(他の実施形態)
上記実施形態では、人の顔を識別するための辞書(図9参照)のうち検出器14の検出処理で用いる判定対象として図9(a)〜(f)の判定対象を示したが、これに限らず、検出器14の検出処理において判定対象として図14(a)〜(e)の判定対象を用いてもよい。
図14(a)の判定対象は3つの直立型の矩形領域A、B、Aを列方向(縦方向)に並べたものである。図14(b)の判定対象は直立型の矩形領域Aの内側に直立型の矩形領域Bを配置したものである。図14(c)の判定対象は回転型の矩形領域Aの内側に回転型の矩形領域Bを配置したものである。図14(d)、(e)は3つの直立型の矩形領域を列方向に対して45°で交差する方向に並べたものである。
上記実施形態では、ビデオカメラ30の撮影画像が顔を含む画像であると判定したときには、この判定結果を用いて撮影画像を加工してモニタ33に表示した例をしましたが、これに代えて、次のようにしてもよい。例えば、ビデオカメラ30により車両前方を撮影してその撮影画像から人の顔画像を識別しされた場合には、当該車両のブレーキなどの制御を実施して安全を図るようにしてもよい。
上記実施形態では、演算器52、65が他の装置としての前処理部12からの画像データに基づいて積分値を算出する例を示したが、これに代えて、演算器52、65が他の装置としての外部記憶媒体31からの画像データに基づいて積分値を算出するようにしてもよい。この場合、外部記憶媒体31に画素毎の画像データを予め記憶しておく必要がある。
上記実施形態では、本発明に係る積分値演算回路を車両用画像検出装置に適用した例を示したが、これに限らず、車両用画像検出装置以外の装置に本発明に係る積分値演算回路を適用してもよい。