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