(57)【特許請求の範囲】
【請求項１】
画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、
ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、
を含み、
前記ラベル付与ステップは、
（ａ）ラベル付け始点画素をライン始点とするステップと、
（ｂ）ライン始点を最初の対象画素とし、対象画素を右及び左のうち所定の一方向に順次１画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素をスタックに追加するステップと、
（ｃ）ステップ（ｂ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、ラベル付け始点画素から前記ステップ（ｂ）とは逆方向に順次対象画素を１画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加するステップと、
（ｄ）ステップ（ｃ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ（ｂ）及び（ｃ）を実行するステップと、
（ｅ）前記スタックから画素がなくなるまで上記ステップ（ｄ）を繰り返すステップと、
を含み、画像の全画素について走査が終わるまで前記始点検出ステップ及びラベル付与ステップを繰り返す画像処理方法。
【請求項２】
画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、
ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、
を含み、
前記ラベル付与ステップは、
（ａ）ラベル付け始点画素をライン始点とするステップと、
（ｂ）ライン始点を最初の対象画素とし、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、対象画素を右及び左のうち所定の一方向に順次１画素ずつ移動させながらその都度対象画素及びその上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合はその隣接画素をスタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップと、
（ｃ）ステップ（ｂ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、ラベル付け始点画素から前記ステップ（ｂ）とは逆方向に順次対象画素を１画素ずつ移動させその都度対象画素その上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップと、
（ｄ）ステップ（ｃ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ（ｂ）及び（ｃ）を実行するステップと、
（ｅ）前記スタックから画素がなくなるまで上記ステップ（ｄ）を繰り返すステップと、
を含み、画像の全画素について走査が終わるまで前記始点検出ステップ及びラベル付与ステップを繰り返す画像処理方法。
【請求項３】
前記ステップ（ｂ）及び（ｃ）では、
対象画素の上の隣接画素を前記スタックに追加するとセットされ、対象画素の上の隣接画素が前記ラベル条件を満足しなくなるとリセットされるフラグと、
対象画素の下の隣接画素を前記スタックに追加するとセットされ、対象画素の下の隣接画素が前記ラベル条件を満足しなるとリセットされるフラグと、
を用い、対象画素の上下の隣接画素のスタックへの追加は、各々対応するフラグがリセットされている場合のみに行うことを特徴とする請求項１又は請求項２に記載の画像処理方法。
【請求項４】
前記ステップ（ｂ）及び（ｃ）で対象画素にラベルを付与する際に面積カウンタをカウントアップし、前記ステップ（ｅ）で前記スタックから画素がなくなった時点での前記面積カウンタのカウント値を、前記ラベル付け始点画素に連結性を有する画素群の面積として出力することを特徴とする請求項３記載の画像処理方法。
【請求項５】
前記ステップ（ｂ）及び（ｃ）で対象画素にラベルを付与する際にその対象画素のｘ，ｙ座標をそれぞれｘカウンタ及びｙカウンタに加え、前記ステップ（ｅ）で前記スタックから画素がなくなった時点での前記ｘカウンタ及びｙカウンタのカウント値をそれぞれ前記面積カウンタのカウント値で除することにより、前記ラベル付け始点画素に連結性を有する画素群の重心位置を算出して出力することを特徴とする請求項４記載の画像処理方法。
【請求項６】
前記ステップ（ｄ）で前記スタックから取り出した画素が前記ステップ（ｂ）で前記ラベル条件を満足しないと判断された回数をカウントするカウンタを有し、前記ステップ（ｅ）で前記スタックから画素がなくなった時点でのこのカウンタのカウント値を、前記ラベル付け始点画素に連結性を有する画素領域に含まれる穴の数として出力することを特徴とする請求項３から請求項５のいずれかに記載の画像処理方法。
【請求項７】
画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、
ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、
を含み、
前記ラベル付与ステップは、
ラベル付け始点画素をライン始点とする開始ステップと、
前記ライン始点を含むライン上の画素を１画素ずつ走査し、前記ライン始点に対して連結性を有し前記ラベル条件を満足する画素を見つける毎に前記ラベルを付与すると共に、その走査ラインの上下の隣接ラインにおいて、その走査ラインの画素に対して前記ラベル条件を満足する画素を連結候補画素として所定の記憶手段に記憶するライン走査ステップと、
前記ライン走査ステップにおいて前記走査ライン上でのラベル付け処理が完了すると、前記記憶手段から連結候補画素を１つ取り出し、これを新たなライン始点として前記ライン走査ステップを反復する走査反復ステップと、
を含む画像処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は画像処理方法に関し、特に画像のラベリング処理に関する。
【０００２】
【従来の技術】
画像処理の重要な分野として、画像に基づく対象物認識がある。画像からの対象物認識では、画像から所望の対象物の部分を切り出し、この対象物部分の画像としての特徴量を求め、この特徴量から認識を行う。この画像からの対象部分の切出しには、一般に画像の２値化及びラベリングの技術が利用されることが多い。
【０００３】
２値化は、濃淡画像の各画素の画素値をしきい値と比較し、しきい値より大きいか小さいかで各画素を分類する処理である。しきい値を適切に選んで２値化を行うことにより、対象となる部分を抽出できる。ラベリングは、２値化画像において、連結成分、すなわち注目する画素値（白又は黒のいずれか）を有し互いに連結した画素群、を抽出し、各連結成分にそれぞれ識別のためのラベルを付与する処理である。ラベリングには、自画素の上下左右の隣接４画素との連結性を考慮する場合（４連結性）と、さらに斜め方向の隣接４画素を加えた周囲８画素との連結性を考慮する場合（８連結性）とが一般に知られている。このラベリング処理により、２値化画像中の注目画素値を有する各画素を、互いに連結した画素の塊（連結成分）に分けることができる。このように求めた各連結成分が認識の対象となり、各連結成分毎にその特徴量が求められる。
【０００４】
例えば、監視カメラの画像から侵入者を検知するシステムとして、現在の画像とその直前の画像との差分画像を求め、その差分画像を２値化・ラベリングして各連結成分を求め、それら各連結成分の面積や重心から侵入者の有無を判定するものが知られている。
【０００５】
従来の一般的なラベリング処理として次のような手順が知られている。この手順では、まず画像の左上隅から右下隅に向かってラスタ走査により各画像を調べ、注目画素値を有する画素に仮のラベルを付与し、この走査が終わると、今度は逆に右下隅から左上隅にラスタ走査を行って仮ラベルを調整する。そして、更に右上隅から左下隅に向かってラスタ走査を行うことにより、仮ラベルの再調整をする。
【０００６】
例えば４連結性により連結を判断する場合、上記手順の最初のラスタ走査では、注目画素値を持つ画素を検出すると、その画素をラベリング対象とし、その画素の上及び左の隣接画素と同じラベルを仮ラベルを付与する。上及び左の隣接画素のどちらにもラベルが付されていない場合は、ラベルリング対象の画素には新たなラベルを付与する。次の右下隅から左上隅へのラスタ走査では、仮ラベルを付与した画素を検出すると、その画素のラベルを下及び右の隣接画素のラベルに合わせる。下及び右の隣接画素のどちらにもラベルが付されていない場合は、元の仮ラベルをそのまま最終的なラベルとする。そして、最後の右上隅から左下隅への走査では、仮ラベルを付与した画素を検出すると、その画素のラベルを上及び右の隣接画素のラベルに合わせるように調整する。
【０００７】
最初の走査では、同じ連結成分に属する画素に一般に異なる仮ラベルが付されるが、中盤及び最後の走査により、連結成分が比較的単純な形状ならば、同じ連結成分に属する画素はすべて同じラベルを持つようになる。
【０００８】
【発明が解決しようとする課題】
しかしながら、上記従来処理は、連結成分の形状が複雑になると正しいラベリングができない可能性がある。例えば、図２０に示したような多数の枝分かれを含む複雑な形状の連結成分１００は、上記従来処理では同じラベルを付与することができない。このような複雑な形状についても正しいラベリングを行おうとすると、更に走査の方向を増やすなどの対応が必要となり、処理時間が長くなってしまう。
【０００９】
また、上記従来のラベリング処理は、仮ラベルを順次調整していくことで、最終的に１つの連結成分に属する画素に同一のラベルを与えるようにするものなので、全画面についてラベルの調整が完了した段階では、各連結成分（例えば白画素の塊）に与えられたラベルが飛び飛びの値になる可能性が高い。このため、連結成分の総数が知りたければ、ラベルを連番に直す処理が必要となり、そのための処理時間が必要となる。
【００１０】
また、上記従来のラベリング処理では、すべてのラスタ走査が完了するまで各画素の最終的なラベルが決定されない。このため、ラベリングの後に行う連結成分の面積や重心などの特徴量は、後半の走査が完了するまで行うことができなかった。したがって、上記従来のラベリング処理は、高速な対象物認識を要求される応用分野には不向きであった。
【００１１】
本発明はこのような問題点を解決するためになされたものであり、複雑な形状の画像も比較的高速にラベリング処理できる方法を提供することを目的とする。また、本発明の更なる目的は、ラベリング処理における連結成分の特徴量を高速に求めることができる方法を提供することである。
【００１２】
【課題を解決するための手段】
第１の発明に係る画像処理方法では、画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップとを繰り返すことにより、画像内の注目画素値を持つ画素の各連結成分にラベリングを行う。ここで、ラベル付与ステップでは、ラベル付け始点画素をライン始点とするステップ（ａ）と、ライン始点を最初の対象画素とし、対象画素を右及び左のうち所定の一方向に順次１画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素をスタックに追加するステップ（ｂ）と、このステップ（ｂ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、ラベル付け始点画素から前記ステップ（ｂ）とは逆方向に順次対象画素を１画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加するステップ（ｃ）と、このステップ（ｃ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ（ｂ）及び（ｃ）を実行するステップ（ｄ）と、前記スタックから画素がなくなるまで上記ステップ（ｄ）を繰り返すステップ（ｅ）とを含む。
【００１３】
この方法では、画像のライン方向に順次画素の連結性を調べてラベリングを行い、この際にラベリングした画素と連結した隣接ラインの画素をスタックに登録し、そのラインの連結成分のラベリングが完了すると、次にスタックから画素を取り出してその画素を始点として同じ手順を繰り返す。このようにライン上を一画素ずつ連結性を調べると共に、その画素の上下（すなわち隣接ライン）の連結性を持つ画素をもれなく調べ、ラベリング開始点の候補としてスタックするので、注目画素値を有する画素の塊（連結成分）に属する画素をもれなく検出し、同一ラベルでラベリングすることができる。したがって、多数の分岐を含む複雑な形状の連結成分でも正確にラベリングすることができる。また、この方法によれば、１つの連結成分ごとに順にラベリングを行っていくことになるので、画像全体のラベリングが終了した段階では、各連結成分のラベルは必ず連番になる。
【００１４】
第２の発明では、ラベル付与ステップは、ラベル付け始点画素をライン始点とするステップ（ａ）と、ライン始点を最初の対象画素とし、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、対象画素を右及び左のうち所定の一方向に順次１画素ずつ移動させながらその都度対象画素及びその上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合はその隣接画素をスタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップ（ｂ）と、ステップ（ｂ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、ラベル付け始点画素から前記ステップ（ｂ）とは逆方向に順次対象画素を１画素ずつ移動させその都度対象画素その上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップ（ｃ）と、ステップ（ｃ）にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ（ｂ）及び（ｃ）を実行するステップ（ｄ）と、前記スタックから画素がなくなるまで上記ステップ（ｄ）を繰り返すステップ（ｅ）と、を含み、画像の全画素について走査が終わるまで前記始点検出ステップ及びラベル付与ステップを繰り返す。
【００１５】
この方法では、走査の対象画素の隣接画素スタックする際に、その対象画素がラベル付けされるか否かによらず、隣接画素がラベル条件を満足するか否かのみでスタックするか否かを判断するようにした。これにより、８連結における斜め方向の連結の場合も正しくスタックすることができるので、８連結成分のラベリング処理を実現することができる。また、この方法は、上記第１の発明に係る方法とほぼ同じ計算量で、８近傍ラベリングを実現することができる。
【００１６】
本発明の好適な各態様では、ラベリングと並行してラベリングした画素の数や座標を集計することにより、同一ラベルの画素連結成分の面積や重心などの特徴量を計算することができ、高速な特徴量計算が可能になる。
【００１７】
また、本発明の好適な態様では、スタックから取り出した画素がラベル未付与か否かを判定し（前記ラベル条件の判定）、ラベル付与済みである場合の回数をカウントすることにより、注目画素値の連結成分中の穴（注目画素値以外の画素の領域）の数を求めることができる。
【００１８】
また本発明に係る方法は、画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、を含み、前記ラベル付与ステップは、ラベル付け始点画素をライン始点とする開始ステップと、前記ライン始点を含むライン上の画素を１画素ずつ走査し、前記ライン始点に対して連結性を有し前記ラベル条件を満足する画素を見つける毎に前記ラベルを付与すると共に、その走査ラインの上下の隣接ラインにおいて、その走査ラインの画素に対して前記ラベル条件を満足する画素を連結候補画素として所定の記憶手段に記憶するライン走査ステップと、前記ライン走査ステップにおいて前記走査ライン上でのラベル付け処理が完了すると、前記記憶手段から連結候補画素を１つ取り出し、これを新たなライン始点として前記ライン走査ステップを反復する走査反復ステップとを含む。
【００１９】
この方法でも、走査対象のラインの隣接ラインにおけるラベル条件を満足する画素をスタックに追加し、ライン走査が終わった後そのスタックから次のラインの走査開始点を取り出してラベリングのためのライン走査を行う。このような処理により、複雑な図形でも１回の走査で（すなわち従来技術のように仮ラベルの付け直しのための走査を何度も繰り返すことなく）、高速にラベリングを行うことができる。
【００２０】
【発明の実施の形態】
以下、本発明の実施の形態（以下実施形態という）について、図面に基づいて説明する。
【００２１】
＜実施形態１＞
［装置構成］
図１は、本発明に係る画像処理装置の概略構成を示す機能ブロック図である。本実施形態では、２値画像用メモリ２０に記憶された２値画像に対し、ラベリング処理部１０によりラベリング処理を行い、その結果をラベル付画像用メモリ３０に書き込んでいく。ラベリング処理部１０は、ラベリングのための制御情報記憶手段としてスタック１２を用いる。このスタック１２は、後入れ先出し（ＬＩＦＯ）方式のデータ構造である。本実施形態では、２値画像において１ラインずつラベリングを進めていくが、このスタック１２にはそのラインのラベリングの際に求めた次のラインのラベリング処理の始点画素の座標情報を登録する。このスタック１２の詳細な利用法については、後の処理手順の説明にて詳細に述べる。また、ラベリング処理部１０は、ラベリング処理と平行して、面積カウンタ１４、Ｘカウンタ１６及びＹカウンタ１８を用いて、ラベリングした各連結成分（すなわち注目する画素値を持つ互いに連結した画素の塊）の面積や重心を計算する。
【００２２】
［全体処理手順］
次に図２を参照して、本実施形態の画像処理装置の全体処理手順を説明する。以下の処理は、ラベリング処理部１０によって行われる。
【００２３】
本実施形態のラベリング処理において、まずラベリング処理部１０は、付与すべきラベルの値ｎを０に初期化する（ステップＳ１０）。本実施形態では、ラベルとして続き番号を用いている。
【００２４】
ラベル値ｎを初期化すると、ラベリングすべき注目画素値の画素の塊を見つけるための画像走査を行う。以下では、２値画像を構成する白黒の２値のうち、「白」を注目する画素値とし、白画素の塊をラベリングするものとする。
【００２５】
本実施形態では、この走査は、画像の左上隅から右下隅に向かって、ラスタ走査順序に従って行う。この走査のため、まずラベリング処理部１０は、鉛直座標ｙの値を０に初期化する（ステップＳ１２）。この鉛直座標ｙは、走査対象の画像ラインに対し、上から順に付けた番号である。本実施形態では、図８に示すように、画像の座標系として、水平方向右向きに水平座標ｘ、鉛直方向下向きに鉛直座標ｙをとり、画像の左端のカラム（列）のｘ座標を０、上端のライン（行）のｙ座標を０としている。鉛直座標ｙを初期化すると、以降ステップＳ１４からＳ２６までの処理ループで、鉛直方向についての走査が制御される。ステップＳ１６では、水平方向の走査のために、水平座標ｘが０に初期化される。そして、ステップＳ１８からＳ２４までの処理ループで、水平方向についての走査が制御される。このような走査に従って、２値画像用メモリ２０に格納された２値画像の各画素がラスタ走査順序で調べられる。
【００２６】
ステップＳ２０では、走査において調査対象に選んだ点（ｘ，ｙ）がラベル未付与の白画素であるか否かを判定する。図では肯定判定をＴＲＵＥ（真）、否定判定をＦＡＬＳＥ（偽）と表している。この判定結果が肯定（ＴＲＵＥ）の場合、ラベルｎの値を１だけインクリメントし（ステップＳ２２）、この点（ｘ，ｙ）を起点とする白画素の塊（連結成分）に対し値ｎのラベルを付与する処理（ステップＳ１００）を実行する。このステップＳ１００の処理については、後に図３を参照して詳しく説明する。そして、ステップＳ２４にて水平座標ｘの値を１インクリメントすることにより調査対象を右に１つ移動し、ステップＳ１８に戻る。一方、ステップＳ２０の判定結果が否定（ＦＡＬＳＥ）の場合は、何も行わずにステップＳ２４に進み、調査対象の画素を右に１つ移動してステップＳ１８に戻る。
【００２７】
このようにして処理を進め、ステップＳ１８で調査対象の画素が画像の右端を超えたことが分かると、ステップＳ２６で鉛直座標ｙを１だけインクリメントし、ステップＳ１４に戻り、次のラインについてステップＳ１６からＳ２４の処理を繰り返す。そして、ステップＳ１４で調査対象のラインが画像の下端を超えたことを検知すると、一連のラベリング処理が完了したことになる。
【００２８】
以上の処理手順によれば、画像左上隅から右下隅に向かうラスタ走査順序に従い各画素が調べられ、ラベル未付与の白画素が検出されると、その画素を起点とした連結成分のラベル付け処理（ステップＳ１００）が行われることになる。ステップＳ１００により１つの連結成分についてのラベル付けが終わると、ラスタ走査順序に従い、ラベル未付与の連結成分の起点となる白画素の探索が行われる。
【００２９】
以上の手順から分かるように、ステップＳ２０で見つけられるラベル未付与の白画素は、１つの白画素の連結成分（塊）の中の最上ラインの左端の画素である。この画素を始点として、１つの連結成分をラベリングするためのサブルーチン、すなわちステップＳ１００の処理が実行される。次に、このステップＳ１００の処理手順を説明する。
【００３０】
［連結成分のラベリング］
図３に、ステップＳ１００の詳細な処理手順を示す。この手順では、まず準備として、図２に示したメインルーチンから、ステップＳ２０で検出された連結成分の始点の座標（ｘi，ｙi）、及びステップＳ２２で求められたラベル値ｎを取得する（Ｓ１０２）。例えば、最初に見つけられた始点（ｘi，ｙi）のラベル値ｎは、ステップＳ２２によれば１となる。以下の手順では、この始点の画素に連結する白画素が順次検出され、ラベルｎが付与されていく。
【００３１】
このため、まず始点の座標（ｘi，ｙi）を制御用のスタック１２（図１参照）に追加する（ステップＳ１０４）。本実施形態ではラベリング処理と並行して白画素の連結成分の面積や重心の計算を行うが、そのために用いる面積カウンタ１４（面積Ｓ）、Ｘカウンタ１６（Ｇｘ）、Ｙカウンタ１８（Ｇｙ）の初期化をステップＳ１０６で行う。そして、以降、そのスタックに画素座標のデータがエントリされている間、ステップＳ１０８からＳ１１４の処理ループが繰り返される。
【００３２】
この処理ループでは、まずスタック１２の先頭のエントリ（すなわち最後に積まれた画素座標）を取り出し、これを走査開始座標（ｘ0，ｙ0）にセットする（ステップＳ１１０）。そして、ステップＳ１１２で点（ｘ0，ｙ0）がラベル未付与の注目画素値（この場合は「白」）の画素かを判定する。なお、図及び以下の説明では、表現の簡素化のため、点（ｘ，ｙ）の画素がラベル未付与の注目画素値の画素であるかどうかの条件判断をＫ（ｘ，ｙ）と表記する。点（ｘ，ｙ）がラベル未付与の注目画素値の画素である場合には、この結果はＴＲＵＥ（真）、そうでない場合にはＦＡＬＳＥ（偽）となる。
【００３３】
ステップＳ１１２の処理結果がＴＲＵＥの場合は、走査開始座標（ｘ0，ｙ0）を始点として、ライン方向に画素を走査してラベリングを実行していく（ステップＳ２００）。このステップＳ２００によれば、走査開始座標（ｘ0，ｙ0）の画素が属する画像ラインのうちその画素に連結性を有する各画素にラベルｎが付与されるとともに、そのラインの上下の隣接ラインの走査開始座標の候補となるものが求められ、それがスタック１２に追加されることになる。またこのとき、白画素の塊の面積や重心を求めるためのカウンタ１４、１６及び１８のカウントアップも行われる。なお、このステップＳ２００の詳細な処理手順は後に詳しく説明する。ステップＳ２００の処理が完了すると、ステップＳ１０８に戻り、スタック１２から最新に追加されたエントリを取り出して以上の処理を繰り返す。
【００３４】
さて、ステップＳ１１２の処理結果がＦＡＬＳＥになるのは、スタック１２に積まれた座標の画素が、スタック１２から取り出される（ステップＳ１０８）前にラベル付けされてしまっている場合である。後に具体例を挙げて説明するが、簡単に言えば、連結した白画素の塊の中に穴（黒画素）がある場合、このようなことが起こる。この場合、その座標の属するラインについてはラベリングが終わっているので、何もせずにステップＳ１０８に戻る。
【００３５】
このような処理を繰り返した結果スタック１２のエントリがすべてなくなると、始点（ｘi，ｙi）から始まる白画素の連結成分に属する全画素についてラベルｎの付与が完了したことになる。
【００３６】
このときの面積カウンタ１４（Ｓ）のカウント値がその連結成分の面積Ｓであり、Ｘカウンタ１６及びＹカウンタ１８のカウント値をその面積Ｓで除した値が、それぞれその連結成分の重心のｘ座標（Ｇｘ）及びｙ座標（Ｇｙ）となる。本実施形態では、ステップＳ１１４で、ラベリングした連結成分の重心座標（Ｇｘ、Ｇｙ）を計算し、これを連結成分の面積Ｓの値と共に、所定の記憶手段に格納する（ステップＳ１１６）。
【００３７】
以上の処理が完了すると、ステップＳ１００の処理が終わり、制御が図２のメインルーチンに戻されて、次の白画素の塊（連結成分）の開始座標が探索される。
【００３８】
［ライン走査］
次に、ステップＳ２００のライン走査処理の詳細な処理手順を説明する。この処理は、図４に示すように、ステップＳ１１０でスタック１２から取り出された走査開始座標（ｘ0，ｙ0）の画素から、当該ラインを右方向に走査して連結画素のラベリングを行っていく処理（ステップＳ２１０：右方向処理）と、その画素から当該ラインを左方向に走査して連結画素をラベリングする処理（ステップＳ２５０：左方向処理）を含んでいる。以下、それら各処理の内容を説明する。
【００３９】
右方向処理（ステップＳ２１０）の詳細手順を図５に示す。この処理では、まず２つのフラグＦ１及びＦ２の値をＦＡＬＳＥに初期化（リセット）する（ステップＳ２１２）。これらのフラグは、ステップＳ３００の隣接ラインの開始点をスタック１２に登録する処理において用いるものであり、その機能についてはステップＳ３００の処理の説明の際に詳しく述べる。
【００４０】
次にステップＳ２１４で、水平座標ｘに走査開始座標のｘ座標値ｘ0をセットする。以降、ステップＳ２１６でｘが２値画像の幅以上になった（すなわち画像の右端に達した）ことが検知されるまで、ステップＳ２２４で水平座標ｘを１ずつインクリメントしながら、ステップＳ２１６からＳ２２４の処理ループを繰り返す。
【００４１】
この処理ループでは、点（ｘ，ｙ0）がラベル未付与の注目画素値の画素か否かを判定し（Ｋ（ｘ，ｙ0））（ステップＳ２１８）、この結果がＴＲＵＥの場合は、点（ｘ，ｙ0）の画素に値ｎのラベルが付与される（ステップＳ２２０）。
【００４２】
この処理ループに進入した最初の時点では、ｘ＝ｘ0なので、ステップＳ２２０では、スタック１２から取り出された走査開始座標（ｘ0，ｙ0）の画素について条件判定Ｋ（ｘ，ｙ）が適用されることになるが、この画素はステップＳ１１２でＴＲＵＥ判定を受けたものと同じものなので、ここでの処理結果もＴＲＵＥとなり、走査開始座標の画素にラベルｎが付与されることになる。以降、この処理ループでは、検査対象となる画素の座標が、ライン上を順次右方向に１画素ずつシフトされ（ステップＳ２２４）、その検査対象画素がラベル未付与の白画素かがステップＳ２１８で検査される。ステップＳ２１８の結果がＦＡＬＳＥになるとこの処理ループを抜けるので、逆に言えばこの処理ループが繰り返されている間は、検査対象の画素は、走査開始座標の画素に対し、ライン上でラベルｎの画素のみを介してつながっていることになる。したがって、ステップＳ２１８の結果がＴＲＵＥ（すなわち検査対象画素がラベル未付与かつ白画素）の場合は、その検査対象画素は走査開始座標の画素に対して連結性を有していることが保証されるので、その検査対象画素に対してラベルｎを付与してよいことになる。
【００４３】
ステップＳ１０２においてセットされたラベル付けの始点（ｘi，ｙi）の属するラインについて、そのライン上でその始点に連結性を有する画素に、その始点と同じラベルｎを付与されることは以上の説明から理解されよう。その他のラインについては、スタック１２に積まれた座標の画素から処理が開始されるが、その開始画素は、後で説明するスタック１２への座標追加処理（ステップＳ３００）の方法から、隣接ラインのラベルｎを付与済みの画素に連結性を有していることが保証される。したがって、その開始画素及び同一ライン上の連結性を有する画素には、やはりラベルｎを付与してよいことになり、実際、ステップＳ１０８にてスタック１２から開始画素を取り出した後、図５の処理ループ（ステップＳ２１６からＳ２２４）の実行により、それら各画素にラベルｎが付与されることになる。
【００４４】
さて、ステップＳ２２０で検査対象の画素（ｘ，ｙ0）にラベル付けをすると、これと並行して、白画素の連結成分の面積を求めるため面積カウンタ１４（Ｓ）のカウント値を１だけインクリメントすると共に、その連結成分の重心を求めるためにラベル付けした画素の水平座標ｘと鉛直座標ｙ0を、Ｘカウンタ１６（Ｇｘ）とＹカウンタ１８（Ｇｙ）のカウント値にそれぞれ加える（ステップＳ２２２）。
【００４５】
そしてこの後、隣接ラインの走査開始点をスタック１２に登録するための処理を行う（ステップＳ３００）。
【００４６】
図６を参照して、このステップＳ３００の処理手順を説明する。この処理では、検査対象の画素（ｘ，ｙ0）の上下の隣接画素が隣接ラインの走査開始点に適するか否かを判断し、適する場合にはその隣接画素の座標をスタック１２に追加する。この処理において、ステップＳ３０２からＳ３１０までは上の隣接画素に関する処理であり、ステップＳ３１２からＳ３２０までが下の隣接画素に関する処理である。これら両者はいずれを先に行ってもよい。
【００４７】
図示の順に説明すると、まずステップＳ３０２では、検査対象の画素（ｘ，ｙ0）の上の隣接画素（ｘ，ｙ0−１）について判定Ｋ（ｘ，ｙ）を適用し、その隣接画素がラベル未付与の白画素か否かを判定する。この判定結果がＴＲＵＥの場合、その隣接画素は検査対象画素に連結性を有していることになる。ここで検査対象画素自体にはラベルｎが付与されているので、その隣接画素が検査対象画素に連結性を有していれば、その隣接画素もラベルｎを付与されるべき画素であるといえる。本実施形態では、基本的に、そのようなラベルｎを付与すべき隣接画素を、隣接ラインの走査開始点としてスタック１２に登録する。
【００４８】
ただし、そのような隣接画素すべてをスタック１２に登録したのではスタックのサイズが大きくなり、またスタック１２からの画素取り出し処理の負荷が増えるので、本実施形態ではこれを避けるため、スタック１２に登録する画素を絞り込んでいる。前述のフラグＦ１及びＦ２はこの絞り込みのために用いている。Ｆ１は上隣の隣接画素用、Ｆ２は下隣の隣接画素用である。
【００４９】
ステップＳ３０２で検査対象画素の上の隣接画素がラベル未付与の白画素と分かった場合、フラグＦ１の現在値がＦＡＬＳＥであるか否かを判定する（ステップＳ３０４）。そして、Ｆ１がＦＡＬＳＥの場合にのみ、その隣接画素の座標（ｘ，ｙ0−１）をスタック１２に追加する（ステップＳ３０６）。そして、Ｆ１の値をＴＲＵＥにセットする（ステップＳ３０８）。
【００５０】
前述のステップＳ２１２でフラグＦ１はＦＡＬＳＥに初期化されているので、ライン走査処理（ステップＳ２００）の中で最初にこのステップ３０４を通過する際には、Ｆ１は必ずＦＡＬＳＥである。したがって、そのラインの走査開始画素（ｘ0，ｙ0）の上の隣接画素がラベル未付与の白画素であれば、その隣接画素は必ずスタック１２に登録される。こうして、いったん上の隣接画素がスタック１２に登録されると、ステップＳ３０８でフラグＦ１がＴＲＵＥにセットされ、Ｆ１がＴＲＵＥである間は、上の隣接画素（ｘ，ｙ0−１）は、ラベル未付与の白画素であってもステップＳ３０４の判定により、スタック１２に登録されないことになる。したがって、例えば最初に走査開始画素（ｘ0，ｙ0）の上の隣接画素をスタック１２に登録した後、その上の隣接画素から同一ライン上を右方向に白画素が連続している場合でも、それら白画素はスタック１２に登録されない。フラグＦ１がＴＲＵＥからＦＡＬＳＥにリセットされるのは、ステップＳ３０２で上隣接画素（ｘ，ｙ0−１）がラベル未付与の白画素でない（すなわち黒画素か又はラベル付与済みの画素）と判定された場合である（ステップＳ３１０）。Ｆ１がＦＡＬＳＥにリセットされた後、再びラベル未付与の白画素である隣接画素（ｘ，ｙ0−１）が見つかると（ステップＳ３０２）、その隣接画素はスタック１２に追加される（ステップＳ３０６）。
【００５１】
以上、検査対象画素の上の隣接画素についてのスタック処理を説明したが、下の隣接画素もこれと全く同様スタック処理される。すなわち、まずステップＳ３１２で下の隣接画素（ｘ，ｙ0＋１）がラベル未付与の白画素かが判定され、この判定結果がＴＲＵＥの場合、ステップＳ３１４でフラグＦ２がＦＡＬＳＥか否かが更に判定され、Ｆ２がＦＡＬＳＥである場合にのみ、その画素（ｘ，ｙ0＋１）がスタック１２に登録される（ステップＳ３１６）。そして、スタック１２への登録がなされると、ステップＳ３１８でフラグＦ２はＴＲＵＥにセットされる。いったんＴＲＵＥにセットされたフラグＦ２は、走査が進んでステップＳ３１２で下の隣接画素（ｘ，ｙ0＋１）がラベル未付与の白画素でなくなると、ＦＡＬＳＥにリセットされる（ステップＳ３２０）。
【００５２】
以上、図６を参照してスタック１２への画素座標の登録処理について説明した。図６には示さなかったが、ステップＳ３０２やＳ３１２で検査対象画素の上隣や下隣の画素を参照する際、誤って２値画像の外の値を読み込まないようにするためのエラー回避処理を行っていることは言うまでもない。
【００５３】
このようにして、検査対象画素（ｘ，ｙ0）の上下の隣接画素についてのスタック処理が完了すると、ステップＳ２２４で検査対象画素の水平座標ｘを１だけインクリメントし、検査対象画素を１つ右にずらしてステップＳ２１６からＳ２２４の処理を繰り返す。このようにして、検査対象画素が２値画像の左端を超えてしまったり（ステップＳ２１６）、検査対象画素がラベルｎを付すべき画素でなくなったり（ステップＳ２１８の結果がＦＡＬＳＥ）すると、右方向処理（ステップＳ２１０）が完了し、左方向処理（ステップＳ２５０）に移る。
【００５４】
左方向処理（ステップＳ２５０）は、図７に示す手順に従って行われる。この処理は、走査開始座標（ｘ0，ｙ0）の左隣の画素から処理を開始し、当該ライン上を左方向に走査していくことを除けば、前述の右方向処理と全く同じ内容の処理を行う。
【００５５】
この処理では、まずステップＳ２５２で、フラグＦ１をＫ（ｘ0，ｙ0−１）の判定結果に、Ｆ２をＫ（ｘ0，ｙ0＋１）の判定結果に、それぞれ初期化する。ここでは、走査開始座標（ｘ0，ｙ0）の上隣及び下隣の画素に合わせてフラグを初期化しているわけである。次にステップＳ２５４で水平座標ｘがｘ0−１に初期化されることにより、走査開始座標の左隣の画素が最初の検査対象画素に選ばれることになる。以降、ステップＳ２５６にて水平座標ｘが０より小さくなったことが検出されるまで、ステップＳ２６４にて順次水平座標が１ずつデクリメントされ、これにより検査対象画素を１つずつ左方向にずらしながら、右方向処理の場合と同様のラベル付け及びスタック処理（ステップＳ２１８〜Ｓ３００）が行われる。
【００５６】
このようにして左方向処理（ステップＳ２５０）が完了すると、１ラインについてのラベリング処理（ステップＳ２００）が完了し、図３の処理の流れに戻ってスタック１２から次の走査開始座標を取り出して、同じ処理を繰り返す。
【００５７】
以上、本実施形態のラベリング処理部１０の処理手順を説明した。以上の手順では、点（ｘ，ｙ）上の画素がラベル未付与かつ注目画素値か、という条件判定Ｋ（ｘ，ｙ）を各所で行ったが、この処理は、ラベル付画像用メモリ３０に対して次のような初期化処理を実行することにより簡略化できる。この初期化処理では、２値画像用メモリ２０から各画素の値を読み出し、その画素が注目画素値であるか否かに応じて、それぞれ異なる仮ラベルを与えてラベル付画像用メモリ３０に書き込む。この際に用いる仮ラベルには、最終的なラベリングには使用しない値（例えば自然数の連番でラベリングする場合は、０や−１など）を用いる。好適な例としては、注目画素値の画素には“−１”の仮ラベル、注目画素値でない画素には“０”の仮ラベルを与える。このようにすれば、図２のステップＳ２０、図３のステップＳ１１２、図５のステップＳ２１８などにおけるＫ（ｘ，ｙ）の条件判定が、結局その点（ｘ，ｙ）のラベル値が“−１”であるか否かの判定になる。すなわち、点（ｘ，ｙ）が“−１”であれば、ラベル未付与かつ注目画素値であるからである（注目画素値でなければラベル値は“０”であるし、ラベルが既に付与されていればラベル値は“−１”ではない）。
【００５８】
［処理具体例］
次に、具体的な２値画像の例を参照して、その処理手順の実行の様子を説明する。
【００５９】
２値画像の具体例として、図８に示す画像を考える。図８では、黒塗り正方形が黒画素、白抜き正方形が白画素を示し、中に数字を含む白抜き正方形はラベル付けされた白画素を示す。中の数字がラベルの値である。そして、ハッチングが付された四角形は、スタック１２に座標が登録された白画素を示すものとする。
【００６０】
図８の状態は、ラベル１の連結成分（白画素の塊）についてラベル付与が終わり、ステップＳ２０にて次のラベル付け始点が検出され、その始点をステップＳ１０４でスタック１２に登録した時点の様子を示している。すなわち、スタックには座標（１２，２）が積まれており、以降、この座標の画素を始点として、この画素に連結する画素のラベリングが行われる。
【００６１】
この場合、まずスタック１２から座標（１２，２）が取り出され（ステップＳ１１０）、これはラベル未付与の白画素なので、新たなラベル２が付与される（ステップＳ２２０）。この画素の上隣と下隣のうち、後者はラベル未付与の白画素なのでその座標（１２，３）がスタック１２に積まれる（ステップＳ３１６）。そのラベル付け始点（１２，２）の左隣の画素を調べると、その画素（１３，２）はラベル未付与の白画素なので、ラベル付け始点と同じラベル２が付与される（ステップＳ２２０）。この画素の下隣の画素（１３，３）は、ラベル未付与の白画素であるが（ステップＳ３０２）、先ほど座標（１２，３）をスタック１２に積んだときにフラグＦ２がＴＲＵＥにセットされているので、スタック１２へは登録されない。図９はこの時点の様子を示す。
【００６２】
更に処理を進め、ｙ＝２のラインについての走査が終わった時点では、ラベル付けの状態は図１０に示すようになる。ラインの走査が完了したので、次にスタック１２から先頭のエントリ、すなわち座標（１２，３）を取り出し（ステップＳ１１０）、この座標を起点としてｙ＝３のラインについての走査を行う。ここではまずラインの始点（１２，３）にラベル２が付与される。その下隣（１２，４）はラベル未付与の白画素なので、スタック１２に積まれる。ラインの始点（１２，３）から右方向に処理を進めていくと、検査対象画素が（１５，３）に達した時点でその画素の下隣（１５，４）が黒画素となり、フラグＦ２がＦＡＬＳＥにリセットされる（Ｓ３２０）。その後、検査対象画素が（１９，３）に達した時点では、その下隣（１９，４）はラベル未付与の白画素であり、しかもこの時点ではフラグＦ２はＦＡＬＳＥなので、座標（１９，４）がスタック１２に積まれることになる（ステップＳ３１６）。この時点のラベリング状態を図１１に示す。
【００６３】
以降、処理を進め、ｙ＝３のラインの走査が完了した時点では、ラベリング状態は図１２に示すようになる。この時点では、スタック１２には上から順に座標（１９，４）、（１２，４）が積まれている。これは、ｙ＝４より下では白画素の連結成分が、画素（１９，４）に連結している部分と、画素（１２，４）に連結している部分の２つに分岐していることを示している。
【００６４】
次は、スタック１２から後に積まれた座標（１９，４）が取り出され、この座標をライン始点として走査（ラベリング）が行われることになる。以降、上記の処理の繰り返しにより、２分岐した連結成分のうち画素（１９，４）に連結した白画素にラベル２が付与されていく。ｙ＝７のラインまで処理が完了した時点のラベリング状態を図１３に示す。
【００６５】
次は、座標（２０，８）がスタック１２から取り出され、この点を始点としてｙ＝８のラインのラベリング走査が行われる。この走査により、新たに座標（２０，９）、（１５，７）、（９，９）がこの順番でスタック１２に積まれる。ｙ＝８のラインの走査が終わった時点のラベリング状態を図１４に示す。
【００６６】
次にスタック１２から座標（９，９）が取り出され、この点から下に向かってラベリングが行われていく。そして、（９，９）から下の連結成分の白画素すべてにラベル付けが終わると、次にスタック１２から座標（１５，７）が取り出され、この点から上に向かってラベリングが行われていく。図１５は、この上向きのラベリング走査がｙ＝６のラインまで完了した時点のラベリング状態を示している。
【００６７】
図１６は、更にもう１ライン上までラベリングが完了した時点の状態を示す。この時点では、スタック１２の先頭には座標（１３，４）が積まれている。したがって、次は、この点（１３，４）を始点としてｙ＝４のラインについてラベリングが行われる。図１７は、この処理結果を示している。この処理により、スタック１２の一番下に積まれている座標（１２，４）の画素にラベル２が付与される。図１７では、このことを白抜きラベルの四角形で表している。この処理では、新たにスタック１２に積まれる座標はない。
【００６８】
次に、スタック１２の先頭の座標（２０，９）を取り出し、これを始点として、下方向に向かってこの始点に連結する白画素をラベリングしていく。そして、その始点から下方向の連結成分のすべてにラベル付けが終わると、図１８に示す状態となる。この状態では、スタック１２には、座標（１２，４）の点のみが残っている。最後に、この点をスタック１２から取り出す（ステップＳ１１０）。この点は既にラベル付けされているので、ステップＳ１１２の判定結果はＦＡＬＳＥとなり、ライン走査処理ステップＳ２００は行われない。したがって、スタック１２へのエントリの追加が行われないので、結局この結果スタック１２が空になる。これにより、ステップＳ１１８でループＡの終了条件が成立し、ラベル付け始点（１２，２）から始まるラベル２のラベリングが完了したことになる。
【００６９】
以上の具体例からよく分かるように、各ライン上で互いに連結する白画素の集合をノードと考えると、同一ラベルが付される白画素の塊は、そのノード同士を隣り合うライン同士で接続した多分木構造と考えることができる。本実施形態のラベリング手法は、この多分木を深さ優先探索アルゴリズムに従って探索する処理と等価であることが分かる。本実施形態の手法では、多分木構造のすべての分岐の開始点（ラインの走査開始座標）が確実にスタック１２にスタックされるので、４連結の連結成分をもれなく求めてラベリングすることができる。
【００７０】
また、本実施形態は、各ライン上で互いに連結する白画素の集合に対し１つの画素（走査開始座標）のみが選択されスタック１２に登録される構成である。したがって、スタック１２から取り出した画素を調べたとき、それがラベル既付与のものならば、その画素はある方向から（例えば上から）のアプローチで白画素塊の分岐の開始点の候補としてスタックされたものが、逆の方向からのアプローチで既にラベル付けされてしまったことを示し、これはすなわち白画素の塊の中に１つの穴（黒画素領域）があることを示す。したがって、スタック１２から取り出した画素がラベル付与済みであった回数をカウントすれば、その結果はラベル付けした白画素の塊の中の穴の個数を求めることができる。穴の個数という位相幾何学的な情報は、対象物認識のための有力な情報となる。
【００７１】
［効果］
以上、本実施形態に係るラベリング処理について説明した。本実施形態では、ラインに沿って１画素ずつ連結性を調べると共にその画素の上下の連結性を持つ画素をラベリング開始点の候補（走査開始座標）としてスタックする構成なので、あるラインに注目した場合、そのラインから上あるいは下方向に連結成分が複雑に分岐するとしても、各分岐部分のいずれかの画素が必ずスタックに積まれる。したがって、そのスタックのエントリがなくなるまで処理を繰り返せば、必ずすべての分岐部分について同じラベルが割り当てられることになり、連結成分が複雑な形状でも各画素に確実に同じラベルを付与することができる。
【００７２】
また、従来技術では複雑な形状の連結成分に対応するためには様々な方向について走査を行う必要があったため、処理に長い時間を要したが、本実施形態では、複雑な形状についても高速にラベリング処理を行うことができる。
【００７３】
例えば、発明者が図２１に示す２０×２５画素の２値画像を用いて行った実験では、白画素連結成分のラベリングについて、従来手法に基づくプログラムと本実施形態の手法に基づくプログラムとでは、処理時間が約４：１（すなわち本実施形態は従来の約４倍の速度）という結果が得られた。なおこの実験は、一般的なパーソナルコンピュータを用いて行ったものである。
【００７４】
また、従来技術では画像全体についてのラベリング処理が完了するまで特徴量の算出を待たなければならなかったのに対し、本実施形態では、１つの白画素の塊（連結成分）のラベリングが終了した段階でその塊の面積や重心などの特徴量を求めることができるので、特徴量の算出までを総合して考えれば高速化の効果はさらに高いといえる。特に、侵入者検知など、画像中から特定の条件を満たすものを１つ見つければよいという用途では、高速化の効果はさらに顕著である。
【００７５】
なお、以上の例では、ラベリングの対象となる注目画素値を白としたが、本発明は、注目画素値を黒とする場合にも当然適用可能である。
【００７６】
［侵入者検知装置］
最後に図１９を参照して、本実施形態の画像処理の侵入者検知装置への応用例を説明する。図１９において、図１と同様の構成要素には同じ符号を付す。
【００７７】
この侵入者検知装置では、監視用のＣＣＤカメラ１００からのＮＴＳＣコンポジット信号を画像入力部４０で受信し、画像入力部４０で得た画像を第１原画像用メモリ４２及び第２原画像用メモリ４４に対し、１フレーム毎に交互に書き込んでいく。差分演算部４６では、１フレーム毎に、第１及び第２原画像用メモリ４２及び４４の画素毎の差分を計算し、その結果を差分画像用メモリ４８に書き込む。差分画像用メモリ４８に形成された、ある時刻とその１フレーム前の時刻との差分画像は、２値化処理部５０にて所定のしきい値を基準に２値化され、その結果が２値画像用メモリ２０に書き込まれる。ラベリング処理部１０は、２値画像用メモリ２０内の２値画像に対し、前述の処理手順に従ってラベリング及び特徴量の計算処理を行い、その結果をラベル付画像用メモリ３０に書き込む。なお、この図では、ラベリング処理に用いる制御用のスタックや各種カウンタの図示は省略している。侵入者判定部５２は、このラベリング結果や特徴量の計算結果を受け取り、これらのデータから所定の判断基準に従って侵入者の有無を判定する。この判定結果は、侵入者判定装置全体を制御する制御部５４に伝えられ、例えば侵入者有りと判定された場合は、この制御部５４が所定の警報装置を作動させる。
【００７８】
＜実施形態２＞
［概要］
次に、本発明に係る画像処理の別の実施形態について説明する。上記実施形態１が４連結成分のラベリングであったのに対し、本実施形態では８連結成分のラベリングのための構成を説明する。
【００７９】
本実施形態を実現する装置構成は、図１に示した上記実施形態１の装置構成と同様でよく、基本的な処理の手順も実施形態１のものとほぼ同様である。ただ本実施形態では、８連結成分のラベリングを可能とするために、隣接ラインの開始点のスタック処理の仕方を、上記実施形態１の方式から少し変更している。
【００８０】
上記実施形態１では、ラインの開始点から１画素ずつ隣を調べてラベリングしていく際、調べる対象の画素にラベリングを行った後、その画素の上下の隣接画素についてスタック処理を行っていた（例えば図５のＳ２１８〜Ｓ３００参照）。この方式では、対象画素がラベル付けされなければ、その上下の隣接画素が、ラベリング開始点の候補としてスタック１２（図１）に積まれることはない。この方式は、隣接ラインの走査開始点としてスタックに積まれる画素は、ラベル付けされた画素の上下の隣接画素に限られるので、対象画素の上下左右の４つの隣接画素との連結性を見る４連結成分の方式に合致している。例えば、図２２に示すような画像２００の場合、実施形態１の方式では、白画素の塊２１０と塊２２０とが（４連結性の観点では）非連結と判断され、別のラベルが与えられてしまう。例えば左から右へ、上から下へと画素を走査して連結性を調べていく場合、６ライン目にて（７，６）から順に右方向へと走査していった場合、（９，６）の画素は黒画素なのでラベル条件を満たさず、したがってラベリングが施されない。このため、その下の（９，７）は白画素であるものの、スタック１２には追加されない。したがって、ラベリング走査は７ライン目に続くことができず、塊２２０には、塊２１０とは別のラベルが与えられることになる。
【００８１】
これに対し、８連結成分を考慮する本実施形態２では、図２２のようなケースにおいて塊２１０と２２０とに同じラベルを与えるために、６ライン目の走査の際に、隣接ラインの（９，７）がスタック１２に積まれるようにアルゴリズムを変更する。すなわち、本実施形態では、実施形態１と異なり、ラベリング走査の対象画素にラベルが付与されるか否かによらず、その対象画素の上下の隣接画素がラベル条件を満足すればスタック１２に追加するようにする。例えば図２２の例で言えば、６ライン目の走査において、対象画素が（９，６）となったとき、その下側の隣接画素（９，７）はラベル条件（ラベル未付与且つ白画素）を満足するので、その画素をスタック１２に積む（対象画素がラベル条件を満足するか否かは考慮しない）。ライン走査において対象画素（９，６）の直前の画素（８６）までは連結性が保証されており、この画素（８，６）とスタックに積んだ画素（９，７）とは８連結性がある。したがって、スタック１２に積んだ画素（９，７）から隣接ラインのラベリング走査を再開すれば、８連結性を満足したラベリングが行える。
【００８２】
［処理手順］
次に、フローチャートを参照して本実施形態のラベリング手順を説明する。この手順では、スタック処理を上述の如く変更する以外に、ラベル付画像用メモリ３０に対して初期化処理を施すことにより、ラベル条件の判断を容易にしている。
【００８３】
図２３は、全体的な処理手順のフローチャートである。この手順では、まずラベリング処理対象の２値画像を２値画像用メモリ２０に用意し（Ｓ５０）、この２値画像に応じてラベル付画像用メモリ３０を初期化する（Ｓ５００）。この初期化処理の詳細を図２４に示す。
【００８４】
ラベル付画像用メモリ３０の初期化処理では、まず２値画像を用意し（Ｓ５０２）、走査位置を示す座標のインデックスｘ、ｙをそれぞれ０に初期化する（Ｓ５０４）。以降ステップＳ５０６からＳ５１８までの処理ループで、鉛直方向についての走査が制御され、ステップＳ５０８からＳ５１６までの処理ループで、水平方向についての走査が制御される。このラスタ走査に従って、２値画像の各画素（ｘ，ｙ）の値Ｂ（ｘ，ｙ）を調べていく（Ｓ５１０）。
【００８５】
Ｓ５１０でＢ（ｘ，ｙ）＝０（すなわち黒）ならば、ラベル付画像用メモリ３０の当該画素（ｘ，ｙ）の値Ｌ（ｘ，ｙ）を“０”にセットし（Ｓ５１２）、Ｂ（ｘ，ｙ）＝０でなければ（すなわち黒画素）であれば、当該画素のラベル値Ｌ（ｘ，ｙ）を“−１”にセットする（Ｓ５１４）。
【００８６】
すなわち、この例では、白画素の塊に対して自然数（１，２，３，…）のラベルを付与していくため、この初期化処理では、黒画素についてはラベル値“０”を与え、各白画素には仮のラベル値“−１”を与える。この仮のラベル値“−１”は、後に正式のラベル値に置き換えられる。逆に言えば、後のラベリング処理において、ラベル値が“−１”である画素を見つければ、その画素は、ラベル条件（白画素且つラベル未付与）を満足するということが即座に分かり、各画素がラベル条件を満足するか否かの判断が容易になる。
【００８７】
このようにしてラベル付画像用メモリ３０の初期化が完了すると、ラベル値ｎを０に初期化し（Ｓ５２）、走査点の座標インデックスｘ、ｙをそれぞれ０に初期化した上で（Ｓ５４）、ラベル付画像用メモリ３０をラスタ走査する（ｘ方向はＳ５８〜Ｓ６４、ｙ方向はＳ５６〜Ｓ６６）。この走査は、ラベル未付与の新たな白画素の塊の最初の点を見つけるための走査であり、Ｓ６０でメモリ３０の調査対象画素（ｘ，ｙ）の値Ｌ（ｘ，ｙ）を調べ、その値が−１であれば、ラベル未付与の白画素が見つかったということなので、ラベル値ｎをインクリメントし（Ｓ６２）、その画素を始点として連結成分のラベル付け処理を行う（Ｓ６００）。１つの塊のラベル付け（Ｓ６００）が終わる毎に、Ｓ５６〜Ｓ６６の処理ループが繰り返され、画像の最後の画素まで走査が終わると処理が終了する。
【００８８】
ラベル付け処理（Ｓ６００）の詳細な手順は、図３に示した実施形態１の手順とほぼ同様である。ただし、実施形態１では、Ｓ１１２でスタック１２から取り出した画素（ｘ0，ｙ0）がラベル条件を満足するかどうかの条件判断Ｋ（ｘ0，ｙ0）を行っていたが、本実施形態ではこの代わりに、当該画素のラベル値Ｌ（ｘ0，ｙ0）が“−１”であるか否かを調べる。Ｌ＝−１であればラベル条件を満足するということなのでライン走査処理（Ｓ２００）に進み、そうでなければスタック１２から次の画素を取り出して処理を繰り返す。
【００８９】
さて、Ｓ２００のライン走査処理では、実施形態１と同様右方向処理（Ｓ２１０）と左方向処理（Ｓ２５０）を順に行う（図４参照）。本実施形態における右方向処理と左方向処理の詳細な手順を図２５、図２６にそれぞれ示す。これらの図において、図５、図７と同様の処理を行うステップについては、同じ符号を付してその説明を省略する。
【００９０】
本実施形態の右方向処理（図２５参照）は、対象画素（ｘ，ｙ0）がライン条件を満足するか否かを判定する（Ｓ２３２）前に、その対象画素の上下の隣接画素について隣接ライン開始点スタック処理（Ｓ３００）を実行する点が実施形態１と異なる（実施形態１では、対象画素がライン条件を満足する場合にのみ、その上下の隣接画素についてスタック処理（Ｓ３００）を行った）。そして、Ｓ２３２の判定で対象画素がライン条件を満足すると判定された場合、その対象画素（ｘ，ｙ0）のラベル値Ｌ（ｘ，ｙ0）をｎにセットし（Ｓ２３４）、面積や重心の計算のための処理を行う（Ｓ２２４）。
【００９１】
なお、本実施形態のスタック処理（Ｓ３００）の処理内容は、上下隣接画素がライン条件を満たすかどうかの判定（Ｓ３０２、Ｓ３１２）を、それら画素の画素値Ｌ（ｘ，ｙ0-1）、Ｌ（ｘ，ｙ0+1）が“−１”であるか否かによって判定する点を除いては、図６に示した実施形態１の処理と同様でよい。
【００９２】
左方向処理（図２６参照）では、まずフラグ調整処理（Ｓ２７０）を行う。このフラグ調整処理の詳細は図２７に示される。すなわち、フラグ調整処理では、まずｙ0（走査中のラインの番号）が０より大きいか否か（すなわち上方に隣接ラインが存在しうるか否か）を判定し（Ｓ７００）、ｙ0＞０であれば上側隣接ラインの開始点画素判定のためのフラグＦ１にＬ（ｘ0，ｙ0-1）をセットする。この値Ｌ（ｘ0，ｙ0-1）は、現在走査中のラインの始点画素（ｘ0，ｙ0）の上隣の画素のラベル値である。ただし、フラグＦ１は０，１の２値なので、Ｌ＝０以外のケースはＦ１＝１になる。このＳ７０２により、ライン始点画素の上隣画素がＬ＝０である時のみ、Ｆ１＝０（ＦＡＬＳＥ、すなわちリセット状態）となり、それ以外のケースではＦ１＝１（ＴＲＵＥ）となる。
【００９３】
Ｌ（ｘ0，ｙ0-1）＝０ということは、ライン始点の上隣画素（ｘ0，ｙ0-1）がラベル条件を満足していないことを意味し、これは言い換えれば、走査中のラインの上隣ラインのラベル条件を満足する画素は、少なくとも（ｘ0，ｙ0-1）で連結を切断されていることを意味する。したがって、ここでＦ１をＦＡＬＳＥにリセットすることで、以降の左方向のライン走査において最初に見つかる上隣ラインのラベル条件満足画素をスタックに積むことができる。
【００９４】
一方、Ｌ（ｘ0，ｙ0-1）が０でない場合には、次の２つのケースが考えられる。第１のケースはＬ（ｘ0，ｙ0-1）＝−１の場合であり、この場合、既に画素（ｘ0，ｙ0-1）は右方向処理（図２５）のときにスタックにつまれているはずなので、Ｆ１がＴＲＵＥで問題がない。
【００９５】
第２のケースはＬ（ｘ0，ｙ0-1）がｎ（自然数）、すなわち画素（ｘ0，ｙ0-1）に既にラベルが付与されている場合であり、この値ｎは、連結性から始点画素（ｘ0，ｙ0）のラベルと同じ値である。この場合、上隣ラインでラベル未付与画素の連結が切れているので、本来ならばフラグＦ１はＦＡＬＳＥにリセットされるべきであるが、このＳ７０２ではＴＲＵＥにセットされる。しかし、これはこれで問題がない。なぜなら、その画素（ｘ0，ｙ0-1）のラベルがｎ（自然数）である以上、左隣の画素（ｘ0-1，ｙ0-1）のラベルＬ（ｘ0-1，ｙ0-1）は、白画素ならば連結性によりｎにセットされているはずであり、黒画素ならば０にセットされているはずだからである。したがって、仮にこの第２のケースにおいてＳ７０２でＦ１＝ＴＲＵＥに設定したとしても、次の画素に進んでスタック処理（図６参照）を行ったときにＦ１はＦＡＬＳＥにリセットされるので、問題が起こらない。
【００９６】
次にフラグＦ２についても同様にフラグ調整を行う。すなわち、まず走査中のラインが画像の最終行でないことを確認し（Ｓ７０４）、最終行でないことが確認できた場合に、フラグＦ２を前述のＦ１と同様にして、Ｆ２＝Ｌ（ｘ0，ｙ0+1）に調整する。なおＳ７０４の判定において、走査中のラインが最終行であると判断されれば、フラグＦ２は必要ないので調整も行わない。
【００９７】
このように本実施形態では、右方向処理から左方向処理に移行する際のフラグ調整を、簡単な処理で実現している。
【００９８】
このようにしてフラグ調整が終わると、前述の右方向処理と同様にして、始点から左方向にラベリング処理を行っていく（Ｓ２５４〜Ｓ２６４）。この左方向処理も、右方向処理と同様、対象画素（ｘ，ｙ0）がライン条件を満足するか否かを判定する（Ｓ２３２）前に、その対象画素の上下の隣接画素について隣接ライン開始点スタック処理（Ｓ３００）を実行する。以降の処理は右方向処理と基本的に同じでよい。
【００９９】
このようにして左方向処理（ステップＳ２５０）が完了すると、１ラインについてのラベリング処理（ステップＳ６００）が完了し、図２３の処理の流れに戻ってスタック１２から次の走査開始座標を取り出して、同じ処理を繰り返す。これにより、上記実施形態１の場合と同様にして、８連結性を考慮したラベリング処理が行える。また、本実施形態でも、実施形態１と同様、白画素の塊の面積Ｓや重心、白画素塊の中にある穴の数、などをラベリング処理と並行して求めることができる。また、ラベリングの走査の際に、走査した画素のｘ、ｙ座標の最大値、最小値を記憶していくようにすれば、白画素塊の幅や高さなどをラベリング処理と並行して求めることも可能である。
【０１００】
このように、本実施形態では、隣接ラインの走査開始点をスタックする際に、ライン走査における対象画素がラベル付けされるか否かによらず、その対象ラインの上下の隣接画素がラベル条件を満足するか否かのみでスタックするか否かを判断するようにした。これにより、８連結における斜め方向の連結（図２２における（８，６）と（９、７）の関係など）の場合も正しくスタックすることができるので、８連結成分のラベリング処理を実現することができる。
【０１０１】
しかも、本実施形態の処理手順は、上記実施形態１の処理手順とほとんど同じなので、計算量も実施形態１の場合とほとんど変わらない。本実施形態は、実施形態１の４近傍ラベリングの場合と比べると、ライン１本のラベリングにつき、当該ラインの両端の斜め隣の４画素を余計に検査するだけであり、ラインがある程度長い状況であればこの差はほとんど無視できるほどになる。
【０１０２】
すなわち、実施形態１の４近傍ラベリングでは、長さＬ（画素）のライン１本をラベリングする際にラベル条件を判定する画素の数は３Ｌ＋２個（対象ライン及びその上下両隣のラインでＬ×３、これに対象ラインの左右両隣の画素２個を加えたもの）である。これに対し、本実施形態の８近傍ラベリングでは、同じライン１本につきラベル条件を判定する画素数は３Ｌ＋６個である。最悪のケースは、白黒が１画素ずつ市松模様になっている場合であり、この場合はＬ＝１なので、本実施形態の８近傍ラベリングの１ライン当たりの検査画素数は、実施形態１の場合の１．８倍となる。しかしながら、実際の応用分野（例えば侵入者検知など）では、画像がこのような極端なものになることはなく、一般に十分なライン長さになるので、４近傍ラベリングに比べて４画素分増加したとしても、それは無視できる（例えばＬ＝５０の場合、２．６％の増加に過ぎない）。したがって、本実施形態の手法は、４近傍ラベリングである実施形態１とほぼ同様の計算量で、８近傍ラベリングを実現できるというメリットがある。
【０１０３】
以上説明した本実施形態の手法は、実施形態１の場合と同様、侵入者検知装置など様々な応用分野に応用できる。
【０１０４】
［効果検証］
本実施形態の効果を実例を用いて検証した。用いた画像は図２８に示した（ａ）〜（ｃ）の３つの画像であり、これらの画像に対して（ａ１）従来手法による４近傍ラベリング（従来技術に記載）、（ａ２）従来手法による８近傍ラベリング（従来技術に示した手法を８近傍を考慮するように拡張したもの）、（ａ３）実施形態１による４近傍ラベリング、（ａ４）実施形態２による８近傍ラベリング、の４つの手法でラベリングを行い、その処理時間を計測した。処理は、ＣＰＵとしてＰｅｎｔｉｕｍ２（登録商標）の２６６ＭＨｚを搭載したパーソナルコンピュータで行った。その際の処理時間を図２９に示す。
【０１０５】
画像（ａ）は単純な画像なので、従来手法でも仮ラベルの更新を１〜２回行えば最終的なラベルが決まってしまう。それでも、実施形態１に示した手法（ａ３）の方が従来手法（ａ１）よりも４倍以上速いことが分かる。また、実施形態２の手法（ａ４）も従来手法（ａ２）よりも４倍以上速く、実施形態１（ａ３）とほぼ同程度の速さであることが分かる。
【０１０６】
画像（ｂ）はいささか複雑な画像である。侵入者監視などの応用分野においては、この程度の複雑さの画像をラベリングすることはめずらしくなく、この程度の複雑さの画像は実用的な画像の範疇である。この程度の複雑さになると、従来手法（ａ１）、（ａ２）では最終的なラベルを決定するのに何度も仮ラベルの付け直しを必要とするため、処理時間が非常に長くなる。これに対し、実施形態１、２の手法（ａ３）、（ａ４）は、単純な画像（ａ）の場合と変わらない時間で処理が完了しており、本発明に係る手法の高速性が如実に示されている。この例でも、実施形態２による処理時間は実施形態１と比べて遜色ない程度である。
【０１０７】
画像（ｃ）は非常に複雑な画像であり、実際の応用分野でこのような複雑な画像を扱うことはあまり考えられない。しかしながら、ここでは、本発明に係る手法の有効性を調べるため、このような複雑な画像についても検証を行った。従来手法（ａ１）、（ａ２）では、仮ラベルの付け直しを何度も何度も繰り返す必要があるため、非常に長い処理時間を要している。しかも、従来の４近傍処理では、連結を判定する画素が少ないので、ラベル付け直しで正当なラベルが塊内を伝搬する速度が遅くなるため、ここまで画像が複雑になると８近傍処理の方が処理速度が速くなっている。しかしながら、いずれにしても、本発明に係る手法（ａ３）、（ａ４）ではいずれも、単純な画像と変わらない処理時間で処理が完了している。この例でも、実施形態２は、実施形態１と変わらない処理時間で８近傍ラベリングが可能なことが分かる。
【０１０８】
このように、本実施形態によれば、従来技術よりもはるかに速い処理速度で、しかも４近傍ラベリングを行う実施形態１の場合とほとんど変わらぬ速度で、８近傍ラベリングを実現することができる。しかも、その処理に要する時間は、画像の複雑さにあまり影響されず、ある程度複雑な画像でも高速に処理することができる。これにより、画像処理のリアルタイム性を一層高めることができる。このようなラベリングの高速化により生じる時間の余裕により、これまで処理時間の観点から見送っていた他の処理に時間を割くことも可能になると考えられる。
【図面の簡単な説明】
【図１】  本発明に係る画像処理装置の概略構成図である。
【図２】  実施形態１のラベリング処理部の全体処理手順を示すフローチャートである。
【図３】  １つの塊（連結成分）をラベリングする処理の手順を示すフローチャートである。
【図４】  図３の手順における１ラインの走査処理の手順を示すフローチャートである。
【図５】  １ラインの走査のうち、走査開始座標から右方向への走査処理の手順を示すフローチャートである。
【図６】  隣接ラインの走査開始座標をスタックに登録する処理の手順を示すフローチャートである。
【図７】  １ラインの走査のうち、走査開始座標から左方向への走査処理の手順を示すフローチャートである。
【図８】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図９】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１０】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１１】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１２】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１３】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１４】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１５】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１６】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１７】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１８】  具体的な２値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図１９】  本発明を応用した侵入者検知装置の構成を示す図である。
【図２０】  複雑に分岐した連結成分を含んだ画像の例を示す図である。
【図２１】  従来手法と実施形態の手法の処理時間の比較実験に用いた画像を示す図である。
【図２２】  ８近傍連結性のある画像の例を示す図である。
【図２３】  実施形態２のラベリングの全体処理手順を示すフローチャートである。
【図２４】  ラベル付画像用メモリの初期化処理の手順を示すフローチャートである。
【図２５】  実施形態２における右方向への走査処理の手順を示すフローチャートである。
【図２６】  実施形態２における左方向への走査処理の手順を示すフローチャートである。
【図２７】  フラグ調整処理の手順を示すフローチャートである。
【図２８】  各実施形態の手法の効果の検証に用いた画像の例を示す図である。
【図２９】  図２８の画像に対する従来手法及び各実施形態の手法によるラベリングの処理時間の計測結果を示す図である。
【符号の説明】
１０  ラベリング処理部、１２  スタック、１４  面積カウンタ、１６  Ｘカウンタ、１８  Ｙカウンタ、２０  ２値画像用メモリ、３０  ラベル付画像用メモリ。
【図１】
0003840025.tif 000002
【図２】
0003840025.tif 000003
【図３】
0003840025.tif 000004
【図４】
0003840025.tif 000005
【図５】
0003840025.tif 000006
【図６】
0003840025.tif 000007
【図７】
0003840025.tif 000008
【図８】
0003840025.tif 000009
【図９】
0003840025.tif 000010
【図１０】
0003840025.tif 000011
【図１１】
0003840025.tif 000012
【図１２】
0003840025.tif 000013
【図１３】
0003840025.tif 000014
【図１４】
0003840025.tif 000015
【図１５】
0003840025.tif 000016
【図１６】
0003840025.tif 000017
【図１７】
0003840025.tif 000018
【図１８】
0003840025.tif 000019
【図１９】
0003840025.tif 000020
【図２０】
0003840025.tif 000021
【図２１】
0003840025.tif 000022
【図２２】
0003840025.tif 000023
【図２３】
0003840025.tif 000024
【図２４】
0003840025.tif 000025
【図２５】
0003840025.tif 000026
【図２６】
0003840025.tif 000027
【図２７】
0003840025.tif 000028
【図２８】
0003840025.tif 000029
【図２９】
0003840025.tif 000030