以下に、本発明を実施するための最良の形態について、図面を参照しながら詳しく説明する。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。
図1は、本実施形態に係る画像処理装置の構成を示す図である。図1に示すスキャナ1は、後述する図2に示す画像入力手段211として用いられる。画像メモリ2は、画像入出力インタフェース3を介し、スキャナ1で読み取られた2値化前の多値画像データや、2値化後の2値画像データを保持する。画像メモリ2と画像入出力インタフェース3は、図2に示す細線化済2値画像獲得手段200として用いられる。
輪郭ベクトル抽出部5は、図2に示す輪郭ベクトル抽出手段300として用いられる。輪郭ベクトル抽出部5は、入力画像ラスタ走査部50と、入力ポート513及び514を含んでいる。入力画像ラスタ走査部50は、画像入出力インタフェース3を介して、細線化済2値画像データを順次入力する。入力ポート513及び514は、3×3の9画素で構成される走査窓における各画素の状態を入力する。
CPU519、ROM6、RAM520、ディスクインタフェース521、通信インタフェース4、画像メモリ2、画像入出力インタフェース3、輪郭ベクトル抽出部5は、システムバス518によって、相互に接続されている。本画像処理装置は、通信インタフェースを介し、外部の装置と通信することができる。また、RAM520は、ワーキングメモリとして機能し、ROM6には、CPU519で実行されるプログラムや、所定のパラメータや、データ等が格納されている。ハードディスク522は、ディスクインタフェース521を介して、システムバス518に接続されている。CPU519、RAM520、ROM6は、図2に示す線芯ベクトル生成手段310や、線芯ベクトル平滑手段320として用いられる。
図2は、本実施形態に係る画像処理装置の機能ブロックを示す図である。以下、図2及び図3を参照しながら、本画像処理装置の動作の概略について説明する。図2に示す細線化済2値画像獲得手段200は、2値画像入力手段210と、2値画像細線化手段220とを含んでいる。2値画像入力手段210は、2値画像を2値画像細線化手段220に出力し、2値画像細線化手段220は、4連結に細線化された2値画像を出力する。ここで、2値画像入力手段210は、例えば、スキャナである画像入力手段211と、2値化手段212を含んでいる。画像入力手段211における光電走査によって読み取られた画像データは、2値化手段212における閾値処理によって2値化される。更に、2値化された2値画像は、例えば、Hilditch法の手法が用いられて、4連結の細線化処理が行われる。Hilditch法とは、公知の細線化手法として、酒井幸市著「ディジタル画像処理の基礎と応用第2版、ISBN4−7898−3707−6、CQ出版社、2004年2月1日発行、P.51−P.54」等に記載されている。
図3の(a)は、2値画像細線化手段220に入力される2値画像の一例を示す図である。また、図3の(b)は、2値画像細線化手段220から出力される細線化済画像の一例を示す図である。2値画像は、細線化処理によって、一画素幅に細線化される。
本実施形態において、輪郭ベクトル抽出手段300は、1回のラスタ走査により細線化済2値画像の線図形を、端点や交点間をつなぐ独立した線又は閉曲線毎のそれぞれに対応したベクトル列の集まり(以下、線素粗輪郭ベクトルという)として抽出し出力する。本実施形態におけるベクトルの付与される様子は、後述する図9〜図24に示す。その場合に、出力結果には、ベクトル列を構成するそれぞれのベクトルが、処理対象である線図形の端点又は交点位置に対応する部分から抽出されたか否かを示す情報等を含んでいる。以下、そのような情報を付与情報といい、本実施形態においては、付与情報と線素粗輪郭ベクトルとを合わせて、輪郭ベクトルという。本実施形態において抽出される輪郭ベクトルは、太さや面積といった概念に意味を有さず、図形の輪郭を構成する線のみを、直線、閉曲線、開曲線等の線又は線の集まりとして扱う場合に適している。従って、太さを意識せずに、細線のみで描かれている線画として最利用することができる。
また、本実施形態において、線芯ベクトル生成手段310は、入力された輪郭ベクトルに含まれる付与情報を用いて、線分の幅を「0」に線芯化するため、輪郭ベクトルに係る線に沿った線芯化ベクトルを生成する。その際に、幅が1画素である線分において、端点から他方の端点までの片道分の各輪郭ベクトルの位置が、それぞれ半画素分ずつ所定の方向に、予め、定められた規則に従って微調整される。ここで、端点を有さない閉ループの場合には、閉ループ上の全てのベクトルの位置が、それぞれ半画素分ずつ所定の方向に、予め、定められた規則に従って微調整される。線芯ベクトル生成手段310によって、輪郭ベクトルが、線芯化ベクトルに変換される。図3の(c)は、輪郭ベクトル抽出手段300から出力される輪郭ベクトルを輪郭画像として描画し、可視化した図である。また、図3の(d)は、線芯ベクトル生成手段310から出力される線芯化済みベクトルを線画像として描画し、可視化した図である。
更に、本実施形態において、線芯ベクトル平滑手段320は、線芯化済みベクトルを入力し、各端点間ベクトル毎に平滑化処理を行うことによって、平滑化済みの、始端点と終端点の間の非周回型のベクトル列を生成する。本実施形態においては、平滑化処理は、関数近似の手法によって行われる。平滑化済ベクトル出力手段330は、ファイル出力、又は、通信インタフェース等を介し、平滑化されたベクトルデータが、外部装置に出力される。図3の(e)は、線芯ベクトル平滑手段320から出力される平滑化済みベクトルを、線画像として描画し、可視化した図である。
図4は、図1に示す輪郭ベクトル抽出部5の詳細な構成を示す図である。輪郭ベクトル抽出部5は、図4に示す信号線500により、ラスタ走査形式で、細線化済み2値画像データを順次、入力する。入力制御回路501は、画像データを入力する制御部である。入力制御回路501に入力された画像データは、図示されていない画素同期クロック信号に同期し、1画素ずつ順次更新しながら、ラッチ502に保持される。また、ラッチ502は、次の画素同期クロック信号によって、次の画素データを入力制御回路501から入力する。その場合に、既に保持していた画素データは、画素クロック信号に同期して、ラッチ503に保持され、ラッチ503に保持されていた画素データは、ラッチ504に保持される。FIFO505及び506は、それぞれ、1ラスタ分の画素データを保持するメモリであり、ファーストイン・ファーストアウト動作する。FIFO505は、ラッチ504の出力を順次、画素同期クロック信号に同期して取り込み、1ラスタ前のデータをラッチ507に出力する。同様に、FIFO506は、ラッチ509の出力を順次、取り込み、1ラスタ前のデータをラッチ510に出力する。ラッチ507、ラッチ508、ラッチ509、ラッチ510、ラッチ511、ラッチ512の動作については、ラッチ502、ラッチ503、ラッチ504と同様である。
ここで、図4に示すラッチで表される画素について説明する。図5は、9個の画素について説明する図である。本実施形態において、画像処理装置は、図5に示すような2値画像における注目画素101と、その近傍の8個の画素の状態を認識し処理を進める。注目画素101がラスタ走査され、主走査方向に、1画素ずつずらしながら画像全体の処理が進行する。図6において、「X」は注目画素101を示し、「0」及び「2」で示された位置は、主走査方向について注目画素101と同じ位置であって、画素「0」は、副走査方向について1ラスタ前の画素を示し、画素「2」は、1ラスタ先の画素を示している。「1」及び「3」で示された位置は、注目画素101と同一のラスタ上にあって、画素「3」は、1画素前の画素を示し、画素「1」は、1画素先の画素を示している。更に、「A」及び「B」は、主走査方向に1画素先の位置にあって、画素「A」は、1ラスタ前にある画素を示し、画素「B」は、1ラスタ先の位置にある画素を示している。更に、「C」及び「D」は、主走査方向の1画素前の位置にあって、画素「C」は、1ラスタ先にある画素を示し、画素「D」は、1ラスタ前の位置にある画素を示している。
再び、図4を参照する。図4に示すラッチ502、ラッチ503、ラッチ504、ラッチ507、ラッチ508、ラッチ509、ラッチ510、ラッチ511、ラッチ512に記憶された9個の画素は、図5に示す9画素からなる領域の画素データを記憶する。ラッチ502は、図5に示す画素「B」に対応している。また、ラッチ503は画素「2」に、ラッチ504は画素「C」に、ラッチ507は画素「1」に対応している。更に、ラッチ508は画素「X」に、ラッチ509は画素「3」に、ラッチ510は画素「A」に、ラッチ511は画素「0」に、ラッチ512は画素「D」に対応している。
図4に示す入力ポート513及び514は、3×3の9画素で構成される走査窓における各画素の状態を入力する。入力ポート513は、ラッチ510、ラッチ502、ラッチ504、ラッチ512のデータを、図5に示す「A」「B」「C」「D」の位置のデータとして、CPU519に入力する。また、入力ポート514は、ラッチ511、507、503、509、508のデータを、「0」「1」「2」「3」「X」の位置のデータとして、CPU519に入力する。主走査カウンタ515は、主走査方向の画素位置を示すカウンタであり、図示されていない副走査同期信号によりリセットされて、図示されていない画素同期信号によりカウントアップする。副走査カウンタ516は、副走査方向の画素位置を示すカウンタで、図示されていないページ同期信号によりリセットされ、図示されていない副走査同期信号によりカウントアップされる。入出力制御ポート517は、入出力制御用の入出力ポートであり、入力制御回路501に、画素データ入力の実行、又は、保留を指示する信号を出力し、入力制御回路501から、CPU519へ画素データ更新を通知する信号等を受信する。CPU519は、入出力制御ポート517を介して、画素データの更新を行うことができ、主走査カウンタ515及び副走査カウンタ516を介して、注目画素101の画素位置(i、j)を認識することができる。また、入力ポート513及び514を介して、注目画素101及び近傍の8方向の画素の状態を認識することができる。
注目画素の処理が終了すると、CPU519は、入出力制御ポート517を介し、9個のラッチに記憶される画素データの更新を指示すると共に、画素データの更新完了の信号をリセットする。入力制御回路501は、入出力制御ポート517から更新を指示されると、画素データの更新指示の信号をクリアすると共に、ラッチに保持される画素データを更新し、更新が完了すると、入出力制御ポート517に更新完了の信号を出力する。CPU519は、更新指示の出力後、入出力制御ポート517からの更新完了の信号の入力を監視している。更新完了の信号が入力されると、新たに9個のラッチに記憶された画素データについて処理され、以降、同様の処理が繰り返される。入力制御回路501は、画像領域の最終画素を、注目画素101として処理を終了すると、入出力制御ポート517に終了信号を出力する。
図6は、本実施形態において、後述する図9〜図24に示す輪郭点に付与される付与情報の一覧テーブルを示す図である。以下、付与情報を、輪郭点情報ともいう。図6に示す一覧テーブルは、例えば、ハードディスク522に格納されていても良い。本実施形態においては、それぞれの輪郭点が抽出される際に、輪郭点に入力、又は、輪郭点から出力されるベクトルに応じて、図6に示すような16種類の輪郭点情報のいずれかが付与される。図6に示される輪郭点情報は、「xxx_yyy」又は「xxx_yyy_zzz」の形式によって表示されている。ここで、「xxx」の部分は、対象の輪郭点が終点となるベクトルの向きを表し、「yyy」の部分は、その輪郭点が始点となるベクトルの向きを表している。図6において、「UP」は上向き、「DOWN」は下向き、「RIGHT」は右向き、「LEFT」は左向きを示している。例えば、第1〜3の項目においては、いずれも上向きベクトルの終点が、かつ、右向きベクトルの始点となる輪郭点であることを示している。また、「zzz」の部分は、付与情報を有する輪郭点が、端点部であることを示していて、図6においては、「端点情報」の欄に示されている。即ち、本実施形態において、図6に示すテーブルは、輪郭ベクトルが有する輪郭点と端点との関連付けを示している。
ここで、端点情報について、図7を参照しながら、図6を説明する。図7は、端点が存在する場合において付与される端点情報を説明する図である。以下の図7、図8、及び、図9〜図24において、内部がチェックパターンとされた丸印は黒画素を示し、破線とされた丸印は白画素を示している。また、図中の「d」は、「do not care」、即ち、白画素でも黒画素でも構わないことを示している。また、図9〜図24において、黒丸印は、横方向ベクトルの始点を示し、白丸印は、縦方向ベクトルの終点を表している。更に、黒三角印は、縦方向ベクトルの始点を示し、白三角印は、横方向ベクトルの終点を表している。また、図中において実線で示された矢印は、始点及び終点が定まった輪郭ベクトルを示し、破線で示された矢印は、始点又は終点のいずれかが定まった輪郭ベクトルを示している。以下、輪郭ベクトルの始点と終点とを、総称して輪郭点という。特に、黒丸印は、端点部から抽出されるベクトルの始点及び縦方向ベクトルの終点を示しており、黒三角印は、端点部から抽出される縦方向ベクトルの始点及び横方向ベクトルの終点を示している。
図7の(a)に示す「_TL」は、線素の上端部の左側から抽出された輪郭点であることを示している。また、図7の(b)に示す「_LT」は、線素の左端部の上側から抽出された輪郭点であることを示している。また、図7の(d)に示すように、「_BR」は、線素の下端部の右側から抽出された輪郭点であることを示している。また、図7の(c)に示すように、「_RB」は、線素の右端部の下側から抽出された輪郭点であることを示している。また、図7の(b)に示すように、「_LB」は、線素の左端部の下側から抽出された輪郭点であることを示している。また、図7の(d)に示すように、「_BL」は、線素の下端部の左側から抽出された輪郭点であることを示している。また、図7の(c)に示すように、「_RT」は、線素の上端部の右側から抽出された輪郭点であることを示している。また、図7の(a)に示すように、「_TR」は、線素の右端部の上側から抽出された輪郭点であることを示している。
次に、線素の端点でない部分(以下、非端点部という)から抽出される輪郭点について説明する。図8は、端点が存在しない場合において付与される付与情報を説明する図である。非端点部には、既に説明した「_zzz」部が記載されていない輪郭点情報が付与される。本実施形態においては、注目画素101が黒画素の場合に、図9〜図24に示すような近傍の画素の状態に応じて輪郭点情報が抽出される際に、図6に示す「値」欄に記載されている数値が付与される。ここで、輪郭ベクトルの始点及び終点位置は、主走査方向と副走査方向共に、画素間の中間に位置している。本実施形態において、主走査方向及び副走査方向共に、画素のある位置は正の整数で示され、画素位置は、2次元座標で表現される。ここで、小数の表現を避けるために便宜上、画素位置は、偶数のみで表現され、始点と終点の位置は、奇数によって表現される。即ち、m画素×n画素の画像は、2m×2nの正の偶数の座標表現で表わされる。主走査方向をx座標、副走査方向をy座標とした2次元座標であらわすとき、2値画像は、それぞれがm画素よりなるnラスタで構成されるm×n画素(m、nは正の整数)であるとする。また、第j番目のラスタの第i番目の画素位置は、(2i、2j)(i、jは正の整数で、i≦m、j≦n)で表現される。また、主走査方向は、左から右に向かう方向を正の方向とし、副走査方向は、上から下に向かう向きを正の方向とする。本実施形態において、注目画素101が白画素である場合には、ラスタ走査が1画素分進められ、注目画素101の位置が更新される。一方、注目画素101が黒画素である場合には、近傍の8画素の状態に応じた処理が行なわれる。
図9〜図24は、輪郭ベクトル抽出手段300が、2値画像細線化手段220から4連結に細線化された2値画像を入力した場合に、認識され得るパターンを示した図である。図5において説明したような3×3の9画素で構成される走査窓が用いられて、画像がラスタ走査され、逐次、図9〜図24に示すような3×3の画素パターンとして、注目画素と近傍の8画素の状態とが判断され、輪郭点が抽出される。本実施形態においては、4連結に細線化された2値画像において、端点及び交点が検出されると共に、端点、交点が結ばれ互いに独立した線素や、閉曲線の集まりとして、それぞれの線成分に対応する独立したベクトル群が抽出される。また、本実施形態において、その際に、それぞれの輪郭点に、図6に示す輪郭点情報が付与される。
図9〜図24の内、例えば、図10の(1)に示す画素パターンにおいて、中央の注目画素の輪郭点に、図6に示す「LEFT_UP_BL」及び「DOWN_LEFT_BR」で示される端点情報が付与されていることを示している。また、図11の(1)に示す画素パターンは、中央の注目画素の輪郭点に、図6に示す「UP_RIGHT_LT」及び「LEFT_UP_LB」で示される端点情報が付与されていることを示している。更に、図13の(1)に示す画素パターンは、中央の注目画素の点に、図6に示す「UP_RIGHT_TL」及び「RIGHT_DOWN_TR」で示される端点情報が付与されていることを示している。既に説明したように、実際には、それぞれの端点情報は、図6に示す「値」欄に示される数値として付与される。また、図16の(1)に示す画素パターンは、中央の注目画素における左上の交点に、図11に示す「UP_RIGHT_LT」及び図13に示す「UP_RIGHT_TL」で示される端点情報が付与されていることを示している。一方、例えば、図12に示すような画素パターンが認識された場合には、端点情報ではなく、図8において説明したような輪郭点情報として付与される。残りの図15、図17、図18、図20、図21、図22、図23についても上記と同様な形で輪郭点情報又は端点情報が付与されていることを示している。また、図9、図14、図19に示すような画素パターンが認識された場合には、輪郭ベクトルの抽出処理は行われない。
以下、輪郭ベクトル抽出手段300の動作について説明する。図25は、本実施形態における輪郭ベクトル抽出手段300の処理の手順を示すフローチャートである。本実施形態においては、既に、説明したように、4連結に細線化された2値画像から、端点及び交点を検出し、端点や交点をつなぐ互いに独立した線素又は閉曲線の集まりとして、それぞれの線成分に対応する独立したベクトル群が抽出される。更に、ベクトル群が抽出される際に、図6に示すような輪郭点情報が、輪郭点に付与される。まず、ステツプS251において、2値画像データから、それぞれの輪郭点に輪郭点情報が付与され、各輪郭点に付随するベクトル列が抽出される。ベクトル列が抽出されると、各ベクトルの始点の座標が終点となるベクトル(以下、流入ベクトルという)と、そのベクトルの終点の座標が始点となるベクトル(以下、流出ベクトルという)とを出力し、ステップS252に進む。次に、ステツプS252において、出力された流入ベクトル及び流出ベクトルとから、画像中の総輪郭線数、各輪郭線における総点数、輪郭線中の各点のX及びY座標、各点の輪郭点情報の情報を有するデータテーブルが作成される。そのデータテーブルの形式については後述する。ステツプS253において、ディスクインタフェース521を介して、作成されたデータテーブル情報を、例えば、ファイル形式でハードディスク522に格納し、本フローチャートの動作を終了する。
図26は、図25に示すステップS251におけるベクトル列抽出処理の手順を示すフローチャートである。まず、ステップS261において、CPU519は、入力ポート514の4ビット目を参照することにより、注目画素101が、白画素であるか、又は、黒画素であるかを判定する。ここで、白画素と判定された場合には、ステップS263に進み、黒画素と判定された場合には、ステップS262に進む。ステップS262において、注目画素101の近傍の8画素の状態が、例えば、CPU、ラッチ、入力ポートにより検出され、8画素の状態に応じた適切な処理ルーチンがコールされる。ステップS263において、CPU519は、入出力制御ポート517を介して、画素位置の更新を入力制御回路501に指示する。ステップS263において、入力制御回路501によって、画素位置が更新され、更新が終了すると、入力制御回路501は、更新完了を入出力制御ポート517に通知する。ステップS264において、CPU519は、最終画素の処理が終了したか否かが判定され、終了と判定された場合には、図25のステップS252に進む。一方、終了していないと判定された場合には、次の注目画素について、ステップS261〜S264を繰り返す。
ここで、図26に示したステップS262について説明する。図27は、図26に示すステップS262に示す注目画素の近傍の画素の状態に応じて、実行される処理の手順を示すフローチャートである。まず、ステップS271において、レジスタが「0」にクリアされる。本実施形態において、画素状態は数値として表される。従って、レジスタは、そのような数値を格納するために用いられる。以下、CPU519のレジスタが用いられるとして説明する。次に、ステップS272において、図5に示す走査窓で「0」で示された位置の画素の状態(以下、f(0)とする)が、黒画素であるか、又は、白画素であるかが判定される。ここで、例えば、「0」の位置の画素の状態が黒画素であるということを「f(0)=1」と示し、白画素であるということを「f(0)=0」と示しても良い。ステップS272において、黒画素と判定された場合には、ステップS273に進み、レジスタの内容に「1」が加えられる。一方、白画素と判定された場合には、ステップS274に進む。ステップS274において、図5に示す走査窓で「1」で示された位置の画素の状態(以下、f(1)とする)が、黒画素であるか、又は、白画素であるかが判定される。ステップS274において、黒画素と判定された場合には、ステップS275に進み、レジスタの内容に「2」が加えられる。一方、白画素と判定された場合には、ステップS276に進む。
ステップS276において、図5に示す走査窓で「2」で示された位置の画素の状態(以下、f(2)とする)が、黒画素であるか、又は、白画素であるかが判定される。ステップS276において、黒画素と判定された場合には、ステップS277に進み、レジスタの内容に「4」が加えられる。一方、白画素と判定された場合には、ステップS278に進む。ステップS278において、図5に示す走査窓で「3」で示された位置の画素の状態(以下、f(3)とする)が、黒画素であるか、又は、白画素であるかが判定される。ステップS278において、黒画素と判定された場合には、ステップS279に進み、レジスタの内容に「8」が加えられる。一方、白画素と判定された場合には、ステップS280に進む。ステツプS280において、レジスタの保持する値の処理番号のルーチンが、コールされる。以上のフローにおいて、レジスタの内容は、図5に示す「0」、「1」、「2」、「3」の位置の各画素の状態に応じて、0〜15の値をとり得る。0〜15の値は、それぞれ、図9〜図24に示されるケース0〜ケース15のパターンに対応しており、図示されたように輪郭ベクトルが抽出される。本実施形態においては、輪郭ベクトル抽出手段300により、4連結に細線化された2値画像(線図形)から、端点や交点間をつなぐ独立した線や閉曲線毎に対応したベクトル列の集まりが抽出され、各輪郭点に輪郭点情報が付与され、結果として出力される。
図28は、輪郭ベクトル抽出手段300によって出力されるデータ形式の一例を示す図である。図28に示すように、出力されるデータは、第1輪郭、第2輪郭等の輪郭毎のまとまりとする各線素から抽出されたベクトル列を表しており、更に、それぞれの輪郭点に、図6に示すような輪郭点情報が付与されている。
図29は、線芯ベクトル生成手段310の処理の手順を示すフローチャートである。まず、ステップS291において、輪郭ベクトル抽出手段300によって得られた輪郭ベクトルが取得される。ステップS292において、ステップS291において取得された、図28に示すような輪郭化済みベクトルから、1つのベクトル列が処理対象とされる。例えば、図28において、第k輪郭(但し、1≦k≦a)が処理対象とされる。ステップS293において、ステップS292で対象とされた、例えば、総点数pのベクトル列において、1つのベクトルの輪郭点(第q点とする。但し、1≦q≦p)が処理対象とされる。ステップS293において、ステップS294で始端点が検出されるまで、第1点から第p点までが、昇順に1点ずつ処理対象として定められる。
ステップS294において、ステップS293で定められた輪郭点の輪郭点情報が参照され、その輪郭点が、始端点とすべきベクトルか否かが判定される。ここで、始端点とすべきベクトルと判定された場合には、ステップS297に進み、始端点とすべきベクトルと判定されなかった場合には、ステップS295に進む。ステップS294において、輪郭ベクトル抽出手段300で抽出された輪郭点情報が図6に示す「UP_RIGHT_LT」、「DOWN_LEFT_RB」、「LEFT_UP_BL」、「RIGHT_DOWN_TR」のいずれに該当するかにより判定される。ここで、例えば、図6の値欄に記載されている数値の0ビット目と1ビット目が共に「1」であるか否かが検出されることによって、ステップS294における判定がなされても良い。
ステップS295において、ステップS292において取得された輪郭化済みベクトルに含まれる処理対象とされた1つのベクトル列中の全てのベクトルの処理が終了したか否かが判定される。ここで、終了していないと判定された場合には、ステップS293に戻り、処理対象とされたベクトル列中の次のベクトルに対して、ステップS294において再び、判定される。一方、終了と判定された場合には、ステップS292において入力されたベクトル列中には、始端点候補が存在しなかった場合を示しており、ステップS296に進む。ステップS296においては、そのベクトル列が端点のない閉ループであることを示す閉ループマーカが、ベクトル列に対して付与される。図30の(a)は、閉ループマーカが付与されたベクトル列の一例を示す図である。図30の(a)において、対象とされたベクトル列は第s番目である場合を示し、ベクトル列中にv個のベクトルを含んでいる。また、図30に示すように、図28に示す輪郭化済みベクトルに、始端点終端点情報を格納する領域が挿入されている。また、図示されていないが、図28と同様に、各輪郭点の間に輪郭点情報の領域が確保されている。また、図30においては、始端点終端点情報には、2つの領域があって、上側の領域に始端点の座標値が格納され、下側の領域に終端点の座標値が格納される。本実施形態において、始端点終端点情報を参照することによって、そのベクトル列が、始端点の存在しない閉ループであることを認識することができる。図30の(a)においては、(−1、−1)という端点座標としては存在し得ない座標値が付与されることにより、閉ループであることが示されている。ステップS296の処理の後、ステップS302に進む。
ステップS294において、始端点が存在すると判定された場合には、ステップS297において、ステップS293で定められた輪郭点を始端点として登録し、かつ、輪郭点を、始端点から終端点間の1ベクトルとして出力する。ステップS298において、ステップS293と同様に、ステップS292で対象とされた、例えば、総点数pのベクトル列において、1つのベクトルの輪郭点(第q点とする。但し、1≦q≦p)が処理対象とされる。ステップS299で終端点が見つけられるまでの間、ステップS293で定められた輪郭点以降の点を、ステップS298が実行されるたびに、ステップS293で定められた輪郭点以降の点から第p点まで、昇順に1点ずつ処理対象として定められる。
ステップS299において、ステップS298で定められた輪郭点の輪郭点情報を参照し、その輪郭点が、終端点とすべきベクトルであるか否かが判定される。ここで、終端点とすべきベクトルであると判定された場合には、ステップS301に進み、終端点とすべきベクトルでないと判定された場合には、ステップS300に進む。ステップS299においては、輪郭ベクトル抽出手段300で抽出された輪郭点情報が参照されることによって、判定が行われる。本実施形態においては、図6に示す「UP_RIGHT_TL」、「DOWN_LEFT_BR」、「LEFT_UP_LB」、「RIGHT_DOWN_RT」の輪郭点情報のいずれに該当しているかが判定される。また、例えば、図6に示す「値」欄に記載されている数値の0ビット目が「1」であり、1ビット目が「0」であるか否かによって判定が行われても良い。ステップS300において、輪郭点を、始端点から終端点間における1ベクトルとして出力し、ステップS298に戻る。また、ステップS301においては、終端点の座標値を登録し、かつ、輪郭点を、始端点から終端点間における1ベクトルとして出力する。ステップS301が終了した時点において、輪郭線におけるベクトル列の始端点及び終端点が定まり、かつ、始端点から終端点間における一連の各ベクトルも出力されている。
次に、ステップS302において、ステップS291において入力された輪郭ベクトル中の全てのベクトル列の処理が終了したか否かが判定される。ここで、全てのベクトル列の処理が終了と判定された場合には、ステップS303に進み、終了していないと判定された場合には、ステップS292に戻り、次のベクトル列に対して、ステップS292〜S302を繰り返す。ステップS303において、ステップS291において入力された輪郭ベクトルを処理した処理結果を出力する。ステップS303の終了時点においては、まだ、線芯化処理は行われていないので、以下、出力されたベクトル列を片輪郭ベクトルという。
図30の(b)は、始端点及び終端点が定まり、始端点から終端点間における一連のベクトル列の情報を含む、出力データ形式の一例を示す図である。図30の(b)に示すように、第u番目のベクトル列が処理対象とされていて、そのベクトル列中には、始端点から終端点間における一連のベクトルが、t個含まれている。図30の(b)に示す第1点は、始端点であり、第t点は、終端点に相当している。
図31は、線芯ベクトル生成手段310における、図29に示すフローチャート後の処理の手順を示すフローチャートである。まず、ステップS311において、図29に示すフローチャートにより生成された片輪郭ベクトルを入力する。片輪郭ベクトルは、線図形の端点又は交点位置に対応する部分から抽出されたか否かを表す輪郭点情報を含み、端点を含まずに閉ループを構成しているか、又は、始端点から終端点間において非周回である一連のベクトル列の集まりを示している。ステップS312において、ステップS311において入力された図30に示すようなデータ形式の片輪郭ベクトルから、1つのベクトル列が処理対象として定められる。ステップS313において、ステップS312において定められた、例えば、総点数pのベクトル列の中の1つのベクトルの輪郭点(第q点とする。但し、1≦q≦p)が、処理対象として定められる。
ステップS314において、ステップS313において定められた輪郭点の輪郭点情報を参照し、その輪郭点を終点とするベクトル、又は、その輪郭点を始点とするベクトルのいずれかのベクトルの向きが、左向きか否かが判定される。ここで、左向きと判定された場合には、ステップS315に進み、左向きでないと判定された場合には、ステップS316に進む。ステップS315において、ステップS314において判定対象とされた輪郭点のy座標値を1だけ減じ、ステップS317に進む。ここで、減じる前の輪郭点の座標値を(2i、2j)とする。また、本実施形態において、y座標値を1だけ減じるということは、副走査方向に半画素分原点側に移動するということを示している。一方、ステップS316において、ステップS314において判定対象とされた輪郭点のy座標値を1だけ増やし、ステップS317に進む。本実施形態において、y座標値を1だけ増やすということは、副走査方向に半画素分原点と反対側に移動するということを示している。 ステップS317において、ステップ313において定められた輪郭点の輪郭点情報を参照し、その輪郭点を終点とするベクトル、又は、その輪郭点を始点とするベクトルのいずれかのベクトルの向きが、上向きか否かが判定される。ここで、上向きと判定された場合には、ステップS318に進み、上向きでないと判定された場合には、ステップS319に進む。ステップS318において、ステップS317において判定対象とされた輪郭点のX座標値を1だけ増やし、ステップS320に進む。本実施形態において、X座標値を1だけ増やすということは、主走査方向に半画素分原点とは反対側に移動するということを示している。一方、ステップS319において、ステップS317において判定対象とされた輪郭点のX座標値を1だけ減じ、ステップS320に進む。本実施形態において、X座標値を1だけ減じるということは、主走査方向に半画素分原点側に移動するということを示している。
ステップS320において、ステップS312で定められたベクトル列内の全ての輪郭点の処理が終了したか否かが判定される。ここで、終了と判定された場合には、ステップS321に進む。一方、終了されていないと判定された場合には、ベクトル列における次の輪郭点について、ステップS313〜S320を繰り返す。ステップS321において、ステップS311において入力された輪郭ベクトルにおける全てのベクトル列の処理が終了したか否かが判定される。ここで、終了と判定された場合には、ステップS322に進む。一方、終了していないと判定された場合には、次のベクトル列について、ステップS312〜S321を繰り返す。ステップS322において、ステップS311において入力された片輪郭ベクトルに対する処理結果を出力する。
以上の処理において、ステップS314における判定は、2ビット目(図6に示す一覧テーブルの「右向(0)左向(1)」の欄)を参照し、「0」であるなら右向き、「1」であるなら左向きとして行われても良い。ここで、「値」欄の数値を2進数で表現した場合に、0ビット目をLSBとし、7ビット目をMSBとしている。また、ステップS317における判定は、3ビット目(図6に示す「上向(0)下向(1)」の欄)を参照し、「0」であるなら上向き、「1」であるなら下向きとして行われても良い。
本実施形態においては、図29に示すような処理が行われて、輪郭ベクトル抽出手段300において生成された輪郭ベクトルに含まれている付与情報を用いて、片輪郭ベクトルが生成される。更に、1画素幅の線分における各輪郭ベクトルの位置を、それぞれ、予め、定める規則に従って、半画素分ずつ相応する方向に微調整し、線芯化済みベクトルが生成される。線芯化ベクトルが生成されることは、1画素幅に細線化された線分が、更に、0画素幅に線芯化されることを示している。ここで、線芯ベクトルを複数含んだ線芯ベクトル列は、図28に示すようなデータ形式として出力されても良い。
本実施形態における以上の処理を、図32において、まとめて説明する。図32は、入力された線図形と、生成された輪郭ベクトル及び片輪郭ベクトル及び線芯化済みベクトルの一例を示す図である。図32に示す線図形は、閉ループでない、端点を有する線分である。内部がチェックパターンとされた丸印は黒画素であり、図5に示す走査窓によって走査され、図27によってパターンが検出された結果、図9〜図24のように輪郭ベクトルが抽出される。ここで、輪郭ベクトルとは、図32において、線分を周回するように記載されたベクトルを示している。本実施形態においては、その際に、各輪郭点に、図6に示す16種類の情報の内いずれかが、輪郭点情報として付与されている。次に、図29に従って、各輪郭点を検出し、始端点及び終端点を検出する。ここで、図32に示す線分が、閉ループである場合には、始端点及び終端点は検出されず、データに、図30の(a)に示す閉ループマーカが付与される。始端点及び終端点が検出されたベクトル列が、図32に示す太い矢印で記載された片輪郭ベクトルである。次に、片輪郭ベクトルの各輪郭点におけるベクトル情報から、図31に従って、ベクトルの移動が行われ、図32に示すように、入力2値画像の画素上に細く記載された線芯化ベクトルが生成される。図32に示すように、線分が閉ループでないので、線芯化ベクトルも閉ループとはならない。しかしながら、線分が閉ループである場合には、線芯化ベクトルも閉ループとなる。
次に、線芯ベクトル平滑手段320の処理について説明する。従来、2値のラスタ画像データから抽出された、水平ベクトル、垂直ベクトルが交互に並ぶ構成とされている輪郭データ(以下、粗輪郭データという)を入力し、入力された粗輪郭上の線分より接線線分を抽出する手法が多く用いられている。更に、抽出された接線線分よりアンカーポイントを抽出し、抽出されたアンカーポイント間の線分により構成されるグループに、2次または3次ベジェ曲線及び直線を当てはめる。又は、ベジェ曲線近似を行い、2次又は3次のベジェ曲線により置き換えられる場合もある。しかしながら、輪郭ベクトルを関数近似法によって平滑化する場合は、基本的にベクトル列がループ状に連続した構成であることが前提とされている。従って、平滑化後の輪郭点、端点、アンカーポイントは、注目する辺ベクトルの前後に連なる一連の辺ベクトルが存在し、それらの辺ベクトルの向きや長さの組み合わせに基づいて決定される。そこで、本実施形態においては、図33に示すフローチャートによってベクトル列上の全てのアンカーポイントを決定し、抽出されたアンカーポイント間の線分により構成されるグループに2次又は3次ベジェ曲線及び直線をあてはめる。又は、ベジェ曲線近似を行い、2次又は3次のベジェ曲線により置き換えていく。その結果、始端点と終端点の間のみの部分の非周回型のベクトル列についても、そのまま、一般に知られる関数近似法によって、平滑化処理を行うことができる。
図33は、線芯ベクトル平滑手段320における処理の概略を示すフローチャートである。ステップS331において、例えば、図28に示す形式で出力された1つの線芯化ベクトル列が取り込まれ、ベクトル列の一連の各ベクトルの長さ及び向きの情報が求められる。例えば、互いに繋がる2点の座標値の差分から求められても良い。ステップS332において、ベクトル列に含まれる始端点終端点情報を参照し、処理対象とされているベクトル列が、閉ループであるか否かが判定される。ここで、閉ループと判定された場合には、ステップS333に進み、閉ループでないと判定された場合には、ステップS334に進む。
ステップS333において、ベクトル列は、ループ状に連続して構成されているので、従来のように、注目する辺ベクトルと、その前後のベクトルとに基づいてアンカーポイントを決定し、輪郭ベクトルを関数近似法によって平滑化することができる。一方、ステップS334において、ベクトル列は、閉ループを構成せず、互いに、相異なる始端点から終端点までのベクトル列を処理対象としている。従って、本実施形態においては、始端点から3点先までの区間を始端点区間とし、その区間用のアンカーポイント決定処理(始端点区間処理)が行われる。始端点区間処理については、後述する。
次に、ステップS335に進み、始端点区間より先で、かつ、終端点から3点前までの区間にかからない範囲の区間にある線分のベクトルには、注目する辺ベクトルの前後に連なる一連の辺ベクトルが存在している。従って、本区間においては、従来のような、アンカーポイントの決定処理によって、アンカーポイントを決定することができる。
本実施形態において、終端点から3点前までの区間は、終端点区間とされ、ステップS336において、その区間用のアンカーポイント決定処理(終端点区間処理)が行われる。終端点区間処理については、後述する。以上のような処理によって、閉ループでないベクトル列について、アンカーポイントを決定する。アンカーポイントを決定した後は、従来の方法によって、アンカーポイント間にある輪郭点を1つのグループとして関数近似する。例えば、決定されたアンカーポイント間をベジュ関数で曲線近似する手法が用いられても良い。その場合には、例えば、アンカーポイント間が、数個の線分から構成される部分について、1つの曲線によって置き換える1次近似処理が行われ、より多数の線分から構成される部分について、複数の曲線を用いて置き換える高次近似処理が行われる。
図34は、本実施形態に係る始端点区間処理の手順を示すフローチャートである。まず、ステップS341において、始端点をアンカーポイントとして定める。ステップS342において、始端点と、始端点の次の点とによって定められる第1辺となる線分のベクトル処理を行う。
本実施形態においては、主接線線分とするベクトルを抽出する条件として、従来において用いられている閉ループを構成するベクトル列において主接線線分を抽出するための条件が用いられる。閉ループを構成するベクトル列において、主接線線分を抽出する条件として、3つ挙げられている。
第1の条件として、注目するベクトルの前後のベクトルの向きが互いに逆向きであることが挙げられている。第2の条件として、抽出済みの主接線線分に隣接し、ベクトルの長さL1が、L1≧θ1を満たすことが挙げられている。更に、第3の条件として、ベクトルの長さL2が、L2≧θ2を満たすことが挙げられている。ここで、L1とは、注目ベクトルの長さを示し、L2とは、注目ベクトルから2辺後のベクトルの長さを示している。本実施形態においては、θ1は、3画素長、即ち、座標上の長さで「6」とし、θ2は、4画素長、即ち、座標上の長さで「8」とする。
以下のステップにおいて、図31に示すフローチャートによって生成された非周回型のベクトル列に対して、上記の条件の適用方法について説明する。ステップS342において、注目線分である第1辺の前に位置するベクトルは存在しないので、第1の条件を適用することができない。また、この時点で、ベクトル列中には抽出済みの主接線成分は存在していないので、第2の条件も適用することができない。従って、ステップS342においては、第3の条件のみを適用し、注目ベクトルである第1辺から2辺後の第3辺のベクトル長が、8以上の場合に注目ベクトルを主接線線分とする。
次に、ステップS343においては、第2辺が注目ベクトルとされる。ステップS343においては、第1〜第3の条件全てを適用する。その場合に、第2の条件が満たされるのであれば、注目ベクトルである第2辺を主接線線分とし、第2辺の始点、即ち、ベクトル列の第2点をアンカーポイントとする。一方、第2の条件が満たされず、第1又は第3の条件の少なくともいずれか一方の条件が満たされるのであれば、注目ベクトルである第2辺を主接線線分とする。その場合に、第2辺にアンカーポイントは設定されない。
次に、ステップS344においては、第3辺が注目ベクトルとされる。ステップS344においては、第1〜第3の条件全てを適用する。その場合に、第2の条件が満たされるのであれば、注目ベクトルである第3辺を主接線線分とし、第3辺の始点、即ち、ベクトル列の第3点をアンカーポイントとする。一方、第2の条件が満たされず、第1又は第3の条件の少なくともいずれか一方の条件が満たされるのであれば、以下のルールに従って、第3辺上にアンカーポイントを設定する。
本実施形態においては、注目ベクトルの2辺前、即ち、第1辺の長さ(以下、|V1|とする)に、所定の係数αを乗じた長さα|V1|の距離だけ注目辺の始点から離れた注目辺上の位置をアンカーポイントとする。ここで、本実施形態においては、係数αを「1」とする。但し、所定の係数αを乗じた長さα|V1|だけ注目辺の始点から離れた注目辺上の位置が注目辺の中点を越える位置となる場合には、注目辺の中点(即ち、第3辺の中点)の位置をアンカーポイントとする。更に、第4辺に、第1〜第3の条件全てを適用する。第1〜第3の条件のいずれも満たされない場合に、注目辺の2辺後、即ち、第5辺の長さ(以下、|V5|とする)に、所定の係数αを乗じた長さα|V5|だけ注目辺の終点から始点方向に離れた注目辺上の位置をアンカーポイントとする。ここで、本実施形態においては、係数αを「1」とする。但し、所定の係数αを乗じた長さα|V1|だけ注目辺の終点から始点方向に離れた注目辺上の位置が注目辺の中点を越える位置となる場合には、注目辺の中点の位置をアンカーポイントとする。但し、その中点が、既にアンカーポイントとされている場合には、重複してアンカーポイントを設定しない。
次に終端点を含む終端点区間におけるアンカーポイントの設定について説明する。図35は、本実施形態に係る終端点区間内処理の手順を示すフローチャートである。まず、ステップS351において、最終辺(第6辺)の2本前の注目辺(第8辺)に対して、第1〜第3の条件全てを適用する。その場合に、第2の条件が満たされるのであれば、注目ベクトルを主接線線分とし、注目辺の始点(第9辺と第8辺との接続点)、即ち、ベクトル列の最終点より3点前の点をアンカーポイントとする。一方、第2の条件が満たされず、第1又は第3の条件の少なくともいずれか一方の条件が満たされるのであれば、以下のルールに従って、第8辺上にアンカーポイントを設定する。
本実施形態においては、注目ベクトルの2辺前、即ち、最終辺から4辺前の辺(第10辺)の長さ(以下、|VM5|とする)に、所定の係数αを乗じた長さα|VM5|だけ注目辺の始点から離れた注目辺上の位置をアンカーポイントとする。ここで、本実施形態においては、係数αを「1」とする。但し、所定の係数αを乗じた長さα|VM5|だけ注目辺の始点から離れた注目辺上の位置が注目辺の中点(第8辺の中点)を越える位置となる場合には、注目辺の中点の位置をアンカーポイントとする。更に、最終辺の直前の辺(第7辺)に、第1〜第3の条件全てを適用する。第1〜第3の条件のいずれも満たされない場合に、注目辺の2辺後、即ち、最終辺の長さ(第6辺の長さ、以下、|VM1|とする)に所定の係数αを乗じた長さα|VM1|だけ注目辺の終点から始点方向に離れた注目辺上の位置をアンカーポイントとする。ここで、本実施形態においては、係数αを「1」とする。但し、その中点が、既にアンカーポイントとされている場合には、重複してアンカーポイントを設定しない。
次に、ステップS352において、最終辺の直前の辺を注目ベクトルとして、第1〜第3の条件全てを適用する。その場合に、第2の条件が満たされるのであれば、注目ベクトルを主接線線分とし、注目辺の始点、即ち、ベクトル列の最終点から2点前の点をアンカーポイントとする。一方、第2の条件が満たされず、第1又は第3の条件の少なくともいずれか一方の条件が満たされるのであれば、注目ベクトルである最終辺の直前の辺を主接線線分とする。
ステップS353において、終端点の直前の点と終端点とで定められる最終辺(第6辺)となる線分が注目ベクトルとされる。最終辺の後のベクトルは存在しないので、第1の条件を適用することができない。従って、ステップS353においては、第2及び第3の条件を適用する。その場合に、第2の条件が満たされるのであれば、注目ベクトルである最終辺を主接線線分とし、注目辺の始点、即ち、ベクトル列の最終点の直前の点をアンカーポイントとする。一方、第2の条件が満たされず、第3の条件が満たされるのであれば、注目辺の2辺前(第8辺の長さ、以下、|VM3|とする)に、所定の係数αを乗じた長さα|VM3|だけ注目辺の始点から離れた注目辺上(第6辺上)の位置をアンカーポイントとする。ここで、本実施形態においては、係数αは、「1」である。但し、所定の係数αを乗じた長さα|VM3|だけ注目辺の始点から離れた点が、注目辺の中点を越える位置となる場合には、注目辺の中点(第6辺の中点)の位置をアンカーポイントとする。ステップS354においては、ベクトル列の終端点をアンカーポイントとする。
図34及び図35に示すフローチャートによりアンカーポイントが定められると、アンカーポイント間に存在する輪郭点を1つのグループとし、従来の方法によって、アンカーポイント間が補間され関数近似される。
図34及び図35において、無条件にアンカーポイントとして定められた始端点及び終端点における接線方向は、端点近傍の線分の長さ及び向きに応じて決定されても良い。図36は、始端点又は終端点における接線方向の決定について説明する図である。図36の(a)に示すように、始端点、又は、終端点の属する線分が、例えば、5画素長以上で、十分に長い場合には、その線分の向きに接線方向を定めても良い。また、他の場合に、端点からその近傍の数辺までの長さと向きの組み合わせに応じて、パターン分けしてルール化しても良い。例えば、図36の(b)に示すように、端点から3点離れた点と端点とを結ぶ向きに接線方向を定めても良いし、図36の(c)に示すように、端点から2点離れた点と端点とを結ぶ向きに接線方向を定めても良い。また、図36の(d)に示すように、端点から3辺離れた辺の中点と端点とを結ぶ向きに接線方向を定めても良いし、図26の(a)〜(c)を適宜、選択できるように構成されても良い。
図33に示す処理の処理結果は、例えば、図28に示すような形式で出力されても良い。その場合に、各輪郭点の輪郭点情報に、アンカーポイントであるか否かの情報が含まれていても良い。
以上のように、本実施形態においては、非周回型のベクトル列に対して平滑化処理を行う場合に、始端点を含む始端点区間と終端点を含む終端点区間とにおいて、アンカーポイントを決定する手順を定めている。その結果、始端点と終端点とを結ぶ新たなベクトルを生成し、非周回型のベクトル列を周回型とする必要がないので、本実施形態において、処理工程や回路規模を増大させることなく、平滑化処理を行うことができる。
本実施形態において、図28、図30に示したデータ形式は、一例にすぎず、これに限らない。例えば、平滑化済ベクトルは、SVG形式のベクトル表現によって出力されても良い。また、各ベクトル列中の輪郭点数のみが纏められて、輪郭点数テーブル部と各ベクトル列中の各ベクトルのデータ部とが、分離されていても良い。即ち、図28の輪郭線中の総点数の部分のみ第1番目の輪郭から、例えば、第a番目の輪郭まで纏められ、その後に、第1番目の輪郭から第a番目の輪郭までの輪郭点データが纏められた構成とされても良い。更に、図30の(a)に示す閉ループマーカは、始端点又は終端点が存在するベクトル列として区別がつく形式であれば、他の方法が用いられても良い。
以上のように、本発明によれば、図形の輪郭を構成する線のみを、太さや、面積といった概念に意味をもたせずに、直線、開曲線、閉曲線等、又は、線の集まりとしてベクトル抽出することができる。また、本発明は、例えば、始端点と終端点との間に新たなベクトルを挿入して閉ループとし、接線線分を抽出しアンカーポイントを定める手法とは異なり、ループ状に構成されていない輪郭ベクトル列に対して、直接適用できる手法である。従って、本発明においては、例えば、平滑化のための新たなベクトルを生成する等の処理はされていないので、本発明によって、処理時間や回路規模が増大してしまうことは、特に問題とされない。
本発明には、プログラム(画像処理プログラム)コードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。更に、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた場合についても、本発明は適用される。その場合、書き込まれたプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。
例えば、ホスト及び端末の機能を実現するソフトウェアのプログラムコードを記憶した記憶媒体をシステム又は装置に供給し、システム又は装置のコンピュータ(CPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行しても良い。その場合、記憶媒体から読み出されたプログラムコード自体が上記各実施の形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体により本発明が構成される。プログラムコードを供給するための記憶媒体としては、ROM、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード等が用いられても良い。また、読み出されたプログラムコードが実行されて、本実施形態が実現されるだけでなく、プログラムコードの指示に基づきコンピュータ上で稼動しているOS等が実際の処理の一部又は全部を行い、その処理によって実施形態が実現されても良い。更に、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された拡張機能ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる場合も考えられる。そのような場合に、プログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって本実施形態が実現されても良い。