(57)【要約】【課題】ラベリング処理の高速化を図るとともに同ラベル値を有する連結領域へのアクセスの高速化を図る。【解決手段】処理対象の行又は列（以下では行とする）にて作成された処理対象ランデータと当該処理対象の行の直前行のランデータとの連結の有無を判定し、連結無しの場合は処理対象ランデータには新たなラベル値を与え、連結有りの場合は処理対象ランデータには、前記直前行にて作成されたランデータと同ラベル値を付与するとともに、異なるラベル値の与えられたランデータ同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行う機能と、前記ラベルテーブルに基づき、前記各ランデータに付与されたラベル値の付替えを行い、かつ、ラベル値の付替え後において、同ラベル値を有するランデータが連続するラベルインデクスを持つデータ配列とする第２次ラベル付与処理を行う機能とを有する演算処理装置１３を有する。【選択図】図１２
2008186123.tif 000002
【特許請求の範囲】
【請求項１】
２値画像データを各行又は各列ごとにランレングス化し、前記ランレングス化によって作成されたランに対してラベリング処理を行う画像データ処理方法であって、
処理対象の行又は列において作成された処理対象のランが当該処理対象の行又は列の直前の行又は列のランと連結するか否かを判定し、連結しないと判定された前記処理対象のランに対しては新たなラベル値を付与し、連結すると判定された前記処理対象のランに対しては当該処理対象のランに連結する前記直前の行又は列において作成されたランと同じラベル値を付与するとともに、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行うステップと、
前記ラベルテーブルに基づいて、前記第１次ラベル付与処理によって各ランに付与されたラベル値の付け替えを行い、かつ、ラベル値の付け替え後において、同じラベル値を有するランに対応するランデータが、連続するラベルインデクスを有するデータ配列となるようにする第２次ラベル付与処理を行うステップと、
を有することを特徴とする画像データ処理方法。
【請求項２】
請求項１に記載の画像データ処理方法において、
前記第２次ラベル付与処理を行う際、前記第２次ラベル付与処理後のラベル値が連番となるようにラベル値の付け替えを行うことを特徴とする画像データ処理方法。
【請求項３】
請求項１又は２に記載の画像データ処理方法において、
前記第２次ラベル付与処理後のラベル値と当該第２次ラベル付与処理後のラベル値が付与されたランに対応するランデータの数との対応付けがなされたラン数テーブルを作成するステップをさらに有することを特徴とする画像データ処理方法。
【請求項４】
２値画像データを各行又は各列ごとにランレングス化し、前記ランレングス化によって作成されたランに対してラベリング処理を行う画像データ処理装置に前記ラベリング処理を実行させるための画像データ処理プログラムであって、
処理対象の行又は列において作成された処理対象のランが当該処理対象の行又は列の直前の行又は列のランと連結するか否かを判定し、連結しないと判定された前記処理対象のランに対しては新たなラベル値を付与し、連結すると判定された前記処理対象のランに対しては当該処理対象のランに連結する前記直前の行又は列において作成されたランと同じラベル値を付与するとともに、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行うステップと、
前記ラベルテーブルに基づいて、前記第１次ラベル付与処理によって各ランに付与されたラベル値の付け替えを行い、かつ、ラベル値の付け替え後において、同じラベル値を有するランに対応するランデータが、連続するラベルインデクスを有するデータ配列となるようにする第２次ラベル付与処理を行うステップと、
を有することを特徴とする画像データ処理プログラム。
【請求項５】
２値画像データを各行又は各列ごとにランレングス化し、前記ランレングス化によって作成されたランに対してラベリング処理を行う画像データ処理装置であって、
処理対象の行又は列において作成された処理対象のランが当該処理対象の行又は列の直前の行又は列のランと連結するか否かを判定し、連結しないと判定された前記処理対象のランに対しては新たなラベル値を付与し、連結すると判定された前記処理対象のランに対しては当該処理対象のランに連結する前記直前の行又は列において作成されたランと同じラベル値を付与するとともに、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行う機能と、
前記ラベルテーブルに基づいて、前記第１次ラベル付与処理によって各ランに付与されたラベル値の付け替えを行い、かつ、ラベル値の付け替え後において、同じラベル値を有するランに対応するランデータが、連続するラベルインデクスを有するデータ配列となるようにする第２次ラベル付与処理を行う機能とを有する演算処理装置を有することを特徴とする画像データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２値画像データをラベリング処理する画像データ処理方法、画像データ処理プログラム及び画像データ処理装置に関する。
【背景技術】
【０００２】
近年、ＣＣＤやＣＭＯＳを用いた撮像素子の高画素数化及び高密度化が進展している。これらの撮像素子によって取得された画像データを処理することにより、より詳しい情報が得られるようになってきた。そして、その情報を用いて、いろいろな検査が行われるようになってきた。例えば、製品への異物の付着あるいは傷の存在などによる欠陥識別のための検査が一例として挙げられる。このような検査を行う際には、画像データの２値化後に注目すべき値(‘黒’または‘白’に相当する値)を持つ画素の連結性を調べるラベリング処理を施す。そして、その同じラベルを持つ領域の大きさ、形状等から異物、傷等の欠陥を判断することになる。
【０００３】
このようなラベリング処理は従来から一般的に行われている技術である（例えば、特許文献１及び特許文献２参照）。
特許文献１に開示された技術（以下、第１従来技術という）には、近傍処理によるラベリング処理のアルゴリズム（以下、近傍処理アルゴリズムという）についての記載がなされている。これは、処理対象の画像データに対して、２値化データの最端部からラスタスキャン走査を行い、連結成分を調べて、同じ連結成分に属する全ての画素に同じラベルを割り当てて行く処理を行うものである。このように、第１従来技術では、２値化された画像データの画素すべてにアクセスするため、例えば、数百万画素といった高画素数の画像データをラベリング処理する場合、ラベリング処理を行うための演算量と時間が膨大なものとなるという問題がある。
【０００４】
一方、特許文献２に開示された技術（以下、第２従来技術という）は、２値化された画像データのラベリング処理を高速化するために、ランレングスで表現された画像データに対してラベリング処理を施すことが記載されている。そのラベリング処理方法は、ランレングス化された画像データに上述の近傍処理アルゴリズムを応用したものである。このように、第２従来技術は、画像データがランレングス化されることにより、ランレングス化された部分にアクセスすればよいことから、２値化された画像データの画素すべてにアクセスする必要がないため、画像データへのアクセス回数の低減が期待され、更には高速化も期待される。
【０００５】
【特許文献１】田村秀行編著、「コンピュータ画像処理」、株式会社オーム社、平成１８年２月２０日、第１版第７刷、ｐ．１４９〜１５０
【特許文献２】特開平５−１６５９５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述した第１従来技術は、上述したように、２値化された画像データの画素すべてにアクセスするため、ラベリング処理を行うための演算量と時間が膨大なものとなるという問題がある。
【０００７】
また、第２従来技術は、２値画像データがランレングス化されることによる画像データへのアクセス回数の低減が期待され、更には高速化も期待されるが、第２従来技術は、２値画像データをすべてランレングス化したのちにラベリング処理するものであるため、無
駄な処理を行う可能性もあり、それが高速化への障害となる場合もある。また、第２従来技術は、ラベリング処理後に行われる特徴量の算出処理の高速化などについての配慮は特に考慮されているものではない。
【０００８】
本発明は、ラベリング処理の高速化を図るとともにラベリング処理後に行われる特徴量の算出処理などの高速化に寄与できる画像データ処理方法、画像データ処理プログラム及び画像データ処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
（１）本発明の画像データ処理方法は、２値画像データを各行又は各列ごとにランレングス化し、前記ランレングス化によって作成されたランに対してラベリング処理を行う画像データ処理方法であって、処理対象の行又は列において作成された処理対象のランが当該処理対象の行又は列の直前の行又は列のランと連結するか否かを判定し、連結しないと判定された前記処理対象のランに対しては新たなラベル値を付与し、連結すると判定された前記処理対象のランに対しては当該処理対象のランに連結する前記直前の行又は列において作成されたランと同じラベル値を付与するとともに、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行うステップと、前記ラベルテーブルに基づいて、前記第１次ラベル付与処理によって各ランに付与されたラベル値の付け替えを行い、かつ、ラベル値の付け替え後において、同じラベル値を有するランに対応するランデータが、連続するラベルインデクスを有するデータ配列となるようにする第２次ラベル付与処理を行うステップとを有することを特徴とする。
【００１０】
本発明の画像データ処理方法は、ランレングス化と第１次ラベル付与処理とを同時進行で行うことにより、記憶領域に対するランデータの書き込み及び読み込み演算量を少なくすることができ、ラベリング処理を高速化することができる。
【００１１】
また、第２次ラベル付与処理によって、作成されたランに対応するランデータは、同じラベル値を有するラン同士が連続するラベルインデクスを有するデータ配列となるようにするので、同じラベル値を有する連結領域へのアクセスを容易にすることができ、ラベリング処理後における特徴量の算出処理などを高速に行うことができる。例えば、ＣＣＤなどの撮像素子によって撮像された画像データを製品の外観検査などの目的で使用するような場合、特徴量の算出を少ない演算量で高速に行うことができる。
【００１２】
（２）前記（１）に記載の画像データ処理方法においては、前記第２次ラベル付与処理を行う際、前記第２次ラベル付与処理後のラベル値が連番となるようにラベル値の付け替えを行うことが好ましい。
【００１３】
これは、第１次ラベル付与処理によって、例えば、３つのランに付与されたラベル値がラベル値「１」、ラベル値「２」、ラベル値「３」であって、ラベル値「１」が付与されたランとラベル値「２」が付与されたランとが連結していると判定された場合は、ラベル値の統合を行う処理によって、ラベル値「１」と「２」を統合して、ラベル値「１」が付与されたランとラベル値「２」が付与されたランにラベル値「１」を付与するものである。
【００１４】
このようなラベル値の統合処理を行った場合、ラベル値「２」が欠番となるので、ラベル値「３」が付与されたランのラベル値を「３」から「２」に変更するという処理を行う。このように、ラベル値が連番となるようなラベル値統合処理によって作成されたラベルテーブルを用いて第２次ラベル付与処理を行うことにより、第２次ラベル付与処理によって得られる最終的なラベル値も連番とすることができ、その後に行われる特徴量算出処理
などを効率的にかつ高速に行うことができる。
【００１５】
（３）前記（１）又は（２）のいずれかに記載の画像データ処理方法においては、前記第２次ラベル付与処理後のラベル値と当該第２次ラベル付与処理後のラベル値が付与されたランに対応するランデータの数との対応付けがなされたラン数テーブルを作成するステップをさらに有することが好ましい。
このようなラン数テーブルを有することにより、あるラベル値を有するランに対応するランデータが何個連続して存在するかを容易に取得することができる。したがって、このラン数テーブルを参照することにより、特定のランデータのアクセスを容易に行うことができる。
【００１６】
（４）本発明の画像データ処理プログラムは、２値画像データを各行又は各列ごとにランレングス化し、前記ランレングス化によって作成されたランに対してラベリング処理を行う画像データ処理装置に前記ラベリング処理を実行させるための画像データ処理プログラムであって、処理対象の行又は列において作成された処理対象のランが当該処理対象の行又は列の直前の行又は列のランと連結するか否かを判定し、連結しないと判定された前記処理対象のランに対しては新たなラベル値を付与し、連結すると判定された前記処理対象のランに対しては当該処理対象のランに連結する前記直前の行又は列において作成されたランと同じラベル値を付与するとともに、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行うステップと、前記ラベルテーブルに基づいて、前記第１次ラベル付与処理によって各ランに付与されたラベル値の付け替えを行い、かつ、ラベル値の付け替え後において、同じラベル値を有するランに対応するランデータが、連続するラベルインデクスを有するデータ配列となるようにする第２次ラベル付与処理を行うステップとを有することを特徴とする。
【００１７】
このような画像データ処理プログラムを画像データ処理装置で実行させることにより、前記（１）の画像データ処理方法と同様の効果が得られる。なお、（４）に記載の画像データ処理プログラムにおいても前記（２），（３）の画像データ処理方法と同様の特徴を有することが好ましい。
【００１８】
（５）本発明の画像データ処理装置は、２値画像データを各行又は各列ごとにランレングス化し、前記ランレングス化によって作成されたランに対してラベリング処理を行う画像データ処理装置であって、処理対象の行又は列において作成された処理対象のランが当該処理対象の行又は列の直前の行又は列のランと連結するか否かを判定し、連結しないと判定された前記処理対象のランに対しては新たなラベル値を付与し、連結すると判定された前記処理対象のランに対しては当該処理対象のランに連結する前記直前の行又は列において作成されたランと同じラベル値を付与するとともに、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するラベルテーブルを作成する第１次ラベル付与処理を行う機能と、前記ラベルテーブルに基づいて、前記第１次ラベル付与処理によって各ランに付与されたラベル値の付け替えを行い、かつ、ラベル値の付け替え後において、同じラベル値を有するランに対応するランデータが、連続するラベルインデクスを有するデータ配列となるようにする第２次ラベル付与処理を行う機能とを有することを特徴とする。
【００１９】
本発明の画像データ処理装置がこのような機能を有する演算処理装置を有することにより、前記（１）の画像データ処理方法と同様の処理を行うことができ、前記（１）の画像データ処理方法と同様の効果が得られる。なお、（５）に記載の画像データ処理装置においても前記（２），（３）の画像データ処理方法と同様の特徴を有することが好ましい。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施形態について説明する。
図１は本発明の実施形態に係る画像データ処理方法を説明するために用いる２値画像データの一例を示す図である。図１に示す２値画像データは、ＣＣＤカメラなどの撮像装置によって得られたグレー階調の画像データを閾値判定により２値化することによって得ることができる。
【００２１】
図１に示す２値画像データにおいて示されている縦方向及び横方向の「０，１，２，・・・」の数値は、マトリクス状に配列された画素の行方向の位置及び列方向の位置を示もので、各位置における２値化された画素のデータ（画素データという）をＢ（ｉ，ｊ）で表すものとする。ここで、ｉは行を示す値(行インデクスという)、ｊは列を示す値（列インデクスという）であり、図１に示す２値画像データにおいては、ｉは０，１，２，・・・，８の値をとり、ｊは０，１，２，・・・，１９の値をとる。
【００２２】
また、図１に示す２値画像データにおいて、灰色で示す画素は、‘１’（Ｈと表記する）の画素データを有する画素であり、白色で示す画素は、‘０’（Ｌと表記する）の画素データを有する画素であるとし、ここでは、「Ｈ」の画素又はその連続を「ラン」として作成し、作成されたランについてラベリング処理を行うものとする。なお、図１に示す２値画像データは、２値化された各画素データがマトリクス状に配列された状態で示されているが、各画素データは、ＲＡＭなどの記憶領域内においては、Ｂ（０，０）〜Ｂ（０，１９），Ｂ（１，０）〜Ｂ（１，１９），・・・，Ｂ（８，０）〜Ｂ（８，１９）の順で１次元的なデータ配列として記憶されている。
【００２３】
本発明の実施形態に係る画像データ処理方法では、製品の外観検査などを行う際に必要なラベリング処理を、図１に示す２値画像データを行または列（実施形態では行とする）ごとにランレングス化しながら行う。具体的には、図１に示す２値画像データをｉ＝０，１，２，・・・の順で各行ごとにｊ＝０からランレングス化し、ランレングス化によって作成されたランに仮のラベルを付与する処理（第１次ラベル付与処理という）を行う。なお、ｉ＝０の行を０行目、ｉ＝１の行を１行目、ｉ＝２の行を２行目というように呼ぶこととする。
【００２４】
図１に示す２値画像データを各行ごとにランレングス化すると、０行目においては、「Ｈ」の画素は存在しないので、ランは作成されず、１行目においては３個のランが作成され、２行目から４行目においてはそれぞれ４個のランが作成され、５行目及び６行目おいてはそれぞれ２個のランが作成され、７行目においては１個のランが作成され、全体で２０個のランが作成される。
また、ランレングス化によって作成された各々のランのインデクス（ランインデクスという）を「ｍ」で表し、「ｍ」はランデータの作成順に０，１，２，・・・の値をとる。そして、ランインデクス「ｍ」が与えられたランをＲｕｎ[ｍ]で表すものとする。したがって、図１に示す２値画像データにおいて、１行目から順に作成されたランは、Ｒｕｎ[０]，Ｒｕｎ[１]，Ｒｕｎ[２]，・・・，Ｒｕｎ[１９]というように表される。
【００２５】
図２は第１次ラベル付与処理において作成される各ランＲｕｎ[０]〜Ｒｕｎ[１９]に対応するランデータを示す図である。また、図３は図２に示す各ランＲｕｎ[０]〜Ｒｕｎ[１９]に対応するランデータをその作成順序で記憶領域に格納した状態の一例を示す図である。なお、図３においては、第１次ラベル付与処理後の各ランデータの配列が２次元的な配列であるかのように示されているが、記憶領域ではこれら各ランデータは１次元のデータ配列として保存される。
【００２６】
図２（ａ）は図１に示す２値画像データの１行目（ｉ＝１）をランレングス化すること
によって作成されたＲｕｎ[０]〜Ｒｕｎ[２]に対応するランデータ、図２（ｂ）は図１に示す２値画像データの２行目（ｉ＝２）をランレングス化することによって作成されたＲｕｎ[３]〜Ｒｕｎ[６]に対応するランデータ、以下同様に、図２（ｃ）〜（ｇ）は図１に示す２値画像データの３行目（ｉ＝３）〜７行目（ｉ＝７）をそれぞれランレングス化することによって作成されたＲｕｎ[７]〜Ｒｕｎ[１９]に対応するランデータを示す図である。
【００２７】
図２（ａ）〜（ｇ）に示すＲｕｎ[０]〜Ｒｕｎ[１９]に対応するランデータをそれぞれ太線枠で表し、各ランデータは４つの数値で構成される。各ランデータは、図２における太線枠内の４つの数値のうちの左から１番目（左端）の数値は、２値画像データ（図１参照）における当該ランの始端画素位置（以下では単に始端位置という）を示す列の値（列インデクス「ｊ」）、左から２番目の数値は、２値画像データにおける当該ランの終端画素位置（以下では単に終端位置という）を示す列の値（列インデクス「ｊ」）、左から３番目の数値は当該ランに付与されたラベル値、左から４番目（右端）の数値は、２値画像データにおける当該ランの行の値（行インデクス「ｉ」）を表している。
【００２８】
例えば、図２（ａ）に示すＲｕｎ[０]に対応するランデータを構成する数値「２，３，１，１」の「２」は、Ｒｕｎ[０]の始端位置がｊ＝２（２列目）であり、その次の「３」はＲｕｎ[０]の終端位置がｊ＝３（３列目）であることを示している。また、その次の「１」はＲｕｎ[０]に付与されたラベル値が「１」であることを示している。そして、最後の「１」はＲｕｎ[０]の存在する行がｉ＝１（１行目）であることを示している。
【００２９】
なお、図２（ａ）〜（ｇ）に示す各行に対応するランデータにおけるラベル値は、図１に示す２値画像データにおいて相互に連結しているラン同士で同じラベル値が付与される。これは、処理対象の行（注目行という）をランレングス化することによって作成された処理対象のラン（注目ランという）が当該注目行の直前の行で作成されたランと連結するか否かを調べ、連結しない注目ランに対しては新たなラベル値を付与し、連結する注目ランに対しては当該注目ランに連結する直前の行で作成されたランと同じラベル値を付与するという処理を行うためである。
【００３０】
ただし、注目するランに連結する直前の行（ｉ−１）において作成されたランが複数存在する場合には、直前の行において作成された複数のランに付与された各ラベル値のうちいずれかのラベル値（本発明の実施形態では、最も小さい値のラベル値）を注目するランに付与する。
【００３１】
図４は直前の行で作成されたランと同じラベル値を付与する処理を説明する図である。図４（ａ）は１行目（ｉ＝１）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。１行目（ｉ＝１）のランレングス化では、Ｒｕｎ[０]〜Ｒｕｎ[２]の３つのランが作成され、これらのＲｕｎ[０]〜Ｒｕｎ[２]は、直前の行で作成されたラン（ｉ＝０ではランは作成されていない）との連結がないので、それぞれにラベル値「１」，「２」，「３」が付与される（図２（ａ）参照）。
【００３２】
図４（ｂ）は２行目（ｉ＝２）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。２行目（ｉ＝２）のランレングス化では、Ｒｕｎ[３]〜Ｒｕｎ[６]の４つのランが作成され、Ｒｕｎ[３]は、Ｒｕｎ[０]と連結しているので、Ｒｕｎ[０]と同じラベル値「１」が付与され、Ｒｕｎ[４]は、Ｒｕｎ[１]と連結しているので、Ｒｕｎ[１]と同じラベル値「２」が付与され、さらに、Ｒｕｎ[５]は、Ｒｕｎ[２]と連結しているので、Ｒｕｎ[２]と同じラベル値「３」が付与される。また、Ｒｕｎ[６]は、連結が無いので、新たなラベル値「４」が付与される（図２（ｂ）参照）。
【００３３】
図４（ｃ）は３行目（ｉ＝３）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。３行目（ｉ＝３）のランレングス化では、Ｒｕｎ[７]〜Ｒｕｎ[１０]の４つのランが作成され、Ｒｕｎ[７]は、Ｒｕｎ[３]と連結しているので、Ｒｕｎ[３]と同じラベル値「１」が付与され、Ｒｕｎ[８]は、Ｒｕｎ[４]と連結しているので、Ｒｕｎ[４]と同じラベル値「２」が付与され、Ｒｕｎ[９]は、Ｒｕｎ[５]と連結しているので、Ｒｕｎ[５]と同じラベル値「３」が付与される。また、Ｒｕｎ[１０]は、Ｒｕｎ[６]と連結しているので、Ｒｕｎ[６]と同じラベル値「４」が付与される（図２（ｃ）参照）。
【００３４】
図４（ｄ）は４行目（ｉ＝４）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。４行目（ｉ＝４）のランレングス化では、Ｒｕｎ[１１]〜Ｒｕｎ[１４]の４つのランが作成され、Ｒｕｎ[１１]は、Ｒｕｎ[７]と連結しているので、Ｒｕｎ[７]と同じラベル値「１」が付与され、Ｒｕｎ[１２]は、Ｒｕｎ[８]と連結しているので、Ｒｕｎ[８]と同じラベル値「２」が付与され、Ｒｕｎ[１３]は、Ｒｕｎ[９]と連結しているので、Ｒｕｎ[９]と同じラベル値「３」が付与される。また、Ｒｕｎ[１４]は、Ｒｕｎ[１０]と連結しているので、Ｒｕｎ[１０]と同じラベル値「４」が付与される（図２（ｄ）参照）。
【００３５】
図４（ｅ）は５行目（ｉ＝５）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。５行目（ｉ＝５）のランレングス化では、Ｒｕｎ[１５]とＲｕｎ[１６]の２つのランが作成され、Ｒｕｎ[１５]は、Ｒｕｎ[１１]及びＲｕｎ[１２]にそれぞれ連結している。このように、直前の行で処理された複数のランと連結している場合には、直前の行におけるラベル値の順番の早い方のラン、すなわち、直前の行において最も小さい値を有するラベル値が付与される。したがって、この場合、Ｒｕｎ[１５]はＲｕｎ[１１]と同じラベル値「１」が付与される。また、Ｒｕｎ[１６]はＲｕｎ[１３]と連結しているので、Ｒｕｎ[１３]と同じラベル値「３」が付与される。
【００３６】
図４（ｆ）は６行目（ｉ＝６）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。６行目（ｉ＝６）のランレングス化では、Ｒｕｎ[１７]とＲｕｎ[１８]の２つのランが作成され、Ｒｕｎ[１７]は、Ｒｕｎ[１５]に連結しているので、Ｒｕｎ[１５]と同じラベル値「１」が付与され、また、Ｒｕｎ[１８]は、Ｒｕｎ[１６]と連結しているので、Ｒｕｎ[１６]と同じラベル値「３」が付与される。
【００３７】
図４（ｇ）は７行目（ｉ＝７）のランレングス化によって作成されたランを示すもので、処理されたランを太線枠で示す。７行目（ｉ＝７）のランレングス化では、Ｒｕｎ[１９]の１つのランが作成され、Ｒｕｎ[１９]は、Ｒｕｎ[１７]及びＲｕｎ[１８]にそれぞれ連結しているので、この場合、小さいほうのラベル値を有するＲｕｎ[１７]と同じラベル値「１」が付与される。
【００３８】
以上説明した第１次ラベル付与処理を行う際に、ラベルテーブルの作成及び各ラベル値に属するランに対応するランデータの数を示すラン数テーブルの作成も行う。
図５はラベルテーブルの作成手順を説明する図である。図５に示すラベルテーブルは、異なるラベル値の付与されたラン同士が同じ連結成分に属するか否かを記録するテーブルであり、第１次ラベル付与処理により異なるラベル値の付与されたラン同士の連結を調べ、連結が有る場合には同じラベル値とする処理（ラベル値統合処理という）を行うことにより作成されるものである。
【００３９】
図５（ａ）〜（ｄ）は第１次ラベル付与処理における各行の処理段階で作成されるラベルテーブルであり、図５（ｅ）は第１次ラベル付与処理後に作成されるラベルテーブルである。図５（ａ）〜（ｅ）の上段に示される数値は、ラベルのインデクス（ラベルインデ
クスという）であり、これは、第１次ラベル付与処理によって付与されたラベル値を表している。なお、第１次ラベル付与処理によって付与されたラベル値は最終的なラベル値ではなく、仮のラベル値である。また、図５（ａ）〜（ｅ）の下段に示す数値は、各行におけるラベル値統合処理後のラベル値を示している。以下にラベルテーブルの作成手順について説明する。
【００４０】
図５（ａ）は第１次ラベル付与処理において、１行目（ｉ＝１）についての処理（１行目処理という）の終了後に作成されるラベルテーブルである。また、図５（ｂ）は第１次ラベル付与処理において、２行目（ｉ＝２）についての処理（２行目処理という）の終了後に作成されるラベルテーブルである。
【００４１】
１行目処理において作成されるラベルテーブルは、図５（ａ）に示すように、ラベルインデクス「１」，「２」，「３」に対しては、１行目処理によって付与されたラベル値「１」，「２」，「３」がそのまま対応付けられている。また、２行目処理において作成されるラベルテーブルは、図５（ｂ）に示すように、ラベルインデクス「１」，「２」，「３」，「４」に対しては、２行目処理によって付与されたラベル値「１」，「２」，「３」，「４」がそのまま対応付けられている。
【００４２】
これは、１行目処理及び２行目処理を行った段階で、異なるラベル値の付与されたラン同士の連結性を調べた結果、異なるラベル値の付与されたラン同士の連結性が無いためであり、この場合には、ラベル値統合処理は行われない。なお、３行目及び４行目についての処理終了後に作成される各ラベルテーブルは、２行目処理によって作成されるラベルテーブルと同じであるので図示は省略する。
【００４３】
図５（ｃ）は５行目についての処理（５行目処理という）の終了後に作成されるラベルテーブルである。５行目処理において作成されるラベルテーブルは、図５（ｃ）に示すように、ラベルインデクス「２」がラベル値「１」に付け替えられている。これは、５行目処理を行った段階で、異なるラベル値の付与されたラン同士の連結性を調べた結果、ラベル値「２」が付されたランで構成される領域がラベル値「１」の付与されたランで構成される領域と連結しているためであり、この場合には、ラベル値「２」をラベル値「１」とするラベル値統合処理を行う。
なお、ラベルインデクス「３」，「４」に対するラベル値「３」，「４」はそのままのラベル値が保持される。また、６行目処理終了後に作成される６行目ラベルテーブルは、５行目ラベルテーブルと同じであるので図示は省略する。
【００４４】
図５（ｄ）は７行目についての処理（７行目処理という）の終了後に作成されるラベルテーブルである。７行目処理において作成されるラベルテーブルは、図５（ｄ）に示すように、ラベルインデクス「３」に対するラベル値「３」がラベル値「１」に付け替えられている。これは、７行目処理を行った段階で、異なるラベル値の付与されたラン同士の連結性を調べた結果、ラベル値「３」が付与されたランで構成される領域がラベル値「１」の付与されたランで構成される領域と連結しているためであり、この場合には、ラベル値「３」をラベル値「１」とするラベル値統合処理を行う。なお、ラベルインデクス「４」に対するラベル値「４」はそのままのラベル値が保持される。
【００４５】
このように、７行目処理後に作成されるラベルテーブルにおいては、ラベルインデクス「１」は元のラベル値「１」がそのまま保持されているが、ラベルインデクス「２」，「３」はラベル値「１」に付け替えられ、元のラベル値「４」は連結性が無いためラベル値「４」がそのまま保存された内容となっている。
【００４６】
なお、図５（ｄ）のラベルテーブルでは、ラベルインデクス「４」に対応するラベル値
は「４」となっているが、このままでは、ラベルテーブルのラベル値が「１」と「４」となり、番号の欠番が生じて連番とならないため、ラベル値「４」を「２」とする処理を行う。
【００４７】
このようなラベル値を連番とする処理を行うことにより、ラベルインデクス「１」〜「３」に対応するランで構成される領域を１つのまとまりの連結領域として、その連結領域にラベル値「１」を与え、ラベルインデクス「４」に対応する領域を１つのまとまりの連結領域として、その連結領域にラベル値「２」が付与されることとなり、各々独立した連結領域に連番となるラベル値を付与することができる。
【００４８】
図５（ａ）〜（ｄ）の処理を経ることによって、第１次ラベル付与処理終了後には、図５（ｅ）のようなラベルテーブルが作成される。図５（ｅ）に示すラベルテーブルによれば、ラベルインデクス「１」〜「３」に対するラベル値はすべて「１」に統合され、ラベルインデクス「４」に対してはラベル値「２」が付与されたものとなる。
【００４９】
図６はラン数テーブルの作成手順を説明する図である。図６の上段に示される数値は、図６（ａ）〜（ｄ）においては図５と同様にラベルインデクスであり、これは、第１次ラベル付与処理によって付与されたラベル値（仮のラベル値）を表している。また、図６（ｅ）におけるラベルインデクスは、図５におけるラベル値統合処理後のラベル値を表している。また、図６の下段の数値は各ラベルインデクスに対応するランデータの数（ランデータ数という）を表している。
【００５０】
図６（ａ）は１行目処理後における各ラベルインデクスに対応するランデータ数であり、１行目処理後においては、ラベルインデクス「１」，「２」，「３」に対応するランデータ数はそれぞれ「１」である。
【００５１】
図６（ｂ）は２行目処理における各インデクスに対応するランデータ数であり、２行目処理後においては、ラベルインデクス「１」，「２」，「３」に対応するランデータ数はそれぞれ「２」であり、これにラベルインデクス「４」に対応するランデータ数「１」が加わったものとなる。なお、３行目処理後においては、ラベルインデクス「１」，「２」，「３」に対応するランデータ数はそれぞれ「３」、ラベルインデクス「４」に対応するランデータ数「２」となり、また、４行目処理後においては、ラベルインデクス「１」，「２」，「３」に対応するランデータ数はそれぞれ「４」、ラベルインデクス「４」に対応するランデータ数「３」となるが、これらの図示は省略する。
【００５２】
図６（ｃ）は５行目処理後における各ラベルインデクスに対応するランデータ数であり、５行目処理後においては、ラベルインデクス「１」に対応するランデータ数は「５」となり、ラベルインデクス「２」に対応するランデータ数は「４」、ラベルインデクス「３」に対応するランデータ数は「５」、ラベルインデクス「４」に対応するランデータ数は「３」となる。
なお、６行目処理後においては、ラベルインデクス「１」に対応するランデータ数は「６」、ラベルインデクス「２」に対応するランデータ数は「４」、ラベルインデクス「３」に対応するランデータ数は「６」、ラベルインデクス「４」に対応するランデータ数は「３」となるが、これらの図示は省略する。
【００５３】
図６（ｄ）は７行目処理後における各ラベルインデクスに対応するランデータ数であり、７行目処理後においては、ラベルインデクス「１」に対応するランデータ数は「７」となり、ラベルインデクス「２」に対応するランデータ数は「４」、ラベルインデクス「３」に対応するランデータ数は「６」、ラベルインデクス「４」に対応するランデータ数は「３」となる。
【００５４】
図６（ａ）〜（ｄ）の処理を経ることによって、第１次ラベル付与処理終了後には、図６（ｅ）のようなラベルインデクス（図５における統合処理後のラベル値）とランデータ数との対応を示すテーブルが作成される。図６（ｅ）に示すように、ラベルインデクス「１」に対応するランデータ数は「１７」、ラベルインデクス「２」に対応するランデータ数は「３」となる。
【００５５】
これは、ラベル値統合処理後のラベル値「１」（第１次ラベル付与処理において付与されたラベル値「１」〜「３」）に属するランデータ数が１７個であることを示している。また、ラベル値統合処理後のラベル値「２」（第１次ラベル付与処理において付与されたラベル値「４」）に属するランデータ数が３個であることを示している。
【００５６】
以上説明した第１次ラベル付与処理を図７から図９に示すフローチャートを参照しながら説明する。
図７は第１次ラベル付与処理及びラベルテーブル、ラン数テーブル作成までの全体的な処理の流れを概略的に示すフローチャートである。図７において、まず、「ｉ＝０、Ｌａｂｅｌ＝０、ｍ＝０」のセット及び「ｊ＝０」のセットを行う（ステップＳ１，Ｓ２）。
【００５７】
ここで、「ｉ」は図１に示す２値画像データの行インデクスであり、０，１，２，・・・で表される。「Ｌａｂｅｌ」は、作成されたランデータに対して付与されるラベル値であり、初期値を０とし、１，２，・・・の値が１から順に付与され、ラベル値「１」、ラベル値「２」というように表される。「ｍ」は前述したようにランインデクスであり、０、１，２，・・・の値が０から順に付与される。また、「ｊ」は図１に示す２値画像データの列インデクスであり、０，１，２，・・・で表される。
【００５８】
ステップＳ１，Ｓ２において、「ｉ＝０、Ｌａｂｅｌ＝０、ｍ＝０」のセット及び「ｊ＝０」のセットが行われると、次に、ランの作成処理を行う（ステップＳ３）。ここで、処理対象の行（注目行）においてランが作成されたか否かの判定を行い（ステップＳ４）、ランが作成されれば、「Ｙｅｓ」のパスに進み、第１次ラベル付与処理（ステップＳ５）を行う。この時点では、注目行は「ｉ＝０」であり、図１に示す２値画像データを例にとれば、０行目には、ランは存在しないので、ランが作成されたか否かの判定（ステップＳ４）においては「Ｎｏ」のパスに進む。
【００５９】
そして、行インデクス「ｉ」をインクリメントする処理（ステップＳ７）を行い、インクリメント後の「ｉ」が「ｉ＞画像高さ」であるか否かを判定する（ステップＳ８）。これは、インクリメント後の「ｉ」が２値画像データにおける最下段の行の行インデクスよりも大きいか否かを判定する処理であり、インクリメント後の「ｉ」が２値画像データにおける最下段の行の行インデクス以下（図１に示す２値画像データにおいては「ｉ≦８」）であれば、「Ｎｏ」のパスに進んでステップＳ２に戻り、インクリメント後の「ｉ」の行を注目行として当該注目行におけるラン作成を行う（ステップＳ３）。この場合、注目行は「ｉ＝１」となっているので、１行目におけるランデータ作成を行う。
【００６０】
図１に示す２値画像データにおいては、１行目においてはランが存在するので、ランが作成され、当該ランの作成のあと、作成されたラン（注目ランという）に対する第１次ラベル付与処理が行われる（ステップＳ５）。そして、「ｊ」が「ｊ＞画像幅」であるか否かを判定する（ステップＳ６）。これは、現時点における列インデクス「ｊ」が２値画像データにおける最右端の列の列インデクスよりも大きいか否かを判定する処理であり、現時点における列インデクス「ｊ」が２値画像データにおける最右端の列の列インデクス以下であれば、ステップＳ２に戻る（ステップＳ３）。
【００６１】
このようなラン作成及び作成されたランに対する第１次ラベル付与処理を最下段の行まで行うことにより、図２（ａ）〜（ｇ）に示すランデータが作成される。なお、以上説明した処理を行う際に、ラベルテーブルの作成（図５参照）及びラン数テーブルの作成（図６参照）も行う（ステップＳ９）。
【００６２】
図８はラン作成手順を説明するフローチャートである。この場合も図１に示す２値画像データを例にとって説明する。まず、初期状態として、（Ｈの連続）＝Ｎ、すなわち、Ｈ（‘１’）が連続しない状態をセットする（ステップＳ１１）。そして、図１に示す２値画像データにおける０行目（ｉ＝０）において、「Ｂ（ｉ，ｊ）＝Ｈ」であるか否かの判定を行う(ステップＳ１２)。
【００６３】
ステップＳ１２の処理は、まず初めに、Ｂ（０，０）がＨであるか否かを判定するものであり、この場合、図１からもわかるように、Ｂ（０，０）はＨではないので、ステップＳ１２の「Ｎｏ」のパスに進み、（Ｈの連続）＝Ｙの判定を行う（ステップＳ１３）。ステップＳ１３の処理は、Ｈの連続が存在するか否かを判定するものであり、この段階では、Ｈの連続が存在していないので、ここでも「Ｎｏ」のパスに進み、「ｊ」をインクリメントし（ステップＳ１４）、インクリメント後の「ｊ」の値が、「ｊ＞画像幅」であるか否かを判定する（ステップＳ１５）。
【００６４】
ステップＳ１５の処理は、インクリメント後の「ｊ」が当該行における最右端の列の列インデクス（図１に示す２値画像データにおいては「ｊ＝１９」）よりも大きいか否かを判定するもので、「ｊ＞画像幅」でなければ、ステップＳ１２に戻る。図１に示す２値画像データの０行目の画素は全て「Ｌ」であるので、ステップＳ１２〜Ｓ１５を繰り返す。そして、ステップＳ１５において、「ｊ＞画像幅」であれば、現在の注目行の処理が終了し、当該注目行については「ラン：非作成」とする（ステップＳ１６）。
【００６５】
次に、注目行をｉ＝１（１行目）とし、１行目において、「Ｂ（ｉ，ｊ）＝Ｈ」の判定を行う(ステップＳ１２)。まず初めに、Ｂ（１，０）の値が「Ｈ」であるか否かを判定すると、図１からもわかるように、Ｂ（０，１）の値は「Ｈ」ではないので、この場合も、ステップＳ１２〜Ｓ１５を行う。続いて、Ｂ（１，１）の値が「Ｈ」であるか否かを判定すると、図１からもわかるように、Ｂ（１，１）の値も「Ｈ」ではないので、この場合も、ステップＳ１２〜Ｓ１５を行う。
【００６６】
続いて、Ｂ（１，２）の値が「Ｈ」であるか否かを判定すると、図１からもわかるように、Ｂ（１，２）の値は「Ｈ」であるので、今度は、ステップＳ１２から「Ｙｅｓ」のパスに進み、「（Ｈの連続）＝Ｙ」の判定を行う（ステップＳ１７）。この段階では、まだ、Ｈの連続が存在していないので、「Ｎｏ」のパスに進み、「Ｂｅｇｉｎ＝ｊ」をセットするとともに、「（Ｈの連続）＝Ｙ」をセットする（ステップＳ１８）。ステップＳ１８における「Ｂｅｇｉｎ＝ｊ」はランの始端位置をセットするもので、その時点における「ｊ」の値を始端位置とする。同じくステップＳ１８における「（Ｈの連続）＝Ｙ」のセットは、この時点からＨの連続が始まることを意味している。
【００６７】
そして、「ｊ」をインクリメントし（ステップＳ１９）、インクリメント後の「ｊ」の値が、「ｊ＞画像幅」であるか否かを判定する（ステップＳ２０）。そして、「ｊ＞画像幅」でなければ、ステップＳ１２に戻る。
【００６８】
ステップＳ１２において、今度は、Ｂ（１，３）の値が「Ｈ」であるか否かを判定すると、図１からもわかるように、Ｂ（１，３）の値は「Ｈ」であるので、ステップＳ１２から「Ｙｅｓ」のパスに進み、「（Ｈの連続）＝Ｙ」であるか否かの判定を行う（ステップＳ１７）。ここでは、ステップＳ１８において「Ｈの連続＝Ｙ」がセットされているので
、ステップＳ１７では「Ｙｅｓ」のパスに進み、「ｊ」をインクリメントし（ステップＳ１４）、インクリメント後の「ｊ」の値が、「ｊ＞画像幅」であるか否かを判定する（ステップＳ１５）。そして、「ｊ＞画像幅」でなければ、ステップＳ１２に戻る。
【００６９】
ステップＳ１２において、今度は、「Ｂ（１，４）＝Ｈ」であるか否かの判定を行うと、この場合、図１からもわかるように、Ｂ（１，４）の値は「Ｈ」ではないので、ステップＳ１２の「Ｎｏ」のパスに進み、「（Ｈの連続）＝Ｙ」であるか否かの判定を行う（ステップＳ１３）。この段階では、Ｈの連続が存在しているので、ステップＳ１３の「Ｙｅｓ」のパスに進み、ランデータ作成処理を行う（ステップＳ２１）。
【００７０】
ステップＳ２１のランデータ作成処理は、「Ｒｕｎ[ｍ]．ｂｅｇｉｎ＝Ｂｅｇｉｎ」、「Ｒｕｎ[ｍ]．ｅｎｄ＝（ｊ−１）」、「Ｒｕｎ[ｍ]．ｒｏｗ＝ｉ」をセットするものである。ここで、「Ｒｕｎ[ｍ]．ｂｅｇｉｎ＝Ｂｅｇｉｎ」は、当該ランすなわち「ｍ」のインデクスが与えられたＲｕｎ[ｍ]の始端位置をステップＳ１８においてセットした「Ｂｅｇｉｎ＝ｊ」とするものであり、「Ｒｕｎ[ｍ]．ｅｎｄ＝（ｊ−１）」は当該ランの終端位置を現時点の「ｊ」よりも１つ前の「ｊ」の値にセットするものである。また、「Ｒｕｎ[ｍ]．ｒｏｗ＝ｉは、当該ランの存在する行を表す「ｉ」の値をセットするもので、このようなランデータ作成処理がなされることにより、「ラン：作成」とする（ステップＳ２２）。
【００７１】
なお、ステップＳ２１においては、「Ｒｕｎ[ｍ]．ｂｅｇｉｎ＝Ｂｅｇｉｎ」、「Ｒｕｎ[ｍ]．ｅｎｄ＝（ｊ−１）」、「Ｒｕｎ[ｍ]．ｒｏｗ＝ｉ」をセットするとともに、「ｊ＋＋」を行い、「ｊ」をインクリメントする。そして、再び、ステップＳ１２により、注目行における次の画素位置ｊでの「Ｂ（ｉ，ｊ）＝Ｈ」を判定する処理を行い、上記同様の処理を繰り返す。
【００７２】
なお、ステップＳ１２において「Ｙｅｓ」のパスに進み、さらにステップＳ１７において「Ｙｅｓ」のパスに進んで、ステップＳ１９において「ｊ」をインクリメントし、インクリメント後の「ｊ」の値がステップＳ２０により「ｊ＞画像幅」であると判定（「ｊ」の値が最右端の列の値を超えたと判定）された場合は、当該注目行におけるラン作成処理は終了しているとして、ステップＳ２３のランデータ作成処理を行う。
ステップＳ２３のランデータ作成処理は、「Ｒｕｎ[ｍ]．ｂｅｇｉｎ＝Ｂｅｇｉｎ」、「Ｒｕｎ[ｍ]．ｅｎｄ＝（ｊ−１）」、「Ｒｕｎ[ｍ]．ｒｏｗ＝ｉ」をセットするものである。
【００７３】
図９は作成されたランに対してラベル値を付与する第１次ラベル付与処理の手順を示すフローチャートである。まず、処理対象のラン（注目ラン）が存在する行（注目行）が先頭行であるか否かを判定し(ステップＳ３１)、先頭行でなければステップＳ３４以降の処理を行ったのちにステップＳ３２の処理に進む。一方、ステップＳ３１において、先頭行であると判定された場合には直接、ステップＳ３２の処理に進む。
【００７４】
ステップＳ３２の処理は、注目行の直前の行、すなわち（ｉ−１）行の異なるラベル値を有する連結ランの数が０個、１個、２個以上のいずれであるかを判定する処理である。なお、注目行の直前の行、すなわち（ｉ−１）行に存在するランのうち、注目ランと連結するランを連結ランと呼ぶことにする。なお、ステップＳ３２の処理において、注目行が先頭行である場合には、無条件で０個であるとする。したがって、注目行が先頭行である場合には、ステップＳ３３の処理を行う。
【００７５】
ステップＳ３３の処理は、「Ｌａｂｅｌ＋＋」，「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝Ｌａｂｅｌ」，「Ｌｔａｂｌｅ[Ｌａｂｅｌ]＝Ｌａｂｅｌ」，「Ｌｃｏｕｎｔ[Ｌａｂｅｌ]＝１」
、「ｍ＋＋」の処理である。ここで、「Ｌａｂｅｌ＋＋」はラベル値のインクリメントであり、注目ランが注目行の最初のランであれば、初期化ラベル値「Ｌａｂｅｌ＝０」を「Ｌａｂｅｌ＝１」とする。また、「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝Ｌａｂｅｌ」は、注目ランのラベル値を「Ｌａｂｅｌ」にセットする処理であり、この場合は、「Ｌａｂｅｌ＝１」であるので、注目ラン（Ｒｕｎ[ｍ]）のラベル値は「１」となる。なお、第１次ラベル付与処理の段階で付与されるラベル値は前述したように仮のラベル値である。
【００７６】
また、「Ｌｔａｂｌｅ[Ｌａｂｅｌ]＝Ｌａｂｅｌ」は、ラベルテーブルにおいて、注目行の処理後におけるラベルインデクス「１」に対するラベル値を「１」とする処理である。また、「Ｌｃｏｕｎｔ[Ｌａｂｅｌ]＝１」は、ラベル数テーブルにおいて、注目行の処理後におけるラベルインデクス「１」に対するラベル数を「１」とする処理である。
【００７７】
次に、注目行が先頭行で無い場合には、ステップＳ３１において「Ｎｏ」のパスに進み、直前の行、すなわち、（ｉ−１）行の連結ランの数＝０（初期化）を行う(ステップＳ３４)。これは、注目ランに連結するランの数を当初は０個とする処理である。そして、「ｋ＝（ｉ−１）行の最初のランインデクス」をセットする（ステップＳ３３）。これは、直前の行のランインデクスを「ｋ」としたとき、まずは、「ｋ」を直前の行の最初のランのインデクスにセットするものである。
【００７８】
続いて、「Ｒｕｎ[ｋ]．ｅｎｄ≧Ｒｕｎ[ｍ]．ｂｅｇｉｎ」を判定し（ステップＳ３６）、また、「Ｒｕｎ[ｋ]．ｂｅｇｉｎ≦Ｒｕｎ[ｍ]．ｅｎｄ」を判定する（ステップＳ３７）。ステップＳ３６，Ｓ３７の判定処理は、これら判定処理がともに「Ｙｅｓ」であれば、注目ラン（ｍのインデクスを有するラン）は、直前（ｉ−１）の行の最初のラン（ｋのインデクスを有するラン）に連結することを意味している。そして、注目ランが直前の行に存在するランと連結有りと判定されると、「（ｉ−１）行の連結ラン数を＋１」とするとともにその時点の注目ランのランインデクスを記憶する（ステップＳ３８）。
【００７９】
そして、「ｋ」をインクリメントし（ステップＳ３９）、インクリメント後の「ｋ」が、「ｋ＞（ｉ−１）行の最後のランインデクス」であるか否かを判定し（ステップＳ４０）、（ｉ−１）行における最後のランインデクスでなければ、ステップＳ３６に戻り、同様の処理を行う。
【００８０】
ところで、ステップＳ３６の処理において、「Ｒｕｎ[ｋ]．ｅｎｄ≧＝Ｒｕｎ[ｍ]．ｂｅｇｉｎ」を判定した結果、「Ｒｕｎ[ｋ]．ｅｎｄ」が「Ｒｕｎ[ｍ]．ｂｅｇｉｎ」」よりも小さい場合には、ステップＳ３６の処理の「Ｎｏ」のパスに入ってステップＳ３９を行い、インクリメント後の「ｋ」が、「ｋ＞（ｉ−１）行の最後のランインデクス」であるか否かを判定し（ステップＳ４０）、（ｉ−１）行における最後のランインデクスでなければ、ステップＳ３６に戻り、同様の処理を行う。
【００８１】
また、ステップＳ３７の処理において、「Ｒｕｎ[ｋ]．ｂｅｇｉｎ≦Ｒｕｎ[ｍ]．ｅｎｄ」を判定した結果、「Ｒｕｎ[ｋ]．ｂｅｇｉｎ」が「Ｒｕｎ[ｍ]．ｅｎｄ」よりも大きい場合には、注目ランは、それ以降の連結性を調べる必要が無いので、ステップＳ３２の処理に入る。また、ステップＳ４０において、「ｋ＞（ｉ−１）行の最後のランインデクス」となった場合にもステップＳ３２の処理に入る。
【００８２】
ステップＳ３２では、前述したように、（ｉ−１）行の異なるラベル値を有する連結ランの数が０個、１個、２個以上のいずれであるかを判定する処理を行う。ここで、０個の場合は、ステップＳ３３に進む。このステップＳ３３の処理は前述した通りの処理である。また、１個の場合は、ステップＳ４１の処理を行う。
【００８３】
ステップＳ４１の処理は、「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝連結ランのラベル値」、「Ｌｃｏｕｎｔ[連結ランのラベル値のランデータ数]＋＋」、「ｍ＋＋」をセットする。「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝連結ランのラベル値」は、注目ランのラベル値を連結ランのラベル値とする処理である。「Ｌｃｏｕｎｔ[連結ランのラベル値のランデータ数]＋＋」は、ラン数テーブルにおいて、連結ランのラベル値に対応するランデータ数を１つ増加させる処理である。
【００８４】
また、ステップＳ３２において、異なるラベル値を有する連結ランの数が２個以上である場合は、ステップＳ４２の処理を行う。ステップＳ４２は、「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝最も小さいラベル値」、「Ｌｃｏｕｎｔ[最も小さいラベル値のランデータ数]＋＋」、「ラベルテーブルの値が“最も小さいラベル値”以外のその他の連結ランのラベル値と等しいインデックスに対応するラベル値を“最も小さいラベル値”にする」、「ｍ＋＋」とする処理である。
【００８５】
ステップＳ４２における「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝最も小さいラベル値」は、直前の行で作成された異なるラベル値を有する複数のランに付与された各ラベル値のうち最も小さいラベル値を注目ランのラベル値とする処理である。
具体例として、例えば、図４（ｅ）に示すように、注目ランとしてのＲｕｎ[１６]が直前の行におけるＲｕｎ[１２]（ラベル値「１」）とＲｕｎ[１３]（ラベル値「２」）の２つのランに連結している場合、最も小さいラベル値を注目ランのラベル値とするという処理を行う。図４（ｅ）の例では、Ｒｕｎ[１６]は、Ｒｕｎ[１２]に付与されたラベル値「１」がラベル値として付与されることとなる。
【００８６】
また、「Ｌｃｏｕｎｔ[最も小さいラベル値のランデータ数]＋＋」は、「Ｒｕｎ[ｍ]．ｌａｂｅｌ＝最も小さいラベル値」を行ったときの「最も小さいラベル値」のその時点におけるランデータ数を「＋１」することである。例えば、図１に示す２値画像データのｉ＝４（４行目）までの処理を行った段階で、ラベルインデクス「１」のランデータ数が「４」であったとすれば、ラベルインデクス「１」のランデータ数を「＋１」して「５」とする処理である（図６（ｃ）参照）。
【００８７】
また、「テーブルの値が“最も小さいラベル値”以外のその他の連結ランのラベル値と等しいインデクスに対応するラベル値を“最も小さいラベル値”にする」は、ラベルテーブルの書き換え作業である。例えば、図１に示す２値画像データのｉ＝４（４行目）までの処理を行った段階で、ラベルインデクス「２」のラベル値が「２」であったとすれば、そのラベル値「２」を最も小さいラベル値である「１」とする処理である（図５（ｃ）参照）。
【００８８】
次に第２次ラベル付与処理について説明する。第２次ラベル付与処理は、第１次ラベル付与処理後に作成されたラベルテーブル（図５参照（ｅ））及びラン数テーブル（図６（ｅ）参照）を用いて行われる。図５（ｅ）に示すラベルテーブルによれば、第１次ラベル付与処理によって付与されたラベル値（仮のラベル値）としてのラベルインデクス「１」，「２」，「３」に対しては、ラベル値統合処理後のラベル値として「１」が付与されており、第１次ラベル付与処理によって付与されたラベル値（仮のラベル値）としてのラベルインデクス「４」）に対しては、ラベル値統合処理後のラベル値として「２」が付与されている。
【００８９】
第２次ラベル付与処理によって付与されるラベル値が求めるべき最終的なラベル値であり、第２次ラベル付与処理では、図５（ｅ）に示すラベルテーブルの内容に基づいて、最終的なラベル値の付与を行う。なお、第２次ラベル付与処理を行う際には、図６（ｅ）に示すラン数テーブルを参照することにより、より効率的に第２次ラベル付与処理を行うこ
とができる。
【００９０】
図６（ｅ）に示すラン数テーブルは、同じラベル値を有するランデータ数が何個存在するかを示すものである。図６（ｅ）において、例えば、ラベルインデクス「１」のランデータ数が「１７」ということは、第１次ラベル付与処理で付与されたラベル値「１」を有するランデータ数が１７個存在することを示している。
これら２つのテーブルを用いることによって、第２次ラベル付与処理データの作成を容易に行うことができ、かつ、作成された第２次ラベル付与処理データから所望とするランデータに容易にアクセスすることができる。
なお、図６に示すラン数テーブルにおいて、図６（ｅ）に示すラン数テーブルの内容は、結果的には、第２次ラベル付与処理後のラベル値と当該第２次ラベル付与処理後のラベル値が付与されたランに対応するランデータの数との対応付けがなされたものとなる。
【００９１】
図１０は第２次ラベル付与処理によりラベル値の付け替えが行われたランデータを示す図である。第２次ラベル付与処理は、図２で示した第１次ラベル付与処理により作成されたＲｕｎ[０]〜Ｒｕｎ[１９]に対応するランデータのラベル値を、図５（ｅ）に示すラベルテーブルに基づいて付け替えを行い、かつ、同じラベル値を有するランデータが、連続するラベルインデクスを有するように並べ替える処理を行うものである。
【００９２】
例えば、第１次ラベル付与処理においてラベル値「１」が付与されたランに対応するランデータ（図２参照）は、図５（ｅ）に示すラベルテーブルを参照すると、ラベル値「１」が取得されるので、第１次ラベル付与処理において付与されたラベル値「１」はそのラベル値「１」がそのまま付与される。また、第１次ラベル付与処理においてラベル値「２」，「３」が付与されたランに対応するランデータ（図２参照）は、図５（ｅ）に示すラベルテーブルを参照すると、それぞれラベル値「１」が取得されるので、第１次ラベル付与処理において付与されたラベル値「２」，「３」はそれぞれ「１」に付け替える。
【００９３】
同様に、第１次ラベル付与処理においてラベル値「４」が付与されたランに対応するランデータ（図２参照）は、図５（ｅ）に示すラベルテーブルを参照すると、ラベル値「２」が取得されるので、第１次ラベル付与処理において付与されたラベル値「４」はラベル値「２」に付け替えられる。また、ラベル値の付け替えられた各ランデータは、同じラベル値を有するランデータが、連続するラベルインデクスを有するように並べ替えられる。
【００９４】
このようなラベル値の付け替えと並べ替えとを行った状態が図１０である。図１０（ａ）は、ラベル値「１」を有するランに対応するランデータの配列を示すもので、図１０（ｂ）は、ラベル値「２」を有するランに対応するランデータの配列を示す図である。
図１０（ａ）に示すように、ラベル値「１」を有するランデータは、Ｒｕｎ[０]〜Ｒｕｎ[５]、Ｒｕｎ[７]〜Ｒｕｎ[９]、Ｒｕｎ[１１]〜Ｒｕｎ[１３]、Ｒｕｎ[１５]〜Ｒｕｎ[１９]に対応するランデータである。また、図１０（ｂ）に示すように、ラベル値「２」を有するランデータは、Ｒｕｎ[６]、Ｒｕｎ[１０]、Ｒｕｎ[１４]に対応するランデータである。なお、図１０に示す各ランデータのラベル値（図１０（ａ）においてはラベル値「１」、図１０（ｂ）においてはラベル値「２」）は、図６（ｅ）に示すラン数テーブルの「ラベルインデクス」に対応する。
【００９５】
図１１は図１０に示すように配列されたランデータを記憶領域に格納した状態の一例を示す図である。なお、図１１においては、第２次ラベル付与処理後の各ランデータが２次元的な配列であるかのように示されているが、記憶領域ではこれら各ランデータは１次元のデータ配列として格納される。
図１１に示すように、記憶領域においては、同じラベル値を有するランデータが、連続するラベルインデクスを有するように格納される。なお、このような配列でランデータを
記憶領域に保存する際、ラベル値「１」の保存処理がすべて終わらなくても、ラベル値「２」を有するランデータの保存領域を適切に知ることができる。これは、図６（ｅ）に示すラン数テーブルを参照することによって、ラベル値「１」を有するランデータが「１７」個存在することがわかるからであり、ラベル値「２」を有するランデータは１８番目以降に保存すればよいことがわかる。
【００９６】
図１１に示すように、記憶領域においては、同じラベル値を有するランデータが、連続するラベルインデクスを有するデータ配列状に格納されるため、同じラベル値を有するランデータ、すなわち、２値画像データにおいて連結している領域を構成するランデータに対して高速にアクセスすることができる。これにより、画像データから何らかの特徴量を算出するような場合にきわめて有効なものとなる。特に、図６（ｅ）に示すようなランカウント数テーブルを有することにより、あるラベル値を有するランデータが何個連続して存在するかを容易に取得することができるので、特定のランデータへのアクセスを容易に行うことができることも特徴の一つである。
【００９７】
なお、記憶領域に格納される各ランデータを構成するデータとして、図１１では各ランの始端位置、終端位置、ラベル値、縦方向位置の４つのデータを有しているが、図６（ｅ）に示すラン数テーブルを有することから、図１１においては、個々のランデータのデータとしてラベル値は省略することもできる。これは、ラン数テーブルを参照することにより、記憶領域内の何番目までのランデータのどのようなラベル値を有しているのかということを取得することができるからである。このように、各ランデータ中のラベル値を省略することにより、記憶領域で保持すべきデータ量を削減することができる。また、ランデータとして始端位置と終端位置を保持するようにしているが、始端位置とランレングスの組み合わせでも等価な情報を保持することができるので、同様の処理を行うことが可能である。
【００９８】
図１２は本発明の実施形態に係る画像データ処理装置の構成を示す図である。本発明の実施形態に係る画像データ処理装置１０は、ＣＣＤカメラなどの撮像装置２０からの撮像データを入力するＩ／Ｏ（入出力部）１１、撮像装置２０からの撮像データ、撮像データを２値化した２値画像データ、第１次ラベル付与処理後のデータ、第２次ラベル付与処理後のデータ、ラベルテーブル、ラン数テーブルを記憶する大容量の記憶領域としてのＲＡＭ１２、撮像データを２値化して２値画像データを作成する機能、２値画像データを用いて第１次ラベル付与処理を行う機能、ラベルテーブル（図５参照）及びラン数テーブル（図６参照）を作成する機能、ラベルテーブル及びラン数テーブルを参照して第２次ラベル付与処理を行う機能などを行う演算処理装置１３、演算処理装置１３が各種の処理を行う際のプログラムを格納するＲＯＭ１４などを有している。なお、本発明の画像データ処理装置１０は、パーソナルコンピュータ（ＰＣという）を用いることで実現することができる。
【００９９】
本発明の画像データ処理装置１０が行う２値画像データを用いて行われる第１次ラベル付与処理、ラベルテーブル及びラン数テーブルの作成処理、ラベルテーブル及びラン数テーブルを参照して行われる第２次ラベル付与処理などについては、図１〜図１１により詳細に説明したので、その説明は省略する。
【０１００】
なお、本発明は上述の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲で種々変形実施可能となるものである。たとえば、処理対象となる注目行において作成されたランと直前の行において作成されたランとの連結の有無を調べる際、正方格子状で表現される画素配列において、注目する画素の真上方向において隣接するか否かを判断する例について説明したが、注目する画素の斜め方向の隣接を考慮するようにしてもよい。この場合、図８に示すステップＳ３６及びステップＳ３７において、例えば、「Ｒｕｎ[
ｋ]．ｅｎｄ」を＋１、「Ｒｕｎ[ｋ]．ｂｅｇｉｎ」を−１した値を用いて、ステップＳ３６，Ｓ３７を行えばよい。
【０１０１】
また、前述の実施形態では、図１に示す２値画像データをランレングス化する際、行方向に走査してランレングス化を行うようにしたが、列方向に走査を行うことによってランレングス化することもできる。この場合、ランレングス化によって作成されたラン同士の連結を判定する処理は、直前の列において作成されたランとの連結を判定することによって行う。
【０１０２】
また、前述の実施形態において説明した画像データ処理装置における第１次ラベル付与処理、ラベルテーブル及びラン数テーブルの作成処理、第２次ラベル付与処理などの画像データ処理を当該画像データ処理装置に実行させるためのプログラムとしての画像データ処理プログラムを各種の記録媒体に記録させておくことも可能である。したがって、本発明は、画像データ処理プログラムを記録した記録媒体をも含むものである。また、画像データ処理プログラムはネットワークから取得するようにしてもよい。
【図面の簡単な説明】
【０１０３】
【図１】本発明の実施形態に係る画像データ処理方法を説明するために用いる２値画像データの一例を示す図。
【図２】第１次ラベル付与処理において作成される各ランデータを示す図。
【図３】図２に示すランデータを作成順序で記憶領域に格納した状態の一例を示す図。
【図４】直前の行で作成されたランと同じラベル値を付与する処理を説明する図。
【図５】ラベルテーブルの作成手順を説明する図。
【図６】ラン数テーブルの作成手順を説明する図。
【図７】第１次ラベル付与処理及びラベルテーブル、ラン数テーブル作成までの全体的な処理の流れを概略的に示すフローチャート。
【図８】ラン作成手順を説明するフローチャート。
【図９】作成されたランに対してラベル値を付与する第１次ラベル付与処理の手順を示すフローチャート。
【図１０】第２次ラベル付与処理によりラベル値の付け替えが行われたランデータを示す図。
【図１１】図１０に示すように配列されたランデータを記憶領域に格納した状態の一例を示す図。
【図１２】本発明の実施形態に係る画像データ処理装置の構成を示す図。
【符号の説明】
【０１０４】
１０・・・画像データ処理装置、１１・・・Ｉ／Ｏ（入出力部）、１２・・・ＲＡＭ、１３・・・演算処理装置、１４・・・ＲＯＭ、２０・・・撮像装置、ｍ・・・ランインデクス、Ｒｕｎ[ｍ]・・・ランインデクスｍが与えられたラン
【図２】
2008186123.tif 000003
【図３】
2008186123.tif 000004
【図５】
2008186123.tif 000005
【図６】
2008186123.tif 000006
【図７】
2008186123.tif 000007
【図８】
2008186123.tif 000008
【図９】
2008186123.tif 000009
【図１０】
2008186123.tif 000010
【図１１】
2008186123.tif 000011
【図１２】
2008186123.tif 000012
【図１】
2008186123.tif 000013
【図４】
2008186123.tif 000014