【文献】
東海林 健二、宮道 壽一,“ラン情報を用いた高速連結成分ラベリング”,電気学会論文誌C,日本,(社)電気学会,2001年 2月 1日,Vol.121-C, No.2,pp.392-400
【文献】
井村 誠孝、外2名,“GPUを用いた画像の連結成分抽出に関する一考察”,情報処理学会研究報告 グラフィクスとCAD(CG),日本,社団法人情報処理学会,2010年 4月15日,No.138,pp.1-5
(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記した特許文献1に記載の発明(以下「従来発明」という)では、上位のランデータから順に調査することを前提としており、これがさらなる高速化を阻害する要因のひとつになっている。また、上記従来発明では、異なるラベルが与えられたランデータ同士が同じ連結成分に属するか否かを記録するラベルテーブル、並びにラベル毎に当該ラベルに対応するランデータの数を関連付けたラン数テーブルを別途設ける必要がある。そのため、ランの数の増大や連結状態の複雑化に応じて上記ラベルテーブルおよびラン数テーブルの要素数が増大してしまい、これがラベリング処理の高速化を阻害する別の要因にもなっている。
【0005】
この発明は上記課題に鑑みなされたものであり、二値画像データのラベリング処理の高速化を図ることができる技術および当該技術を用いて欠陥検査を効率的に行う技術を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明にかかるラベリング方法は、二値画像データをランレングス化して作成された複数のランに対してラベリング処理を施すラベリング方法であって、各ランに対して互いに異なるラベルを設定する初期ラベル設定工程と、ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第1連結ランが存在するか否かを判定し、第1連結ランが存在するときには、処理対象ランおよび第1連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行う更新工程と、更新工程後に、複数のラベルに基づいて複数のランのうち互いに接続するランを探索して同一のラベルを付与する探索工程とを備え、更新工程では、複数のランを複数組に分割するとともに各組で実行される個別更新処理を更新スレッドとし、排他制御のもと複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら複数の更新スレッドを並列して実行することを特徴としている。
【0007】
また、本発明にかかるラベリング装置は、二値画像データをランレングス化して作成された複数のランに対してラベリング処理を施すラベリング装置であって、各ランのラベルを記憶する記憶部と、演算処理を行うプロセッサコアを複数個有するプロセッサ部と、複数のラベルに互いに異なる値を初期設定した後で、ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第1連結ランが存在するか否かを判定し、第1連結ランが存在するときには、処理対象ランおよび第1連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行い、さらに複数のラベルに基づいて複数のランのうち互いに接続するランを探索して同一のラベルを付与する制御部とを備え、複数のランはプロセッサコアの個数に応じて複数組に分割され、各プロセッサコアは分割された一または複数のランについて個別更新処理を更新スレッドとして実行し、制御部は、排他制御のもと複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら複数の更新スレッドを並列して実行させることでラン毎の個別更新処理を行うことを特徴としている。
【0008】
さらに、本発明にかかる欠陥検査装置は、検査対象画像を取得する画像取得部と、検査対象画像を検査して欠陥部位が含まれる欠陥画像を抽出する画像抽出部と、欠陥画像を二値化処理して二値画像データを生成する二値化処理部と、二値画像データをランレングス化して複数のランを生成するラン生成部と、上記ラベリング装置と同一構成を有し、複数のランのうち互いに接続するランに対して同一のラベルを付与するラベリング手段とを備えることを特徴としている。
【0009】
このように構成された発明では、ラン毎に互いに異なる値を有するラベルが初期設定される。そして、ラン毎に、個別更新処理が実行され、処理対象ランに接続する連結ランが存在するか否かに応じてラベルの更新が実行される。その後で、複数のラベルに基づいて複数のランのうち互いに接続するランが探索され、それに対して同一のラベルが付与される。このように更新工程と探索工程の2パス方式でラベリング処理を行う点で従来発明と共通するが、本発明では、ランの個数と同数のラベルによって二値画像データのラベリング処理が行われており、従来発明で用いていたラベルテーブルおよびラン数テーブルが不要であり、ラベリング処理の高速化が可能となっている。
【0010】
しかも、本発明の更新工程では、複数のランを複数組に分割するとともに各組で実行される個別更新処理を更新スレッドとし、それらの更新スレッドを並列して実行する。つまり、ラン毎の個別更新処理は並列実行される。したがって、ラベル更新については更新スレッド間で排他制御されるものの、上位のランから逐次的にラベルを付与する従来発明に比べ、ラベリング処理に要するトータル時間を大幅に短縮することができる。
【0011】
ここで、更新工程では、一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しているが、当該ラベル以外のラベル、つまり競合しないラベルについては他の更新スレッドによる書換を許可してもよい。これによって、処理効率を高めてラベリング処理に要する時間をさらに短縮することができる。
また、個別更新処理において、第1連結ランのラベルを更新したとき、第1連結ランに接続する処理対象ラン以外の第2連結ランが存在するか否かを判定し、第2連結ランが存在するときには、第1連結ランおよび第2連結ランのうちの一方のラベルを他方のラベルに更新するように構成してもよい。このように第1連結ランのみならず、当該第1連結ランを介して処理対象ランに接続する第2連結ランについても、ラベル更新しておくことで、処理対象ランに対する個別更新処理よりも後で実行される第2連結ランに対する個別更新処理に要する時間を短縮することができる。その結果、トータルの処理時間を短縮することができる。
【0012】
また、第1連結ランのラベルを更新する前の更新前ラベルと同一ラベルを有するランを第2連結ランとしてもよく、更新前ラベルを利用することで第2連結ランを容易に、且つ確実に見つけ出すことができ、好適である。
【0013】
また、二値画像データを行毎にランレングス化してもよく、この場合、処理対象ランの下行に接続するランを第1連結ランとして判定することができる。
【0014】
また、2パスのうち探索工程(複数のランのうち互いに接続するランを探索して同一のラベルを付与する工程)においてラン毎に個別探索処理を実行してもよい。この「個別探索処理」とは、一のランを処理対象ランとするとともに当該処理対象ランに接続する連結ランを複数のラベルに基づいて見つけ出して処理対象ランおよび連結ランのラベルを同一に書き換える処理を意味している。このようにラン毎の個別探索処理によって探索工程を合理的に行うことができる。しかも、上記したラン毎の個別更新処理と同様に、複数のランを複数組に分割するとともに各組で実行される個別探索処理を探索スレッドとし、排他制御のもと複数の探索スレッドのうち一の探索スレッドによるラベルの書換を許可するとともに一の探索スレッドにより書き換えられるラベルの他の探索スレッドによる書換を禁止しながら複数の探索スレッドを並列して実行してもよい。これによって、探索工程においても処理速度を高めてラベリング処理の高速化をより一層進めることができる。
【発明の効果】
【0015】
この発明によれば、ラベリング処理を実行するための処理の一部を並列で実行することができ、二値画像データのラベリング処理に要するトータル時間を短縮することができる。
【発明を実施するための形態】
【0017】
図1はこの発明にかかるラベリング装置の一実施形態を装備する欠陥検査装置を用いる検査システムの概略構成を示す図である。この検査システム1は、検査対象である半導体基板(以下「基板」という。)Sの外観に現れたピンホールや異物等の欠陥検査を行う検査システムである。検査システム1は、基板S上の検査対象領域を撮像する撮像装置2と、撮像装置2からの画像データに基づいて欠陥検査を行う制御装置3を有する。
【0018】
本システムとは別に基板Sの製造ラインに設けられた基板検出装置Mにおいて基板Sに欠陥が発見されると、その欠陥の位置座標がこの検査システム1に与えられる。製造ラインに組み込まれた基板検出装置Mは、予め定められた処理アルゴリズムによって基板S全体を検査し、基板表面に欠陥としての要件を満たす領域があればその位置座標を取得して出力する。したがって、該基板検出装置Mが有する撮像部は比較的低解像度であり、処理アルゴリズムも固定的である。
【0019】
一方、この検査システム1は、図示しないインターフェースを介して基板検出装置Mと接続されており、基板検出装置Mから欠陥として位置座標が報告された領域をより高い解像度を有する撮像装置2によって撮像するとともに、その画像を制御装置3が精査して欠陥の有無やその種類などをより詳しく判定するとともに、欠陥部分の画像を表示部に表示する。
【0020】
撮像装置2は、基板S上の検査対象領域を撮像することにより画像データを取得する撮像部21、基板Sを保持するステージ22、および、撮像部21に対してステージ22を相対的に移動させるステージ駆動部23を有している。また、撮像部21は、照明光を出射する照明部211、基板Sに照明光を導くとともに基板Sからの光が入射する光学系212、および、光学系212により結像された基板Sの像を電気信号に変換する撮像デバイス213を有している。ステージ駆動部23はボールねじ、ガイドレールおよびモータにより構成され、制御装置3に設けられた装置制御部4がステージ駆動部23および撮像部21を制御することにより、基板S上の検査対象領域が撮像される。
【0021】
制御装置3は装置制御部4を有しており、この装置制御部4が予め読み込まれた制御プログラムを実行することにより、
図1に示す制御装置各部を以下のように動作させる。制御装置3は、上記の装置制御部4のほか、画像取得部5および画像処理部6を備えている。画像取得部5は、撮像部21から出力される電気信号をデータ化して、撮像画像に対応する画像データを取得する。画像処理部6は、画像取得部5が取得した画像データに対して適宜の画像処理を施して、画像に含まれる欠陥の検出や欠陥部分の画像(以下「欠陥画像」という)を作成する。なお、当該画像処理部6は本発明にかかるラベリング装置の一実施形態であるラベリング部を含んでおり、欠陥画像に対するラベリング処理を高速に実行可能となっている。画像処理部6、特にラベリング部の構成および動作については、後で詳述する。
【0022】
さらに、制御装置3は、各種データを記憶するための記憶部7、ユーザからの操作入力を受け付けるキーボードおよびマウスなどの入力受付部8および操作手順や処理結果等のユーザ向け視覚情報を表示する表示部9などを備えている。また、図示を省略しているが、光ディスク、磁気ディスク、光磁気ディスク等のコンピュータ読み取り可能な記録媒体から情報の読み取りを行う読取装置を有し、検査システム1の他の構成との間で信号を送受信する通信部が、適宜、インターフェイス(I/F)を介する等して接続される。
【0023】
図2は画像処理部の概略構成を示すブロック図である。画像処理部6は、フィルタリング部61、差分抽出部62、二値化処理部63、ラベリング部64および孤立除去処理部65を有している。フィルタリング部61には、画像取得部5から撮像画像が送られてくるとともに、記憶部7から参照画像が送られてくる。これら両画像のうち撮像画像は、撮像装置2によって撮像された基板Sの画像であり、欠陥検出検査の対象となる検査対象画像に相当する。また、参照画像は欠陥のない理想的な基板に対応する画像であり、この実施形態では、次に説明するように、検査対象画像と参照画像との比較によって検査対象画像から欠陥検出が行われる。これらの欠陥画像および参照画像は記憶部7に記憶され、必要に応じて参照されるが、外部の記憶媒体に記憶された画像データを必要に応じて読み込む形態であってもよい。
【0024】
フィルタリング部61は、検査対象画像および参照画像のそれぞれについて、画像ノイズおよび欠陥と関係のない軽微な画像の差異を除去するためのフィルタリング処理を行い、各画像を差分抽出部62に送る。この差分抽出部62は、本発明の「画像抽出部」の一例に相当するものであり、フィルタリング処理後の検査対象画像および参照画像の差分を求めることで画像内容が互いに異なる領域を抽出し、当該差分画像を二値化処理部63に送る。そして、二値化処理部63は適宜の閾値によって差分画像を二値化して二値画像データBFIを生成し、ラベリング部64に送る。このラベリング部64は二値画像データBFIをランレングス化して複数のランを生成し、当該複数のランに対してラベルを付与する。さらに、孤立除去処理部65がラベリングされた二値画像から残留する孤立点を除去する。これにより、求める欠陥位置画像が作成され、画像処理部6が出力される。
【0025】
図3は、本発明にかかるラベリング装置の一実施形態に相当するラベリング部の概略構成を示すブロック図である。このラベリング部64は複数のプロセッサコア641を有するGPU(Graphics Processing Unit)642を備えている。このGPU642では、各プロセッサコア641が個別更新処理部643および個別探索処理部644として機能し、ラン毎の個別更新処理および個別探索処理をそれぞれ一のスレッドとして実行する。本実施形態では、ラン毎の個別更新処理が本発明の「更新スレッド」の一例に相当し、ラン毎の個別探索処理が本発明の「探索スレッド」の一例に相当している。なお、個別更新処理および個別探索処理については、後で詳述する。
【0026】
また、ラベリング部64は二値画像データBFI、ランr[m]を特定するためのデータ(以下「ランデータ」という)、ラン接続データid[m]を記憶するラベリング用記憶部645を有している。これらのデータについても、後で具体例を示しながら詳述する。
【0027】
さらに、ラベリング部64は、CPU(Central Processing Unit)やメモリなどで構成された演算処理部646が設けられている。演算処理部646では、CPUが所定のプログラムに従って演算処理することにより、二値画像データBFIをランレングス化してランr[m]を生成するラン生成部647、GPU642内の各プロセッサコア641で実行されるスレッドを排他制御しながら並列して実行させる並列処理制御部648、ならびにランr[m]およびラン接続データid[m]に含まれるラベル番号を初期化するデータ初期設定部649を備えている。このように演算処理部646が本発明の「制御部」として機能する。
【0028】
次に、上記のように構成されたラベリング部64によるラベリング動作について
図4ないし
図10を参照しつつ説明する。
図4はラベリング部によるラベリング動作を示すフローチャートである。二値化処理部63により作成された二値画像データBFIがラベリング部64に与えられると、ラベリング部64の演算処理部646はラベリング部64の各部を制御してラベリング処理を実行する。まず、当該二値画像データBFIが一時的にラベリング用記憶部645に登録される。また、二値画像データBFIに対し、ランレングス化処理がラン生成部647で実行されて複数のランr[m]が生成され(ステップS1)、ラベリング用記憶部645に記憶される。なお、ランレングス化処理についは従来周知技術が数多く提案されており、本実施形態においても一般的なランレングス化処理をそのまま用いている。したがって、ランレングス化処理の説明は省略する。
【0029】
図5はラベリング部に与えられる二値画像データの一例を示す図である。また、
図6は
図5の二値画像データに対してランレングス化処理を実行して得られるランのランデータおよびラン同士の連結関係を示すラン接続データの初期値を示す図である。
図5および
図6(a)中の縦方向および横方向の数値(0,1,2,…)は、マトリクス配列された画素の行方向および列方向の座標位置、つまり行インデクスおよび列インデクスを示している。また、
図5において、ハッチングが施された画素は、「1」の画素データを有する画素であることを示す一方、ハッチングが施されていない画素は、「0」の画素データを有する画素であることを示している。このような画素データを有する二値画像データBFIに対して行毎のランレングス化処理を加えると、
図6(a)に示すランが得られる。具体的には、0行目および4行目においては、「1」の画素は存在しないので、ランは作成されず、1行目ないし3行目においては、それぞれ2個、2個および1個のランが作成される。この明細書では、ランレングス化処理によって作成された各ランのラン番号を「m」で表し、ランの作成順に0,1,2,…の値を取っており、ラン番号mのランをr[m]で表す。
【0030】
また、
図5の二値画像データBFIをランレングス化処理して作成されるランr[0]〜r[4]のランデータをラン番号順にラベリング用記憶部645のランデータ記憶領域に格納した状態が
図6(b)に図示されている。同図(b)中において、「ラベル番号」は当該ランに付与されたラベルを示し、「始端画素位置」は二値画像データBFIにおける当該ランの始端画素位置を示す列インデクスを示し、「終端画素位置」は二値画像データBFIにおける当該ランの終端画素位置を示す列インデクスを示し、「行インデクス」は二値画像データBFIにおける当該ランの行インデクスを示している。これらのうち「ラベル番号」は、当該ランと当該ラン以外のランとの連結関係を示す値であり、後で説明する更新処理(ステップS3)および探索処理(ステップS4)を実行することで
図5に示す二値画像データBFIにおいて相互に連結しているラン同士に対して同じ値が付与される。なお、本実施形態では、探索処理(ステップS4)を効率的に実行するために、ラン同士の連結関係を示すラン接続表を有している。このラン接続表では、ランr[m]の接続状態を示すデータとしてラン接続データid[m]が設けられ、ラベル番号によりランr[m]とその他のランとの接続状態を示しており、例えば
図6(c)に示すような表形式でラベリング用記憶部645のラン接続データ記憶領域に格納される。
【0031】
図4に戻ってラベリング処理の説明を続ける。本実施形態では、二値画像データBFIからランを作成した際に、ラン毎に、当該ランと当該ラン以外のランとの連結関係を示すラベルとして互いに異なるラベル番号を設定する(ステップS2)。本実施形態では、ランr[m]のラベル番号およびラン接続データid[m]のラベル番号をラン番号mと一致させている。つまり、ランr[0]、r[1]、…のラベル番号をそれぞれ「0」、「1」、…に初期設定するとともに、ラン接続データid[0]、id[1]、…のラベル番号についてもそれぞれ「0」、「1」、…に初期設定する。
【0032】
次のステップS3では更新処理(ステップS3)が実行される。この更新処理では、ラン毎に個別更新処理が実行される。この「個別更新処理」とは、一のランを処理対象ランとするとともに当該処理対象ランの下行で縦および斜めに接続する連結ランが存在するか否かを判定し、連結ランが存在するときには、処理対象ランおよび連結ランのうちのラン接続データのラベル番号の大きい方を小さいラベル番号に更新する処理であり、本実施形態では複数個(例えばn個)のランのそれぞれについて個別更新処理を実行する。ここで、これらn個の個別更新処理をシリアル、例えばラン番号順に行うことも可能であるが、この場合、更新処理に多大な時間を費やしてしまう。
【0033】
そこで、本実施形態では、ラン毎の個別更新処理を一のスレッドとし、GPU642内の各プロセッサコア641によりスレッドが並列的に実行される。つまり、
図3に示すように、第0プロセッサコア641ではランr[0]を処理対象ランとして個別更新処理が実行され、これに並行して第1プロセッサコア641ではランr[1]を処理対象ランとして個別更新処理が実行される。また、その他のランr[2]、r[3]、…、r[n]についても、上記個別更新処理と並行して実行される。ただし、各個別更新処理では、後述するようにラン接続データ中のラベル番号の更新作業が伴うため、本実施形態では並列処理制御部648がプロセッサコア641間での排他制御を行う。
【0034】
図7は各プロセッサコアで実行される個別更新処理を示すフローチャートである。また、
図8は各プロセッサコアで実行される個別更新処理の一例を示す模式図である。ここでは、まず
図7を参照しつつラン番号p(p=0,1,2,…またはn)のランr[p]に対する個別更新処理の基本動作を説明し、その後で
図8の具体例を参照しつつラベル番号の更新例について説明する。
【0035】
ランr[p]の個別更新処理は第pプロセッサコア641により以下の手順で実行される。ステップS11では、ランr[p]を処理対象ランとし、この処理対象ランr[p]の下行に接続されるランを第1連結ランとして抽出する。そして、第1連結ランが抽出されなかった場合(ステップS12で「NO」の場合)には、当該スレッドでの個別更新処理を終了する。
【0036】
一方、第1連結ランが抽出された場合(ステップS12で「YES」の場合)には、以下のステップS13〜S21を実行してラベル番号の更新を行う。なお、ここでは、ランr[p]の下行に位置するランr[q]が第1連結ランとして抽出されたものとして説明を続ける。
【0037】
次のステップS13では、ランr[p]、r[q]にそれぞれ対応するラン接続データid[p]、id[q]をラベリング用記憶部645から読み出す。ここで、ラン接続データid[p]、id[q]が同じ値、つまり同一のラベル番号が設定されており、既に連結関係が設定されている場合(ステップS14で「YES」の場合)には、当該個別更新処理を終了する。
【0038】
一方、ステップS14で「NO」と判定される、つまりラン接続データid[p]、id[q]が異なっている(互いに異なるラベル番号が設定されている)場合には、ラン接続データの更新が行われる。このようにラン接続データid[p]、id[q]が相互に異なるということは、ラン[p]とラン[q]との間に連結関係が成立していないことを意味している。しかしながら、実際には接続関係が成立しているため、ラン接続データid[p]、id[q]の大小関係に応じて一方のラベル番号を他方のラベル番号に更新する(ステップS15〜S19)。
【0039】
ステップS15でラン接続データid[p]、id[q]を対比し、その対比結果からラン接続データid[p]がラン接続データid[q]よりも大きなラベル番号であることが判明した場合には、ラン接続データid[p]をラン接続データid[q]に書き換え、ラン接続データid[p]をより小さなラベル番号に更新する(ステップS16)。また、このように変更される側のランr[p]のラベル番号を値(old_dum)として登録し、変更される前のラン接続データid[p]を値(old_id)として登録するとともに、変更された後のラン接続データid[p]を値(new_id)として登録する(ステップS17)。
【0040】
逆に、ラン接続データid[q]がラン接続データid[p]よりも大きなラベル番号であることが判明した場合には、ラン接続データid[q]をラン接続データid[p]に書き換え、ラン接続データid[q]をより小さなラベル番号に更新する(ステップS18)。また、このように変更される側のランr[q]のラベル番号を値(old_dum)として登録し、変更される前のラン接続データid[q]を値(old_id)として登録するとともに、変更された後のラン接続データid[q]を値(new_id)として登録する(ステップS19)。
【0041】
そして、値(old_dum)と値(old_id)とが一致する場合(ステップS20で「YES」の場合)には、当該個別更新処理を終了する。一方、両者が一致しない場合(ステップS10で「NO」の場合)には、ラベル番号を更新した側のラン(以下「更新ラン」という)が処理対象ランおよび上記第1連結ラン以外のラン(以下「第2連結ラン」という)と連結している。そこで、このような第2連結ランが存在する場合には、ステップS21を実行した上でステップS13に戻る。すなわち、ステップS21ではラン番号pを値(old_id)に書き換えるとともにラン番号qを値(new_id)に書き換える。これによって、更新ランが新たなランr[p]として、また第2連結ランが新たなランr[q]として設定され、ステップS13に戻り、更新ランと第2連結ランとの間でラベル番号の異同をチェックし(ステップS14)、ラベル番号が異なる場合には大きい方のラベル番号を小さい方のラベル番号に更新する(ステップS15〜S19)。
【0042】
このように個別更新処理では、処理対象ランと直接的に接続する直接連結ランのみならず、当該直接連結ランを介して処理対象ランと間接的に接続する間接連結ランについてもラベル番号を更新している。
【0043】
次に、
図6(a)および(b)に示すランr[0]〜r[4]に対して更新処理を実行した場合の一例(
図8)を参照しつつ更新処理(ステップS3)の内容をさらに詳しく説明する。なお、
図8中の縦軸は時間経過を表しており、開始時点ではラン接続データid[0]〜id[4]はそれぞれ初期値、つまり0〜4に設定されている。ラン接続データid[0]〜id[4]のうち梨字模様を付したものは更新変更後のラベル番号を示している。また、「第0スレッド」〜「第4スレッド」の下方に並んでいる項目(「連結ラン:存在」、「書換禁止」など)は各プロセッサコア641で実行される処理内容を示している。
【0044】
n個のプロセッサコア641のうち5個のプロセッサコア641では、それぞれランr[0]〜r[4]の個別更新処理が並列的に実行される。これらのうちランr[3]、r[4]の個別更新処理はそれぞれ第3スレッドおよび第4スレッドとして実行されるが、ともに下行がなく、第1連結ランが存在しないために、早期にスレッド(ステップS3−3、S3−4)を終了し、個別更新処理を完了する。一方、ランr[0]〜r[2]の個別更新処理では連結ランが存在することが確認され、それらに対応するラン接続データの読出、対比、書換などが行われる。ここで、例えば第2スレッド(ランr[2]の個別更新処理)では、処理対象ランであるランr[2]と、それに接続する連結ランr[4]とのラン接続データid[2]、id[4]の値、つまりラベル番号が読み出される。ここでは、
id[2]=2、
id[4]=4、
となっている。これらを対比した結果、ラン接続データid[4]がラン接続データid[2]よりも大きい値であるため、ラン接続データid[4]のラベル番号をラン接続データid[2]のラベル番号に書き換える必要がある。こうして第2スレッドでの書換準備が最先に整うと、並列処理制御部648により第0スレッドおよび第1スレッドの個別更新処理におけるデータ書換が一時的に禁止された状態で、ラン接続データid[4]の書換が実行され、ラン接続データid[4]のラベル番号は「4」から「2」に更新される。また、更新されたランr[4]のラベル番号である値(old_dum)と、変更前のラン接続データid[4]である値(old_id)とはともに「4」であり、同じ値であることから第2スレッド(ステップS3−2)を終了する。
【0045】
次に、同図に示すように、第1スレッドにおいて書換準備が整うと、並列処理制御部648により第0スレッドの個別更新処理におけるデータ書換が一時的に禁止された状態で、ラン接続データid[2]、id[3]の書換が実行される。より具体的には、第1スレッド(ランr[1]の個別更新処理)では、処理対象ランであるランr[1]と下行でランr[2]、r[3]が接続しており、これらが第1連結ランと認定される。そして、処理対象ランr[1]のラン接続データid[1]と、連結ランr[2]、r[3]のラン接続データid[2]、id[3]とを読み出す。それらは、
id[1]=1、
id[2]=2、
id[3]=3、
となっている。これらを対比した結果、ラン接続データid[2]、id[3]はいずれもラン接続データid[1]よりも大きい値であるため、ラン接続データid[2]、id[3]のラベル番号をともにラン接続データid[1]のラベル番号に書き換える。また、更新されたランr[2]については、そのラベル番号である値(old_dum)と、変更前のラン接続データid[2]である値(old_id)とはともに「2」である。また、更新されたランr[3]については、そのラベル番号である値(old_dum)と、変更前のラン接続データid[3]である値(old_id)とはともに「3」である。このようにランr[2]、r[3]のいずれについても、値(old_dum)と値(old_id)とは同じ値であることから第1スレッド(ステップS3−1)を終了する。
【0046】
最後に残った第0スレッド(ランr[0]の個別更新処理)では、処理対象ランであるランr[0]と下行でランr[2]が接続しており、これを連結ランとして上記第1スレッドおよび第2スレッドと同様にしてラン接続データid[2]のラベル番号をラン接続データid[0]のラベル番号に書き換える。ただし、更新されたラン接続データid[2]は既に1回書き換えられて初期値(ランr[2]の初期ラベル番号=2)から「1」となっており、当該ランr[2]のラベル番号である値(old_dum)と、変更前のラン接続データid[2]である値(old_id)とはそれぞれ「2」、「1」であり、異なっている。そこで、
図7のステップS21で実行しているように、ラン接続データid[0]、id[1]の読出、対比、書換を行い、
図8の下部分に示すように、ラン接続データid[1]のラベル番号をラン接続データid[0]のラベル番号に書き換える。こうして、更新されたランr[1]のラベル番号である値(old_dum)と、変更前のラン接続データid[1]である値(old_id)とはともに「1」であり、同じ値であることから第0スレッド(ステップS3−0)を終了する。このように、ランr[1]は処理対象ランr[0]と直接的に接続されていないが、ランr[2]を介して間接的に接続されており、それについてもラン接続データの更新が行われる。
【0047】
こうして全てのスレッドが終了すると、更新処理(ステップS3)が完了し、
図6(a)および(b)に示すランr[0]〜r[4]に対して更新処理を実行することでラン接続データid[0]〜id[4]が(0,1,2,3,4)から(0,0,0,1,2)に更新される。なお、上記説明からわかるように、1スレッド1ランで並行処理しているため、どのランが先に処理されるかによって更新処理後のラン接続データid[0]〜id[4]のラベル番号は異なる値を取り得る。
【0048】
次に、
図4に戻ってラベリング処理の説明を続ける。上記更新処理(ステップS3)が完了すると、探索処理(ステップS4)を実行する。この探索処理も更新処理と同様に、ラン毎の個別探索処理を一のスレッドとし、並列処理制御部648により書換タイミングを制御しながらGPU642内の各プロセッサコア641によりスレッドを並列的に実行する。つまり、
図3に示すように、第0プロセッサコア641ではランr[0]を処理対象ランとして個別探索処理が実行され、これに並行して第1プロセッサコア641ではランr[1]を処理対象ランとして個別探索処理が実行される。また、その他のランr[2]、r[3]、…、r[n]についても、上記個別探索処理と並行して実行される。なお、「個別探索処理」とは、一のランを処理対象ランとするとともに当該処理対象ランに接続する連結ランをデータ接続表(ラン接続データid[0]、id[1]、…、id[n])に基づいて見つけ出して処理対象ランおよび連結ランのラベル番号を同一に書き換えるものである。以下、
図9および
図10を参照しつつ個別探索処理について詳述する。
【0049】
図9は各プロセッサコアで実行される個別探索処理を示すフローチャートである。また、
図10は各プロセッサコアで実行される個別探索処理の一例を示す模式図である。ここにおいても、個別更新処理の場合と同様に、まず
図9を参照しつつランr[p]に対する個別探索処理の基本動作を説明し、その後で
図10の具体例を参照しつつラベル番号の書換例について説明する。
【0050】
ランr[p]の個別探索処理は第pプロセッサコア641により以下の手順で実行される。ステップS31では、ランr[p]を処理対象ランとし、この処理対象ランr[p]に対応するラン接続データid[p]をラン接続表から読み出し、取得する。そして、そのラン接続データid[p]が処理対象ランr[p]のラベル番号の初期値と等しいか否かを判定する(ステップS32)。ここで、同一であると判定した場合には、そのまま個別探索処理を完了する。一方、異なると判定した場合(ステップS32で「NO」の場合)には、ステップS33〜S38を実行してラベル番号の書換を行う。
【0051】
ステップS33でラン接続データid[p]を値(new_dum)として登録した後、ラン接続データid[new_dum]をラン接続表から読み出す(ステップS34)。そして、ラン接続データid[new_dum]と、値(new_dum)とが等しいか否かを判定し(ステップS35)、それらが等しくないと判定する間、値(new_dum)をラン接続データid[new_dum]に書き換え(ステップS36)、ステップS34に戻って新たなラン接続データid[new_dum]の読出を繰り返す。
【0052】
そして、ラン接続データid[new_dum]と、値(new_dum)とが一致した時点(ステップS35で「YES」と判定された時点)で、ラン番号pのランr[p]のラベル番号を値(new_dum)に書き換える(ステップS37)。また、ラン接続データid[p]についても、同様に値(new_dum)に書き換え(ステップS38)、当該個別探索処理を終了する。なお、この書換は個別更新処理の場合と同様に並列処理制御部648により書換タイミングを制御された状態で実行される。
【0053】
次に、
図8に示すように更新処理によってラン接続表が初期状態から更新されるのに続いて探索処理を実行した場合の一例(
図10)を参照しつつ探索処理(ステップS4)の内容をさらに詳しく説明する。なお、ここでは、ランr[4]を処理対象ランとする個別探索処理について
図10を参照しつつ説明する。
図10中の縦軸は時間経過を表しており、ランr[0]〜r[4]のラベル番号の初期値はそれぞれ0〜4に設定されている。ラベル番号のうち梨地模様を付したものは探索対象となっているラベル番号を示している。また、「第4スレッド」の下方に並んでいる項目(「id[4]の取得→id[4]=2」など)は第4プロセッサコア641で実行される処理内容を示している。
【0054】
第4プロセッサコア641では、ランr[4]を処理対象ランとし、この処理対象ランr[4]に対応するラン接続データid[4]をラン接続表から読み出し、この値(=2)をランr[4]のラベル番号の初期値(=4)と対比したところ、両者が不一致であることを確認する。すると、読み出し対象を、ラン接続データid[4]が示すラベル番号(new_dum)のラン接続データid[new_dum]、つまりラン接続データid[2]に移動し、ラン接続表からラン接続データid[2]を読み出し、この値(=0)をランr[2]のラベル番号の初期値(=2)と対比する。そして、両者が不一致であることを確認すると、再び読み出し対象を、ラン接続データid[2]が示すラベル番号(new_dum)のラン接続データid[new_dum]、つまりラン接続データid[0]に移動し、ラン接続表からラン接続データid[0]を読み出し、この値(=0)をランr[0]のラベル番号の初期値(=0)と対比する。すると、両者が一致することを確認し、処理対象ランr[4]のラベル番号をその値に書き換え、このスレッドを終了する。なお、その他のスレッドについても同様の個別探索処理が実行され、その結果、互いに接続するランが探索されて同一のラベルが付与される。例えば
図5に示す二値画像データに対してランレングス化処理して得られたランr[0]〜r[4](
図6参照)については同一のラベル(=0)が付与される。
【0055】
以上のように、本実施形態では、ランr[m]毎に互いに異なる値を有するラベル番号が初期設定された後、更新処理(ステップS3)および探索処理(ステップS4)の2パス工程を実行している。これらのうち更新処理(ステップS3)では、ランr[m]毎に、個別更新処理(ステップS3−0、S3−1、…)を実行して処理対象ランに接続する連結ランが存在するか否かに応じてラベル番号を更新している。また、探索処理(ステップS4)では、ランr[m]毎に、個別探索処理(ステップS4−0、S4−1、…)を実行して処理対象ランに接続する連結ランを更新後のラベル番号に基づいて見つけ出して処理対象ランおよび連結ランのラベルを同一に書き換えている。このように、ランの個数mと同数個のラベル番号によって二値画像データBFIのラベリング処理を行うことができ、ラベリング処理を高速化することができる。
【0056】
また、更新処理(ステップS3)および探索処理(ステップS4)のいずれも、1ラン1スレッドでラン毎の個別更新処理および個別探索処理を並列的に実行しているため、ラベリング処理に要するトータル時間を大幅に短縮することができる。
【0057】
さらに、個別更新処理(ステップS3−0、S3−1、…)においては、処理対象ランに直接接続する第1連結ランのラベル番号を更新した際には、その第1連結ランのみならず、第1連結ランに接続する処理対象ラン以外の第2連結ランが存在する場合には、第2連結ランについてもラベル更新するように構成している。そのため、処理対象ランに対する個別更新処理よりも後で実行される第2連結ランに対する個別更新処理に要する時間を短縮することができる。その結果、トータルの処理時間を短縮することができる。
【0058】
なお、本発明は上記した実施形態に限定されるものではなく、その趣旨を逸脱しない限りにおいて上述したもの以外に種々の変更を行うことが可能である。例えば、上記実施形態では、1ラン1スレッドにより個別更新処理を並列的に実行しているが、複数のランr[m]の分割態様はこれに限定されるものではない。つまり、プロセッサコア641の個数に応じて複数のランr[m]の分割態様を適宜変更してもよく、複数のランr[m]をプロセッサコア641の個数に応じて複数組に分割し、各プロセッサコアが分割された一または複数のランについて個別更新処理を更新スレッドとして実行するように構成してもよい。これらの点については個別探索処理でも全く同様である。
【0059】
また、上記実施形態では、個別更新処理および個別更新処理を実行するために複数のプロセッサコア641を有するGPU642を用いているが、GPUの代わりに複数のCPUを設け、各CPUで一のスレッドを実行するように構成してもよい。また、GPU642内に演算処理部646やラベリング用記憶部645を設けてもよい。
【0060】
また、上記実施形態では、第0〜第nプロセッサコア641の上位に位置する並列処理制御部648がラベリング用記憶部645のアクセス管理を行い、更新処理および探索処理のいずれにおいても、一のスレッドによるデータ書換に応じて他のスレッドによるデータ書換を一時的に禁止している。つまり、一のスレッドで例えばラン接続データid[m](ただし、0≦m≦n)の書換を行う場合、他のスレッドがラン接続データid[m]を書き換えるのを一時的に禁止してラベル更新の競合を回避するのみならず、それ以外のラン接続データの書換も一時的に禁止している。このようなアクセス管理は必ずしも最適なものであるといえず、改善の余地がある。例えば処理速度のさらなる向上を図るためには、並列処理制御部648によるラベリング用記憶部645のアクセス管理を以下のように実行するのが望ましい。すなわち、一のスレッドでラン接続データid[m]の書換を行う時には、他のスレッドがラン接続データid[m]を書き換えるのを一時的に禁止してラベル更新の競合を回避する一方で、ラン接続データid[m]以外のラン接続データへのアクセスを自由化してデータ書換を許可するのが好適である。
【0061】
また、上記実施形態では、二値画像データBFIを行毎にランレングス化してランr[m]を得るとともに、処理対象ランの下行で、且つ縦および斜め方向に接続するランを連結ランとして判定しているが、ランレングス化の態様も連結ランの判定態様もこれに限定されるものではなく、例えば列毎にランレングス化し、当該ランレングス化処理により作成されたランに対して本発明にかかるラベリング方法を適用することができる。また、上記実施形態では、上記したように下行のランに対する8近傍探索により連結ランを決定しているが、その他の探索方法、例えば4近傍探索により連結ランを決定してしてもよい。 また、上記実施形態のランレングス化処理では画像全体で一度にランを生成しているが、画像を適当なサイズ領域に分断し、各分断範囲でランを生成してもよい。ただし、この場合には、分断領域同士の境界でランの接続判定処理を行う必要がある。
【0062】
また、上記実施形態では、連番のラベル番号(0,1,2,…)が本発明の「ラベル」として用いられているが、これと異なる番号や番号以外の値を本発明の「ラベル」として用いてもよい。また、より小さな番号に書き換えてラベル更新しているが、ラベル更新の態様もこれに限定されるものではない。
【0063】
さらに、上記実施形態では、装置内部で二値画像データBFIをランレングス化した後、当該ランレングス化処理により作成されたランに対してラベリング処理を施しているが、本発明に適用対象はこれに限定されるものではなく、例えば外部装置により作成されたランをラベリングする装置や方法に対して本発明を適用してもよい。