JP3133807B2 - 輪郭抽出方法及びその装置 - Google Patents
輪郭抽出方法及びその装置Info
- Publication number
- JP3133807B2 JP3133807B2 JP04012014A JP1201492A JP3133807B2 JP 3133807 B2 JP3133807 B2 JP 3133807B2 JP 04012014 A JP04012014 A JP 04012014A JP 1201492 A JP1201492 A JP 1201492A JP 3133807 B2 JP3133807 B2 JP 3133807B2
- Authority
- JP
- Japan
- Prior art keywords
- vector
- pixel
- raster
- contour
- horizontal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Controls And Circuits For Display Device (AREA)
- Image Analysis (AREA)
Description
た2値画像の輪郭線を抽出する方法とその装置に関する
ものである。
ウトラインフォントを作成する場合は、2値画像文字パ
ターンの輪郭線を抽出し、その輪郭線をベクトル情報形
式で記憶することにより、その文字のアウトラインフォ
ントを作成している。このような2値画像よりの輪郭線
の抽出は、まず2値画像における輪郭線追跡のための追
跡開始点を見付けることから始められる。そして、この
追跡開始点が発見されると、次にこの追跡開始点から順
にその輪郭を追跡していき、追跡の終った輪郭点には次
々に追跡済のマークを付けながら追跡を続行する。こう
して、この追跡が一巡した時点で1つの輪郭点列(輪郭
線)を求めている。このような手順を繰り返し行うこと
により、その画像中のすべての輪郭線を抽出することが
できる。
例を図2に示す。図2において、201は内側に空白部
分202を含む2値画像パターンで、この輪郭線を抽出
する場合を説明する。図2における1つのマス目は1ド
ット(画素)を表わしている。
準点(0,0)からラスタ走査してゆく。
(例えばドット203)が存在する点にぶつかったなら
ば、その点をP0としてドットパターンの輪郭追跡を開
始する。全画面分を探しても点P0が存在しなければ手
順終了。
画素方向に、図3に示す順番で探索を開始する。そし
て、最初に出会った画素が存在する点(図2の場合では
ドット204)を次の輪郭点P1とする。この時、隣接
点が存在しない場合は、その点を孤立点として手順
(2)へ戻る。
行い、図4に示したように、Piに隣接する8方向の近
傍画素に対して、次の輪郭点Pi+1を抽出する。これ
は、直前にマーク付けを行った点401より、Pi(ド
ット402)を中心に反時計回り方向にドットが存在す
るかを探索し、最初に出会った画素が存在する点を次の
輪郭点Pi+1とするものである。
々に輪郭点を求める。但し、Pn+1=P1,Pn=P0とな
ったならば、P0,P1,…,Pn-1を1つの領域の輪郭
点列となし、手順(6)へ進む。
めに手順(2)へ戻る。
“○内に×”は注目点を、◎(401)は直前にマーク
付けを行った点を示している。又、図中に示された数字
は画素(ドット)の有無を探索する順番を表現してい
る。
例では、輪郭追跡の開始点を決定したあとは、輪郭線に
沿った追跡を行うため、全画像をメモリ上に取り込んだ
後で、輪郭線の抽出処理を開始しなければならない。こ
のため、必要とするメモリ容量が大きくなり、コストが
高くつくことや処理時間が遅くなる等の不具合があっ
た。
で、ラスタ走査順に入力された画像データにおいて、使
用するメモリの容量が小さく、しかも迅速に輪郭を抽出
出来る輪郭抽出装置及びその方法を提供することを目的
とする。
に本発明の輪郭抽出装置は以下の構成から成る。
状態に基づき、注目画素とその周辺画素との境界に定め
られる水平方向及び垂直方向のベクトルに対応するベク
トル情報と前記ベクトルの接続関係を示す接続情報とを
抽出する抽出手段と、注目ラスタが白ラスタであるか否
かを判別する判別手段と、前記判別手段により注目ラス
タが白ラスタであると判別された場合、前記抽出手段に
より抽出されたベクトル情報と接続情報とから、画像の
輪郭をあらわす座標列を接続順に整列して輪郭データを
生成し、生成した輪郭データをメモリに格納し、前記抽
出手段に次のラスタのベクトル情報と接続情報とを抽出
させ、前記判別手段により注目ラスタが白ラスタでない
と判別された場合、前記抽出手段に、次のラスタのベク
トル情報と接続情報とを抽出させる処理手段とを有す
る。
輪郭線抽出方法は、以下のような構成から成る。
状態に基づき、注目画素とその周辺画素とに境界に定め
られる水平方向及び垂直方向のベクトルに対応するベク
トル情報と前記ベクトルの接続関係を示す接続情報とを
抽出する抽出ステップと、注目ラスタが白ラスタである
か否かを判別する判別ステップと、前記判別ステップに
より注目ラスタが白ラスタであると判別された場合、前
記抽出ステップにより抽出されたベクトル情報と接続情
報とから、画像の輪郭をあらわす座標列を接続順に整列
して輪郭データを生成し、生成した輪郭データをメモリ
に格納し、前記抽出ステップに次のラスタのベクトル情
報と接続情報とを抽出させ、前記判別ステップにより注
目ラスタが白ラスタでないと判別された場合、前記抽出
ステップに、次のラスタのベクトル情報と接続情報とを
抽出させる処理ステップとを有する。
の周辺画素との状態に基づき、注目画素とその周辺画素
とに境界に定められる水平方向及び垂直方向のベクトル
に対応するベクトル情報と前記ベクトルの接続関係を示
す接続情報とを抽出し、注目ラスタが白ラスタであるか
否かを判別し、注目ラスタが白ラスタであると判別され
た場合、抽出されたベクトル情報と接続情報とから、画
像の輪郭をあらわす座標列を接続順に整列して輪郭デー
タを生成し、生成した輪郭データをメモリに格納し、次
のラスタのベクトル情報と接続情報とを抽出させ、注目
ラスタが白ラスタでないと判別された場合、次のラスタ
のベクトル情報と接続情報とを抽出させる。
施例である輪郭抽出装置を詳細に説明する。
接続状態を保持しておく接続情報テーブルを持ち、画像
内の全ての画素について輪郭を抽出し終った段階で、再
び接続情報テーブルを走査して、最終的な輪郭ベクトル
の総ループ数,各ループを構成する輪郭点の個数,各ル
ープを構成する輪郭点の座標値等を求めるという方法を
取り、画像内の全ての画素について輪郭を抽出し終った
段階で、再び接続情報テーブルを走査して、最終的な輪
郭ベクトルの総ループ数,各ループを構成する輪郭点の
個数,各ループを構成する輪郭点の座標値等を求めてい
る。この際、画像内の輪郭点の接続情報を全て保持して
おく接続情報テーブルの容量を小さくし、テーブルの検
索スピードが低下することを防いでいる。
うに、2値画像における注目画素101と、その近傍8
個の画素の状態を見て処理を進めるもので、注目画素を
ラスタ走査し、1画素ごとにずらしながら画像全体の処
理を逐次行ってゆく。
1であり、図1(A)の注目画素近傍を拡大した図1
(B)において、“0”及び“2”で示された位置は、
主走査方向に対し注目画素101と同じ位置にあり、副
走査方向のそれぞれ1ラスタ前の画素(0)及び1ラス
タ先の画素(2)を示す。“1”及び“3”で示された
位置は、注目画素101と同一のラスタ上にあり、それ
ぞれ1画素前の画素(3)及び1画素先の画素(1)を
示している。さらに、“A”及び“B”は、主走査方向
に1画素先の位置にあり、それぞれ1ラスタ前及び1ラ
スタ先の位置にある画素を示し、“C”及び“D”は主
走査方向の1画素前の位置にある画素で、それぞれ1ラ
スタ先及び1ラスタ前の位置にある画素を示す。
ウエア構成例を示すブロック図である。
画像データをやりとりするための入力制御(インタフェ
ース)部であり、この信号線500よりラスタ走査形式
で順次2値画像データが入力されてくる。502はラッ
チで、501より入力された画像データを、図示しない
画素同期クロツクに同期して1画素づつ順次更新しなが
ら保持する。次の画素同期クロツクにて、ラッチ502
は次の画素データを入力制御回路501より入力する。
この時、既に保持していた画素データは、その画素クロ
ツクに同期してラッチ503にラッチされて保持され
る。同様にラッチ503に保持されていた画素データ
は、次の画素同期クロツクにてラッチ504に保持され
る。
画素データを保持するFIFO(ファーストイン・ファ
ーストアウト・メモリ)である。FIFO505は、ラ
ッチ504の出力を画素同期クロツクに同期して順次取
り込み、1ラスタ前のデータをラッチ507へ出力す
る。ラッチ507,508,509及びラッチ510,
511,512は共に前記ラッチ502,503,50
4と全く同様に動作する。
504,507,508,509,510,511及び
512に記憶された9個の画素は、図1(B)に示した
9(3×3)画素よりなる領域の画素データを記憶して
いることになる。即ち、これらのラッチのデータは、そ
れぞれの図1の“B”,“2”,“C”,“1”,注目
画素,“3”,“A”,“0”,“D”に対応してい
る。
ポートで、入力ポート513は、ラッチ510,50
2,504,512のデータを、即ち、それぞれ図1に
おける“A”,“B”,“C”,“D”の位置データを
CPU519に入力する。同様に、入力ポート514は
ラッチ511,507,503,509,508のデー
タ、即ち、“0”,“1”,“2”,“3”,注目画素
の位置のデータとして入力する。
査カウンタであり、図示しない副走査同期信号によりリ
セットされ、画素同期信号によりカウントアップする。
516は副走査方向の画素位置を示す副走査カウンタ
で、図示しないページ同期信号によりリセットされ、副
走査同期信号によりカウントアップされる。517は入
出力制御用の入出力ポートであり、入出力制御回路50
1に対し、画素データ入力の実行及び保留を指示する信
号、及び入出力制御回路501よりCPU519への画
素データ更新を知らせる信号等を保持する。521はハ
ードディスク522の入出力制御装置である。入出力制
御ポート517,主走査カウンタ515,副走査カウン
タ516,入力ポート513,514,メモリ520,
ディスクI/O521はバス518を介してCPU51
9に接続されている。
ト517を介して、画素データの更新を行い、主走査カ
ウンタ515及び副走査カウンタ516を介して、注目
画素の画素位置(i,j)を知ることができる。また、
入力ポート513及び514を介して、注目画素及びそ
の近傍の8方向の画素の状態を知ることができる。
と、CPU519は入出力制御ポート517を介して9
個のラッチに記憶される画素データの更新を指示し、同
時に画素データの更新指示の信号をクリアするととも
に、後段のラッチにラッチされる画素データは更新し、
この更新が終了すると入出力制御ポート517に更新完
了の信号を出力する。
力制御ポート517より更新完了の信号が入力されるの
を監視している。この更新完了の信号が入力されると、
新たに9個のラッチに記憶された画素データに関する処
理を実行し、以下同様にこれを繰り返すものである。ま
た、入力制御回路501は、画像領域の最終画素を注目
画素として終了し終った際に、入出力制御ポート517
に終了信号を出力する。
に応じた、それぞれの場合の処理を説明する。
を終了してラスタ走査を1画素分進め、注目画素位置を
更新する。
状態によって以下の処理を行う。図6〜図21に各状態
における処理内容を示してある。
て、“d”は“do not care ”、即ち、
“d”の表示のある位置の画素は色画素でも黒画素でも
構わないことを意味している。これは以下の図でも同様
とする。また図6の画素マトリクス62において、○印
は横方向ベクトルの始点及び縦方向ベクトルの終点を表
わしており、Δ印は縦方向ベクトルの始点及び横方向ベ
クトルの終点を表わしている。また図6の62における
実線矢印は、始点及び終点共に定まった、矢印の向く方
向の輪郭ベクトルを表わし、図7に示すような点線矢印
は、始点もしくは終点のいずれか一方のみが定まった、
矢印の向く方向の輪郭ベクトルを表わしている。これ
ら、○,Δ,実線矢印及び点線矢印の持つ意味も、以降
の図においても同様である。また、●は黒画素を示し、
白画素はその位置を明示したいときのみ点線の○印で表
記し、それ以外の時は表記していない。
主走査方向及び副走査方向共に、画素と画素の中間の位
置にあるものとする。また、主走査方向及び副走査方向
共に、画素のある位置は正整数で示され、画素位置を2
次元の座標で表現する。例えば、図6の注目画素63の
位置が[ (3,7):第7ラスタの第3画素位置の
意]であれば、図6の62で示された4本のベクトルは
それぞれ点64(2.5,6.5) 、点65(3.
5,6.5) ,点66(3.5,7.5) ,点67
(2.5,7.5) の4点を始点,終点とする互いに
連続する4本のベクトルとして表現される。
標)で表現するものとすると、図6の4本のベクトルは
[(2.5,6.5),(3.5,6.5)],
[(3.5,6.5),(3.5,7.5)],
[(3.5,7.5),(2.5,7.5)],
[(2.5,7.5),(2.5,6.5)] でそれ
ぞれ表現される。
に便宜上、以降の画素位置を偶数のみで表現することに
し、始点,終点の位置を奇数の整数で表現することにす
る。即ち、m画素×n画素の画像は、2m×2nの正の
偶数(整数)の座標表現で表わすものとする。これによ
り、上述の図6の例は、注目画素位置を(6,14)で
あると表現し、それぞれ4つの終点,始点は(5,1
3),(7,13),(7,15),(5,15) と
なる。これにより、図6の4本のベクトルは、[(5,
13),(7,13)],[(7,13),(7,1
5)],[(7,15),(5,15)],[(5,1
5),(5,13)]と表現される。
りなるnラスタで構成されるm×n画素(m,nは正の
整数)でなるものとし、第j番目のラスタの第i番目の
画素位置を(2i,2j)(i,jは正の整数で、i≦
m,j≦n)で表現するものとする。
の装置のCPU519による輪郭抽出処理の全体の流れ
を示すフローチャートである。
(注目ラスタを画像の先頭ラスタに設定し、注目画素を
注目ラスタの先頭画素に設定する)を行う。S2では2
値画像データからベクトル列を抽出し、各ベクトルの始
点の座標及びこのベクトルに流入してくる(このベクト
ルの始点の座標が終点となっている)ベクトル、流出し
ていく(このベクトルの終点の座標が始点となってい
る)ベクトルを、図23及び図24に示すテーブル(こ
れらを接続情報テーブルと定義する)形式で出力する。
図23は水平方向のベクトルを示す図、図24は垂直方
向のベクトルを示す図である。S3は注目画素が注目ラ
スタの最終画素であるかどうかが判断され、最終画素な
らばS5へ移り、そうでなければS4にて注目画素を次
の画素に移動してS2に戻る。S5では注目ラスタが白
ラスタ(白ラスタはラスタを構成する画素が全て白であ
るラスタと定義する)であるかどうかが判定され、白ラ
スタならばS6へ移り、そうでなければS8に移る。S
6では、図23及び図24に示すテーブルから流入及び
流出ベクトルの項目番号を辿ることにより、図25に示
すような画像中の総輪郭線数,各輪郭線毎の輪郭線の総
点数,輪郭線中の各点のx座標,y座標を記憶したテー
ブルを作成する。次にS7に進み、ディスクI/O52
1を介して、このテーブル情報ファイル形式でディスク
522に記憶し、図23及び図24のテーブルの内容を
クリアする。その後、S8に進み、注目ラスタが画像中
の最終ラスタかどうかが判定され、最終ラスタならばS
10に移り、そうでなければS9に移る。S9では注目
ラスタを次のラスタに移動し、注目画素を注目ラスタの
先頭画素に移動してS2に戻る。S10ではS6と同様
の処理を行い、その後S7の処理と同様にしてテーブル
情報ファイル形式でディスク522に記憶する。
毎に図23及び図24で示されるテーブルの情報を整列
・出力することで、図23及び図24で示されるテーブ
ルの容量を小さくすることができる。
列抽出処理を示すフローチャートである。
14のビット4(注目画素)を見ることにより、注目画
素が白画素か黒画素かを判定する。白画素の場合はステ
ップS13へ進み、黒画素の場合はステップS12へ進
む。ステップS12では、注目画素の周囲8画素の状態
を見て、その状態に応じた適当な処理ルーチンをコール
する。
御ポート517を介して画素位置を更新を指示する。そ
して、入出力制御ポート517より更新完了の信号を入
力するとステップS14に進み、入出力制御ポート51
7を介して、最終画素の処理が終了したか否かを判断
し、終了していなければステップS11へ戻り、次の注
目画素も同様に処理を行ない、終了していれば、基のル
ーチンにリターンする。
た周囲画素の状態により実行される処理を示すフローチ
ャートである。
レジスタを“0”にクリアする。次にステップS22に
進み、図1の“0”で示された位置の画素の状態(以
降、f(0)で表現する)が黒画素(以降、“1”で表
わす)であればステップS23へ進み、白画素(以降、
“0”で表わす)であればステップS24へ進む。ステ
ップS23では前記レジスタの内容に1を加える。
の位置の画素の状態が黒画素であれば(f(1)=1)
ステップS25へ進み、前記レジスタの内容に2を加え
る。f(1)=0であればステップS26に進み、同様
に図1の“2”の位置の画素が黒画素かどうかをみる。
f(2)=1(黒画素であれば)であればステップS2
7へ進み、前記レジスタの内容に4を加える。
の位置の画素に注目し、f(3)=1ならステップS2
9へ進み、前記レジスタの内容に8を加えるが、そうで
なければステップS30へ進む。ステップS30では、
前記レジスタの保持する値の処理番号のルーチンをコー
ルする。
に示した“0”,“1”,“2”,“3”の画素位置の
各画素の状態に応じて、0〜15の値を取り得る。これ
らは、その値に応じてそれぞれ図6の(ケース(cas
e)0),図7の(ケース1),図8(ケース2),図
9(ケース3),図10(ケース4),図11(ケース
5),図12(ケース6),図13(ケース7),図1
4(ケース8),図15(ケース9),図16(ケース
10),図18(ケース12),図19(ケース1
3),図20(ケース14),図21(ケース15)に
示されている。
述する。
タの値が“0”の場合は、図28に示す処理がコールさ
れる。図28は前述の図6に示す状態(ケース0)を処
理するルーチンである。以降、注目画素63の座標が
(2i,2j)として説明する。
3,図24,図28)>図28のステップS31では
(2i−1,2j−1)を水平ベクトルの始点として登
録する。即ち、図23に示す水平ベクトルカウンタ23
0の指し示す水平ベクトル始点(図6の64)のx座標
テーブルの欄(図23の231)に(2i−1)を格納
し、同じく水平ベクトル始点y座標テーブルの欄(図2
3の232)に(2j−1)を格納する。そして、この
水平ベクトルに流入してくる元の垂直ベクトルは、図2
4の垂直ベクトルカウンタ240が、この時点で指して
いる垂直ベクトルの始点座標テーブル内の位置の次の位
置に格納されるベクトルであり、また、この水平ベクト
ルが流出していく先の垂直ベクトルは、この時点で垂直
ベクトルカウンタ240が指している垂直ベクトルの始
点座標テーブルの位置にある。
クトル項目番号の欄において、水平ベクトルカウンタ2
30が指し示す位置(図23の例では233)に、垂直
ベクトルカウンタ240の値に1加えた値を格納する。
また、水平ベクトルの流出ベクトル項目番号の欄には、
水平ベクトルカウンタ230が指し示す位置(図23の
例では234に垂直ベクトルカウンタ240の値を格納
する。
+1,2j−1)を垂直ベクトルの始点(図6の65)
として登録する。この垂直ベクトルに流入する水平ベク
トルはステップS31で登録した水平ベクトルであり、
この垂直ベクトルが流出する水平ベクトルは、水平ベク
トル始点座標テーブルのステップS31で登録された水
平ベクトルの次の位置に格納される水平ベクトルである
と登録する。
41には(2i+1)が、欄242には(2j−1)
が、更に欄243には、この時の水平ベクトルカウンタ
230の値が、欄244はこの時の水平ベクトルカウン
タ230の値に+1した値が格納される。
カウンタ230の内容を+1する。ステップS34で
は、(2i+1,2j+1)を水平ベクトルの始点(図
6の67)座標として登録し、この水平ベクトルに流入
する垂直ベクトルは、ステップS32で登録したベクト
ルであると登録し、この水平ベクトルが流出する垂直ベ
クトルは、ステップS32で登録された垂直ベクトルの
垂直ベクトル始点座標テーブル内における次の位置に格
納される垂直ベクトル(図6の点66と点64とを結ぶ
ベクトル)であると登録する。
タ240の内容を+1し、ステップS36では、(2i
−1,2j+1)を垂直ベクトルの始点座標として登録
し、この垂直ベクトルに流入する水平ベクトルはステッ
プS34で登録された水平ベクトルであると登録し、こ
の垂直ベクトルが流出する水平ベクトルは、ステップS
31で登録した水平ベクトルであると登録する。こうし
て差異後に、ステップS37で、水平ベクトルカウンタ
230及び垂直ベクトルカウンタ240を共に+1して
処理を終了する。
点64と点65と結ぶ水平ベクトルと、点67と点66
とを結ぶ水平ベクトルからなる2つの水平ベクトルと、
点65と点67、及び点66と点64とを結ぶ2つの垂
直ベクトル合わせ4つのベクトルが巡回した1つのルー
プを作っている状態として抽出する。
4,図29)>図29は図27のステップS30で、レ
ジスタの保持する値が1の場合にコールされるケース1
の処理を示すフローチャートである。
j+1)を水平ベクトルの始点として、図23に示すテ
ーブルの始点座標のx,y座標に登録する。また、この
水平ベクトルが流出する垂直ベクトルの番号(欄23
4)は、後述するステップS43で登録される垂直ベク
トルカウンタ240の値とする。次にステップS42に
進み、ステップS41で登録した水平ベクトルに流入す
る垂直ベクトルを、図34に示す流出先が未定な垂直ベ
クトルテーブル341から探し出して登録する。このス
テップS42の処理内容は、図31のフローチャートで
示している。
録されている流出先か未定の垂直ベクトルの数を保持す
る流出ベクトル未定垂直ベクトルカウンタ340の値を
変数kにセットする。ステップS52では垂直ベクトル
流出ベクトル未決定項目番号テーブル341に登録され
ている項目番号(k−1)の値が指し示す垂直ベクトル
の始点のx座標の欄が(2i+1)であるか否かを判定
する。(2i+1)でなければ変数kの値(k)を1だ
け減じて、再びステップS52を実行する。ステップS
52で始点のx座標が(2i+1)であればステップS
54へ進む。
番号が(k−1)である垂直ベクトルが、前述したステ
ップS41で登録した水平ベクトルの流入元ベクトルで
あり、更にステップS41で登録した水平ベクトルが、
この垂直ベクトルの流出先ベクトルであることになる。
従って、図23の水平ベクトルカウンタ230で指示さ
れる水平ベクトルの流入ベクトル項目番号欄に、テーブ
ル341の項目番号が(k−1)である垂直ベクトル番
号を、及び図24の垂直ベクトルの流出項目番号欄に、
ステップS41における水平ベクトルカウンタ230の
値を格納する。
テップS54において、流出先が決定したベクトルを流
出先未定ベクトルテーブル341から消去し、そのテー
ブルの空いた部分を詰める。次に、ステップS56で、
流出ベクトル未定垂直ベクトルカウンタ340の値を1
減じ、垂直ベクトルに流出テーブル未決定項目番号テー
ブル341に登録されている流出先が未定の垂直ベクト
ルが1つ減った旨更新して、元のルーチンに戻る。
の処理が終了してステップS43へ進む。ステップS4
3では(2i−1,2j+1)を垂直ベクトルの始点と
して登録し、この垂直ベクトルに注入してくる水平ベク
トルは、ステップS41で登録した水平ベクトルとす
る。次に、ステップS44ではステップS43で登録し
た垂直ベクトルが流出する先の水平ベクトルを、図31
に示す流入元ベクトル未定テーブル311より探し出し
て登録する。このステップS44の処理内容は、図35
のフローチャートで示す。
同様にして実行される。即ち、ステップS43で登録し
た垂直ベクトルが流出する先のベクトルを図24の流出
ベクトル項目欄に登録し、この垂直ベクトルへ流出する
水平ベクトルの流入先ベクトル項目番号欄に、垂直ベク
トルカウンタ240の値をセットして、この垂直ベクト
ルであると登録する。これにより、図31に示すテーブ
ル311を更新する。
ウンタ230を+1し、ステップS46で垂直ベクトル
カウンタ240を+1して、元の処理に戻る。
24,図33,図36)>図27のステップS30にお
いて、レジスタの保持する値が“2”の場合は、図36
に示す処理が実行される。
理するルーチンである。
クトルカウンタ240が示す垂直ベクトルの始点を(2
i−1,2j+1)として登録し、この垂直ベクトルが
流出する先の水平ベクトルをステップS73で登録され
る水平ベクトルとする。ステップS72では、ステップ
S71で登録した垂直ベクトルが、それに流入してくる
水平ベクトルが未定であるベクトルとして、図33に示
す流入ベクトル未定垂直ベクトルテーブル331の既使
用領域のすぐ隣の未使用領域に登録し、流入元ベクトル
未定垂直ベクトルカウンタ330を+1する。次に、ス
テップS73に進み、図23に示すテーブルカウンタ2
30で示される欄の水平ベクトルの始点を(2i−1,
2j−1)として登録し、このテーブルの流入元垂直ベ
クトルとして登録する。
録した水平ベクトルが流入してゆく先の垂直ベクトルが
未定であるベクトルとして、図32に示す流出ベクトル
未定水平ベクトルカウンタ320を+1する。ステップ
S75では、水平ベクトルカウンタ230及び垂直ベク
トルカウンタ240を共に+1して元の処理に戻る。<
ケース3の説明(図9,図23,図24,図37)>図
27のステップS30において、レジスタの値が“3”
の場合は、図37に示す処理が実行される。これは図9
に示す状態を処理するルーチンである。
1)を垂直ベクトル91(図9)の始点として登録す
る。次にステップS82に進み、前述のステップS44
と同様にして、ステップS81で登録した垂直ベクトル
が流出する先の水平ベクトルを求める。次にステップS
83で、カウンタ330が指示するテーブル331に垂
直ベクトルカウンタ240の値をセットして、カウンタ
330の値を+1する。次に、ステップS85で垂直ベ
クトルカウンタ240の内容を+1し、ステップS85
でケースAの処理を行う。この処理は図38のフローチ
ャートで示されている。
テップS91で図9の画素Aが白“0”かどうかを調
べ、白でなければ何もせずに処理を終了する。これは図
9の93で示されている。
水平ベクトル94(図9)の始点を(2i+1,2j−
1)とする。次にステップS93で、この水平ベクトル
をサーチする。次にステップS94に進み、この水平ベ
クトルの流出ベクトルが未定であるとして、この水平ベ
クトルの番号をテーブル321にセットする。そして、
ステップS95で水平ベクトルカウンタ230を+1し
て、処理を終了する。
4,図31〜図34,図39)>図27のステップS3
0において、レジスタの値が“4”の場合は、図39に
示したルーチンがコールされる。このルーチンは図10
に示したケース4を処理するルーチンである。
1)を水平ベクトル102の始点として登録し、このベ
クトルが流出する先のベクトルは、ステップS103で
登録する垂直ベクトルであるとして、このときの垂直ベ
クトルカウンタ240の値を図23の流出ベクトル項目
番号欄にセットする。ステップS102では、ステップ
S101で登録したベクトルへ流入してくるベクトルが
未定であるとして、図31に示したテーブル311にカ
ウンタ230の値を登録して、このテーブル311を更
新する。ステップS103では、(2i+1,2j−
1)を垂直ベクトル103(図10)の始点として定義
し、このベクトルに流入してくるベクトルはステップS
101で登録した水平ベクトル102であるとして、図
24に示すテーブルの流入ベクトル項目番号欄に水平ベ
クトルカウンタ230の値をセットする。ステップS1
04では、ステップS103で登録した垂直ベクトル1
03が流出するベクトルが未定であるとして図34のカ
ウンタ340で指示されたテーブル341の欄に垂直ベ
クトルカウンタ240の値をセットする。次に、ステッ
プS105で、水平ベクトルカウンタ230及び垂直ベ
クトルカウンタ240をそれぞれ+1して、元の処理に
戻る。
0において、レジスタの値が“5”の場合は、図40で
示されたルーチンをコールする。この図40で示された
ルーチンは図11で示す状態の場合にコールされ、何も
せずにそのままリターンする。
4,図31〜図34,図41,図42)>図27のステ
ップS30において、レジスタの値が“6”の場合は、
図41のフローチャートで示されたルーチンがコールす
る。これは、図12で示すケース6の処理である。
ンタ230で指示された水平ベクトル122(図12)
の始点を(2i−1,2j−1)として登録する。次に
ステップS112で、ステップS111で登録した水平
ベクトル122は、その流出先ベクトルが未定であると
して、図32に示す流出先ベクトル未定水平ベクトルテ
ーブル321に、図38のステップS94と同様にして
登録する。ステップS113では、ステップS111で
登録した水平ベクトル122に流入してくる元のベクト
ルが未定であるとして、図39のステップS102と同
様に、図31に示す流入元ベクトル未定水平ベクトルテ
ーブル311に登録する。次に、ステップS114で
は、水平ベクトルカウンタ230を+1する。ステップ
S115では(B)の位置の画素が白画素か黒画素かを
判断し、白画素である場合は、図12の120に示す如
く、(2i+1,2j−1)を垂直ベクトル124の始
点として登録し、黒画素の場合は図12の121に示す
如く、そのまま処理を終える。
2に示す。
画素かを判断し、黒画素ならそのままリターンする。白
画素の場合はステップS122へ進む。ステップS12
2では(2i+1,2j+1)を垂直ベクトル124の
始点として登録する。ステップS123では、図39の
ステップS104と同様に、この垂直ベクトル124が
流出する先のベクトルが未定の垂直ベクトルであるとし
て、図34のテーブル341に登録する。更にステップ
S124では、前述した図36のステップS72と同様
に、ステップS122で登録した垂直ベクトル124に
流入してくる元のベクトルが未定であるとして、図33
のテーブル331にセットする。ステップS125で
は、垂直ベクトルカウンタ240を+1して元のルーチ
ンに戻る。
2,図43)>図27のステップS30において、レジ
スタの値が“7”の場合は、図43のフローチャートで
示すルーチンが実行される。このルーチンは図13で示
されるケース7の処理を行なう。
S85と同様に、画素Aの状態に応じた処理を行う。次
に、ステップS132では、図40のステップS115
と同様に、画素Bの状態に応じた処理を行って元のルー
チンにリターンする。
画素及び(B)の位置の画素が共に白画素の場合、13
1は(A)のみ黒画素、132は(B)のみ黒画素、そ
して133は共に黒画素である場合を示している。
6)>図27のステップS30において、レジスタの値
が“8”の場合は、図44で示す処理ルーチンをコール
する。このルーチンは図14で示されるケース8の処理
を行なう。
ウンタ240で指示された垂直ベクトル141(図1
4)の始点を(2i+1,2j−1)として図24のテ
ーブルに登録し、このベクトルが流出する先の水平ベク
トルは、後続のS135で登録するベクトルであるとし
て、カウンタ230の値を流出ベクトル項目番号欄に登
録する。ステップS134では、ステップS133で登
録した垂直ベクトル141に流入してくる元の水平ベク
トルを図45に示す手順で、図32に示すテーブル32
1を用いて求める。
図35に示した処理と全く同様な手順で、ステップS1
33で登録した垂直ベクトル141に流入してくる元の
水平ベクトルを登録し、この水平ベクトルが流出する先
の垂直ベクトルをステップS133で登録した垂直ベク
トル141であると登録する(ステップS145)。そ
して、ステップS146でテーブル321の隙間を埋
め、ステップS147でカウンタ320を−1して、図
32に示すテーブル321を更新する。
トルカウンタ230で指示される水平ベクトル142
(図14)の始点を(2i+1,2j+1)として登録
し、かつ、このベクトル142に流入する元の垂直ベク
トルは、ステップS133で登録した垂直ベクトル14
1であると登録する。ステップS136では、ステップ
S135で登録した水平ベクトル142が流出する先の
垂直ベクトルを図46に示す手順に従って、図33に示
すテーブル331を用いて求める。
35及び図45に示した処理と全く同様な手順で、図4
4のステップS135で登録した水平ベクトル142が
流出する先の垂直ベクトルを登録し、この垂直ベクトル
に流入する元のベクトルはS135で登録した水平ベク
トル142であると登録して(図46のステップS15
4)、ステップS155,S156で図33に示すテー
ブル331を更新するものである。
平ベクトルカウンタ230及び垂直ベクトルカウンタ2
40を共に+1してリターンする。
14のステップS30において、レジスタの値が“9”
の場合は、図47に示すルーチンがコールされ、このル
ーチンは図15で示すケース9を処理するものである。
1,2j+1)を水平ベクトル151(図15)の始点
として登録する。次にステップS162では、先に説明
した図30に示した手順と同様にして、この水平ベクト
ル151に流入する垂直ベクトルを図34のテーブル3
41を用いてサーチして登録する。また、このサーチさ
れた垂直ベクトルが流出する水平ベクトルが、ステップ
S161で登録した水平ベクトルであると図24に示す
テーブルに登録する。こうして図34のテーブル341
を更新する。
6に示した手順と同様にして、ステップS161で登録
した水平ベクトル151が流出する先の垂直ベクトルを
図33に示すテーブルを用いて探し出して登録し、この
垂直ベクトルに流入する元のベクトルがS161で登録
した水平ベクトル151であると登録して、図33に示
すテーブル331を更新する。
ンタ230を+1し、ステップS165では(D)の位
置の画素が白画素か黒画素かを判断し、白画素である場
合は、図15の152で示すように、(2i−1,2j
−1)を垂直ベクトル154の始点として登録し、黒画
素の場合はそのまま処理を終える(図15の153)。
の内容を図48に示す。
画素か黒画素かを判断し、黒画素ならそのままリターン
する。白画素の場合はステップS172へ進み、(2i
−1,2j−1)を垂直ベクトル154の始点として登
録する。次にステップS173に進み、前述した図45
の処理を行なう。即ち、ステップS172で登録した垂
直ベクトル154が流入してくる元の水平ベクトルを登
録し、この水平ベクトルが流入する先の垂直ベクトルが
ステップS172で登録した垂直ベクトル154である
と登録して、図32に示すテーブル321を更新するも
のである。
図35に示す処理を行う。即ち、ステップS172で登
録した垂直ベクトル154が流出する先の水平ベクトル
を登録し、この水平ベクトルに流入してくる元のベクト
ルは、ステップS172で登録した垂直ベクトル154
であると登録して、図31に示すテーブル311を更新
する。ステップS175では、垂直ベクトルカウンタ2
40を+1してリターンする。 <ケース10の処理>図27のステップS30におい
て、レジスタの値が“10”の場合は図49に示すルー
チンがコールされ、このルーチンは図16に示すケース
10を処理するものである。図49のルーチン油はコー
ルされるとそのままリターンする。
30において、レジスタの値が“11”の場合は、図5
0に示すルーチンがコールされ、このルーチンは図17
に示すケース11を処理するものである。
65と同様に(D)の位置の画素の状態に応じて、先に
説明した図48のフローチャートで示される処理を行
う。次にステップS177では、ステップS85及びS
131と同様に、(A)の位置の画素の状態に応じて、
先に説明した図38で示される処理を行なう。図17の
(D)の位置の画素及び(A)の位置の画素が共に白画
素の場合を170で示し、(A)のみが黒画素の場合を
171で、(D)のみが黒画素の場合を172、
(A),(D)が共に黒画素の場合の処理結果を173
で示す。
24,図51,図52)>図27のステップS30にお
いて、レジスタの値が“12”の場合は、図51に示す
ルーチンがコールされ、このルーチンは図18で示すケ
ース12の状態を処理するものである。
ブルに(2i+1,2j−1)を垂直ベクトル181
(図18)の始点として登録する。ステップS182で
は、先に説明した図44のステップS134と同様に、
図45に示す手順でステップS181で登録した垂直ベ
クトル182をサーチして登録する。また、この水平ベ
クトル182が流出する先の垂直ベクトルが、ステップ
S181で登録した垂直ベクトル181であると登録す
して、図32に示すテーブル321を更新する。
81で登録した垂直ベクトル181の流出先のベクトル
が未定である旨を図34で示すテーブル341に登録
し、カウンタ340の更新を行う。次に、ステップS1
84では、垂直ベクトルカウンタ240を+1する。そ
してステップS185ではCの位置の画素が白画素か黒
画素かを判断し、白画素である場合は、図18の183
で示す如く(2i−1,2j+1)を水平ベクトル18
4の始点として登録し、黒画素である場合は図18の1
84に示す如くそのまま処理を終える。
2のフローチャートで示す。
か黒画素かを判断し、黒画素ならそのままリターンす
る。白画素の場合はステップS192へ進み、ステップ
S192では、(2i−1,2j+1)を水平ベクトル
185の始点として登録する。次にステップS193で
は、先に説明した図46のフローチャートで示された処
理を行って、ステップS192で登録した水平ベクトル
185が流出する先の垂直ベクトルを登録する。そし
て、この垂直ベクトルに流入してくる元のベクトルが、
ステップS192で登録した水平ベクトル185である
と、図24のテーブルと登録して、図33に示すテーブ
ル331を更新する。
で登録した水平ベクトル185は、これに流入する元の
垂直ベクトル186が未定なベクトルである旨を図31
に示す流入元ベクトル未定水平ベクトルテーブル311
に登録し、カウンタ310を+1する。次に、ステップ
S195に進み、水平ベクトルカウンタ230を+1し
て元の処理に戻る。
図27のステップS30において、レジスタの値が“1
3”の場合は、図53に示すルーチンがコールされ、こ
のルーチンは図19のケース13を処理するものであ
る。
S165及び図50のステップS176同様にDの位置
の画素の状態に応じて、先に説明した図48のフローチ
ャートで示される処理を行う。
S185と同様に、Cの位置の画素の状態に応じて、先
に説明した図52のフローチャートで示される処理を行
う。190はDの位置画素及びCの位置の画素が共に白
画素の場合、191はCのみ黒画素、192はDのみ黒
画素、そして、193はCとDが共に黒画素だった場合
の処理結果をそれぞれ示す。
30において、レジスタの値が“14”の場合は、図5
4に示すルーチンがコールされ、このルーチンは図20
で示すケース14の状態を処理するものである。
ステップS185及び図53のステップS197と同様
に、Cの位置の画素の状態に応じて、先に説明した図5
2で示されるケースCの処理を行う。次に、ステップS
202では、図41のステップS115及び図43のス
テップS132と同様にBの位置の状態に応じて、先に
説明した図42で示されるケースBの処理を行う。
素が共に白画素の場合、202はBのみ黒画素、203
はCのみ黒画素、204は共に黒画素の場合の処理結果
をそれぞれ示している。
30において、レジスタの値が“15”の場合は、図5
5に示すルーチンがコールされ、このルーチンは図21
で示すケース15の状態を処理するものである。
165と同様にDの位置の画素の状態に応じて、先に説
明した図48のフローチャートで示されるケースDの処
理を行う。次に、ステップS204では、前述のステッ
プS85,S131等と同様にAの位置の画素の状態に
応じて、先に説明した図38で示されるケースAの処理
を行う。ステップS205では、前述のステップS18
5等と同様に、Cの位置の画素の状態に応じて、先に説
明した図52で示されるケースCの処理を行う。更に、
ステップS206では図41のステップS115等と同
様に、Bの位置の画素の状態に応じて先に説明した図4
2で示されるケースBの処理を行なう。
画素,Aの位置の画素,Cの位置の画素及びBの位置の
画素が全て白画素だった場合の処理結果を示し、211
はAのみ黒画素だった場合を、212はBのみが黒画素
だった場合を、213はCのみ黒画素だった場合を、2
14はDのみ黒画素だった場合を、215はA及びBの
み黒画素だった場合を、216はB及びCのみが黒画素
だった場合を、217はC及びDのみが黒画素だった場
合を、218がD及びAのみ黒画素だった場合を、21
9はB及びDのみ黒画素だった場合を、220はA及び
Cのみ黒画素だった場合を、221はDのみ白画素だっ
た場合を、222はCのみ白画素だった場合を、223
はBのみ白画素だった場合を、224はAのみ白画素だ
った場合を、そして225は全てが黒画素だった場合の
処理結果を示している。
プS2におけるベクトル列抽出の一連の処理が実行され
る。
56・57は図22のステップS6のアウトラインベク
トル列整列の処理の内容を示す。図56・57のフロー
チャートは、図22のステップS2で作成された水平ベ
クトルに関するテーブル群(図23)、垂直ベクトルに
関するテーブル群(図24)及び後述する図58のテー
ブル群を用いて動作する。
テーブル群の中で必要となる項目の初期化を行う。この
ステップS211の処理内容は、図59のフローチャー
トで詳しく示されている。
項目番号を保持する変数t(開始点項目番号)を0にす
る。次にステップS232に進み、変数iを“0”に
し、ステップS233では開始点候補テーブル571の
第i番目の項目を“1”にセットする。ステップS23
4では変数iを+1し、ステップS235で変数iが水
平ベクトルカウンタ230の値より小さな値をもつか否
かを判定し、小さな値であればステップS233へ戻
る。
な値であればステップS236へ進み、ループ数カウン
タ572を“0”にリセットする。次にステップS23
7で変数kを“0”にリセットして、元のルーチンに戻
る。これにより、開始点候補テーブル571の0番目よ
り(水平ベクトルカウンタ230−1)番目の欄に全て
“1”がセットされる。
テップS212に進み、変数kが水平ベクトルカウンタ
230の値の2倍と等しいか否かを判断し、もし等しけ
ればそのままリターンするが、等しくなければステップ
S213へ進む。ステップS213では、ループ数カウ
ンタ572の保持する値のさす開始点項目番号テーブル
574の項目位置に変数tに保持されている値を格納す
る。S214では、開始点項目番号テーブル574のル
ープ数カウンタ572の値で指示される項目に格納され
ている値(すななち、ステップS213で格納した値)
を変数hにセットする。そして、ステップS215で変
数jを0にリセットする。
理中の輪郭の番号を示し、開始点項目番号テーブル57
4のループカウンタ572で指示される項目番号欄に
は、現在整理中の輪郭の開始点のある項目番号が記憶さ
れている。また、変数kは現在までの処理済み及び処理
中の輪郭内で、処理済み及び処理中の点の総数を保持
し、jは現在整理中の輪郭内で、処理墨の点の個数を保
持している。また、変数hは次に処理する水平ベクトル
の項目番号を示す。
テーブル571の変数hの値により指示される項目番号
を“0”にリセットする。次にステップS217に進
み、変数hの値が指す水平ベクトル開始点のx座標(図
23)及び水平ベクトル開始点y座標(図23)の項目
位置に保持される値を、x座標テーブル575及び57
6内の変数kで指示される項目位置に格納する。それと
ともに、変数hの値が指す水平ベクトル流出先ベクトル
項目番号(図23)の項目位置に保持されている値を変
数νにセットする。この変数νは、次に処理する垂直ベ
クトルの項目番号を示している。ステップS218で
は、変数k及び変数jの保持する値をそれぞれ+1す
る。
が指す垂直ベクトル開始点のx座標(図24)及び垂直
ベクトル開始点のy座標(図24)の項目位置に保持さ
れる値をx座標テーブル575及びy座標テーブル57
6内の変数kの値が指す項目位置に格納する。それとと
もに、変数νの値が指す垂直ベクトル流出先ベクトル項
目番号(図24)の項目位置に保持されている値を変数
hにセットする。これにより変数hには、この垂直ベク
トルより流出する水平ベクトルの項目番号がセットされ
る。ステップS220では、変数k及びjの保持する値
をそれぞれ+1する。
在整理中の輪郭の開始点の項目番号を保持する573
(変数t)の値と等しいか否かを判断し、等しくなけれ
ばステップS216へ戻り、同一輪郭点の一点として次
の点の処理を続けるが、等しくなるとステップS222
へ進み、現在整理中の輪郭の処理を終了する。ステップ
S222では、変数jの保持する値を現在処理中の輪郭
の中に含まれる点の数として各輪郭内に含まれる点数を
保持する点数テーブル577の、ループ数カウンタ57
2で指示される項目位置に格納する。ステップS232
では、整理中の輪郭の番号を示すループ数カウンタ57
2を+1する。
する既に処理した点の個数と、水平ベクトルカウンタ2
30に保持された水平ベクトルテーブル内に保持される
点の数の2倍とが等しいか否かを判断し、等しい場合は
処理を終えてリターンする。等しくない場合はステップ
S225に進み、開始点項目番号573の値を+1す
る。そして、ステップS226では、開始点項目番号5
73の値で指示される開始点候補テーブル571の項目
に保持されている値が1”か否かを判断し、“1”でな
ければステップS225へ戻り、再度開始点候補の探索
を続ける。一方、“1”であればステップS213に戻
り、次の輪郭内の点の整理を開始する。
り、図23〜図25に示したベクトルの開始点データ
は、図58に示すテーブルに各輪郭ループ毎に並んだ点
の座標列として整列される。
のフローチャートを参照して、図22のステップS7の
ベクトル列テーブルファイルの出力処理を説明する。
する。次にS242に進み、出力ファイルが既にディス
ク上にオープンされているかどうかを判断し、オープン
されていれば、出力ファイル中に記憶されている総輪郭
線数とループ数カウンタ572で指示される値との和を
とり、出力ファイル中に記憶されている総輪郭線数をそ
の値に書き換え、S246に進む。オープンされていな
ければ、ディスク522上に出力ファイルをオープンす
る。S245では、S244でオープンしたファイルに
ループ数カウンタ572に保持されている値を出力す
る。S246では、変数kの値がループ数カウンタ57
2に保持する値と等しいか否かを判断し、等しい場合は
S247へ進み、カウンタ230,240,310,3
20,330,340の値をリセットし(値を0にす
る)、元の処理に戻る。
8に進み、輪郭ループ内点数テーブル577の変数kの
値の指す項目位置に格納されている値をディスク522
に出力する。S249では開始点項目番号テーブル57
4内の変数kの値の指す項目位置に格納されている値を
変数mにセットする。ここで、kは現在出力中の輪郭ル
ープ番号を保持し、mは現在出力中の輪郭ループ内の点
列の開始点の格納される項目番号を保持している。次に
S250ではkの値を+1し、S251では変数lの値
を“0”にリセットする。このlは、現在出力中の輪郭
ループ内の出力墨の点の数を保持する変数である。
ループ内の点の数と等しいか否かを判断し、等しければ
S246へ戻り、等しくなければS253へ進む。S2
53では、変数mの値が指すx座標テーブル575及び
y座標テーブル576内の項目位置に格納されている値
を出力ファイルに出力する。次にS254ではmの値を
+1し、S255ではlの値を+1してS252に戻
る。
今迄処理していた注目ラスタが画像中の最終ラスタか否
かが判断され、最終ラスタならばS10に進み、そうで
なければS9に進んで、注目ラスタを次のラスタに移
し、注目画素を注目ラスタの先頭画素に移し、S2に戻
る。
後、S7と同じ処理が行われる。但し、S247のカウ
ンタ・リセットの代りに出力ファイルのクローズが行わ
れ、図22の処理を全て終了する。
方向に連結した輪郭線が抽出される。しかし、本発明は
これに限定されるものでなく、8方向に連結する輪郭線
を抽出する場合にも適用できる。
で示されるテーブル(接続情報テーブル)の容量は1ペ
ージ分必要であったが、本発明においては白ラスタが発
生する毎に図23及び図24で示されるテーブル(接続
情報テーブル)の情報を整列・出力することで、図23
及び図24で示されるテーブル(接続情報テーブル)の
容量を小さくすることができ、メモリの節約になる。ま
た、図23及び図24で示されるテーブル(接続情報テ
ーブル)の容量が小さくなる分、ベクトル列整列時の検
索範囲が狭くなり、処理の高速化を図ることができる。
例である輪郭抽出装置のブロック構成図を示す。本実施
例は画像データから輪郭ベクトルを抽出し、輪郭ベクト
ルを座標データ(四点の座標と終点の座標)として磁気
ディスクに出力する装置を示している。図中、601は
マイクロプロセッサ(CPU)でバス606を介し、R
AM(ランダムアクセスメモリ)602,画像入力部6
03,I/Oポート604に接続されている。尚、CP
U601の制御手順はプログラムとして内部のROM
(不図示)に格納されている。I/Oポート604を通
じて磁気ディスク605が接続されている。本実施例で
は画像入力部603より入力されたデータを用いて、輪
郭点の座標を求めるようにしているが、予め磁気ディス
クなどに記憶されている画像データを用いてもよい。ま
た、得られた座標データを磁気ディスクに記憶するよう
に構成しているが、他の処理、例えば輪郭ベクトルを用
いて輪郭の平滑化,拡大,縮小,変倍などの処理を引き
続き行ってもよく、上記実施例に限らない。以下、図6
2・63のフローチャートを用いて、本実施例の動作を
説明する。まず、S301において、i=k=0及びj
=1をセットする。iは主走査方向のカウンタの役目を
果たし、jは副走査方向カウンタの役目を果たす。
(i,j)は実画像中の注目画素の座標を示している
が、前述の通り、輪郭点座標が小数になるのを防ぐため
に、以下の処理では(2i,2j)(i=1,…,m,
j=1,…n)を注目画素の座標とする。ここでは、実
画像中の主走査方向の画素数をm画素、副走査方向の画
素数をn画素としている。S302ではiの値が+1さ
れる。処理の便宜上、i=0からスタートしてS302
において+1され、実際はi=1からS303の処理が
始まるようになっている。S303において注目画素
(2i,2j)が黒画素か白画素かの判定を行い、白画
素ならばS304においてkの値を+1してS307に
進む。黒画素ならばS305に移り、注目画素(2i,
2j)の4つの輪郭ベクトルを抽出する。抽出されるベ
クトル a=[(2i−2j−1),(2i+1,2j−
1)], b=[(2i+2j−1),(2i+1,2j+
1)], c=[(2i+2j+1),(2i−1,2j+
1)], d=[(2i−2j+1),(2i−1,2j−1)] を接続情報テーブルに登録する。次に、S306におい
て接続情報テーブルが検索され、aに重複するベクトル
が存在すれば、aとaに重複するベクトルの両方を接続
情報テーブルから削除する。またdに重複するベクトル
が存在すればdとdに重複するベクトルの両方を接続情
報テーブルから削除する。ここでxとyが重複すると
は、xの四点の座標と終点の座標を入れ替えたベクトル
yに等しいことをいう。またb,cに重複するベクトル
はこの時点では存在しない。接続情報テーブルの検索は
テーブル中の一番新しく登録したデータから順に古いデ
ータを検索すれば、検索時間が短くて済む。ここではS
305においてベクトルa,b,c,dを位置度接続情
報テーブルに登録した後にS306において重複ベクト
ルの削減を行ったが、S305においてb,cのみを接
続情報テーブルに登録し、S306においてaに重複す
るベクトルがなければaを登録し、dに重複するベクト
ルがなければdを登録するという方法も考えられる。次
にS307において接続情報テーブルに登録されている
ベクトルの接続状態(流入ベクトルNo,流出ベクトル
No)を更新する。接続情報テーブルは図64に示すよ
うな各ベクトルの四点座標・終点座標及びそのベクトル
の四点座標を終点座標に持ちベクトルの番号(これを流
入ベクトルNoと記す)、そのベクトルの終点座標を四
点座標に持つベクトルの番号(これを流出ベクトルNo
と記す)から構成されている。簡潔に説明するために、
輪郭点(2i−1,2j−1),輪郭点(2i+1,2
j−1),輪郭点(2i−1,2j+1),輪郭点(2
i+1,2j+1)に流入・流出するベクトルの方向の
定義を行う。 輪郭点に流入するベクトル(流入ベクトル)→ その輪
郭点を終点座標にもつベクトル 輪郭点から流出するベクトル(流出ベクトル)→ その
輪郭点を始点座標にもつベクトル 正の流入水平ベクトル → 始点と終点のy座標が等し
い流入ベクトルでかつ終点のx座標が始点のx座標より
も大きいベクトル 負の流入水平ベクトル → 始点と終点のy座標が等し
い流入ベクトルでかつ始点のx座標が終点のx座標より
も大きいベクトル 正の流入垂直ベクトル → 始点と終点のx座標が等し
い流入ベクトルでかつ終点のy座標が始点のy座標より
も大きいベクトル 負の流入垂直ベクトル → 始点と終点のx座標が等し
い流入ベクトルでかつ始点のy座標が終点のy座標より
も大きいベクトル 正の流出水平ベクトル → 始点と終点のy座標が等し
い流出ベクトルでかつ終点のx座標が始点のx座標より
も大きいベクトル 負の流出水平ベクトル → 始点と終点のy座標が等し
い流出ベクトルでかつ始点のx座標が終点のx座標より
も大きいベクトル 正の流出垂直ベクトル → 始点と終点のx座標が等し
い流出ベクトルでかつ終点のy座標が始点のy座標より
も大きいベクトル 負の流出垂直ベクトル → 始点と終点のx座標が等し
い流出ベクトルでかつ始点のy座標が終点のy座標より
も大きいベクトル と定義する。
クトルテーブルに登録されているベクトルの接続状態更
新の説明を行う。
を検索して、輪郭点(2i−1,2j−1)に流入する
ベクトルあるいは輪郭点(2i−1,2j−1)ら流出
するベクトルを求める。輪郭ベクトルテーブルの検索
は、テーブル中の一番新しく登録されたデータから順に
古いデータを検索すれば、検索時間が短くて済む。これ
は、以下に述べる輪郭ベクトルテーブルの検索について
適用できる。
j−1)に流入するベクトルまたは輪郭点(2i−1,
2j−1)から流出するベクトルが存在するかしないか
を判断し、存在したならばS333へ移り、存在しなけ
ればS334に移る。
ぞれ1つずつ存在するとき、流入ベクトルの流出ベクト
ルNoを流出ベクトルのベクトルNoに更新し、流出ベ
クトルの流入ベクトルNoを流入ベクトルのベクトルN
oに更新する。流入・流出ベクトルがそれぞれ2つずつ
存在するとき、正の流入垂直ベクトルの流出ベクトルN
oを正の流出水平ベクトルのベクトルNoに更新し、正
の流出水平ベクトルの流入ベクトルNoを正の流入垂直
ベクトルのベクトルNoに更新する。また、負の流入垂
直ベクトルの流出ベクトルNoを負の流出水平ベクトル
のベクトルNoに更新し、負の流出水平ベクトルの流入
ベクトルNoを負の流入垂直ベクトルのベクトルNoに
更新する。
索して、輪郭点(2i+1,2j−1)に流入するベク
トルまたは輪郭点(2i+1,2j−1)から流出する
ベクトルを求める。
ぞれ1つずつ存在するとき、流入ベクトルの流出ベクト
ルNoを流出ベクトルのベクトルNoに更新し、流出ベ
クトルの流入ベクトルNoを流入ベクトルのベクトルN
oに更新する。流入・流出ベクトルがそれぞれ2つずつ
存在するとき、正の流入水平ベクトルの流出ベクトルN
oを負の流出垂直ベクトルのベクトルNoに更新し、負
の流出垂直ベクトルの流入ベクトルNoを正の流入水平
ベクトルのベクトルNoに更新する。また、負の流入水
平ベクトルの流出ベクトルNoを正の流出垂直ベクトル
のベクトルNoに更新し、正の流出垂直ベクトルの流入
ベクトルNoを負の流入水平ベクトルのベクトルNoに
更新する。
索して、輪郭点(2i+1,2j+1)に流入するベク
トルまたは輪郭点(2i+1,2j+1から流出するベ
クトルを求める。
ベクトルまたは輪郭点(2i+1,2j+1)から流出
するベクトルはそれぞれ1つずつ存在するので、S33
7において、流入ベクトルの流出ベクトルNoを流出ベ
クトルのベクトルNoに更新し、流出ベクトルの流入ベ
クトルNoを流入ベクトルのベクトルNoに更新する。
索して、輪郭点(2i−1,2j+1)に流入するベク
トルまたは輪郭点(2i−1,2j+1)から流出する
ベクトルを求める。
ベクトルまたは輪郭点(2i−1,2j+1)から流出
するベクトルはそれぞれ1つずつ存在するので、S33
9において、流入ベクトルの流出ベクトルNoを流出ベ
クトルのベクトルNoに更新し、流出ベクトルの流入ベ
クトルNoを流入ベクトルのベクトルNoに更新する。
目画素が注目ラスタの最終画素か否かが判断され、最終
画素ならばS309に進み、そうでなければS302に
戻る。S309では注目ラスタが白ラスタ(白画素のみ
で構成されているラスタ)か否かを判断し、白ラスタな
らばS310に進み、そうでなければS313に進む。
S310では接続情報テーブルを走査し、2つ以上連続
する水平ベクトル及び2つ以上連続する垂直ベクトルに
ついては、これらをそれぞれ1つのベクトルに統合し、
図25のような画像内の総ループ数,各ループの内の頂
点数,各ループの内の各中点の座標のテーブル(これを
輪郭ベクトルテーブルと定義する)を作成する。S31
1では作成された輪郭ベクトルテーブルをI/Oポート
604を通じて磁気ディスク605に出力する。その
際、以前に出力された輪郭ベクトルテーブルがディスク
上に存在するならば、今回作成された輪郭ベクトルテー
ブル中の総輪郭線数と既にディスク上に存在している輪
郭ベクトルテーブル中の総輪郭線数との和をとり、既に
ディスク上に存在している輪郭ベクトルテーブル中の総
輪郭線数をその値に書き替え、今回作成した輪郭ベクト
ルテーブル中の総輪郭線数を除いた部分を既にディスク
上に存在している輪郭ベクトルテーブルの最後に続けて
記憶する。その後、S312に移り、ここで接続情報テ
ーブルの内容がクリアされる。S313では画像中の最
終ラスタまで処理が終ったかどうかが判断され、終った
ならばS316に進み、終っていなければS314に進
む。S314ではi,kの値を0にセットし、S315
で注目ラスタを次のラスタに移し、S302に戻る。S
316ではS310の処理と同じ処理が行われ、S31
7においてもS311と同じ処理が行われて、画像内の
輪郭ベクトルの抽出を終了する。
とにより、1画素単位に輪郭ベクトルの抽出ができるの
で、従来のように画像全体をページメモリに記憶してお
く必要がなく、大幅にメモリ量を削減することができ
る。また白ラスタが発生する毎に接続情報テーブルの情
報を整列・出力することで、接続情報テーブルの容量を
小さくすることができ、メモリの節約になる。また、接
続情報テーブルの容量が小さくなる分、ベクトル列整列
時の検索範囲が狭くなり、処理の高速化を図ることがで
きる。
システムに適用しても、1つの機器から成る装置に適用
しても良い。また、本発明はシステム或は装置にプログ
ラムを供給することによって達成される場合にも適用で
きることは言うまでもない。
抽出装置は、使用するメモリの容量が小さくて済み、し
かも迅速に輪郭を抽出することができるという効果があ
る。
す図である。
ある。
画素の状態に応じたベクトル発生例を示す図である。
ある。
る。
る。
である。
ーブルを示す図である。
ーブルを示す図である。
ーブルを示す図である。
ーブルを示す図である。
である。
ローチャートである。
するための図である。
ローチャートである。
理を示すフローチャートである。
である。
トである。
る。
ートである。
Claims (4)
- 【請求項1】 画像データの注目画素とその周辺画素と
の状態に基づき、注目画素とその周辺画素との境界に定
められる水平方向及び垂直方向のベクトルに対応するベ
クトル情報と前記ベクトルの接続関係を示す接続情報と
を抽出する抽出手段と、 注目ラスタが白ラスタであるか否かを判別する判別手段
と、 前記判別手段により注目ラスタが白ラスタであると判別
された場合、前記抽出手段により抽出されたベクトル情
報と接続情報とから、画像の輪郭をあらわす座標列を接
続順に整列して輪郭データを生成し、生成した輪郭デー
タをメモリに格納し、前記抽出手段に次のラスタのベク
トル情報と接続情報とを抽出させ、前記判別手段により
注目ラスタが白ラスタでないと判別された場合、前記抽
出手段に、次のラスタのベクトル情報と接続情報とを抽
出させる処理手段と を有することを特徴とする輪郭抽出
装置。 - 【請求項2】 前記ベクトル情報は、始点のX座標とY
座標とを含み、前記接続情報は、各ベクトルに流入して
くるベクトルの番号と各ベクトルから流出するベクトル
の番号とを含むことを特徴とする請求項1記載の輪郭抽
出装置。 - 【請求項3】 画像データの注目画素とその周辺画素と
の状態に基づき、注目画素とその周辺画素とに境界に定
められる水平方向及び垂直方向のベクトルに対応するベ
クトル情報と前記ベクトルの接続関係を示す接続情報と
を抽出する抽出ステップと、 注目ラスタが白ラスタであるか否かを判別する判別ステ
ップと、 前記判別ステップにより注目ラスタが白ラスタであると
判別された場合、前記抽出ステップにより抽出されたベ
クトル情報と接続情報とから、画像の輪郭をあらわす座
標列を接続順に整列して輪郭データを生成し、生成した
輪郭データをメモリに格納し、前記抽出ステップに次の
ラスタのベクトル情報と接続情報とを抽出させ、前記判
別ステップにより注目ラスタが白ラスタでないと判別さ
れた場合、前記抽出ステップに、次のラスタのベクトル
情報と接続情報とを抽出させる処理ステップと を有する
ことを特徴とする輪郭抽出方法。 - 【請求項4】 前記ベクトル情報は、始点のX座標とY
座標とを含み、前記接続情報は、各ベクトルに流入して
くるベクトルの番号と各ベクトルから流出するベクトル
の番号とを含むことを特徴とする請求項3に記載の輪郭
抽出方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP04012014A JP3133807B2 (ja) | 1992-01-27 | 1992-01-27 | 輪郭抽出方法及びその装置 |
DE69328506T DE69328506T2 (de) | 1992-01-27 | 1993-01-26 | Bildverarbeitungs-Verfahren und Vorrichtung |
EP93101123A EP0553762B1 (en) | 1992-01-27 | 1993-01-26 | Image processing method and apparatus |
US08/009,901 US5933528A (en) | 1992-01-27 | 1993-01-26 | Image processing apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP04012014A JP3133807B2 (ja) | 1992-01-27 | 1992-01-27 | 輪郭抽出方法及びその装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH05204361A JPH05204361A (ja) | 1993-08-13 |
JP3133807B2 true JP3133807B2 (ja) | 2001-02-13 |
Family
ID=11793743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP04012014A Expired - Fee Related JP3133807B2 (ja) | 1992-01-27 | 1992-01-27 | 輪郭抽出方法及びその装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3133807B2 (ja) |
-
1992
- 1992-01-27 JP JP04012014A patent/JP3133807B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH05204361A (ja) | 1993-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3026592B2 (ja) | 輪郭抽出方法及びその装置 | |
JPH077456B2 (ja) | 重合度による図形の認識装置 | |
US5920324A (en) | Character pattern producing apparatus capable of producing character pattern having connected character elements | |
JP3133807B2 (ja) | 輪郭抽出方法及びその装置 | |
JPH01296389A (ja) | 図形処理方法及びその装置 | |
Lin et al. | The mesh with hybrid buses: an efficient parallel architecture for digital geometry | |
JP2954434B2 (ja) | 画像処理方法及びその装置 | |
JP2020064438A (ja) | 学習データ生成装置および学習データ生成方法 | |
JPS6395590A (ja) | 手書き文字認識装置 | |
JP2590327B2 (ja) | 図面情報の管理方法 | |
JP3647075B2 (ja) | 画像検索方法及びその装置 | |
JP2578965B2 (ja) | 図形処理装置 | |
Wang et al. | SAMPolyBuild: Adapting the Segment Anything Model for polygonal building extraction | |
JP3254286B2 (ja) | 刷版マスク作成装置 | |
JP2782904B2 (ja) | 多角形塗りつぶし方式 | |
JP3973868B2 (ja) | パラメトリック・モデリング・システム | |
JP3162130B2 (ja) | 図形デ−タ入力方式および図形デ−タ出力方式 | |
JPS62159283A (ja) | 塗り潰し多角形クリツピング方式 | |
JPH0573659A (ja) | 地図データ作成方法及びその装置 | |
JPH0535912B2 (ja) | ||
JPH09147125A (ja) | 輪郭線抽出方法と抽出装置 | |
JPH10187956A (ja) | 画像処理方法および画像処理装置 | |
JPS6224371A (ja) | 図形処理システム | |
JPH04218094A (ja) | アウトラインフォント処理装置 | |
JPH01166275A (ja) | 並行処理を利用した塗り潰し画像データ生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20001020 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081124 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081124 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091124 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101124 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101124 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111124 Year of fee payment: 11 |
|
LAPS | Cancellation because of no payment of annual fees |