JP3840025B2 - 画像処理方法 - Google Patents
画像処理方法 Download PDFInfo
- Publication number
- JP3840025B2 JP3840025B2 JP2000008783A JP2000008783A JP3840025B2 JP 3840025 B2 JP3840025 B2 JP 3840025B2 JP 2000008783 A JP2000008783 A JP 2000008783A JP 2000008783 A JP2000008783 A JP 2000008783A JP 3840025 B2 JP3840025 B2 JP 3840025B2
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- labeling
- label
- stack
- line
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Image Analysis (AREA)
Description
【発明の属する技術分野】
本発明は画像処理方法に関し、特に画像のラベリング処理に関する。
【0002】
【従来の技術】
画像処理の重要な分野として、画像に基づく対象物認識がある。画像からの対象物認識では、画像から所望の対象物の部分を切り出し、この対象物部分の画像としての特徴量を求め、この特徴量から認識を行う。この画像からの対象部分の切出しには、一般に画像の2値化及びラベリングの技術が利用されることが多い。
【0003】
2値化は、濃淡画像の各画素の画素値をしきい値と比較し、しきい値より大きいか小さいかで各画素を分類する処理である。しきい値を適切に選んで2値化を行うことにより、対象となる部分を抽出できる。ラベリングは、2値化画像において、連結成分、すなわち注目する画素値(白又は黒のいずれか)を有し互いに連結した画素群、を抽出し、各連結成分にそれぞれ識別のためのラベルを付与する処理である。ラベリングには、自画素の上下左右の隣接4画素との連結性を考慮する場合(4連結性)と、さらに斜め方向の隣接4画素を加えた周囲8画素との連結性を考慮する場合(8連結性)とが一般に知られている。このラベリング処理により、2値化画像中の注目画素値を有する各画素を、互いに連結した画素の塊(連結成分)に分けることができる。このように求めた各連結成分が認識の対象となり、各連結成分毎にその特徴量が求められる。
【0004】
例えば、監視カメラの画像から侵入者を検知するシステムとして、現在の画像とその直前の画像との差分画像を求め、その差分画像を2値化・ラベリングして各連結成分を求め、それら各連結成分の面積や重心から侵入者の有無を判定するものが知られている。
【0005】
従来の一般的なラベリング処理として次のような手順が知られている。この手順では、まず画像の左上隅から右下隅に向かってラスタ走査により各画像を調べ、注目画素値を有する画素に仮のラベルを付与し、この走査が終わると、今度は逆に右下隅から左上隅にラスタ走査を行って仮ラベルを調整する。そして、更に右上隅から左下隅に向かってラスタ走査を行うことにより、仮ラベルの再調整をする。
【0006】
例えば4連結性により連結を判断する場合、上記手順の最初のラスタ走査では、注目画素値を持つ画素を検出すると、その画素をラベリング対象とし、その画素の上及び左の隣接画素と同じラベルを仮ラベルを付与する。上及び左の隣接画素のどちらにもラベルが付されていない場合は、ラベルリング対象の画素には新たなラベルを付与する。次の右下隅から左上隅へのラスタ走査では、仮ラベルを付与した画素を検出すると、その画素のラベルを下及び右の隣接画素のラベルに合わせる。下及び右の隣接画素のどちらにもラベルが付されていない場合は、元の仮ラベルをそのまま最終的なラベルとする。そして、最後の右上隅から左下隅への走査では、仮ラベルを付与した画素を検出すると、その画素のラベルを上及び右の隣接画素のラベルに合わせるように調整する。
【0007】
最初の走査では、同じ連結成分に属する画素に一般に異なる仮ラベルが付されるが、中盤及び最後の走査により、連結成分が比較的単純な形状ならば、同じ連結成分に属する画素はすべて同じラベルを持つようになる。
【0008】
【発明が解決しようとする課題】
しかしながら、上記従来処理は、連結成分の形状が複雑になると正しいラベリングができない可能性がある。例えば、図20に示したような多数の枝分かれを含む複雑な形状の連結成分100は、上記従来処理では同じラベルを付与することができない。このような複雑な形状についても正しいラベリングを行おうとすると、更に走査の方向を増やすなどの対応が必要となり、処理時間が長くなってしまう。
【0009】
また、上記従来のラベリング処理は、仮ラベルを順次調整していくことで、最終的に1つの連結成分に属する画素に同一のラベルを与えるようにするものなので、全画面についてラベルの調整が完了した段階では、各連結成分(例えば白画素の塊)に与えられたラベルが飛び飛びの値になる可能性が高い。このため、連結成分の総数が知りたければ、ラベルを連番に直す処理が必要となり、そのための処理時間が必要となる。
【0010】
また、上記従来のラベリング処理では、すべてのラスタ走査が完了するまで各画素の最終的なラベルが決定されない。このため、ラベリングの後に行う連結成分の面積や重心などの特徴量は、後半の走査が完了するまで行うことができなかった。したがって、上記従来のラベリング処理は、高速な対象物認識を要求される応用分野には不向きであった。
【0011】
本発明はこのような問題点を解決するためになされたものであり、複雑な形状の画像も比較的高速にラベリング処理できる方法を提供することを目的とする。また、本発明の更なる目的は、ラベリング処理における連結成分の特徴量を高速に求めることができる方法を提供することである。
【0012】
【課題を解決するための手段】
第1の発明に係る画像処理方法では、画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップとを繰り返すことにより、画像内の注目画素値を持つ画素の各連結成分にラベリングを行う。ここで、ラベル付与ステップでは、ラベル付け始点画素をライン始点とするステップ(a)と、ライン始点を最初の対象画素とし、対象画素を右及び左のうち所定の一方向に順次1画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素をスタックに追加するステップ(b)と、このステップ(b)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、ラベル付け始点画素から前記ステップ(b)とは逆方向に順次対象画素を1画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加するステップ(c)と、このステップ(c)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ(b)及び(c)を実行するステップ(d)と、前記スタックから画素がなくなるまで上記ステップ(d)を繰り返すステップ(e)とを含む。
【0013】
この方法では、画像のライン方向に順次画素の連結性を調べてラベリングを行い、この際にラベリングした画素と連結した隣接ラインの画素をスタックに登録し、そのラインの連結成分のラベリングが完了すると、次にスタックから画素を取り出してその画素を始点として同じ手順を繰り返す。このようにライン上を一画素ずつ連結性を調べると共に、その画素の上下(すなわち隣接ライン)の連結性を持つ画素をもれなく調べ、ラベリング開始点の候補としてスタックするので、注目画素値を有する画素の塊(連結成分)に属する画素をもれなく検出し、同一ラベルでラベリングすることができる。したがって、多数の分岐を含む複雑な形状の連結成分でも正確にラベリングすることができる。また、この方法によれば、1つの連結成分ごとに順にラベリングを行っていくことになるので、画像全体のラベリングが終了した段階では、各連結成分のラベルは必ず連番になる。
【0014】
第2の発明では、ラベル付与ステップは、ラベル付け始点画素をライン始点とするステップ(a)と、ライン始点を最初の対象画素とし、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、対象画素を右及び左のうち所定の一方向に順次1画素ずつ移動させながらその都度対象画素及びその上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合はその隣接画素をスタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップ(b)と、ステップ(b)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、ラベル付け始点画素から前記ステップ(b)とは逆方向に順次対象画素を1画素ずつ移動させその都度対象画素その上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップ(c)と、ステップ(c)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ(b)及び(c)を実行するステップ(d)と、前記スタックから画素がなくなるまで上記ステップ(d)を繰り返すステップ(e)と、を含み、画像の全画素について走査が終わるまで前記始点検出ステップ及びラベル付与ステップを繰り返す。
【0015】
この方法では、走査の対象画素の隣接画素スタックする際に、その対象画素がラベル付けされるか否かによらず、隣接画素がラベル条件を満足するか否かのみでスタックするか否かを判断するようにした。これにより、8連結における斜め方向の連結の場合も正しくスタックすることができるので、8連結成分のラベリング処理を実現することができる。また、この方法は、上記第1の発明に係る方法とほぼ同じ計算量で、8近傍ラベリングを実現することができる。
【0016】
本発明の好適な各態様では、ラベリングと並行してラベリングした画素の数や座標を集計することにより、同一ラベルの画素連結成分の面積や重心などの特徴量を計算することができ、高速な特徴量計算が可能になる。
【0017】
また、本発明の好適な態様では、スタックから取り出した画素がラベル未付与か否かを判定し(前記ラベル条件の判定)、ラベル付与済みである場合の回数をカウントすることにより、注目画素値の連結成分中の穴(注目画素値以外の画素の領域)の数を求めることができる。
【0018】
また本発明に係る方法は、画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、を含み、前記ラベル付与ステップは、ラベル付け始点画素をライン始点とする開始ステップと、前記ライン始点を含むライン上の画素を1画素ずつ走査し、前記ライン始点に対して連結性を有し前記ラベル条件を満足する画素を見つける毎に前記ラベルを付与すると共に、その走査ラインの上下の隣接ラインにおいて、その走査ラインの画素に対して前記ラベル条件を満足する画素を連結候補画素として所定の記憶手段に記憶するライン走査ステップと、前記ライン走査ステップにおいて前記走査ライン上でのラベル付け処理が完了すると、前記記憶手段から連結候補画素を1つ取り出し、これを新たなライン始点として前記ライン走査ステップを反復する走査反復ステップとを含む。
【0019】
この方法でも、走査対象のラインの隣接ラインにおけるラベル条件を満足する画素をスタックに追加し、ライン走査が終わった後そのスタックから次のラインの走査開始点を取り出してラベリングのためのライン走査を行う。このような処理により、複雑な図形でも1回の走査で(すなわち従来技術のように仮ラベルの付け直しのための走査を何度も繰り返すことなく)、高速にラベリングを行うことができる。
【0020】
【発明の実施の形態】
以下、本発明の実施の形態(以下実施形態という)について、図面に基づいて説明する。
【0021】
<実施形態1>
[装置構成]
図1は、本発明に係る画像処理装置の概略構成を示す機能ブロック図である。本実施形態では、2値画像用メモリ20に記憶された2値画像に対し、ラベリング処理部10によりラベリング処理を行い、その結果をラベル付画像用メモリ30に書き込んでいく。ラベリング処理部10は、ラベリングのための制御情報記憶手段としてスタック12を用いる。このスタック12は、後入れ先出し(LIFO)方式のデータ構造である。本実施形態では、2値画像において1ラインずつラベリングを進めていくが、このスタック12にはそのラインのラベリングの際に求めた次のラインのラベリング処理の始点画素の座標情報を登録する。このスタック12の詳細な利用法については、後の処理手順の説明にて詳細に述べる。また、ラベリング処理部10は、ラベリング処理と平行して、面積カウンタ14、Xカウンタ16及びYカウンタ18を用いて、ラベリングした各連結成分(すなわち注目する画素値を持つ互いに連結した画素の塊)の面積や重心を計算する。
【0022】
[全体処理手順]
次に図2を参照して、本実施形態の画像処理装置の全体処理手順を説明する。以下の処理は、ラベリング処理部10によって行われる。
【0023】
本実施形態のラベリング処理において、まずラベリング処理部10は、付与すべきラベルの値nを0に初期化する(ステップS10)。本実施形態では、ラベルとして続き番号を用いている。
【0024】
ラベル値nを初期化すると、ラベリングすべき注目画素値の画素の塊を見つけるための画像走査を行う。以下では、2値画像を構成する白黒の2値のうち、「白」を注目する画素値とし、白画素の塊をラベリングするものとする。
【0025】
本実施形態では、この走査は、画像の左上隅から右下隅に向かって、ラスタ走査順序に従って行う。この走査のため、まずラベリング処理部10は、鉛直座標yの値を0に初期化する(ステップS12)。この鉛直座標yは、走査対象の画像ラインに対し、上から順に付けた番号である。本実施形態では、図8に示すように、画像の座標系として、水平方向右向きに水平座標x、鉛直方向下向きに鉛直座標yをとり、画像の左端のカラム(列)のx座標を0、上端のライン(行)のy座標を0としている。鉛直座標yを初期化すると、以降ステップS14からS26までの処理ループで、鉛直方向についての走査が制御される。ステップS16では、水平方向の走査のために、水平座標xが0に初期化される。そして、ステップS18からS24までの処理ループで、水平方向についての走査が制御される。このような走査に従って、2値画像用メモリ20に格納された2値画像の各画素がラスタ走査順序で調べられる。
【0026】
ステップS20では、走査において調査対象に選んだ点(x,y)がラベル未付与の白画素であるか否かを判定する。図では肯定判定をTRUE(真)、否定判定をFALSE(偽)と表している。この判定結果が肯定(TRUE)の場合、ラベルnの値を1だけインクリメントし(ステップS22)、この点(x,y)を起点とする白画素の塊(連結成分)に対し値nのラベルを付与する処理(ステップS100)を実行する。このステップS100の処理については、後に図3を参照して詳しく説明する。そして、ステップS24にて水平座標xの値を1インクリメントすることにより調査対象を右に1つ移動し、ステップS18に戻る。一方、ステップS20の判定結果が否定(FALSE)の場合は、何も行わずにステップS24に進み、調査対象の画素を右に1つ移動してステップS18に戻る。
【0027】
このようにして処理を進め、ステップS18で調査対象の画素が画像の右端を超えたことが分かると、ステップS26で鉛直座標yを1だけインクリメントし、ステップS14に戻り、次のラインについてステップS16からS24の処理を繰り返す。そして、ステップS14で調査対象のラインが画像の下端を超えたことを検知すると、一連のラベリング処理が完了したことになる。
【0028】
以上の処理手順によれば、画像左上隅から右下隅に向かうラスタ走査順序に従い各画素が調べられ、ラベル未付与の白画素が検出されると、その画素を起点とした連結成分のラベル付け処理(ステップS100)が行われることになる。ステップS100により1つの連結成分についてのラベル付けが終わると、ラスタ走査順序に従い、ラベル未付与の連結成分の起点となる白画素の探索が行われる。
【0029】
以上の手順から分かるように、ステップS20で見つけられるラベル未付与の白画素は、1つの白画素の連結成分(塊)の中の最上ラインの左端の画素である。この画素を始点として、1つの連結成分をラベリングするためのサブルーチン、すなわちステップS100の処理が実行される。次に、このステップS100の処理手順を説明する。
【0030】
[連結成分のラベリング]
図3に、ステップS100の詳細な処理手順を示す。この手順では、まず準備として、図2に示したメインルーチンから、ステップS20で検出された連結成分の始点の座標(xi,yi)、及びステップS22で求められたラベル値nを取得する(S102)。例えば、最初に見つけられた始点(xi,yi)のラベル値nは、ステップS22によれば1となる。以下の手順では、この始点の画素に連結する白画素が順次検出され、ラベルnが付与されていく。
【0031】
このため、まず始点の座標(xi,yi)を制御用のスタック12(図1参照)に追加する(ステップS104)。本実施形態ではラベリング処理と並行して白画素の連結成分の面積や重心の計算を行うが、そのために用いる面積カウンタ14(面積S)、Xカウンタ16(Gx)、Yカウンタ18(Gy)の初期化をステップS106で行う。そして、以降、そのスタックに画素座標のデータがエントリされている間、ステップS108からS114の処理ループが繰り返される。
【0032】
この処理ループでは、まずスタック12の先頭のエントリ(すなわち最後に積まれた画素座標)を取り出し、これを走査開始座標(x0,y0)にセットする(ステップS110)。そして、ステップS112で点(x0,y0)がラベル未付与の注目画素値(この場合は「白」)の画素かを判定する。なお、図及び以下の説明では、表現の簡素化のため、点(x,y)の画素がラベル未付与の注目画素値の画素であるかどうかの条件判断をK(x,y)と表記する。点(x,y)がラベル未付与の注目画素値の画素である場合には、この結果はTRUE(真)、そうでない場合にはFALSE(偽)となる。
【0033】
ステップS112の処理結果がTRUEの場合は、走査開始座標(x0,y0)を始点として、ライン方向に画素を走査してラベリングを実行していく(ステップS200)。このステップS200によれば、走査開始座標(x0,y0)の画素が属する画像ラインのうちその画素に連結性を有する各画素にラベルnが付与されるとともに、そのラインの上下の隣接ラインの走査開始座標の候補となるものが求められ、それがスタック12に追加されることになる。またこのとき、白画素の塊の面積や重心を求めるためのカウンタ14、16及び18のカウントアップも行われる。なお、このステップS200の詳細な処理手順は後に詳しく説明する。ステップS200の処理が完了すると、ステップS108に戻り、スタック12から最新に追加されたエントリを取り出して以上の処理を繰り返す。
【0034】
さて、ステップS112の処理結果がFALSEになるのは、スタック12に積まれた座標の画素が、スタック12から取り出される(ステップS108)前にラベル付けされてしまっている場合である。後に具体例を挙げて説明するが、簡単に言えば、連結した白画素の塊の中に穴(黒画素)がある場合、このようなことが起こる。この場合、その座標の属するラインについてはラベリングが終わっているので、何もせずにステップS108に戻る。
【0035】
このような処理を繰り返した結果スタック12のエントリがすべてなくなると、始点(xi,yi)から始まる白画素の連結成分に属する全画素についてラベルnの付与が完了したことになる。
【0036】
このときの面積カウンタ14(S)のカウント値がその連結成分の面積Sであり、Xカウンタ16及びYカウンタ18のカウント値をその面積Sで除した値が、それぞれその連結成分の重心のx座標(Gx)及びy座標(Gy)となる。本実施形態では、ステップS114で、ラベリングした連結成分の重心座標(Gx、Gy)を計算し、これを連結成分の面積Sの値と共に、所定の記憶手段に格納する(ステップS116)。
【0037】
以上の処理が完了すると、ステップS100の処理が終わり、制御が図2のメインルーチンに戻されて、次の白画素の塊(連結成分)の開始座標が探索される。
【0038】
[ライン走査]
次に、ステップS200のライン走査処理の詳細な処理手順を説明する。この処理は、図4に示すように、ステップS110でスタック12から取り出された走査開始座標(x0,y0)の画素から、当該ラインを右方向に走査して連結画素のラベリングを行っていく処理(ステップS210:右方向処理)と、その画素から当該ラインを左方向に走査して連結画素をラベリングする処理(ステップS250:左方向処理)を含んでいる。以下、それら各処理の内容を説明する。
【0039】
右方向処理(ステップS210)の詳細手順を図5に示す。この処理では、まず2つのフラグF1及びF2の値をFALSEに初期化(リセット)する(ステップS212)。これらのフラグは、ステップS300の隣接ラインの開始点をスタック12に登録する処理において用いるものであり、その機能についてはステップS300の処理の説明の際に詳しく述べる。
【0040】
次にステップS214で、水平座標xに走査開始座標のx座標値x0をセットする。以降、ステップS216でxが2値画像の幅以上になった(すなわち画像の右端に達した)ことが検知されるまで、ステップS224で水平座標xを1ずつインクリメントしながら、ステップS216からS224の処理ループを繰り返す。
【0041】
この処理ループでは、点(x,y0)がラベル未付与の注目画素値の画素か否かを判定し(K(x,y0))(ステップS218)、この結果がTRUEの場合は、点(x,y0)の画素に値nのラベルが付与される(ステップS220)。
【0042】
この処理ループに進入した最初の時点では、x=x0なので、ステップS220では、スタック12から取り出された走査開始座標(x0,y0)の画素について条件判定K(x,y)が適用されることになるが、この画素はステップS112でTRUE判定を受けたものと同じものなので、ここでの処理結果もTRUEとなり、走査開始座標の画素にラベルnが付与されることになる。以降、この処理ループでは、検査対象となる画素の座標が、ライン上を順次右方向に1画素ずつシフトされ(ステップS224)、その検査対象画素がラベル未付与の白画素かがステップS218で検査される。ステップS218の結果がFALSEになるとこの処理ループを抜けるので、逆に言えばこの処理ループが繰り返されている間は、検査対象の画素は、走査開始座標の画素に対し、ライン上でラベルnの画素のみを介してつながっていることになる。したがって、ステップS218の結果がTRUE(すなわち検査対象画素がラベル未付与かつ白画素)の場合は、その検査対象画素は走査開始座標の画素に対して連結性を有していることが保証されるので、その検査対象画素に対してラベルnを付与してよいことになる。
【0043】
ステップS102においてセットされたラベル付けの始点(xi,yi)の属するラインについて、そのライン上でその始点に連結性を有する画素に、その始点と同じラベルnを付与されることは以上の説明から理解されよう。その他のラインについては、スタック12に積まれた座標の画素から処理が開始されるが、その開始画素は、後で説明するスタック12への座標追加処理(ステップS300)の方法から、隣接ラインのラベルnを付与済みの画素に連結性を有していることが保証される。したがって、その開始画素及び同一ライン上の連結性を有する画素には、やはりラベルnを付与してよいことになり、実際、ステップS108にてスタック12から開始画素を取り出した後、図5の処理ループ(ステップS216からS224)の実行により、それら各画素にラベルnが付与されることになる。
【0044】
さて、ステップS220で検査対象の画素(x,y0)にラベル付けをすると、これと並行して、白画素の連結成分の面積を求めるため面積カウンタ14(S)のカウント値を1だけインクリメントすると共に、その連結成分の重心を求めるためにラベル付けした画素の水平座標xと鉛直座標y0を、Xカウンタ16(Gx)とYカウンタ18(Gy)のカウント値にそれぞれ加える(ステップS222)。
【0045】
そしてこの後、隣接ラインの走査開始点をスタック12に登録するための処理を行う(ステップS300)。
【0046】
図6を参照して、このステップS300の処理手順を説明する。この処理では、検査対象の画素(x,y0)の上下の隣接画素が隣接ラインの走査開始点に適するか否かを判断し、適する場合にはその隣接画素の座標をスタック12に追加する。この処理において、ステップS302からS310までは上の隣接画素に関する処理であり、ステップS312からS320までが下の隣接画素に関する処理である。これら両者はいずれを先に行ってもよい。
【0047】
図示の順に説明すると、まずステップS302では、検査対象の画素(x,y0)の上の隣接画素(x,y0−1)について判定K(x,y)を適用し、その隣接画素がラベル未付与の白画素か否かを判定する。この判定結果がTRUEの場合、その隣接画素は検査対象画素に連結性を有していることになる。ここで検査対象画素自体にはラベルnが付与されているので、その隣接画素が検査対象画素に連結性を有していれば、その隣接画素もラベルnを付与されるべき画素であるといえる。本実施形態では、基本的に、そのようなラベルnを付与すべき隣接画素を、隣接ラインの走査開始点としてスタック12に登録する。
【0048】
ただし、そのような隣接画素すべてをスタック12に登録したのではスタックのサイズが大きくなり、またスタック12からの画素取り出し処理の負荷が増えるので、本実施形態ではこれを避けるため、スタック12に登録する画素を絞り込んでいる。前述のフラグF1及びF2はこの絞り込みのために用いている。F1は上隣の隣接画素用、F2は下隣の隣接画素用である。
【0049】
ステップS302で検査対象画素の上の隣接画素がラベル未付与の白画素と分かった場合、フラグF1の現在値がFALSEであるか否かを判定する(ステップS304)。そして、F1がFALSEの場合にのみ、その隣接画素の座標(x,y0−1)をスタック12に追加する(ステップS306)。そして、F1の値をTRUEにセットする(ステップS308)。
【0050】
前述のステップS212でフラグF1はFALSEに初期化されているので、ライン走査処理(ステップS200)の中で最初にこのステップ304を通過する際には、F1は必ずFALSEである。したがって、そのラインの走査開始画素(x0,y0)の上の隣接画素がラベル未付与の白画素であれば、その隣接画素は必ずスタック12に登録される。こうして、いったん上の隣接画素がスタック12に登録されると、ステップS308でフラグF1がTRUEにセットされ、F1がTRUEである間は、上の隣接画素(x,y0−1)は、ラベル未付与の白画素であってもステップS304の判定により、スタック12に登録されないことになる。したがって、例えば最初に走査開始画素(x0,y0)の上の隣接画素をスタック12に登録した後、その上の隣接画素から同一ライン上を右方向に白画素が連続している場合でも、それら白画素はスタック12に登録されない。フラグF1がTRUEからFALSEにリセットされるのは、ステップS302で上隣接画素(x,y0−1)がラベル未付与の白画素でない(すなわち黒画素か又はラベル付与済みの画素)と判定された場合である(ステップS310)。F1がFALSEにリセットされた後、再びラベル未付与の白画素である隣接画素(x,y0−1)が見つかると(ステップS302)、その隣接画素はスタック12に追加される(ステップS306)。
【0051】
以上、検査対象画素の上の隣接画素についてのスタック処理を説明したが、下の隣接画素もこれと全く同様スタック処理される。すなわち、まずステップS312で下の隣接画素(x,y0+1)がラベル未付与の白画素かが判定され、この判定結果がTRUEの場合、ステップS314でフラグF2がFALSEか否かが更に判定され、F2がFALSEである場合にのみ、その画素(x,y0+1)がスタック12に登録される(ステップS316)。そして、スタック12への登録がなされると、ステップS318でフラグF2はTRUEにセットされる。いったんTRUEにセットされたフラグF2は、走査が進んでステップS312で下の隣接画素(x,y0+1)がラベル未付与の白画素でなくなると、FALSEにリセットされる(ステップS320)。
【0052】
以上、図6を参照してスタック12への画素座標の登録処理について説明した。図6には示さなかったが、ステップS302やS312で検査対象画素の上隣や下隣の画素を参照する際、誤って2値画像の外の値を読み込まないようにするためのエラー回避処理を行っていることは言うまでもない。
【0053】
このようにして、検査対象画素(x,y0)の上下の隣接画素についてのスタック処理が完了すると、ステップS224で検査対象画素の水平座標xを1だけインクリメントし、検査対象画素を1つ右にずらしてステップS216からS224の処理を繰り返す。このようにして、検査対象画素が2値画像の左端を超えてしまったり(ステップS216)、検査対象画素がラベルnを付すべき画素でなくなったり(ステップS218の結果がFALSE)すると、右方向処理(ステップS210)が完了し、左方向処理(ステップS250)に移る。
【0054】
左方向処理(ステップS250)は、図7に示す手順に従って行われる。この処理は、走査開始座標(x0,y0)の左隣の画素から処理を開始し、当該ライン上を左方向に走査していくことを除けば、前述の右方向処理と全く同じ内容の処理を行う。
【0055】
この処理では、まずステップS252で、フラグF1をK(x0,y0−1)の判定結果に、F2をK(x0,y0+1)の判定結果に、それぞれ初期化する。ここでは、走査開始座標(x0,y0)の上隣及び下隣の画素に合わせてフラグを初期化しているわけである。次にステップS254で水平座標xがx0−1に初期化されることにより、走査開始座標の左隣の画素が最初の検査対象画素に選ばれることになる。以降、ステップS256にて水平座標xが0より小さくなったことが検出されるまで、ステップS264にて順次水平座標が1ずつデクリメントされ、これにより検査対象画素を1つずつ左方向にずらしながら、右方向処理の場合と同様のラベル付け及びスタック処理(ステップS218〜S300)が行われる。
【0056】
このようにして左方向処理(ステップS250)が完了すると、1ラインについてのラベリング処理(ステップS200)が完了し、図3の処理の流れに戻ってスタック12から次の走査開始座標を取り出して、同じ処理を繰り返す。
【0057】
以上、本実施形態のラベリング処理部10の処理手順を説明した。以上の手順では、点(x,y)上の画素がラベル未付与かつ注目画素値か、という条件判定K(x,y)を各所で行ったが、この処理は、ラベル付画像用メモリ30に対して次のような初期化処理を実行することにより簡略化できる。この初期化処理では、2値画像用メモリ20から各画素の値を読み出し、その画素が注目画素値であるか否かに応じて、それぞれ異なる仮ラベルを与えてラベル付画像用メモリ30に書き込む。この際に用いる仮ラベルには、最終的なラベリングには使用しない値(例えば自然数の連番でラベリングする場合は、0や−1など)を用いる。好適な例としては、注目画素値の画素には“−1”の仮ラベル、注目画素値でない画素には“0”の仮ラベルを与える。このようにすれば、図2のステップS20、図3のステップS112、図5のステップS218などにおけるK(x,y)の条件判定が、結局その点(x,y)のラベル値が“−1”であるか否かの判定になる。すなわち、点(x,y)が“−1”であれば、ラベル未付与かつ注目画素値であるからである(注目画素値でなければラベル値は“0”であるし、ラベルが既に付与されていればラベル値は“−1”ではない)。
【0058】
[処理具体例]
次に、具体的な2値画像の例を参照して、その処理手順の実行の様子を説明する。
【0059】
2値画像の具体例として、図8に示す画像を考える。図8では、黒塗り正方形が黒画素、白抜き正方形が白画素を示し、中に数字を含む白抜き正方形はラベル付けされた白画素を示す。中の数字がラベルの値である。そして、ハッチングが付された四角形は、スタック12に座標が登録された白画素を示すものとする。
【0060】
図8の状態は、ラベル1の連結成分(白画素の塊)についてラベル付与が終わり、ステップS20にて次のラベル付け始点が検出され、その始点をステップS104でスタック12に登録した時点の様子を示している。すなわち、スタックには座標(12,2)が積まれており、以降、この座標の画素を始点として、この画素に連結する画素のラベリングが行われる。
【0061】
この場合、まずスタック12から座標(12,2)が取り出され(ステップS110)、これはラベル未付与の白画素なので、新たなラベル2が付与される(ステップS220)。この画素の上隣と下隣のうち、後者はラベル未付与の白画素なのでその座標(12,3)がスタック12に積まれる(ステップS316)。そのラベル付け始点(12,2)の左隣の画素を調べると、その画素(13,2)はラベル未付与の白画素なので、ラベル付け始点と同じラベル2が付与される(ステップS220)。この画素の下隣の画素(13,3)は、ラベル未付与の白画素であるが(ステップS302)、先ほど座標(12,3)をスタック12に積んだときにフラグF2がTRUEにセットされているので、スタック12へは登録されない。図9はこの時点の様子を示す。
【0062】
更に処理を進め、y=2のラインについての走査が終わった時点では、ラベル付けの状態は図10に示すようになる。ラインの走査が完了したので、次にスタック12から先頭のエントリ、すなわち座標(12,3)を取り出し(ステップS110)、この座標を起点としてy=3のラインについての走査を行う。ここではまずラインの始点(12,3)にラベル2が付与される。その下隣(12,4)はラベル未付与の白画素なので、スタック12に積まれる。ラインの始点(12,3)から右方向に処理を進めていくと、検査対象画素が(15,3)に達した時点でその画素の下隣(15,4)が黒画素となり、フラグF2がFALSEにリセットされる(S320)。その後、検査対象画素が(19,3)に達した時点では、その下隣(19,4)はラベル未付与の白画素であり、しかもこの時点ではフラグF2はFALSEなので、座標(19,4)がスタック12に積まれることになる(ステップS316)。この時点のラベリング状態を図11に示す。
【0063】
以降、処理を進め、y=3のラインの走査が完了した時点では、ラベリング状態は図12に示すようになる。この時点では、スタック12には上から順に座標(19,4)、(12,4)が積まれている。これは、y=4より下では白画素の連結成分が、画素(19,4)に連結している部分と、画素(12,4)に連結している部分の2つに分岐していることを示している。
【0064】
次は、スタック12から後に積まれた座標(19,4)が取り出され、この座標をライン始点として走査(ラベリング)が行われることになる。以降、上記の処理の繰り返しにより、2分岐した連結成分のうち画素(19,4)に連結した白画素にラベル2が付与されていく。y=7のラインまで処理が完了した時点のラベリング状態を図13に示す。
【0065】
次は、座標(20,8)がスタック12から取り出され、この点を始点としてy=8のラインのラベリング走査が行われる。この走査により、新たに座標(20,9)、(15,7)、(9,9)がこの順番でスタック12に積まれる。y=8のラインの走査が終わった時点のラベリング状態を図14に示す。
【0066】
次にスタック12から座標(9,9)が取り出され、この点から下に向かってラベリングが行われていく。そして、(9,9)から下の連結成分の白画素すべてにラベル付けが終わると、次にスタック12から座標(15,7)が取り出され、この点から上に向かってラベリングが行われていく。図15は、この上向きのラベリング走査がy=6のラインまで完了した時点のラベリング状態を示している。
【0067】
図16は、更にもう1ライン上までラベリングが完了した時点の状態を示す。この時点では、スタック12の先頭には座標(13,4)が積まれている。したがって、次は、この点(13,4)を始点としてy=4のラインについてラベリングが行われる。図17は、この処理結果を示している。この処理により、スタック12の一番下に積まれている座標(12,4)の画素にラベル2が付与される。図17では、このことを白抜きラベルの四角形で表している。この処理では、新たにスタック12に積まれる座標はない。
【0068】
次に、スタック12の先頭の座標(20,9)を取り出し、これを始点として、下方向に向かってこの始点に連結する白画素をラベリングしていく。そして、その始点から下方向の連結成分のすべてにラベル付けが終わると、図18に示す状態となる。この状態では、スタック12には、座標(12,4)の点のみが残っている。最後に、この点をスタック12から取り出す(ステップS110)。この点は既にラベル付けされているので、ステップS112の判定結果はFALSEとなり、ライン走査処理ステップS200は行われない。したがって、スタック12へのエントリの追加が行われないので、結局この結果スタック12が空になる。これにより、ステップS118でループAの終了条件が成立し、ラベル付け始点(12,2)から始まるラベル2のラベリングが完了したことになる。
【0069】
以上の具体例からよく分かるように、各ライン上で互いに連結する白画素の集合をノードと考えると、同一ラベルが付される白画素の塊は、そのノード同士を隣り合うライン同士で接続した多分木構造と考えることができる。本実施形態のラベリング手法は、この多分木を深さ優先探索アルゴリズムに従って探索する処理と等価であることが分かる。本実施形態の手法では、多分木構造のすべての分岐の開始点(ラインの走査開始座標)が確実にスタック12にスタックされるので、4連結の連結成分をもれなく求めてラベリングすることができる。
【0070】
また、本実施形態は、各ライン上で互いに連結する白画素の集合に対し1つの画素(走査開始座標)のみが選択されスタック12に登録される構成である。したがって、スタック12から取り出した画素を調べたとき、それがラベル既付与のものならば、その画素はある方向から(例えば上から)のアプローチで白画素塊の分岐の開始点の候補としてスタックされたものが、逆の方向からのアプローチで既にラベル付けされてしまったことを示し、これはすなわち白画素の塊の中に1つの穴(黒画素領域)があることを示す。したがって、スタック12から取り出した画素がラベル付与済みであった回数をカウントすれば、その結果はラベル付けした白画素の塊の中の穴の個数を求めることができる。穴の個数という位相幾何学的な情報は、対象物認識のための有力な情報となる。
【0071】
[効果]
以上、本実施形態に係るラベリング処理について説明した。本実施形態では、ラインに沿って1画素ずつ連結性を調べると共にその画素の上下の連結性を持つ画素をラベリング開始点の候補(走査開始座標)としてスタックする構成なので、あるラインに注目した場合、そのラインから上あるいは下方向に連結成分が複雑に分岐するとしても、各分岐部分のいずれかの画素が必ずスタックに積まれる。したがって、そのスタックのエントリがなくなるまで処理を繰り返せば、必ずすべての分岐部分について同じラベルが割り当てられることになり、連結成分が複雑な形状でも各画素に確実に同じラベルを付与することができる。
【0072】
また、従来技術では複雑な形状の連結成分に対応するためには様々な方向について走査を行う必要があったため、処理に長い時間を要したが、本実施形態では、複雑な形状についても高速にラベリング処理を行うことができる。
【0073】
例えば、発明者が図21に示す20×25画素の2値画像を用いて行った実験では、白画素連結成分のラベリングについて、従来手法に基づくプログラムと本実施形態の手法に基づくプログラムとでは、処理時間が約4:1(すなわち本実施形態は従来の約4倍の速度)という結果が得られた。なおこの実験は、一般的なパーソナルコンピュータを用いて行ったものである。
【0074】
また、従来技術では画像全体についてのラベリング処理が完了するまで特徴量の算出を待たなければならなかったのに対し、本実施形態では、1つの白画素の塊(連結成分)のラベリングが終了した段階でその塊の面積や重心などの特徴量を求めることができるので、特徴量の算出までを総合して考えれば高速化の効果はさらに高いといえる。特に、侵入者検知など、画像中から特定の条件を満たすものを1つ見つければよいという用途では、高速化の効果はさらに顕著である。
【0075】
なお、以上の例では、ラベリングの対象となる注目画素値を白としたが、本発明は、注目画素値を黒とする場合にも当然適用可能である。
【0076】
[侵入者検知装置]
最後に図19を参照して、本実施形態の画像処理の侵入者検知装置への応用例を説明する。図19において、図1と同様の構成要素には同じ符号を付す。
【0077】
この侵入者検知装置では、監視用のCCDカメラ100からのNTSCコンポジット信号を画像入力部40で受信し、画像入力部40で得た画像を第1原画像用メモリ42及び第2原画像用メモリ44に対し、1フレーム毎に交互に書き込んでいく。差分演算部46では、1フレーム毎に、第1及び第2原画像用メモリ42及び44の画素毎の差分を計算し、その結果を差分画像用メモリ48に書き込む。差分画像用メモリ48に形成された、ある時刻とその1フレーム前の時刻との差分画像は、2値化処理部50にて所定のしきい値を基準に2値化され、その結果が2値画像用メモリ20に書き込まれる。ラベリング処理部10は、2値画像用メモリ20内の2値画像に対し、前述の処理手順に従ってラベリング及び特徴量の計算処理を行い、その結果をラベル付画像用メモリ30に書き込む。なお、この図では、ラベリング処理に用いる制御用のスタックや各種カウンタの図示は省略している。侵入者判定部52は、このラベリング結果や特徴量の計算結果を受け取り、これらのデータから所定の判断基準に従って侵入者の有無を判定する。この判定結果は、侵入者判定装置全体を制御する制御部54に伝えられ、例えば侵入者有りと判定された場合は、この制御部54が所定の警報装置を作動させる。
【0078】
<実施形態2>
[概要]
次に、本発明に係る画像処理の別の実施形態について説明する。上記実施形態1が4連結成分のラベリングであったのに対し、本実施形態では8連結成分のラベリングのための構成を説明する。
【0079】
本実施形態を実現する装置構成は、図1に示した上記実施形態1の装置構成と同様でよく、基本的な処理の手順も実施形態1のものとほぼ同様である。ただ本実施形態では、8連結成分のラベリングを可能とするために、隣接ラインの開始点のスタック処理の仕方を、上記実施形態1の方式から少し変更している。
【0080】
上記実施形態1では、ラインの開始点から1画素ずつ隣を調べてラベリングしていく際、調べる対象の画素にラベリングを行った後、その画素の上下の隣接画素についてスタック処理を行っていた(例えば図5のS218〜S300参照)。この方式では、対象画素がラベル付けされなければ、その上下の隣接画素が、ラベリング開始点の候補としてスタック12(図1)に積まれることはない。この方式は、隣接ラインの走査開始点としてスタックに積まれる画素は、ラベル付けされた画素の上下の隣接画素に限られるので、対象画素の上下左右の4つの隣接画素との連結性を見る4連結成分の方式に合致している。例えば、図22に示すような画像200の場合、実施形態1の方式では、白画素の塊210と塊220とが(4連結性の観点では)非連結と判断され、別のラベルが与えられてしまう。例えば左から右へ、上から下へと画素を走査して連結性を調べていく場合、6ライン目にて(7,6)から順に右方向へと走査していった場合、(9,6)の画素は黒画素なのでラベル条件を満たさず、したがってラベリングが施されない。このため、その下の(9,7)は白画素であるものの、スタック12には追加されない。したがって、ラベリング走査は7ライン目に続くことができず、塊220には、塊210とは別のラベルが与えられることになる。
【0081】
これに対し、8連結成分を考慮する本実施形態2では、図22のようなケースにおいて塊210と220とに同じラベルを与えるために、6ライン目の走査の際に、隣接ラインの(9,7)がスタック12に積まれるようにアルゴリズムを変更する。すなわち、本実施形態では、実施形態1と異なり、ラベリング走査の対象画素にラベルが付与されるか否かによらず、その対象画素の上下の隣接画素がラベル条件を満足すればスタック12に追加するようにする。例えば図22の例で言えば、6ライン目の走査において、対象画素が(9,6)となったとき、その下側の隣接画素(9,7)はラベル条件(ラベル未付与且つ白画素)を満足するので、その画素をスタック12に積む(対象画素がラベル条件を満足するか否かは考慮しない)。ライン走査において対象画素(9,6)の直前の画素(86)までは連結性が保証されており、この画素(8,6)とスタックに積んだ画素(9,7)とは8連結性がある。したがって、スタック12に積んだ画素(9,7)から隣接ラインのラベリング走査を再開すれば、8連結性を満足したラベリングが行える。
【0082】
[処理手順]
次に、フローチャートを参照して本実施形態のラベリング手順を説明する。この手順では、スタック処理を上述の如く変更する以外に、ラベル付画像用メモリ30に対して初期化処理を施すことにより、ラベル条件の判断を容易にしている。
【0083】
図23は、全体的な処理手順のフローチャートである。この手順では、まずラベリング処理対象の2値画像を2値画像用メモリ20に用意し(S50)、この2値画像に応じてラベル付画像用メモリ30を初期化する(S500)。この初期化処理の詳細を図24に示す。
【0084】
ラベル付画像用メモリ30の初期化処理では、まず2値画像を用意し(S502)、走査位置を示す座標のインデックスx、yをそれぞれ0に初期化する(S504)。以降ステップS506からS518までの処理ループで、鉛直方向についての走査が制御され、ステップS508からS516までの処理ループで、水平方向についての走査が制御される。このラスタ走査に従って、2値画像の各画素(x,y)の値B(x,y)を調べていく(S510)。
【0085】
S510でB(x,y)=0(すなわち黒)ならば、ラベル付画像用メモリ30の当該画素(x,y)の値L(x,y)を“0”にセットし(S512)、B(x,y)=0でなければ(すなわち黒画素)であれば、当該画素のラベル値L(x,y)を“−1”にセットする(S514)。
【0086】
すなわち、この例では、白画素の塊に対して自然数(1,2,3,…)のラベルを付与していくため、この初期化処理では、黒画素についてはラベル値“0”を与え、各白画素には仮のラベル値“−1”を与える。この仮のラベル値“−1”は、後に正式のラベル値に置き換えられる。逆に言えば、後のラベリング処理において、ラベル値が“−1”である画素を見つければ、その画素は、ラベル条件(白画素且つラベル未付与)を満足するということが即座に分かり、各画素がラベル条件を満足するか否かの判断が容易になる。
【0087】
このようにしてラベル付画像用メモリ30の初期化が完了すると、ラベル値nを0に初期化し(S52)、走査点の座標インデックスx、yをそれぞれ0に初期化した上で(S54)、ラベル付画像用メモリ30をラスタ走査する(x方向はS58〜S64、y方向はS56〜S66)。この走査は、ラベル未付与の新たな白画素の塊の最初の点を見つけるための走査であり、S60でメモリ30の調査対象画素(x,y)の値L(x,y)を調べ、その値が−1であれば、ラベル未付与の白画素が見つかったということなので、ラベル値nをインクリメントし(S62)、その画素を始点として連結成分のラベル付け処理を行う(S600)。1つの塊のラベル付け(S600)が終わる毎に、S56〜S66の処理ループが繰り返され、画像の最後の画素まで走査が終わると処理が終了する。
【0088】
ラベル付け処理(S600)の詳細な手順は、図3に示した実施形態1の手順とほぼ同様である。ただし、実施形態1では、S112でスタック12から取り出した画素(x0,y0)がラベル条件を満足するかどうかの条件判断K(x0,y0)を行っていたが、本実施形態ではこの代わりに、当該画素のラベル値L(x0,y0)が“−1”であるか否かを調べる。L=−1であればラベル条件を満足するということなのでライン走査処理(S200)に進み、そうでなければスタック12から次の画素を取り出して処理を繰り返す。
【0089】
さて、S200のライン走査処理では、実施形態1と同様右方向処理(S210)と左方向処理(S250)を順に行う(図4参照)。本実施形態における右方向処理と左方向処理の詳細な手順を図25、図26にそれぞれ示す。これらの図において、図5、図7と同様の処理を行うステップについては、同じ符号を付してその説明を省略する。
【0090】
本実施形態の右方向処理(図25参照)は、対象画素(x,y0)がライン条件を満足するか否かを判定する(S232)前に、その対象画素の上下の隣接画素について隣接ライン開始点スタック処理(S300)を実行する点が実施形態1と異なる(実施形態1では、対象画素がライン条件を満足する場合にのみ、その上下の隣接画素についてスタック処理(S300)を行った)。そして、S232の判定で対象画素がライン条件を満足すると判定された場合、その対象画素(x,y0)のラベル値L(x,y0)をnにセットし(S234)、面積や重心の計算のための処理を行う(S224)。
【0091】
なお、本実施形態のスタック処理(S300)の処理内容は、上下隣接画素がライン条件を満たすかどうかの判定(S302、S312)を、それら画素の画素値L(x,y0-1)、L(x,y0+1)が“−1”であるか否かによって判定する点を除いては、図6に示した実施形態1の処理と同様でよい。
【0092】
左方向処理(図26参照)では、まずフラグ調整処理(S270)を行う。このフラグ調整処理の詳細は図27に示される。すなわち、フラグ調整処理では、まずy0(走査中のラインの番号)が0より大きいか否か(すなわち上方に隣接ラインが存在しうるか否か)を判定し(S700)、y0>0であれば上側隣接ラインの開始点画素判定のためのフラグF1にL(x0,y0-1)をセットする。この値L(x0,y0-1)は、現在走査中のラインの始点画素(x0,y0)の上隣の画素のラベル値である。ただし、フラグF1は0,1の2値なので、L=0以外のケースはF1=1になる。このS702により、ライン始点画素の上隣画素がL=0である時のみ、F1=0(FALSE、すなわちリセット状態)となり、それ以外のケースではF1=1(TRUE)となる。
【0093】
L(x0,y0-1)=0ということは、ライン始点の上隣画素(x0,y0-1)がラベル条件を満足していないことを意味し、これは言い換えれば、走査中のラインの上隣ラインのラベル条件を満足する画素は、少なくとも(x0,y0-1)で連結を切断されていることを意味する。したがって、ここでF1をFALSEにリセットすることで、以降の左方向のライン走査において最初に見つかる上隣ラインのラベル条件満足画素をスタックに積むことができる。
【0094】
一方、L(x0,y0-1)が0でない場合には、次の2つのケースが考えられる。第1のケースはL(x0,y0-1)=−1の場合であり、この場合、既に画素(x0,y0-1)は右方向処理(図25)のときにスタックにつまれているはずなので、F1がTRUEで問題がない。
【0095】
第2のケースはL(x0,y0-1)がn(自然数)、すなわち画素(x0,y0-1)に既にラベルが付与されている場合であり、この値nは、連結性から始点画素(x0,y0)のラベルと同じ値である。この場合、上隣ラインでラベル未付与画素の連結が切れているので、本来ならばフラグF1はFALSEにリセットされるべきであるが、このS702ではTRUEにセットされる。しかし、これはこれで問題がない。なぜなら、その画素(x0,y0-1)のラベルがn(自然数)である以上、左隣の画素(x0-1,y0-1)のラベルL(x0-1,y0-1)は、白画素ならば連結性によりnにセットされているはずであり、黒画素ならば0にセットされているはずだからである。したがって、仮にこの第2のケースにおいてS702でF1=TRUEに設定したとしても、次の画素に進んでスタック処理(図6参照)を行ったときにF1はFALSEにリセットされるので、問題が起こらない。
【0096】
次にフラグF2についても同様にフラグ調整を行う。すなわち、まず走査中のラインが画像の最終行でないことを確認し(S704)、最終行でないことが確認できた場合に、フラグF2を前述のF1と同様にして、F2=L(x0,y0+1)に調整する。なおS704の判定において、走査中のラインが最終行であると判断されれば、フラグF2は必要ないので調整も行わない。
【0097】
このように本実施形態では、右方向処理から左方向処理に移行する際のフラグ調整を、簡単な処理で実現している。
【0098】
このようにしてフラグ調整が終わると、前述の右方向処理と同様にして、始点から左方向にラベリング処理を行っていく(S254〜S264)。この左方向処理も、右方向処理と同様、対象画素(x,y0)がライン条件を満足するか否かを判定する(S232)前に、その対象画素の上下の隣接画素について隣接ライン開始点スタック処理(S300)を実行する。以降の処理は右方向処理と基本的に同じでよい。
【0099】
このようにして左方向処理(ステップS250)が完了すると、1ラインについてのラベリング処理(ステップS600)が完了し、図23の処理の流れに戻ってスタック12から次の走査開始座標を取り出して、同じ処理を繰り返す。これにより、上記実施形態1の場合と同様にして、8連結性を考慮したラベリング処理が行える。また、本実施形態でも、実施形態1と同様、白画素の塊の面積Sや重心、白画素塊の中にある穴の数、などをラベリング処理と並行して求めることができる。また、ラベリングの走査の際に、走査した画素のx、y座標の最大値、最小値を記憶していくようにすれば、白画素塊の幅や高さなどをラベリング処理と並行して求めることも可能である。
【0100】
このように、本実施形態では、隣接ラインの走査開始点をスタックする際に、ライン走査における対象画素がラベル付けされるか否かによらず、その対象ラインの上下の隣接画素がラベル条件を満足するか否かのみでスタックするか否かを判断するようにした。これにより、8連結における斜め方向の連結(図22における(8,6)と(9、7)の関係など)の場合も正しくスタックすることができるので、8連結成分のラベリング処理を実現することができる。
【0101】
しかも、本実施形態の処理手順は、上記実施形態1の処理手順とほとんど同じなので、計算量も実施形態1の場合とほとんど変わらない。本実施形態は、実施形態1の4近傍ラベリングの場合と比べると、ライン1本のラベリングにつき、当該ラインの両端の斜め隣の4画素を余計に検査するだけであり、ラインがある程度長い状況であればこの差はほとんど無視できるほどになる。
【0102】
すなわち、実施形態1の4近傍ラベリングでは、長さL(画素)のライン1本をラベリングする際にラベル条件を判定する画素の数は3L+2個(対象ライン及びその上下両隣のラインでL×3、これに対象ラインの左右両隣の画素2個を加えたもの)である。これに対し、本実施形態の8近傍ラベリングでは、同じライン1本につきラベル条件を判定する画素数は3L+6個である。最悪のケースは、白黒が1画素ずつ市松模様になっている場合であり、この場合はL=1なので、本実施形態の8近傍ラベリングの1ライン当たりの検査画素数は、実施形態1の場合の1.8倍となる。しかしながら、実際の応用分野(例えば侵入者検知など)では、画像がこのような極端なものになることはなく、一般に十分なライン長さになるので、4近傍ラベリングに比べて4画素分増加したとしても、それは無視できる(例えばL=50の場合、2.6%の増加に過ぎない)。したがって、本実施形態の手法は、4近傍ラベリングである実施形態1とほぼ同様の計算量で、8近傍ラベリングを実現できるというメリットがある。
【0103】
以上説明した本実施形態の手法は、実施形態1の場合と同様、侵入者検知装置など様々な応用分野に応用できる。
【0104】
[効果検証]
本実施形態の効果を実例を用いて検証した。用いた画像は図28に示した(a)〜(c)の3つの画像であり、これらの画像に対して(a1)従来手法による4近傍ラベリング(従来技術に記載)、(a2)従来手法による8近傍ラベリング(従来技術に示した手法を8近傍を考慮するように拡張したもの)、(a3)実施形態1による4近傍ラベリング、(a4)実施形態2による8近傍ラベリング、の4つの手法でラベリングを行い、その処理時間を計測した。処理は、CPUとしてPentium2(登録商標)の266MHzを搭載したパーソナルコンピュータで行った。その際の処理時間を図29に示す。
【0105】
画像(a)は単純な画像なので、従来手法でも仮ラベルの更新を1〜2回行えば最終的なラベルが決まってしまう。それでも、実施形態1に示した手法(a3)の方が従来手法(a1)よりも4倍以上速いことが分かる。また、実施形態2の手法(a4)も従来手法(a2)よりも4倍以上速く、実施形態1(a3)とほぼ同程度の速さであることが分かる。
【0106】
画像(b)はいささか複雑な画像である。侵入者監視などの応用分野においては、この程度の複雑さの画像をラベリングすることはめずらしくなく、この程度の複雑さの画像は実用的な画像の範疇である。この程度の複雑さになると、従来手法(a1)、(a2)では最終的なラベルを決定するのに何度も仮ラベルの付け直しを必要とするため、処理時間が非常に長くなる。これに対し、実施形態1、2の手法(a3)、(a4)は、単純な画像(a)の場合と変わらない時間で処理が完了しており、本発明に係る手法の高速性が如実に示されている。この例でも、実施形態2による処理時間は実施形態1と比べて遜色ない程度である。
【0107】
画像(c)は非常に複雑な画像であり、実際の応用分野でこのような複雑な画像を扱うことはあまり考えられない。しかしながら、ここでは、本発明に係る手法の有効性を調べるため、このような複雑な画像についても検証を行った。従来手法(a1)、(a2)では、仮ラベルの付け直しを何度も何度も繰り返す必要があるため、非常に長い処理時間を要している。しかも、従来の4近傍処理では、連結を判定する画素が少ないので、ラベル付け直しで正当なラベルが塊内を伝搬する速度が遅くなるため、ここまで画像が複雑になると8近傍処理の方が処理速度が速くなっている。しかしながら、いずれにしても、本発明に係る手法(a3)、(a4)ではいずれも、単純な画像と変わらない処理時間で処理が完了している。この例でも、実施形態2は、実施形態1と変わらない処理時間で8近傍ラベリングが可能なことが分かる。
【0108】
このように、本実施形態によれば、従来技術よりもはるかに速い処理速度で、しかも4近傍ラベリングを行う実施形態1の場合とほとんど変わらぬ速度で、8近傍ラベリングを実現することができる。しかも、その処理に要する時間は、画像の複雑さにあまり影響されず、ある程度複雑な画像でも高速に処理することができる。これにより、画像処理のリアルタイム性を一層高めることができる。このようなラベリングの高速化により生じる時間の余裕により、これまで処理時間の観点から見送っていた他の処理に時間を割くことも可能になると考えられる。
【図面の簡単な説明】
【図1】 本発明に係る画像処理装置の概略構成図である。
【図2】 実施形態1のラベリング処理部の全体処理手順を示すフローチャートである。
【図3】 1つの塊(連結成分)をラベリングする処理の手順を示すフローチャートである。
【図4】 図3の手順における1ラインの走査処理の手順を示すフローチャートである。
【図5】 1ラインの走査のうち、走査開始座標から右方向への走査処理の手順を示すフローチャートである。
【図6】 隣接ラインの走査開始座標をスタックに登録する処理の手順を示すフローチャートである。
【図7】 1ラインの走査のうち、走査開始座標から左方向への走査処理の手順を示すフローチャートである。
【図8】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図9】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図10】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図11】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図12】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図13】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図14】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図15】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図16】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図17】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図18】 具体的な2値画像に対して実施形態のラベリング処理を適用した場合の、ある時点での処理状態を示す図である。
【図19】 本発明を応用した侵入者検知装置の構成を示す図である。
【図20】 複雑に分岐した連結成分を含んだ画像の例を示す図である。
【図21】 従来手法と実施形態の手法の処理時間の比較実験に用いた画像を示す図である。
【図22】 8近傍連結性のある画像の例を示す図である。
【図23】 実施形態2のラベリングの全体処理手順を示すフローチャートである。
【図24】 ラベル付画像用メモリの初期化処理の手順を示すフローチャートである。
【図25】 実施形態2における右方向への走査処理の手順を示すフローチャートである。
【図26】 実施形態2における左方向への走査処理の手順を示すフローチャートである。
【図27】 フラグ調整処理の手順を示すフローチャートである。
【図28】 各実施形態の手法の効果の検証に用いた画像の例を示す図である。
【図29】 図28の画像に対する従来手法及び各実施形態の手法によるラベリングの処理時間の計測結果を示す図である。
【符号の説明】
10 ラベリング処理部、12 スタック、14 面積カウンタ、16 Xカウンタ、18 Yカウンタ、20 2値画像用メモリ、30 ラベル付画像用メモリ。
Claims (7)
- 画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、
ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、
を含み、
前記ラベル付与ステップは、
(a)ラベル付け始点画素をライン始点とするステップと、
(b)ライン始点を最初の対象画素とし、対象画素を右及び左のうち所定の一方向に順次1画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素をスタックに追加するステップと、
(c)ステップ(b)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、ラベル付け始点画素から前記ステップ(b)とは逆方向に順次対象画素を1画素ずつ移動させながら、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与すると共に、その対象画素の上下の隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加するステップと、
(d)ステップ(c)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ(b)及び(c)を実行するステップと、
(e)前記スタックから画素がなくなるまで上記ステップ(d)を繰り返すステップと、
を含み、画像の全画素について走査が終わるまで前記始点検出ステップ及びラベル付与ステップを繰り返す画像処理方法。 - 画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、
ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、
を含み、
前記ラベル付与ステップは、
(a)ラベル付け始点画素をライン始点とするステップと、
(b)ライン始点を最初の対象画素とし、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、対象画素を右及び左のうち所定の一方向に順次1画素ずつ移動させながらその都度対象画素及びその上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合はその隣接画素をスタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップと、
(c)ステップ(b)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達するまで、ラベル付け始点画素から前記ステップ(b)とは逆方向に順次対象画素を1画素ずつ移動させその都度対象画素その上下の隣接画素を調べ、隣接画素が前記ラベル条件を満足する場合その隣接画素を前記スタックに追加し、対象画素が前記ラベル条件を満足する場合はその対象画素に前記ラベルを付与するステップと、
(d)ステップ(c)にて対象画素が前記ラベル条件を満足しなくなるか又は画像端部に達すると、前記スタックの先頭の画素を取り出して新たなライン始点として前記ステップ(b)及び(c)を実行するステップと、
(e)前記スタックから画素がなくなるまで上記ステップ(d)を繰り返すステップと、
を含み、画像の全画素について走査が終わるまで前記始点検出ステップ及びラベル付与ステップを繰り返す画像処理方法。 - 前記ステップ(b)及び(c)では、
対象画素の上の隣接画素を前記スタックに追加するとセットされ、対象画素の上の隣接画素が前記ラベル条件を満足しなくなるとリセットされるフラグと、
対象画素の下の隣接画素を前記スタックに追加するとセットされ、対象画素の下の隣接画素が前記ラベル条件を満足しなるとリセットされるフラグと、
を用い、対象画素の上下の隣接画素のスタックへの追加は、各々対応するフラグがリセットされている場合のみに行うことを特徴とする請求項1又は請求項2に記載の画像処理方法。 - 前記ステップ(b)及び(c)で対象画素にラベルを付与する際に面積カウンタをカウントアップし、前記ステップ(e)で前記スタックから画素がなくなった時点での前記面積カウンタのカウント値を、前記ラベル付け始点画素に連結性を有する画素群の面積として出力することを特徴とする請求項3記載の画像処理方法。
- 前記ステップ(b)及び(c)で対象画素にラベルを付与する際にその対象画素のx,y座標をそれぞれxカウンタ及びyカウンタに加え、前記ステップ(e)で前記スタックから画素がなくなった時点での前記xカウンタ及びyカウンタのカウント値をそれぞれ前記面積カウンタのカウント値で除することにより、前記ラベル付け始点画素に連結性を有する画素群の重心位置を算出して出力することを特徴とする請求項4記載の画像処理方法。
- 前記ステップ(d)で前記スタックから取り出した画素が前記ステップ(b)で前記ラベル条件を満足しないと判断された回数をカウントするカウンタを有し、前記ステップ(e)で前記スタックから画素がなくなった時点でのこのカウンタのカウント値を、前記ラベル付け始点画素に連結性を有する画素領域に含まれる穴の数として出力することを特徴とする請求項3から請求項5のいずれかに記載の画像処理方法。
- 画像を所定の走査順序で調べ、ラベル未付与でかつ注目画素値を有するというラベル条件を満足する画素を検出し、ラベル付け始点画素に定める始点検出ステップと、
ラベル付け始点画素及びこれに連結性を有する画素にラベルを付与するラベル付与ステップと、
を含み、
前記ラベル付与ステップは、
ラベル付け始点画素をライン始点とする開始ステップと、
前記ライン始点を含むライン上の画素を1画素ずつ走査し、前記ライン始点に対して連結性を有し前記ラベル条件を満足する画素を見つける毎に前記ラベルを付与すると共に、その走査ラインの上下の隣接ラインにおいて、その走査ラインの画素に対して前記ラベル条件を満足する画素を連結候補画素として所定の記憶手段に記憶するライン走査ステップと、
前記ライン走査ステップにおいて前記走査ライン上でのラベル付け処理が完了すると、前記記憶手段から連結候補画素を1つ取り出し、これを新たなライン始点として前記ライン走査ステップを反復する走査反復ステップと、
を含む画像処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000008783A JP3840025B2 (ja) | 1999-03-19 | 2000-01-18 | 画像処理方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7686799 | 1999-03-19 | ||
JP11-76867 | 1999-03-19 | ||
JP2000008783A JP3840025B2 (ja) | 1999-03-19 | 2000-01-18 | 画像処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000339456A JP2000339456A (ja) | 2000-12-08 |
JP3840025B2 true JP3840025B2 (ja) | 2006-11-01 |
Family
ID=26417990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000008783A Expired - Fee Related JP3840025B2 (ja) | 1999-03-19 | 2000-01-18 | 画像処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3840025B2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE277386T1 (de) * | 2000-10-27 | 2004-10-15 | Amersham Biosciences Corp | Verfahren zum screening von chemischen verbindungen |
US7813559B2 (en) | 2001-11-13 | 2010-10-12 | Cyberoptics Corporation | Image analysis for pick and place machines with in situ component placement inspection |
US7706595B2 (en) | 2003-11-07 | 2010-04-27 | Cyberoptics Corporation | Pick and place machine with workpiece motion inspection |
JP4482356B2 (ja) * | 2004-03-19 | 2010-06-16 | 株式会社リコー | Simdプロセッサを用いた画像処理方法及び画像処理装置 |
JP2008225739A (ja) * | 2007-03-12 | 2008-09-25 | Mitsubishi Electric Corp | 特徴量計測方法および特徴量計測装置 |
JP6265370B2 (ja) * | 2013-08-21 | 2018-01-24 | 国立大学法人富山大学 | 対象物追跡方法及び対象物追跡システム |
JPWO2018073888A1 (ja) * | 2016-10-18 | 2019-08-08 | オリンパス株式会社 | 画像処理方法および画像処理装置 |
JP7242273B2 (ja) * | 2018-11-30 | 2023-03-20 | コイト電工株式会社 | 画像処理装置及び画像処理方法 |
-
2000
- 2000-01-18 JP JP2000008783A patent/JP3840025B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000339456A (ja) | 2000-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104239867B (zh) | 车牌定位方法及*** | |
KR20200137219A (ko) | 비지도 학습 기반 웨이퍼 불량 패턴 검출 방법 및 그 장치 | |
CN111369495B (zh) | 一种基于视频的全景图像的变化检测方法 | |
JP2009055139A (ja) | 人物追跡システム、人物追跡装置および人物追跡プログラム | |
CN102254144A (zh) | 一种鲁棒的图像中二维码区域提取方法 | |
JP3840025B2 (ja) | 画像処理方法 | |
JP2017156988A (ja) | 物体検出装置 | |
JPS60230281A (ja) | 文字識別装置 | |
JP2010140315A (ja) | 物体検出装置 | |
JP3598878B2 (ja) | 欠陥検査方法および欠陥検査装置 | |
JP5253195B2 (ja) | 物体検出装置 | |
JP2011233060A (ja) | 物体認識装置、物体認識方法、及びコンピュータプログラム | |
CN113920140B (zh) | 一种基于深度学习的铁路货车管盖脱落故障识别方法 | |
JP2011203853A (ja) | 画像処理装置及びプログラム | |
JP5346304B2 (ja) | 外観検査装置、外観検査システムおよび外観検査方法 | |
JP2005250786A (ja) | 画像認識方法 | |
JP3919505B2 (ja) | パターン検査装置および方法 | |
JP2002277409A (ja) | プリント基板パターンの検査装置 | |
JP2001317919A (ja) | 回路パターン線幅計測方法および回路パターン線幅計測装置 | |
CN112598088B (zh) | 一种工业部件视觉多目标鲁棒模板获取的方法 | |
CN116416251B (zh) | 基于图像处理的整芯阻燃输送带质量检测方法及相关装置 | |
JP2001243479A (ja) | 画像処理方法および装置、ならびに画像処理プログラムを記録した記録媒体 | |
JP3307782B2 (ja) | 文字マーク認識装置 | |
Chen et al. | Research on Machine Intelligent Perception of Urban Geographic Location Based on High Resolution Remote Sensing Images | |
JP2002162366A (ja) | 欠陥検査方法とその装置、及び欠陥の自動分類のための欠陥位置検出方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040119 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040119 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060707 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060801 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060804 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 3840025 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100811 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110811 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110811 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120811 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130811 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |