以下、本発明の実施の形態について図面を用いて詳細に説明する。
本発明は、画像上で隣接する色領域間の輪郭形状に関数近似や平滑化を施しても、隙間や重なりの発生がなく、良好なベクトル化(ベクトル処理)が可能な技術について提供する。本発明では、カラー画像、とりわけ、ディジタルカメラ等により撮影された自然画像に比べて色数の少ないイラスト画像のベクトル化について提供する。
尚、各実施形態で説明するベクトルとは、ビットマップ画像データを作成する際に用いられる数式等の描画コマンドで表現されたデータ(ベクトルデータ)を意味するものである。また、ベクタ画像データをビットマップ画像データに変換することを、ラスタ化やラスタライズという。そのため、このビットマップ画像データは、ラスタデータと呼ばれることもある。
また、以下の説明では、ベクトルデータのことを、単にベクトルと略称する。
<実施形態1>
図1は本発明の実施形態1の画像処理装置の機能構成を示すブロック図である。
同図において、11は、入力としての処理対象画像を獲得するカラー画像獲得部である。12は、カラー画像獲得部11で獲得された画像を、同色領域とみなせる画素の連結としての部分領域に分割する領域同定部である。ここで、同色領域とみなせるとは、画素の特徴量(例えば、色情報(例えば、RGB値))が所定範囲内に含まれるものを、同一の画素の特徴量を有している領域と判定することである。
この領域同定部12は、領域分割部121と領域テーブル生成部122を備える。領域分割部121は、色情報に基づき幾何学的に連結した同色領域とみなせる画素の集まりに画像を分割する。また、領域テーブル生成部122は、領域分割部121から得られる各領域とそれら各領域の色情報(属性情報(例えば、RGB値))の対応づけ情報を、例えば、図2に示すテーブル形式(領域テーブル201)で生成する。
20は、領域同定部12で同定された各領域間の領域境界を1画素幅の細線で構成した領域境界細線画像を生成する領域境界細線画像生成部である。領域境界細線画像生成部20は、領域境界情報抽出部210、交点情報生成部220及び境界線画像生成部230を備える。
領域境界情報抽出部210は、領域同定部12で同定された各領域間の領域境界となる境界画素とそれらの各境界画素が隔てる領域間を示す領域境界情報を抽出する。また、交点情報生成部220は、領域境界画素を4−連結化した領域境界線の分岐点となる領域境界線の交点を示す交点情報を生成する。換言すれば、互いに異なる領域間の境界において、互いに異なる境界の交点を示す交点情報を生成する。また、境界線画像生成部230は、抽出された領域境界情報と生成された交点情報とから、領域境界細線画像を生成する。
領域境界情報抽出部210は、水平方向境界点抽出部211、水平方向境界点テーブル生成部212、垂直方向境界点抽出部213、垂直方向境界点テーブル生成部214、斜め方向境界点抽出部215及び斜め方向境界点テーブル生成部216を備える。
水平方向境界点抽出部211は、例えば、図3に示すように、領域同定部12により同定された同色領域とみなせる画素の連結としての部分領域で構成される領域同定結果画像を、水平方向に走査したときの各走査線上での領域間の境界となる画素を抽出する。即ち、水平方向における、ある部分領域から他の部分領域への切り替わりになる画素を抽出する。
水平方向境界点テーブル生成部212は、水平方向境界点抽出部211で抽出された水平方向境界点の各点(画素)に関する情報を、図4に示す水平方向境界点テーブル401として生成する。
垂直方向境界点抽出部213は、例えば、図3に示すように、領域同定部12により同定された同色領域とみなせる画素の連結としての部分領域で構成される領域同定結果画像を、垂直方向に走査したときの各走査線上での領域間の境界となる画素を抽出する。即ち、垂直方向における、ある部分領域から他の部分領域への切り替わりになる画素を抽出する。
垂直方向境界点テーブル生成部214は、垂直方向境界点抽出部213で抽出された垂直方向境界点の各点(画素)に関する情報を、図4に示す垂直方向境界点テーブル402として生成する。
斜め方向境界点抽出部215は、例えば、図3に示すように、領域同定部12により同定された同色領域とみなせる画素の連結としての部分領域で構成される領域同定結果画像を、斜め方向に走査したときの斜め走査線上での領域間の境界となる画素を抽出する。即ち、斜め方向における、ある部分領域から他の部分領域への切り替わりになる画素を抽出する。
斜め方向境界点テーブル生成部216は、斜め方向境界点抽出部215で抽出された斜め方向境界点の各点(画素)に関する情報を、図4に示す斜め方向境界点テーブル403として生成する。
交点情報生成部220は、交点同定部221と交点テーブル生成部222を備える。
交点同定部221は、図4の水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403とから、交点情報を生成する。
具体的には、図5に示すように、3つのテーブル401〜403上の少なくとも2つ以上のテーブル上に存在する境界点の内、それが属する2つ以上のテーブル上でそれぞれの隣接する領域番号の組み合わせが完全には一致していない境界点を探索する。即ち、異なる領域番号の組み合わせが存在するような境界点を探索し、それを交点(交点情報)とする。図5の例では、C及びEが交点となる。
交点テーブル生成部222は、交点同定部221で同定された交点について、その交点が属するテーブル上の隣接する領域番号の内の少なくともいずれかには表記されている領域番号を全て抜き出す。そして、これにより、その交点の隣接する領域の領域番号の全てを対応する交点とともに管理する、図6に示す交点テーブル601を生成する。
境界線画像生成部230は、境界線画像描画部231と境界線画像細線化部232を備える。
境界線画像描画部231は、生成された領域境界情報と生成された交点情報とから、領域境界画素を4−連結化した境界線画像を生成する。また、境界線画像細線化部232は、得られた境界線画像に4−連結の状態を保った細線化を行ない、4−連結の領域境界細線画像を生成する。
例えば、境界線画像細線化部232は、境界線画像描画部231にて生成される領域境界画素を4−連結化した境界線画像(2値画像)を、公知の2値画像細線化手法により、4−連結に細線化された2値画像としての4−連結の領域境界細線画像を出力する。
ここで、公知の2値画像細線化手法としては、Hilditch法がある。これは、例えば、酒井幸市著「ディジタル画像処理の基礎と応用」第2版,ISBN4−7898−3707-6,CQ出版社,2004年2月1日発行,P.51−P.54,等)に記載されている。
一例として、図7(a)に示される2値画像を境界線画像細線化部232に入力した場合には、境界線画像細線化部232から出力されることになる細線化済画像は、図7(b)となる。
図1の説明に戻る。
30は、領域境界細線画像生成部20で生成された4−連結の領域境界細線画像を、交点から他の交点までを繋ぐ4−連結の細線毎に、其々の交点を端点とした端点間ベクトルの集まりとしてベクトル化する端点間ベクトル生成部である。
端点間ベクトル生成部30は、端点間ベクトル抽出部310と端点間ベクトル関数近似(平滑)部320を備える。
端点間ベクトル抽出部310は、4−連結の領域境界細線画像を、交点から他の交点までを繋ぐ4−連結の細線毎に、其々の交点をベクトルの端点として、端点間を繋ぐ各細線の画素の中心位置上を通過する線芯ベクトルを端点間ベクトルとして抽出する。
端点間ベクトル関数近似(平滑)部320は、抽出された端点間ベクトルを、端点から端点までの間が、端点部分が端点として保存された形で関数近似する。即ち、端点部分がベジェ曲線のアンカーポイントとなるようにベジェ関数近似し、関数近似(平滑化)済端点間ベクトルを生成する。
ここで、端点間ベクトル抽出部310は、図8に示すように、端点間毎輪郭(周回)ベクトル抽出部3110と端点間毎線芯(周回)ベクトル生成部3120とを備える。
端点間毎輪郭(周回)ベクトル抽出部3110は、4−連結の状態を保って細線化されている領域境界細線画像を入力する。次に、1回のラスタ走査のみにより、処理対象の細線化済2値画像中の線図形を、それらを構成している端点や交点間をつなぐ独立した線や閉曲線毎のそれぞれに対応したベクトル列の集まり(以降、「端点間毎線素粗輪郭ベクトル」という)として抽出する。そして、その処理結果を出力する。
尚、出力される処理結果には、ベクトル列のそれぞれを構成する各ベクトルが、処理対象の線図形の端点(交点)位置に対応する部分から抽出されたものか否か等を表す情報(以降、「付与情報」ともいう)が含まれる。
また、端点間毎線芯(周回)ベクトル生成部3120は、端点間毎輪郭(周回)ベクトル抽出部3110より得られる付与情報と端点間毎線素粗輪郭ベクトル(以降、これらを合わせて「端点間毎輪郭(周回)ベクトル」という)を入力する。そして、付与情報を利用して、一画素幅の幅を持った輪郭(周回)ベクトルの各ベクトルの位置をそれぞれ半画素分ずつ相応する方向へ予め定める規則により微調整する。これによって、幅0に線芯化された端点間毎線芯(周回)化済ベクトルを生成する。
図7(c)は、図7(b)の画像を入力2値画像とした際の端点間毎輪郭(周回)ベクトル抽出部3110から出力される端点間毎輪郭(周回)ベクトルを輪郭画像として描画して可視化したものである。また、図7(d)は、図7(c)の画像を入力した際の端点間毎線芯(周回)ベクトル生成部3120から出力される端点間毎線芯(周回)化済ベクトルを線画像として描画して可視化したものである。
また、端点間ベクトル関数近似(平滑)部320は、端点間毎補助ベクトル入り(周回)ベクトル生成部3210、端点間毎補助ベクトル入り(周回)ベクトル平滑化部3220、端点間毎平滑化済ベクトル同定(非周回化)部3230を備える(図8参照)。
ここで、端点間毎補助ベクトル入り(周回)ベクトル生成部3210は、端点間毎線芯(周回)ベクトル生成部3120より得られる端点間毎線芯(周回)化済ベクトルを入力する。そして、次工程の処理をする端点間毎補助ベクトル入り(周回)ベクトル平滑部3220により平滑化(関数近似)処理される際に、端点部分に相当するベクトルが、他のベクトルと統合されて端点位置が不明にならぬようにするための補助ベクトルを挿入する。つまり、端点部分に相当する部分が端点として保存される(ベジェ曲線のアンカーポイントとなる)ように補助ベクトルを挿入することにより、端点間毎補助ベクトル入り(周回)ベクトルを生成する。
加えて、端点間毎補助ベクトル入り(周回)ベクトル生成部3210は、補助ベクトルを挿入された各端点間毎補助ベクトル入り(周回)ベクトルのそれぞれに対し、どのベクトルが端点部にあたるかを明示する始端点・終端点情報をも生成する。
図7(e)は、図7(d)の画像を入力した際の端点間毎補助ベクトル入り(周回)ベクトル生成部3210から出力される端点間毎補助ベクトル入り(周回)ベクトルを線画像として描画して可視化したものである。
端点間毎補助ベクトル入り(周回)ベクトル平滑部3220は、端点間毎補助ベクトル入り(周回)ベクトル生成部3210より端点間毎補助ベクトル入り(周回)ベクトルを入力する。次に、各(周回)ベクトル毎に平滑化(関数近似)処理を行うことによって、平滑化された平滑化済端点間毎補助ベクトル入り(周回)ベクトルを生成する。そして、それを、次工程の処理をする端点間毎平滑化済ベクトル同定(非周回化)部3230に出力する。
端点間毎平滑化済ベクトル同定(非周回化)部3230は、端点間毎補助ベクトル入り(周回)ベクトル平滑部3220より平滑化(関数近似)済端点間毎補助ベクトル入り(周回)ベクトルを入力する。また、端点間毎平滑化済ベクトル同定(非周回化)部3230は、端点間毎補助ベクトル入り(周回)ベクトル生成部3210より始端点・終端点情報を入力する。
そして、端点間毎平滑化済ベクトル同定(非周回化)部3230は、各平滑化済の(周回)ベクトル毎にそれぞれ始端点と終端点となるベクトルを同定して、始端点と終端点の間のみの部分の非周回型のベクトル列を生成する。
図7(f)は、図7(e)の画像を入力した際の端点間毎平滑化済ベクトル同定(非周回化)部3230から出力される平滑化済ベクトルを線画像として描画して可視化したものである。
図1の説明に戻る。
40は、各領域毎にそれを取り囲む平滑化(関数近似)済端点間ベクトル列とその内部色とでなる領域ベクトルに変換する領域別ベクトル生成部である。この処理は、端点間ベクトル生成部30から得る平滑化(関数近似)済端点間ベクトルと、領域境界細線画像生成部20から得る各交点が隣接する領域の領域番号情報と、領域同定部12から得る各領域とそれらの色情報(属性情報)の対応づけ情報を用いて行う。
領域別ベクトル生成部40は、領域境界ベクトル列同定部410と、領域属性付与部420とを備える。
領域境界ベクトル列同定部410は、各領域毎にそれを取り囲む関数近似(平滑化)済端点間ベクトル列を同定する。この処理は、端点間ベクトル生成部30で生成された関数近似(平滑化)済端点間ベクトルと、領域同定部12から得る各領域とそれらの色情報(属性情報)の対応づけ情報を用いて行われる。
領域属性付与部420は、各領域を取り囲む平滑化(関数近似)済端点間ベクトル列にその内部の色情報を付与して、各領域毎にそれを取り囲む平滑化(関数近似)済端点間ベクトル列とその色情報からなる領域ベクトルを生成する。この処理は、領域境界ベクトル列同定部410で同定された各領域毎の平滑化(関数近似)済端点間ベクトル列と、領域同定部12から得る各領域とそれらの色情報(属性情報)の対応づけ情報を用いて行う。
次に、図1の画像処理装置のハードウェア構成について、図9を用いて説明する。
図9は本発明の実施形態1の画像処理装置のハードウェア構成を示す図である。
同図において、518は、図9に示す各種構成要素を相互に接続するためのバスである。1はスキャナである。2は画像メモリであり、3は画像入出力I/Oである。画像メモリ2は画像入出力I/O3を介して、スキャナ1で読み取られたカラー画像を保持する。図1のカラー画像獲得部11は、このスキャナ1、画像入出力I/O3及び画像メモリ2によって実現される。
また、画像メモリ2は、領域同定部12により生成される同色領域とみなせる画素の連結領域を部分領域として構成される領域同定結果画像を保持する。また、画像メモリ2は、領域境界細線画像生成部20の境界線画像生成部230で生成される境界線画像や、得られた境界線画像に対する、4−連結の状態での細線化によって生成される4−連結の領域境界細線画像を保持する。
このように、画像メモリ2は、領域同定部12や領域境界細線画像生成部20、端点間ベクトル生成部30を構成する一部としても機能する。
4は通信I/Fであり、ネットワーク等を経由して、システムの外部と通信する。519はCPUである。520はRAMで、例えば、ワーキングメモリとして機能する。6はROMであり、後に説明する手順に沿ってCPU519で実行されるプログラムや予め定められるパラメータやデータ等を格納している。
ここで、画像メモリ2と、CPU519やRAM520、ROM6により、図1の領域同定部12、領域境界細線画像生成部20、端点間ベクトル生成部30が構成されるとともに、領域別ベクトル生成部40も実現される。
521はハードディスク装置522とのディスクI/O(入出力回路)である。
以下、画像処理装置の動作について、図10を用いて説明する。
図10は本発明の実施形態1の画像処理装置の動作を示すフローチャートである。
尚、この処理は、例えば、CPU519が、ROM6に記憶されているプログラムを実行することによって、図1に示される各種機能構成によって実現される。
まず、ステップS11で、カラー画像獲得部11が、入力としての処理対象カラー画像を入力する。次に、ステップS12とステップS13は、領域同定部12での処理内容を実行する。即ち、ステップS11で入力した画像を領域分割処理し、領域分割処理結果をRAM520に保存する。
より具体的には、ステップS12で、領域分割部121が、色情報に基づき幾何学的に連結した同色領域とみなすことができる画素の集まりに画像を分割する。そして、ステップS13で、領域テーブル生成部122が、得られる各領域内の画素の色平均値をもって、その領域の色情報(属性情報)とし、図2に示す領域テーブル201を作成して、RAM520上に保存する。ステップS12の領域分割処理の詳細については後述する。
次に、ステップS21からステップS26は、領域境界情報抽出部210での処理内容を実行する。即ち、ステップS12で同定された各領域間の領域境界となる境界画素とそれらの各境界画素が隔てる領域間を示す領域境界情報を抽出する。
まず、ステップS21で、水平方向境界点抽出部211が、同色領域とみなすことができる画素の連結としての部分領域で構成される領域同定結果画像を、水平方向に走査したときの各走査線上での領域間の境界となる画素を抽出する。即ち、ある領域から他の領域への切り替わりになる水平方向境界点の画素を抽出する。ステップS22で、水平方向境界点テーブル生成部212が、抽出した水平方向境界点の各点に関する座標と隣接する領域番号を用いて、水平方向境界点テーブル401(図4)を生成する。
ステップS23で、垂直方向境界点抽出部213が、同色領域とみなすことができる画素の連結としての部分領域で構成される領域同定結果画像を、垂直方向に走査したときの各走査線上での領域間の境界となる垂直方向境界点の画素を抽出する。ステップS24で、垂直方向境界点テーブル生成部214が、抽出した垂直方向境界点の各点に関する座標と隣接する領域番号を用いて、垂直方向境界点テーブル402(図4)を生成する。
ステップS25で、斜め方向境界点抽出部215が、同色領域とみなすことができる画素の連結としての部分領域で構成される領域同定結果画像を、斜め方向に走査したときの各走査線上での領域間の境界となる斜め方向境界点の画素を抽出する。ステップS26で、斜め方向境界点テーブル生成部216が、抽出した斜め方向境界点の各点に関する座標と隣接する領域番号を用いて、斜め方向境界点テーブル403(図4)を生成する。
尚、ステップS21、ステップS23とステップS25の境界点抽出処理の詳細については後述する。
次に、ステップS30とS31は、交点情報生成部220での処理内容を実行する。即ち、領域境界画素を4−連結化した領域境界線の分岐点となる領域境界線の交点の情報を生成する。
まず、ステップS30で、交点同定部221が、水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403とから、交点を抽出する。
具体的には、3つのテーブル401〜403上で2つ以上のテーブルに存在する境界点の内、各テーブル401〜403それぞれでの隣接する領域番号とから3つ以上の領域番号を持つ境界点を探索して、それを交点とする。
尚、3つのテーブル上で2つ以上のテーブルに存在する境界点とは、水平境界点かつ垂直方向境界点、水平方向境界点かつ斜め方向境界点、垂直方向境界点かつ斜め方向境界点、あるいは水平方向境界点かつ垂直方向境界点かつ斜め方向境界点のいずれかである。
ステップS31で、交点テーブル生成部222が、ステップS30で同定された交点に基づいて、交点テーブル601を生成する。
具体的には、水平方向境界点テーブル401での隣接する領域番号と垂直方向境界点テーブル402での隣接する領域番号と斜め方向境界点テーブル403での隣接する領域番号の少なくともいずれかには表記されている領域番号を全て抜き出す。これにより、その交点の隣接する領域の領域番号の全てとして、図6の交点テーブル601を生成する。
尚、ステップS30の交点抽出処理の詳細については後述する。
ステップ50からステップS80は、境界線画像生成部230と端点間ベクトル生成部30の処理内容を実行する。即ち、ステップS12で生成された領域境界情報とステップS30で獲得した交点情報とから、領域境界細線画像を生成し、各端点間ベクトルを生成する。
まず、ステップS50で、境界線画像描画部231を実行する。即ち、領域境界情報から、領域境界画素を4−連結化した境界線ビットマップ画像(境界線画像)を生成する。ステップS60で、境界線画像細線化部232を実行する。即ち、4−連結化した境界線画像から領域境界細線画像を生成する。ステップS70で、端点間ベクトル生成部30を実行する。即ち、領域境界細線画像を、交点と交点の間を繋ぐ境界線画像毎に、順次に端点間ベクトルを生成する。
ステップS80で、全ての境界線について端点間ベクトル化の処理が終了したか否かを判定する。この処理では、ステップS31で生成された交点テーブル601にあるすべての交点と交点の間を繋ぐ境界線画像の端点間ベクトル生成処理が終了していない場合(ステップS80でNO)、まだ未処理の境界線があると判定する。その場合、ステップS50に戻り、以上の処理を繰り返し実行する。一方、全ての交点と交点の間を繋ぐ境界線画像の端点間ベクトル生成処理が終了している場合(ステップS80でYES)、未処理の境界線がないと判定し、ステップS100へ進む。
ステップS50の境界線ビットマップ生成処理では、図4の各境界点テーブル401〜403に保持される水平方向境界点、垂直方向境界点、斜め方向境界点を所望とする領域境界毎に、これらテーブルの隣接する領域番号の等しいものを全て順次探し出す。そして、その探し出した境界点を用いて、ビットマップ画像を生成する。
即ち、後述する処理済チェックがなされていない境界点を、例えば、水平方向境界点テーブル401、垂直方向境界点テーブル402、斜め方向境界点テーブル403の順にサーチする。そして、最初に保持される処理済のチェックがされていない境界点を探して1点を描画する。続いて、その点の隣接する領域番号の組み合わせと同じ領域番号の組み合わせを持つ点を水平方向境界点テーブル401、垂直方向境界点テーブル402、斜め方向境界点テーブル403の全てにわたり、順次に探し出しては描画する。そして、条件に合う境界点を全て、その領域番号の組み合わせで示される領域間を分ける境界線として描画する。
尚、境界線として描画された境界点は、既に境界線ビットマップ生成処理が済んだものとして、各境界点テーブル401〜403の境界点の其々に対応する処理済チェックフラグ欄(不図示)にチェックする(フラグセットする)。これにより、処理済であることを明示する。尚、この処理済チェックフラグがチェックされていない境界点が存在しない場合には、全ての境界点がビットマップとして生成済みであることを意味する。
尚、この処理で描画される境界点のビットマップ画像は、例えば、後述する図50(e)の、ハッチングパターンが付されている画素(1)の部分に示されるような、ある交点間を結ぶ4−連結化した領域となる。しかしながら、必ずしも、一画素幅の線画像となるとは限らず、一部2画素幅以上になる場合がありえる。
ステップS60の境界線画像細線化処理では、ステップS50で得られる境界線ビットマップ画像(2値画像)を、公知の2値画像細線化手法で、4−連結に細線化された2値画像として出力する。
次に、ステップS70の端点間ベクトル生成処理について詳述する。
上述したように、ステップS70では、端点間ベクトル生成部30を実行する。即ち、領域境界細線画像を、交点と交点の間を繋ぐ境界線画像毎に、順次に端点間ベクトルを生成する。端点間ベクトル生成部30は、図8に示したように、端点間ベクトル抽出部310と端点間ベクトル関数近似(平滑)部320と備える。さらに、端点間ベクトル抽出部310は、端点間毎輪郭(周回)ベクトル抽出部3110と端点間毎線芯(周回)ベクトル生成部3120とを備える。また、端点間ベクトル関数近似(平滑)部320は、端点間毎補助ベクトル入り(周回)ベクトル生成部3210、端点間毎補助ベクトル入り(周回)ベクトル平滑化部3220、端点間毎平滑化済ベクトル同定(非周回化)部3230を備える。
以下、主として、図11〜図27を用いて端点間毎輪郭(周回)ベクトル抽出部3110での処理内容を説明する。
実施形態1では、図11に示すように、2値画像における注目画素101と、その近傍の8個の画素の状態を見て処理を進めるもので、注目画素をラスタ走査し、1画素毎にずらしながら画像全体の処理を逐次行う。
図11において、×は注目画素101を示しており、「0」及び「2」で示された位置は、主走査方向に対し注目画素101と同じ位置にあり、副走査方向のそれぞれ1ラスタ前の画素(0)及び1ラスタ先の画素(2)を示す。「1」及び「3」で示された位置は、注目画素101と同一のラスタ上にあり、それぞれ1画素前の画素(3)及び1画素先の画素(1)を示している。
更に、「A」及び「B」は、主走査方向に1画素先の位置にあり、それぞれ1ラスタ前及び1ラスタ先の位置にある画素を示し、「C」及び「D」は主走査方向の1画素前の位置にある画素で、それぞれ1ラスタ先及び1ラスタ前の位置にある画素を示している。
次に注目画素101及びその近傍の8画素の状態に応じた、それぞれの場合の処理を説明する。
注目画素101が白画素である場合は、その処理を終了してラスタ走査を1画素分進め、注目画素位置を更新する。
注目画素101が黒画素の場合は、近傍の画素の状態によって、以下の処理を行う。ここで、図12〜図27に各状態における処理内容を示してある。図12〜図27において、斜めのチェッカーパターンで示される○印は黒画素を示し、点線の○印は白画素を示している。「d」は「do no care」、即ち、「d」の表示のある位置の画素は白画素でも黒画素でも構わないことを意味している。
また、図12〜図27の各画素マトリクスにおいて、●印と○印は、横方向ベクトルの始点及び縦方向ベクトルの終点を示していて、▲印と△印は縦方向ベクトルの始点及び横方向ベクトルの終点を示している。これらのベクトルの始点・終点間の実線矢印は、始点及び終点共に定まった、矢印の向く方向の輪郭ベクトルを示している。一方、点線矢印は、始点もしくは終点のいずれか一方のみが定まった、矢印の向く方向の輪郭ベクトルを示している。これら輪郭ベクトルの始点及び終点を総称して、以降、輪郭点と呼ぶことにする。尚、図12、図17、図22の画素マトリクスパターンの場合は、輪郭ベクトルを抽出しない。
また、●印と▲印は端点部から抽出されるベクトルの始点・終点で、それぞれ端点部から抽出される横方向ベクトルの始点及び縦方向ベクトルの終点、端点部から抽出される縦方向ベクトルの始点及び横方向ベクトルの終点であることを示している。
図12〜図27の画素マトリクスに応じて抽出される輪郭点には、対応付けられる付与情報として、図28の一覧表に示した輪郭点情報のいずれかが付記されている。この輪郭点情報が、各輪郭点情報に付記されて抽出される付与情報となる。
図28の一覧表中のNo.01〜16に示される16種の輪郭点情報は、「xxx_yyy_zzz」または「xxx_yyy」なる形で表記されている。いずれも、「xxx」の部分は、対象の輪郭点が終点となるベクトルの向きを示し、「yyy」の部分は、同輪郭点が始点となるベクトルの向きを示している。上向きをUP、下向きをDOWN、右向きをRIGHT、左向きをLEFTと表現する。この場合、例えば、No.01〜03はいずれも、上向きベクトルの始点かつ右向きベクトルの始点になっている輪郭点であることを意味している。
尚、「_zzz」の部分は、この付与情報をもつ輪郭点が、端点部から抽出されたものであることを意味していて、図28の端点情報の欄に記載してある。ここで、_TRは、線素の上端部の右側(Top Right)から抽出された端点であることを示している(図29(a)参照)。また、_LTは、線素の左端部の上側(Left Top)から抽出された端点であることを示している(図29(b)参照)。
また、_RBは、線素の右端部の下側(Right Bottom)から抽出された端点であることを示している(図29(c)参照)。また、_BRは、線素の下端部の右側(Bottom Right)から抽出された端点であることを示している(図29(d)参照)。
また、_LBは、線素の左端部の下側(Left Bottom)から抽出された端点であることを示している(図29(b)参照)。また、_BLは、線素の下端部の左側(Bottom Left)から抽出された端点であることを示している(図29(d)参照)。
また、_RTは、線素の上端部の右側(Right Top)から抽出された端点であることを示している(図29(c)参照)。_TLは、線素の左端部の上側(Top Left)から抽出された端点であることを示している(図29(a)参照)。
線素の端点ではない部分(以降、非端点部という)から抽出される輪郭点には、この「_zzz」部のない輪郭点情報が付与され、これらの例を図30(a)〜(d)に示している。
但し、注目画素が黒画素の場合で、近傍の画素の状態によって、図12〜図27に各状態における輪郭点とその付与情報を抽出する際の実際の処理では、図28の輪郭点情報は「値」の欄の対応する位置に表記される数値で抽出されるように構成するものとする。
図30において、斜めのチェッカーパターンで示される○印は黒画素を示し、点線の○印は白画を示している。
これら輪郭ベクトルの始点・終点位置は、主走査方向及び副走査方向共に、画素と画素の中間の位置にあるものとする。また、主走査方向及び副走査方向共に、画素のある位置は正整数で示され、画素位置を2次元の座標で表現をする。
但し、ここでは小数の表現を避けるために便宜上、以降の画素位置を偶数のみで表現することにし、始点、終点の位置を奇数の整数で表現することにする。即ち、m画素×n画素の画像は、2m×2nの正の偶数(整数)の座標表現で表わすものとする。このように、主走査方向をx座標、副走査方向をy座標とした2次元座標であらわすとき、これ以降、2値画像は、それぞれがm画素よりなるnラスタで構成されるm×n画素(m,nは正の整数)で表現するものとする。また、第j番目のラスタの第i番目の画素位置を(2i,2j)(i,iは正の整数で、i≦m,j≦n)で表現するものとする。また、主走査方向(x座標)は左から右に向かう方向が正の方向であり、副走査方向(y座標)は上から下に向かう向きが正の方向である。
以下、端点間毎輪郭(周回)ベクトル抽出部3110の一連の動作を、図31A〜図33に従って説明を加える。
実施形態1は、特許文献4に比し、4−連結に細線化された2値画像を端点、交点を検出しつつ、端点や交点をつなぐ互いに独立した線素や閉曲線の集まりとして、それぞれの線成分に対応する独立したベクトル群を抽出する。加えて、各輪郭点に輪郭点情報をも付与して抽出する点で、その機能は大きく異なる。また、図11〜図27に示したように、処理対象として用いる3×3の画素パターン群も大きく異なる。但し、3×3の9画素で構成される走査窓を用いて、画像をラスタ走査し、逐次3×3の画素パターンとして注目画素とその8近傍の画素の状態を判断しながら、輪郭点を抽出していく点は、特許文献4と共通する。相違点としては、各3×3の画素パターンに応じた輪郭点と輪郭点情報を抽出する点である。
図31Aは本発明の実施形態1の端点間輪郭(周回)ベクトル抽出処理全体を示すフローチャートである。
尚、この処理は、画像処理装置のCPU519の制御によって実現される。また、本処理は、特許文献4の図22で示されるフローチャートに準ずるものである。しかしながら、特許文献4では、輪郭点情報の概念はない。そのため、実施形態1では、この輪郭点情報を、抽出した輪郭点に付加された属性情報として考える。また、特許文献4で抽出した輪郭点の接続情報の処理をする際にも、それぞれの輪郭点の輪郭点情報も各輪郭点の情報の一部として付随したものとして一貫して扱うようにする。
これは、各輪郭点データのデータ形式の内部にと輪郭点の座標値のみならず、その、輪郭点データをもその一部として取り込んだデータ構造として扱えば、容易に実現できるので、詳述はしない。
まず、ステップS1で、ベクトル列抽出処理を実行する。これは、2値画像データからベクトル列を各輪郭点に付随させて輪郭点情報込みで抽出する。そして、各ベクトルの始点の座標及びこのベクトルに流入してくる(このベクトルの始点の座標が終点となっている)ベクトル、流出してゆく(このベクトルの終点の座標が始点となっている)ベクトルを、図31B及び図31Cに示すテーブル形式で出力する。
次に、ステップS2で、図31B及び図31Cに示すテーブルから流入及び流出ベクトルの項目番号を辿る。これにより、図32に示すような画像中の総輪郭線数、各輪郭線毎の輪郭線の総点数、輪郭線中の各点のx座標、y座標と各点の輪郭点情報の組み合わせを記憶したベクトル列テーブル3201を作成する。
次に、ステップS3で、ディスクI/O521を介して、このベクトル列テーブル3201の情報をファイル形式で、ハードディスク装置522に記憶して、一連の動作を終了する。つまり、このファイルによって、画像中の領域別のベクトルデータが構成される。
次に、図31AのステップS1のベクトル列抽出処理の詳細について、図33を用いて説明する。
図33は本発明の実施形態1の図31AのステップS1のベクトル列抽出処理の詳細を示すフローチャートである。
まず、ステップS110で、注目画素が白画素か黒画素かを判定する。白画素の場合(ステップS110でYES)、ステップS130へ進む。一方、黒画素の場合(ステップS110でNO)、ステップS120へ進む。
ステップS120で、注目画素の周囲8画素の状態を見て、その状態に応じた処理を実行する。
ステップS130で、画素位置を更新する。そして、ステップS140で、最終画素の処理が終了したか否かを判定する。終了していない場合(ステップS140でNO)、ステップS110へ戻り、次の注目画素も同様に処理を行う。一方、終了している場合(ステップS140でYES)、元のルーチンにリターンする。
ここで、ステップS1のベクトル列抽出処理の具体例として、図12に示す状態(ケース(case)0)を処理する場合を説明する。ここで、注目画素(図12の中心画素)の座標は、(2i,2j)であるとする。
まず、(2i−1,2j−1)を水平ベクトルの始点として登録する。即ち、図31Bの水平ベクトルカウンタ1230が示す水平ベクトル始点のx座標テーブルの欄(図31Bの1231)に(2i−1)を格納し、同じく水平ベクトル始点y座標テーブルの欄(図31Bの1232)に(2j−1)を格納する。そして、この水平ベクトルに流入してくる元の垂直ベクトルは、図31Cの垂直ベクトルカウンタ1240が、この時点で指している垂直ベクトルの始点座標テーブル内の位置の次の位置に格納されるベクトルである。また、この水平ベクトルが流出していく先の垂直ベクトルは、この時点で垂直ベクトルカウンタ1240が指している垂直ベクトルの始点座標テーブルの位置にある。
即ち、図31Bに示す水平ベクトルの流入ベクトル項目番号の欄において、水平ベクトルカウンタ1230が示す位置(図31Bの例では、1233)に、垂直ベクトルカウンタ1240の値に1加えた値を格納する。また、水平ベクトルの流出ベクトル項目番号の欄には、水平ベクトルカウンタ1230が示す位置(図31Bの例では、1234)に、垂直ベクトルカウンタ1240の値を格納する。
次に、同様に、(2i+1,2j−1)を垂直ベクトルの始点として登録する。この垂直ベクトルに流入する水平ベクトルは、1回目に登録した水平ベクトルであると登録する。また、この垂直ベクトルが流出する水平ベクトルは、水平ベクトルの始点座標テーブルの1回目に登録された水平ベクトルの次の位置に格納される水平ベクトルであると登録する。
即ち、図31Cを参照して説明すると、欄241には(2i+1)が、欄242には(2i−1)が、更に、欄243には、この時の水平ベクトルカウンタ1230の値が、欄243にはこの時の水平ベクトルカウンタ1230の値に+1した値が格納される。
次に、水平ベクトルカウンタ1230の内容を+1する。次に、(2i+1,2j+1)を水平ベクトルの始点座標として登録し、この水平ベクトルに流入する垂直ベクトルは、2回目に登録したベクトルであると登録する。また、この水平ベクトルが流出する垂直ベクトルは、2回目に登録された垂直ベクトルの始点座標テーブル内における次の位置に格納される垂直ベクトルであると登録する。
次に、垂直ベクトルカウンタ1240の内容を+1する。次に、(2i−1,2j+1)を垂直ベクトルの始点座標として登録し、この垂直ベクトルに流入する水平ベクトルは、3回目に登録された水平ベクトルであると登録する。また、この垂直ベクトルが流出する水平ベクトルは、1回目で登録した水平ベクトルであると登録する。こうして最後に、水平ベクトルカウンタ1230及び垂直ベクトルカウンタ1240を共に+1して処理を終了する。
次に、図33のステップS120の処理の詳細について、図34を用いて説明する。
図34は本発明の実施形態1のステップS120の処理の詳細を示すフローチャートである。
ステップS210で、CPU519のレジスタを「0」にクリアする。次に、ステップS22で、図11の「0」で示された位置の画素の状態(以下、f(0)で表現する)が黒画素(以降、「1」で表わす)であるか否かを判定する。つまり、f(0)=1であるか否かを判定する。f(0)=1である場合(ステップS220でYES)、ステップS230へ進み、レジスタの内容に1を加える。一方、f(0)=0、即ち、白画素(以降、「0」で表わす)である場合、ステップS240へ進む。
次に、ステップS240で、図11の「1」の位置の画素の状態が黒画素であるか否かを判定する。つまり、f(1)=1であるか否かを判定する。f(1)=1である場合(ステップS240でYES)、ステップS250へ進み、レジスタの内容に2を加える。一方、f(1)=0である場合(ステップS240でNO)、ステップS260に進む。
次に、ステップS260で、図11の「2」の位置の画素の状態が黒画素であるか否かを判定する。つまり、f(2)=1であるか否かを判定する。f(2)=1である場合(ステップS260でYES)、ステップS270へ進み、レジスタの内容に4を加える。一方、f(2)=0である場合(ステップS260でNO)、ステップS280に進む。
次に、ステップS280で、図11の「3」の位置の画素の状態が黒画素であるか否かを判定する。つまり、f(3)=1であるか否かを判定する。f(3)=1である場合(ステップS280でYES)、ステップS290へ進み、レジスタの内容に8を加える。一方、f(3)=0である場合(ステップS280でNO)、ステップS300に進む。
ステップS300で、レジスタの保持する値(処理番号)に応じた処理を実行する。
これにより、レジスタの内容は、図11に示した「0」、「1」、「2」、「3」の画素位置の各画素の状態に応じて、0〜15の値を取り得る。これらは、その値に応じてそれぞれ図12の(ケース(case)0)〜図27(ケース15)に示されている。
即ち、ステップS300で、図12〜図27に示されるように定義された輪郭点とその輪郭点情報とをそれぞれのケースに応じて抽出する。
このように、端点間毎輪郭(周回)ベクトル抽出部3110は、1回のラスタ走査を行なう。これにより、入力される4−連結に細線化された2値画像(線図形)から、それらを構成する端点や交点間をつなぐ独立した線や閉曲線毎に対応するベクトル列の集まり(「端点間毎線素粗輪郭ベクトル」)とその輪郭点情報を抽出し、その処理結果を出力する。
これらは、例えば、図32に示す形式として出力される。同図における第一輪郭や第二輪郭、第a輪郭といったまとまりとして各線素から抽出されたベクトル列を示し、それらの各輪郭点毎に輪郭点情報が付与された形式となっている。
ここで、図35に線図形の入力例と、これから抽出される端点間毎輪郭(周回)ベクトル、即ち、端点間毎線素粗輪郭ベクトル(太めに表現されたベクトル列)と輪郭点情報を示す。
次に、端点間毎線芯(周回)ベクトル生成部3120の動作を、図36を用いて説明する。
図36は本発明の実施形態1の端点間毎線芯(周回)ベクトル生成部の動作を示すフローチャートである。
尚、この処理は、画像処理装置のCPU519の制御によって実現される。
まず、ステップS1000で、端点間毎輪郭(周回)ベクトル抽出部3110より端点間毎輪郭(周回)ベクトルを入力する。ここで、端点間毎輪郭(周回)ベクトルは、線図形の端点(交点)位置に対応する部分から抽出されたものか否か等を表す情報(付与情報)を含む、端点や交点間をつなぐ独立した線や閉曲線毎のそれぞれに対応したベクトル列の集まりである。このベクトル列の集まりは、端点間毎線素粗輪郭ベクトルである。
次に、ステップS1100で、ステップS1000で入力した図32に示す形式の端点間毎輪郭(周回)ベクトル群から、その中に含まれる1つのベクトル列(図32の第k輪郭(1≦k≦a))を当面の処理対象として入力する。ここでは、ステップS1100が実行されるたびに順次昇順に定める。
次に、ステップS1200で、ステップS1100で定めたベクトル列(総点数pとする)の中の1つのベクトルの輪郭点(第q点(1≦q≦p))を当面の処理対象としてm1つのベクトルを入力する。ここでは、ステップS1200が実行されるたびに順次昇順に定める。
次に、ステップS1300で、ステップS1200で定めた輪郭点の輪郭点情報を参照して、この輪郭点を終点とするベクトルか、もしくは、この輪郭点を始点とするベクトルのいずれかが左向き(LEFT)か否かを判定する。左向きである場合(ステップS1300でYES)、ステップS1400に進む。一方、左向きではない場合(ステップS1300でNO)、ステップS1500に進む。
ステップS1400で、輪郭点(座標値(x,y)=(2*i,2*j)とする)のy座標値を1減じて(副走査方向に半画素分原点側にずらして)、つまり、y=2*i−1を実行して、ステップS1600に進む。
ステップS1500で、輪郭点のy座標値を1増やして(副走査方向に半画素分原点とは反対側にずらして)、つまり、y=2*i+1を実行して、ステップS1600に進む。
ステップS1600で、輪郭点の輪郭点情報を参照して、この輪郭点を終点とするベクトルか、もしくは、この輪郭点を始点とするベクトルのいずれかが上向き(UP)か否かを判定する。上向きである場合(ステップS1600でYES)、ステップS1700に進む。一方、上向きでない場合(ステップS1600でNO)、ステップS1800に進む。
ステップS1700で、輪郭点のx座標値を1増やして(主走査方向に半画素分原点とは反対側にずらして)、つまり、x=2*i+1を実行して、ステップS1900に進む。
ステップS1800で、輪郭点のx座標値を1減じて(主走査方向に半画素分原点側にずらして)、つまり、x=2*i−1を実行して、ステップS1900に進む。
ステップS1900で、ステップS1100で定めたベクトル列内の全ての輪郭点に対する処理が終了したか否かを判定する。終了している場合(ステップS1900でNO)、ステップS2000へ進む。一方、終了していない場合(ステップS1900でYES)、同ベクトル列内の次の輪郭点に、ステップS1300からステップS1900までの処理を施すべくステップS1200にもどる。
ステップS2000で、ステップS1000で入力した端点間毎線素粗輪郭ベクトル中の全てのベクトル列の処理が終了したか否かを判定する。終了している場合(ステップS1900でYES)、ステップS2100へ進む。一方、終了していない場合(ステップS1900でNO)、次のベクトル列に対して、ステップS1200からステップS2000までの処理を施すべくステップS1100へ戻る。
ステップS2100で、ステップS1000で入力した端点間毎線素粗輪郭ベクトルに対する処理結果を出力する。
尚、ステップS1300やステップS1600での判定は、上述の図28における「値」欄の数値を輪郭点情報としている。そのため、これらの数値を2進数で表現した際のLSBをbit0、MSBをbit7とすると、ステップ1300ではbit2(図28では「右向(0)左向(1)」欄)を調べて、0なら右向き、1なら左向きと判定することができる。ステップS1600では、bit3(図28では「上向(0)下向(1)」欄)を調べて、0なら上向き、1なら下向きと判定することができる。
このようにして、端点間毎輪郭(周回)ベクトル抽出部3110から端点間毎輪郭(周回)ベクトルを入力する。そして、それに含まれる付与情報を利用して、一画素幅の幅を持った輪郭(周回)ベクトルの各ベクトルの位置を、それぞれ半画素分ずつ相応する方向へ予め定める規則により微調整する。これにより、幅0に線芯化された端点間毎線芯(周回)化済ベクトルとする。これらは、端点間毎線芯(周回)化済ベクトルもまた、例えば、図32に示す形式として表現でき、実施形態1では、この形式で出力されるものとする。
ここで、上述の図35に、端点間毎線素粗輪郭ベクトル(太めに表現されたベクトル列)と輪郭点情報から幅0に線芯化された端点間毎線芯(周回)化済ベクトル(入力2値画像の画素上の位置に細めに描かれたベクトル列)の例を示す。
次に、端点間毎補助ベクトル入り(周回)ベクトル生成部3210の動作を説明する。
端点間毎補助ベクトル入り(周回)ベクトル生成部3210は、次工程である端点間毎補助ベクトル入り(周回)ベクトル平滑部3220により平滑化(関数近似)処理される際に、補助ベクトルを挿入する。具体的には、端点部分に相当するベクトルが、他のベクトルと統合されて端点位置が不明にならぬように、その端点部分に相当する部分が端点として保存される(ベジェ曲線のアンカーポイントとなる)ように補助ベクトルを挿入する。
加えて、次々工程である端点間毎平滑化済ベクトル同定(非周回化)部3230で、端点間毎補助ベクトル入り(周回)ベクトル平滑部3220から得る平滑化(関数近似)済端点間毎補助ベクトル入り(周回)ベクトルから、始端点・終端点情報をも生成する。具体的には、各平滑化済の(周回)ベクトル毎にそれぞれの始端点と終端点となるベクトルを同定して、始端点と終端点の間のみの部分の非周回型のベクトル列を生成するために用いられる、各平滑化済の(周回)ベクトル毎の始端点・終端点情報をも生成する。
実施形態1では、端点間毎補助ベクトル入り(周回)ベクトル平滑部3220は、特許文献5に開示される方法及び装置で構成されるものとする。このように構成することで、これまでの、必ずしも細線化されていない2値画像の輪郭(アウトライン)ベクトル用の平滑化手段を用いて、太さを意識せずに、細線のみで描かれている線画としてのベクトルの平滑化まで構成することが可能となる。
特許文献5によれば、ベクトル平滑化(関数近似)の流れは、以下の如きである。まず、粗輪郭データと称して、2値のラスタ画像のデータより抽出された、水平ベクトル、垂直ベクトルが交互に並ぶ構成となる輪郭データを入力とする。そして、粗輪郭上の線分より接線線分を抽出する。抽出された接線線分よりアンカーポイントを抽出し、抽出されたアンカーポイント間の線分により構成されるグループを2次もしくは3次ベジェ曲線、及び直線をあてはめ、あるいは、ベジェ曲線近似を行い、3次もしくは2次のベジェ曲線により置き換える。
ここで、アンカーポイントとして定めた点をもとに、アンカーポイント間にある輪郭点を1つのグループとして関数近似してい方法は、関数近似法としての基本的な手法である。また、アンカーポイントは、その間が、2次もしくは3次ベジェ曲線及び直線のいずれに関数近似されたとしても、アンカーポイント自体の位置(座標値)は、変化しないという特徴をもつ。
そこで、端点間毎補助ベクトル入り(周回)ベクトル生成部3210では、端点間毎線芯(周回)化済ベクトルの端点のそれぞれを、一方を始端点と他方を終端点とする。また、それらがともにアンカーポイントとなるように始端点と終端点間に補助ベクトル(補助輪郭点)を挿入していく処理をする。
特許文献5によれば、接線線分とするベクトルの抽出条件として、
(1)注目するベクトルの前後のベクトルの向きが互いに逆向きであるもの
(2)抽出済みの主接線線分に隣接し、ベクトルの長さL1がL1≧θ4を満たすもの
(3)ベクトルの長さL2がL2≧θ5を満たすもの
等の条件が開示されている。
また、アンカーポイントの抽出に関して、抽出された接線線分上に新たな点を抽出し、それをアンカーポイントとする。アンカーポイントは、接線線分の端2つに対しそれぞれ抽出される。よって、1つの接線線分に対し2つのアンカーポイントが抽出されるが、その2つのアンカーポイントが一致した場合には、1つのアンカーポイントのみ抽出されることになる。
2つのアンカーポイントが抽出される場合は、アンカーポイントに挟まれた部位は自動的にオブジェクト上の直線となる。接線線分上の1つの端点に対するアンカーポイント抽出方法としては、注目する接線線分であるベクトルに隣接するベクトルが接線線分であれば、この隣接する側の端点をアンカーポイントとする等が開示されている。
そこで、端点間毎補助ベクトル入り(周回)ベクトル生成部3210は、点間毎線芯(周回)化済ベクトルの端点のそれぞれを、一方を始端点と他方を終端点とし、かつ、それらがともにアンカーポイントとなるように、補助点を挿入する。
ここで、図37(a)を用いて、始端点としたい端点P0の直前に挿入する補助輪郭点P-1の挿入方法を説明する。
補助輪郭点P-1をこれを始点とする補助ベクトルV-1が、始端点としたい端点P0の直後の輪郭点P1を始点とするベクトルV1と逆向きになるように、補助輪郭点P-1を定める。このようにすれば、上述の特許文献5の接線線分の抽出条件の(1)から、ベクトルV0が接線線分となる。
また、補助輪郭点P-1をこれを始点とする補助ベクトルV-1が上述の特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さを持つようにする。このようにすれば、補助ベクトルV-1もまた接線線分となる。つまり、補助ベクトルV-1とベクトルV0とが共に接線線分となる。これにより、上述のアンカーポイント抽出方法の「注目する接線線分であるベクトルに隣接するベクトルが接線線分であれば、この隣接する側の端点をアンカーポイントとする」という条件から、始端点としたい端点P0をアンカーポイントにできる。
次に、図37(b)を用いて、終端点としたい端点Pnの直後に挿入する補助輪郭点Pn+1の挿入方法を説明する。
補助輪郭点Pn+1をこれを終点とする補助ベクトルVnが、終端点としたい端点Pnの直前の輪郭点Pn-1を終点とするベクトルVn-2と逆向きになるように、補助輪郭点Pn+1を定める。このようにすれば、上述の特許文献5の接線線分の抽出条件の(1)から、ベクトルVn-1が接線線分となる。また、補助輪郭点Pn+1をこれを終点とする補助ベクトルVnが上述の特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さを持つようにする。
このようにすれば、補助ベクトルVnもまた接線線分となる。つまり、補助ベクトルVn-1とベクトルVnとが共に接線線分となる。これにより、上述のアンカーポイント抽出方法の「注目する接線線分であるベクトルに隣接するベクトルが接線線分であれば、この隣接する側の端点をアンカーポイントとする」という条件から、終端点としたい端点Pnをアンカーポイントにできる。
このように、始端点と終端点がアンカーポイントになるように、それぞれ、始端点の直前への挿入点と終端点の直後への挿入点を定める。その後、これらの挿入点が水平ベクトルと垂直ベクトルの連続で連結され、始端点から終端点までの本来の輪郭点列と終端点の直後から始端点の直前までの挿入点をへて再び始端点につながる一連の輪郭点列を生成する。そして、この一連の輪郭点列の中で、どれが、始端点と終端点であるかを同定するための情報とを加えた始端点・終端点情報を生成する。
実施形態1では、輪郭点列中の始端点の座標値と終端点の座標値そのものを改めて別途生成することで、始端点・終端点情報とする。
次に、端点間毎補助ベクトル入り(周回)ベクトル生成部3210の動作について、図38を用いて説明する。
図38は本発明の実施形態1の端点間毎補助ベクトル入り(周回)ベクトル生成部の動作を示すフローチャートである。
尚、この処理は、画像処理装置のCPU519の制御によって実現される。
まず、ステップS3000で、端点間毎線芯(周回)ベクトル生成部3120から幅0に線芯化された端点間毎線芯(周回)化済ベクトルを入力する。
次に、ステップS3100で、ステップS3000で入力した図32に示す形式の端点間毎線芯(周回)化済ベクトルから、その中に含まれる1つのベクトル列(図32の第k輪郭(1≦k≦a))を当面の処理対象として順に定める。
次に、ステップS3200で、ステップS3100で定めたベクトル列(総点数pとする)の中の1つのベクトルの輪郭点(第q点(1≦q≦p))として、1つのベクトルを入力する。そして、ステップS3300で、始端点が見つかるまでの間、ステップS3200を実行するたびに、第1点から第p点までを昇順に順次1点ずつ当面の処理対象として定める。
次に、ステップS3300で、ステップS3200で定めた輪郭点の輪郭点情報を参照して、この輪郭点が始端点とすべきベクトルであるか否かを判定する。この輪郭点が始端点とすべきベクトルである場合(ステップS3300でYES)、ステップS3600に進む。一方、この輪郭点が始端点とすべきベクトルでない場合(ステップS3300でYES)、ステップS3400に進む。
ここで、当該輪郭点が始端点とすべきベクトルであるか否かは、その輪郭点の輪郭点情報を参照して行う。具体的には、図28中のUP_RIGHT_LT(03H)、DOWN_LEFT_RB(0FH)、LEFT_UP_BL(17H)、RIGHT_DOWN_TR(1BH)のいずれかであるか否かをもってその判定を行う。これらは、図28の「値」の数値のbit1とbit0が共に1であるか否かを調べることで実現することもできる。
ステップS3400で、ステップS3100で入力した端点間毎線芯(周回)化済ベクトルの中に含まれる1つのベクトル列中の全てのベクトルの処理が終了したか否かを判定する。終了していない場合(ステップS3400でNO)、当該ベクトル列中の次のベクトルに対してステップS3200の判定を施すべくステップS3200へ戻る。一方、終了している場合(ステップS3400でYES)、ステップS3100で入力したベクトル列中には、始端点候補が存在しなかった場合であり、ステップS3500へ進む。
ステップS3500で、当該ベクトル列は端点のない閉ループである旨を示す閉ループマーカを該ベクトル列に対して付与した上で、それに加えて、該ベクトル列中の一連の各ベクトルをそのまま出力する。
この時のデータ形式を、図39(a)に示す。同図において、対象としたベクトル列は第s番目である場合で、そのベクトル列中にはv個のベクトルが含まれている場合の例である。尚、閉ループマーカとしては、端点座標としては、本来ありえない(−1,−1)の座標値を2点分、始端点・終端点情報として付与して出力している。ステップS3500の処理を終了すると、ステップS4200へ進む。
一方、ステップS3600で、輪郭点を始端点として登録し、かつ、その輪郭点を始端点〜終端点間の1ベクトルとして出力して、ステップS3700へ進む。
ステップS3700で、ステップS3200と同様に、ステップS3100で定めたベクトル列(総点数pとする)の中の1つのベクトルの輪郭点(第q点(1≦q≦p))とする。そして、ステップS3800で終端点が見つかるまでの間、ステップS3700を実行するたびにステップS3200で定められた輪郭点以降の点から第p点に向けて昇順に順次1点ずつ当面の処理対象として定め、ステップS3800に進む。
次に、ステップS3800で、ステップS3700で定めた輪郭点の輪郭点情報を参照して、この輪郭点が終端点とすべきベクトルであるか否かを判定する。この輪郭点が終端点とすべきベクトルである場合(ステップS3800でYES)、ステップS4000に進む。一方、この輪郭点が終端点とすべきベクトルでない場合(ステップS3800でNO)、ステップS3900に進む。
ここで、当該輪郭点が終端点とすべきベクトルか否かは、その輪郭点の輪郭点情報を参照して行う。具体的には、、図28中のUP_RIGHT_TL(01H)、DOWN_LEFT_BR(0DH)、LEFT_UP_LB(15H)、RIGHT_DOWN_RT(19H)のいずれかであるか否かをもってその判定を行う。これらは、図28の「値」の数値のbit1とbit0がそれぞれ0と1であるか否かを調べることで実現することもできる。
ステップS3900で、輪郭点を始端点〜終端点間の1ベクトルとして出力して、ステップS3700へ戻る。
ステップS4000で、輪郭点を終端点として登録し、かつ、その輪郭点を始端点〜終端点間の1ベクトルとして出力して、ステップS4100へ進む。
ステップS4100で、当該ベクトル列の始端点と終端点の両方が定まり、かつ、始端点〜終端点間の一連の各ベクトルも出力された状態となっている。ここでは、終端点〜始端点の間に挿入される一連の補助ベクトルを生成する。尚、ステップS4100の内容の詳細は、図40のフローチャートと図41及び図42を用いて追ってさらに説明を加える。ステップS4100の処理を終了すると、ステップS4200へ進む。
ステップS4200で、ステップS3000で入力した端点間毎線芯(周回)化済ベクトル中の全てのベクトル列の処理が終了したか否かを判定する。終了している場合(ステップS4200でYES)、ステップS4300へ進む。一方、終了していない場合(ステップS4200でNO)、次のベクトル列に対してステップS3200からステップS4200までの処理を施すべくステップS3100へ戻る。
ステップS4300で、ステップS3000で入力した端点間毎線芯(周回)化済ベクトルに対する処理結果を出力する。
図39(b)に、対象としたベクトル列に、始端点・終端点の両方が定まり、かつ、始端点〜終端点間の一連の各ベクトルと終端点〜始端点の間に挿入される一連の補助ベクトルを生成した場合に出力されるそのベクトル列に対する出力例を示す。
同図において、対象としたベクトル列は第u番目である場合で、そのベクトル列中には始端点と終端点自身も含めて始端点〜終端点間の一連の各ベクトルがt個あり、かつ、終端点〜始端点の間に挿入される一連の補助ベクトルがr個ある場合の例である。ここでは、第1点は始端点そのものであり、第t点は終端点そのものとなっている。
次に、図38のステップS4100の処理の詳細について、図40を用いて説明する。
図40は本発明の実施形態1のステップS4100の処理の詳細を示すフローチャートである。ここでは、当該ベクトル列の始端点と終端点の両方が定まり、かつ、始端点〜終端点間の一連の各ベクトルも出力された状態となっており、終端点〜始端点の間に挿入される一連の補助ベクトルを生成することが、ステップS4100の処理内容である。
まず、ステップS4110で、図37(a)を用いて説明したように、始端点としたい端点P0の直前に挿入する補助輪郭点P-1の座標値を算出する。即ち、補助輪郭点P-1をこれを始点とする補助ベクトルV-1が、始端点としたい端点P0の直後の輪郭点P1を始点とするベクトルV1と逆向きになるように定める。また、補助輪郭点P-1をこれを始点とする補助ベクトルV-1が、上述の特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さ(例えば、10画素長以上)を持つように補助輪郭点P-1を定める。
次に、ステップS4120で、図37(b)を用いて説明したように、終端点としたい端点Pnの直後に挿入する補助輪郭点Pn+1の座標値を算出する。即ち、補助輪郭点Pn+1をこれを終点とする補助ベクトルVnが、終端点としたい端点Pnの直前の輪郭点Pn-1を終点とするベクトルVn-2と逆向きになるように定める。また、補助輪郭点Pn+1をこれを終点とする補助ベクトルVnが、上述の特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さ(例えば、10画素長以上)を持つように補助輪郭点Pn+1を定める。
ステップS4130で、算出した補助輪郭点P-1を始点とする補助ベクトルV-1と、算出した補助輪郭点Pn+1を終点とする補助ベクトルVnが、共に水平ベクトルであるか否かを判定する。あるいは、共に垂直ベクトルであるか否かを判定する。いずれかの条件を満足する場合(ステップS4130でYES)、ステップS4140に進む。一方、いずれかの条件も満足しない場合(ステップS4130でNO)、ステップS4160に進む。
ステップS4140での処理では、V-1とVnが、共に水平ベクトルあるいは共に垂直ベクトルである場合であり、この場合の例を図41に示す。ステップS4140では、終端点としたい端点Pnから2点目の補助輪郭点Pn+2を算出する。具体的には、PnからみてP-1から遠くなる方向に、上述の特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さ(例えば、10画素長以上)を持つように補助輪郭点Pn+2を定める。
ステップS4150の処理も、ステップS4140と同様に、V-1とVnが、共に水平ベクトルあるいは共に垂直ベクトルである場合である。ステップS4150では、終端点としたい端点Pnから3点目の補助輪郭点Pn+3を算出する。具体的には、水平ベクトルと垂直ベクトルが交互につながる形式で、Pn+2とP-1を連結する様に、端点Pnの3点後の補助輪郭点である点Pn+3を定める。ここで、補助輪郭点Pn+3は、始端点としたい端点P0の2点前の補助輪郭点でもある。そして、一連の処理を終了すると、図38のフローチャートのステップS4200に戻る。
一方、ステップS4160での処理では、V-1とVnの、どちらか一方が水平ベクトル、他方は垂直ベクトルである場合であり、この場合の例を図42に示す。ステップS4160では、終端点としたい端点Pnから2点目の補助輪郭点Pn+2を算出する。具体的には、Pn+1からみてP-1から遠くなる方向に、特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さ(例えば、10画素長以上)を持つように補助輪郭点Pn+2定める。
ステップS4170の処理も、ステップS4160と同様に、V-1とVnが、どちらか一方が水平ベクトル、他方は垂直ベクトルである場合である。ステップS4170では、終端点としたい端点Pnから3点目の補助輪郭点Pn+3を算出する。具体的には、Pn+2からみてP-1から遠くなる方向に、特許文献5の接線線分の抽出条件の(3)を満たすように十分な長さ(例えば、10画素長以上)を持つように補助輪郭点Pn+3を定める。
ステップS4180の処理も、ステップS4160及びステップS4170と同様に、V-1とVnが、どちらか一方が水平ベクトル、他方は垂直ベクトルである場合である。ステップS4180では、終端点としたい端点Pnから4点目の補助輪郭点Pn+4を算出する。具体的には、水平ベクトルと垂直ベクトルが交互につながる形式で、Pn+3とP-1を連結する様に、終端点としたい端点Pnの4点後の補助輪郭点である点Pn+4を定める。ここで、補助輪郭点Pn+4は、始端点としたい端点P0の2点前の補助輪郭点でもある。そして、一連の処理が終了すると、図38のフローチャートのステップS4200に戻る。
このようにして、端点間毎補助ベクトル入り(周回)ベクトル生成部3210は、端点間毎線芯(周回)ベクトル生成部3210より得られる端点間毎線芯(周回)化済ベクトルを入力する。そして、端点間毎補助ベクトル入り(周回)ベクトル平滑部3220で処理される際に、端点部分に相当するベクトルが、他のベクトルと統合されて端点位置が不明にならぬように補助ベクトルを挿入する。つまり、端点部分に相当する部分が端点として保存される(ベジェ曲線のアンカーポイントとなる)ように補助ベクトルを挿入することにより、端点間毎補助ベクトル入り(周回)ベクトルを生成する。
加えて、補助ベクトルを挿入された各端点間毎補助ベクトル入り(周回)ベクトルのそれぞれに対し、どのベクトルが端点部にあたるかを明示する始端点・終端点情報をも生成する。このようにして生成された処理結果は、例えば、図32に示す形式の各輪郭データ部分のそれぞれを図39(a)や図39(b)の各ベクトル列データに置き換えた形として表現でき、実施形態1では、この形式で出力されるものとする。
尚、端点間毎補助ベクトル入り(周回)ベクトル平滑部3220は、先述のように、特許文献5に開示される方法及び装置で構成できる。その出力は、端点部分に相当する部分が端点として保存された状態で各(周回)ベクトル毎に平滑化(関数近似)された平滑化(関数近似)済端点間毎補助ベクトル入り(周回)ベクトルとして生成される。そして、次工程の処理をする端点間毎平滑化済ベクトル同定(非周回化)部3230に出力される。この際、端点間毎補助ベクトル入り(周回)ベクトル生成部3210で生成された始端点・終端点情報もそのまま次工程の処理をする端点間毎平滑化済ベクトル同定(非周回化)部3230に出力する。
端点間毎平滑化済ベクトル同定(非周回化)部3230は、端点間毎補助ベクトル入り(周回)ベクトル平滑部3220より平滑化(関数近似)済端点間毎補助ベクトル入り(周回)ベクトルを入力する。また、端点間毎補助ベクトル入り(周回)ベクトル生成部3210より始端点・終端点情報を入力する。更に、各平滑化済の(周回)ベクトル列毎に、そのベクトル列内の各ベクトルの座標値を、それぞれ始端点と終端点となる輪郭点の座標値と比較していくことにより同定する。そして、始端点と終端点の間のみの部分の非周回型のベクトル列を生成して端点間毎平滑化済(非周回)ベクトルとする。そして、次工程である領域別ベクトル生成部40に出力する。
尚、生成された処理結果は、図32に示す形式に準じた形として表現することができる、但し、各輪郭点はそれまでの輪郭点情報の部分をアンカーポイントであるのか否かの属性情報としての付帯情報をもつ形をとる。ここで、同定された始端点を第1点とし、終端点が同線素ベクトルの最終点として生成することとする。
即ち、図32の第一輪郭の部分が、第一線素のデータ部分となっており、第1点が第一線素の始端点で、第b点が第一線素の終端点となっているといった形式である。実施形態1では、このような形式で出力されるものとする。
このようにして、図10のフローチャートにおける、ステップS50からステップS80のループでは、交点と交点の間を繋ぐ境界線画像毎に、順次に端点間ベクトルが生成されていく。そして、全ての境界線について端点間ベクトル化の処理を終了すると、ステップS100において、領域別のベクトルを生成する領域別ベクトル生成処理を実行する。
即ち、図43に示すような交点と交点の間を繋ぐ境界線が存在するときに、図44の(a)〜(h)に示されるように、1本ずつ、順次に交点と交点の間を繋ぐ境界線画像が生成されては、端点間ベクトルが生成されて行く。
図45は、全ての境界線について端点間ベクトル化の処理を終了したものを、画像として再描画した形で模式的に示したものである。図46は、図45に画像として再描画した形で模式的に示した端点間毎平滑化済(非周回)ベクトルの全てを其々のベクトルの端点部を其々の元になった交点と交点の間を繋ぐ境界線画像の各交点を明示した形で画像として再描画し模式的に示したものである。
ステップS30で抽出された交点やステップS50で生成された交点と交点の間を繋ぐ境界線画像の各交点は、ステップS50〜ステップS80の処理を終了しても、端点間毎平滑化済(非周回)ベクトルの各端点としてその位置と位置関係が保たれている。この意味で、ステップS30で抽出された交点は、ステップS50〜ステップS80の処理においては、端点として踏襲されて処理が進められていく。
ステップS100で、領域別ベクトル生成部40の処理内容(領域別ベクトル生成処理)を実行する。即ち、端点間ベクトル情報と領域分割処理によって得られる各領域の色情報に基づき、各領域にそれを取り囲む関数近似(平滑化)済端点間ベクトル列とその内部色とでなる領域ベクトルに変換する。
上述のように、領域別ベクトル生成部40は、領域境界ベクトル列同定部410と領域属性付与部420とで構成することが可能である。
ここで、ステップS100の領域別ベクトル生成処理の詳細について、図47を用いて説明する。
図47は本発明の実施形態1の図10のステップS100の領域別ベクトル生成処理の詳細を示すフローチャートである。
まず、ステップS1010で、注目領域番号を入力する。即ち、ステップS12で得られた各領域の中のいずれか1つの領域の領域番号を入力する。これは、例えば、ステップS13で、RAM520上に生成された、図2に示す各領域の領域番号とそれら各領域の色情報(属性情報)の領域テーブル201を参照して、各領域の領域番号を入力する。
次に、ステップS1020で、ステップS1010で入力した領域番号に関連する交点(端点:注目領域関連交点)を、ステップS31で生成した図6の交点テーブル601を参照して入力する。例えば、ステップS1010で入力した領域番号が2の場合は、図6の交点テーブル601中の隣接領域番号欄に領域番号2を含む交点は、C:(22,40)、E:(38,40)、F:(44,24)の3点となる。
次に、ステップS1030で、ステップS70で生成した端点間毎補助ベクトル入り(周回)ベクトルの内、ステップS1020で入力した交点を端点とするベクトル(領域境界ベクトル)を同定する。これは、図32に示す形式に準じた形としてのベクトルデータの始端点を表す第1点と終端点を表す最終点との組み合わせが、ステップS1020で抽出した交点の座標値と一致するものを選出することで実現することができる。
図6の交点テーブル601のデータの場合には、図46で表現されたベクトルデータの中で、3本の関数近似(平滑化)済端点間ベクトルが、注目領域及び領域境界ベクトル列として同定される。具体的には、1つ目は、FとCを結ぶベクトル(図43の(1)から得られる関数近似(平滑化)済端点間ベクトル)である。2つ目は、CとEを結ぶベクトル(図43の(2)から得られる関数近似(平滑化)済端点間ベクトル)である。3つ目は、EとFを結ぶベクトル(図43の(3)から得られる関数近似(平滑化)済端点間ベクトル)である。
次に、ステップS1040で、ステップS1030で同定した注目領域の領域境界ベクトル列に対して、対応する領域の色情報(属性情報)を付与する。この処理は、RAM520上に生成された、図2に示す各領域の領域番号とそれら各領域の色情報(属性情報)の領域テーブル201を参照する。そして、この参照により、ステップS1010で入力した領域番号に相当する領域の色情報(属性情報)を獲得して、その属性情報を注目領域の領域境界ベクトル列に対して付与することで実現される。
次に、ステップS1050で、全ての領域番号に対してステップS1010〜ステップS1040の処理が終了したか否かを判定する。終了していない場合(ステップS1050でNO)、ステップS1010に戻る。一方、終了している場合(ステップS1050でYES)、図10のフローチャートのステップS100の領域別ベクトル生成処理を終了する。
尚、ステップS1050の判定は、例えば、図2の領域テーブル201における全ての領域番号に対する処理を終了したか否か(領域テーブル201の先頭から処理を始め、最後のデータまで処理をすすめたか否か)で判定可能である。
このようにして、実施形態1における、カラー画像、とりわけ、イラスト画像のベクトル化の一連の流れが構成される。
ここで、図48は、ステップS100で得られる、各領域毎にそれを取り囲む関数近似(平滑化)済端点間ベクトル列とその内部色とでなる領域ベクトルを、これらを画像として再生した形で模式的に示したものである。
以下に、上記説明の途中で、後述するとした、領域分割処理、境界点抽出処理、交点抽出処理、交点抽出処理の詳細について説明する。
●領域分割処理
ステップS12の領域分割処理について、図49を用いて説明する。
図49は本発明の実施形態1のステップS12の領域分割処理の詳細を示すフローチャートである。
ステップS1201で、処理対象画像に対して、クラスタリング処理を行う。この処理では、まず、ラスタスキャンしたスタートの画素により、最初のクラスタを生成する。そして、次の画素に対して、全てのクラスタ間との乖離度を画素の特徴に基づいて算出する。乖離度が低いほど、画素とクラスタとの特徴が近いと考えられる。つまり、画素とクラスタは、同一とみなせる特徴(色)を持っていると考えられる。
ここで、ある画素iの特徴とは、その画素の画素値(Ri,Gi,Bi)である。また、あるクラスタcの特徴とは、そのクラスタに属する全ての画素の画素値の平均値(Ri,Gi,Bi)である。乖離度とは、例えば、画素iとクラスタcの特徴値間の色空間上でのユークリッド距離√{(Rc−Ri)2+(Gc−Gi)2+(Bc−Bi)2}である。
ここでは、乖離度の計算にRGB値を用いるが、これに限定されず、他のカラー空間の情報、あるいは、カラー以外の情報を、画素の特徴量として使うことも可能である。そして、乖離度の値が最小となるクラスタ番号を記録し、この乖離度を事前に設定された閾値と比較する。閾値未満である場合は、対象画素を記録されたクラスタに属させる。閾値以上である場合は、対象画素により新たなクラスタを生成する。この処理は全ての画素の処理が終わるまで繰り返し実行する。
次に、ステップS1202で、クラスタリング処理結果に基づき、領域統合処理を行う。この領域処理では、まず、分離したい領域数の目標値を入力する。本発明では、この目標値は、何色くらいに分離するかの目安となる。そして、現在のクラスタの数を計数し、現在のクラスタの数を領域数の目標値と比較する。現在のクラスタ数が目標値以上である場合、クラスタの統合を行う。領域統合処理では、各クラスタ間の乖離度を計算し、その中から一番乖離度の低い2つのクラスタを1つに統合する。領域統合処理は、現在のクラスタ数は目標値未満になるまで繰り返し実行する。
次に、ステップS1203で、領域統合処理結果に基づき、ノイズ領域判定処理を行う。このノイズ領域判定処理では、まず、領域分割処理結果をラベリングし、そして、各ラベル領域の面積を計算する。ラベル領域の面積は、対象領域内の画素数である。ラベル領域の面積は、ある閾値未難である場合は、この領域をノイズ領域と判定する。
そして、ステップS1204で、このノイズ領域に含まれた各画素毎に、周囲に隣接する領域との乖離度を計算し、処理対象画素を一番乖離度の低い領域に属させるノイズ領域再処理を行う。ノイズ領域判定処理は、全てのラベル領域が処理済になるまで繰り返し実行する。文書画像の領域分離後のグラフィックス領域はより圧縮されて保存されるので、このノイズ領域判定処理とノイズ領域再処理は、圧縮の影響により発生したノイズへの対応策である。
以上のようにして、カラー画像を同一とみなせる一貫した特徴(乖離度が閾値以上のもの)を有する、画像上で連結している其々の領域の集まりに分割することが可能となる。
●境界点抽出処理
ステップS21の水平方向境界点抽出処理とステップS23の垂直方向境界点抽出処理とステップS25の斜め方向境界点抽出処理について、図3を参照して説明する。
まず、領域分割の結果を上下順、水平方向(→)に走査し、水平方向の各走査線上のある領域から他の領域への切り替わりになる画素を水平方向境界点として抽出する。図3では、画像は(背景)領域1、領域2、領域3、領域4、そして、領域5に分割される例が示されている。
図3のように、画像の一番上から水平方向の走査により、第10行目のB点で領域番号は1から2に変わるので、Bを水平方向境界点として記録する。同様、下に行く内に、第14行目のAも水平境界点として記録する。第22行目のC、第38行目のE、第44行目のF、第64行目のH、I等も順番に水平方向境界点として記録する。
そして、領域分割の結果を左右順、垂直方向(↓)に走査し、垂直方向の各走査線上のある領域から他の領域への切り替わりになる画素を垂直方向境界点として抽出する。
図3のように、垂直方向の走査により、第10列目のD、第15列目のA、第20列目のB、第24列目のF、第40列目のE、C、第58列目のH、第66列目のI等も順番に垂直方向境界点として記録する。
そして、領域分割の結果を上下順、斜め方向に走査し、斜め方向の各走査線上のある領域から他の領域への切り替わりになる画素を斜め方向境界点として抽出する。
図3のように、斜め方向の走査により、第14行目、第15列目のA点で領域番号は1から2に変わるので、A点を斜め方向境界点として記録する。同様に、B、J、C、K、E、G、D、H、I等も斜め方向境界点として記録する。
ここでは、説明を簡単にするため、以上の幾つかの境界点のみを例に用いている。図50は、B点とA点の間の境界線を拡大して、この境界線の水平方向と垂直方向と斜め方向境界点の抽出例を示す図である。
図50(a)はAB境界線付近の画素図であり、画素(1)は領域1にある画素で、画素(2)は領域2にある画素である。
図50(b)は水平方向境界点抽出処理により、最初に水平方向に領域番号が変わった所、即ち、ハッチングパターンが付されている画素(1)は水平方向境界点として抽出された結果である。
図50(c)は垂直方向境界点抽出処理により、ハッチングパターンが付されている画素(1)が垂直方向境界点として抽出された結果である。
図50(d)は斜め方向境界点抽出処理により、ハッチングパターンが付されている画素(1)が斜め方向境界点として抽出された結果である。
図50(e)は水平方向境界点抽出、垂直方向境界点抽出、及び斜め方向境界点抽出処理の少なくともいずれか1つ以上により抽出された境界点が、ハッチングパターンが付されている画素(1)で示されている。即ち、このハッチングパターンが付されている画素(1)は、図50(b)と図50(c)と図50(d)のハッチングパターンが付されている画素(1)を合わせたものとなっている。これらの境界点は、4−連結状態となっている。
実施形態1における境界線画像の生成を明確にするため、さらに図51を用いて、水平方向境界点抽出処理と垂直方向境界点抽出処理と斜め方向境界点抽出処理の説明を加える。
図51(a)は、下地領域中に四つの矩形領域からなる図の領域分割の結果である。図51(b)は、図51(a)の境界線周囲の画素をあらわすものである。
図51(c)は、図51(b)からハッチングパターンが付加された画素を水平方向境界点として抽出した水平境界点抽出処理の結果である。
図51(d)は図51(b)からハッチングパターンが付加された画素を垂直方向境界点として抽出した垂直方向境界点の結果である。
図51(e)は図51(b)からハッチングパターンが付加された画素を斜め方向境界点として抽出した斜め方向境界点の結果である。
図51(f)は以上の、水平方向、垂直方向、斜め方向の少なくともいずれか1つ以上の境界点抽出処理により抽出された全ての境界点である。これらの境界点は4−連結である。
●交点抽出処理
ステップS30の交点抽出処理について、図52を用いて説明する。
図52は本発明の実施形態1のステップS30の交点抽出処理の詳細を示すフローチャートである。
ステップS301で、ステップS22、ステップS24及びステップS26それぞれで生成された水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403を参照する。そして、その3つのテーブル401〜403上で2つ以上のテーブルに存在する境界点の内、テーブル401〜403それぞれでの隣接する領域番号とから3つ以上の領域番号を持つ境界点を探索して、それを交点とする。
尚、3つのテーブル上で2つ以上のテーブルに存在する境界点とは、水平境界点かつ垂直方向境界点、水平方向境界点かつ斜め方向境界点、垂直方向境界点かつ斜め方向境界点、あるいは水平方向境界点かつ垂直方向境界点かつ斜め方向境界点のいずれかである。
図5では、図3の領域分割の結果から抽出された境界点から構成された図4の水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403とから交点を抽出する例が示されている。
境界点Cの水平方向の隣接領域番号は2、3で、垂直方向の隣接領域番号は1、2で、斜め方向の隣接領域番号は2、3であるので、C点は2つ以上の境界点テーブルに存在することが分かる。また、C点は3つ以上の隣接領域番号を持っているので、C点を交点として抽出する。
同様に、E、F、Gも交点である。そのほか、A、B、D、H、I等は水平方向の隣接領域番号と垂直方向の隣接領域番号と斜め方向の隣接領域番号が同じなので、2つの領域の間にあることが分かり、交点ではないと判断する。
図53(a)では、図51(a)の領域分割結果からの交点抽出例が示されている。図53(a)は、各方向(水平、垂直及び斜め)の境界点抽出処理それぞれにより抽出された境界点に対する、各方向の境界点テーブル作成処理により生成された各境界点テーブル401〜403である。そして、水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403の3つの境界点テーブル上で、少なくとも2つ以上の境界点テーブルにある境界点毎に線種別にマークしたものである。
図53(b)は図53(a)でマークされた境界点から、さらに3つ以上の互いに相異なる隣接領域番号を持つ境界点を交点として、これらを交点テーブル601としてまとめて記録した結果である。図53(c)は交点となった点を、矩形のグレーパターンで示したものである。
そして、ステップS302で、すべての領域番号の其々が、ステップS301で抽出された各交点の内のいずれかの交点の隣接領域番号に含まれているかどうかを判定する。全ての領域番号が含まれている場合(ステップS302でYES)、全部の領域に交点が存在していると判定し、この交点抽出処理を終了する。
一方、いずれの交点の隣接領域番号にも含まれない領域番号がある場合(ステップS302でNO)、この領域には隣接領域が複数存在することはなく、ステップS301での処理では交点が見つからなかったと判定する。
図3の例では、ステップS301で抽出された交点C、E、F、Gの隣接領域番号に1〜4の領域番号が含まれているので、領域1〜4の境界点には交点が存在する。しかし、領域番号5を隣接領域番号に含む交点は存在しないので、領域5は、他の領域との境界点に交点がない、独立した領域であると判断する。
ステップS303で、ステップS302で判定された交点のない領域に対し、ステップS22、ステップS24及びステップS26で生成された水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403を再び参照する。そして、交点のない領域番号を隣接領域番号に持つ境界点を任意に2点取り、この交点のなかった領域の交点にする。
例えば、図4の水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403とから隣接領域番号5を含み、かつ、2つの隣接領域番号を持つ境界点HとIを取り、領域5の交点にする。これらは、HとIの位置に限らず、例えば、図4の水平方向境界点テーブル401、垂直方向境界点テーブル402及び斜め方向境界点テーブル403を各テーブルの先頭からサーチする。そして、最初に見つかる条件を満たす点(即ち、隣接領域番号5を含む境界点)と、同条件を満たすその他の点の中で、最初に見つかった点から最も離れた点等としても良い。
以上説明したように、実施形態1によれば、画像を領域毎に分割してベクトル化する際には、画素間の特徴によって得られる乖離度に基づいて、画像を分割する。次に、これによって得られる領域に対して、隣接する領域間の境界に関する領域境界情報として、境界の交点を端点とした場合のその端点間を表現するベクトル(端点間ベクトル)の向きを示す輪郭点情報を生成する。
そして、この輪郭点情報に基づいて、分割された領域の境界を構成する端点間ベクトルを同定する。より具体的には、この輪郭点情報によって、各端点間ベクトルの位置関係を把握した上で、分割された領域の境界を構成する端点間ベクトルを同定する。これにより、領域を表現するベクトルデータを正確かつ適切に生成することが可能となる。つまり、従来技術のように、各領域間に隙間や重なりが生じるようなベクトルデータが生成されることを防止することができる。
<実施形態2>
実施形態2では、図54に示すように、全ての境界線画像を全て含む細線画像を生成した後に、この画像から、ベクトル抽出時に交点を改めて検出しつつ、一括してベクトル化する構成をとる。この場合の処理を図55を用いて説明する。
図55は本発明の実施形態2の画像処理装置の動作を示すフローチャートである。
同図において、実施形態1の図10のフローチャートと異なる部分は、次のようになっている。つまり、図10のステップS70の端点間ベクトル生成処理が、ステップS50〜ステップS80の処理ループ内にあるのに対し、図55では、ステップS50〜ステップS80の処理ループ外のステップS90の端点間ベクトル生成処理として存在する点である。即ち、図54で示すように、全ての境界線画像を全て含む細線画像を生成した後に、この画像から、ベクトル抽出時に交点を改めて検出しつつ、一括してベクトル化する構成をとっている。
ステップS90の端点間ベクトル生成処理(実施形態1の図10におけるステップS70の端点間ベクトル生成処理と同様な処理)時においても、実施形態1で説明したように、交点部を端点として抽出する。そのため、このように構成しても、実施形態1と同様に、図45や図46に画像として再描画した形で模式的に示したような、端点間毎平滑化済(非周回)ベクトルの集まりとして生成される。
即ち、ステップS30で抽出された交点や、ステップS50で生成された交点と交点の間を繋ぐ境界線画像における各交点は、ステップS90の端点間ベクトル生成の処理において、端点間毎平滑化済(非周回)ベクトルの交点として同定される。そして、その交点と交点の間を繋ぐ端点間ベクトル群として一括して生成される。以降のステップS100の処理は、実施形態1の場合と全く同様である。
以上説明したように、実施形態2によれば、実施形態1で説明した効果に加えて、境界線画像を全て含む細線画像に対して、それを構成する端点間ベクトル群を生成し、それに基づいて、領域別ベクトルを生成することができる。これにより、より効率的に領域別ベクトルを生成することができる。
<実施形態3>
実施形態1及び2においては、ともに、入力画像の全ての分割領域をベクトル化することを前提に説明してきたが、本発明はこれに限定されるものではない。即ち、画像処理装置の通信I/F4等を経由して、あるいはポインティングデバイス(不図示)のユーザーインタフェース(以下、UIと記す)を用いて、ベクトル化対象とする分割領域を限定して、その領域のみをベクトル化するように構成してももちろん良い。
この場合、図47のフローチャートにおけるステップS1010で、図2の領域テーブル201に記載されている注目領域番号を順番に自動入力するのではなく、通信I/F4やUI等を介して、ユーザの指示に基づき、ベクトル化対象とする分割領域を指定する。そして、この指定された分割領域に限定してベクトル化(領域別ベクトルを生成)するように構成してももちろん良い。例えば、図2〜3のように5つの分割領域がある場合、ユーザが領域2、3、5を指定すると、この指定された領域2,3,5それぞれの領域別ベクトルが生成されることになる。
この場合の処理を図56を用いて説明する。
図56は本発明の実施形態3の画像処理装置の動作を示すフローチャートである。
図56のフローチャートに示すように、ステップS40で、上述のベクトル化対象とする分割領域を限定するためのベクトル化対象領域情報(注目領域番号)を獲得する。そして、このステップS40以外は、実施形態2の図55のフローチャートと同様である。但し、ステップS50〜ステップS100までの処理は、ステップS40で獲得したベクトル化対象領域情報が示す領域のみを、処理対象として一連の動作をする点が、実施形態3の特徴的な構成である。
以上説明したように、実施形態3によれば、実施形態1で説明した効果に加えて、画像中の注目領域を処理対象として指定することが可能になるので、その注目領域に対してのみ、その領域の領域ベクトルを生成することができる。これにより、用途や目的に応じて、より効率的に必要とする領域の領域ベクトルを生成することができる。
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、1つの機器からなる装置に適用しても良い。
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム(実施形態では図に示すフローチャートに対応したプログラム)を、システムあるいは装置に直接あるいは遠隔から供給する。そして、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
プログラムを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスクがある。また、更に、記録媒体としては、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などがある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、その接続先のホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。また、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現される。