(57)【要約】【課題】誤動作が少なく、かつ簡便で高速な線分近似方法を提供する。【解決手段】線分近似のある階層に於いて近似した線分列を構成する線分に関してその線分の両端で挟まれた部分点列の各点から該線分への垂直方向の距離の該部分点列における最大値を求め、その値が所定閾値を越えた場合にはその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成し、点から該線分への垂直方向の距離の該部分点列における最大値が所定閾値を越えなかった場合には、部分点列の各点から線分両端の頂点への該線分方向に沿った方向付きの距離の方向を比較し、その方向が同じ時には部分点列の各点から線分両端の頂点への線分方向の頂点への線分方向の距離の差の絶対値を求め、その線分方向の距離の差の絶対値の部分点列における最大値を求め、その最大値が所定閾値を越えた場合にはその最大【選択図】        図１
2004341663.tif 000002
【特許請求の範囲】
【請求項１】
一意的に１次元鎖と見なし得る２次元整数格子内の連結したＮ個の座標点列Ａ＝｛（ｘ［ｉ］，ｙ［ｉ］）｜ｉ＝１，…，Ｎ｝を基準直線からの距離を元に、座標点列Ａの部分集合Ｂ＝｛（Ｖｘ［ｉ］，Ｖｙ［ｉ］）｜ｉ＝１，…，ｒ｝を頂点列とする線分列によって近似する方法であって、ある階層に於いて近似した各線分からその線分の両端で挟まれる座標点列Ａ内の部分点列の各点までの最大距離が所定閾値をこえた時にその最大距離を与える部分点列内の点を新たな頂点として新たな近似線分を増やすことで線分近似の階層を深めていく線分近似方法に於いて、ある階層内に於いて近似した線分列を構成する線分に関して部分点列の各点から該線分への垂直方向の最大距離が所定閾値を越えた場合にはその最大距離を与える部分点列内の点を新たな頂点として新たな部分線分列を作成し、点から該線分への垂直方向の最大距離が所定閾値を越えなかった場合には、部分点列の各点から線分両端の頂点への該線分方向に沿った方向付きの距離の方向を比較し、その方向が同じ場合に部分点列の各点から線分両端の頂点への線分方向の距離の差の絶対値の該部分点列のおける最大値が所定閾値を越えた場合にはその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成することで階層を深めていくことを特徴とする線分近似方法。
【請求項２】
ある階層内に於いて近似した線分列を構成する線分に関してその線分の両端で挟まれた部分点列の各点から該線分への垂直方向の距離の該部分点列における最大値を求め、その値が所定閾値を越えた場合にはその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成し、点から該線分への垂直方向の距離の該部分点列における最大値が所定閾値を越えなかった場合には、部分点列の各点から線分両端の頂点への該線分方向に沿った方向付きの距離の方向を比較し、その方向が同じ時には部分点列の各点から線分両端の頂点への線分方向の距離の差の絶対値を求め、その線分方向の距離の差の絶対値の部分点列における最大値を求め、その最大値が所定閾値を越えた場合にはその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成することで階層を深めていくことを特徴とする請求項１記載の線分近似方法。
【請求項３】
ある階層内に於いて近似した線分列を構成する線分に関してその線分の両端で挟まれた部分点列の各点から該線分への垂直方向の距離のを求め、その値が所定閾値を越えた場合にはその最大値を求め、点から該線分への垂直方向の距離が所定閾値を越えなかった場合には、部分点列の各点から線分両端の頂点への該線分方向に沿った方向付きの距離の方向を比較し、その方向が同じ時には部分点列の各点から線分両端の頂点への線分方向の距離の差の絶対値を求め、その差の絶対値を所定閾値と比較し、その差の絶対値が所定閾値を越えた時にはその算絶対値の部分点列における最大値を求め、前者の線分の垂直方向の距離の最大値、或いは後者の線分方向に沿った距離の差の絶対値の最大値が該部分点列内にある時はその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成することで階層を深めていくことを特徴とする請求項１記載の線分近似方法。
【請求項４】
規定部分点列内に線分の垂直方向の距離の最大値、及び後者の線分方向に沿った距離の差の絶対値の最大値がある場合には、線分の垂直方向の距離の最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成することで階層を深めていくことを特徴とする請求項３記載の線分近似方法。
【請求項５】
請求事項１の方法が収められた記憶媒体。
【請求項６】
一意的に１次元鎖と見なし得る２次元整数格子内の連結したＮ個の座標点列Ａ＝｛（ｘ［ｉ］，ｙ［ｉ］）｜ｉ＝１，…，Ｎ｝を基準直線からの距離を元に、座標点列Ａの部分集合Ｂ＝｛（Ｖｘ［ｉ］，Ｖｙ［ｉ］）｜ｉ＝１，…，ｒ｝を頂点列とする線分列によって近似する装置であって、ある階層内に於いて近似した線分列を構成する線分に関してその線分の両端で挟まれた部分点列の各点から該線分への垂直方向の距離の該部分点列における最大値を求める手段、その値が所定閾値を越えた場合にはその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成する手段、点から該線分への垂直方向の距離の該部分点列における最大値が所定閾値を越えるか否かを判定する手段、部分点列の各点から線分両端の頂点への該線分方向に沿った方向付きの距離の方向を比較する手段、その方向が同じ時には部分点列の各点から線分両端の頂点への線分方向の距離の差の絶対値を求める手段、その線分方向の距離の差の絶対値の部分点列における最大値を求める手段、その最大値が所定閾値を越えた場合にはその最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成する手段を有することを特徴とする線分近似装置。
【請求項７】
一意的に１次元鎖と見なし得る２次元整数格子内の連結したＮ個の座標点列Ａ＝｛（ｘ［ｉ］，ｙ［ｉ］）｜ｉ＝１，…，Ｎ｝を基準直線からの距離を元に、座標点列Ａの部分集合Ｂ＝｛（Ｖｘ［ｉ］，Ｖｙ［ｉ］）｜ｉ＝１，…，ｒ｝を頂点列とする線分列によって近似する装置であって、
ある階層内に於いて近似した線分列を構成する線分に関してその線分の両端で挟まれた部分点列の各点から該線分への垂直方向の距離のを求める手段、その値が所定閾値を越えた場合にはその最大値を求める手段、点から該線分への垂直方向の距離が所定閾値を越えるかを判定する手段、部分点列の各点から線分両端の頂点への該線分方向に沿った方向付きの距離の方向を比較する手段、その方向が同じ時には部分点列の各点から線分両端の頂点への線分方向の距離の差の絶対値を求める手段、その差の絶対値を所定閾値と比較する手段、その差の絶対値が所定閾値を越えた時にはその算絶対値の部分点列における最大値を求める手段、前者の線分の垂直方向の距離の最大値、或いは後者の線分方向に沿った距離の差の絶対値の最大値が該部分点列内にあるかどうか判定する手段、その最大値を与える部分点列内の点を新たな頂点として新たな部分線分列を作成する手段を有することを特徴とす線分近似装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は計算機を利用した計算機シミュレーション、画像評価、計測機において、計器機上に図形の形状を取り込み、処理をおこなうためのアルゴリズムに関する。
【０００２】
【従来の技術】
従来、計算機シミュレーション、画像評価、計測機において計器機上に図形の形状を取り込み、図形の判定、認識、あるいは図形の加工をおこなうため、線図を複数の連続した線分の列で近似することが行われる。単に線図を扱うのみではなく、図形の形状を用いるため、輪郭線を抽出したり、細線化した後の線図形に対して処理を行う事もある。
【０００３】
通常図形を計算機上で扱う場合には２次元に展開した点の集合として扱うが、元図形を構成する点の数が多い時には膨大な点データを直接扱うのは計算資源の負荷が大きく、計算時間も多大なものとなる。このとき曲線の線図や文字を細線化したり輪郭線を抽出したのち、複数の連続した線分の列即ち折れ線に近似し、この近似線分列を用いて以降の処理を行えば、一般に近似後の線分列を構成する線分や頂点の数ははじめの点データの数より大幅に少ないものとなるためこの線分近似後の線分や頂点について図形の判定、認識、あるいは図形の加工をおこなうことが望ましい。特にあらかじめ定められた線分数の線分列（折れ線）で曲線を近似し、この線分列に対して図形判別や図形処理を行うことがなされる。
【０００４】
そのため曲線等の線図をあらかじめ定められた本数の複数の連続した線分の列即ち折れ線に近似する事は、図形の特徴を抽出し図形の概略を用いて処理を行う事により処理時間を短縮したり、メモリなどの計算資源の節約がはかる意味で重要な技術課題である。
【０００５】
このような複数の連続した線分の列即ち折れ線に近似するための方法の従来例として、公開特許公報平１−２９５３７６号公報において、述べられている線図形の線分近似処理方式について述べる。
【０００６】
２次元整数格子内の一意的に１次元鎖と見なし得る連結したＮ個の座標点列のＡ＝｛（ｘ［ｉ］，ｙ［ｉ］）｜ｉ＝１，…，Ｎ｝を初期値として考える。
【０００７】
ここで連結しているとは、図６のように座標点を微小面積要素と見なして、その領域が境界の点あるいは境界線で連結している事を意味する。このようなパターンは、鉛筆等で書かれた曲線をデジタル化した際に現れる。
【０００８】
また、簡単のため、点列は開いた曲線に対応しており点列には曲線の連結性に沿って、順番がついているとし、所謂、細線化された曲線とし図７の（ａ）に示すようなひげ、（ｂ）に示すような解像度以上の折れ曲がり、（ｃ）に示すような二重線、（ｄ）に示すような交差点はそれぞれ存在しないと仮定する。
【０００９】
図６（ａ）の点列に対して、図６（ｂ）の線分を対応させる事が本発明の課題であり、以下のような方法を提案している。
【００１０】
線分列の頂点は、座標点列Ａの部分集合Ｂ＝｛（Ｖｘ［ｉ］，Ｖｙ［ｉ］）｜ｉ＝１，…，ｒ｝として表される。数学的には、Ｂに余分な一点を加えＢ∪｛＊｝とした時、集合ＡからＢ∪｛＊｝への射影（上への写像）を意味する。つまり、Ｂの点以外のＡ点は＊へ写像されるとし、Ｂの点となるＡの点は自分自身へ写像されるとすれば写像が巧く定義される事となる。
【００１１】
このような写像を具体的にどのように決定するかが、点列の線分化問題である。
【００１２】
予め閾値ｖｔｘｔｈ０を対応する線分の長さに対する関数を決めておく。例えば、これを対応表（ルックアップテーブル）に書き込んでおき、線分の長さに応じてそれを変更させてもよい。本説明においては簡単の為に、ｖｔｘｔｈ０は一定値に固定しておく。
【００１３】
上述の仮定から座標点列Ａの対応する曲線の両端は既に判明しているとしてよい。図８の流れ図に従って従来の方法は記述されるが、まず、具体的な例である図１０に従って説明する。
【００１４】
まず、図１０（ａ）のように両端を線分で結ぶ。これを階層１の線分と呼ぶ。
【００１５】
この線分の両端で挟まれた領域での座標点（現在の場合、すべて）に対して、この線分を延長して出来る直線までの距離ｄｄ［ｉ］（ｉ＝１，…，Ｎ）を求める。この距離は通常用いられる点から直線までの定義に従って図１１の様に点からこの線分を延長して出来る直線へおろした垂線の長さである。この直線を以降基準線と呼ぶことがある。また本明細では以降簡単のため線分からの距離とも称するが、図１１（ｂ）のように垂線が線分よりはずれるときにも直線への距離の意味をとるものとする。この求めた距離に対して、最大のものが、もしも、ｖｔｘｔｈ０より小さければ、両端を結んだ階層１の線分が求める線分列とする。
【００１６】
図１０（ａ）は最大距離が、ｖｔｘｔｈ０より大きい場合を図示しており、１０１が最大距離ｄ１を持つ点としている。この場合、１０１を新たな頂点列の一つとし、図１０（ｂ）のようにこの頂点により２本の線分１０２と１０３を作る。これによりひとつ階層を上げ、得られた点列を階層２の頂点列とする。次に図１０（ｂ）の線分１０２に対してこの両端を端点とする線分列の各点から線分１０２までの距離を求めその最大値ｄ２を与える点１０４を新たな頂点として図１０（ｃ）のように新たな２線分を作る。この動作を得られる最大距離が閾値ｖｔｘｔｈ０を越えなくなるまで繰り返し図１０（ｄ）の線分列を得る。
【００１７】
すなわち現在の階層をＫ（＞１）として階層Ｋの線分列の内の１つの線分に着目する。該線分の両端で挟まれた領域での座標点列Ａの部分列の該線分からの距離をｄｄ［ｉ］（ｉ＝ｊ１，…，ｊ２）とし、ｄｄ［ｉ］（ｉ＝ｊ１，…，ｊ２）を求める。この求めた距離の最大のもの（最大距離ｄ）が、もしも、ｖｔｘｔｈ０より小さければ、該線分を求める線分列の一部とする。この時、対応する線分は階層Ｋについて、収束したとし、階層をＫからＫ＋１に増やした場合も線分列の対応する部分は変化しないものとする。
【００１８】
もしも、最大距離ｄが、ｖｔｘｔｈ０より大きければ、最大値を持つ点を次の階層Ｋ＋１での頂点列の一つとする。この操作を同じ階層内のすべての収束していない線分に対して行い、階層Ｋ上で総ての線分について操作を行なった後に階層をＫからＫ＋１に上げる。
【００１９】
このような操作を繰り返す事により、階層を十分深くすると最終的に座標点が有限であるので、総ての線分が収束し、つまり、総ての点列が対応する線分からｖｔｘｔｈ０よりも小さい距離にあるように、線分列を構成できる。
【００２０】
上述のような方法によって図１０（ａ）に対して図１０（ｄ）が得られる。
【００２１】
この事を流れ図にして示したのが、図８である。図８に従って、一般的な場合の線分化方法について述べる。
【００２２】
ステップＳＳ１の開始と同時に初期化を行なう。つまり、階層Ｋを１に、また、曲線の両端を階層１の線分の両端とする。
【００２３】
ステップＳＳ２で、着目するｉ番目の線分が、階層Ｋの線分列の最終線分を超えたか否かをチェックする。
【００２４】
ｉ番目の線分が階層Ｋの線分列の最終線分でないならばステップＳＳ３で線分内の対応する座標点の線分からの距離の最大値を計算する。
【００２５】
ステップＳＳ４で、線分の最大距離ｄがｖｔｘｔｈ０より大きければ、ステップＳＳ５へ移行し、ｉ番目の線分を  最大距離ｄを持つところで分割して、二つの線分に分ける。
【００２６】
もしも、ステップＳＳ４で、線分の最大距離ｄがｖｔｘｔｈ０より小さければ、その線分は収束したとする。
【００２７】
ステップＳＳ６で同じ階層Ｋ内での線分列の次の線分に移る。
【００２８】
ここで、再びステップＳＳ３で、着目するｉ番目の線分が、階層Ｋの線分列の最終線分か否かをチェックする。
【００２９】
ステップＳＳ３からＳＳ６までの操作を繰り返し、階層Ｋの線分列の最終線分まで繰り返す。
【００３０】
ステップＳＳ８で総ての線分において、最大距離がｖｔｘｔｈ０より小さければステップＳＳ９で順番を入れ替えてステップＳＳ１０の終了に向かう。
【００３１】
もしも、ＳＳ８で総て線分が収束していなければ、ステップＳＳ７で階層を一つ上げて、ステップＳＳ３に向かう。
【００３２】
このような事を繰り返し、最終的には総てが収束して終了する。
【００３３】
この他にも、公開特許公報平１−２９５３７６号公報内の従来の例で述べられている方法等、いくつかの方法が提案されている。
【００３４】
【発明が解決しようとする課題】
図形の特徴を抽出し、図形の概略を用いて処理を行う事により処理時間を短縮したり、メモリなどの計算資源の節約をはかる図形処理において、曲線等の線図を複数の連続した線分の列即ち折れ線に近似するために上記の様な従来例に基づく線分近似方法を用いるには以下の様な問題点を有していた。
【００３５】
これらの処理に於いては処理の目的に応じて出来得る限りデータ数、即ち線分数を少なくし、処理を高速に行い、かつ使用する計算資源が少ない計算を行うことが望ましい。線分近似を線図の概略判定に用いる際には図形の特徴が判断できる最小の線分数で近似をすることにより、その後の処理、判定を簡素に高速に行えることになる。そのため線図の概略判定に必要とされるあらかじめ定められた本数の線分列への線分近似が必要となる。ここで云う概略判定とは、線図の長さや曲率などの定量的な性質は無視して線が特徴的な形状、例えば巻いているか否か、或いは巻いている回数等を調べるものである。
【００３６】
このような処理に従来の方法を応用する場合に線分近似の終了を決める閾値ｖｔｘｔｈ０をどのように決定するかが重要な問題となる。
【００３７】
特に判定の誤動作を防ぐために線分近似の精度をまし、閾値ｖｔｘｔｈ０を小さくとる必要がある。この様子を図９に示す。
【００３８】
図９（ａ）には判定すべき線図を構成する点列を表す。９１、９２はそれぞれ点列の始点、終点である。この始点終点から従来例に基づく線分近似を行う場合図９（ｂ）の様に基準線を引き、点列の各点から基準線間での距離を計算していくため、閾値ｖｔｘｔｈ０を大きくとると図９（ｃ）の様な線分と判定される。このような場合大きな閾値ｖｔｘｔｈ０は線図の微小部分の形状に対し近似精度を落とすのみではなく、近似後の線分列は線図の概略形状も大きく変えてしまい判定誤差を生じせしめてしまう。ここで云う誤動作とは、図形の微小形状あるいは微小部分から決まる定量的な特性は無視し線図の概略を判定する観点からいう。
【００３９】
この誤動作の意味をより具体的に説明すれば、図９（ｄ）の様な図形入力があった時には、同じく図９（ｃ）の様な近似線分をあたえ、入力の図９（ａ）と図９（ｄ）の近似後の差異がなくなってしまう。図９（ａ）と図９（ｄ）は図形の外力判断の意味からは大きくことなり特に図９（ａ）に於ける９１より左側の図形の特徴が全く失われてしまう。
【００４０】
このようなことを防ぐために線図の概略判定用の線分列近似では閾値ｖｔｘｔｈ０を十分に細かく、例えば図９に関しては１ピクセル以下の精度に設定する必要がある。このように誤動作を防ぐには場合によって解像度のピクセル程度まで閾値ｖｔｘｔｈ０を細かくしなければならない。
【００４１】
一方でこのような細かな閾値ｖｔｘｔｈ０を用いた線分列近似を用いて図９の様な線図を判定すれば、概略形状判定の観点からは無視してもかまわないような微小区間での線図の変動に従って細かな線分化（線分分割）を行うため、近似後の線分数は当初の点列の点数と大差がなくなってしまい、本来線図の概略判定の計算時間、計算資源の節約を目的になされた線分列近似の効果が極端に少なくなる。
【００４２】
このように必要とされる閾値ｖｔｘｔｈ０は局所的な近似精度のみでなく、元線図の大略的な形状によって大きく異なる。入力図形の形状が例えば始点、終点が図形全体の外接多角形上にある場合等のようにある特定の傾向をもった図形に限られる場合には、このような誤動作は生じにくいが、図９（ａ）の様な図形に対しては閾値ｖｔｘｔｈ０を小さく設定せなばねばならない。
【００４３】
このように従来例では閾値ｖｔｘｔｈ０の値により近似後の線分の大略的な形状までも大きく影響を受けていた。このことににより線分近似法としては非常に扱いにくい近似方法となっていた。
【００４４】
即ち入力図形の傾向により、図形を分類しそれに応じて閾値ｖｔｘｔｈ０を決定すればこのような誤動作は生じにくくなるが、このような図形を好適に判断する処理は複雑になり、その分の処理が必要となり線図の概略を判定処理の計算時間、計算資源の面から好ましくない。入力図形の形状にあらかじめ制限を加えたり、図形判定処理内に線分列近似以外の処理を組み合わせることは図形判定処理の適用範囲を狭めたり、処理を複雑化を招き好ましくない。
【００４５】
一方、判定の誤動作を防ぐためには線分近似の局所的な近似精度の必要性以上に細かな閾値ｖｔｘｔｈ０設定をとれば、図形により本来の線分列近似の目的であった線図の概略判定に対して、計算時間の短縮、計算資源の節約の効果が得られにくい、その後の処理に多量のメモリ領域と長い処理時間を必要とする線分列を作成していた。さらにこのような細かな閾値ｖｔｘｔｈ０設定をとることが必要なため図形により線分列近似自体の処理も多量のメモリ領域と長い処理時間を必要としていた。
【００４６】
特に従来の閾値ｖｔｘｔｈ０を設定する線分近似方法では、指定された近似線分本数に線分近似を行には扱う図形の傾向に応じて経験的に定めた閾値ｖｔｘｔｈ０を用いるか、或いは閾値ｖｔｘｔｈ０を変更しながら前述の線分近似処理を行い、得られた近似線分数が所望ものに近くなるまで線分近似を繰り返す必要があった。前者は取り扱う図形の適応範囲を狭めるものであり、後者は実行時間を大きく増加させるものであった。
【００４７】
【課題を解決するための手段】
従来の方法に於いては、与えられた点列から線分を抽出するにおいて、点列内の各点から点列の両端の点を結んだ直線までの垂線の長さを、その点から直線までの距離として線分近似を行う判定量としこれが基準の判定値ｖｔｘｔｈ０を越えた場合に、この点を近似線分を形成する頂点として抽出するもするものであった。しかるに図９に示したような図形に対しては点列内の各点から点列の両端のて点を結んだ直線までの垂線の長さのみでは図形の概要を抽出するのに不十分であり、元図形の大半の部分が失われてしまうという欠点を有していた。
【００４８】
本発明は以上の欠点を鑑み、点列内の各点から点列の両端の点までの、その両端点を結んだ直線方向の符号付きの距離を、近似線分を形成する頂点を検出するための判定量として使用する。
【００４９】
特に本発明では、点列内の各点から点列の両端の点を結んだ直線までの垂線の長さが基準の判定値ｖｔｘｔｈ０を越えない場合にも、点列内の各点から点列の両端の２点までの、その両端点を結んだ直線方向の符号付き距離を近似線分を形成する頂点を検出するための判定量として使用し、この量が同じ符号であり、その差が大きさが新たな判定基準値ｖｔｘｔｈ１を越えた場合にその点を新たに近似線分を形成する頂点として検出する。
【００５０】
より具体的な説明を図４を用いて行う。ここで線分近似を行う点列の開始点をＡ点、終点をＢ点と記す。従来例にしめしたと同様に線分近似を行っていき、点列内のＣ点に関して、点列の両端の点Ａ、Ｂを結んだ直線までの垂線の長さｄｍａｘが計算できる。このとき直線までの垂線の長さｄｍａｘが判定値ｖｔｘｔｈ０を越えない場合にはＣ点から両端の点Ａ、Ｂまで直線にそった方向の距離ｔａ、ｔｂを求める。ただしこの距離は方向に対して符号をもった量として求める。即ち点Ｃより開始点Ａへ向かう有向線分（ベクトル）、と点Ｃより終了点Ｂへ向かう有向線分（ベクトル）を各々ＡＢを結ぶ直線への射影した時作られる２つの有効線分の向きが同じ向きの時に同符号をとるものとする。
【００５１】
ｔａ、ｔｂの符号が同じ時にはその差の絶対値を求める。この差の絶対値が大きいとき、特に点列の両端Ａ、Ｂ間の直線距離に比べ大きい時には、点Ｃは点列の両端Ａ、Ｂより大きく離れていると云うことであり、もと図形の特徴を抽出する上ではこのＣ点の存在を反映させることが好ましい。
【００５２】
よってもとの点列に対する線分近似の過程で、点列内の各点から点列の両端の２点までの、点列内の各点から点列の両端の点を結んだ直線までの垂線の長さが基準の判定値ｖｔｘｔｈ０を越えない場合にも、その両端点を結んだ直線方向の符号付き距離を求め、その符号が同じ時にはその差の絶対値を求め、このようにして求まった絶対値の大きさの全点列における最大値が規定の基準値ｖｔｘｔｈ１を越えた場合にはその最大値を与える点を近似線分を構成する頂点として抽出することで良好な線分近似が行える。この様子を図２に示す。
【００５３】
図２（ａ）は元図形である。図２（ｂ）では従来例同様に点列の始点終点を結ぶ基準線を引き、点列の各点から基準線間での距離を計算していく。図９に示した従来例同様に基準線からの垂直方向の距離が閾値ｖｔｘｔｈ０を下回るとする。しかしながら本発明では図２（ｃ）に示すように、上記に示した基準線に沿った符号付きの距離を求めことで、その符号が同じく、その差が基準値ｖｔｘｔｈ１を越える点のうち最大となる点２ａを抽出することが出来る。
【００５４】
このようにして得られた近似線分図２（ｃ）は近似する線分の本数も少なく、かつ図形の全体的特徴、特に図形の大きさの概略を正しく示すものとなっており、従来例の様に図形の大部分を欠損させ、特に図形の大きさの概略を大きく変形させることないため、図形抽出の分野で特に大きさの概略を簡素な要素で抽出するのに適している。
【００５５】
【発明の実施の形態】
（第一の実施例）
本発明による第一の実施例について以下に説明する。
【００５６】
図３に本発明に基づく最適化方法を実現するための第一の構成例並びに本発明に基づく装置の第一の実施例の構成を示す。
【００５７】
３０は本実施例に示す処理を行う演算処理手段、３１はデータ入力または処理制御入力のための入力手段、３２は結果出力のための出力手段、３３は結果表示のための表示手段、３４はデータ記憶のための記憶手段である。
【００５８】
本構成はパーソナルコンピューター等の汎用型計算機上に実現できる。あるいは本実施例の実現のために構成された電気回路を用いることで構成できる。
【００５９】
入力手段３１はデータ入力及び処理の制御を行うための入力を演算処理手段３０へ入力するもので、キーイン入力を行うためのタイプライター型のキーボード装置、またはカード入力装置、あるいは光学式入力装置（ＯＣＲ）、マウス等のポインタ入力装置等によって構成される。
【００６０】
あるいは端末装置、ネットワークを通したリモート端末装置を流用することも可能である。
【００６１】
処理用のデータ、及び処理の実行の開始、終了、停止、中断、出力等の処理制御入力が入力手段３１により本構成に入力される。
【００６２】
データ入力に関しては事前に入力したデータを後述の記憶手段３４に格納しておくことも可能であり、本構成以外の入力手段３１によって入力しネットワーク等を通して直接記憶手段３４に格納することも可能である。
【００６３】
さらに記憶手段３４を後述の可搬性記憶装置で構成することにより本構成以外の入力手段によって入力したデータを使用することも可能である。
【００６４】
演算処理手段３０はさらに入力部３０ｄ、中間データ記憶部３０ｃ、演算手順記憶部３０ｂ、演算部３０ａ、出力部３０ｅ、バス部分３０ｆより構成される。
【００６５】
入力手段３１より送られたデータ入力は入力部３０ｄを介してバス部分３０ｆを通じて中間データ記憶部３０ｃあるいは記憶手段３４に格納される。
【００６６】
入力部３０ｄは入力手段３１よりの入力を後の演算処理やデータ格納に好適な用に加工する機能を有することが可能である。
【００６７】
またデータ入力のために入力手段３１を制御する機能を有してもよい。
【００６８】
たとえば入力手段３１にタイプライター型のキーボード装置に使用した場合には入力手段３１からのキーイン信号を処理手段用の内部表現に変換し、適当な単位に区切ってバス部分３０ｆへ転送することができる。
【００６９】
また入力手段３１に光学式入力装置（ＯＣＲ）を使用した場合にはデータの読み取りの開始、終了等の光学式入力装置（ＯＣＲ）への処理制御信号を発生する機能を有することができる。
【００７０】
またマウス、デジタイザ等のポインタ入力装置を使用した場合には、装置のポイントした位置を数値（座標値）に変換しこれを入力データとて生成する機能を有することもできる。
【００７１】
さらにネットワーク通信機能を有し本構成以外の処理装置より転送されたデータを中間データ記憶部３０ｃあるいは記憶手段３４に格納することもできる。
【００７２】
中間データ記憶部３０ｃは例えば半導体電荷蓄積型のランダムアクセスできる記録再生可能なＲＡＭ装置等によって構成され、処理の初期データ、処理中に生成される中間データの一時格納を行う。
【００７３】
初期データは処理を開始するに際し必要なデータで、処理直後に入力手段３１より入力されたもの、あるいは処理開始以前または処理開始直後に記憶手段３４に格納されたものをバス部３０ｆを介して読みとり中間データ記憶部３０ｃに一時格納する。これらは後述の演算手順に従い必要とされた時にバス部３０ｆを介して演算部３０ａに送られ演算処理に使用される。
【００７４】
中間データとは演算部３０ａにおいて後述の処理手続きに従って処理を行う過程で新たに算出、定義された変数の数値、または演算処理を行うに際し必要な一時記憶領域の内容である。
【００７５】
中間データ記憶部３０ｃは演算手順に従って発生するこれらのデータを演算部３０ａよりバス部３０ｆを介して受け取り必要とする時点まで一時格納しておく。
【００７６】
中間データ記憶部３０ｃに一時格納された中間データは演算手順に従って必要とされる際にバス部３０ｆを介して演算部３０ａへ送られ演算部３０ａで演算に利用される。
【００７７】
その際以降の処理に不必要なデータは演算部３０ａへ転送後破棄してその部分の記憶領域を後のデータ格納に再利用する構成とすることもできる。
【００７８】
或いは処理の履歴データとして処理終了まで格納し、最終結果として出力する構成をとることもできる。
【００７９】
中間データ記憶部３０ｃは通常転送（書き込み、再生）、アクセス速度が早い揮発性のＤＲＡＭ装置が用いられ、処理の開始ともに動作を開始し処理の終了ととも動作を終了する。
【００８０】
処理の開始時に必要とされる初期データは処理の開始直後にバス部３０ｆを介し記憶手段３４から読み取り、処理に終了後も保持すべき最終データバス部３０ｆを介し記憶手段３４へ格納する構成をこともできる。
【００８１】
また中間データ記憶部３０ｃの一部、特に演算処理を行うに際し必要な一時記憶領域は演算部３０ａ内にキャッシュ記憶装置として設けることができる。さらに中間データ記憶部３０ｃの一部（或いは全て）は記憶手段３４で流用する事もできる。
【００８２】
また後述の処理手続きに従って処理を行う過程で発生する中間データの一部は記憶手段３４へ格納する事もできる。
【００８３】
中間データ記憶部３０ｃより必要に応じてバス部３０ｆを介し記憶手段３４へ転送し記憶手段３４で格納したのち必要時に中間データ記憶部３０ｃへ出し利用する構成をとるも可能である。
【００８４】
処理実行時に後述の演算手順は演算手順記憶部３０ｂに格納されている。
【００８５】
演算部３０ａは演算手順記憶部３０ｂに格納された演算手順を読み出しそれに従って後述の演算処理を行って行く。
【００８６】
特に本実施例を汎用の計算機上で構成する場合には演算手順は当該技術分野で周知な高級プログラム言語からなるプログラムの形式あるいはそれから生成された実行コードの形式で格納する事が可能である。プログラムは実行に先立ち実行コードに変換（コンパイル）されるか、または実行時に逐次用意されたインタプリタで実行コードに変換されてもよい。また演算手順は演算部３０ａを構成する処理装置に固有な機械語で直接作成されたコードの形式で格納することもできる。
【００８７】
このように汎用の計算機上で本実施例を構成する場合には、演算手順を表現するコードあるいはプログラムは処理の開始時以前に記憶手段３４上に格納しておくことが可能である。
【００８８】
この場合には処理の開始に先だって、あるいは処理の開始直後に演算手順を表現するプログラム或いはコードの一部或いは全てをバス部３０ｆを介し演算手順記憶部３０ｂに読み込み格納する。
【００８９】
また処理の開始時以前に記憶手段３４上に格納しておいたプログラム形式の演算手順を処理前に実行コードに変換し、この実行コードを演算手順記憶部３０ｂに読み込み格納する構成をとることもできる。
【００９０】
このような構成では演算手順記憶部３０ｂは物理的には中間データ記憶部３０ｃと同一のＲＡＭ装置を用いてもよい。ＲＡＭ装置の記憶領域を区分けしてつけた番地を用い記憶領域を管理し論理的に区分けされた中間データ記憶部３０ｃと演算手順記憶部３０ｂを構成してもよい。
【００９１】
このような構成では同一のＲＡＭ装置を用いて汎用の計算機上で計算手段を有効に用いて本実施例を実現できる。
【００９２】
演算手順記憶部３０ｂへの演算手順コードの読み込みは処理実行のはじめに１度に最後の処理までのコードを読み込んでもよく、或いは処理の実行に伴い順次読み込んで云っても良い。
【００９３】
さらに別の構成例としては演算手順記憶部３０ｂを設けず記憶手段３４より直接演算部３０ａへ演算手順コードを読み込むことも可能である。
【００９４】
このような構成をとっても本発明もつ本質的効果は変わることがないが、一般にＲＡＭ装置の読み出しは高速であるため、本発明の汎用の計算機上での実施形態としては演算手順記憶部３０ｂを設けることが望ましい。
【００９５】
本実施例を最適化専用処理装置上に実現する場合には演算手順記憶部３０ｂを半導体ＲＯＭ装置に構成することも可能である。この場合には処理前、処理中、処理後を問わず演算手順は演算手順記憶部３０ｂに格納されており、この演算手順に従って演算が実行される。
【００９６】
このような構成では演算手順コードを記憶部３４より演算手順記憶部３０ｂに読み込む動作が不要なため処理の立ち上げが早く行われる装置を実現できる。
【００９７】
さらに本実施例の入力部３０ｄにネットワーク通信装置を配し、処理の開始以前、或いは開始直後に処理手続きコードを本構成以外の処理手段よりネットワークを介して中間データ記憶部３０ｃへ格納することも可能である。
【００９８】
演算部３０ａは演算手順記憶部３０ｂに格納された演算手順に従って後述の演算処理を行って行く。その際一時的に生成される変数値はバス部３０ｆを介し中間データ記憶部３０ｃに格納され、また必要に応じて中間データ記憶部３０ｃよりバス部３０ｆを介して読みとられ演算に使用される。
【００９９】
出力部３０ｅは後述の処理終了時に演算部３０ａより算出された値、或いは中間データ記憶３０ｃに格納された結果データを読み出し出力手段に出力する。また処理中に使用者が処理の履歴を確認するためにデータの一部を出力する構成をとることも可能である。
【０１００】
バス部３０ｆは演算処理手段３０を構成する入力部３０ｄ、中間データ記憶部３０ｃ、演算手順記憶部３０ｂ、演算部３０ａ、出力部３０ｅ間のデータ転送を円滑に行うため、各部間からのデータを授受し所定部へデータを引き渡す。本部位は本発明に必須でないがバス部を設けることで各部の処理が効果的に行われる。
【０１０１】
演算処理手段３０からの出力データは出力手段３２へ送られ出力される。
【０１０２】
出力手段３２はプリンタ、プロッタ等の印刷出力装置、あるいは出力データに応じてＣＲＴ等の表示手段３３へビデオ信号を作成出力するビデオ信号出力装置からなる。
【０１０３】
また出力手段３２をネットワーク通信機能を有する通信装置より構成することで、出力データを本構成以外の出力手段や処理手段へネットワークを通じて出力する構成をとることも可能である。
【０１０４】
表示手段３３はＣＲＴ、液晶表示装置等から構成され出力手段３２からのビデオ信号に応じて出力データを表示する。また使用者の確認のため入力データ、処理制御入力、処理状況等を出力する構成をとっても良い。
【０１０５】
記憶手段３４は磁気テープ装置、磁気ディスク装置、光磁気ディスク装置等の固定、可搬性記録装置、或いはそれらの組み合わせからなる。
【０１０６】
記憶手段３４は処理の開始に先立ち演算手順コードまたはプログラム或いは初期データを格納しておくことができる。
【０１０７】
記憶手段３４として磁気テープ、フロッピイ磁気ディスク装置、光磁気ディスク装置等の可搬性記録可能な記録装置を構成要素にとり、あらかじめ初期データ、処理手続きコードまたはプログラムを本構成あるいは本構成以外の処理手段で該当装置の媒体に記録し、これを本構成による処理に先だって本構成に実装することで本実施例による処理を実行することができる。
【０１０８】
さらに記憶手段３４の構成要素としてＣＤＲＯＭ装置等の可搬性読み取り専用記録装置を配し、処理手続きコードまたはプログラムを該当装置の媒体に記録しておき、これを本構成による処理に先だって本構成に実装することで本実施例による処理を実行することができる。
【０１０９】
特にこのような処理手続きコードまたはプログラムを格納した可搬性の媒体は、本発明に従った処理を図示した構成上で実現すると云う意味で本発明による線分近似を実現する物理的な対象としての重要な実施形態である。
【０１１０】
あるいは記憶手段３４の構成要素として固定式磁気ディスク装置を配することで処理の実行前後にわたり演算手順コードまたはプログラム並びに初期データを本構成内に格納・保持しておくことができる。
【０１１１】
記憶手段３４は処理中に生じる中間データを一時格納する記憶領域として利用することができる。
【０１１２】
特に処理中に多量の中間データが生じる場合や中間データ記憶部３０ｃの記憶容量を小さくして演算処理手段３０の構成を軽便にしたい場合に記憶手段３４にや中間データ記憶部３０ｃ内のデータを一時待避させ、必要時に再度中間データ記憶部３０ｃに読み込むこでと中間データ記憶部３０ｃの記憶領域を有効に利用できる。
【０１１３】
また使用者にたいする処理履歴を残す意味で記憶手段３４に中間データに一部を格納し、処理後に使用者にデータ表示をすることもできる。
【０１１４】
さらに処理結果を記憶手段３４に格納し、処理後に使用者にデータ表示を行ったり、可搬性記録媒体に記録しこれを本構成以外の処理手段上で利用する構成をとることもできる。
【０１１５】
次に本実施例による装置の動作を説明する。
【０１１６】
はじめに入力手段３１から処理の開始を入力すると、記憶手段３４内から、或いはネットワークを介した他の処理手段から入力部３０ｄのネットワーク通信手段を介して、後述の演算手順を表したコードが演算手順記憶部３０ｂに読みとられ格納される。
【０１１７】
ここでいう演算手順をあらわすコードはあらかじめ記憶手段３４に格納されていてもよく、またプログラムの形式で記述された手順を処理の事前に演算部３０ａを構成する処理装置に解釈可能な実行コードに変換されてもよい。説明の簡便のため以下これらを総称して演算手順コードということにする。
【０１１８】
演算手順コードを可搬性記録媒体に格納している場合にはこの媒体を記憶手段３４に実装しておく。
【０１１９】
演算手順記憶部３０ｂにＲＯＭ装置を用い事前に演算手順コードを格納しておく場合はこの動作は省略される。
【０１２０】
また演算手順コードの演算手順記憶部３０ｂへの格納を処理開始に先だっておこなってもよい。
【０１２１】
次に入力手段３１から処理に必要な初期入力データを入力する。
【０１２２】
入力データは中間データ記憶部３０ｃに格納され、演算手順記憶部３０ｂに格納されたの演算手順コードに表された演算手順に従って演算部３０ａで演算が開始される。
【０１２３】
演算手順にしたがって新たな入力データが必要になったときには順次入力手段３１より入力されても良いが、或いは入力手段３１から処理に必要な初期入力データを入力際に一連の必要データを一括に入力し、これを中間データ記憶部３０ｃ、さらにデータ量が多いときには記憶手段３４に格納し、演算手順にしたがってデータが必要になった時に中間データ記憶部３０ｃ、記憶手段３４より参照される構成をとることもできる。
【０１２４】
さらには必要な入力データをあらかじめ中間データ記憶部３０ｃまたは演算手順記憶部３０ｂにに格納しておくこともできる。この場合入力手段３１よりの入力動作は省略される。
【０１２５】
演算部３０ａは演算手順記憶部３０ｂに格納されたの演算手順コードを参照し後述の演算手順に従って演算をすすめ、新たに算出された変数値等は中間データとして中間データ記憶部３０ｃに一時格納し、また必要に応じて中間データ記憶部３０ｃのデータを参照、更新する。
【０１２６】
後述の演算手続きによって全ての演算が終了した際に、中間データ記憶部３０ｃ、或いは記憶手段３４に格納されている結果の最終データを出力部３０ｅより出力手段３２へ送る。
【０１２７】
或いは記憶手段３４に全ての最終データを格納して後にこれを出力データとして利用してもよい。出力データの利用は、本実施例を汎用計算機上で実現したときには、同一計算機上で本発明に関わる以外の処理を行っても良い。例えば本実施例より得られ近似線分データを用いて、線図の判定、選別、図形の輪郭抽出等を図３に示す構成で行うことができる。すなわち本実施例はＣＡＤ等の図形加工装置、図形判定装置の構成に一部となりその機能の一部分、特に入力時のフィルタの機能を担うことができる。
【０１２８】
或いは記憶手段３４をフロッピイ磁気ディスク装置等の可搬性記録装置で構成し、この可搬性記録媒体上に格納した後、本媒体を搬送して他の処理手段上での本発明に関わる以外の処理に利用してもよい。例えば本実施例で作成された出力データを他のＣＡＤ等の図形加工装置、図形判定装置への入力として利用することが可能である。
【０１２９】
出力手段３２へ送られた出力データはプリンタ装置等による印刷出力、或いはこの出力データに基づいたビデオ信号に変換される。或いはネットワーク通信装置を介して接続されたネットワーク上のたの処理手段に転送されても良い。
【０１３０】
出力手段３２で作成されたビデオ信号は表示手段３３へ送られ表示手段上で出力データを使用者に表示する。
【０１３１】
本実施例では以上のような構成の下に以下のような演算手順により線分近似を実行する。
【０１３２】
２次元整数格子内の一意的に１次元鎖と見なし得る連結したＮ個の座標点列のＡ＝｛（ｘ［ｉ］，ｙ［ｉ］）｜ｉ＝１，…，Ｎ｝を初期入力データとして図３の構成内の演算処理手段３０の中間データ記憶部３０ｃに格納されているとする。初期入力データは前述のように図３の構成内の入力手段３１より読み込まれ入力部３０ｄを通してから中間データ記憶部３０ｃに格納されたり、記憶手段３４より中間データ記憶部３０ｃに読み込まれてもよい。
【０１３３】
ここで連結しているとは、従来例の説明において述べたように、図６のように座標点を微小面積要素と見なして、その領域が点あるいは線で連結している事を意味する。
【０１３４】
このようなパターンは、鉛筆等で書かれた曲線をデジタル化した際に現れる。
【０１３５】
また、簡単のため、点列は開いた曲線に対応しており点列には曲線の連結性に沿って、順番がついているとし、所謂、細線化された曲線とし図７の（ａ）のひげ、（ｂ）の解像度以上の折れ曲がり、（ｃ）の二重線はなく、（ｄ）のように交差点はないと仮定する。
【０１３６】
図３の構成上で近似すべき元図形は上記のようにデジタル化された点（ピクセル）の座標値の形で格納され、１組の座標値データ列をなしている。このデータ列は図３の構成上では中間データ記憶部３０ｃに格納される。これを「点座標列データ」と云うことにする。いまこのデータ列の数をＮとする。このデータ列上の座標値を計算機上で扱うために各座標値に対して計算機上で判別出来る値をふる。例えばこれは座標値列上での順番に従ってつけられた番号でよい。この番号値は元図形上で上記のようにデジタル化された点の名称であり、対応する座標値を参照できる様にした上で計算機上でこの点を表すものとして使用される。これを以降「点データ」と称する。
【０１３７】
例えば本実施例による演算手順を高級言語プログラムで表現した場合、「点座標列データ」は配列型の変数として表現でき、「点データ」は配列番号として表現できる。また例えば演算手順を演算コードとして表現した場合、「点データ」は「点座標列データ」のおのおのを格納した図３の構成の中間データ記憶部３０ｃを構成するメモリ装置の番地として表現できる。このようにすれば元図形の点の並びは「点データ」の並び或いは「点座標列データ」によって表現できる。この元図形を表す「点データ」の並び或いは「点座標列データ」を「点列データ」と云うことにする。「点列データ」は「点データ」またはその座標値を単位とするデータ値の列である。上記の構成から計算機上で「点データ」からその座標値を知ることができるため、以下の説明ではこの両者を同一視して説明する。
【０１３８】
近似線分はその頂点を指定することで表せるので頂点となる点の点データを順次格納した「頂点列データ」を用いて図３の構成上に表現できる。この「頂点列データ」を格納する中間データ記憶部３０ａ上の領域を用意する。
【０１３９】
以下の表記では線分近似のある階層で線分本数をｍとする。このとき頂点はｍ＋１でその頂点列の「頂点列データ」をＱ０，Ｑ１，…，Ｑｍと表す。ここでＱｉはｉ番目の頂点を表すか、またはｉ番目の頂点となる点の値（名称、点データ）を表す。特に表式中などでは後者の使い方をする。最初の頂点Ｑ０、最後の頂点Ｑｍはそれぞれ元図形を構成する点列の始点と終点と一致する（またはその点の値をとる）とする。
【０１４０】
「頂点列データ」の順に従って連続する２頂点間で決まる線分からその２頂点を両端とする点列の各点までの垂直距離の最大値を算出する。始め格納された点列Ａ＝｛（ｘ［ｉ］，ｙ［ｉ］）｜ｉ＝１，…，Ｎ｝の順に従ってＱ０の点データの次点からＱ１の点データの１つ前の点まで、各々の座標値データを基に線分Ｑ０Ｑ１までの垂直距離を計算する。
【０１４１】
「頂点列データ」のｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１で決まる線分と、この２頂点を両端とする点列内の１点の点データＰの距離は以下のように算出できる。
【外１】
2004341663.tif 000003
【０１４２】
但し、ここでは平面ベクトル間の演算で表記した。
【外２】
2004341663.tif 000004
【０１４３】
はそれぞれ点データＱｉ、点データＱｉ＋１、点データＰの平面ベクトルを表し、×はベクトルの外積演算を、｜｜はベクトルの絶対値を表す数学記号であり、この演算は中間データ記憶部３０ａに格納してある点データＱｉ、点データＱｉ＋１、点データＰの座標値データをもとに演算部３０ａで通常の四則演算、平方根の開平演算を行うことで求めることができる。
【０１４４】
「頂点列データ」のｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１で決まる線分に対して求まった垂直距離の最大値ｄｍａｘ（ｉ）と垂直距離の基準値ｖｔｘｔｈ０を比較し、この垂直距離の最大値ｄｍａｘ（ｉ）が垂直距離の基準値ｖｔｘｔｈ０を越えたときにはこれを与える点を新たな頂点として、その点データを「頂点列データ」のｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１の間に挿入し、「頂点列データ」を更新する。
【０１４５】
垂直距離の最大値ｄｍａｘ（ｉ）が垂直距離の基準値ｖｔｘｔｈ０以下の時には、ｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１で決まる線分に沿った符号付き距離を判定の材料とする。点列内の点データＰからｉ番目の頂点の点データＱｉへと向かう有効線分と、点データＰからｉ＋１番目の頂点の点データＱｉ＋１へと向かう有効線分のこの両頂点を結ぶ直線への射影を各々考えこの２つの有効線分の向きが同じ時には有効線分の差の絶対値を算出する。
【０１４６】
これはＰからｉ番目の頂点の点データＱｉへのベクトルと頂点ＱｉＱｉ＋１を結ぶベクトルとの内積と、点データＰからｉ＋１番目の頂点の点データＱｉ＋１へのベクトルと頂点ＱｉＱｉ＋１を結ぶベクトルの内積の符号を比較し、これらが同符号の時には両内積の差の絶対値を算出すればよい。
【０１４７】
この符号の判定には、点データＰからｉ番目の頂点の点データＱｉへと向かう有効線分と、点データＰからｉ＋１番目の頂点の点データＱｉ＋１へと向かう有効線分の相対的方向が問題となるため、射影をとる基準である頂点ＱｉＱｉ＋１を結ぶベクトルの方向は両者について共通にとれば十分であるが、本実施例では「頂点列データ」の順番に従って方向を決めるものとする。以上の事を平面ベクトルを用いた式で表記すれば、２頂点ＱｉＱｉ＋１と判定点Ｐに対して判定量ｔ１（ＱＩ，Ｑｉ＋１；Ｐ），ｔ２（ＱＩ，Ｑｉ＋１；Ｐ）の符号が同じ場合にその差の絶対値をとればよい。
【外３】
2004341663.tif 000005
【０１４８】
但し、ここでは（２）式同様ベクトル表記を用い、・はベクトルの内積を表す。（３）式は（２）式同様に、点データの座標値を用いて通常の四則演算を行う事により算出可能である。
【０１４９】
この判定量判定量ｔ１（ＱＩ，Ｑｉ＋１；Ｐ），  ｔ２（ＱＩ，Ｑｉ＋１；Ｐ）の符号が同じ場合にはそのさの絶対値ｔ（ＱＩ，Ｑｉ＋１；Ｐ）を以下のように算出する。
【外４】
2004341663.tif 000006
【０１５０】
この算出された絶対値ｔ（ＱＩ，Ｑｉ＋１；Ｐ）を用いて、全頂点間のでの直線方向距離の最大値ｔｍａｘを求める。これは「頂点列データ」のうちｉ番目の頂点の点データＱｉとｉ＋１番目の頂点も点データＱｉ＋１間にある（但しＱｉ、Ｑｉ＋１を含まず）各点データについて絶対値ｔ（ＱＩ，Ｑｉ＋１；Ｐ）を算出して行き、その時点で、絶対値ｔ（ＱＩ，Ｑｉ＋１；Ｐ）がそれ以前の最大値ｔｍａｘの値を越える場合には最大値ｔｍａｘの値とそれを与える点データをその絶対値ｔ（ＱＩ，Ｑｉ＋１；Ｐ）と点データで更新し、そうでない時には次の頂点へと動作を進めるという具合に、従来よく知られた仮の最大値のメモリへの格納と順次比較による最大値の算出方法で一連の近似動作の中に組み入れて行う事が可能である。
【０１５１】
判定量ｔ１（ＱＩ，Ｑｉ＋１；Ｐ），ｔ２（ＱＩ，Ｑｉ＋１；Ｐ）の符号が異なる場合には、ｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１で挟まれた点列の順序に従ってＰの次の点の評価を行う。
【０１５２】
このようにして順次「頂点列データ」のうちｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１間にある（但しＱｉ、Ｑｉ＋１を含まず）各点データについて順次上記距離を算出していき、その最大値ｔｍａｘが所定の基準値ｖｔｘｔｈ１を越えた場合にはその最大値ｔｍａｘを与える点データを新たな頂点として、その点データを「頂点列データ」のｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１の間に挿入し、「頂点列データ」を更新する。
【０１５３】
基準値ｖｔｘｔｈ１の値は、線分近似の精度により使用者の自由に設定できるが、近似精度の整合性から特に点列内各点の２点を結ぶ直線への垂直距離の最大値ｄｍａｘに対する基準値ｖｔｘｔｈ０と同じに取ることが好ましい。
【０１５４】
最大値ｔｍａｘが所定の基準値ｖｔｘｔｈ１を越えない場合のはそのまま次ぎの頂点、Ｉ＋１番目の頂点の点データＱＩ＋１とｉ＋２番目の頂点の点データＱｉ＋２の間の点列に関して以上の動作を続ける。
【０１５５】
これを「頂点列データ」の最後の頂点に達するまで行う。
【０１５６】
このようにして新たな階層の近似線分列、即ち「頂点列データ」が得られる。
【０１５７】
この動作を「頂点列データ」に何の変化が得られなくなるまで続ける。具体的には、「頂点列データ」内の頂点データの個数を格納しておき、動作により頂点が検出される毎にそのカウントをまし、個数変動がなくなって時点で全近似探索動作をうち切ればよい。
【０１５８】
本発明において２頂点を結ぶ直線に垂直方向の距離の最大値ｄｍａｘと線分にそった最大距離ｔｍａｘの算出は独立に行うことが可能である。特に上記説明では垂直方向の距離の最大値ｄｍａｘが規定値ｖｔｘｔｈ０を越えない場合に最大距離ｔｍａｘの算出する構成について説明したがこれは計算量を減少し、処理時間を短縮する効果をもつ。一方近年盛んに行われる複数ＣＰＵを搭載した計算機による並列計算では、２頂点を結ぶ直線に垂直方向の距離の最大値ｄｍａｘと線分にそった最大距離ｔｍａｘの算出を独立に、別個のＣＰＵで同時に処理を行うことが出来る。２頂点を結ぶ直線に垂直方向の距離の最大値ｄｍａｘと線分にそった最大距離ｔｍａｘの算出は評価する点列内の点の数が同じであり、ほぼ同程度の計算量を含むため、並列計算においてこれらの部分を並列化する構成は並列計算磁のＣＰＵ間の同期が取り易い。
【０１５９】
本実施例では近似動作の主要部分となる動作を独立に行えるアルゴリズムをとることで、特別な並列技術を用いずとも並列同期が取りやすい計算アルゴリズムを提供できるという利点を持つ。
【０１６０】
次に図１に従って本実施例による線分近似の動作を説明する。
【０１６１】
ステップＳ１は初期化動作であり、ここ中間データ記憶部３０ｃの各領域にある諸値をクリアする。次に基準直線の垂直方向の距離に対する基準値ｖｔｘｔｈ０、直線方向の距離の基準値ｖｔｘｔｈ１を設定し、点列各点の初期状態を設定する。「頂点列データ」に初期の始点、終点の点データをセットする。これらの設定値は中間データ記憶部３０ｃに格納される。元図形の点列は前記述のように「点列データ」として中間データ記憶部３０ｃ等に格納されているとする。また「頂点列データ」の初期値として元図形を構成する点列の始点と終点の２点「点データ」からなるデータを中間データ記憶部３０ｃに格納しておく。
【０１６２】
ステップＳ２よりステップＳ１１まではある階層にある線分列の各線分について線分近似の動作を行う。具体的には線分列を表す「頂点列データ」内の連続する２頂点を指定することで線分が指定されるので、「頂点列データ」より順次、連続する２頂点を読み込んで行く。ステップＳ２で線分がその階層の最終線分を越えるかどうか判定し、最終線分を越えない時はステップＳ３へ、最終線分を越えた場合にはステップＳ１０以降の動作へ進む。
【０１６３】
ステップＳ３ではその線分の両端の２頂点で挟まれた点列の「点列データ」より、順次点データを読み込んで、両端の２頂点の点データと点列の点データより（２）式を用いて点列の点から線分までの垂直最大距離ｄｍａｘを求める。
【０１６４】
ステップＳ４では最大垂直距離ｄｍａｘが閾値ｖｔｘｔｈ０を越えるかどうかを判定し、越えない時にはステップＳ６へ移り基準直線に沿った方向の距離に対して判定動作を進める。最大距離が閾値ｖｔｘｔｈ０を越えるた場合にはステップＳ５へ進む。
【０１６５】
ステップＳ５ではその線分に対しステップＳ３で求めた最大垂直距離ｄｍａｘを与える点を新たな頂点として線分分割を行う。線分を指定している２頂点の点データの間に最大距離ｄｍａｘを与える点の点データを挟んで新たな「頂点列データ」を作成して格納し直す。
【０１６６】
ステップＳ６では前述の（３）式、（４）式に従って点列内の点データＰからｉ番目の頂点の点データＱｉへと向かう有効線分と、点データＰからｉ＋１番目の頂点の点データＱｉ＋１へと向かう有効線分のこの両頂点を結ぶ直線への射影を各々考えこの２つの有効線分の向きが同じ時には有効線分の差の絶対値を算出する。これを２頂点で挟まれた点列内の点について行って行き、基準線分に沿った方向の最大距離ｔｍａｘを求める。
【０１６７】
ステップＳ７では基準線分に沿った方向の最大距離ｔｍａｘが閾値ｖｔｘｔｈ１を越えるかどうかを判定し、越えない時にはステップＳ９へ移り、次の連続する頂点に関して同様の動作を繰り返す。基準線分に沿った方向の最大距離ｔｍａｘが閾値ｖｔｘｔｈ１を越えるた場合にはステップＳ８へ進む。
【０１６８】
ステップＳ８ではその線分に対しステップＳ７で求めた基準線分に沿った方向の最大距離ｔｍａｘを与える点を新たな頂点として線分分割を行う。線分を指定している２頂点の点データの間に最大距離ｔｍａｘを与える点の点データを挟んで新たな「頂点列データ」を作成して格納し直す。
【０１６９】
ステップＳ２よりステップＳ９をその階層の最終頂点まで繰り返す。
【０１７０】
その階層の最終頂点まで処理が達したらステップＳ１０で以上のステップで頂点の数が増加したかを判定する。増加している場合にはこの階層の判定で閾値を越える新たな頂点が見つからなかったとしてステップＳ１１へ移り次の階層の判定を行うため、更新された「頂点列データ」について改めてステップＳ２以降の動作を繰り返す。ステップＳ１０までで新たな頂点が発生していればステップＳ１２へ移り処理を終了する。
【０１７１】
ステップＳ１２では所定の出力を行うと同時に格納してメモリのクリーンアップなどの後処理を行って処理を終了する。
【０１７２】
上記のに述べた様に、本実施例を複数ＣＰＵを搭載した計算機上で稼働させる場合にはステップＳ３ステップＳ６の動作を、個別のＣＰＵを用いて同時並列に稼働させる事も可能である。
【０１７３】
本実施例はこのように並列動作への拡張が容易であるという特徴を有した構成となっている。
【０１７４】
（第二の実施例）
本実施例は、第一の実施例に於いては基準線分からの垂直方向距離の最大値、線分に沿った方向の距離の最大値を算出後に各々の基準閾値と比較したのに対し、最大値算出以前に基準閾値と比較し、閾値以下の距離に対しては最大値の更新を行わない構成をとり、計算量を減少することで単独ＣＰＵでのシリアル動作時間を減少するとともに、線分に沿った方向の最大距離の判定により自由度をもたせた構成を提供するものである。
【０１７５】
本実施例では基準線分に沿った方向の距離に対する閾値ｖｔｘｔｈ１を固定にするのではなく、基準とする２頂点間の直線距離に応じてその値を設定するものである。
【０１７６】
ｉ番目の頂点の点データＱｉとｉ＋１番目の頂点の点データＱｉ＋１に挟まれた点列ないの点Ｐに対して、（３）式、（４）式に示した計算を行い絶対値ｔ（ＱＩ，Ｑｉ＋１；Ｐ）を算出した後にこの絶対値に対して以下の様な閾値を設定する。
【外５】
2004341663.tif 000007
【０１７７】
ここでαは近似精度に即して定数である。
【０１７８】
これはｉ番目の頂点Ｑｉとｉ＋１番目の頂点Ｑｉ＋１によって作られる線分の長さに対して点列内の点Ｐがｉ番目の頂点Ｑｉとｉ＋１番目の頂点Ｑｉ＋１を結ぶ基準線分の長さより大きくはずれる時に図形の概要、特に大きさの概要を抽出した線分近似を行うため、この閾値以上に距離をもつ点に対して線分近似の判定を行うものである。
【０１７９】
このような閾値設定を行うことで、基準直線に沿った方向の距離に対する評価が、近似線分の長さに即したものとなり、近似線分の部分的な細かさに応じて精度を決定できる。
【０１８０】
本実施例は第一の実施例にしめしたものと同様の構成で実現できるため子細な説明は省略する。
【０１８１】
本実施例の動作を第５図を用いて説明する。
【０１８２】
ステップＳ５０１は初期化動作であり、ここ中間データ記憶部３０ｃの各領域にある諸値をクリアする。次に基準直線の垂直方向の距離に対する基準値ｖｔｘｔｈ０、直線方向の距離の基準値ｖｔｘｔｈ１を決定するパラメタαを設定し、点列各点の初期状態を設定する。「頂点列データ」に初期の始点、終点の点データをセットする。これらの設定値は中間データ記憶部３０ｃに格納される。元図形の点列は前記述のように「点列データ」として中間データ記憶部３０ｃ等に格納されているとする。。また「頂点列データ」の初期値として元図形を構成する点列の始点と終点の２点「点データ」からなるデータを中間データ記憶部３０ｃに格納しておく。
【０１８３】
ステップＳ５０２よりステップＳ５１５まではある階層にある線分列の各線分について線分近似の動作である。またステップＳ５０３からステップＳ５１４はある階層での近似線分すなわち隣接する２頂点間の点列に関する動作である。さらにステップＳ５０４からＳ５１１は隣接する２頂点間の点列内の１つの点に関する動作である。具体的には線分列を表す「頂点列データ」内の連続する２頂点を指定することで線分が指定されるので、「頂点列データ」より順次、連続する２頂点を読み込んで行く。ステップＳ５０２で線分がその階層の最終線分を越えるかどうか判定し、最終線分を越えない時はステップＳ５０３へ、最終線分を越えた場合にはステップＳ５１５以降の動作へ進む。
【０１８４】
ステップＳ５０３では基準線分に沿った方向の距離に対する閾値ｖｔｘｔｈ１を決めるために２頂点間の直線距離を上記（５）式に従って算出する。この値は後述のステップＳ５０９での判定に使用するために中間データ記憶部３０ｃなどに一時格納される。
【０１８５】
またステップＳ５０３では後述の距離の最大値の検出のために、基準直線の垂直距離仮最大値ｄｍａｘ格納用とその最大値を与える点データ格納用、並びに基準直線の直線に沿ったの直線方向距離仮最大値ｔｍａｘ格納用とその最大値を与える点データ格納用メモリ領域を初期化する。
【０１８６】
ステップＳ５０４ではその線分の両端の２頂点で挟まれた点列の「点列データ」より、順次点データを読み込んで、その判定する点が２頂点内にあるかどうかを判定し、判定点が２頂点の端に足ししたときにはステップＳ５１２へ、そうでなければステップＳ５０５へ進む。
【０１８７】
ステップＳ５０５では両端の２頂点の点データと点列の点データより（２）式を用いて点列の点から線分までの垂直距離ｄを求める。
【０１８８】
ステップＳ５０６では垂直距離ｄと垂直距離の閾値ｖｔｘｔｈ０の大きさを判定し、垂直距離ｄが垂直距離の閾値ｖｔｘｔｈ０より大きいときには最大値を求めるためステップＳ５０７へ、そうでないときには基準線分に沿った距離の判定を行うためステップＳ５０８へ進む。
【０１８９】
本本実施例では第一の実施例とことなり、距離の最大値の判定を行うまえに閾値により判定点の選別を行っている。このため最大値判は閾値を越えたもののみに対して行えばよく、処理量を減少させることで、処理の高速化が計れる。
【０１９０】
ステップＳ５０５では基準直線に垂直な方向の距離に対し、閾値による選別を行い、後述のステップＳ５０９に於いては基準直線にそった距離に対する選別を行う。
【０１９１】
ステップＳ５０７では垂直距離最大値ｄｍａｘの検出を行う。点列内の評価点の現時点より前での仮の垂直距離最大値とステップＳ５０５で求めた垂直距離ｄの大きさを比較し、垂直距離ｄの方が大きい時には仮の垂直距離最大値を垂直距離ｄで、また最大値を与える点を現在の評価点で更新する。これらの値は基準直線の垂直距離仮最大値ｄｍａｘ格納用とその最大値を与える点データ格納用、並びに基準直線の直線に沿ったの直線方向距離仮最大値ｔｍａｘ格納用とその最大値を与える点データ格納用メモリ領域に格納される。この値は線分に関する繰り返しの以前にステップＳ５０３で初期化されている。
【０１９２】
ステップＳ５０６で垂直距離ｄが垂直距離の閾値ｖｔｘｔｈ０以下になった時には、基準直線に沿った方向の距離の判定を行う。はじめにステップＳ５０８で（３）式、（４）式に沿って基準直線方向判定値ｔを算出する。
【０１９３】
その後ステップＳ５０９で基準直線方向判定値ｔが基準直線方向閾値ｖｔｘｔｈ１を越えるかどうかの判定を行う。基準直線方向閾値ｖｔｘｔｈ１は（５）式によって算出されるが、あらかじめステップＳ５０３に於いて計算を行って於き、中間データ記憶部３０ｃにその値を格納して於くのが、計算量を減らす意味で好ましい。基準直線方向判定値ｔが基準直線方向閾値ｖｔｘｔｈ１以下の時にはステップＳ５１１へ移り点列の次の点の評価を行う。また基準直線方向判定値ｔが基準直線方向閾値ｖｔｘｔｈ１を越えた場合には基準直線方向距離最大値ｔｍａｘの検出のためステップＳ５１０へ向かう。
【０１９４】
基準直線方向の距離の判定についてもあらかじめ基準直線方向閾値ｖｔｘｔｈ１を用いて選別後のその最大値を検出する構成をとることで、第一の実施例に比べ処理量を軽減する事ができる。
【０１９５】
ステップＳ５１０では基準直線方向距離最大値ｔｍａｘの検出を行う。点列内の評価点の現時点より前での仮の基準直線方向距離最大値とステップＳ５０５で求めた基準直線方向距離ｔの大きさを比較し、基準直線方向距離ｔの方が大きい時には仮の基準直線方向距離最大値を基準直線方向距離ｔで、また最大値を与える点を現在の評価点で更新する。これらの値は基準直線の垂直距離仮最大値ｄｍａｘ格納用とその最大値を与える点データ格納用、並びに基準直線の直線に沿ったの直線方向距離仮最大値ｔｍａｘ格納用とその最大値を与える点データ格納用メモリ領域に格納される。この値は線分に関する繰り返しの以前にステップＳ５０３で初期化されている。
【０１９６】
ステップＳ５０４で、判定点が頂点に達した場合には、ステップＳ５１２へ移る。ステップＳ５１２では垂直距離仮最大値ｄｍａｘ或いは基準直線方向距離仮最大値ｔｍａｘが検出されたかどうかを判定する。具体的には対応する点データ格納用メモリ領域内の値が初期化された時の値のままかを判定する。何れかの最大値が検出されていれば、ステップＳ５１３でこの２頂点で作られる線分に新たな頂点の更新を行う。両方の最大値が検出されているときには垂直距離仮最大値ｄｍａｘを与える点を新たな頂点として採用する。検出された最大値を与える点データを「頂点列データ」内の２頂点の間に挿入して「頂点列データ」の更新を行う。ステップＳ５１２で最大距離が検出されていないと判断された場合、及びステップＳ５１３の処理後にステップＳ５１４へ向かい、次の線分、即ち「頂点列データ」の次の隣接２頂点に関して以上の動作を繰り返す。
【０１９７】
ステップＳ５０２によりこの階層の最終線分まで判定が到達するとステップＳ５１５でこの階層で「頂点列データ」に更新がおこなわれたかの判定を行い、「頂点列データ」の更新が行われて居れば、次の階層へ移って新たな「頂点列データ」の始頂点からステップ５０２以降の動作を繰り返す。該階層で頂点列データ」に更新がおこなわれた場合には線分近似動作が収束したとして終了動作ステップＳ５１６へ向かう。
【０１９８】
ステップＳ５１６では所定の出力を行うと同時に格納してメモリのクリーンアップなどの後処理を行って処理を終了する。
【０１９９】
本実施例は最大値算出以前に基準閾値と比較し、閾値以下の距離に対しては最大値の更新を行わない構成をとり、計算量を減少することで第一の実施例に比べ単独ＣＰＵでもシリアル動作時間を減少するという利点をもつ。
【０２００】
また本実施例では基準線分に沿った方向の距離に対する閾値ｖｔｘｔｈ１を固定にするのではなく、基準とする２頂点間の直線距離に応じてその値を設定するものであり、基準直線に沿った方向の距離に対する評価が、近似線分の長さに即したものとなり、近似線分の部分的な細かさに応じて精度を決定できるという利点をもつ。
【０２０１】
【発明の効果】
本発明では近似動作のなかで、基準直線からの垂直距離が閾値以内にあった時には、基準直線方向の距離を評価することで、誤動作が少なく、特に図形の大きさの概要を変動させることなく線分への近似が行える。
【図面の簡単な説明】
【図１】本発明の第１の実施例の線分化アルゴリズムの流れ図。
【図２】本発明による線分近似を説明する図。
【図３】本発明による線分近似を実行する構成を説明する図。
【図４】本発明による関数Ｄ（ｄ，Ｔ）の概要を説明する図。
【図５】本発明に第２の実施例の動作アルゴリズムを示す図。
【図６】本発明による線分化を説明する図。
【図７】本発明で前提としない座標点の説明図。
【図８】従来の技術で述べるの線分化アルゴリズムの流れ図。
【図９】従来の技術の問題点を説明する図。
【図１０】従来の技術で述べる線分化処理の説明図。
【図１１】従来の技術で述べる線分化処理を説明する他の図。
【符号の説明】
３０  本発明の実施例を実現するための演算手段
３０ａ  本発明の実施例を実現するための演算手段の入力部
３０ｂ  本発明の実施例を実現するための演算手段の演算手順記憶部
３０ｃ  本発明の実施例を実現するための演算手段の中間データ記憶部
３０ｄ  本発明の実施例を実現するための演算手段の入力部
３０ｅ  本発明の実施例を実現するための演算手段の出力部
３０ｆ  本発明の実施例を実現するための演算手段のバス部
３１  本発明の実施例を実現するための入力手段
３２  本発明の実施例を実現するための出力手段
３３  本発明の実施例を実現するための表示手段
３４  本発明の実施例を実現するためのデータ記憶手段
【図１】
2004341663.tif 000008
【図２】
2004341663.tif 000009
【図３】
2004341663.tif 000010
【図４】
2004341663.tif 000011
【図５】
2004341663.tif 000012
【図６】
2004341663.tif 000013
【図７】
2004341663.tif 000014
【図８】
2004341663.tif 000015
【図９】
2004341663.tif 000016
【図１０】
2004341663.tif 000017
【図１１】
2004341663.tif 000018