(57)【要約】【課題】  スキャン画像が入力されても、ＰＤＬ画像データが入力されても、それぞれのデータに応じたベクトル変換を行うことにより、何れのデータもベクトルデータとして統一的に扱うことを可能にする為の技術を提供すること。【解決手段】  画像を入力した場合、この画像のランパケットのうち、両端が画像上におけるエッジ部上に位置するランパケット、若しくはディスプレイリストを入力した場合、ディスプレイリストに基づいて、ディスプレイリストが表す画像内における前景部を構成するランパケットをについてベクトル化を行う。画像を入力した場合には、前景部が占める画像領域を塗りつぶすことで得られる画像、若しくは、ディスプレイリストを入力した場合には、ディスプレイリストが表す画像において前景部が占める画像領域以外の画像領域についてビットマップ圧縮を行う。【選択図】  図１
2008042346.tif 000002
【特許請求の範囲】
【請求項１】
画像、ディスプレイリストの何れかを入力する入力工程と、
前記入力工程で画像を入力した場合、当該画像における同一ライン内で略同一色の画素列をランパケットとして抽出し、抽出したランパケットのうち、両端が当該画像上におけるエッジ部上に位置するランパケットを前景部ランパケットとして求める第１の工程と、
前記入力工程でディスプレイリストを入力した場合、当該ディスプレイリストに基づいて、当該ディスプレイリストが表す画像内における前景部を構成するランパケットを前景部ランパケットとして求める第２の工程と、
前景部ランパケットについて第１の圧縮処理を行う第１の圧縮工程と、
前記入力工程で画像を入力した場合には、当該画像において前景部ランパケットが占める画像領域を塗りつぶすことで得られる画像について第２の圧縮処理を行う、若しくは、前記入力工程でディスプレイリストを入力した場合には、当該ディスプレイリストが表す画像において背景部の画像領域について第２の圧縮処理を行う第２の圧縮工程と
前記第１，２の圧縮工程による結果をメモリに格納する格納制御工程と
を備えることを特徴とする画像処理方法。
【請求項２】
前記第１，２の工程では、ランパケットの始点、終点、当該ランパケットを構成している画素の色、をセットにしたデータを求めることを特徴とする請求項１に記載の画像処理方法。
【請求項３】
前記第２の工程では、ディスプレイリストに基づいて変換したエッジリスト内に記述されている情報のうち、文字線画の属性が付加されている情報に基づいて前景部ランパケットを生成することを特徴とする請求項１に記載の画像処理方法。
【請求項４】
前記第２の圧縮工程では、前記入力工程でディスプレイリストを入力した場合には、当該ディスプレイリストに基づいて変換したエッジリスト内に記述されている情報のうち、文字線画の属性以外の属性が付加されている情報に基づいて背景部ランパケットを生成し、生成した背景部ランパケットが占める画像領域について第２の圧縮処理を行うことを特徴とする請求項１に記載の画像処理方法。
【請求項５】
画像、ディスプレイリストの何れかを入力する入力手段と、
前記入力手段が画像を入力した場合、当該画像における同一ライン内で略同一色の画素列をランパケットとして抽出し、抽出したランパケットのうち、両端が当該画像上におけるエッジ部上に位置するランパケットを前景部ランパケットとして求める第１の手段と、
前記入力手段がディスプレイリストを入力した場合、当該ディスプレイリストに基づいて、当該ディスプレイリストが表す画像内における前景部を構成するランパケットを前景部ランパケットとして求める第２の手段と、
前景部ランパケットについて第１の圧縮処理を行う第１の圧縮手段と、
前記入力手段が画像を入力した場合には、当該画像において前景部ランパケットが占める画像領域を塗りつぶすことで得られる画像について第２の圧縮処理を行う、若しくは、前記入力手段がディスプレイリストを入力した場合には、当該ディスプレイリストが表す画像において背景部の画像領域について第２の圧縮処理を行う第２の圧縮手段と
前記第１，２の圧縮手段による結果をメモリに格納する格納制御手段と
を備えることを特徴とする画像処理装置。
【請求項６】
コンピュータに請求項１乃至４の何れか１項に記載の画像処理方法を実行させるためのプログラム。
【請求項７】
請求項６に記載のプログラムを格納したことを特徴とする、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮技術に関するものである。
【背景技術】
【０００２】
近年、デジタルコピー機とプリンタとを統合したデジタル複合機の開発が盛んになりつつある。デジタル複合機は、紙原稿をスキャンしてコピーを取る機能と、PCからの印刷データを印刷出力する機能と、の両方が搭載されている。
【０００３】
このような機器を作る場合、スキャン画像とページ記述言語（PDL）とを混在して印刷出力する場合などを考慮し、スキャン画像およびPDLを統一的に扱うための画像圧縮方式が必要となる。従来は、全部画像をビットマップデータに変換してから、JPEG等を用いて圧縮する方式を用いることが多かった。このため、原稿の文字・グラフィックス部に、圧縮による歪が生じていた。
一方、スキャン画像において、特に文字の部分をベクトルデータ化するという技術が知られている。このような技術の一例として、文書画像をブロックセレクション（BS）によって文字ブロックと背景部とに分け、文字部をベクトル化することにより領域単位に圧縮方法を変えるという技術がある。このような技術は、文字品質および拡大画像の画質を向上させる目的などに使われている。
【０００４】
しかし、この技術では、ページ全体を記録するメモリが必要とされる領域分割技術を使うことになり、その結果、分割処理のために必要なメモリには大容量のものが要求される。これにより、メモリに対するコストの増大が考えられる。また、分割処理には繰り返し演算が必要となるので、処理を高速に行うことは困難であった。
【０００５】
一方、高速処理を行うハードウェアに対応可能な領域分割技術として、画像のエッジ情報などを利用して、像域フラグと呼ばれる属性フラグを画素単位に割り当てる技術がある。これは主に、コピーの文字画質を改善するために、エッジ強調や色処理の方法を切り替えるための条件として使われるものである。しかし、この技術で領域分割を行う場合には、画素単位で属性フラグを参照し、何れの領域に属する画素であるのかを判定するので、係る技術とベクトル化技術との融合はできていない。
【０００６】
そこで、スキャン画像およびPDLを統一的に扱うように、高速手法でベクトルデータとビットマップデータの２つに分け、ビットマップデータは解像度を固定し（例えば６００dpi）、ベクトルデータは解像度に非依存にする、というようなデータ管理を行うことで、プリント解像度に依存しないデータ構成をとる方法が考えられる。
【特許文献１】特公平６−１４３５４号公報
【特許文献２】特許第２９００７９８号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、上記公知技術の組み合わせだと、画像の入力形態によってはそのデータ構造が異なるため、統括して管理できなかった。
【０００８】
本発明は以上の問題に鑑みてなされたものであり、スキャン画像が入力されても、ＰＤＬ画像データが入力されても、それぞれのデータに応じたベクトル変換を行うことにより、何れのデータもベクトルデータとして統一的に扱うことを可能にする為の技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の目的を達成するために、例えば、本発明の画像処理方法は以下の構成を備える。
【００１０】
即ち、画像、ディスプレイリストの何れかを入力する入力工程と、
前記入力工程で画像を入力した場合、当該画像における同一ライン内で略同一色の画素列をランパケットとして抽出し、抽出したランパケットのうち、両端が当該画像上におけるエッジ部上に位置するランパケットを前景部ランパケットとして求める第１の工程と、
前記入力工程でディスプレイリストを入力した場合、当該ディスプレイリストに基づいて、当該ディスプレイリストが表す画像内における前景部を構成するランパケットを前景部ランパケットとして求める第２の工程と、
前景部ランパケットについて第１の圧縮処理を行う第１の圧縮工程と、
前記入力工程で画像を入力した場合には、当該画像において前景部ランパケットが占める画像領域を塗りつぶすことで得られる画像について第２の圧縮処理を行う、若しくは、前記入力工程でディスプレイリストを入力した場合には、当該ディスプレイリストが表す画像において背景部の画像領域について第２の圧縮処理を行う第２の圧縮工程と
前記第１，２の圧縮工程による結果をメモリに格納する格納制御工程と
を備えることを特徴とする。
【００１１】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。
【００１２】
即ち、画像、ディスプレイリストの何れかを入力する入力手段と、
前記入力手段が画像を入力した場合、当該画像における同一ライン内で略同一色の画素列をランパケットとして抽出し、抽出したランパケットのうち、両端が当該画像上におけるエッジ部上に位置するランパケットを前景部ランパケットとして求める第１の手段と、
前記入力手段がディスプレイリストを入力した場合、当該ディスプレイリストに基づいて、当該ディスプレイリストが表す画像内における前景部を構成するランパケットを前景部ランパケットとして求める第２の手段と、
前景部ランパケットについて第１の圧縮処理を行う第１の圧縮手段と、
前記入力手段が画像を入力した場合には、当該画像において前景部ランパケットが占める画像領域を塗りつぶすことで得られる画像について第２の圧縮処理を行う、若しくは、前記入力手段がディスプレイリストを入力した場合には、当該ディスプレイリストが表す画像において背景部の画像領域について第２の圧縮処理を行う第２の圧縮手段と
前記第１，２の圧縮手段による結果をメモリに格納する格納制御手段と
を備えることを特徴とする。
【発明の効果】
【００１３】
本発明の構成により、スキャン画像が入力されても、ＰＤＬ画像データが入力されても、それぞれのデータに応じたベクトル変換を行うことにより、何れのデータもベクトルデータとして統一的に扱うことを可能にすることができる。
【発明を実施するための最良の形態】
【００１４】
以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
【００１５】
［第１の実施形態］
図１は、本実施形態に係る画像処理装置において、画像符号化処理のための機能構成を示すブロック図である。
【００１６】
１００は画像処理装置本体であり、スキャン画像１０、ディスプレイリスト１２はそれぞれ画像処理装置１００に対する入力データである。スキャン画像１０は、紙などの記録媒体上に記録された情報をスキャナなどを用いてスキャンすることで得られる画像データである。ディスプレイリスト１２は、ＰＤＬ(Page-Description-Language)に基づいてレンダリングを行う際の中間データである。画像処理装置１００は、このような２種類のデータ（スキャン画像、ディスプレイリスト）を受け付け可能とする。
【００１７】
同図に示す如く、画像処理装置１００は、領域分割部１３、エッジリスト生成部１１１、前景圧縮部１４、背景圧縮部１５、メモリ１６により構成されている。
【００１８】
上記スキャン画像１０は領域分割部１３で前景部と背景部とに分離される。前景部は前景圧縮部１４に入力され、背景部は背景圧縮部１５に入力される。前景圧縮部１４は前景部に対してベクトル化による圧縮処理を行い、背景圧縮部１５は、背景部に対してビットマップ圧縮処理を行う。そして前景圧縮部１４、背景圧縮部１５のそれぞれによる圧縮処理結果は後段のメモリ１６に出力され、メモリ１６はこれらの圧縮処理結果を保持する。
【００１９】
以下、この一連の処理についてより詳細に説明する。
【００２０】
スキャン画像１０はクラスタリング処理部１０１に入力される。クラスタリング処理部１０１は、スキャン画像１０を構成するそれぞれの画素を、略同一色を有する画素毎にグループ（クラスタ）分割する。略同一色を有する領域毎に画像を分割する処理については周知の技術を用いる。
【００２１】
クラスタリング処理部１０１によるクラスタリング処理の結果、及びスキャン画像１０は、ランパケット生成部１０２、エッジ抽出部１０４に供給される。
【００２２】
ランパケット生成部１０２は、スキャン画像１０を構成する各行を参照し、同一行内で略同一色を有する画素が連続して配置されている画素列、若しくは同じクラスに属する画素が連続して配置されている画素列を検出する。そして検出した画素列（ランパケット）の始点の位置、終点の位置、この画素列の色、のセットをランパケットデータとして求める。なお、終点の位置の変わりに、画素列の長さ（画素数）をランパケットデータに含めても良い。
【００２３】
図４は、ランパケットデータの生成処理を説明するための一例として、「あ」の文字を処理する場合について示した図である。同図において、４３は、既にランパケットデータを生成したライン群である。４１はこれからランパケットデータを生成しようとするラインである。４４は未だランパケットデータを生成していないライン群である。
【００２４】
ライン４１において、略同一色（同一クラスタ）を有する画素が連続して配置されているランパケットは、４２ａを始点、４２ｂを終点とするランパケット（ランパケットＸ）と、４５ａを始点、４５ｂを終点とするランパケット（ランパケットＹ）の２つである。
【００２５】
ランパケットＸについてランパケットデータを生成する場合には、始点４２ａの位置、終点４２ｂの位置、ランパケットＸを構成している画素の色、のセットを「ランパケットＸのランパケットデータ」として求める。
【００２６】
一方、ランパケットＹについてランパケットデータを生成する場合には、始点４５ａの位置、終点４５ｂの位置、ランパケットＹを構成している画素の色、のセットを「ランパケットＹのランパケットデータ」として求める。
【００２７】
図１に戻って、エッジ抽出部１０４は、スキャン画像１０に含まれているエッジを検出する。図６０は、エッジ抽出部１０４によるエッジ抽出処理を説明する図である。同図において６１０は横方向エッジを抽出するための１次元フィルタで、絶対値部６３０でその処理結果の絶対値を計算する。また、６２０は縦方向エッジを抽出するための１次元フィルタで、絶対値部６４０でその処理結果の絶対値を計算する。
【００２８】
絶対値部６３０による処理結果と絶対値部６４０による処理結果とは加算部６６０により合計され、合計結果は比較部６５０により閾値と大小比較される。そしてその大小比較結果に基づいて、注目画素のエッジ強度を求める。なお、画像におけるエッジを検出する（各画素におけるエッジ強度を求める）処理については周知の技術であるので、これに関する説明は省略する。
【００２９】
図６１は、エッジ抽出処理を行った場合に得られる画像の例を示す図である。エッジ抽出部１０４に対して「あ」の文字画像を入力すると、エッジ抽出部１０４からは図６１に示すような画像が出力される。
【００３０】
図１に戻って、始点・終点判定部１０３は、エッジ抽出部１０４が抽出したエッジ上に始点、終点が位置するようなランパケットが存在するかを判断する。そして、エッジ抽出部１０４が抽出したエッジ上に始点、終点が位置するランパケットについては、「前景部を構成しているランパケット」と判断する。なお、スキャン画像１０上において、前景部を構成しているランパケット以外は背景部と判断する。
【００３１】
このような処理により、背景部で単に同じ色の画素が並んでランパケットが生成されたところと、前景部のランパケットとを分けることができる。
【００３２】
図６２は、様々なランパケットのうち、前景部に属するランパケット、背景部に属するランパケットを説明する図である。ランパケット６２０１は、始点、終点共にエッジ画素上に位置するので、始点・終点判定部１０３により、前景部としてのランパケットと判定される。ランパケット６２０２は、終点のみがエッジ画素上に位置するので、始点・終点判定部１０３により、背景部を構成するランパケットと判定される。ランパケット６２０３は、始点のみがエッジ画素上に位置するので、始点・終点判定部１０３により、背景部を構成するランパケットと判定される。ランパケット６２０４は、始点、終点の何れもエッジ画素上には位置していないので、始点・終点判定部１０３により、背景部を構成するランパケットと判定される。
【００３３】
図１に戻って、前景・背景分離部１０５は、スキャン画像１０から前景部を抜き出すことで背景画像を生成し、生成した背景画像を後段の背景の穴埋め部１０９に送出する。背景の穴埋め部１０９は、背景画像において、前景部を抜き出した部分を、その周囲の色でもって埋める処理を行う。そして背景の穴埋め部１０９により処理された背景画像は背景圧縮部１５（ビットマップ圧縮部１１０）に送出される。ビットマップ圧縮部１１０は、この背景画像に対してビットマップ圧縮（例えば、ＪＰＥＧ圧縮）を行い、その結果をメモリ１６に送出する。
【００３４】
一方、前景・背景分離部１０５で抜き出された前景部、即ち、前景部として判断されたランパケットデータは前景圧縮部１４に送出される。前景圧縮部１４は、前景部として判断されたランパケットデータに基づいて後述する処理により、輪郭ベクトルデータとその輪郭の内部の色データとをセットにしてベクトルデータとしてメモリ１６に送出する。
【００３５】
図３は、スキャン画像１０を前景部と背景部とに分離するための処理の一例を示す図である。同図において３１はスキャン画像１０の一例としてのもので、同図では「あ」の文字が画像中に記されている。
【００３６】
３２は前景部としての画像である。換言すれば、前景部としてのランパケットの集合である。３４は前景・背景分離部１０５により生成された背景画像である。３５は、背景の穴埋め部１０９により生成された背景画像である。
【００３７】
３３は、前景部に対して行うアウトラインベクトル処理を行う様子を示している。この処理は、前景部に対してラスタースキャンを行い、最初の有意画素を検出し、そこから境界追跡を行う。領域の境界をたどっていき、開始点に戻ったところで終了する。同図の例では、角点の座標を記録して、この間を直線で結べば、もとの画像の輪郭が再現でき、また元の画像の内部色を抽出しておいて、この色で塗り潰せば、原画が再現できることになる。同図の例では、直線のみであったが、曲線の場合は、公知のベジェ関数近似で表現することができる。これをアウトラインベクトルと呼ぶ。
【００３８】
図１に戻って、ディスプレイリスト１２はエッジリスト生成部１１に入力される。エッジリスト生成部１１は、ディスプレイリスト１２に基づいて周知のレンダリング処理を更に進め、エッジリストに変換する。エッジリストとは、ディスプレイリスト１２が表す画像を構成するそれぞれのラインの色の塗り方を始点、終点、重ね合わせ順序等で記したものである。
【００３９】
エッジリスト生成部１１は生成したエッジリストを参照し、文字や図形等の文字線画の属性が付加されているものを用いて「前景部を構成しているランパケットデータ」を生成し、輪郭抽出部１０７に送出する。また、それ以外の写真属性等が付加されているものを用いて「背景部を構成しているランパケットデータ」を生成し、背景圧縮部１５（ビットマップ圧縮部１１０）に送出する。この場合に背景圧縮部１５が行う処理については上述の通りである。
【００４０】
以下では、ディスプレイリスト１２をエッジリスト生成部１１に入力した場合に、エッジリスト生成部１１、前景圧縮部１４が行う処理について詳細に説明する。
【００４１】
ディスプレイリスト１２を生成する元となったＰＤＬは、ページ単位の描画コマンド（ベジェ曲線）であり、ディスプレイリスト１２は、バンド単位の描画コマンド（多角形近似コマンド）であり、またエッジリストは、ライン単位の表示（開始点、エッジの長さ）や色の変化点リスト[奇数：始点、偶数：終点]などを表す用語である。これらは、プリンタの描画処理の時に、処理速度、メモリ量などにより、どのレベルまで変換しておきかえるかにより、高速で正確な印字を得る方法としてよく知られた技術で用いられる用語である。本実施形態では、アウトラインベクトルを得るために、エッジリストまで変換したデータからランパケットデータを生成する。
【００４２】
＜エッジリストについて＞
図６３は、文字画像とエッジリストとの対応関係を示す図である。図６３（ｂ）は文字画像の一例として「あ」が記された画像を示しており、図６３（ａ）は、この「あ」が記された文字画像に対するエッジリストを示している。例えば、０ライン目（図６３（ｂ）において縦方向にライン番号、横方向に位置を示している）に「あ」の文字を構成している画素群、即ち、同一色の画素群（ランパケット）の始点の位置は１４，終点の位置は１７であるので、エッジリストにはこの始点、終点の位置が記されている。これは他のラインについても同様で、このようなエッジリストにより、各ランパケットの始点、終点の位置が分かると共に、元の文字画像（ここでは図６３（ｂ）に示した画像）を復元することができる。
【００４３】
エッジリストに基づいてランパケットデータを生成する場合には、エッジリスト内に記述されている情報のうち、文字線画の属性が付加されている情報に基づいて前景部を構成するランパケットを生成するし、エッジリスト内に記述されている情報のうち、文字線画の属性以外の属性が付加されている情報に基づいて背景部を構成するランパケットを生成する。
【００４４】
＜ランパケットデータを用いたアウトラインベクトルの抽出処理について＞
図５は、３×３参照方式を用いることで、「あ」という文字画像に対するアウトラインベクトルを生成していく方式を説明する図である。上述の通り、上記エッジリストを参照することで、文字や図形を構成しているランパケット（前景部ランパケット）を得ることができる。従って、前景部ランパケットを着目ラインと前後１ラインの３ラインにビットマップ展開する処理を全ての前景ランパケットについて行うことで、文字（図形）部を「１」、非文字部を「０」とする２値画像を生成することができる。
【００４５】
なお、このような処理は一般的には、各前景ランパケットを着目ラインと前後Ｍ（Ｍ＞０）ラインの（２Ｍ＋１）ラインにビットマップ展開することで２値画像を生成し、生成した２値画像に対して、（２Ｍ＋１）×（２Ｍ＋１）参照方式により、アウトラインベクトルを生成していく方式となる。
【００４６】
本実施形態では先ず、１ライン分の前景部ランパケットをビットマップ展開して３ライン分のビットマップを得る。この３ライン分のビットマップについて左端から右端に向けて３画素×３画素の領域（参照領域）を移動させながら、この参照領域内を参照し、以下説明する処理を行うものとする。またその際、この参照領域内で、文字線画部分を構成する画素（前景部ランパケットを構成する画素）を黒画素、文字線画以外の部分を構成する（透過）画素を白画素と呼称する。
【００４７】
注目画素（参照領域の中心位置の画素）が白画素である場合は、その処理を終了してラスタ走査を１画素分進め、注目画素位置を更新する。一方、注目画素が黒画素の場合は、近傍の画素の状態によって以下の処理を行う。この状態には様々なものがあり、それぞれは図６〜２１に示している。図６〜２１の各図において、左側の図は、注目画素とその近傍画素の状態を示す図で、右側の図は、注目画素に対する輪郭ベクトルを示す図である。
【００４８】
また、各図の左側の図において、「●」（中が塗りつぶされている丸）が記されている位置の画素は、黒画素を示しており、「ｄ」（”do not care”）が記されている位置の画素は、白画素でも黒画素でも構わない。また、白画素はその位置を明示したい時のみ「○」で表記し、それ以外の時は、表記していない。
【００４９】
また、各図の右側の図において、「○」は、横方向ベクトルの始点及び縦方向ベクトルの終点を表しており、「△」は、縦方向ベクトルの始点及び横方向ベクトルの終点を表しており、実線矢印は、始点及び終点共に定まった、矢印の向く方向の輪郭ベクトルを表し、点線矢印は、始点もしくは終点のいずれか一方のみが定まった、矢印の向く方向の輪郭ベクトルを表している。
【００５０】
これら輪郭ベクトルの始点・終点位置は、主走査方向（ライン方向）及び副走査方向（ライン方向と直交する方向）共に、画素と画素の中間の位置にあるものとする。また、主走査方向及び副走査方向共に、画素のある位置は正整数で示され、画素位置を２次元の座標で表現する。例えば、図６における注目画素６３の位置が（３，７）｛第７ラスタ目において、左から３画素目の位置を示す｝であれば、６２内に示す４本のベクトルはそれぞれ、点６４（２．５，６．５）、点６５（３．５，６．５）、点６７（３．５，７．５）、点６６（２．５，７．５）の４点を始点、終点とする互いに連続する４本のベクトルとして表現される。
【００５１】
これらのベクトルを（始点座標、終点の座標）で表現するものとすると、同図の４本のベクトルは、
「（２．５，６．５）、（３．５，６．５）」
「（３．５，６．５）、（３．５，７．５）」
「（３．５，７．５）、（２．５，７．５）」
「（２．５，７．５）、（２．５，６．５）」
でそれぞれ表現される。
【００５２】
従って、ここでは小数の表現を避けるために便宜上、以降の画素位置を偶数のみで表現することにし、ベクトルの始点、終点の位置を奇数の整数で表現することにする。即ち、（ｍ画素）×（ｎ画素）の画像は、２ｍ×２ｎの正の偶数（整数）の座標表現で表すものとする。これにより、上述の図６の例は、注目画素位置を（６、１４）であると表現し、４つのベクトルの終点、始点はそれぞれ、（５，１３）、（７，１３）、（７，１５）、（５，１５）となる。これにより、同図の４本のベクトルは、
（５，１３）（７，１３）
（７，１３）（７，１５）
（７，１５）（５，１５）
（５，１５）（５，１３）
と表現されるものとする。
【００５３】
また、全てのランパケットデータをビットマップ展開することで得られる２値画像はｍ×ｎ画素（ｍ、ｎは正の整数で、１ラインがｍ画素）のサイズを有するものとし、第ｊ番目のラインの第i番目の画素位置を（2i,2j）（i,jは正の整数で、i≦ｍ、ｊ≦n）で表現するものとする。
【００５４】
＜輪郭抽出処理について＞
図２２は、輪郭抽出部１０７による処理のフローチャートである。先ずステップＳ１では、エッジリストに基づいて生成した上記２値画像からベクトル列を抽出し、各ベクトルの始点座標及びこのベクトルに流入してくる（このベクトルの始点の座標が終点となっている）ベクトル、流出していく（このベクトルの終点の座標が始点となっている）ベクトルについて、図２３，２４に示すテーブル形式で出力する。
【００５５】
図２３は水平方向のベクトルに係る情報が登録されたテーブルの構成例を示す図、図２４は、垂直方向のベクトルに係る情報が登録されたテーブルの構成例を示す図である。なお、それぞれの図に示したベクトルカウンタ２３０、２４０は、輪郭抽出部１０７が有するものである。
【００５６】
何れのテーブルにも、注目ベクトルの始点位置、終点位置、注目ベクトルへの流入ベクトルの番号、注目ベクトルからの流出ベクトルの番号が、注目ベクトル毎に登録されている。上記ステップＳ１における処理の詳細については後述する。
【００５７】
図２２に戻って、次に、ステップＳ２では、ステップＳ１で出力したテーブル（図２３，２４に例示したテーブル）を参照し、流入及び流出ベクトルの項目番号を辿ることにより、図２５に示すように、２値画像中の総輪郭線数、輪郭線の総点数、輪郭線中の各点のｘ座標、ｙ座標を記憶したテーブルを作成する。
【００５８】
図２６は、上記ステップＳ１における処理の詳細を示すフローチャートである。
【００５９】
先ずステップＳ１１では、注目画素が白画素か黒画素かを判定する。白画素の場合は処理をステップＳ１３に進め、黒画素の場合は、処理をステップＳ１２に進める。ステップＳ１２では、注目画素の周囲画素の状態を見て、その状態に応じた処理ルーチンをコールする。ステップＳ１２における処理の詳細については後述する。
【００６０】
ステップＳ１３では、注目画素を１画素進める。ステップＳ１４では全ての画素について処理を行ったか否かを判断し、行っていない場合には処理をステップＳ１１に戻し、以降の処理を行う。一方、行っている場合には処理を終了する。
【００６１】
図２７は、上記ステップＳ１２における処理の詳細を示すフローチャートである。ステップＳ２１では、注目画素の周囲４画素の状態に基づいた値を計算する。より詳しくは、図５に示す如く、注目画素の直上の画素の値をＲ０，右隣の画素の値をＲ１，直下の画素の値をＲ２，左隣の画素の値をＲ３とした場合に、以下の式を計算する。
【００６２】
Ｒ０＋２×Ｒ１＋４×Ｒ２＋８×Ｒ３
ここで、Ｒ０〜Ｒ３はそれぞれ、対応する画素が黒画素である場合には１，白画素である場合には０であるので、この式の値は、０〜１５の値を取りうる。
【００６３】
そしてステップＳ３０では、この式の値に応じた処理を行う。以下ではこの式の値に応じた処理についてより詳細に説明する。
【００６４】
＜式の値が０の場合にステップＳ３０で行う処理について＞
図２８は、上記式の値が０の場合（ケース０）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース０の場合とは、注目画素と近傍画素との関係が図６に示したものとなった場合である。以降の説明では、注目画素６３の座標を（2i,2j）として説明する。
【００６５】
ステップＳ３１では、水平ベクトルの始点位置（ｘ、ｙ）を(2i-1,2j-1)に設定する。この座標位置は、図６において６４で示す位置に相当する。本ステップにおける処理を更に詳細に説明すると、図２３に示したテーブルにおいて、水平ベクトルカウンタ２３０の指し示す値ｒ（同図では行番号を指し示している）に対応する水平ベクトル始点ｘ座標の欄２３１に(2i-1)を格納し、同じく水平ベクトル始点ｙ座標の欄２３２に(2j-1)を格納する。
【００６６】
この水平ベクトルに流入してくる元の垂直ベクトルは、図２４に示すテーブルにおいて、垂直ベクトルカウンタ２４０がこの時点で指し示している値ｓに１を加えた位置に登録されているベクトル（（ｓ＋１）に対応するベクトル）であり、また、この水平ベクトルが流出していく先の垂直ベクトルは、この時点で垂直ベクトルのカウンタ２４０が指し示している値ｓに対応する位置に登録されているベクトルである。
【００６７】
即ち、図２３に示すテーブルにおいて、水平ベクトルカウンタ２３０が指し示す値ｒに対応する「流入ベクトル項目番号」の欄（図２３の例では２３３）に、垂直ベクトルカウンタ２４０が指し示す値ｓに１を加えた値を格納する。また、水平ベクトルカウンタ２３０が指し示す値ｒに対応する「流出ベクトル項目番号」（図２３の例では２３４）に垂直ベクトルカウンタ２４０の指し示す値ｓを格納する。
【００６８】
図２８に戻って次に、ステップＳ３２では、垂直ベクトルの始点位置（ｘ、ｙ）を(2i+1,2j-1)に設定する。この座標位置は図６において６５で示す位置に相当する。また、この垂直ベクトルに流入する水平ベクトルはステップＳ３１で始点位置を設定した水平ベクトルであり、この垂直ベクトルが流出する水平ベクトルは、ステップＳ３１で水平ベクトル始点座標テーブルに格納した水平ベクトルの次の位置に格納される水平ベクトルであると登録する。
【００６９】
本ステップにおける処理をより詳細に説明すると、図２４において、欄２４１には(2i+1)、欄２４２には(2j-1)を格納すると共に、欄２４３には、このときの水平ベクトルカウンタ２３０の値、欄２４４にはこのときの水平ベクトルカウンタ２３０の値に＋１した値を格納する。
【００７０】
図２８に戻って次に、ステップＳ３３では、水平ベクトルカウンタ２３０の指し示す値ｒに１を加える。
【００７１】
ステップＳ３４では、水平ベクトルの始点位置（ｘ、ｙ）を(2i+1,2j+1)に設定する。この座標位置は図６において６７で示す位置に相当する。また、この水平ベクトルに流入する垂直ベクトルは、ステップＳ３２で登録したベクトルであると登録し、この水平ベクトルが流出する垂直ベクトルは、ステップＳ３２で登録された垂直ベクトルの垂直ベクトル始点座標テーブル内における次の位置に格納される垂直ベクトル（図６の点６６と点６４とを結ぶベクトル）であると登録する。
【００７２】
ステップＳ３５では、垂直ベクトルカウンタ２４０が指し示す値に１を加える。
【００７３】
ステップＳ３６では、垂直ベクトルの始点位置（ｘ、ｙ）を(2i-1,2j+1)に設定する。また、この垂直ベクトルに流入する水平ベクトルはステップＳ３４で登録された水平ベクトルであると登録し、この垂直ベクトルが流出する水平ベクトルは、ステップＳ３１で登録した水平ベクトルであると登録する。
【００７４】
そして最後にステップＳ３７では、水平ベクトルカウンタ２３０が指し示す値、垂直ベクトルカウンタ２４０が指し示す値に１を加えて処理を終了する。
【００７５】
この処理により、図６の６２で示す如く、点６４と点６５とを結ぶ水平ベクトルと、点６７と点６６とを結ぶ水平ベクトルからなる２つの水平ベクトルと、点６５と点６７とを結ぶ垂直ベクトルと、点６６と点６４とを結ぶ垂直ベクトルからなる２つの垂直ベクトルの計４つのベクトルが巡回した１つのループを作っている状態として抽出する。
【００７６】
＜式の値が１の場合にステップＳ３０で行う処理について＞
図２９は、上記式の値が１の場合（ケース１）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１の場合とは、注目画素と近傍画素との関係が図７に示したものとなった場合である。以降の説明では、注目画素７０１の座標を（2i,2j）として説明する。
【００７７】
ステップＳ４１では、水平ベクトル（図７ではベクトル７１）の始点位置（ｘ、ｙ）を（2i+1,2j+1）に設定するので、現在水平ベクトルカウンタ２３０が現在指し示している値ｒに対応する始点ｘ座標、始点ｙ座標にそれぞれ（2i+1）、（2j+1）を登録する。また、現在水平ベクトルカウンタ２３０が現在指し示している値ｒに対応する流出ベクトル項目番号には、この水平ベクトルが流出する垂直ベクトル（図７ではベクトル７２）の項目番号（後述するステップＳ４３で決定する垂直ベクトルカウンタ２４０の値）を登録する。
【００７８】
ステップＳ４２では、上記ステップＳ４１で登録した水平ベクトルに流入する垂直ベクトルを、図３４に示す、流出先が未定な垂直ベクトルテーブル３４１から探し出して登録する。本ステップＳ４２における処理の詳細について、図３０を用いて説明する。図３０は、ステップＳ４２における処理の詳細を示すフローチャートである。
【００７９】
ステップＳ５１では、テーブル３４１に登録されている「流出先が未定の垂直ベクトル」の数をカウントする流出ベクトル未定垂直ベクトルカウンタ３４０の値をｋに設定する。「ｋ」は、後述する図３４に示すテーブルに登録されている項目番号の総数を示す。
【００８０】
ステップＳ５２では、ベクトルカウンタ３４０が指し示す値ｋから１を減じたものに対応する項目番号で特定される垂直ベクトルの始点のｘ座標の欄が(2i+1)であるか否かを判定する。
【００８１】
(2i+1)でなければ処理をステップＳ５２に進め、ベクトルカウンタ３４０の指し示す値ｋから１を減じる。そして処理をステップＳ５２に進める。一方、(2i+1)であれば処理をステップＳ５４に進める。
【００８２】
ステップＳ５４では、ベクトルカウンタ３４０が指し示す値ｋから１を減じたものに対応する項目番号で特定される垂直ベクトルが、上記ステップＳ４１で登録した水平ベクトルの流入元ベクトルであり、更にステップＳ４１で登録した水平ベクトルが、この垂直ベクトルの流出先ベクトルであることになるので、図２３のテーブルにおいて、水平ベクトルカウンタ２３０が指し示す値に対応する「流入ベクトル項目番号欄」に、ベクトルカウンタ３４０が指し示す値ｋから１を減じたものに対応する項目番号を登録し、図２４のテーブルにおいて、「垂直ベクトルの流出項目番号欄」に、ステップＳ４１における水平ベクトルカウンタ２３０の値を格納する。
【００８３】
次に、ステップＳ５５では、図３４に示したテーブルにおいて、流出先が決定したベクトルの情報をこのテーブル３４１から削除すると共に、これに後続する情報を１つ前に詰めることで、削除した箇所を詰める処理を行う。そしてステップＳ５６では、カウンタ３４０が指し示す値を１つ減じる。その際、テーブルに登録されている垂直ベクトルの情報が１つ減った旨を更新することになる。
【００８４】
このように、図３０に示したフローチャートに従った処理が終了した後には、処理を図２９のステップＳ４３に進める。ステップＳ４３では、垂直ベクトル（図７ではベクトル７２）の始点位置として(2i-1,2j+1)を設定する。また、この垂直ベクトルに注入してくる水平ベクトルは、ステップＳ４１で登録した水平ベクトルとする。
【００８５】
次に、ステップＳ４４では、ステップＳ４３で登録した垂直ベクトルが流出する先の水平ベクトルを、図３１に示すテーブル３１１より検索し、登録する。ステップＳ４４における処理は、図３５に示したフローチャートに従った処理を実行することでなされる。即ち、ステップＳ４３で登録した垂直ベクトルが流出する先のベクトルを図２４の流出ベクトル項目に登録し、この垂直ベクトルへ流出する水平ベクトルの流入先ベクトル項目に、垂直ベクトルカウンタ２４０の値を登録する。これにより、図３１に示すテーブル３１１を更新する。図３５は、ステップＳ４４の処理の詳細を示すフローチャートである。
【００８６】
次にステップＳ４５では、ベクトルカウンタ２３０の指し示す値に１を加算し、ステップＳ４６では、カウンタ２４０の指し示す値に１を加算する。
【００８７】
＜式の値が２の場合にステップＳ３０で行う処理について＞
図３６は、上記式の値が２の場合（ケース２）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース２の場合とは、注目画素と近傍画素との関係が図８に示したものとなった場合である。以降の説明では、注目画素８０１の座標を（2i,2j）として説明する。
【００８８】
先ず、ステップＳ７１では、垂直ベクトル（図８ではベクトル８１）の始点位置を(2i-1,2j+１)として設定するので、図２４に示したテーブルにおいて、カウンタ２４０が指し示す値に対応する始点ｘ座標に(2i-1）を格納し、始点ｙ座標に（2j+１)を格納する。また、この垂直ベクトルが流出する先の水平ベクトル（図８ではベクトル８２）を、ステップＳ７３で登録される水平ベクトルとする。
【００８９】
ステップＳ７２では、ステップＳ７１で登録した垂直ベクトルに流入してくる水平ベクトル（図８ではベクトル８３）が未定であるベクトルとして、このベクトルの項目番号を、図３３に示すテーブル３３１において、未使用領域の先頭（使用済み領域に隣接する未使用領域部分）に登録する処理を行う。なお、この登録位置は、カウンタ３３０で指し示されているものとする。そしてこのカウンタ３３０の値を１つインクリメントする。
【００９０】
次にステップＳ７３では、水平ベクトルの始点位置として(2i-1,2j-1)を設定するために、図２３に示したテーブルにおいて、カウンタ２３０が指し示す値に対応する始点ｘ座標に(2i-1）を格納し、始点ｙ座標に（2j-1)を格納する。また、この流入元垂直ベクトルを、ステップＳ７１で登録した垂直ベクトルとして登録する。
【００９１】
ステップＳ７４では、ステップＳ７３で登録した水平ベクトルが流入していく先の垂直ベクトルが未定であるベクトルとして、このベクトルの項目番号を、図３２に示すテーブル３２１において、カウンタ３２０が指し示す値に応じた位置に登録する。そしてカウンタ３２０の指し示す値を１つインクリメントする。そしてステップＳ７５では、カウンタ２３０，２４０の指し示す値を１つインクリメントする。
【００９２】
＜式の値が３の場合にステップＳ３０で行う処理について＞
図３７は、上記式の値が３の場合（ケース３）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース３の場合とは、注目画素と近傍画素との関係が図９に示したものとなった場合である。以降の説明では、注目画素９０１の座標を（2i,2j）として説明する。
【００９３】
ステップＳ８１では、垂直ベクトル（図９ではベクトル９１）の始点位置を(2i-1,2j+1)に設定するために、図２４に示したテーブルにおいて、カウンタ２４０が指し示す値に対応する始点ｘ座標に(2i-1）を格納し、始点ｙ座標に（2j+１)を格納する。
【００９４】
ステップＳ８２では、上述のステップＳ４４と同様にして、ステップＳ８１で登録した垂直ベクトルが流出する先の水平ベクトルを求める。次にステップＳ８３で、テーブル３３１においてカウンタ３３０が指示する箇所に垂直ベクトルカウンタ２４０の値を登録し、カウンタ３３０の値を１つインクリメントする。そしてステップＳ８４では、カウンタ２４０の指し示す値を１つインクリメントし、ステップＳ８５では、ケースＡと呼称する処理を実行する。図３８は、ケースＡの処理のフローチャートである。
【００９５】
ステップＳ９１では、図９において「Ａ」で示す位置の画素（画素Ａ）が白画素か否かをチェックする。このチェックの結果、黒画素である場合には本処理を終了する。この状態は図９において９３で示されている。
【００９６】
一方、白画素である場合には処理をステップＳ９２に進める。ステップＳ９２では、水平ベクトル（図９ではベクトル９４）の始点位置を(2i+1,2j-1)と設定するために、図２３に示したテーブルにおいて、カウンタ２３０が指し示す値に対応する始点ｘ座標に(2i＋1）を格納し、始点ｙ座標に（2j−１)を格納する。次にステップＳ９３では、上記ステップＳ４２と同様にして、この水平ベクトルに流入する垂直ベクトルを検索する。そして処理をステップＳ９４に進め、この水平ベクトルの流出ベクトルが未定であるとして、テーブル３２１においてカウンタ３２０が指し示す値に応じた箇所に、この水平ベクトルの項目番号を格納する。そしてカウンタ３２０が指し示す値を１つインクリメントする。ステップＳ９５では、カウンタ２３０が指し示す値を１つインクリメントする。
【００９７】
＜式の値４の場合にステップＳ３０で行う処理について＞
図３９は、上記式の値が４の場合（ケース４）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース４の場合とは、注目画素と近傍画素との関係が図１０に示したものとなった場合である。以降の説明では、注目画素１００１の座標を（2i,2j）として説明する。
【００９８】
先ず、ステップＳ１０１では、水平ベクトル（図１０ではベクトル１０２）の始点位置を(2i-1,2j−１)として設定するので、図２３に示したテーブルにおいて、カウンタ２３０が指し示す値に対応する始点ｘ座標に(2i-1）を格納し、始点ｙ座標に（2j−１)を格納する。また、この水平ベクトルが流出する先の垂直ベクトルを、ステップＳ１０３で登録される垂直ベクトルであるとするので、カウンタ２３０が指し示す値に対応する流出ベクトル項目番号の欄に、このときのカウンタ２４０の指し示す値を登録する。
【００９９】
ステップＳ１０２では、図３１に示したテーブルにおいて、カウンタ３１０が指し示している値に対応する箇所に、カウンタ２３０の指し示す値を登録し、カウンタ２３０の指し示す値を１つインクリメントする。
【０１００】
ステップＳ１０３では、垂直ベクトルの開始位置を(2i+1,2j-1)と設定するために、図２４のテーブルにおいて、カウンタ２４０が指し示している値に対応する開始ｘ座標に(2i+1）を登録し、開始ｙ座標に（2j-1)を登録する。また、このベクトルに流入するベクトルはステップＳ１０１で登録した水平ベクトルであるので、図２４に示すテーブルにおいて、カウンタ２４０が指し示している値に対応する流入ベクトル項目番号欄に水平ベクトルカウンタ２３０の値を登録する。
【０１０１】
ステップＳ１０４では、図３４に示すテーブルにおいて、カウンタ３４０が指し示す値に対応する箇所に、カウンタ２４０の指し示す値を登録する。そしてカウンタ２４０の指し示す値を１つインクリメントする。
【０１０２】
ステップＳ１０５では、カウンタ２３０が指し示す値、カウンタ２４０の指し示す値をそれぞれ１つだけインクリメントする。
【０１０３】
＜式の値５の場合にステップＳ３０で行う処理について＞
図４０は、上記式の値が５の場合（ケース５）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース５の場合とは、注目画素と近傍画素との関係が図１１に示したものとなった場合である。図４０に示す如く、ケース５の場合には何も処理は行わない。
【０１０４】
＜式の値６の場合にステップＳ３０で行う処理について＞
図４１は、上記式の値が６の場合（ケース６）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース６の場合とは、注目画素と近傍画素との関係が図１２に示したものとなった場合である。以降の説明では、注目画素１００１の座標を（2i,2j）として説明する。
【０１０５】
先ずステップＳ１１１では、水平ベクトル（図１２のベクトル１２２）の始点位置（ｘ、ｙ）を(2i-1,2j-1)に設定する。本ステップにおける処理を更に詳細に説明すると、図２３に示したテーブルにおいて、カウンタ２３０の指し示す値に対応する水平ベクトル始点ｘ座標の欄に(2i-1)を格納し、同じく水平ベクトル始点ｙ座標の欄に(2j-1)を格納する。ステップＳ１１２では、ステップＳ１１１で登録した水平ベクトルの流出先ベクトルは未定であるとして、上記ステップＳ９４と同様の処理を行う。ステップＳ１１３では、ステップＳ１１１で登録した水平べクトルに流入してくるべクトルが未定であるとして、上記ステップＳ１０２と同様の処理を行う。
【０１０６】
ステップＳ１１４では、カウンタ２３０が指し示す値を１つインクリメントする。そしてステップＳ１１５では、ケースＢなる処理を実行する。図４２は、ケースＢの処理のフローチャートである。
【０１０７】
先ずステップＳ１２１では、図１２において「Ｂ」で示す位置の画素（画素Ｂ）が白画素か否かを判断する。この判断の結果、黒画素の場合には本処理を終了する。一方、白画素の場合には処理をステップＳ１２２に進める。ステップＳ１２２では、垂直ベクトル（図１２のベクトル１２４）の始点位置を(2i+1,2j+1)と設定するために、図２４に示したテーブルにおいて、カウンタ２４０の指し示す値に対応する始点ｘ座標の欄に(2i＋1)を格納し、同じく始点ｙ座標の欄に(2j＋1)を格納する。
【０１０８】
ステップＳ１２３では、上記ステップＳ１０４と同様の処理を行う。ステップＳ１２４では、上記ステップＳ７２と同様の処理を行う。即ち、ステップＳ１２２で登録した垂直ベクトルに流入してくる水平ベクトルが未定であるベクトルとして、このベクトルの項目番号を、図３３に示すテーブル３３１において、未使用領域の先頭（使用済み領域に隣接する未使用領域部分）に登録する処理を行う。
【０１０９】
ステップＳ１２５では、カウンタ２４０が指し示している値を１つインクリメントする。
【０１１０】
＜式の値７の場合にステップＳ３０で行う処理について＞
図４３は、上記式の値が７の場合（ケース７）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース７の場合とは、注目画素と近傍画素との関係が図１３に示したものとなった場合である。以降の説明では、注目画素１３０１の座標を（2i,2j）として説明する。
【０１１１】
ステップＳ１３１では、ケースＡの処理、即ち、図３８に示したフローチャートに従った処理を行う。ステップＳ１３２では、ケースＢの処理、即ち、図４２に示したフローチャートに従った処理を行う。
【０１１２】
図１３において、１３０は画素Ａ、画素Ｂが共に白画素の場合を示しており、１３１は画素Ａのみが黒画素の場合を示しており、１３２は画素Ｂのみが黒画素の場合を示しており、１３３は画素Ａ、画素Ｂが共に黒画素である場合を示している。
【０１１３】
＜式の値８の場合にステップＳ３０で行う処理について＞
図４４は、上記式の値が８の場合（ケース８）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース８の場合とは、注目画素と近傍画素との関係が図１４に示したものとなった場合である。以降の説明では、注目画素１００１の座標を（2i,2j）として説明する。
【０１１４】
先ずステップＳ１３３では、垂直ベクトル（図１４のベクトル１４１）の始点位置（ｘ、ｙ）を(2i＋1,2j-1)に設定する。本ステップにおける処理を更に詳細に説明すると、図２４に示したテーブルにおいて、カウンタ２４０の指し示す値に対応する始点ｘ座標の欄に(2i＋1)を格納し、同じく始点ｙ座標の欄に(2j-1)を格納する。また、このベクトルが流出する先の水平ベクトルを、ステップＳ１３５で登録されるベクトルであるとするので、カウンタ２４０が指し示す値に対応する流出ベクトル項目番号の欄に、このときのカウンタ２３０の指し示す値を登録する。
【０１１５】
ステップＳ１３４では、この垂直ベクトルに流入する水平ベクトルを検索する処理を行う。図４５は、ステップＳ１３４の処理の詳細を示すフローチャートである。同図のフローチャートに従った処理は、図３０，図３５に示したフローチャートに従った処理と同様のものであり、ステップＳ１３３で登録した垂直ベクトルに流入してくる元の水平ベクトルを登録し、この水平ベクトルが流出する先の垂直ベクトルをステップＳ１３３で登録した垂直ベクトルであると登録する（ステップＳ１４５）。そして、ステップＳ１４６でテーブル３２１の隙間を詰め、ステップＳ１４７でカウンタ３２０が指し示す値をデクリメントし、テーブル３２１を更新する。
【０１１６】
図４４に戻って、ステップＳ１３５では、水平ベクトル（図１４ではベクトル１４２）の始点位置を(2i+1,2j+1)と設定するために、図２３に示すテーブルにおいて、カウンタ２３０が指し示す値に対応する始点ｘ座標には(2i+1）を格納し、始点ｙ座標には（2j+1)を格納する。更に、この水平ベクトルに流入する元の垂直ベクトルは、ステップＳ１３３で登録した垂直ベクトルであると登録する。
【０１１７】
ステップＳ１３６では、ステップＳ１３５で登録した水平ベクトルが流出する先の垂直ベクトルを検索する処理を行う。図４６は、ステップＳ１３６における処理の詳細を示すフローチャートである。同図のフローチャートに従った処理は、図３０，３５，４５に示したフローチャートに従った処理と同様のものであり、ステップＳ１３５で登録した水平ベクトルが流出する先の垂直ベクトルを登録し、この垂直ベクトルに流入する元のベクトルを、ステップＳ１３５で登録した水平ベクトルであると登録し（ステップＳ１５４）、ステップＳ１５５，Ｓ１５６で図３３に示すテーブル３３１を更新する。
【０１１８】
図４４に戻り、ステップＳ１３７では、カウンタ２３０が指し示している値、カウンタ２４０が指し示している値をそれぞれ１つインクリメントする。
【０１１９】
＜式の値９の場合にステップＳ３０で行う処理について＞
図４７は、上記式の値が９の場合（ケース９）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース９の場合とは、注目画素と近傍画素との関係が図１５に示したものとなった場合である。以降の説明では、注目画素１５０１の座標を（2i,2j）として説明する。
【０１２０】
ステップＳ１６１では、水平ベクトル（図１５のベクトル１５１）の始点位置として(2i+1,2j+1)を設定するために、図２３に示したテーブルにおいて、カウンタ２３０の指し示す値に対応する始点ｘ座標の欄に(2i＋1)を格納し、同じく始点ｙ座標の欄に(2j＋1)を格納する。
【０１２１】
ステップＳ１６２では、図３０に示したフローチャートに従った処理と同様にして、この水平ベクトルに流入する垂直ベクトルを検索する。ステップＳ１６３では、図４６に示したフローチャートに従った処理と同様にして、ステップＳ１６１で登録した水平ベクトルが流出する先の垂直ベクトルを検索する。
【０１２２】
ステップＳ１６４では、カウンタ２３０が指し示す値を１つインクリメントする。ステップＳ１６５では、ケースＤなる処理を行う。図４８は、ケースＤの処理のフローチャートである。
【０１２３】
ステップＳ１７１では、図１５において「Ｄ」で示す位置の画素（画素Ｄ）が白画素か否かをチェックする。このチェックの結果、黒画素である場合には本処理を終了する。
【０１２４】
一方、白画素である場合には処理をステップＳ１７２に進める。ステップＳ１７２では、垂直ベクトル（図１５ではベクトル１５４）の始点位置を(2i−1,2j-1)と設定するために、図２４に示したテーブルにおいて、カウンタ２４０が指し示す値に対応する始点ｘ座標に(2i−1）を格納し、始点ｙ座標に（2j−１)を格納する。
【０１２５】
次にステップＳ１７３では、図４５に示したフローチャートに従った処理と同様にして、ステップＳ１７２で登録した垂直ベクトルに流入してくる元の水平ベクトルを検索する。そして処理をステップＳ１７４に進め、図３５に示したフローチャートに従った処理と同様にして、ステップＳ１７２で登録した垂直ベクトルが流出する先の水平ベクトルを検索する。
【０１２６】
そしてステップＳ１７５では、カウンタ２４０が指し示す値を１つインクリメントする。
【０１２７】
＜式の値１０の場合にステップＳ３０で行う処理について＞
図４９は、上記式の値が１０の場合（ケース１０）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１０の場合とは、注目画素と近傍画素との関係が図１６に示したものとなった場合である。図４９に示す如く、ケース１０の場合には何も処理は行わない。
【０１２８】
＜式の値１１の場合にステップＳ３０で行う処理について＞
図５０は、上記式の値が１１の場合（ケース１１）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１１の場合とは、注目画素と近傍画素との関係が図１７に示したものとなった場合である。
【０１２９】
先ずステップＳ１７６では、上記ケースＤの処理を行う。次にステップＳ１７７では、上記ケースＡの処理を行う。図１７において、画素Ｄ及び画素Ａが共に白画素である場合を１７０に示し、画素Ａのみが黒画素である場合を１７１に示し、画素Ｄのみが黒画素である場合を１７２に示し、画素Ａ、画素Ｄが共に黒画素である場合を１７３に示している。
【０１３０】
＜式の値１２の場合にステップＳ３０で行う処理について＞
図５１は、上記式の値が１２の場合（ケース１２）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１２の場合とは、注目画素と近傍画素との関係が図１８に示したものとなった場合である。以降の説明では、注目画素１８０１の座標を（2i,2j）として説明する。
【０１３１】
ステップＳ１８１では、垂直ベクトル（図１８ではベクトル１８１）の始点位置として(2i+1,2j-1)を設定するために、図２４に示すテーブルにおいて、カウンタ２４０が指し示す値に対応する始点ｙ座標には(2i+1）を格納し、始点ｙ座標には（2j-1)を格納する。ステップＳ１８２では、図４５に示したフローチャートに従った処理と同様にして、ステップＳ１８１で登録した垂直ベクトルに流入してくる元の水平ベクトル（図１８ではベクトル１８２）を検索する。また、この水平ベクトルが流出する先の垂直ベクトルが、ステップＳ１８１で登録した垂直ベクトルであると登録して、テーブル３２１を更新する。
【０１３２】
次にステップＳ１８３では、ステップＳ１８１で登録した垂直ベクトルの流出先のベクトルが未定である旨を図３４に示すテーブル３４１に登録し、カウンタ３４０が指し示している値を１つインクリメントする。ステップＳ１８４では、カウンタ２４０が指し示している値を１つインクリメントする。そしてステップＳ１８５では、ケースＣなる処理を行う。図５２は、ケースＣの処理のフローチャートである。
【０１３３】
先ずステップＳ１９１では、図１８において「Ｃ」で示す位置の画素（画素Ｃ）が白画素か否かを判断する。この判断の結果、黒画素の場合には本処理を終了する。一方、白画素の場合には処理をステップＳ１９２に進める。ステップＳ１９２では、水平ベクトル（図１８のベクトル１８５）の始点位置を(2i−1,2j+1)と設定するために、図２３に示したテーブルにおいて、カウンタ２３０の指し示す値に対応する始点ｘ座標の欄に(2i−1)を格納し、同じく始点ｙ座標の欄に(2j＋1)を格納する。
【０１３４】
ステップＳ１９３では、図４６に示したフローチャートに従った処理と同様の処理を行うことで、ステップＳ１９２で登録した水平ベクトルが流出する先の垂直ベクトルを登録する。そして、この垂直ベクトルに流入してくる元のベクトルが、ステップＳ１９２で登録した水平ベクトルである旨を図２４のテーブルに登録し、図３３に示すテーブル３３１を更新する。
【０１３５】
ステップＳ１９４では、ステップＳ１９２で登録した水平ベクトルに流入してくる垂直ベクトルが未定であるベクトルとして、このベクトルの項目番号を、図３３に示すテーブル３３１において、未使用領域の先頭（使用済み領域に隣接する未使用領域部分）に登録する処理を行う。そしてカウンタ３１０の指し示している値を１つインクリメントする。ステップＳ１９５では、カウンタ２３０が指し示している値を１つインクリメントする。
【０１３６】
＜式の値１３の場合にステップＳ３０で行う処理について＞
図５３は、上記式の値が１３の場合（ケース１３）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１３の場合とは、注目画素と近傍画素との関係が図１９に示したものとなった場合である。
【０１３７】
ステップＳ１９６では、上記ケースＤの処理を行う。ステップＳ１９７では、上記ケースＣの処理を行う。図１９において１９０は、画素Ｄ、画素Ｃが共に白画素である場合を示しており、１９１は、画素Ｃのみが黒画素である場合を示しており、１９２は、画素Ｄのみが黒画素である場合を示しており、１９３は、画素Ｄ、画素Ｃが共に黒画素である場合を示している。
【０１３８】
＜式の値１４の場合にステップＳ３０で行う処理について＞
図５４は、上記式の値が１４の場合（ケース１４）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１４の場合とは、注目画素と近傍画素との関係が図２０に示したものとなった場合である。
【０１３９】
ステップＳ２０１では、上記ケースＣの処理を行う。ステップＳ２０２では、上記ケースＢの処理を行う。図２０において、２０１は、画素Ｃ、画素Ｂが共に白画素である場合を示しており、２０２は、画素Ｂのみが黒画素である場合を示しており、２０３は、画素Ｃのみが黒画素である場合を示しており、２０４は、画素Ｂ、画素Ｃが共に黒画素である場合を示している。
【０１４０】
＜式の値１５の場合にステップＳ３０で行う処理について＞
図５５は、上記式の値が１５の場合（ケース１５）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。ケース１５の場合とは、注目画素と近傍画素との関係が図２１に示したものとなった場合である。
【０１４１】
ステップＳ２０３では、上記ケースＤの処理を行う。ステップＳ２０４では、上記ケースＡの処理を行う。ステップＳ２０５では、上記ケースＣの処理を行う。ステップＳ２０６では、上記ケースＢの処理を行う。
【０１４２】
図２１において、２１０は、画素Ｄ、画素Ａ、画素Ｃ、画素Ｂの全てが白画素である場合を示しており、２１１は、画素Ａのみが黒画素である場合を示しており、２１２は、画素Ｂのみが黒画素である場合を示しており、２１３は、画素Ｃのみが黒画素である場合を示しており、２１４は、画素Ｄのみが黒画素である場合を示しており、２１５は、画素Ａ、画素Ｂのみが黒画素である場合を示しており、２１６は、画素Ｂ、画素Ｃのみが黒画素である場合を示しており、２１７は、画素Ｃ、画素Ｄのみが黒画素である場合を示しており、２１８は、画素Ｄ、画素Ａのみが黒画素である場合を示しており、２１９は、画素Ｂ、画素Ｄのみが黒画素である場合を示しており、２２０は、画素Ａ、画素Ｃのみが黒画素である場合を示しており、２２１は、画素Ｄのみが白画素である場合を示しており、２２２は、画素Ｃのみが白画素である場合を示しており、２２３は、画素Ｂのみが白画素である場合を示しており、２２４は、画素Ａのみが白画素である場合を示しており、２２５は、画素Ｄ、画素Ａ、画素Ｃ、画素Ｂの全てが黒画素である場合を示している。
【０１４３】
以上説明した各ケース（ケース０〜１５）のうち、該当するケースの処理を実行することで、上記ステップＳ１における処理、即ち、ベクトル列の抽出処理を行うことができる。
【０１４４】
＜アウトラインベクトル列の並列処理＞
図５６は、上記ステップＳ２における処理の詳細を示すフローチャートである。上述のとおり、ステップＳ２では、ステップＳ１で上述の通り作成された２つのテーブル（図２３，２４に示したテーブル）、そして、後述する図５７に示すテーブルを用いた処理が実行される。
【０１４５】
図５６においてステップＳ２１１では、図５７に示すテーブルにおいて、後述する項目の初期化処理を行う。図５８は、ステップＳ２１１における処理の詳細を示すフローチャートである。
【０１４６】
ステップＳ２３１では、変数ｔ（開始点項目番号）を０に初期化する。ステップＳ２３２では、変数iを０に初期化する。ステップＳ２３３では、開始点候補テーブル５７１の第i番目の項目に「１」をセットする。ステップＳ２３４では、変数iの値を１つインクリメントする。ステップＳ２３５では、変数iの値が水平ベクトルカウンタ２３０の値よりも小さいか否かをチェックする。小さい場合には処理をステップＳ２３３に戻し、変数iの値が水平ベクトルカウンタ２３０の値以上である場合には処理をステップＳ２３６に進める。
【０１４７】
ステップＳ２３６では、カウンタ５７２の値Ｌを０に初期化し、ステップＳ２３７では、変数ｋの値を０に初期化する。そして処理を、図５６におけるステップＳ２１２にリターンする。これにより、開始点候補テーブル５７１の０番目から（水平ベクトルカウンタ２３０の値−１）番目に全て“１”がセットされる。
【０１４８】
図５６に戻り、ステップＳ２１２では、変数ｋの値が、カウンタ２３０が指し示す値の２倍に等しいか否をチェックする。このチェックの結果、等しい場合には、本処理を終了する。一方、等しくない場合には、処理をステップＳ２１３に進める。ステップＳ２１３では、開始点項目番号テーブル５７４において、カウンタ５７２の値Ｌが指し示す位置に、変数ｔの値を格納する。
【０１４９】
ステップＳ２１４では、開始点項目番号テーブル５７４において、カウンタ５７２の値Ｌが指し示す項目に格納されている値（即ち、ステップＳ２１３で格納した値）を変数ｈにセットする。そして、ステップＳ２１５では、変数ｊを０に初期化する。
【０１５０】
ここで、ループ数カウンタ５７２の値Ｌは、現在整理中の輪郭の番号を示し、開始点項目番号テーブル５７４のループカウンタ５７２で指示される項目番号欄には、現在整理中の輪郭の開始点のある項目番号が記憶されている。また、変数ｋは現在までの処理済み及び処理中の輪郭内で、処理済及び処理中の点の総数を保持し、ｊは現在整理中の輪郭内で、処理済の点の個数を保持している。また、変数ｈは次に処理する水平ベクトルの項目番号を示す。
【０１５１】
次にステップＳ２１６では、開始点候補テーブル５７１において、変数ｈの値が指し示す項目番号を「０」にリセットする。ステップＳ２１７では、図２３に示したテーブルにおいて、変数ｈの値が指し示す始点ｘ座標、始点ｙ座標をそれぞれ、ｘ座標テーブル５７５、ｙ座標テーブル５７６内の変数ｋで指示される項目位置に格納する。また、図２３のテーブルにおいて、変数ｈの値が示す水平ベクトル流出先ベクトル項目番号を変数ｖにセットする。この変数ｖは、次に処理する垂直ベクトルの項目番号を示している。ステップＳ２１８では、変数ｋ、変数ｊの値をそれぞれ１つインクリメントする。
【０１５２】
ステップＳ２１９では、図２４のテーブルにおいて、変数ｖの値が示す垂直ベクトルの始点ｘ座標、始点ｙ座標をそれぞれ、ｘ座標テーブル５７５、ｙ座標テーブル５７６において、変数ｋが指し示す位置に格納する。また、図２４のテーブルにおいて、変数ｖの値が示す垂直ベクトルの流出先ベクトル項目番号を変数ｈにセットする。これにより変数ｈには、この垂直ベクトルより流出する水平ベクトルの項目番号がセットされる。ステップＳ２２０では、変数ｋ、変数ｊの値をそれぞれ１つインクリメントする。
【０１５３】
次にステップＳ２２１では、変数ｈの値が、変数ｔの値（現在整理中の輪郭の開始点の項目番号）と同じであるか否かをチェックする。このチェックの結果、同じではない場合には、処理をステップＳ２１６に戻す。一方、同じである場合には、処理をステップＳ２２２に進める。
【０１５４】
ステップＳ２２２では、現在処理中の輪郭の中に含まれる点の数として変数ｊの値を、各輪郭内に含まれる点数を保持する点数テーブル５７７において、カウンタ５７２が指し示す箇所に格納する。ステップＳ２２３では、ループ数カウンタ５７２の値を１つインクリメントする。
【０１５５】
次にステップＳ２２４では、変数ｋの値（既に処理した点の個数）と、水平ベクトルカウンタ２３０の値（水平ベクトルテーブル内に保持される点の数）の２倍とが等しいか否かをチェックする。このチェックの結果、等しい場合には本処理を終了するのであるが、等しくない場合には処理をステップＳ２２５に進める。ステップＳ２２５では、変数ｔの値を１つインクリメントする。そしてステップＳ２２６では、テーブル５７１において変数ｔの値が指し示す位置に「１」が保持されているか否かをチェックする。「１」が保持されているのであれば処理をステップＳ２２５に戻し、「１」以外が保持されているのであれば処理をステップＳ２１３に戻し、次の輪郭内の点の整理を開始する。
【０１５６】
以上説明したステップＳ２の処理を実行することで、図２３、２４に示したベクトルの開始点データは、図５７に示すテーブルの各輪郭ループ毎に順に並んだ点の座標列として整列されることになる。
【０１５７】
＜ベクトル列テーブルの出力＞
次に、上記ステップＳ２で生成した図５７に示すテーブルに基づいて図２５に示すテーブルを輪郭抽出部１０７が生成する処理について、同処理のフローチャートを示す図５９を用いて以下説明する。
【０１５８】
ステップＳ２４１では、変数ｋを０に初期化する。ステップＳ２４３では上記ループ数カウンタ５７２の値を、図２５に示す構成を有するテーブル（各項目は初期化されており、何も格納されていない）の先頭に書き込む。ステップＳ２４４では、変数ｋの値がループ数カウンタ５７２の値と同じであるか否かをチェックする。このチェックの結果、同じである場合には処理を終了する。一方、同じではない場合には処理をステップＳ２４６に進める。ステップＳ２４６では、輪郭ループ内点数テーブル５７７において、変数ｋの値が指し示す箇所に格納されている値を、ステップＳ２４１で書き込んだ次の位置に書き込む。
【０１５９】
ステップＳ２４７では、開始点項目番号テーブル５７４において、変数ｋの値が指し示す箇所に格納されている値を、変数ｍにセットする。ここで、変数ｋは現在出力中の輪郭ループ番号を保持しており、変数ｍは現在出力中の輪郭ループ内の点列の開始点の格納される項目番号を保持していることになる。
【０１６０】
次にステップＳ２４８では、変数ｋの値を１つインクリメントし、ステップＳ２４９では、変数Ｌの値を０に初期化する。変数Ｌは、現在出力中の輪郭ループ内の出力済みの点の数を保持する変数である。ステップＳ２５０では、輪郭ループ内点数テーブル５７７において、変数ｋの値が指し示す箇所に格納されている値と、変数Ｌの値と、が同じであるか否かをチェックする。このチェックの結果、同じである場合には処理をステップＳ２４４に戻し、以降の処理を行う。なお、ステップＳ２５０からステップＳ２４４に処理を進めたことにより、その後、ステップＳ２４６を実行する場合には、前回ステップＳ２４６で書き込んだ位置の次の位置に書き込み処理を行う。
【０１６１】
一方、このチェックの結果、同じではない場合には、処理をステップＳ２５１に進める。ステップＳ２５１では、上記ｘ座標テーブル５７５、ｙ座標テーブル５７６において、上記変数ｍの値が指し示す位置に格納されている値を、図２５のテーブルにおいて次の書き込み位置に書き込む。ステップＳ２５２では、変数ｍの値を１つインクリメントし、ステップＳ２５３では、変数Ｌの値を１つインクリメントする。そして処理をステップＳ２５０に戻す。
【０１６２】
以上の処理により、図５７に示すテーブルに基づいて、図２５に示すテーブル、即ち、アウトラインベクトルデータを作成することができる。以上説明した手順によれば、いわゆる４方向に連結した輪郭が抽出される。しかし、本発明はこれに限定されるものでなく、８方向に連結する輪郭線を抽出する場合にも適用できる。
【０１６３】
以上のようにして作成されたアウトラインベクトルデータは関数近似部１０８に入力される。関数近似部１０８は、このアウトラインベクトルデータを用いて公知のベジェ関数近似で表現する。そしてその結果を輪郭ベクトルデータとして得、これと共に、輪郭の内部の色を示すデータと共に「ベクトルデータ」としてメモリ１６に送出する。
【０１６４】
図２は、本実施形態に係る画像処理装置において、画像復号処理のための機能構成を示すブロック図である。この画像復号処理は、図１に示した構成でもって符号化されたデータを復号する処理である。
【０１６５】
１００は画像処理装置本体である。同図に示す如く、画像処理装置１００は、合成部１８、前景部復号処理部２０、背景部復号処理部１７、メモリ１６，表示器１９により構成されている。
【０１６６】
メモリ１６には上記符号化処理により、ベクトルデータ（前景部の圧縮データ）とビットマップ圧縮データ（背景部の圧縮データ）とが格納されている。背景部復号処理部１７は、ビットマップ圧縮データを読み出してビットマップ復号処理を行う。前景部復号処理部２０は、ベクトルデータを読み出して復号する処理を行う。合成部１８は、背景部復号処理部１７による復号結果に前景部復号処理部２０が復号した結果を合成し、表示器１９に出力する。
【０１６７】
以下、この各部が行う処理についてより詳細に説明する。
【０１６８】
輪郭描画部２０１は、ベクトルデータを読み出し、ベクトルデータ内の輪郭ベクトルデータに基づいて描画処理を行うことで、ビットマップデータの輪郭データを得る。このとき、表示倍率に従って、ベクトル座標値を変換しておく必要がある。次に中塗り部２０２は、ベクトルデータ内の色データを用いて、この復号した輪郭の内部を塗りつぶす。そして前景描画部２０３は、この結果、即ち、輪郭データが示す輪郭の内部が塗りつぶされたビットマップを前景として合成部１８のスムージング部２０６に送出する。スムージング部２０６は、前景におけるエッジ部をぼかす処理を行う。
【０１６９】
一方、背景部復号処理部１７を構成するビットマップ符号化復号処理部２０４は、メモリ１６からビットマップ圧縮データを読み出し、上記ビットマップ圧縮部１１０が行った圧縮処理の逆の処理を行うことで、このビットマップ圧縮データを復号する処理を行う。そして背景描画部２０５は、この復号結果を背景として合成部１８の解像度変換部２０７に送出する。解像度変換部２０７は、背景を表示倍率のサイズに合わせてその解像度を変換する。合成処理部２０８は、スムージング部２０６による結果の上に解像度変換部２０７による結果を合成し、表示器１９に出力する。
【０１７０】
これにより、表示器１９の表示画面上には、背景上に前景が合成された画像が表示されることになる。
【０１７１】
［第２の実施形態］
図１，２に示した各部はハードウェアでもって構成しても良いし、メモリを除く各部をソフトウェアでもって実現しても良い。メモリを除く各部をソフトウェアでもって実現する場合、例えば、図６４に示すハードウェア構成を有するコンピュータによってこのソフトウェアを実行させることで、このコンピュータは第１の実施形態で説明した各処理を実行することになる。
【０１７２】
６４０１はＣＰＵで、ＲＡＭ６４０２やＲＯＭ６４０３に格納されているプログラムやデータを用いてコンピュータ全体の制御を行うと共に、コンピュータを適用した機器、即ち、図１，２に示した構成を有する画像処理装置が行う上述の各処理を実行する。
【０１７３】
６４０２はＲＡＭで、外部記憶装置６４０６からロードされたプログラムやデータ、インターフェース６４０７を介して外部から受信したデータを一時的に記憶するためのエリアや、ＣＰＵ６４０１が各種の処理を実行するために用いるワークエリアなどを有する。即ち、ＲＡＭ６４０２は、各種のエリアを適宜提供することができる。
【０１７４】
６４０３はＲＯＭで、本コンピュータの設定データやブートプログラムなどを格納する。
【０１７５】
６４０４は操作部で、キーボードやマウス、本コンピュータがタッチパネル式の画面を有する場合にはこのタッチパネルにより構成されており、本コンピュータの操作者が操作することで、各種の指示をＣＰＵ６４０１に対して入力することができる。
【０１７６】
６４０５は表示部で、ＣＲＴや液晶画面、タッチパネル式の表示画面などにより構成されており、ＣＰＵ６４０１による処理結果を画像や文字などでもって表示することができる。
【０１７７】
６４０６は外部記憶装置で、ハードディスクに代表される大容量情報記憶装置で、ここにはＯＳ（オペレーティングシステム）や、第１の実施形態で説明した各処理をＣＰＵ６４０１に実行させるためのプログラムやデータ、処理対象のＰＤＬデータやスキャン画像等が保存されている。これらはＣＰＵ６４０１による制御に従って適宜ＲＡＭ６４０２にロードされ、ＣＰＵ６４０１による処理対象となる。
【０１７８】
６４０７はＩ／Ｆで、外部機器とのデータ通信を行うためのインターフェースとして機能するものであり、例えば、このＩ／Ｆ６４０７を介してスキャン画像１０やディスプレイリスト１２等をＲＡＭ６４０２や外部記憶装置６４０６に入力する。
【０１７９】
６４０８は上述の各部を繋ぐバスである。
【０１８０】
なお、このようなコンピュータは、例えばスキャナやプリンタが接続されたＰＣ（パーソナルコンピュータ）であっても良いし、スキャナ機能やＦＡＸ機能、コピー機能などを有する複合機であっても良い。
【０１８１】
また、このようなコンピュータがＰＣである場合、このソフトウェアは、例えば、このコンピュータに接続されているプリンタや複合機などの機器のドライバソフトウェアでもって提供されることになる。
【０１８２】
［その他の実施形態］
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体（または記憶媒体）を、システムあるいは装置に供給する。そして、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【０１８３】
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１８４】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１８５】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１８６】
【図１】本発明の第１の実施形態に係る画像処理装置において、画像符号化処理のための機能構成を示すブロック図である。
【図２】本発明の第１の実施形態に係る画像処理装置において、画像復号処理のための機能構成を示すブロック図である。
【図３】スキャン画像１０を前景部と背景部とに分離するための処理の一例を示す図である。
【図４】ランパケットデータの生成処理を説明するための一例として、「あ」の文字を処理する場合について示した図である。
【図５】３×３参照方式を用いることで、「あ」という文字画像に対するアウトラインベクトルを生成していく方式を説明する図である。
【図６】ケース０の場合における注目画素と近傍画素との関係を示す図である。
【図７】ケース１の場合における注目画素と近傍画素との関係を示す図である。
【図８】ケース２の場合における注目画素と近傍画素との関係を示す図である。
【図９】ケース３の場合における注目画素と近傍画素との関係を示す図である。
【図１０】ケース４の場合における注目画素と近傍画素との関係を示す図である。
【図１１】ケース５の場合における注目画素と近傍画素との関係を示す図である。
【図１２】ケース６の場合における注目画素と近傍画素との関係を示す図である。
【図１３】ケース７の場合における注目画素と近傍画素との関係を示す図である。
【図１４】ケース８の場合における注目画素と近傍画素との関係を示す図である。
【図１５】ケース９の場合における注目画素と近傍画素との関係を示す図である。
【図１６】ケース１０の場合における注目画素と近傍画素との関係を示す図である。
【図１７】ケース１１の場合における注目画素と近傍画素との関係を示す図である。
【図１８】ケース１２の場合における注目画素と近傍画素との関係を示す図である。
【図１９】ケース１３の場合における注目画素と近傍画素との関係を示す図である。
【図２０】ケース１４の場合における注目画素と近傍画素との関係を示す図である。
【図２１】ケース１５の場合における注目画素と近傍画素との関係を示す図である。
【図２２】輪郭抽出部１０７による処理のフローチャートである。
【図２３】水平方向のベクトルに係る情報が登録されたテーブルの構成例を示す図である。
【図２４】垂直方向のベクトルに係る情報が登録されたテーブルの構成例を示す図である。
【図２５】ステップＳ２で作成される、２値画像中の総輪郭線数、輪郭線の総点数、輪郭線中の各点のｘ座標、ｙ座標を記憶したテーブルの構成例を示す図である。
【図２６】ステップＳ１における処理の詳細を示すフローチャートである。
【図２７】ステップＳ１２における処理の詳細を示すフローチャートである。
【図２８】式の値が０の場合（ケース０）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図２９】式の値が１の場合（ケース１）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図３０】ステップＳ４２における処理の詳細を示すフローチャートである。
【図３１】テーブル３１１の構成例を示す図である。
【図３２】テーブル３２１の構成例を示す図である。
【図３３】テーブル３３１の構成例を示す図である。
【図３４】テーブル３４１の構成例を示す図である。
【図３５】ステップＳ４４の処理の詳細を示すフローチャートである。
【図３６】式の値が２の場合（ケース２）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図３７】式の値が３の場合（ケース３）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図３８】ケースＡの処理のフローチャートである。
【図３９】式の値が４の場合（ケース４）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図４０】式の値が５の場合（ケース５）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図４１】式の値が６の場合（ケース６）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図４２】ケースＢの処理のフローチャートである。
【図４３】式の値が７の場合（ケース７）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図４４】式の値が８の場合（ケース８）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図４５】ステップＳ１３４の処理の詳細を示すフローチャートである。
【図４６】ステップＳ１３６における処理の詳細を示すフローチャートである。
【図４７】式の値が９の場合（ケース９）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図４８】ケースＤの処理のフローチャートである。
【図４９】式の値が１０の場合（ケース１０）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図５０】式の値が１１の場合（ケース１１）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図５１】式の値が１２の場合（ケース１２）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図５２】ケースＣの処理のフローチャートである。
【図５３】式の値が１３の場合（ケース１３）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図５４】式の値が１４の場合（ケース１４）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図５５】式の値が１５の場合（ケース１５）に、ステップＳ３０で行う処理の詳細を示すフローチャートである。
【図５６】ステップＳ２における処理の詳細を示すフローチャートである。
【図５７】テーブル５７１，５７４〜５７７、そして変数Ｌ、ｔを説明する図である。
【図５８】ステップＳ２１１における処理の詳細を示すフローチャートである。
【図５９】ステップＳ２で生成した図５７に示すテーブルに基づいて図２５に示すテーブルを輪郭抽出部１０７が生成する処理のフローチャートである。
【図６０】エッジ抽出部１０４によるエッジ抽出処理を説明する図である。
【図６１】エッジ抽出処理を行った場合に得られる画像の例を示す図である。
【図６２】様々なランパケットのうち、前景部に属するランパケット、背景部に属するランパケットを説明する図である。
【図６３】文字画像とエッジリストとの対応関係を示す図である。
【図６４】コンピュータのハードウェア構成を示すブロック図である。
【図１】
2008042346.tif 000003
【図２】
2008042346.tif 000004
【図３】
2008042346.tif 000005
【図４】
2008042346.tif 000006
【図５】
2008042346.tif 000007
【図６】
2008042346.tif 000008
【図７】
2008042346.tif 000009
【図８】
2008042346.tif 000010
【図９】
2008042346.tif 000011
【図１０】
2008042346.tif 000012
【図１１】
2008042346.tif 000013
【図１２】
2008042346.tif 000014
【図１３】
2008042346.tif 000015
【図１４】
2008042346.tif 000016
【図１５】
2008042346.tif 000017
【図１６】
2008042346.tif 000018
【図１７】
2008042346.tif 000019
【図１８】
2008042346.tif 000020
【図１９】
2008042346.tif 000021
【図２０】
2008042346.tif 000022
【図２１】
2008042346.tif 000023
【図２２】
2008042346.tif 000024
【図２３】
2008042346.tif 000025
【図２４】
2008042346.tif 000026
【図２５】
2008042346.tif 000027
【図２６】
2008042346.tif 000028
【図２７】
2008042346.tif 000029
【図２８】
2008042346.tif 000030
【図２９】
2008042346.tif 000031
【図３０】
2008042346.tif 000032
【図３１】
2008042346.tif 000033
【図３２】
2008042346.tif 000034
【図３３】
2008042346.tif 000035
【図３４】
2008042346.tif 000036
【図３５】
2008042346.tif 000037
【図３６】
2008042346.tif 000038
【図３７】
2008042346.tif 000039
【図３８】
2008042346.tif 000040
【図３９】
2008042346.tif 000041
【図４０】
2008042346.tif 000042
【図４１】
2008042346.tif 000043
【図４２】
2008042346.tif 000044
【図４３】
2008042346.tif 000045
【図４４】
2008042346.tif 000046
【図４５】
2008042346.tif 000047
【図４６】
2008042346.tif 000048
【図４７】
2008042346.tif 000049
【図４８】
2008042346.tif 000050
【図４９】
2008042346.tif 000051
【図５０】
2008042346.tif 000052
【図５１】
2008042346.tif 000053
【図５２】
2008042346.tif 000054
【図５３】
2008042346.tif 000055
【図５４】
2008042346.tif 000056
【図５５】
2008042346.tif 000057
【図５６】
2008042346.tif 000058
【図５７】
2008042346.tif 000059
【図５８】
2008042346.tif 000060
【図５９】
2008042346.tif 000061
【図６０】
2008042346.tif 000062
【図６１】
2008042346.tif 000063
【図６２】
2008042346.tif 000064
【図６３】
2008042346.tif 000065
【図６４】
2008042346.tif 000066