説明

画像処理装置および画像処理方法

【課題】画像データに含まれるランの数がメモリに格納可能なランの数を超過する場合であっても符号化されたランの情報を適切に保存する。
【解決手段】初期化処理部32は、メモリ31を初期化し、各ランの符号化情報を格納するためのランデータ構造と、符号化情報を格納可能なランの最大値とを設定する。ランデータ構造には、符号化情報を格納するランと同じクラスのランのうちラスタ走査方向の最上流側に位置するランを記憶する帰属元ランフィールドと、上記ランの画像種別を記憶する画像種別フィールドと、上記ランの長さを記憶するランレングスフィールドとを設け、画像種別をデフォルト値に設定しておく。ランレングス符号化処理部33は、符号化したランの数がメモリ31に格納可能なランの数の最大値より1つ小さい値に達すると、残りの画素をデフォルト値に対応する画像種別の単一のランとみなして符号化し、符号化処理を終了する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画素の連結領域にラベルを付けて各連結領域を分類するラベリング処理を行う画像処理装置および画像処理方法に関するものである。
【背景技術】
【0002】
従来より、画像データに対する処理を領域毎に区別して行って処理の効率化を図ったり、画像データのデータサイズを小さしたりするために、画像上の画素の集合(連結領域)毎に番号(ラベル)をつけることで画素を分類するラベリング処理が知られている。ラベリング処理によって分類された各領域は、例えば、領域特性を決定するため、領域が属するオブジェクトの分類を識別するため、あるいは領域毎に特定の処理を適用するために、各領域に応じた所定の処理を施される。典型的な処理としては、例えば、領域内の全要素に対して領域固有のフィルタを用いてフィルタリングを行う処理が挙げられる。
【0003】
連結要素を領域に分類する処理は連結成分ラベリング(connected component labeling)と呼ばれる。また、そのようなアルゴリズムは、連結成分アルゴリズム(connected-component algorithms)と呼ばれる。
【0004】
例えば、特許文献1には、MH符号化された画像データを復号することによりランを生成し、先行するランと当該ランとの連結を調べ、連結しているときは先行するランに割り当てられたラベルと同一のラベルを当該ランに割り付け、ラベルの割り付けられた当該ランが異なるラベルの他の複数のランと連結しているとき、それらラベル間にリンクを張ることにより連結している複数のランを統合して1つの連結成分を切り出す技術が開示されている。なお、特許文献1の技術では、各ランの始点座標(x,y)と、各ランの長さと、各ランのラベルとがランテーブルに格納される。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平8−111782号公報(平成8年4月30日公開)
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上記特許文献1の技術には、符号化されるランの数がメモリに格納可能なランの数を超過する場合に、既に符号化したランの情報が上書きされ、必要な情報が失われてしまうという問題がある。
【0007】
本発明は、上記の課題に鑑みてなされたものであり、その目的は、画像データをランレングス符号化する際、画像データに含まれるランの数がメモリに格納可能なランの数を超過する場合であっても符号化されたランの情報を適切に保存することができる画像処理装置および画像処理方法を提供することにある。
【課題を解決するための手段】
【0008】
本発明の画像処理装置は、上記の課題を解決するために、画像データにおける各画素の画像種別を示す情報であるクラスマップデータから、同じ画像種別に属する画素であって上記画像データの走査ライン方向に隣接する画素の集合であるランを抽出し、各ランのラスタ走査方向に沿った順序と各ランの画素数とに基づいて上記クラスマップデータを符号化するランレングス符号化処理部と、符号化した符号化データを格納する記憶手段とを備えた画像処理装置であって、符号化に先立って上記記憶手段を初期化する初期化処理部を備え、上記初期化処理部は、各ランについての符号化結果を示す符号化情報を格納するためのランデータ構造を設定して上記記憶手段に記憶させるとともに、上記記憶手段に符号化結果を格納可能なランの数の最大値を設定し、上記ランデータ構造に、当該ランデータ構造に符号化情報を格納するランである格納対象ランと同じ画像種別に属するランのうちラスタ走査方向の最上流側に位置するランである帰属元ランを示す帰属元情報を記憶する帰属元ランフィールドと、上記格納対象ランの画像種別を示す画像種別情報を記憶する画像種別フィールドと、上記格納対象ランの長さを示すランレングス情報を記憶するランレングスフィールドとを設け、上記画像種別情報を予め設定されたデフォルト値に設定し、上記ランレングス符号化処理部は、上記画像データのラスタ走査方向に沿って注目画素を1画素ずつ順次移動させながら今回の注目画素の画像種別と前回の注目画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別の画素であって走査ライン方向に隣接する画素の集合であるランを抽出し、抽出した上記ランに含まれる各画素の画像種別を示す情報を当該ランの画像種別情報として検出する処理と、抽出した上記ランの画素数を当該ランのランレングス情報として検出する処理と、今回の注目画素の画像種別と当該注目画素が属する走査ラインに対してラスタ走査方向の上流側に隣接する走査ラインの画素であって当該注目画素に隣接する画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別のランであって異なる走査ライン間で隣接するランの集合からなる連結領域を抽出し、抽出した連結領域に属するランのうちラスタ走査方向の最上流側に位置するランを示す情報を当該連結領域に属する各ランの帰属元情報として検出する処理と、上記ランデータ構造における帰属元ランフィールド、画像種別フィールド、およびランレングスフィールドに格納されている情報を、各ランについて検出した帰属元情報、画像種別情報、およびランレングス情報に基づいて更新する処理をラン毎に行うことで各ランについての符号化情報を生成する処理とを行い、符号化情報を生成したランの数が上記最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない残りの画素数に更新し、画像種別情報については上記デフォルト値のままにすることによって生成し、符号化処理を終了する。
【0009】
また、本発明の画像処理方法は、画像データにおける各画素の画像種別を示す情報であるクラスマップデータから同じ画像種別に属する画素であって上記画像データの走査ライン方向に隣接する画素の集合であるランを抽出し、各ランのラスタ走査方向に沿った順序と各ランの画素数とに基づいて上記クラスマップデータを符号化するランレングス符号工程と、符号化したデータを記憶手段に格納する記憶工程とを含む画像処理方法であって、符号化処理工程に先立って上記記憶手段を初期化する初期化処理工程を含み、上記初期化処理工程では、各ランについての符号化結果を示す符号化情報を格納するためのランデータ構造を設定して上記記憶手段に記憶させるとともに、上記記憶手段に符号化結果を格納可能なランの数の最大値を設定し、上記ランデータ構造に、当該ランデータ構造に符号化情報を格納するランである格納対象ランと同じ画像種別に属するランのうちラスタ走査方向の最上流側に位置するランである帰属元ランを示す帰属元情報を記憶する帰属元ランフィールドと、上記格納対象ランの画像種別を示す画像種別情報を記憶する画像種別フィールドと、上記格納対象ランの長さを示すランレングス情報を記憶するランレングスフィールドとを設け、上記画像種別情報を予め設定されたデフォルト値に設定し、上記ランレングス符号化処理工程では、上記画像データのラスタ走査方向に沿って注目画素を1画素ずつ順次移動させながら今回の注目画素の画像種別と前回の注目画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別の画素であって走査ライン方向に隣接する画素の集合であるランを抽出し、抽出した上記ランに含まれる各画素の画像種別を示す情報を当該ランの画像種別情報として検出する処理と、抽出した上記ランの画素数を当該ランのランレングス情報として検出する処理と、今回の注目画素の画像種別と当該注目画素が属する走査ラインに対してラスタ走査方向の上流側に隣接する走査ラインの画素であって当該注目画素に隣接する画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別のランであって異なる走査ライン間で隣接するランの集合からなる連結領域を抽出し、抽出した連結領域に属するランのうちラスタ走査方向の最上流側に位置するランを示す情報を当該連結領域に属する各ランの帰属元情報として検出する処理と、上記ランデータ構造における帰属元ランフィールド、画像種別フィールド、およびランレングスフィールドに格納されている情報を、各ランについて検出した帰属元情報、画像種別情報、およびランレングス情報に基づいて更新する処理をラン毎に行うことで各ランについての符号化情報を生成する処理とを行い、符号化情報を生成したランの数が上記最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない残りの画素数に更新し、画像種別情報については上記デフォルト値のままにすることによって生成し、符号化処理を終了する。
【0010】
上記の構成によれば、初期化処理において、各ランについての符号化結果を示す符号化情報を格納するためのランデータ構造を設定して上記記憶手段に記憶させるとともに、上記記憶手段に符号化結果を格納可能なランの数の最大値を設定し、上記ランデータ構造に、当該ランデータ構造に符号化情報を格納するランである格納対象ランと同じ画像種別に属するランのうちラスタ走査方向の最上流側に位置するランである帰属元ランを示す帰属元情報を記憶する帰属元ランフィールドと、上記格納対象ランの画像種別を示す画像種別情報を記憶する画像種別フィールドと、上記格納対象ランの長さを示すランレングス情報を記憶するランレングスフィールドとを設け、上記画像種別情報を予め設定されたデフォルト値に設定する。
【0011】
また、ランレングス符号化処理において、上記画像データのラスタ走査方向に沿って注目画素を1画素ずつ順次移動させながら今回の注目画素の画像種別と前回の注目画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別の画素であって走査ライン方向に隣接する画素の集合であるランを抽出し、抽出した上記ランに含まれる各画素の画像種別を示す情報を当該ランの画像種別情報として検出する処理と、抽出した上記ランの画素数を当該ランのランレングス情報として検出する処理と、今回の注目画素の画像種別と当該注目画素が属する走査ラインに対してラスタ走査方向の上流側に隣接する走査ラインの画素であって当該注目画素に隣接する画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別のランであって異なる走査ライン間で隣接するランの集合からなる連結領域を抽出し、抽出した連結領域に属するランのうちラスタ走査方向の最上流側に位置するランを示す情報を当該連結領域に属する各ランの帰属元情報として検出する処理と、上記ランデータ構造における帰属元ランフィールド、画像種別フィールド、およびランレングスフィールドに格納されている情報を、各ランについて検出した帰属元情報、画像種別情報、およびランレングス情報に基づいて更新する処理をラン毎に行うことで各ランについての符号化情報を生成する処理とを行う。
【0012】
そして、符号化情報を生成したランの数が上記最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない残りの画素数に更新し、画像種別情報については上記デフォルト値のままにすることによって生成し、符号化処理を終了する。
【0013】
これにより、画像データをランレングス符号化する際、画像データに含まれるランの数がメモリに格納可能なランの数を超過する場合であっても符号化済みのランの符号化情報が上書きされるなどして失われることを確実に防止することができる。
【0014】
また、上記初期化処理部は、上記記憶手段に格納可能な1走査ラインあたりのランの数の最大値であるライン最大値を設定し、上記ランレングス符号化処理部は、各走査ラインについて、符号化情報を生成したランの数が上記ライン最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない当該走査ラインについての残りの画素数に更新し、画像種別については上記デフォルト値のままにすることによって生成し、当該走査ラインについての符号化処理を終了する構成であってもよい。
【0015】
上記の構成によれば、画像データをランレングス符号化する際、画像データの各ラインに含まれるランの数がメモリに格納可能な1ラインあたりのランの数を超過する場合であっても符号化済みのランの符号化情報が上書きされるなどして失われることを確実に防止することができる。
【0016】
また、上記初期化処理部は、上記ランデータ構造を走査ライン毎に生成し、上記ランレングス符号化処理部は、各ランの符号化情報を当該ランが属する走査ラインに対応する上記ランデータ構造を用いて生成する構成としてもよい。
【0017】
上記の構成によれば、画像種別情報についてのデフォルト値を走査ライン毎に設定できる。これにより、画像データの末尾のランをデフォルト値に符号化する場合であっても、これら各ランの画像種別を実際の画像データに近づけることができる。
【0018】
また、上記初期化処理部は、初期化時に上記画像種別情報として設定する上記デフォルト値を、上記画像データにおける背景領域を示す値に設定する構成としてもよい。
【0019】
上記の構成によれば、一般に画像データにおける末尾部分の画像は背景画像であることが多いので、画像データの末尾のランをデフォルト値に符号化する場合であっても、これら各ランの画像種別を画像データにおける背景領域に設定することにより、実際の画像データにより近づけることができる。
【発明の効果】
【0020】
以上のように、本発明の画像処理装置および画像処理方法は、符号化情報を生成したランの数が上記最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない残りの画素数に更新し、画像種別情報については上記デフォルト値のままにすることによって生成し、符号化処理を終了する。
【0021】
これにより、画像データをランレングス符号化する際、画像データに含まれるランの数がメモリに格納可能なランの数を超過する場合であっても符号化済みのランの符号化情報が上書きされるなどして失われることを確実に防止することができる。
【図面の簡単な説明】
【0022】
【図1】クラスマップの一例を示す説明図である。
【図2】図1に示したクラスマップの変形例を示す説明図である。
【図3】ランレングス符号化されたクラスマップの一例を示す説明図である。
【図4】図3に示したクラスマップにおける各ランの連結性を示す連結性グラフである。
【図5】本発明の一実施形態にかかる画像処理装置におけるラベリング処理の流れを示すフローチャートである。
【図6】クラスマップの一例を示す説明図である。
【図7】図7に示したクラスマップの連結性グラフの一例である。
【図8】図6に示したクラスマップの第1ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図9】図6に示したクラスマップの第2ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図10】図6に示したクラスマップの第3ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図11】図6に示したクラスマップの第4ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図12】図6に示したクラスマップの第5ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図13】図6に示したクラスマップの第6ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図14】図6に示したクラスマップの第7ラインをラベリング処理する際の連結性グラフであり、(a)は灰色のクラスに属するラン、(b)は白色のクラスに属するランの連結性を示している。
【図15】図5に示したフローチャートの変形例である。
【図16】図5に示したフローチャートの変形例である。
【図17】図5に示したフローチャートの変形例である。
【図18】本発明の一実施形態にかかる画像処理装置におけるラベリング処理の流れを示すフローチャートである。
【図19】本発明の一実施形態にかかる画像処理装置におけるランレングス符号化処理の流れを示すフローチャートである。
【図20】図6に示したクラスマップに対する処理を説明するための説明図である。
【図21】図6に示したクラスマップに対する処理を説明するための説明図である。
【図22】本発明の一実施形態における初期化処理をコンピュータに実行させるためのコードの一例である。
【図23】本発明の一実施形態におけるランレングス符号化処理および隣接ラン統合処理をコンピュータに実行させるためのコードの一例である。
【図24】本発明の一実施形態におけるランレングス符号化処理および隣接ラン統合処理をコンピュータに実行させるためのコードの他の例である。
【図25】本発明の一実施形態におけるラベリング結果の一例を示す表である。
【図26】本発明の一実施形態における圧縮処理をコンピュータに実行させるためのコードの例である。
【図27】本発明の一実施形態におけるラベリング結果の他の例を示す表である。
【図28】本発明の一実施形態におけるランレングスデータ構造をインデックス化する処理をコンピュータに実行させるためのコードの例である。
【図29】本発明の一実施形態におけるラベル画像の生成処理をコンピュータに実行させるためのコードの例である。
【図30】本発明の一実施形態にかかる画像処理装置の概略構成を示すブロック図である。
【図31】図30に示した画像処理装置におけるメモリの初期化処理を説明するための説明図である。
【発明を実施するための形態】
【0023】
本発明の一実施形態について説明する。なお、説明の便宜上、同様の機能を有する部材については同じ符号を付してその説明を省略する場合がある。
【0024】
図30は、本実施形態にかかる画像処理装置30の概略構成を示すブロック図である。なお、この画像処理装置30は、例えば画像読取装置、画像形成装置、画像送信装置、画像記録装置、あるいは複合機などに備えられるものであってもよく、これらの装置に通信可能に接続されるものであってもよい。
【0025】
図30に示したように、画像処理装置30は、メモリ(記憶手段)31、初期化処理部32、ランレングス符号化処理部(RLE処理部)33、連結パス圧縮部34、ラベル圧縮部35を備えている。
【0026】
図5は、画像処理装置30における処理の流れを概略的に示したフローチャートである。
【0027】
図5に示すように、まず、初期化処理部32が、画像処理装置30に入力されるクラスマップ(クラスマップデータ)のランレングス符号化処理を開始する前に、メモリ31の初期化処理を行う(S80)。
【0028】
クラスマップとは、画像データに含まれる各要素(典型的には各画素)を当該各要素の画像種別(クラス)毎に分類したデータである。なお、画像処理装置30に入力されるクラスマップは、各要素の種別(クラス)を判別できるものであればよく、そのデータ形式は特に限定されるものではない。また、クラスマップは、画像処理装置30が備えられる画像読取装置、画像形成装置、画像送信装置、画像記録装置、あるいは複合機における他の処理ブロックから画像処理装置30に入力されてもよく、画像処理装置30に対して通信可能に接続される外部装置から画像処理装置30に送信されてもよい。また、画像処理装置30に着脱可能に装着される記録媒体から画像処理装置30が読み出すようにしてもよい。
【0029】
図1は、典型的なクラスマップの一例を示す説明図である。図1では、同じ要素タイプに分類される各要素を同様の模様で示している。具体的には、図1に示したクラスマップ2には、6つの領域4、6、8、10、12、14が含まれており、これら6つの領域に属する要素が5つの異なるクラスに分類されている。つまり、領域10内の要素と領域12内の要素とは同一のクラスに属する。
【0030】
クラスマップの一例としては、画像要素を文字領域、写真領域、および網点領域に分類する領域分離システムによる処理結果が挙げられる。また、クラスマップの他の例としては、空(sky)と地表(grass)のように、画像中の被写体等のオブジェクトを分類するシステムの処理結果が挙げられる。当業者であれば、画像処理アプリケーションにおいて多様なタイプのクラスマップが生じ得ることを容易に理解できるであろう。
【0031】
連結成分ラベリングアルゴリズムは、同じラベルを有する複数の隣接要素を成分としてグループ化する。また、各成分に属する要素同士に同じ処理が適用されるように、各成分に固有のラベルを割り当てる。
【0032】
図2は、クラスマップの他の例を示す説明図である。この図に示すクラスマップ20に含まれる領域22、24、26、28、30、32は、それぞれ図1のクラスマップ2における領域4、10、8、6、12、14に対応している。ただし。図1では同じクラスに属する領域10,12に対して同じラベルが割付けられていたのに対して、図2では領域24,30に別々の固有のラベルが割り当てられている。
【0033】
初期化処理部32によって初期化処理が行われた後、ランレングス符号化処理部33が、ランレングス符号化(RLE)/隣接ラン統合処理を行い(S82)、処理結果(符号化データ)をメモリ31に格納する。すなわち、ランレングス符号化処理部33は、画像処理装置30に入力されるクラスマップに対してランレングス符号化処理をラスタ方向に沿って順次行うとともに、同じクラスに属し、かつ互いに隣接するラン同士を関連付ける統合処理を行う。なお、ランとは、同じクラスに属し、かつライン(走査ライン)の延伸方向(走査ライン方向)に隣接する画素同士を連結した連結成分である。また、クラスの種類としては、例えば、テキスト、局所背景、ページ背景、絵図、線図などが挙げられる。
【0034】
なお、ランレングス符号化のアルゴリズムは特に限定されるものではなく、例えば、特定の演算装置に適応するように最適化されたものであってもよい。また、各成分を構成する要素の連結関係を検出してキャッシュに入れる処理を行うための最適な構成になるように連結成分アルゴリズムを構成してもよい。なお、成分の複合的な形状や大面積の成分を考慮することの必要性により、要素同士の連結性を効率的に検出するためのアルゴリズムの設計は複雑になる場合もある。
【0035】
また、ランレングス符号化の方法には、連結成分に対するラベリングを反復的に行う反復法、連結成分に対するラベリングを再帰的に行う再帰法、および反復法と再帰法という2つの基本的な方法を組み合わせたハイブリッド連結成分ラベリング法(ハイブリッド法)がある。
【0036】
反復法では、開始画素から追加の画素が当該領域(成分)に加えられなくなるまで、すなわち当該領域の成長が終わるまで、クラスマップ内全体に渡って同じラベル(インデックス)が反復的に付与される。この方法では、データ全体に対する反復回数が連結領域に属する要素の数と等しくなるので、演算の負荷が大きくなる。ただし、反復法では、メモリ使用量およびアクセスパターンを予測可能である。
【0037】
再帰法では、ラベリングされていない要素からラベリング処理を開始する。この方法では、ラベリング処理対象の要素に隣接する隣接要素、およびこの隣接要素に隣接する要素を再帰的に調べる。上記の再帰を、スタック構成(stack construct)を用いて行ってもよい。連結している隣接要素をスタックから抽出して調べたり、連結している隣接要素をスタックに加えたりする処理をスタックが空になるまで行う。再帰法は、反復法に比べて演算負荷を低減できる。ただし、メモリ使用量が画像データに応じて異なり、アクセスパターンがランダムであるので、メモリ使用量およびアクセスパターンを予測することは困難である。
【0038】
ハイブリッド法では、メモリアクセスパターンを簡単な処理で概略的に予測することができる。第1の処理では、単純な凸位相(convex topologies)の成分を1つの領域にグループ化するが、より複雑な位相の成分はさらに複数の副成分に分割される。これら各副成分は後に統合される。ハイブリッド法では、分割された副成分を統合するために、これら各副成分の連結性を再帰的に追跡する。ハイブリッド法を用いる場合には有限併合再帰(bounded merge recursion)を行うことがより好ましい。
【0039】
ハイブリッド法は2つのステップを含む。第1のステップでは、各要素を隣接する連結要素とリンクさせたサブグラフを構築する。第2のステップでは、各サブグラフを識別するためにサブグラフを連結させたグラフの頂点を解析する。なお、連結された各サブグラフは連結成分を構成する。
【0040】
ハイブリッド法によって生成されるグラフは、各要素(基本要素)に対応する頂点を有しており、同じクラスタイプを有する隣接する頂点同士はリンクされている。上記要素は、典型的には画素(ピクセル)である。このグラフデータ構造は、連結成分にラベリングを行うためのメモリおよび演算処理という観点からは必ずしも最適ではない。なお、グラフ構造を解析する前に同様のクラスタイプを有する複数の要素をグループ化することによって上記処理を簡略化してもよい。ラスタ形式の画像では、ラスタラインに沿って連結された同じクラスに属する複数の画素(ラン)は単一の頂点にグループ化されメモリ内において同一の位置に配置される。このグループ化により、グラフ内の頂点の数およびリンクの数を低減できる。複数のラインの読み出しおよびラインを横断したグループ化を行う構成ではそれによってさらなる利点を得ることができる。
【0041】
ランレングス符号化(RLE)/隣接ラン統合処理において、クラスマップをランレングス符号化(RLE)してRLEマップを形成するステップと、同じクラスに属する隣接し合う複数のランを統合した統合RLEマップを形成し、統合RLEマップから領域情報を抽出するステップの2つのステップを行うようにしてもよい。この場合、画像中の各クラスに対して固有のラベルを割り当てたクラスマップは、同一ライン内における同じクラスのラベルを有する画素を連結してランレングス符号化される。また、RLEマップ内においてラインをまたがって連結されたランを抽出することによって領域特性が検出される。
【0042】
図3はクラスマップの一例を示す説明図である。この図に示すクラスマップ38は、R0〜R11で示される12個のランを含む4つのラインを含んでいる。また、クラスマップ38は2つのクラス、すなわち白いブロックで示されたランR0,R2,R4,R6,およびR9を含むクラスと、灰色のブロックで示されたランR1,R3,R5,R7,R8,R10,およびR11を含むクラスとを有している。
【0043】
図4は、図3に示したクラスマップ38における灰色のクラスに属するランの連結性を示すグラフ(連結性グラフ)60を示している。グラフ60は、ラン62,64,68,70,72,および74(ランR1,R3,R5,R7,R8,R10,およびR11)の各頂点の連結関係と、隣接性を示すリンク63,65,67,69,71,および73を示している。この図に示したように、頂点間の経路長は各要素間で大幅に異なる場合がある。このため、データから算出される経路長によっては、メモリおよび演算処理のアルゴリズムを実際の装置に適用すると必要なメモリ容量が大きくなったり、装置構成が複雑になったりする場合がある。
【0044】
本実施形態では、ランレングス符号化されたデータを格納するメモリ31として、固定サイズのメモリ(メモリバッファ)を用いる。なお、このメモリ31には、後述するように、入力データに依存しない所定の最大実行経路長(maximum execution path lengths)を有するデータが格納される。つまり、本実施形態では、メモリ31に格納するデータの最大実行経路長およびメモリ31の設置面積(memory footprint)を固定値とする。したがって、本実施形態は、ASIC(Application Specific Integrated Circuit;特定用途向け集積回路)やSIMD(single-instruction multiple-data-pathD)DSP(digital signal processing)への実装に特に適している。
【0045】
なお、メモリ31に格納されるデータのデータ構造は、クラスマップの列数および行数に関連付けられてもよい。また、上記データ構造は、符号化されたランに関連付けられてもよい。また、このランに関連付けられたデータ構造であるランデータ構造は、各ランに関連付けられたパラメータ、例えば、各ランの帰属元ラン(親ラン)、各ランの属するクラス、各ランのランレングス(ランの長さ)などのパラメータを含んでいてもよい。また、このランデータ構造は、所定の最大ラン数に達するまでは各ランを関連付けて記憶し、各ランにラン番号インデックスを付与することによって各ランを識別するものであってもよい。また、所定の最大ラン数に達した後は残りのランを、デフォルトクラス(例えば背景領域のクラス)に属する単一のランとして記憶させるようにしてもよい。
【0046】
また、上記ランデータ構造を、クラスマップにおける各ラインのスターティングラン(符号化開始ラン)、すなわちラスタ方向の最上位(最上流側)に位置するランに関連付けてもよい。例えば、上記ランデータ構造における各ラインをスターティングランに関連付けたスターティングランデータ構造において、クラスマップにおける各ラインに対応するランデータ構造内に、当該ラインにおけるスターティングランを示すメモリ参照情報(memory reference)を記憶させてもよい。また、スターティングラン構造は、各ラインに関連付けて記憶されるものであってもよく、ライン番号のインデックスによって識別されるものであってもよい。
【0047】
また、処理対象のライン(走査線)のクラスマップデータを記憶する入力クラスマップバッファを用いてもよい。また、処理対象のライン(走査線)に対する連結成分ラベルの付与結果を記憶する連結成分ラベル出力バッファを用いてもよい。また、上記データ構造を、演算装置に近接する位置に配置されるローカルバッファ内に格納してもよい。
【0048】
上記データ構造内の一部のパラメータは、入力データ毎に異なってもよい。また、その他のパラメータは、連結成分アルゴリズムを実現するためのシステムに固有のものであってもよい。また、クラスマップパラメータは、システムアプリケーションに応じて決定されてもよい。
【0049】
一般に、複合機(multi-function peripheral; MFP)等の典型的なアプリケーションでは、走査解像度は固定値の中から選択される。上記の各パラメータを上記固定値の最大値に対応するように設定することにより、大部分のデータ構造に要求される最低限の要件が決定される。残りのパラメータは、入力クラスマップデータに応じて算出されるランの数によって決定される。
【0050】
オンチップキャッシュまたは内部バッファの容量は有限であり、メモリ31に格納可能なランの数は、符号化されるランの数が内部バッファの容量の上限を超えないように制限される。ランの最大数は、例えばシステムのコストと、処理される入力データの複雑さとのバランスを考慮して決定される。
【0051】
各ランがデフォルトクラスに属するものとして符号化した入力クラスマップのライン数と同数のラン(スターティングラン)をランデータ構造の端部に予め生成しておき、その後それらのランを上書きするようにしてもよい。
【0052】
ランレングス符号化処理部33によってランレングス符号化(RLE)/隣接ラン統合処理が行われた後、連結パス圧縮部34が、上記統合処理によって統合された各ランの連結関係を示す連結情報(帰属元ラベル)を圧縮する連結パス圧縮処理を行う(S84)。
【0053】
その後、ラベル圧縮部35が、上記統合処理によっての統合された各成分(同じクラスに属し、互いに隣接するランの集合)に対して成分毎に共通のラベルを付与しなおすラベル圧縮処理を行う(S86)。
【0054】
次に、画像処理装置30における初期化処理およびランレングス符号化/隣接ラン統合処理について、図18を参照しながらより詳細に説明する。図18は初期化処理およびランレングス符号化/隣接ラン統合処理流れを示すフローチャートである。
【0055】
上述したように、まず、初期化処理部32が、画像処理装置30に入力されるクラスマップ(クラスマップデータ)のランレングス符号化処理を開始する前に、メモリ31の初期化処理を行う(S310)。
【0056】
図31は、初期化処理を説明するための説明図である。なお、図31は、クラスマップのライン数が100であり、付与可能なラベル数(格納可能なランの数)が1000個である場合の例を示している。
【0057】
初期化処理部32は、画像処理装置30に入力されたクラスマップを参照し、メモリ31内にクラスマップにおける縦方向のライン数(0〜99)に応じた数のスターティングランデータ(スターティングラン構造)と、メモリに格納可能な最大ラン数に応じたランデータ構造を生成する。各ランデータ構造は、当該ランデータ構造に符号化情報を格納するランである格納対象ランのラン番号(ラベル;ランインデックス、0〜999)を格納するための格納対象ランフィールド、上記格納対象ランの帰属元ランを示す帰属元情報(帰属元ラベル)を格納(記憶)するための帰属元ランフィールド、上記格納対象ランが属するクラス(画像種別)を示す画像種別情報を格納するための画像種別フィールド、および上記格納対象ランの長さ(ランレングス)を示すランレングス情報を格納するためのランレングスフィールドを有している。
【0058】
帰属元ランとは、同じクラスに属する連結された複数のランのうちラスタ方向の最上位(最上流側)に位置するランである。帰属元ランを示すパラメータとしては例えば帰属元ランのラン番号(ランインデックス)を用いることができる。このラン番号は、例えばラスタ方向の位置に応じて各ランに順次付与すればよい。
【0059】
なお、初期化処理時には、例えば、スターティングランデータの数を画像データのライン数(クラスマップにおける画像領域の縦方向のサイズ)と同数に設定し、各ランデータ構造における帰属元ランのラベルを当該ランデータ構造に対応する格納対象ランのラベルに設定し、格納対象ランが属するクラスをデフォルトクラス(例えば、当該ランデータ構造に対応するラインのスターティングランの属するクラス、あるいはクラスマップにおける背景領域のクラス)に設定し、ランレングスを画像データにおけるラインの延伸方向の画素数(クラスマップにおける画像領域の横方向の画素数)mに設定する。
【0060】
図22は、初期化処理をコンピュータに実行させるための典型的な中間コードの例を示している。図22において、StartingRunはスターティングランデータ構造であり、Class、ParentLabel、およびRunLengthはランデータ構造のフィールド(クラス、帰属元ラベル、およびランレングス)であり、NumberRunLimitはメモリに格納可能な最大ラン数であり、default class valueは各ランのクラスを示すパラメータのデフォルト値であるデフォルトクラスを示し、Number of RowsおよびNumber of Columnsは、クラスマップの行数(ライン数)および列数(1ラインの画素数)を示している。
【0061】
デフォルトクラスの値は、各ランデータ構造に対応するスターティングランのクラスを示す値に設定してもよい。あるいは、画素が背景画像(背景領域)に属しているか否かが入力クラスマップによって示される場合、デフォルトクラスの値は背景画像を示すクラスの値であってもよい。その場合、初期化処理時には、各ランデータ構造は、出力画像全体が背景画像であることを示す状態になる。そして、初期化処理の後、クラスマップの符号化を開始したときには、ランレングス符号化/隣接ラン統合処理の結果に応じてこれら各パラメータの初期値が上書きされることになる。
【0062】
メモリ31のデータ構造の初期化処理(S310)の後、ランレングス符号化処理部33は、まず、クラスマップの第1ラインのランレングス符号化を行う(S312)。
【0063】
図19は、第1ラインのランレングス符号化処理の流れを示すフローチャートである。
【0064】
まず、クラスマップ内の第1ラインを入力バッファ(図示せず)に入力し、注目要素を当該ラインにおける第1要素、すなわちラスタ方向の最上流側の要素に設定する(S380)。
【0065】
初期化したデータにおける第1ラインの第1ラン(スターティングラン)InitRunを抽出してキャッシュし(S382)、次のラン(上書き後のラン)NextRunのラン番号を設定する(S384)。
【0066】
次に、上記第1ランInitRunと次のランNextRunとを比較し(S386)、RLE/隣接ラン統合処理を終了して連結パス処理を開始するか(387)、あるいはRLE/隣接ラン統合処理を継続するか(360)を判断する。
【0067】
例えば、未符号化処理のランの数が、クラスマップにおける未符号化処理の各ランをデフォルトクラスに設定することしかできない数になった場合に符号化を終了する。より具体的には、例えば図31に示したデータ構造の場合、ラン番号998(格納可能なランのラン番号の最大値−1)に対するRLE/隣接ラン統合処理が行われようとする段階で次のランに対するラベル付けは不可であると判断し、ラン番号998に対してはデフォルトクラスに対応するパラメータを付与し、ラン番号998のランレングスをRLE/隣接ラン統合処理を行っていない残りの要素の数に設定して符号化処理を終了する。
【0068】
RLE/隣接ラン統合処理を継続する場合には、注目要素が属するラン(注目ラン)のパラメータを設定する(S390)。例えば、帰属元ランを注目ラン自身に設定し、クラスを注目要素のクラスに設定し、ランレングスをゼロ(要素数1に対応)に設定する。
【0069】
その後、上記の注目要素が第1ラインの最終要素であるかを判定する(S392)。そして、最後の要素である場合(393)、第1ラインのランレングス符号化を終了する(S404)。
【0070】
最後の要素ではない場合(394)、注目要素をラスタ順に沿った次の要素に変更する(S396)。そして、この新たな注目要素のクラスが処理中のランのクラス(前回の注目要素のクラス)と同一であるかを判断する(S398)。
【0071】
そして、同一である場合(400)、処理中のランのランレングスをインクリメントし(S402)、S392の処理に戻る。一方、同一ではない場合(399)、S384に戻る。
【0072】
第1ラインのランレングス符号化(S312)を行った後、ランレングス符号化処理部33は、クラスマップの最後のラインに対する処理を行ったか否かを判定する(S314)。そして、最後のラインに対する処理を行ったと判断した場合(315)、RLE/隣接ラン統合処理を終了し、連結パス圧縮処理を開始する(S360)。
【0073】
一方、最後のラインに対する処理を行っていないと判断した場合(316)、ランレングス符号化処理部33は、クラスマップの次のラインを入力バッファ(図示せず)に入力し、注目要素を当該ラインにおける第1要素、すなわちラスタ方向の最上流側の要素に設定する(S318)。そして、初期化したデータにおける当該ラインの第1ラン(スターティングラン)InitRunを抽出してキャッシュし(S320)、次のラン(上書き後のラン)NextRunのラン番号を設定する(S322)。
【0074】
次に、ランレングス符号化処理部33は、上記第1ランInitRunと次のランNextRunとを比較し(S324)、RLE/隣接ラン統合処理を終了して連結パス処理を開始するか(325)、あるいはRLE/隣接ラン統合処理を継続するか(360)を判断する。例えば、上述したように、未符号化処理のランの数が、クラスマップにおける未符号化処理の各ランをデフォルトクラスに設定することしかできない数になった場合に符号化を終了する。
【0075】
RLE/隣接ラン統合処理を継続する場合(326)、注目要素が属するラン(注目ラン)のパラメータを設定する(S328)。例えば、帰属元ラベルを注目ラン自身に設定し、クラスを注目要素のクラスに設定し、ランレングスをゼロ(要素数1に対応)に設定する。
【0076】
その後、ランレングス符号化処理部33は、注目要素のクラスと、既に符号化したライン(注目ラインの1つ前のライン)における上記注目要素に隣接する要素である隣接要素のクラスとを比較する(S330)。例えば、4連結の場合(上、下、左、右の隣接要素の連結性を考慮する場合)には真上に隣接する要素のみと比較すればよく、8連結の場合(上、下、左、右、左上、右上、左下、右下の隣接要素の連結性を考慮する場合)には左上、真上、および右上に隣接する各要素と比較すればよい。
【0077】
図23は、4連結に基づくRLE/隣接ラン統合処理をコンピュータに実行させるための中間コードの一例を示している。また、図24は、8連結に基づくRLE/隣接ラン統合処理をコンピュータに実行させるための中間コードの一例を示している。
【0078】
連結している隣接要素がない場合(注目要素のクラスと隣接要素のクラスとが異なる場合)(331)、ランレングス符号化処理部33は、上記注目要素が当該ラインの最後の要素であるかを判定する(S334)。最後の要素である場合(335)、S314の処理に戻る。
【0079】
一方、最後の要素ではない場合(336)、ランレングス符号化処理部33は、注目要素をラスタ順に沿った次の要素にする(S338)。そして、この新たな注目要素のクラスが処理中のランのクラス(前回の注目要素のクラス)と同一であるかを判断する(S340)。
【0080】
そして、同一である場合(342)、処理中のランのランレングスをインクリメントし(S344)、S330の処理に戻る。一方、同一ではない場合(341)、S322の処理に戻る。
【0081】
一方、S330において注目要素のクラスと1つ前のラインにおける隣接要素のクラスとが同じであると判断した場合(332)、ランレングス符号化処理部33は、注目要素の帰属元ラン(Current Parent)と、上記隣接要素の帰属元ラン(Adjacent Parent)とを比較する(S346)。
【0082】
そして、注目要素の帰属元ラン(Current Parent)の方が隣接要素の帰属元ラン(Adjacent Parent)よりも連結性ツリー(連結性グラフ)の上位にある場合、すなわちラスタ方向の上流側に位置するランである場合(348)、隣接要素の帰属元ランの帰属元ランを注目要素の帰属元ランに更新する(S350)。さらに、隣接要素が属するランの帰属元ランを注目要素の帰属元ランに更新し(S352)、S334の処理に戻る。
【0083】
一方、注目要素の帰属元ラン(Current Parent)の方が隣接要素の帰属元ラン(Adjacent Parent)よりも連結性ツリー(連結性グラフ)の下位にある場合、すなわちラスタ方向の下流側に位置するランである場合(347)、注目要素の帰属元ランの帰属元ランを隣接要素の帰属元ランに更新する(S351)。さらに、注目要素が属するランの帰属元ランを隣接要素の帰属元ランに更新し(S352)、S334の処理に戻る。
【0084】
次に、図6〜図14を参照しながらRLE/隣接ラン統合処理についてより詳細に説明する。
【0085】
図6は、クラスマップの一例およびこのクラスマップに対するRLE/隣接ラン統合処理の一例を示す説明図である。この図に示すクラスマップ89は、7つのライン(列とみなすこともできる)90〜96と、白と灰色で示した2つのクラスからなるラン101〜130(R1〜R30)とを含んでいる。
【0086】
図7は、図6に示したクラスマップ89における灰色のラン101、103、105、107、109、111、112、114、116、118、119、121、123、125、126、128、および129の連結性を示す連結性グラフ140を示している。連結性グラフ140では、ランは頂点141〜157として示されている。また、連結性グラフ140では、隣接するランはリンク160〜175で連結されている。
【0087】
なお、図7には図6における灰色のクラスに属するランの連結性を示したが、白色のクラスに属するラン102、104、106、108、110、113、115、117、120、122、124、127、130についても同様に連結性グラフを作製することができる。
【0088】
以下の説明では、ランを、「R」および参照ラン番号で示す。例えば、第1のラン101はR1、22番目のラン122はR22と示す。
【0089】
まず、クラスマップ89の第1ライン90をランレングス符号化する。第1ライン90をランレングス符号化した後、2つのラン101(R1)および102(R2)をライン90に関連付ける。また、第1のラン101(R1)を第1クラス(灰色)に関連付け、第2のラン102(R2)を第2クラス(白色)に関連付ける。すなわち、第1のラン101(R1)には第1クラスに対応するラベルを割付け、第2のラン102(R2)には第2クラスに対応するラベルを割付ける。ラン101(R1)および102(R2)に、帰属元ラン(親ラン)として自身を指し示す値を付与する。すなわち、第1のラン101(R1)は、図8(a)のグラフ180に示すように、帰属元ラン(親ラン)として自身を指し示すリンク251を有する頂点201として示される。また、第2のラン102(R2)は、図8(b)のグラフ181に示すように、帰属元ラン(親ラン)として自身を指し示すリンク252を有する頂点202として示される。
【0090】
クラスマップ89の第1ライン90をランレングス符号化した後、第2ライン91の各要素を検証し、第2ラインのランレングス符号化および隣接ラン(連結ラン)の統合を行う。
【0091】
具体的には、第3のラン103(R3)が抽出され、この第3のラン103(R3)の抽出中に前のライン90における隣接するラン101(R1)が連結性を確認するために検証される。ラン103(R3)はラン101(R1)と同じクラスなので、それぞれの帰属元ラン(親ラン)が検出され、ラン101(R1)がラン103(R3)の帰属元ランとして検出される。
【0092】
同様に、第4のラン104(R4)が抽出され、その帰属元ランとしてラン102(R2)が検出される。また、第5のラン105(R5)が抽出され、第5のラン105(R5)に隣接する前のライン90における全てのランは第5のラン105(R5)とは異なるクラスなので、第5のラン105(R5)の帰属元ランはこの時点ではラン105(R5)自身に設定される。また、第6のラン106(R6)が抽出され、その帰属元ランとしてラン102(R2)が検出される。
【0093】
図9(a)および図9(b)は、第2ライン91に対する処理によって抽出された各ランを示している。第3のラン103(R3)は、図9(a)のグラフ182では、帰属元ラン(親ラン)としてランR1(頂点201)を指し示すリンク253を有する頂点203として示されている。第5のラン105(R5)は、図9(a)のグラフ182では、帰属元ラン(親ラン)としてランR5自身を指し示すリンク255を有する頂点205として示されている。第4のラン104(R4)および第6のラン106(R6)は、図9(b)のグラフ183では、それぞれ帰属元ラン(親ラン)としてランR2(頂点202)を指し示すリンク254,256を有する頂点204,206として示されている。
【0094】
クラスマップ89における第2ライン91のランレングス符号化が終わると、第3ライン92の要素を検証し、第3ライン92のランレングス符号化、および隣接ランの統合を行う。第7のラン107(R7)が検出され、この第7のラン107(R7)に隣接するラン103(R3)がこの第7のラン107(R7)と同一クラスに属するので、連結性ツリー(連結性グラフ)における当該クラスの最上位のラン(帰属元ラン)として検出される。本実施形態では、最上位のランは、連結されたランのうちラン番号のもっとも小さいものである。
【0095】
第7のラン107(R7)に隣接する同一クラスのランはラン103(R3)であるが、図6に示すように、連結された同一クラスのランの中にラン103(R3)よりも上位のラン101(R1)が存在するので、第7のラン107(R7)の帰属元ランはラン101(R1)であると判定される(図10(a)参照)。
【0096】
同様に、第8のラン108(R8)および第10のラン10(R10)に隣接する同一クラスのランはラン104(R4)であるが、図6に示すように、連結された同一クラスのランの中にラン104(R4)よりも上位のラン102(R2)が存在するので、第8のラン108(R8)および第10のラン10(R10)の帰属元ランはラン102(R2)であると判定される(図10(b)参照)。
【0097】
第9のラン109(R9)は自身がその帰属元として検出され、ラン111(R11)の帰属元ランとしてはラン105(R5)が検出される(図10(a)参照)。
【0098】
図10(a)および図10(b)に示されているグラフ184,185は、第3ライン92に対する処理で検出されるランとそれに連結されるランとの関係を示している。頂点201〜211は帰属元ランに関連付けられたランを示しており、リンク251〜261は各ランの連結関係を示している。
【0099】
図11(a)および図11(b)に示されているグラフ186,187は、第4ライン93に対する処理で検出されるランとそれに連結されるランとの関係を示している。これら各図における頂点201〜218はラン101〜118(R1〜R18)に対応しており、リンク251〜268は上記各ランの連結関係を示している。
【0100】
図12(a)および図12(b)に示されているグラフ188,189は、第5ライン94に対する処理で検出されるランとそれに連結されるランとの関係を示している。これら各図における頂点201〜225はラン101〜125(R1〜R25)に対応しており、リンク251〜275は上記各ランの連結関係を示している。なお、ラン124(R24)に対する処理を行う際、初期段階として、このラン124(R24)内の要素はラン115(R15)に隣接しており、帰属元ランはラン102(R2)であると判定される。次に、このラン124(R24)に隣接する第3ライン92のラン117(R17)について、第3ライン92に対する処理を完了した時点ではその帰属元ランはラン117(R17)自身であるが、このラン117(R17)に隣接する同一クラスのラン124(R24)の帰属元ランがラン117(R17)よりもラン番号が小さいラン102(R2)であることから、その帰属元ランはラン102(R2)に更新される。つまり、第5ライン94に対する処理の最後に第4ライン93に属するラン117(R17)の帰属元ランが第2ラン102(R2)に更新される。なお、この処理対象のライン(注目ライン)よりも前のラインに属するランの帰属元ランを更新する処理は、例えば注目ラインに対する処理が終わる毎に行ってもよく、注目ラインに属する各ランに対する処理が終わる毎に行ってもよい。
【0101】
図13(a)および図13(b)に示されているグラフ190,191は、第6ライン95に対する処理で検出されるランとそれに連結されるランとの関係を示している。これら各図における頂点201〜228はラン101〜128(R1〜R28)に対応しており、リンク251〜278は上記各ランの連結関係を示している。第28ラン128(R28)の最初の要素に対する処理では帰属元ランはラン109(R9)であると判定されるが、第28ラン128(R28)における最後の方の要素に対する処理において帰属元ランは最終的にラン105(R5)に更新される。
【0102】
図14(a)および図14(b)に示されているグラフ192,193は、第7ライン96に対する処理によって検出されるランとそれに連結されるランとの関係を示している。これら各図における頂点201〜230はラン101〜130(R1〜R30)に対応しており、リンク251〜280は上記各ランの連結関係を示している。第29のラン129(R29)に対する処理により、その帰属元ランは第1のラン101(R1)であると判定される。そして、その結果、第6ライン95に属するラン128(R28)およびそれに連結された各ランの帰属元ランはラン105(R5)から第1のラン101(R1)に更新される。
【0103】
図21は、図6に示したクラスマップ89に対してランレングス符号化/隣接ラン統合処理を施す際の帰属元の更新処理を説明するための説明図である。ラン128(R28)における最後部の要素414を処理する際、処理対象の要素414に隣接する要素はラン125(R25)内の要素416であると判定される。処理中の要素414の帰属元ランはこの時点ではラン109(R9)であり、隣接する要素416の帰属元ランはこの時点ではラン105(R5)である。したがって、処理中の要素414の帰属元ラン109(R9)は隣接する要素416の帰属元ラン105(R5)よりも連結性ツリー(連結性グラフ)の下位であるので、ラン128(R28)の帰属元ランはラン105(R5)に更新される。これに伴い、ラン128(R28)に隣接するラン123(R23)の帰属元ランおよびそれまでラン123(R23)の帰属元ランであったラン109(R9)の帰属元ランはラン105(R5)に更新される。
【0104】
図20は、図6に示したクラスマップ89に対してランレングス符号化/隣接ラン統合処理を施す際の帰属元の更新処理を説明するための説明図である。
【0105】
ラン129(R29)における最後部の要素410を処理する際、処理対象の要素410に隣接する要素はラン128(R28)内の要素412であると判定される。処理中の要素410の帰属元ランはラン101(R1)であり、隣接する要素412の帰属元ランはこの時点ではラン105(R5)である。したがって、処理中の要素410の帰属元ラン101(R1)は隣接する要素412の帰属元ラン105(R5)よりも連結性ツリー(連結性グラフ)の上位であるので、隣接する要素412を含むラン128(R28)の帰属元ランおよびそれまでラン128(R28)の帰属元ランであったラン105(R5)の帰属元ランはラン129(R29)の帰属元ランと同様、ラン101(R1)に更新される。
【0106】
図25は、図6に示したクラスマップ89に対してランレングス符号化/隣接ラン統合処理を行った結果を示す表である。
【0107】
なお、ランレングス符号化/隣接ラン統合処理の後、連結パス圧縮部34が、各ランの連結関係を示す連結情報(帰属元ラン)を圧縮する連結パス圧縮処理を行う。具体的には、連結パス圧縮部34は、ランAの帰属元ランBの帰属元ランがランCである場合に、ランAの帰属元ランをランCに更新することにより、各ランの帰属元ランを最上位のランに圧縮(集約)する。
【0108】
図26は、この連結パス圧縮処理をコンピュータに実行させるための中間コードの一例を示している。また、図27は、図25に示したランレングス符号化/隣接ラン統合処理を行った結果に対して連結パス圧縮処理を行った結果を示す表である。
【0109】
また、連結パス圧縮部34が連結パス圧縮処理を行った後、ラベル圧縮部35が、連結された各成分(同じクラスに属し、かつ互いに隣接する(連結された)ランの集合)に属する各ランに対して成分毎に共通のラベルを付与しなおすラベル圧縮処理を行う。例えば、上述の実施例(図27に示した例)の場合、帰属元ランがランR1である成分は「0」にラベル付けされ、帰属元ランがランR2である成分は「1」にラベル付けされ、帰属元ランがランR30である成分は「2」にラベル付けされる。このように、ランインデックスに代えてクラス毎に順次割り付けたラベルを用いることにより、各成分のクラスを識別するための情報に必要とされるビット深度を低減することができる。なお、このラベル圧縮処理は、例えばハッシュテーブルを用いて行うことができる。
【0110】
なお、図15に示すように、ラベル圧縮処理(S86)の後に、領域特性(成分特性)の抽出処理(S300)を行うようにしてもよい。例えば、図30に示した構成に加えて、領域特性抽出処理(図示せず)を設け、この領域特性抽出処理が領域特性の抽出処理を行うようにしてもよい。代表的な成分特性としては、領域面積(region area)、成分の境界線(component bounding box)、成分の重心、成分の境界線の中心(component-bounding-box center)、あるいはその他の領域(成分)の特性を示すパラメータが上げられる。領域特性の抽出処理では、例えばランレングスデータを用いてこれらの成分特性を抽出することができる。図28は、領域特性の抽出処理をコンピュータに実行させるための中間コードの一例を示している。
【0111】
また、図16に示すように、ラベル圧縮処理(S86)の後に、ラベル画像生成処理(ラベル画像再構築処理)(S302)を行ってもよい。例えば、図30に示した構成に加えて、ラベル画像生成部(図示せず)を設け、このラベル画像生成部がラベル画像生成処理を行うようにしてもよい。ラベル画像とは、各ランを当該各ランのクラス(ラベル)と当該各ランのランレングスとに応じて表現した画像である。図29は、ラベル画像生成処理をコンピュータに実行させるための中間コードの一例を示している。
【0112】
また、図17に示したように、ラベル圧縮処理(S86)の後に、領域特性の抽出処理(S300)とラベル画像生成処理(S302)とを行うようにしてもよい。また、この場合、領域特性の抽出処理(S300)を行った後にラベル画像生成処理(S302)を行うようにしてもよく、ラベル画像生成処理(S302)を行った後に領域特性の抽出処理(S300)を行うようにしてもよく、領域特性の抽出処理(S300)とラベル画像生成処理(S302)とを並行して行ってもよい。
【0113】
以上のように、本実施形態にかかる画像処理装置30では、初期化処理部32が符号化処理を行う前にメモリ31を初期化し、各ランの符号化情報を格納するためのランデータ構造と、符号化情報を格納可能なランの最大値とを設定する。また、ランデータ構造には、このランデータ構造に符号化情報を格納するランと同じ画像種別に属するランのうちラスタ走査方向の最上流側に位置するランである帰属元ランを記憶する帰属元ランフィールドと、上記ランの画像種別を示す画像種別情報を記憶する画像種別フィールドと、上記ランの長さを示すランレングス情報を記憶するランレングスフィールドとを設け、画像種別情報を予め設定されたデフォルト値に設定する。そして、ランレングス符号化処理部33は、ラスタ走査方向にそって1画素ずつ走査することで各ランの検出、各ランのランレングスの検出、および各ランの帰属元ランの検出を行い、これらの検出結果に基づいてランデータ構造における上記各フィールドの情報を更新することにより、各ランの符号化情報を生成する。また、ランレングス符号化処理部33は、符号化したランの数がメモリ31に格納可能なランの数の最大値より1つ小さい値に達すると、残りの画素をデフォルト値に対応する画像種別の単一のランとみなしてその符号化情報を生成し、メモリ31に格納して符号化処理を終了する。
【0114】
これにより、クラスマップに含まれるランの数がメモリ31に格納可能なランの最大値を超過している場合であっても、当初に生成した符号化情報が上書きされるなどして失われることを防止できる。
【0115】
なお、クラスマップに含まれるランの数がメモリ31に格納可能なランの最大値を超過している場合、クラスマップにおけるラスタ走査方向の末尾に位置する一部のランはデフォルト値に対応するクラス(例えば背景領域)として符号化されるので、クラスマップ全体に対する符号化処理を行うことはできないものの、クラスマップにおけるラスタ走査方向の先頭から所定数のランについては適切に符号化処理を行ってその結果をメモリ31に残すことができる。
【0116】
これにより、例えば、メモリ31に格納された符号化結果を参照してクラスマップに対応する原稿の天地判定や原稿種別判定などを適切に行うことができる。上記の天地判定や原稿種別判定の方法は特に限定されるものではないが、例えば、各種原稿のレイアウト例を予め記憶しておき、符号化結果からクラスマップにおける各画像種別に対応する領域のレイアウトを検出し、検出したレイアウトと予め記憶させておいたレイアウト例とを比較することにより、天地判定や原稿種別判定を行うようにしてもよい。上記の原稿種別としては、例えば、複数ページ分の原稿画像を1枚の用紙上に割り付けた割付原稿、テキスト領域を複数のブロックに分けて配置した段組原稿、所定形状の罫線を含む伝票や帳票などが挙げられる。
【0117】
また、図30に示した画像処理装置30の構成に加えて、上記の天地判定処理を行う天地判定処理部を備えてもよい。また、図30に示した画像処理装置30の構成に加えて、上記の原稿種別判定処理を行う原稿種別判定処理部を備えてもよい。
【0118】
また、メモリ31に格納可能な1ラインあたりのランの数の最大値(ライン最大値)を設定し、符号化処理中のラインにおける未符号化処理のランの数がそれら各ランをデフォルトクラスに設定することしかできない数になった場合に、残りの要素をデフォルトクラスに属する単一のランとみなして符号化して当該ラインに対する符号化処理を終了し、次のラインの符号化処理を開始するようにしてもよい。
【0119】
また、上記実施形態において、画像処理装置30に備えられる各部(各ブロック)を、CPU等のプロセッサを用いてソフトウェアによって実現してもよい。この場合、画像処理装置30は、各機能を実現する制御プログラムの命令を実行するCPU(central processing unit)、上記プログラムを格納したROM(read only memory)、上記プログラムを展開するRAM(random access memory)、上記プログラムおよび各種データを格納するメモリ等の記憶装置(記録媒体)などを備えている。そして、本発明の目的は、上述した機能を実現するソフトウェアである画像処理装置30の制御プログラムのプログラムコード(実行形式プログラム、中間コードプログラム、ソースプログラム)をコンピュータで読み取り可能に記録した記録媒体を、画像処理装置30に供給し、そのコンピュータ(またはCPUやMPU)が記録媒体に記録されているプログラムコードを読み出し実行することによって達成される。
【0120】
上記記録媒体としては、例えば、磁気テープやカセットテープ等のテープ系、フロッピー(登録商標)ディスク/ハードディスク等の磁気ディスクやCD−ROM/MO/MD/DVD/CD−R等の光ディスクを含むディスク系、ICカード(メモリカードを含む)/光カード等のカード系、あるいはマスクROM/EPROM/EEPROM/フラッシュROM等の半導体メモリ系などを用いることができる。
【0121】
また、画像処理装置を通信ネットワークと接続可能に構成し、通信ネットワークを介して上記プログラムコードを供給してもよい。この通信ネットワークとしては、特に限定されず、例えば、インターネット、イントラネット、エキストラネット、LAN、ISDN、VAN、CATV通信網、仮想専用網(virtual private network)、電話回線網、移動体通信網、衛星通信網等が利用可能である。また、通信ネットワークを構成する伝送媒体としては、特に限定されず、例えば、IEEE1394、USB、電力線搬送、ケーブルTV回線、電話線、ADSL回線等の有線でも、IrDAやリモコンのような赤外線、Bluetooth(登録商標)、802.11無線、HDR、携帯電話網、衛星回線、地上波デジタル網等の無線でも利用可能である。なお、本発明は、上記プログラムコードが電子的な伝送で具現化された、搬送波に埋め込まれたコンピュータデータ信号の形態でも実現され得る。
【0122】
また、画像処理装置30の各ブロックは、ソフトウェアを用いて実現されるものに限らず、ハードウェアロジックによって構成されるものであってもよく、処理の一部を行うハードウェアと当該ハードウェアの制御や残余の処理を行うソフトウェアを実行する演算手段とを組み合わせたものであってもよい。
【0123】
本発明は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【0124】
本発明は、画像データをランレングス符号化する画像処理装置および画像処理方法に適用することができる。
【符号の説明】
【0125】
30 画像処理装置
31 メモリ
32 初期化処理部
33 ランレングス符号化処理部
34 連結パス圧縮部
35 ラベル圧縮部

【特許請求の範囲】
【請求項1】
画像データにおける各画素の画像種別を示す情報であるクラスマップデータから、同じ画像種別に属する画素であって上記画像データの走査ライン方向に隣接する画素の集合であるランを抽出し、各ランのラスタ走査方向に沿った順序と各ランの画素数とに基づいて上記クラスマップデータを符号化するランレングス符号化処理部と、符号化した符号化データを格納する記憶手段とを備えた画像処理装置であって、
符号化に先立って上記記憶手段を初期化する初期化処理部を備え、
上記初期化処理部は、
各ランについての符号化結果を示す符号化情報を格納するためのランデータ構造を設定して上記記憶手段に記憶させるとともに、上記記憶手段に符号化結果を格納可能なランの数の最大値を設定し、
上記ランデータ構造に、当該ランデータ構造に符号化情報を格納するランである格納対象ランと同じ画像種別に属するランのうちラスタ走査方向の最上流側に位置するランである帰属元ランを示す帰属元情報を記憶する帰属元ランフィールドと、上記格納対象ランの画像種別を示す画像種別情報を記憶する画像種別フィールドと、上記格納対象ランの長さを示すランレングス情報を記憶するランレングスフィールドとを設け、
上記画像種別情報を予め設定されたデフォルト値に設定し、
上記ランレングス符号化処理部は、
上記画像データのラスタ走査方向に沿って注目画素を1画素ずつ順次移動させながら今回の注目画素の画像種別と前回の注目画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別の画素であって走査ライン方向に隣接する画素の集合であるランを抽出し、抽出した上記ランに含まれる各画素の画像種別を示す情報を当該ランの画像種別情報として検出する処理と、
抽出した上記ランの画素数を当該ランのランレングス情報として検出する処理と、
今回の注目画素の画像種別と当該注目画素が属する走査ラインに対してラスタ走査方向の上流側に隣接する走査ラインの画素であって当該注目画素に隣接する画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別のランであって異なる走査ライン間で隣接するランの集合からなる連結領域を抽出し、抽出した連結領域に属するランのうちラスタ走査方向の最上流側に位置するランを示す情報を当該連結領域に属する各ランの帰属元情報として検出する処理と、
上記ランデータ構造における帰属元ランフィールド、画像種別フィールド、およびランレングスフィールドに格納されている情報を、各ランについて検出した帰属元情報、画像種別情報、およびランレングス情報に基づいて更新する処理をラン毎に行うことで各ランについての符号化情報を生成する処理とを行い、
符号化情報を生成したランの数が上記最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない残りの画素数に更新し、画像種別情報については上記デフォルト値のままにすることによって生成し、符号化処理を終了することを特徴とする画像処理装置。
【請求項2】
上記初期化処理部は、
上記記憶手段に格納可能な1走査ラインあたりのランの数の最大値であるライン最大値を設定し、
上記ランレングス符号化処理部は、各走査ラインについて、符号化情報を生成したランの数が上記ライン最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない当該走査ラインについての残りの画素数に更新し、画像種別については上記デフォルト値のままにすることによって生成し、当該走査ラインについての符号化処理を終了することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
上記初期化処理部は、上記ランデータ構造を走査ライン毎に生成し、
上記ランレングス符号化処理部は、各ランの符号化情報を当該ランが属する走査ラインに対応する上記ランデータ構造を用いて生成することを特徴とする請求項1または2に記載の画像処理装置。
【請求項4】
上記初期化処理部は、初期化時に上記画像種別情報として設定する上記デフォルト値を、上記画像データにおける背景領域を示す値に設定することを特徴とする請求項1から3のいずれか1項に記載の画像処理装置。
【請求項5】
画像データにおける各画素の画像種別を示す情報であるクラスマップデータから同じ画像種別に属する画素であって上記画像データの走査ライン方向に隣接する画素の集合であるランを抽出し、各ランのラスタ走査方向に沿った順序と各ランの画素数とに基づいて上記クラスマップデータを符号化するランレングス符号化工程と、符号化したデータを記憶手段に格納する記憶工程とを含む画像処理方法であって、
符号化処理工程に先立って上記記憶手段を初期化する初期化処理工程を含み、
上記初期化処理工程では、
各ランについての符号化結果を示す符号化情報を格納するためのランデータ構造を設定して上記記憶手段に記憶させるとともに、上記記憶手段に符号化結果を格納可能なランの数の最大値を設定し、
上記ランデータ構造に、当該ランデータ構造に符号化情報を格納するランである格納対象ランと同じ画像種別に属するランのうちラスタ走査方向の最上流側に位置するランである帰属元ランを示す帰属元情報を記憶する帰属元ランフィールドと、上記格納対象ランの画像種別を示す画像種別情報を記憶する画像種別フィールドと、上記格納対象ランの長さを示すランレングス情報を記憶するランレングスフィールドとを設け、
上記画像種別情報を予め設定されたデフォルト値に設定し、
上記ランレングス符号化工程では、
上記画像データのラスタ走査方向に沿って注目画素を1画素ずつ順次移動させながら今回の注目画素の画像種別と前回の注目画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別の画素であって走査ライン方向に隣接する画素の集合であるランを抽出し、抽出した上記ランに含まれる各画素の画像種別を示す情報を当該ランの画像種別情報として検出する処理と、
抽出した上記ランの画素数を当該ランのランレングス情報として検出する処理と、
今回の注目画素の画像種別と当該注目画素が属する走査ラインに対してラスタ走査方向の上流側に隣接する走査ラインの画素であって当該注目画素に隣接する画素の画像種別とを比較する処理を各画素について行うことにより、同じ画像種別のランであって異なる走査ライン間で隣接するランの集合からなる連結領域を抽出し、抽出した連結領域に属するランのうちラスタ走査方向の最上流側に位置するランを示す情報を当該連結領域に属する各ランの帰属元情報として検出する処理と、
上記ランデータ構造における帰属元ランフィールド、画像種別フィールド、およびランレングスフィールドに格納されている情報を、各ランについて検出した帰属元情報、画像種別情報、およびランレングス情報に基づいて更新する処理をラン毎に行うことで各ランについての符号化情報を生成する処理とを行い、
符号化情報を生成したランの数が上記最大値よりも1つ少ない数に達した場合、次のランの符号化情報を、上記ランデータ構造に対し、帰属元情報については当該ラン自身を示す情報に更新し、ランレングス情報については符号化処理を行っていない残りの画素数に更新し、画像種別情報については上記デフォルト値のままにすることによって生成し、符号化処理を終了することを特徴とする画像処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate