(57)【特許請求の範囲】
【請求項１】
対象画像内で注目画素を移動させながら注目画素を順にラベルを付与する画像処理装置であって、
注目画素に対応する参照ウインドウ内にラベルが付された画素がなければ、その注目画素の座標を含んだ子レコードを記憶装置に記憶すると共に、新たなラベルと前記子レコードの前記記憶装置内でのアドレスとを含む親レコードを前記記憶装置に記憶する第１の手段と、
前記参照ウインドウ内に第１のラベルが付された画素があれば、その注目画素の座標を含んだ第１の子レコードを記憶装置に記憶すると共に、前記第１のラベルを含んだ第１の親レコードを前記記憶装置から検索し、検索された前記第１の親レコードに含まれる子レコードのアドレスに基づき前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを特定し、特定した子レコードに対し、前記第１の子レコードの前記記憶装置内でのアドレスを次の子レコードのアドレスとして登録する第２の手段と、
前記参照ウインドウ内に前記第１のラベルとは異なる第２のラベルを持つ画素があれば、前記第２のラベルを含んだ第２の親レコードを前記記憶装置から検索し、検索された前記第２の親レコードの前記記憶装置内でのアドレスを前記第１の親レコードに対して次の親レコードのアドレスとして登録する第３の手段と、
前記親レコードに含まれる前記次の親レコードのアドレスを連鎖的に辿ることで同一ラベルに対応する親レコード群を特定し、特定された親レコード群に含まれる子レコードのアドレスを用いて当該子レコードにアクセスし、当該子レコードを起点として各子レコードに含まれる前記次の子レコードのアドレスを連鎖的に辿ることで、前記同一ラベルに対応する各画素の座標を収集する第４の手段と、
を備える画像処理装置。
【請求項２】
前記第１の手段は、前記記憶装置内での前記親レコードのアドレスを前記新たなラベルとする、ことを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記親レコードは、当該親コードに対応するラベルが付された画素の系列における末尾の画素に対応する子レコードの前記記憶装置内でのアドレスを記憶する第１の欄を有し、
前記第２の手段は、前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを、前記第１の親レコードが有する前記第１の欄内のアドレスに基づき特定すると共に、その後、前記第１の親レコードが有する前記第１の欄内のアドレスを前記第１の子レコードの前記記憶装置内でのアドレスに書き換える、
ことを特徴とする請求項１記載の画像処理装置。
【請求項４】
コンピュータを、
注目画素に対応する参照ウインドウ内にラベルが付された画素がなければ、その注目画素の座標を含んだ子レコードを記憶装置に記憶すると共に、新たなラベルと前記子レコードの前記記憶装置内でのアドレスとを含む親レコードを前記記憶装置に記憶する第１の手段と、
前記参照ウインドウ内に第１のラベルが付された画素があれば、その注目画素の座標を含んだ第１の子レコードを記憶装置に記憶すると共に、前記第１のラベルを含んだ第１の親レコードを前記記憶装置から検索し、検索された前記第１の親レコードに含まれる子レコードのアドレスに基づき前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを特定し、特定した子レコードに対し、前記第１の子レコードの前記記憶装置内でのアドレスを次の子レコードのアドレスとして登録する第２の手段と、
前記参照ウインドウ内に前記第１のラベルとは異なる第２のラベルを持つ画素があれば、前記第２のラベルを含んだ第２の親レコードを前記記憶装置から検索し、検索された前記第２の親レコードの前記記憶装置内でのアドレスを前記第１の親レコードに対して次の親レコードのアドレスとして登録する第３の手段と、
前記親レコードに含まれる前記次の親レコードのアドレスを連鎖的に辿ることで同一ラベルに対応する親レコード群を特定し、特定された親レコード群に含まれる子レコードのアドレスを用いて当該子レコードにアクセスし、当該子レコードを起点として各子レコードに含まれる前記次の子レコードのアドレスを連鎖的に辿ることで、前記同一ラベルに対応する各画素の座標を収集する第４の手段と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置に関し、特に画素のラベリング処理に関する。
【背景技術】
【０００２】
２値画像に対するラベリング処理は、基本的な画像処理の１つであり、処理の効率化等のために従来様々な方式が提案されている。
【０００３】
特許文献１には、ランレングス符号に対してラベリングを行う装置が開示される。この装置に入力されたランレングス符号は、ラン復号化部で復号され、ＭＨ符号であればラン情報を用いて、連結チェック部で参照行との連結がチェックされる。ランテーブル管理部は、連結するランがあればそれに該当するラベルを割り当て、なければラベル管理部で新しいラベルを登録し、そのラベルを該ランに割り当てる。連結するランが複数ある場合、ラベル管理部は、ラベルテーブル上でそれら連結するランのラベル間にリンクを張り、それらラベルを統合する。連結成分整理部は、ラベルテーブルのリンク情報を基に、登録されたランのラベルを再割り付けする。
【０００４】
特許文献２に開示される装置は、入力映像を表す２値化映像信号を処理してラベルを生成し、画面領域のラベル付けを行う場合、端点抽出手段で抽出した入力映像の図柄の端点の位置とラベルとをラベル記憶部にリスト構造で記憶する。ラベル記憶部に記憶した端点の位置に基づき、連結判定手段が図柄の連結を判定し判定結果を生成する。判定結果は連結情報記憶部にツリー構造で記憶される。さらにラベル統合手段がツリー構造において所定の関係をもつラベルを統合し、ラベル記憶部に前記ラベルとして記憶させる。
【０００５】
特許文献３に示されるラベリング方法は、２次元画像データにおける同種の連続画素群に仮ラベルを付すステップと、異なる仮ラベルが付された連続画素群同士が隣接している場合に同一ラベルとして連結する連結処理ステップとを有する。この方法では、仮ラベルごとに、その仮ラベルを持つ画素塊の画素数、その画素塊の重心座標、その仮ラベルを持つ画素塊に隣接する画素塊の仮ラベル（隣接ラベルと呼ぶ）、を記録するラベリングテーブルを用いる。注目画素に仮ラベルを付した場合、ラベリングテーブルにおけるその仮ラベルの画素数をインクリメントし、重心座標を更新する。また、注目画素の１行上の隣接画素群の中にその仮ラベルと異なる仮ラベルを持つ画素があれば、ラベリングテーブルに対し、当該画素の仮ラベルに対応する隣接ラベルとして注目画素の仮ラベルを登録する。そして、連結処理ステップでは、仮ラベルの画素数、重心を、隣接ラベルの画素数、重心で更新し、更にその隣接ラベルの隣接ラベルの画素数、重心で更新するというように連鎖的に更新していくことで、同一のラベルを持つ画素塊の画素数、重心を求める。
【０００６】
【特許文献１】特開平８−１１１７８２号公報
【特許文献２】特開平１１−３４５３３３号公報
【特許文献３】特開２００４−３８６６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１の方式では、１ライン内で連続する黒画素群（すなわち「ラン」）ごとにその位置、長さ、及びラベルを記録したテーブルを用い、ライン間でのラン同士の隣接をそのテーブルに基づき判定している。このため、ラベリング処理の際にそのテーブルに頻繁なアクセスが生じ、アクセス時間が膨大となる。特許文献２の方式も、特許文献１の方式に類似しており、同様の問題がある。
【０００８】
また、特許文献３の方式は、各画素塊の画素数や重心などといった集計値を求めることができるが、連結しているにもかかわらず異なる仮ラベルが与えられた画素に対して統合されたラベル値を与える方法については特許文献３には示されていない。
【課題を解決するための手段】
【０００９】
請求項１に係る発明は、対象画像内で注目画素を移動させながら注目画素を順にラベルを付与する画像処理装置であって、注目画素に対応する参照ウインドウ内にラベルが付された画素がなければ、その注目画素の座標を含んだ子レコードを記憶装置に記憶すると共に、新たなラベルと前記子レコードの前記記憶装置内でのアドレスとを含む親レコードを前記記憶装置に記憶する第１の手段と、前記参照ウインドウ内に第１のラベルが付された画素があれば、その注目画素の座標を含んだ第１の子レコードを記憶装置に記憶すると共に、前記第１のラベルを含んだ第１の親レコードを前記記憶装置から検索し、検索された前記第１の親レコードに含まれる子レコードのアドレスに基づき前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを特定し、特定した子レコードに対し、前記第１の子レコードの前記記憶装置内でのアドレスを次の子レコードのアドレスとして登録する第２の手段と、前記参照ウインドウ内に前記第１のラベルとは異なる第２のラベルを持つ画素があれば、前記第２のラベルを含んだ第２の親レコードを前記記憶装置から検索し、検索された前記第２の親レコードの前記記憶装置内でのアドレスを前記第１の親レコードに対して次の親レコードのアドレスとして登録する第３の手段と、前記親レコードに含まれる前記次の親レコードのアドレスを連鎖的に辿ることで同一ラベルに対応する親レコード群を特定し、特定された親レコード群に含まれる子レコードのアドレスを用いて当該子レコードにアクセスし、当該子レコードを起点として各子レコードに含まれる前記次の子レコードのアドレスを連鎖的に辿ることで、前記同一ラベルに対応する各画素の座標を収集する第４の手段と、を備える画像処理装置である。
【００１０】
請求項２に係る発明は、請求項１に記載の発明において、前記第１の手段は、前記記憶装置内での前記親レコードのアドレスを前記新たなラベルとする、ことを特徴とする。
【００１１】
請求項３に係る発明は、請求項１に記載の発明において、前記親レコードは、当該親コードに対応するラベルが付された画素の系列における末尾の画素に対応する子レコードの前記記憶装置内でのアドレスを記憶する第１の欄を有し、前記第２の手段は、前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを、前記第１の親レコードが有する前記第１の欄内のアドレスに基づき特定すると共に、その後、前記第１の親レコードが有する前記第１の欄内のアドレスを前記第１の子レコードの前記記憶装置内でのアドレスに書き換える、ことを特徴とする。
【００１２】
請求項４に係る発明は、コンピュータを、注目画素に対応する参照ウインドウ内にラベルが付された画素がなければ、その注目画素の座標を含んだ子レコードを記憶装置に記憶すると共に、新たなラベルと前記子レコードの前記記憶装置内でのアドレスとを含む親レコードを前記記憶装置に記憶する第１の手段と、前記参照ウインドウ内に第１のラベルが付された画素があれば、その注目画素の座標を含んだ第１の子レコードを記憶装置に記憶すると共に、前記第１のラベルを含んだ第１の親レコードを前記記憶装置から検索し、検索された前記第１の親レコードに含まれる子レコードのアドレスに基づき前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを特定し、特定した子レコードに対し、前記第１の子レコードの前記記憶装置内でのアドレスを次の子レコードのアドレスとして登録する第２の手段と、前記参照ウインドウ内に前記第１のラベルとは異なる第２のラベルを持つ画素があれば、前記第２のラベルを含んだ第２の親レコードを前記記憶装置から検索し、検索された前記第２の親レコードの前記記憶装置内でのアドレスを前記第１の親レコードに対して次の親レコードのアドレスとして登録する第３の手段と、前記親レコードに含まれる前記次の親レコードのアドレスを連鎖的に辿ることで同一ラベルに対応する親レコード群を特定し、特定された親レコード群に含まれる子レコードのアドレスを用いて当該子レコードにアクセスし、当該子レコードを起点として各子レコードに含まれる前記次の子レコードのアドレスを連鎖的に辿ることで、前記同一ラベルに対応する各画素の座標を収集する第４の手段と、して機能させるためのプログラムである。
【発明の効果】
【００１３】
請求項１又は４に係る発明によれば、対象画像を順方向に１回走査するだけで、正しいラベリング結果を得ることができる。
【００１４】
請求項２に係る発明によれば、第２の手段が前記第１のラベルを含んだ第１の親レコードを前記記憶装置から検索する処理を高速化できる。
【００１５】
請求項３に係る発明によれば、第２の手段が前記第１のラベルが付された画素の系列における末尾の画素に対応する子レコードを特定する処理を高速化できる。
【発明を実施するための最良の形態】
【００１６】
本実施形態のよりよい理解のために、まず２値画像のラベリング（ラベル付与）処理の一般的な手順を説明する。ここでは、図１に例示する２値画像１００を例にとって説明する。２値画像１００は、「０（白）」又は「１（黒）」のいずれかの値をとる画素１０２が２次元行列状に配列されたものである。この例では、ラベリングの対象となる注目画素を、左上隅の画素を起点としてラスタ走査順序で移動させていく。ラスタ走査の主走査方向と副走査方向の例を図１に示した。図２に示すように、注目画素１１０についてのラベリングは、その注目画素１１０に隣接する参照ウインドウ１２０内の画素群のラベルを調べることにより行う。図２の例では、参照ウインドウ１２０は、注目画素１１０の左隣の画素、及び１行上の３つの隣接画素（すなわち左上、真上、及び右上）からなる４つの隣接画素を含む。この参照ウインドウ１２０は、画像の左上隅からラスタ走査し、８近傍型の連結を採用した場合の例である。ラベリングの手順の例を図３に示す。
【００１７】
図３の手順では、まずラベリングを行う処理部は、２値画像１００の左上隅の画素を注目画素として読み込み（Ｓ２）、その値が「１」であるか否かを判定する（Ｓ３）。「１」でなければラベルは付与しないので、ステップＳ１にてラスタ走査順序で次の画素があるか否かを調べ、あればステップＳ２に進んでその画素を注目画素とする。ステップＳ３の判定で注目画素の値が「１」であれば、その注目画素に対する参照ウインドウ内にラベル付きの画素があるかどうかを調べ（Ｓ４）、なければ注目画素に新たなラベルを付与し（Ｓ５）、あればそのラベル付き画素のラベルを注目画素に付与する（Ｓ６）。注目画素に対するラベルの付与（Ｓ５又はＳ６）が終わると、ステップＳ１に戻る。そして、ラスタ走査順で最後の画素まで処理が終わると、ステップＳ１の判定結果が否定（Ｎｏ）となり、処理が終了する。
【００１８】
図１の２値画像１００に対し、図３のアルゴリズムに従い、左上隅の画素を起点にラスタ走査順にラベリングを行った場合（順方向走査）のラベリング結果１５０を図４に示す。黒画素の中に描かれている数字が、当該画素に付与されたラベルである。２値画像１００に示される黒画素群はすべて連結して１つのＶ字形の塊を形成しているので、これらすべての黒画素のラベルは同じ値になるべきである。しかし、図４から分かるように、図３の手順によれば、２値画像１００中の黒画素群は、ラベルが「１」のものと「２」のものとに分かれている。そこで、上述の順方向走査を行った後のラベリング結果に対し、逆方向の走査で再度ラベリングを行うことで、２つに分かれたラベルが統合されるようにしている。この逆方向走査では、例えば、注目画素の左隣画素と１行下の３つの隣接画素とを含む参照ウインドウを用い、左下隅の画素を起点として左から右への主走査、下から上への副走査を行う。
【００１９】
以上のように、一般的なラベリング手順では、対象となる画像に対して順方向及び逆方向の２回の走査を行う必要がある。
【００２０】
これに対して本実施形態では、順方向の１回の走査で正しいラベリング結果が得られる装置又は方法を提供する。図５に、本実施形態のラベリング処理を行う画像処理装置の一例の機能ブロック図を示す。図５に例示する装置は、演算部１０と記憶部２０とを備える。
【００２１】
演算部１０は、ラベリング処理のための演算を行うユニットであり、例えば、ＣＰＵ（中央演算処理ユニット）で、ラベリング処理のためのプログラム群を実行することにより実現される。演算部１０は、機能モジュールとして、ラベリング部１２と、ラベル統合部１４とを備える。ラベリング部１２は、対象の画像データ２２を走査しながら各画素に対してラベルを付与すると共に、それらラベルの統合のためのラベル管理データ２６を生成する。ラベリング部１２が実行する走査は順方向１回のみでよい。ラベル統合部１４は、ラベリング部１２によるラベリングの結果であるラベル値データ２４と、同時に生成されたラベル管理データ２６とを用いて、隣接する画素塊同士を統合する。ラベリング部１２及びラベル統合部１４の処理内容については後で詳しく説明する。記憶部２０は、例えば、画像処理装置のオペレーティングシステムにより管理される主記憶であり、ハードウエアとしては例えばＲＡＭ（ランダムアクセスメモリ）である。記憶部２０には、ラベリング対象の２値画像の画像データ２２と、ラベリング部１２による画像データ２２のラベリング結果であるラベル値データ２４と、ラベル管理データ２６とが記憶される。ラベル値データ２４は、例えば、画像データ２２の画素の２次元座標をインデックスとする２次元の配列であり、各配列要素には当該要素に対応する画素のラベルの値が保持される。
【００２２】
次に、図６を参照して、記憶部２０のメモリ空間２００内にあるラベル管理データ２６のデータ構造の一例を説明する。対象となる画像データ２２のラベリングのために、メモリ空間２００内に親レコード領域２１０，子レコード領域２３０が確保され、前者には１以上の親レコード２２０が、後者には１以上の子レコード２４０が記憶される。
【００２３】
親レコード２２０は、１つのラベルに対して１つ生成される。１つの親レコード２２０は、ラベル２２２，次の親アドレス２２４，及び子アドレス２２６を含んでいる。ラベル２２２は、当該親レコード２２０に対応するラベルの値である。次の親アドレス２２４は、当該ラベル２２２を持つ画素塊に隣接する、異なるラベルを持つ画素塊の親レコードの、メモリ空間２００内でのアドレスである。子アドレス２２６は、当該ラベル２２２を持つ画素のうちの１つに対応する子レコード２４０の、メモリ空間２００内でのアドレスである。
【００２４】
子レコード２４０は、画像データ２２の１画素について１つ生成される。１つの子レコード２４０は、対応する画素の座標２４２と、次の子アドレス２４４とを含む。次の子アドレス２４４は、その画素と同じラベルを持つ別の画素に対応する子レコードの、メモリ空間２００内でのアドレスである。
【００２５】
この他、メモリ空間２００内には、ラベリング処理のための変数として、最大ラベル２５０（Ｌmax），親アドレスの最大値２６０（Ｐmax），及び子アドレスの最大値２７０（Ｃmax）が記憶される。
【００２６】
次に、ラベリング部１２が実行する処理手順の一例を説明する。ラベリング部１２の全体的な処理の骨格は、図３に例示したものと同様でよい。ただし、順方向の走査のみでラベリングを完了させるために、ステップＳ５及びステップＳ６に相当する部分の処理を工夫している。まず、図７を参照して、ステップＳ５に相当する部分の処理について説明する。
【００２７】
図７に示す手順は、図３の手順のステップＳ４において、参照ウインドウ１２０内にラベルを持つ画素がないと判定された場合に実行される。参照ウインドウ１２０内の各画素のラベル値は、例えばラベル値データ２４を参照して求めればよい。この手順では、まずラベリング部１２は、親アドレスの最大値２６０（Ｐmax）を親レコード１つ分だけインクリメントしたアドレス（Ｐmax＋１）を計算し、そのアドレス（Ｐmax＋１）に新たな親レコード２２０を生成する（Ｓ１１）。なお、ラベリング処理の開始時点では、Ｐmaxは親レコード領域２１０の先頭アドレスから親レコード１つ分のデータ長を引いた値、子アドレスの最大値２７０（Ｃmax）は子レコード領域２３０の先頭アドレスから子レコード１つ分を引いた値、最大ラベル２５０（Ｌmax）は０、にそれぞれ初期化されているものとする。
【００２８】
次にラベリング部１２は、その親レコード２２０のラベル２２２に、最大ラベル２５０（Ｌmax）に１を足した値（Ｌmax＋１）を書き込む（Ｓ１２）。この値（Ｌmax＋１）が、現在の注目画素に付与されたラベルである。またラベリング部１２は、子アドレスの最大値２７０（Ｃmax）を子レコード１つ分だけインクリメントしたアドレス（Ｃmax＋１）を計算し、そのアドレス（Ｃmax＋１）に新たな子レコード２４０を生成する（Ｓ１３）。そして、その子レコード２４０の画素の座標２４２の欄に、注目画素の座標を書き込む（Ｓ１４）。図７の例では、ステップＳ１１及びＳ１２の後に、ステップＳ１３及びＳ１４を実行したが、逆の順序でもよい。
【００２９】
また、ラベリング部１２は、ステップＳ１１で生成した親レコード２２０内の子アドレス２２６の欄に、アドレス値（Ｃmax＋１）を書き込む（Ｓ１５）。そして、各変数Ｐmax，Ｌmax，及びＣmaxをインクリメントし（Ｓ１６）、図３のステップＳ１に戻って次の注目画素を処理する。
【００３０】
次に、図８及び図９を参照して、図３のステップＳ６に相当する部分の処理について説明する。
【００３１】
図８及び図９に示す手順は、図３の手順のステップＳ４において、参照ウインドウ１２０内にラベルを持つ画素があると判定された場合に実行される。この場合、ラベリング１２は、まず図８に示すように、参照ウインドウ１２０内で見つかったラベルを含んだ親レコード２２０を、親レコード領域２１０から検索する（Ｓ２１）。参照ウインドウ１２０内の各画素には、例えば注目がその左隣を最高位とし反時計回りに順位が低くなるなどの優先順位付けがなされており、優先順位の高い画素から順にラベルの有無が判定され、ラベルを持つ画素が見つかった時点でステップＳ２１が実行される。次にラベリング部１２は、ステップＳ２１で検索された親レコード２２０内の子アドレス２２６の値を取得する（Ｓ２２）。そして、取得した値が示すアドレスにある子レコードにアクセスし、アクセスした子レコード内の「次の子アドレス」２４４の欄にアクセスする（Ｓ２３）。更に、ラベリング部１２は、アクセスした「次の子アドレス」２４４の欄が空（即ちＮＵＬＬ値を有する）か否かを判定し（Ｓ２４）、空でなければ、その欄内のアドレスを取得し（Ｓ２５）、ステップＳ２３に戻ってそのアドレスにある子レコードにアクセスする。これらステップＳ２３〜Ｓ２５のループは、同じラベルを持つ画素の子レコードの系列（リスト構造）を末尾まで辿っていくための処理である。
【００３２】
ステップＳ２４の判定結果がＮｏとなると、系列の末尾の子レコードに達したことになる。この場合、ラベリング部１２は、当該末尾の子レコードの「次の子アドレス」２４４の欄にアドレス値（Ｃmax＋１）を書き込む（Ｓ２６）。また、ラベリング部１２は、メモリ空間２００のアドレス（Ｃmax＋１）に新たな子レコード２４０を生成し（Ｓ２７）、その子レコード２４０の画素の座標２４２の欄に、注目画素の座標を書き込む（Ｓ２８）。ステップＳ２６〜Ｓ２８により、注目画素に対応する子レコードが、隣接する画素のラベルに対応する子レコードの系列の末尾に追加される。その後、ラベリング部１２は、図９の処理に進む。
【００３３】
図９の処理は、本来連結しているにもかかわらず順方向走査では別々のラベルが与えられた画素塊同士を連結（リンク）するための処理である。この処理では、ラベリング部１２は、ステップＳ２１で見つかったラベル（即ち注目画素に付与されたラベル。識別のためにラベルＡと呼ぶ）とは異なるラベル（識別のためにラベルＢと呼ぶ）が参照ウインドウ１２０内にあるか否かを判定する（Ｓ２９）。そのようなラベルＢが参照ウインドウ１２０内に無ければ、図９の処理は終了し、ラベリング部１２は図３のステップＳ１の処理に戻る。
【００３４】
ステップＳ２９の判定結果がＹｅｓとなった場合、ラベリング部１２は、ステップＳ２９で見つかったラベルＢを有する親レコード２２０をメモリ空間２００から検索する（Ｓ３０）。またラベリング部１２は、ステップＳ２２で検索された親レコード２２０（これは注目画素に付与されたラベルに対応する）の次の親アドレス２２４の欄にアクセスし（Ｓ３１）、その欄が空であるか否かを判定する（Ｓ３２）。空であれば、その欄に対し、ステップＳ３０で検索した親レコード２２０のアドレスを書き込む（Ｓ３３）。これにより、ステップＳ３０で見つかった別のラベルが、注目画素に付与したラベルとリンクされる。そして、ラベリング部１２は、変数Ｃmax及びＰmaxをインクリメントし（Ｓ３４）、ステップＳ１に戻る。
【００３５】
なお、ステップＳ３２で、ステップＳ２２で検索された親レコード２２０の次の親アドレス２２４の欄が空でないと判定された場合、ラベリング部１２は、その欄内のアドレスを取得し、そのアドレスにある親レコード２２０の中の次の親アドレス２２４の欄にアクセスする（Ｓ３５）。そして、ステップＳ３２に戻る。ステップＳ３２及びＳ３５のループは、次の親アドレス２２４の欄が空の親レコードに達するまで繰り返される。このループは、リンクされたラベル（親レコード）の系列を末尾まで辿っていくための処理である。黒画素塊が複雑な形状をしており、同じ１つの黒画素塊の中の画素群が３以上のラベルに分かれた場合は、このループにより、それらラベルが（順方向走査の中で）発見された順に１つずつリスト構造に追加されていることになる。
【００３６】
以上、ラベリング部１２の処理手順の一例を説明した。次に、図１０〜図１２を参照して、異なるラベル同士がリンクされる上記手順によりリンクされる様子を説明する。個々では、ラベリング部１２によるラベリング処理が図１０に示す状況まで進んだ時点を具体例として用い、説明する。
【００３７】
図１０は、左上隅の画素を起点とする順方向の走査で、座標（４，５）の画素までラベリングが完了した時点の状態を示す。なお、ここでは、画像の２次元行列の行番号をｉ、列番号をｊとし、画素の座標を（ｉ，ｊ）と表している。図１０の状態では、本来連結している黒画素群が、別々のラベル「１」と「２」を持つ塊に分かれている。
【００３８】
この時点のメモリ空間２００内のラベル管理データ２６の状態を、図１１に示す。この時点では、親レコード領域２１０内には、２つの親レコード２２０−１，２２０−２が存在する。各親レコード２２０の左側にある数字「１０１」及び「１０２」は、メモリ空間２００内での当該親レコード２２０の先頭アドレスである。親レコード２２０−１及び２２０−２のラベル２２２の値はそれぞれ「１」及び「２」であり、次の親アドレス２２４の値はＮＵＬＬ値（即ち空）である。親レコード２２０−１の子アドレス２２６欄には、ラベル「１」を最初に付与された画素（１，１）に対応する子レコード２４０のメモリ空間２００内でのアドレス「１００１」が保持されている。同様に親レコード２２０−２の子アドレス２２６欄には、ラベル「２」を最初に付与された画素（１，９）に対応する子レコード２４０のアドレス「１００３」が保持されている。
【００３９】
また、子レコード領域２３０内には、ラベルが付与された各画素に対応する子レコード２４０が記憶されている。各子レコード２４０の左隣に示される「１００１」、「１００２」等の値は、当該子レコード２４０の先頭アドレスである。子レコード２４０同士は、次の子アドレス２４４によりリンクされている。例えば、アドレス「１００１」の子レコードは、次の子アドレス２４４の値により、アドレス「１００２」の子レコードとリンクしている。このことは、画素（１，１）と画素（１，２）とが同じラベルを持つ連結した画素であることを示す。ここでアドレス「１００１」の子レコードは、ラベル「１」の親レコード２２０−１からリンクされているので、アドレス「１００２」の子レコードが示す画素（１，２）はラベル「１」を持つことが分かる。画素（４，５）まで走査が完了した時点では、アドレス「１０１４」にある当該画素（４，５）の子レコードはラベル「１」の系列の末尾にあり、次の子アドレスの値はＮＵＬＬとなっている。
【００４０】
なお、図１１では、分かりやすくするために、ラベル「１」が付与された画素の子レコード群と、ラベル「２」が付与された画素の子レコード群とを分けて示したが、当然ながら実際のメモリ空間２００では、子レコード２４０群は、対応するラベルによらず、アドレスの順番に並ぶ。
【００４１】
さて、図１０の状態から処理が進み、画素（４，６）を注目画素１１０としてラベリングが行われると、画素（４，６）には、参照ウインドウ１２０内でラベルを持つ画素のうち最高の優先順位を持つ左隣の画素のラベル「１」が付与される。すなわち、図１２に示されるように、子レコード領域２３０のアドレス「１０１５」に、画素（４，６）のための新たな子レコードが追加され、アドレス「１０１４」の次の子アドレス２４４にそのアドレス「１０１５」が書き込まれる。
【００４２】
さて、このとき、参照ウインドウ１２０内には、ラベル「１」の他にラベル「２」も存在する。そこで、ラベリング部１２は、ラベル「１」に「２」をリンクする。すなわち、図１２に例示するように、ラベル「１」の親レコード２２０−１の次の親アドレス２２４に対し、ラベル「２」の親レコード２２０−２のアドレス「１０２」を書き込む。
【００４３】
以上、ラベリング部１２の処理について説明した。ラベリング部１２が対象の画像データ２２に対して順方向の走査を終えると、記憶部２０内には、画像データ２２内にある実際は連結しているのに異なるラベルが付与された画素塊同士を統合するための情報を含んだラベル管理データ２６（具体例は図１１，図１２を参照）が完成している。ラベル統合部１４は、このラベル管理データ２６を用いて上述の統合を行う。図１３及び図１４を参照して、ラベル統合部１４の処理の例を説明する。
【００４４】
図１３及び図１４に示す処理手順は、対象となるラベルが１つ指定された場合に、その対象ラベルを持つすべての画素を求めるための処理である。この処理は、例えば、ラベリング結果を表示したり、ラベリング結果を用いて画像処理や重心計算などの各種の処理を行ったりするプログラムにより利用される。例えば、そのプログラムが、対象の画像にある各画素塊ごとに処理を行う場合には、ラベル管理データ２６にある親レコードの先頭のものから順に、図１３及び図１４の処理を行えばよい。
【００４５】
この処理では、ラベル統合部１４は、まず図１３に示されるように、指定された対象ラベルに対応する親レコードを親レコード領域２１０から検索し、取得する（Ｓ４１）。ラベルではなく親レコード２２０が指定されている場合は、ステップＳ４１の処理は不要である。次にラベル統合部１４は、画素探索（Ｓ４２）を行う。画素探索は、子レコード領域２３０の情報を用いて、その親レコード２２０のラベルを持つ画素群を探索する処理である。図１４は、画素探索処理の手順の一例である。
【００４６】
図１４の処理手順では、ラベル統合部１４は、ステップＳ４１で取得された親レコード２２０の子アドレス２２６の値を取得し、その値が示すアドレスにある子レコード２４０にアクセスする（Ｓ５１）。そして、その子レコード２４０の画素の座標２４２をリストに登録する（Ｓ５２）。このリストは、指定されたラベルを持つ画素群を入れるためのリストである。次にラベル統合部１４は、その子レコード２４０内の次の子アドレス２４４の欄にアクセスし（Ｓ５３）、その欄が空であるか否かを判定する（Ｓ５４）。次の子アドレス２４４の欄が空でなければ、ラベル統合部１４は、その欄内の値を取得し、その値が示すアドレスにある子レコード２４０にアクセスし（Ｓ５５）、ステップＳ５２に戻ってその子レコード２４０内の画素座標２４２をリストに記憶する。対象ラベルを持つ画素の系列の末尾に達するまで、ステップＳ５２〜Ｓ５５のループが繰り返される。そして、ステップＳ５４で、次の子アドレス２４４が空となった場合は、そのラベルを持つ画素の系列の末尾まで達したということなので、処理を終了する。
【００４７】
図１３の説明に戻ると、ラベル統合部１４は、ステップＳ４１で取得された親レコード２２０の次の親アドレス２２４の欄にアクセスし（Ｓ４３）、その欄が空であるか否かを判定する（Ｓ４４）。空でなければ、ラベル統合部１４は、その欄内の値が示すアドレスにある親レコード２２０を取得する（Ｓ４５）。これにより、指定された対象ラベルにリンクされた別のラベルが取得される。そして、ラベル統合部１４は、ステップＳ４２に戻ってその親レコード２２０のラベルを持つ画素群を探索し、見つかった画素の座標を前述のリストに入れる。対象ラベルにリンクされたラベルとの系列の末尾に達するまで、ステップＳ４２〜Ｓ４５のループが繰り返される。そして、ステップＳ４４で、次の親アドレス２２４が空となった場合は、対象ラベルにリンクしたラベルの系列の末尾まで達したということなので、ラベル統合部１４は、リストに蓄積された画素群の情報を、当該ラベリング結果を利用するプログラムに対して出力し（Ｓ４６）、処理を終了する。
【００４８】
以上に例示した方式によれば、対象画像を順方向に１回走査するだけで、正しいラベリング結果を得ることができる。
【００４９】
以上に例示した方式において、ラベルとして親レコード２２０のアドレスを用いてもよい。これによれば、ステップＳ２１やＳ３０等の検索を高速化できる。
【００５０】
以上では、２値画像のラベリングの例を示したが、３値以上の多値画像のラベリングも従来知られており、上述の例の方式は多値画像のラベリングにも適用できる。上述の方式を多値画像のラベリングに適用する場合、次のような変形例が考えられる。すなわち、この変形例では、親レコード２２０に対し、図１５に示すように色情報２２８を追加する。色情報２２８は、多値画像中の当該親レコード２２０に対応する画素塊の色を示す値である。ラベリング部１２は、参照ウインドウ内に注目画素と同じ色（すなわち多値画像における画素値）を持つ画素があれば、その画素のラベルを注目画素に付与する（すなわち、その画素の子レコードに対し、注目画素の子レコードをリンクする）。一方、注目画素に対し新たなラベルを付与する際には、ラベリング部１２は、新たな親レコード２２０を生成し、注目画素の色を色情報２２８の欄に書き込む。また、参照ウインドウ内に、注目画素に付与したラベルＸと異なるラベルＹが存在する場合、ラベルＸとＹに対応する親レコードの色情報２２８が同じであれば、ラベルＸの親レコードの次の親アドレス２２４に、ラベルＹの親レコードのアドレスを書き込む。以上のようにして、多値画像についても、順方向走査のみでラベリングができる。そして、このように親レコード２２０に色情報２２８を追加しておけば、色情報２２８を用いて異なるラベルを持つ画素塊同士を統合することもできる。例えば、色情報「１」と「２」を同じ色と見なす旨の指示があれば、色情報「１」に対応するラベルを持つ画素塊と、色情報「２」に対応するラベルを持つ画素塊とを１つにまとめることができる。
【００５１】
なお、グレースケール画像やフルカラー画像も、画素値を複数の範囲に分類し、各画素の値がそれら各範囲のいずれに属するかを判定することで、多値画像に変換できるので、グレースケール画像やフルカラー画像についてもラベリングは可能であり、これにも上述の方式を適用できる。また、ここでは色情報を例にとったが、画素が色情報以外の属性情報を持つ場合に、その属性情報を親レコード２２０に登録しておき、その属性情報同士の近さに応じてあるラベルの画素塊と別のラベルの画素塊とを統合することもできる。
【００５２】
また、別の変形例として、図１６に示すように親レコード２２０に、当該親レコード２２０にリンクした子レコードの系列の最後の子レコードのアドレス２２９を記録してもよい。この変形例では、ラベリング部１２は、注目画素に既存のラベルを与える場合、そのラベルに対応する親レコード２２０の最後の子レコードのアドレス２２９を参照することで、その親レコード２２０からリンクされた子レコードの系列を辿らなくても、その系列の末尾の子レコードを直接見つけることができ、その末尾の子レコードの次の子アドレス２４４に、注目画素に対応する子レコードのアドレスを書き込むことができる。なお、この書き込みと共に、最後の子レコードのアドレス２２９を、その注目画素に対応する子レコードのアドレスに書き換えればよい。
【００５３】
以上に例示した画像処理装置は、例えば、汎用のコンピュータに上述の各機能モジュールの処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、図１７に示すように、ＣＰＵ１０００等のマイクロプロセッサ、ランダムアクセスメモリ（ＲＡＭ）１００２およびリードオンリメモリ（ＲＯＭ）１００４等のメモリ（一次記憶）、ＨＤＤ（ハードディスクドライブ）１００６を制御するＨＤＤコントローラ１００８、各種Ｉ／Ｏ（入出力）インタフェース１０１０、ローカルエリアネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース１０１２等が、たとえばバス１０１４を介して接続された回路構成を有する。また、そのバス１０１４に対し、例えばＩ／Ｏインタフェース１０１０経由で、ＣＤやＤＶＤなどの可搬型ディスク記録媒体に対する読み取り及び／又は書き込みのためのディスクドライブ１０１６、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び／又は書き込みのためのメモリリーダライタ１０１８、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがＣＤやＤＶＤ等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、ＶＰＮルータにインストールされる。固定記憶装置に記憶されたプログラムがＲＡＭ１００２に読み出されＣＰＵ１０００等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。なお、それら機能モジュール群のうちの一部又は全部を、専用ＬＳＩ(Large Scale Integration)、ＡＳＩＣ（Application Specific Integrated Circuit、特定用途向け集積回路）又はＦＰＧＡ（Field Programmable Gate Array）等のハードウエア回路として構成してもよい。
【図面の簡単な説明】
【００５４】
【図１】２値画像の一例を示す図である。
【図２】参照ウインドウの一例を説明するための図である。
【図３】参照ウインドウを用いたラベリングの手順の一例を示すフローチャートである。
【図４】図１に例示した２値画像に対して順方向走査によるラベリング結果を例示する図である。
【図５】実施形態のラベリング処理を行う画像処理装置の一例の機能ブロック図を示す図である。
【図６】記憶部のメモリ空間内にあるラベル管理データのデータ構造の一例を示す図である。
【図７】注目画素に新たなラベルを付与する場合の処理手順の一例を示すフローチャートである。
【図８】注目画素に隣接画素のラベルを付与する場合の処理手順の一例の一部を示すフローチャートである。
【図９】注目画素に隣接画素のラベルを付与する場合の処理手順の一例の残りの部分を示すフローチャートである。
【図１０】異なるラベル同士がリンクされる状況の具体例を示す図である。
【図１１】図１０の状況でのラベル管理情報の内容を示す図である。
【図１２】図１０の状況の後、注目画素にラベルが付与され、異なるラベル同士がリンクされた後のラベル管理情報の内容を示す図である。
【図１３】ラベル統合部の処理手順の一例を示すフローチャートである。
【図１４】ラベル統合部の処理の一部分である画素探索処理の手順の例を示すフローチャートである。
【図１５】変形例における親レコードのデータ構造を示す図である。
【図１６】別の変形例における親レコードのデータ構造を示す図である。
【図１７】コンピュータのハードウエア構成の一例を示す図である。
【符号の説明】
【００５５】
１０  演算部、１２  ラベリング部、１４  ラベル統合部、２０  記憶部、２２  対象の画像データ、２４  ラベル値データ、２６  ラベル管理データ。
【図１】
0004720805.tif 000002
【図３】
0004720805.tif 000003
【図４】
0004720805.tif 000004
【図５】
0004720805.tif 000005
【図６】
0004720805.tif 000006
【図７】
0004720805.tif 000007
【図８】
0004720805.tif 000008
【図９】
0004720805.tif 000009
【図１１】
0004720805.tif 000010
【図１２】
0004720805.tif 000011
【図１３】
0004720805.tif 000012
【図１４】
0004720805.tif 000013
【図１５】
0004720805.tif 000014
【図１６】
0004720805.tif 000015
【図１７】
0004720805.tif 000016
【図２】
0004720805.tif 000017
【図１０】
0004720805.tif 000018