(57)【要約】【課題】ラベリング処理の高速化を図る。【解決手段】各ランに対して互いに異なるラベルを設定する初期ラベル設定工程と、ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第１連結ランが存在するか否かを判定し、第１連結ランが存在するときには、処理対象ランおよび第１連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行う更新工程と、更新工程後に、複数のラベルに基づいて複数のランのうち互いに接続するランを探索して同一のラベルを付与する探索工程とを備え、更新工程では、複数のランを複数組に分割するとともに各組で実行される個別更新処理を更新スレッドとし、排他制御のもと複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら複数の更新スレッドを並列して実行する。【選択図】図４
2014209310.tif 000002
【特許請求の範囲】
【請求項１】
二値画像データをランレングス化して作成された複数のランに対してラベリング処理を施すラベリング方法であって、
各ランに対して互いに異なるラベルを設定する初期ラベル設定工程と、
前記ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第１連結ランが存在するか否かを判定し、前記第１連結ランが存在するときには、前記処理対象ランおよび前記第１連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行う更新工程と、
前記更新工程後に、前記複数のラベルに基づいて前記複数のランのうち互いに接続するランを探索して同一のラベルを付与する探索工程とを備え、
前記更新工程では、前記複数のランを複数組に分割するとともに各組で実行される個別更新処理を更新スレッドとし、排他制御のもと前記複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに前記一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら前記複数の更新スレッドを並列して実行することを特徴とするラベリング方法。
【請求項２】
請求項１に記載のラベリング方法であって、
前記更新工程では、前記一の更新スレッドにより書き換えられるラベル以外のラベルの前記他の更新スレッドによる書換を許可するラベリング方法。
【請求項３】
請求項１または２に記載のラベリング方法であって、
前記個別更新処理では、前記処理対象ランおよび前記第１連結ランのうちラベルを更新した方のランを更新ランとし、当該更新ランに対して前記処理対象ランおよび前記第１連結ラン以外の第２連結ランが接続するか否かを判定し、前記第２連結ランが存在するときには、さらに前記更新ランおよび前記第２連結ランのうち一方のラベルを他方のラベルに更新するラベリング方法。
【請求項４】
請求項１ないし３のいずれか一項に記載のラベリング方法であって、
前記複数のランは前記二値画像データを行毎にランレングス化して得られるものであり、
前記個別更新処理では、前記処理対象ランの下行に接続するランを前記第１連結ランとして判定するラベリング方法。
【請求項５】
請求項１ないし４のいずれか一項に記載のラベリング方法であって、
前記探索工程では、前記ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する連結ランを前記複数のラベルに基づいて見つけ出して前記処理対象ランおよび前記連結ランのラベルを同一に書き換える個別探索処理を実行するラベリング方法。
【請求項６】
請求項５に記載のラベリング方法であって、
前記探索工程では、前記複数のランを複数組に分割するとともに各組で実行される個別探索処理を探索スレッドとし、排他制御のもと前記複数の探索スレッドのうち一の探索スレッドによるラベルの書換を許可するとともに前記一の探索スレッドにより書き換えられるラベルの他の探索スレッドによる書換を禁止しながら前記複数の探索スレッドを並列して実行するラベリング方法。
【請求項７】
請求項６に記載のラベリング方法であって、
前記探索工程では、前記一の探索スレッドにより書き換えられるラベル以外のラベルの前記他の探索スレッドによる書換を許可するラベリング方法。
【請求項８】
二値画像データをランレングス化して作成された複数のランに対してラベリング処理を施すラベリング装置であって、
各ランのラベルを記憶する記憶部と、
演算処理を行うプロセッサコアを複数個有するプロセッサ部と、
前記複数のラベルに互いに異なる値を初期設定した後で、前記ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第１連結ランが存在するか否かを判定し、前記第１連結ランが存在するときには、前記処理対象ランおよび前記第１連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行い、さらに前記複数のラベルに基づいて前記複数のランのうち互いに接続するランを探索して同一のラベルを付与する制御部とを備え、
前記複数のランは前記プロセッサコアの個数に応じて複数組に分割され、
各プロセッサコアは分割された一または複数のランについて前記個別更新処理を更新スレッドとして実行し、
前記制御部は、排他制御のもと前記複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに前記一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら前記複数の更新スレッドを並列して実行させることで前記ラン毎の個別更新処理を行うことを特徴とするラベリング装置。
【請求項９】
請求項８に記載のラベリング装置であって、
前記制御部は、前記ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する連結ランを前記複数のラベルに基づいて見つけ出して前記処理対象ランおよび前記連結ランのラベルを同一に書き換える個別探索処理を実行するラベリング装置。
【請求項１０】
請求項９に記載のラベリング装置であって、
各プロセッサコアは分割された一または複数のランについて前記個別探索処理を探索スレッドとして実行し、
前記制御部は、排他制御のもと前記複数の探索スレッドのうち一の探索スレッドによるラベルの書換を許可するとともに前記一の探索スレッドにより書き換えられるラベルの他の探索スレッドによる書換を禁止ながら前記複数の探索スレッドを並列して実行させることで前記ラン毎の個別探索処理を行うラベリング装置。
【請求項１１】
検査対象画像を取得する画像取得部と、
前記検査対象画像を検査して欠陥部位が含まれる欠陥画像を抽出する画像抽出部と、
前記欠陥画像を二値化処理して二値画像データを生成する二値化処理部と、
前記二値画像データをランレングス化して複数のランを生成するラン生成部と、
請求項８ないし１０のいずれか一項に記載のラベリング装置と同一構成を有し、前記複数のランのうち互いに接続するランに対して同一のラベルを付与するラベリング手段と
を備えることを特徴とする欠陥検査装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、二値画像データをランレングス化して作成された複数のランに対してラベルを付与するラベリング技術および当該ラベリング技術を適用した欠陥検査装置に関するものである。
【背景技術】
【０００２】
半導体基板やプリント基板等の製造技術分野では、製品に含まれる欠陥を検出しこれを分析・評価するために、評価対象物を顕微鏡等を介して撮像し、得られた画像から欠陥部を含む画像、いわゆる欠陥画像を抽出している。そして、当該欠陥画像の二値画像データに基づいて欠陥部の個数、面積や重心などを計測している。このとき、当該計測を自動的に行うために、ラベリング（連結領域抽出）処理が広く利用されている。例えば、特許文献１では、二値画像データを行毎にランレングス化して生成されるランに対して２パスのラベル付与処理を実行してラベリング処理の高速化が図られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１８６１２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記した特許文献１に記載の発明（以下「従来発明」という）では、上位のランデータから順に調査することを前提としており、これがさらなる高速化を阻害する要因のひとつになっている。また、上記従来発明では、異なるラベルが与えられたランデータ同士が同じ連結成分に属するか否かを記録するラベルテーブル、並びにラベル毎に当該ラベルに対応するランデータの数を関連付けたラン数テーブルを別途設ける必要がある。そのため、ランの数の増大や連結状態の複雑化に応じて上記ラベルテーブルおよびラン数テーブルの要素数が増大してしまい、これがラベリング処理の高速化を阻害する別の要因にもなっている。
【０００５】
この発明は上記課題に鑑みなされたものであり、二値画像データのラベリング処理の高速化を図ることができる技術および当該技術を用いて欠陥検査を効率的に行う技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明にかかるラベリング方法は、二値画像データをランレングス化して作成された複数のランに対してラベリング処理を施すラベリング方法であって、各ランに対して互いに異なるラベルを設定する初期ラベル設定工程と、ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第１連結ランが存在するか否かを判定し、第１連結ランが存在するときには、処理対象ランおよび第１連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行う更新工程と、更新工程後に、複数のラベルに基づいて複数のランのうち互いに接続するランを探索して同一のラベルを付与する探索工程とを備え、更新工程では、複数のランを複数組に分割するとともに各組で実行される個別更新処理を更新スレッドとし、排他制御のもと複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら複数の更新スレッドを並列して実行することを特徴としている。
【０００７】
また、本発明にかかるラベリング装置は、二値画像データをランレングス化して作成された複数のランに対してラベリング処理を施すラベリング装置であって、各ランのラベルを記憶する記憶部と、演算処理を行うプロセッサコアを複数個有するプロセッサ部と、複数のラベルに互いに異なる値を初期設定した後で、ラン毎に、当該ランを処理対象ランとするとともに当該処理対象ランに接続する第１連結ランが存在するか否かを判定し、第１連結ランが存在するときには、処理対象ランおよび第１連結ランのうちの一方のラベルを他方のラベルに更新する個別更新処理を行い、さらに複数のラベルに基づいて複数のランのうち互いに接続するランを探索して同一のラベルを付与する制御部とを備え、複数のランはプロセッサコアの個数に応じて複数組に分割され、各プロセッサコアは分割された一または複数のランについて個別更新処理を更新スレッドとして実行し、制御部は、排他制御のもと複数の更新スレッドのうち一の更新スレッドによるラベルの書換を許可するとともに一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しながら複数の更新スレッドを並列して実行させることでラン毎の個別更新処理を行うことを特徴としている。
【０００８】
さらに、本発明にかかる欠陥検査装置は、検査対象画像を取得する画像取得部と、検査対象画像を検査して欠陥部位が含まれる欠陥画像を抽出する画像抽出部と、欠陥画像を二値化処理して二値画像データを生成する二値化処理部と、二値画像データをランレングス化して複数のランを生成するラン生成部と、上記ラベリング装置と同一構成を有し、複数のランのうち互いに接続するランに対して同一のラベルを付与するラベリング手段とを備えることを特徴としている。
【０００９】
このように構成された発明では、ラン毎に互いに異なる値を有するラベルが初期設定される。そして、ラン毎に、個別更新処理が実行され、処理対象ランに接続する連結ランが存在するか否かに応じてラベルの更新が実行される。その後で、複数のラベルに基づいて複数のランのうち互いに接続するランが探索され、それに対して同一のラベルが付与される。このように更新工程と探索工程の２パス方式でラベリング処理を行う点で従来発明と共通するが、本発明では、ランの個数と同数のラベルによって二値画像データのラベリング処理が行われており、従来発明で用いていたラベルテーブルおよびラン数テーブルが不要であり、ラベリング処理の高速化が可能となっている。
【００１０】
しかも、本発明の更新工程では、複数のランを複数組に分割するとともに各組で実行される個別更新処理を更新スレッドとし、それらの更新スレッドを並列して実行する。つまり、ラン毎の個別更新処理は並列実行される。したがって、ラベル更新については更新スレッド間で排他制御されるものの、上位のランから逐次的にラベルを付与する従来発明に比べ、ラベリング処理に要するトータル時間を大幅に短縮することができる。
【００１１】
ここで、更新工程では、一の更新スレッドにより書き換えられるラベルの他の更新スレッドによる書換を禁止しているが、当該ラベル以外のラベル、つまり競合しないラベルについては他の更新スレッドによる書換を許可してもよい。これによって、処理効率を高めてラベリング処理に要する時間をさらに短縮することができる。
また、個別更新処理において、第１連結ランのラベルを更新したとき、第１連結ランに接続する処理対象ラン以外の第２連結ランが存在するか否かを判定し、第２連結ランが存在するときには、第１連結ランおよび第２連結ランのうちの一方のラベルを他方のラベルに更新するように構成してもよい。このように第１連結ランのみならず、当該第１連結ランを介して処理対象ランに接続する第２連結ランについても、ラベル更新しておくことで、処理対象ランに対する個別更新処理よりも後で実行される第２連結ランに対する個別更新処理に要する時間を短縮することができる。その結果、トータルの処理時間を短縮することができる。
【００１２】
また、第１連結ランのラベルを更新する前の更新前ラベルと同一ラベルを有するランを第２連結ランとしてもよく、更新前ラベルを利用することで第２連結ランを容易に、且つ確実に見つけ出すことができ、好適である。
【００１３】
また、二値画像データを行毎にランレングス化してもよく、この場合、処理対象ランの下行に接続するランを第１連結ランとして判定することができる。
【００１４】
また、２パスのうち探索工程（複数のランのうち互いに接続するランを探索して同一のラベルを付与する工程）においてラン毎に個別探索処理を実行してもよい。この「個別探索処理」とは、一のランを処理対象ランとするとともに当該処理対象ランに接続する連結ランを複数のラベルに基づいて見つけ出して処理対象ランおよび連結ランのラベルを同一に書き換える処理を意味している。このようにラン毎の個別探索処理によって探索工程を合理的に行うことができる。しかも、上記したラン毎の個別更新処理と同様に、複数のランを複数組に分割するとともに各組で実行される個別探索処理を探索スレッドとし、排他制御のもと複数の探索スレッドのうち一の探索スレッドによるラベルの書換を許可するとともに一の探索スレッドにより書き換えられるラベルの他の探索スレッドによる書換を禁止しながら複数の探索スレッドを並列して実行してもよい。これによって、探索工程においても処理速度を高めてラベリング処理の高速化をより一層進めることができる。
【発明の効果】
【００１５】
この発明によれば、ラベリング処理を実行するための処理の一部を並列で実行することができ、二値画像データのラベリング処理に要するトータル時間を短縮することができる。
【図面の簡単な説明】
【００１６】
【図１】この発明にかかるラベリング装置の一実施形態を装備する欠陥検査装置を用いる検査システムの概略構成を示す図である。
【図２】画像処理部の概略構成を示すブロック図である。
【図３】本発明にかかるラベリング装置の一実施形態に相当するラベリング部の概略構成を示すブロック図である。
【図４】ラベリング部によるラベリング動作を示すフローチャートである。
【図５】ラベリング部に与えられる二値画像データの一例を示す図である。
【図６】図５の二値画像データに対してランレングス化処理を実行して得られるランのランデータおよびラン同士の連結関係を示すラン接続データの初期値を示す図である。
【図７】各プロセッサコアで実行される個別更新処理を示すフローチャートである。
【図８】各プロセッサコアで実行される個別更新処理の一例を示す模式図である。
【図９】各プロセッサコアで実行される個別探索処理を示すフローチャートである。
【図１０】各プロセッサコアで実行される個別探索処理の一例を示す模式図である。
【発明を実施するための形態】
【００１７】
図１はこの発明にかかるラベリング装置の一実施形態を装備する欠陥検査装置を用いる検査システムの概略構成を示す図である。この検査システム１は、検査対象である半導体基板（以下「基板」という。）Ｓの外観に現れたピンホールや異物等の欠陥検査を行う検査システムである。検査システム１は、基板Ｓ上の検査対象領域を撮像する撮像装置２と、撮像装置２からの画像データに基づいて欠陥検査を行う制御装置３を有する。
【００１８】
本システムとは別に基板Ｓの製造ラインに設けられた基板検出装置Ｍにおいて基板Ｓに欠陥が発見されると、その欠陥の位置座標がこの検査システム１に与えられる。製造ラインに組み込まれた基板検出装置Ｍは、予め定められた処理アルゴリズムによって基板Ｓ全体を検査し、基板表面に欠陥としての要件を満たす領域があればその位置座標を取得して出力する。したがって、該基板検出装置Ｍが有する撮像部は比較的低解像度であり、処理アルゴリズムも固定的である。
【００１９】
一方、この検査システム１は、図示しないインターフェースを介して基板検出装置Ｍと接続されており、基板検出装置Ｍから欠陥として位置座標が報告された領域をより高い解像度を有する撮像装置２によって撮像するとともに、その画像を制御装置３が精査して欠陥の有無やその種類などをより詳しく判定するとともに、欠陥部分の画像を表示部に表示する。
【００２０】
撮像装置２は、基板Ｓ上の検査対象領域を撮像することにより画像データを取得する撮像部２１、基板Ｓを保持するステージ２２、および、撮像部２１に対してステージ２２を相対的に移動させるステージ駆動部２３を有している。また、撮像部２１は、照明光を出射する照明部２１１、基板Ｓに照明光を導くとともに基板Ｓからの光が入射する光学系２１２、および、光学系２１２により結像された基板Ｓの像を電気信号に変換する撮像デバイス２１３を有している。ステージ駆動部２３はボールねじ、ガイドレールおよびモータにより構成され、制御装置３に設けられた装置制御部４がステージ駆動部２３および撮像部２１を制御することにより、基板Ｓ上の検査対象領域が撮像される。
【００２１】
制御装置３は装置制御部４を有しており、この装置制御部４が予め読み込まれた制御プログラムを実行することにより、図１に示す制御装置各部を以下のように動作させる。制御装置３は、上記の装置制御部４のほか、画像取得部５および画像処理部６を備えている。画像取得部５は、撮像部２１から出力される電気信号をデータ化して、撮像画像に対応する画像データを取得する。画像処理部６は、画像取得部５が取得した画像データに対して適宜の画像処理を施して、画像に含まれる欠陥の検出や欠陥部分の画像（以下「欠陥画像」という）を作成する。なお、当該画像処理部６は本発明にかかるラベリング装置の一実施形態であるラベリング部を含んでおり、欠陥画像に対するラベリング処理を高速に実行可能となっている。画像処理部６、特にラベリング部の構成および動作については、後で詳述する。
【００２２】
さらに、制御装置３は、各種データを記憶するための記憶部７、ユーザからの操作入力を受け付けるキーボードおよびマウスなどの入力受付部８および操作手順や処理結果等のユーザ向け視覚情報を表示する表示部９などを備えている。また、図示を省略しているが、光ディスク、磁気ディスク、光磁気ディスク等のコンピュータ読み取り可能な記録媒体から情報の読み取りを行う読取装置を有し、検査システム１の他の構成との間で信号を送受信する通信部が、適宜、インターフェイス（Ｉ／Ｆ）を介する等して接続される。
【００２３】
図２は画像処理部の概略構成を示すブロック図である。画像処理部６は、フィルタリング部６１、差分抽出部６２、二値化処理部６３、ラベリング部６４および孤立除去処理部６５を有している。フィルタリング部６１には、画像取得部５から撮像画像が送られてくるとともに、記憶部７から参照画像が送られてくる。これら両画像のうち撮像画像は、撮像装置２によって撮像された基板Ｓの画像であり、欠陥検出検査の対象となる検査対象画像に相当する。また、参照画像は欠陥のない理想的な基板に対応する画像であり、この実施形態では、次に説明するように、検査対象画像と参照画像との比較によって検査対象画像から欠陥検出が行われる。これらの欠陥画像および参照画像は記憶部７に記憶され、必要に応じて参照されるが、外部の記憶媒体に記憶された画像データを必要に応じて読み込む形態であってもよい。
【００２４】
フィルタリング部６１は、検査対象画像および参照画像のそれぞれについて、画像ノイズおよび欠陥と関係のない軽微な画像の差異を除去するためのフィルタリング処理を行い、各画像を差分抽出部６２に送る。この差分抽出部６２は、本発明の「画像抽出部」の一例に相当するものであり、フィルタリング処理後の検査対象画像および参照画像の差分を求めることで画像内容が互いに異なる領域を抽出し、当該差分画像を二値化処理部６３に送る。そして、二値化処理部６３は適宜の閾値によって差分画像を二値化して二値画像データＢＦＩを生成し、ラベリング部６４に送る。このラベリング部６４は二値画像データＢＦＩをランレングス化して複数のランを生成し、当該複数のランに対してラベルを付与する。さらに、孤立除去処理部６５がラベリングされた二値画像から残留する孤立点を除去する。これにより、求める欠陥位置画像が作成され、画像処理部６が出力される。
【００２５】
図３は、本発明にかかるラベリング装置の一実施形態に相当するラベリング部の概略構成を示すブロック図である。このラベリング部６４は複数のプロセッサコア６４１を有するＧＰＵ（Graphics Processing Unit）６４２を備えている。このＧＰＵ６４２では、各プロセッサコア６４１が個別更新処理部６４３および個別探索処理部６４４として機能し、ラン毎の個別更新処理および個別探索処理をそれぞれ一のスレッドとして実行する。本実施形態では、ラン毎の個別更新処理が本発明の「更新スレッド」の一例に相当し、ラン毎の個別探索処理が本発明の「探索スレッド」の一例に相当している。なお、個別更新処理および個別探索処理については、後で詳述する。
【００２６】
また、ラベリング部６４は二値画像データＢＦＩ、ランｒ［ｍ］を特定するためのデータ（以下「ランデータ」という）、ラン接続データｉｄ［ｍ］を記憶するラベリング用記憶部６４５を有している。これらのデータについても、後で具体例を示しながら詳述する。
【００２７】
さらに、ラベリング部６４は、ＣＰＵ（Central Processing Unit）やメモリなどで構成された演算処理部６４６が設けられている。演算処理部６４６では、ＣＰＵが所定のプログラムに従って演算処理することにより、二値画像データＢＦＩをランレングス化してランｒ［ｍ］を生成するラン生成部６４７、ＧＰＵ６４２内の各プロセッサコア６４１で実行されるスレッドを排他制御しながら並列して実行させる並列処理制御部６４８、ならびにランｒ［ｍ］およびラン接続データｉｄ［ｍ］に含まれるラベル番号を初期化するデータ初期設定部６４９を備えている。このように演算処理部６４６が本発明の「制御部」として機能する。
【００２８】
次に、上記のように構成されたラベリング部６４によるラベリング動作について図４ないし図１０を参照しつつ説明する。図４はラベリング部によるラベリング動作を示すフローチャートである。二値化処理部６３により作成された二値画像データＢＦＩがラベリング部６４に与えられると、ラベリング部６４の演算処理部６４６はラベリング部６４の各部を制御してラベリング処理を実行する。まず、当該二値画像データＢＦＩが一時的にラベリング用記憶部６４５に登録される。また、二値画像データＢＦＩに対し、ランレングス化処理がラン生成部６４７で実行されて複数のランｒ［ｍ］が生成され（ステップＳ１）、ラベリング用記憶部６４５に記憶される。なお、ランレングス化処理についは従来周知技術が数多く提案されており、本実施形態においても一般的なランレングス化処理をそのまま用いている。したがって、ランレングス化処理の説明は省略する。
【００２９】
図５はラベリング部に与えられる二値画像データの一例を示す図である。また、図６は図５の二値画像データに対してランレングス化処理を実行して得られるランのランデータおよびラン同士の連結関係を示すラン接続データの初期値を示す図である。図５および図６（ａ）中の縦方向および横方向の数値（０，１，２，…）は、マトリクス配列された画素の行方向および列方向の座標位置、つまり行インデクスおよび列インデクスを示している。また、図５において、ハッチングが施された画素は、「１」の画素データを有する画素であることを示す一方、ハッチングが施されていない画素は、「０」の画素データを有する画素であることを示している。このような画素データを有する二値画像データＢＦＩに対して行毎のランレングス化処理を加えると、図６（ａ）に示すランが得られる。具体的には、０行目および４行目においては、「１」の画素は存在しないので、ランは作成されず、１行目ないし３行目においては、それぞれ２個、２個および１個のランが作成される。この明細書では、ランレングス化処理によって作成された各ランのラン番号を「ｍ」で表し、ランの作成順に０，１，２，…の値を取っており、ラン番号ｍのランをｒ［ｍ］で表す。
【００３０】
また、図５の二値画像データＢＦＩをランレングス化処理して作成されるランｒ［０］〜ｒ［４］のランデータをラン番号順にラベリング用記憶部６４５のランデータ記憶領域に格納した状態が図６（ｂ）に図示されている。同図（ｂ）中において、「ラベル番号」は当該ランに付与されたラベルを示し、「始端画素位置」は二値画像データＢＦＩにおける当該ランの始端画素位置を示す列インデクスを示し、「終端画素位置」は二値画像データＢＦＩにおける当該ランの終端画素位置を示す列インデクスを示し、「行インデクス」は二値画像データＢＦＩにおける当該ランの行インデクスを示している。これらのうち「ラベル番号」は、当該ランと当該ラン以外のランとの連結関係を示す値であり、後で説明する更新処理（ステップＳ３）および探索処理（ステップＳ４）を実行することで図５に示す二値画像データＢＦＩにおいて相互に連結しているラン同士に対して同じ値が付与される。なお、本実施形態では、探索処理（ステップＳ４）を効率的に実行するために、ラン同士の連結関係を示すラン接続表を有している。このラン接続表では、ランｒ［ｍ］の接続状態を示すデータとしてラン接続データｉｄ［ｍ］が設けられ、ラベル番号によりランｒ［ｍ］とその他のランとの接続状態を示しており、例えば図６（ｃ）に示すような表形式でラベリング用記憶部６４５のラン接続データ記憶領域に格納される。
【００３１】
図４に戻ってラベリング処理の説明を続ける。本実施形態では、二値画像データＢＦＩからランを作成した際に、ラン毎に、当該ランと当該ラン以外のランとの連結関係を示すラベルとして互いに異なるラベル番号を設定する（ステップＳ２）。本実施形態では、ランｒ［ｍ］のラベル番号およびラン接続データｉｄ［ｍ］のラベル番号をラン番号ｍと一致させている。つまり、ランｒ［０］、ｒ［１］、…のラベル番号をそれぞれ「０」、「１」、…に初期設定するとともに、ラン接続データｉｄ［０］、ｉｄ［１］、…のラベル番号についてもそれぞれ「０」、「１」、…に初期設定する。
【００３２】
次のステップＳ３では更新処理（ステップＳ３）が実行される。この更新処理では、ラン毎に個別更新処理が実行される。この「個別更新処理」とは、一のランを処理対象ランとするとともに当該処理対象ランの下行で縦および斜めに接続する連結ランが存在するか否かを判定し、連結ランが存在するときには、処理対象ランおよび連結ランのうちのラン接続データのラベル番号の大きい方を小さいラベル番号に更新する処理であり、本実施形態では複数個（例えばｎ個）のランのそれぞれについて個別更新処理を実行する。ここで、これらｎ個の個別更新処理をシリアル、例えばラン番号順に行うことも可能であるが、この場合、更新処理に多大な時間を費やしてしまう。
【００３３】
そこで、本実施形態では、ラン毎の個別更新処理を一のスレッドとし、ＧＰＵ６４２内の各プロセッサコア６４１によりスレッドが並列的に実行される。つまり、図３に示すように、第０プロセッサコア６４１ではランｒ［０］を処理対象ランとして個別更新処理が実行され、これに並行して第１プロセッサコア６４１ではランｒ［１］を処理対象ランとして個別更新処理が実行される。また、その他のランｒ［２］、ｒ［３］、…、ｒ［ｎ］についても、上記個別更新処理と並行して実行される。ただし、各個別更新処理では、後述するようにラン接続データ中のラベル番号の更新作業が伴うため、本実施形態では並列処理制御部６４８がプロセッサコア６４１間での排他制御を行う。
【００３４】
図７は各プロセッサコアで実行される個別更新処理を示すフローチャートである。また、図８は各プロセッサコアで実行される個別更新処理の一例を示す模式図である。ここでは、まず図７を参照しつつラン番号ｐ（ｐ＝０，１，２，…またはｎ）のランｒ［ｐ］に対する個別更新処理の基本動作を説明し、その後で図８の具体例を参照しつつラベル番号の更新例について説明する。
【００３５】
ランｒ［ｐ］の個別更新処理は第ｐプロセッサコア６４１により以下の手順で実行される。ステップＳ１１では、ランｒ［ｐ］を処理対象ランとし、この処理対象ランｒ［ｐ］の下行に接続されるランを第１連結ランとして抽出する。そして、第１連結ランが抽出されなかった場合（ステップＳ１２で「ＮＯ」の場合）には、当該スレッドでの個別更新処理を終了する。
【００３６】
一方、第１連結ランが抽出された場合（ステップＳ１２で「ＹＥＳ」の場合）には、以下のステップＳ１３〜Ｓ２１を実行してラベル番号の更新を行う。なお、ここでは、ランｒ［ｐ］の下行に位置するランｒ［ｑ］が第１連結ランとして抽出されたものとして説明を続ける。
【００３７】
次のステップＳ１３では、ランｒ［ｐ］、ｒ［ｑ］にそれぞれ対応するラン接続データｉｄ［ｐ］、ｉｄ［ｑ］をラベリング用記憶部６４５から読み出す。ここで、ラン接続データｉｄ［ｐ］、ｉｄ［ｑ］が同じ値、つまり同一のラベル番号が設定されており、既に連結関係が設定されている場合（ステップＳ１４で「ＹＥＳ」の場合）には、当該個別更新処理を終了する。
【００３８】
一方、ステップＳ１４で「ＮＯ」と判定される、つまりラン接続データｉｄ［ｐ］、ｉｄ［ｑ］が異なっている（互いに異なるラベル番号が設定されている）場合には、ラン接続データの更新が行われる。このようにラン接続データｉｄ［ｐ］、ｉｄ［ｑ］が相互に異なるということは、ラン［ｐ］とラン［ｑ］との間に連結関係が成立していないことを意味している。しかしながら、実際には接続関係が成立しているため、ラン接続データｉｄ［ｐ］、ｉｄ［ｑ］の大小関係に応じて一方のラベル番号を他方のラベル番号に更新する（ステップＳ１５〜Ｓ１９）。
【００３９】
ステップＳ１５でラン接続データｉｄ［ｐ］、ｉｄ［ｑ］を対比し、その対比結果からラン接続データｉｄ［ｐ］がラン接続データｉｄ［ｑ］よりも大きなラベル番号であることが判明した場合には、ラン接続データｉｄ［ｐ］をラン接続データｉｄ［ｑ］に書き換え、ラン接続データｉｄ［ｐ］をより小さなラベル番号に更新する（ステップＳ１６）。また、このように変更される側のランｒ［ｐ］のラベル番号を値（ｏｌｄ＿ｄｕｍ）として登録し、変更される前のラン接続データｉｄ［ｐ］を値（ｏｌｄ＿ｉｄ）として登録するとともに、変更された後のラン接続データｉｄ［ｐ］を値（ｎｅｗ＿ｉｄ）として登録する（ステップＳ１７）。
【００４０】
逆に、ラン接続データｉｄ［ｑ］がラン接続データｉｄ［ｐ］よりも大きなラベル番号であることが判明した場合には、ラン接続データｉｄ［ｑ］をラン接続データｉｄ［ｐ］に書き換え、ラン接続データｉｄ［ｑ］をより小さなラベル番号に更新する（ステップＳ１８）。また、このように変更される側のランｒ［ｑ］のラベル番号を値（ｏｌｄ＿ｄｕｍ）として登録し、変更される前のラン接続データｉｄ［ｑ］を値（ｏｌｄ＿ｉｄ）として登録するとともに、変更された後のラン接続データｉｄ［ｑ］を値（ｎｅｗ＿ｉｄ）として登録する（ステップＳ１９）。
【００４１】
そして、値（ｏｌｄ＿ｄｕｍ）と値（ｏｌｄ＿ｉｄ）とが一致する場合（ステップＳ２０で「ＹＥＳ」の場合）には、当該個別更新処理を終了する。一方、両者が一致しない場合（ステップＳ１０で「ＮＯ」の場合）には、ラベル番号を更新した側のラン（以下「更新ラン」という）が処理対象ランおよび上記第１連結ラン以外のラン（以下「第２連結ラン」という）と連結している。そこで、このような第２連結ランが存在する場合には、ステップＳ２１を実行した上でステップＳ１３に戻る。すなわち、ステップＳ２１ではラン番号ｐを値（ｏｌｄ＿ｉｄ）に書き換えるとともにラン番号ｑを値（ｎｅｗ＿ｉｄ）に書き換える。これによって、更新ランが新たなランｒ［ｐ］として、また第２連結ランが新たなランｒ［ｑ］として設定され、ステップＳ１３に戻り、更新ランと第２連結ランとの間でラベル番号の異同をチェックし（ステップＳ１４）、ラベル番号が異なる場合には大きい方のラベル番号を小さい方のラベル番号に更新する（ステップＳ１５〜Ｓ１９）。
【００４２】
このように個別更新処理では、処理対象ランと直接的に接続する直接連結ランのみならず、当該直接連結ランを介して処理対象ランと間接的に接続する間接連結ランについてもラベル番号を更新している。
【００４３】
次に、図６（ａ）および（ｂ）に示すランｒ［０］〜ｒ［４］に対して更新処理を実行した場合の一例（図８）を参照しつつ更新処理（ステップＳ３）の内容をさらに詳しく説明する。なお、図８中の縦軸は時間経過を表しており、開始時点ではラン接続データｉｄ［０］〜ｉｄ［４］はそれぞれ初期値、つまり０〜４に設定されている。ラン接続データｉｄ［０］〜ｉｄ［４］のうち梨字模様を付したものは更新変更後のラベル番号を示している。また、「第０スレッド」〜「第４スレッド」の下方に並んでいる項目（「連結ラン：存在」、「書換禁止」など）は各プロセッサコア６４１で実行される処理内容を示している。
【００４４】
ｎ個のプロセッサコア６４１のうち５個のプロセッサコア６４１では、それぞれランｒ［０］〜ｒ［４］の個別更新処理が並列的に実行される。これらのうちランｒ［３］、ｒ［４］の個別更新処理はそれぞれ第３スレッドおよび第４スレッドとして実行されるが、ともに下行がなく、第１連結ランが存在しないために、早期にスレッド（ステップＳ３−３、Ｓ３−４）を終了し、個別更新処理を完了する。一方、ランｒ［０］〜ｒ［２］の個別更新処理では連結ランが存在することが確認され、それらに対応するラン接続データの読出、対比、書換などが行われる。ここで、例えば第２スレッド（ランｒ［２］の個別更新処理）では、処理対象ランであるランｒ［２］と、それに接続する連結ランｒ［４］とのラン接続データｉｄ［２］、ｉｄ［４］の値、つまりラベル番号が読み出される。ここでは、
ｉｄ［２］＝２、
ｉｄ［４］＝４、
となっている。これらを対比した結果、ラン接続データｉｄ［４］がラン接続データｉｄ［２］よりも大きい値であるため、ラン接続データｉｄ［４］のラベル番号をラン接続データｉｄ［２］のラベル番号に書き換える必要がある。こうして第２スレッドでの書換準備が最先に整うと、並列処理制御部６４８により第０スレッドおよび第１スレッドの個別更新処理におけるデータ書換が一時的に禁止された状態で、ラン接続データｉｄ［４］の書換が実行され、ラン接続データｉｄ［４］のラベル番号は「４」から「２」に更新される。また、更新されたランｒ［４］のラベル番号である値（ｏｌｄ＿ｄｕｍ）と、変更前のラン接続データｉｄ［４］である値（ｏｌｄ＿ｉｄ）とはともに「４」であり、同じ値であることから第２スレッド（ステップＳ３−２）を終了する。
【００４５】
次に、同図に示すように、第１スレッドにおいて書換準備が整うと、並列処理制御部６４８により第０スレッドの個別更新処理におけるデータ書換が一時的に禁止された状態で、ラン接続データｉｄ［２］、ｉｄ［３］の書換が実行される。より具体的には、第１スレッド（ランｒ［１］の個別更新処理）では、処理対象ランであるランｒ［１］と下行でランｒ［２］、ｒ［３］が接続しており、これらが第１連結ランと認定される。そして、処理対象ランｒ［１］のラン接続データｉｄ［１］と、連結ランｒ［２］、ｒ［３］のラン接続データｉｄ［２］、ｉｄ［３］とを読み出す。それらは、
ｉｄ［１］＝１、
ｉｄ［２］＝２、
ｉｄ［３］＝３、
となっている。これらを対比した結果、ラン接続データｉｄ［２］、ｉｄ［３］はいずれもラン接続データｉｄ［１］よりも大きい値であるため、ラン接続データｉｄ［２］、ｉｄ［３］のラベル番号をともにラン接続データｉｄ［１］のラベル番号に書き換える。また、更新されたランｒ［２］については、そのラベル番号である値（ｏｌｄ＿ｄｕｍ）と、変更前のラン接続データｉｄ［２］である値（ｏｌｄ＿ｉｄ）とはともに「２」である。また、更新されたランｒ［３］については、そのラベル番号である値（ｏｌｄ＿ｄｕｍ）と、変更前のラン接続データｉｄ［３］である値（ｏｌｄ＿ｉｄ）とはともに「３」である。このようにランｒ［２］、ｒ［３］のいずれについても、値（ｏｌｄ＿ｄｕｍ）と値（ｏｌｄ＿ｉｄ）とは同じ値であることから第１スレッド（ステップＳ３−１）を終了する。
【００４６】
最後に残った第０スレッド（ランｒ［０］の個別更新処理）では、処理対象ランであるランｒ［０］と下行でランｒ［２］が接続しており、これを連結ランとして上記第１スレッドおよび第２スレッドと同様にしてラン接続データｉｄ［２］のラベル番号をラン接続データｉｄ［０］のラベル番号に書き換える。ただし、更新されたラン接続データｉｄ［２］は既に１回書き換えられて初期値（ランｒ［２］の初期ラベル番号＝２）から「１」となっており、当該ランｒ［２］のラベル番号である値（ｏｌｄ＿ｄｕｍ）と、変更前のラン接続データｉｄ［２］である値（ｏｌｄ＿ｉｄ）とはそれぞれ「２」、「１」であり、異なっている。そこで、図７のステップＳ２１で実行しているように、ラン接続データｉｄ［０］、ｉｄ［１］の読出、対比、書換を行い、図８の下部分に示すように、ラン接続データｉｄ［１］のラベル番号をラン接続データｉｄ［０］のラベル番号に書き換える。こうして、更新されたランｒ［１］のラベル番号である値（ｏｌｄ＿ｄｕｍ）と、変更前のラン接続データｉｄ［１］である値（ｏｌｄ＿ｉｄ）とはともに「１」であり、同じ値であることから第０スレッド（ステップＳ３−０）を終了する。このように、ランｒ［１］は処理対象ランｒ［０］と直接的に接続されていないが、ランｒ［２］を介して間接的に接続されており、それについてもラン接続データの更新が行われる。
【００４７】
こうして全てのスレッドが終了すると、更新処理（ステップＳ３）が完了し、図６（ａ）および（ｂ）に示すランｒ［０］〜ｒ［４］に対して更新処理を実行することでラン接続データｉｄ［０］〜ｉｄ［４］が（０，１，２，３，４）から（０，０，０，１，２）に更新される。なお、上記説明からわかるように、１スレッド１ランで並行処理しているため、どのランが先に処理されるかによって更新処理後のラン接続データｉｄ［０］〜ｉｄ［４］のラベル番号は異なる値を取り得る。
【００４８】
次に、図４に戻ってラベリング処理の説明を続ける。上記更新処理（ステップＳ３）が完了すると、探索処理（ステップＳ４）を実行する。この探索処理も更新処理と同様に、ラン毎の個別探索処理を一のスレッドとし、並列処理制御部６４８により書換タイミングを制御しながらＧＰＵ６４２内の各プロセッサコア６４１によりスレッドを並列的に実行する。つまり、図３に示すように、第０プロセッサコア６４１ではランｒ［０］を処理対象ランとして個別探索処理が実行され、これに並行して第１プロセッサコア６４１ではランｒ［１］を処理対象ランとして個別探索処理が実行される。また、その他のランｒ［２］、ｒ［３］、…、ｒ［ｎ］についても、上記個別探索処理と並行して実行される。なお、「個別探索処理」とは、一のランを処理対象ランとするとともに当該処理対象ランに接続する連結ランをデータ接続表（ラン接続データｉｄ［０］、ｉｄ［１］、…、ｉｄ［ｎ］）に基づいて見つけ出して処理対象ランおよび連結ランのラベル番号を同一に書き換えるものである。以下、図９および図１０を参照しつつ個別探索処理について詳述する。
【００４９】
図９は各プロセッサコアで実行される個別探索処理を示すフローチャートである。また、図１０は各プロセッサコアで実行される個別探索処理の一例を示す模式図である。ここにおいても、個別更新処理の場合と同様に、まず図９を参照しつつランｒ［ｐ］に対する個別探索処理の基本動作を説明し、その後で図１０の具体例を参照しつつラベル番号の書換例について説明する。
【００５０】
ランｒ［ｐ］の個別探索処理は第ｐプロセッサコア６４１により以下の手順で実行される。ステップＳ３１では、ランｒ［ｐ］を処理対象ランとし、この処理対象ランｒ［ｐ］に対応するラン接続データｉｄ［ｐ］をラン接続表から読み出し、取得する。そして、そのラン接続データｉｄ［ｐ］が処理対象ランｒ［ｐ］のラベル番号の初期値と等しいか否かを判定する（ステップＳ３２）。ここで、同一であると判定した場合には、そのまま個別探索処理を完了する。一方、異なると判定した場合（ステップＳ３２で「ＮＯ」の場合）には、ステップＳ３３〜Ｓ３８を実行してラベル番号の書換を行う。
【００５１】
ステップＳ３３でラン接続データｉｄ［ｐ］を値（ｎｅｗ＿ｄｕｍ）として登録した後、ラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］をラン接続表から読み出す（ステップＳ３４）。そして、ラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］と、値（ｎｅｗ＿ｄｕｍ）とが等しいか否かを判定し（ステップＳ３５）、それらが等しくないと判定する間、値（ｎｅｗ＿ｄｕｍ）をラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］に書き換え（ステップＳ３６）、ステップＳ３４に戻って新たなラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］の読出を繰り返す。
【００５２】
そして、ラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］と、値（ｎｅｗ＿ｄｕｍ）とが一致した時点（ステップＳ３５で「ＹＥＳ」と判定された時点）で、ラン番号ｐのランｒ［ｐ］のラベル番号を値（ｎｅｗ＿ｄｕｍ）に書き換える（ステップＳ３７）。また、ラン接続データｉｄ［ｐ］についても、同様に値（ｎｅｗ＿ｄｕｍ）に書き換え（ステップＳ３８）、当該個別探索処理を終了する。なお、この書換は個別更新処理の場合と同様に並列処理制御部６４８により書換タイミングを制御された状態で実行される。
【００５３】
次に、図８に示すように更新処理によってラン接続表が初期状態から更新されるのに続いて探索処理を実行した場合の一例（図１０）を参照しつつ探索処理（ステップＳ４）の内容をさらに詳しく説明する。なお、ここでは、ランｒ［４］を処理対象ランとする個別探索処理について図１０を参照しつつ説明する。図１０中の縦軸は時間経過を表しており、ランｒ［０］〜ｒ［４］のラベル番号の初期値はそれぞれ０〜４に設定されている。ラベル番号のうち梨地模様を付したものは探索対象となっているラベル番号を示している。また、「第４スレッド」の下方に並んでいる項目（「ｉｄ［４］の取得→ｉｄ［４］＝２」など）は第４プロセッサコア６４１で実行される処理内容を示している。
【００５４】
第４プロセッサコア６４１では、ランｒ［４］を処理対象ランとし、この処理対象ランｒ［４］に対応するラン接続データｉｄ［４］をラン接続表から読み出し、この値（＝２）をランｒ［４］のラベル番号の初期値（＝４）と対比したところ、両者が不一致であることを確認する。すると、読み出し対象を、ラン接続データｉｄ［４］が示すラベル番号（ｎｅｗ＿ｄｕｍ）のラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］、つまりラン接続データｉｄ［２］に移動し、ラン接続表からラン接続データｉｄ［２］を読み出し、この値（＝０）をランｒ［２］のラベル番号の初期値（＝２）と対比する。そして、両者が不一致であることを確認すると、再び読み出し対象を、ラン接続データｉｄ［２］が示すラベル番号（ｎｅｗ＿ｄｕｍ）のラン接続データｉｄ［ｎｅｗ＿ｄｕｍ］、つまりラン接続データｉｄ［０］に移動し、ラン接続表からラン接続データｉｄ［０］を読み出し、この値（＝０）をランｒ［０］のラベル番号の初期値（＝０）と対比する。すると、両者が一致することを確認し、処理対象ランｒ［４］のラベル番号をその値に書き換え、このスレッドを終了する。なお、その他のスレッドについても同様の個別探索処理が実行され、その結果、互いに接続するランが探索されて同一のラベルが付与される。例えば図５に示す二値画像データに対してランレングス化処理して得られたランｒ［０］〜ｒ［４］（図６参照）については同一のラベル（＝０）が付与される。
【００５５】
以上のように、本実施形態では、ランｒ［ｍ］毎に互いに異なる値を有するラベル番号が初期設定された後、更新処理（ステップＳ３）および探索処理（ステップＳ４）の２パス工程を実行している。これらのうち更新処理（ステップＳ３）では、ランｒ［ｍ］毎に、個別更新処理（ステップＳ３−０、Ｓ３−１、…）を実行して処理対象ランに接続する連結ランが存在するか否かに応じてラベル番号を更新している。また、探索処理（ステップＳ４）では、ランｒ［ｍ］毎に、個別探索処理（ステップＳ４−０、Ｓ４−１、…）を実行して処理対象ランに接続する連結ランを更新後のラベル番号に基づいて見つけ出して処理対象ランおよび連結ランのラベルを同一に書き換えている。このように、ランの個数ｍと同数個のラベル番号によって二値画像データＢＦＩのラベリング処理を行うことができ、ラベリング処理を高速化することができる。
【００５６】
また、更新処理（ステップＳ３）および探索処理（ステップＳ４）のいずれも、１ラン１スレッドでラン毎の個別更新処理および個別探索処理を並列的に実行しているため、ラベリング処理に要するトータル時間を大幅に短縮することができる。
【００５７】
さらに、個別更新処理（ステップＳ３−０、Ｓ３−１、…）においては、処理対象ランに直接接続する第１連結ランのラベル番号を更新した際には、その第１連結ランのみならず、第１連結ランに接続する処理対象ラン以外の第２連結ランが存在する場合には、第２連結ランについてもラベル更新するように構成している。そのため、処理対象ランに対する個別更新処理よりも後で実行される第２連結ランに対する個別更新処理に要する時間を短縮することができる。その結果、トータルの処理時間を短縮することができる。
【００５８】
なお、本発明は上記した実施形態に限定されるものではなく、その趣旨を逸脱しない限りにおいて上述したもの以外に種々の変更を行うことが可能である。例えば、上記実施形態では、１ラン１スレッドにより個別更新処理を並列的に実行しているが、複数のランｒ［ｍ］の分割態様はこれに限定されるものではない。つまり、プロセッサコア６４１の個数に応じて複数のランｒ［ｍ］の分割態様を適宜変更してもよく、複数のランｒ［ｍ］をプロセッサコア６４１の個数に応じて複数組に分割し、各プロセッサコアが分割された一または複数のランについて個別更新処理を更新スレッドとして実行するように構成してもよい。これらの点については個別探索処理でも全く同様である。
【００５９】
また、上記実施形態では、個別更新処理および個別更新処理を実行するために複数のプロセッサコア６４１を有するＧＰＵ６４２を用いているが、ＧＰＵの代わりに複数のＣＰＵを設け、各ＣＰＵで一のスレッドを実行するように構成してもよい。また、ＧＰＵ６４２内に演算処理部６４６やラベリング用記憶部６４５を設けてもよい。
【００６０】
また、上記実施形態では、第０〜第ｎプロセッサコア６４１の上位に位置する並列処理制御部６４８がラベリング用記憶部６４５のアクセス管理を行い、更新処理および探索処理のいずれにおいても、一のスレッドによるデータ書換に応じて他のスレッドによるデータ書換を一時的に禁止している。つまり、一のスレッドで例えばラン接続データｉｄ［ｍ］（ただし、０≦ｍ≦ｎ）の書換を行う場合、他のスレッドがラン接続データｉｄ［ｍ］を書き換えるのを一時的に禁止してラベル更新の競合を回避するのみならず、それ以外のラン接続データの書換も一時的に禁止している。このようなアクセス管理は必ずしも最適なものであるといえず、改善の余地がある。例えば処理速度のさらなる向上を図るためには、並列処理制御部６４８によるラベリング用記憶部６４５のアクセス管理を以下のように実行するのが望ましい。すなわち、一のスレッドでラン接続データｉｄ［ｍ］の書換を行う時には、他のスレッドがラン接続データｉｄ［ｍ］を書き換えるのを一時的に禁止してラベル更新の競合を回避する一方で、ラン接続データｉｄ［ｍ］以外のラン接続データへのアクセスを自由化してデータ書換を許可するのが好適である。
【００６１】
また、上記実施形態では、二値画像データＢＦＩを行毎にランレングス化してランｒ［ｍ］を得るとともに、処理対象ランの下行で、且つ縦および斜め方向に接続するランを連結ランとして判定しているが、ランレングス化の態様も連結ランの判定態様もこれに限定されるものではなく、例えば列毎にランレングス化し、当該ランレングス化処理により作成されたランに対して本発明にかかるラベリング方法を適用することができる。また、上記実施形態では、上記したように下行のランに対する８近傍探索により連結ランを決定しているが、その他の探索方法、例えば４近傍探索により連結ランを決定してしてもよい。  また、上記実施形態のランレングス化処理では画像全体で一度にランを生成しているが、画像を適当なサイズ領域に分断し、各分断範囲でランを生成してもよい。ただし、この場合には、分断領域同士の境界でランの接続判定処理を行う必要がある。
【００６２】
また、上記実施形態では、連番のラベル番号（０，１，２，…）が本発明の「ラベル」として用いられているが、これと異なる番号や番号以外の値を本発明の「ラベル」として用いてもよい。また、より小さな番号に書き換えてラベル更新しているが、ラベル更新の態様もこれに限定されるものではない。
【００６３】
さらに、上記実施形態では、装置内部で二値画像データＢＦＩをランレングス化した後、当該ランレングス化処理により作成されたランに対してラベリング処理を施しているが、本発明に適用対象はこれに限定されるものではなく、例えば外部装置により作成されたランをラベリングする装置や方法に対して本発明を適用してもよい。
【産業上の利用可能性】
【００６４】
この発明は、二値画像データをランレングス化して作成された複数のランに対してラベルを付与するラベリング技術に対して好適に適用することができる。
【符号の説明】
【００６５】
１…検査システム
５…画像取得部
６…画像処理部
２１…撮像部
６２…差分抽出部（画像抽出部）
６３…二値化処理部
６４…ラベリング部
６４１…プロセッサコア
６４２…ＧＰＵ
６４３…個別更新処理部
６４４…個別探索処理部
６４５…ラベリング用記憶部
６４６…演算処理部（制御部）
６４７…ラン生成部
６４８…並列処理制御部
６４９…データ初期設定部
【図１】
2014209310.tif 000003
【図２】
2014209310.tif 000004
【図３】
2014209310.tif 000005
【図４】
2014209310.tif 000006
【図５】
2014209310.tif 000007
【図６】
2014209310.tif 000008
【図７】
2014209310.tif 000009
【図８】
2014209310.tif 000010
【図９】
2014209310.tif 000011
【図１０】
2014209310.tif 000012