(57)【要約】      （修正有）【課題】複数のベクタペアによって構成される文字輪郭のサイズ変更やウェイトなどが変換された場合であっても、文字ストロークを正確に判定する。【解決手段】第１のベクタペアに含まれる、延長線方向の最大座標値と直交方向の最大座標値とがなす第１の端点と、第２のベクタペアに含まれる、延長線上またはその延長線に平行な線上の最小座標値と直交方向の最小座標値とがなす第２の端点とを結んだ直線と、第１のベクタペアに含まれる、延長線方向の最大座標値と直交方向の最小座標値とがなす第３の端点と、第２のベクタペアに含まれる、延長線上またはその延長線に平行な線上の最小座標値と直交方向の最大座標値とがなす第４の端点とを結んだ直線との交点を求め、その交点が、第１のベクタペアと第２のベクタペアとが含まれる文字輪郭の領域内に含まれる場合に、第１のベクタペアと第２のベクタペアとが同一ストロークを構成すると判定する。【選択図】図１２
2012103431.tif 000002
【特許請求の範囲】
【請求項１】
判定対象の文字ストロークを構成する個々のベクタペアを処理対象として、
第１のベクタペアを構成する各ベクタの延長線上、またはその延長線の直交方向に該延長線から所定長さ離れた範囲内に該ベクタと同方向の第２のベクタペアが存在する場合に、前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最大座標値とがなす第１の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最小座標値とがなす第２の端点とを結んだ直線と、
前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最小座標値とがなす第３の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最大座標値とがなす第４の端点とを結んだ直線との交点を求め、
その交点が、前記判定対象の文字を構成する輪郭のうち、前記第１のベクタペアと前記第２のベクタペアとが含まれる輪郭の領域内に含まれる場合に、前記第１のベクタペアと前記第２のベクタペアとが同一ストロークを構成すると判定する文字ストローク判定手段を備える
ことを特徴とする文字ストローク判定装置。
【請求項２】
前記判定対象の文字の輪郭を構成するベクタのうち、検出対象方向の注目ベクタに関して、その注目ベクタが属する輪郭と同じ輪郭、またはその輪郭と包含関係にある輪郭に属しており、且つ該注目ベクタを基準として前記検出対象方向に垂直な方向に所定のしきい値の範囲内で離間した位置にある他のベクタを検出し、
前記注目ベクタと前記他のベクタとが、前記検出対象方向において互いに反対方向である場合に、それら２つのベクタを、前記文字ストローク判定手段が処理対象とすべきベクタペアであると判定するベクタペア検出手段を更に備える
ことを特徴とする請求項１記載の文字ストローク判定装置。
【請求項３】
請求項１または請求項２記載の文字ストローク判定装置と、
前記文字ストローク判定装置によって同一ストロークをなすと判定された複数のベクタペアの座標情報を補正する補正手段とを備える
ことを特徴とする文字輪郭補正装置。
【請求項４】
前記判定対象の文字のアウトラインフォント情報に基づいて、その文字をなす輪郭の包含関係を表す構造情報を生成する構造情報生成手段を更に備える
ことを特徴とする請求項３記載の文字輪郭補正装置。
【請求項５】
請求項３または請求項４記載の文字輪郭補正装置と、
前記文字輪郭補正装置による補正結果を反映した文字画像を出力する出力手段とを備える
ことを特徴とする文字出力装置。
【請求項６】
判定対象の文字ストロークを構成する個々のベクタペアを対象として、
第１のベクタペアを構成する各ベクタの延長線上、またはその延長線の直交方向に該延長線から所定長さ離れた範囲内に該ベクタと同方向の第２のベクタペアが存在する場合に、前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最大座標値とがなす第１の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最小座標値とがなす第２の端点とを結んだ第１の直線を求め、
前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最小座標値とがなす第３の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最大座標値とがなす第４の端点とを結んだ第２の直線を求め、
前記第１及び第２の直線の交点を求め、そして
前記交点が、前記判定対象の文字を構成する輪郭のうち、前記第１のベクタペアと前記第２のベクタペアとが含まれる輪郭の領域内に含まれる場合に、前記第１のベクタペアと前記第２のベクタペアとが同一ストロークを構成すると判定する
ことを特徴とする文字ストローク判定方法。
【請求項７】
前記判定対象の文字の輪郭を構成するベクタのうち、検出対象方向の注目ベクタに関して、その注目ベクタが属する輪郭と同じ輪郭、またはその輪郭と包含関係にある輪郭に属しており、且つ該注目ベクタを基準として前記検出対象方向に垂直な方向に所定のしきい値の範囲内で離間した位置にある他のベクタを検出し、
前記注目ベクタと前記他のベクタとが、前記検出対象方向において互いに反対方向である場合に、それら２つのベクタを、前記対象とすべきベクタペアと判定する
ことを特徴とする請求項６記載の文字ストローク判定方法。
【請求項８】
文字ストローク判定装置の動作制御のためのコンピュータ・プログラムであって、そのコンピュータ・プログラムにより、
判定対象の文字ストロークを構成する個々のベクタペアを処理対象として、
第１のベクタペアを構成する各ベクタの延長線上、またはその延長線の直交方向に該延長線から所定長さ離れた範囲内に該ベクタと同方向の第２のベクタペアが存在する場合に、前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最大座標値とがなす第１の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最小座標値とがなす第２の端点とを結んだ直線と、
前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最小座標値とがなす第３の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最大座標値とがなす第４の端点とを結んだ直線との交点を求め、
その交点が、前記判定対象の文字を構成する輪郭のうち、前記第１のベクタペアと前記第２のベクタペアとが含まれる輪郭の領域内に含まれる場合に、前記第１のベクタペアと前記第２のベクタペアとが同一ストロークを構成すると判定する文字ストローク判定機能を、コンピュータに実現させる
ことを特徴とするコンピュータ・プログラム。
【請求項９】
前記判定対象の文字の輪郭を構成するベクタのうち、検出対象方向の注目ベクタに関して、その注目ベクタが属する輪郭と同じ輪郭、またはその輪郭と包含関係にある輪郭に属しており、且つ該注目ベクタを基準として前記検出対象方向に垂直な方向に所定のしきい値の範囲内で離間した位置にある他のベクタを検出し、
前記注目ベクタと前記他のベクタとが、前記検出対象方向において互いに反対方向である場合に、それら２つのベクタを、前記文字ストローク判定手段が処理対象とすべきベクタペアであると判定するベクタペア検出機能を、コンピュータに更に実現させる
ことを特徴とする請求項８記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字輪郭を補正する技術分野に関する。特に本発明は、例えばプリンタ等の文字出力装置におけるアウトラインフォントの文字輪郭を補正する際に適用可能な文字画像処理の技術分野に関する。
【背景技術】
【０００２】
アウトラインフォントを出力する装置において、文字は、その文字の輪郭を構成するベクタ（ベクトル）の集合として保持される。個々のベクタは、文字形状の外側（外形形状）をなぞるような態様で連続する。このため、係る連続するベクタは、文字の運筆（ストローク）を示すストローク情報を直接的には反映しなくなる。
【０００３】
図１５は、アウトラインフォントを出力する一般的な装置における文字サイズの変更（拡大、縮小）やウェイト（書体の太さ）などの変換を行った際に発生するストローク幅のばらつきを説明する図である。
【０００４】
まず、図１５（ａ）に例示する文字「三」に関してウェイト等の変換処理を施した場合を考える。この場合、この漢字を構成するストロークは互いに重ならないため、線幅情報に基づいて検出されたベクタペアは、１つのストロークを構成するベクタペアとして容易に検出できる。従って、図１５（ａ）の場合、個々のストロークは、図１５（ａ）下側に例示するように、変換処理後も３つの独立したストローク（水平ストローク）として適切に処理される。
【０００５】
一方、図１５（ｂ）に例示する文字「亜」の場合を考える。この場合、同図に破線で囲った１つのストロークは、垂直方向の他のベクタが交差している。このため、文字サイズの変更やウェイトなどを変換する画像処理を行った結果としては、別々のペア（水平方向の３つの独立したベクタペア）として検出され、１つのストロークとしては検出されない。その結果、係る画像処理後の当該３つの独立したベクタペア（この場合は３つの水平ストローク）は、図１５（ｂ）下側の破線内に例示する処理結果の如く、ストローク幅がバラバラになってしまう。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０５−１２７６５０公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
不揃いのストローク幅を補正するには、ストロークを構成する水平線（水平方向）または垂直線（垂直方向）のベクタペアを検出すればよい。ストローク幅は、即ちそのストロークを構成するベクタペアをなす各ベクタ間の距離に等しい。このことから、この距離が適正になるように当該各ベクタの座標位置を調整すれば、適正なストローク幅を得ることができる。図１５（ａ）に例示したように、一つのストロークが一つのベクタペアによって構成されている場合、ベクタペアの検出は容易である。しかしながら、図１５（ｂ）に例示した如く一つのストロークが複数のベクタペアから構成されている場合は、個々のベクタペアが共通（同一）のストロークに属しているかどうかを判定することは困難である。
【０００８】
特開平０５−１２７６５０公報は、文字の輪郭を拡大・縮小したときに線幅が変更されないようにストロークを認識する方法を提案している。当該方法によれば、水平方向及び垂直方向のベクタペアを検出し、その検出結果を利用して複数のベクタペアを一つのストロークとして検出できる。しかし、同公報に提案されている技術は、以下に説明するように、同一ストロークとして検出できない場合がある。
【０００９】
図１６は、関連技術におけるストローク判定の問題点を説明する図である。図１６に例示するように、他のベクタ（垂直線ベクタペア）と交差することによって分断された水平線ベクタペア１乃至３が存在しており、且つ、これらのベクタペアの間において、２つ以上のベクタペアで互いに共通する同一の線分がない場合を考える。この場合、同公報に提案されている技術によれば、係る３つのベクタペアは本来は一つのストロークとして検出されるべきにも関わらず、ベクタペア２とベクタペア３とは互いに共通する同一の線分を含んでいるため同一ストロークとして判定されるのに対して、ベクタペア１は他のベクタペア（ベクタペア２、ベクタペア３）と共通する同一の線分を含まない。このため、これら３つのベクタペアは、図１６に例示する如くストローク１とストローク２という異なるストロークとして検出されてしまうという課題がある。
【００１０】
そこで、本発明は、複数のベクタペアによって構成される文字輪郭のサイズ変更やウェイト（書体の太さ）などが変換された場合であっても、文字ストロークを正確に判定する文字ストローク判定装置等の提供を主たる目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成すべく、本発明に係る文字ストローク判定装置は、以下の構成を備えることを特徴とする。
【００１２】
即ち、判定対象の文字ストロークを構成する個々のベクタペアを処理対象として、
第１のベクタペアを構成する各ベクタの延長線上、またはその延長線の直交方向に該延長線から所定長さ離れた範囲内に該ベクタと同方向の第２のベクタペアが存在する場合に、前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最大座標値とがなす第１の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最小座標値とがなす第２の端点とを結んだ直線と、
前記第１のベクタペアに含まれるところの、前記延長線方向の最大座標値と前記直交方向の最小座標値とがなす第３の端点と、前記第２のベクタペアに含まれるところの、前記延長線上またはその延長線に平行な線上の最小座標値と前記直交方向の最大座標値とがなす第４の端点とを結んだ直線との交点を求め、
その交点が、前記判定対象の文字を構成する輪郭のうち、前記第１のベクタペアと前記第２のベクタペアとが含まれる輪郭の領域内に含まれる場合に、前記第１のベクタペアと前記第２のベクタペアとが同一ストロークを構成すると判定する文字ストローク判定手段を備えることを特徴とする。
【００１３】
また例えば、前記文字ストローク判定装置は、
前記判定対象の文字の輪郭を構成するベクタのうち、検出対象方向の注目ベクタに関して、その注目ベクタが属する輪郭と同じ輪郭、またはその輪郭と包含関係にある輪郭に属しており、且つ該注目ベクタを基準として前記検出対象方向に垂直な方向に所定のしきい値の範囲内で離間した位置にある他のベクタを検出し、
前記注目ベクタと前記他のベクタとが、前記検出対象方向において互いに反対方向である場合に、それら２つのベクタを、前記文字ストローク判定手段が処理対象とすべきベクタペアであると判定するベクタペア検出手段を更に備えるとよい。
【００１４】
尚、同目的は、上記の各構成の文字ストローク判定装置に対応する文字ストローク判定方法によっても達成される。
【００１５】
また、同目的は、上記の各構成の文字ストローク判定装置を含む文字輪郭補正装置、及びその文字輪郭補正装置を備える文字出力装置によっても達成される。
【００１６】
また、同目的は、上記の各構成を有する文字ストローク判定装置、並びに対応する方法を、コンピュータによって実現するコンピュータ・プログラム、及びそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００１７】
上記の本発明によれば、複数のベクタペアによって構成される文字輪郭のサイズ変更やウェイト（書体の太さ）などが変換された場合であっても、文字ストロークを正確に判定する文字ストローク判定装置等の提供が実現する。
【図面の簡単な説明】
【００１８】
【図１】本発明の模範的な第１の実施形態に係る文字ストローク判定装置の構成を示すブロック図である。
【図２】本発明の模範的な第２の実施形態に係る文字輪郭補正装置の構成を示すブロック図である。
【図３】ツリー構造生成部１１によって生成される文字のツリー構造を概念的に説明する図である。
【図４】ツリー構造生成部１１によって生成される文字のツリー構造を概念的に説明する図である。
【図５】第２の実施形態に係るツリー構造生成処理による輪郭の包含関係の判断例を具体的に説明する図である。
【図６】第２の実施形態に係るツリー構造生成処理による輪郭の包含関係の判断例を具体的に説明する図である。
【図７】本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００のツリー構造生成部１２が行うツリー構造生成処理を示すフローチャートである。
【図８】本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００の水平・垂直線検出部１２が行う水平・垂直線検出処理を示すフローチャートである。
【図９】本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００のベクタペア検出部１３が行うベクタペア検出処理を示すフローチャートである。
【図１０】本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００のストローク判定部１４が行うストローク判定処理を示すフローチャートである。
【図１１】本発明の第１及び第２の実施形態に係る装置を実現可能なコンピュータのハードウェア構成を例示的に説明する図である。
【図１２】本発明の模範的な第１の実施形態に係る文字ストローク判定装置の判定方法を例示的に説明する図である。
【図１３】本発明の模範的な第１の実施形態に係る文字ストローク判定装置による同一ストロークの判定原理を説明する図である。
【図１４】本発明の模範的な第４の実施形態に係る文字出力装置の構成を例示するブロック図である。
【図１５】アウトラインフォントを出力する一般的な装置における文字サイズの変更（拡大、縮小）やウェイト（書体の太さ）などの変換を行った際に発生するストローク幅のばらつきを説明する図である。
【図１６】関連技術におけるストローク判定の問題点を説明する図である。
【発明を実施するための形態】
【００１９】
次に、本発明を実施する形態について図面を参照して詳細に説明する。
【００２０】
＜第１の実施形態＞
図１は、本発明の模範的な第１の実施形態に係る文字ストローク判定装置の構成を示すブロック図である。図１に示す文字ストローク判定装置１００は、ストローク判定部１０１を備える。ストローク判定部１０１は、注目ベクタペアと検出対象ベクタペアとに基づいて、その注目ベクタペアと、検出対象ベクタペアとが同一ストロークをなすか否かを判定し、その判定結果（ストローク判定結果）を出力する。
【００２１】
以下、図１２及び図１３を参照して、文字ストローク判定装置１００（ストローク判定部１０１）の動作を説明する。ここでは、一例として、図１２及び図１３に示す如く水平方向（横方向）のベクタペア（水平線ベクタペア）を基に横方向のストロークを判定する場合について説明する。但し、本実施形態に係る文字ストローク判定装置１００は、同様な処理手順により、垂直方向（縦方向）のベクタペア（垂直線ベクタペア）を基に縦方向のストロークを判定することもできる（尚、重複する説明は省略する）。
【００２２】
図１２は、本発明の模範的な第１の実施形態に係る文字ストローク判定装置の判定方法を例示的に説明する図である。図１３は、本発明の模範的な第１の実施形態に係る文字ストローク判定装置による同一ストロークの判定原理を説明する図である。
【００２３】
文字ストローク判定装置１００は、判定対象の文字ストロークを構成する個々のベクタペアを対象として、それらのベクタペアが同一ストロークを構成するか否かを以下に説明する手順によって判定する。
【００２４】
即ち、文字ストローク判定装置１００は、図１２（ａ）及び図１２（ｂ）に示すように、複数の水平線ベクタペアのうち、注目ベクタペアｉ（第１のベクタペア）を構成する各ベクタの延長線上（ｘ軸方向）、またはその延長線の直交方向（ｙ軸方向）に、その延長線から所定長さ離れたしきい値の範囲内に、該ベクタと同方向の水平線ベクタペアが存在するか否かを判断する。この判断に合致する水平線ベクタペアが存在する場合、文字ストローク判定装置１００は、当該水平線ベクタペアを、当該注目ベクタペアｉに対する検出対象である特定の水平線ベクタペア（検出対象ベクタペアｊ：第２のベクタペア）と判断する。ここで、ｉ及びｊは自然数である（以下の説明に於いて同様）。
【００２５】
次に、文字ストローク判定装置１００は、注目ベクタペアｉに含まれるところの、当該延長線方向の最大座標値と当該直交方向の最大座標値とがなす第１の端点（Ｔ１）を検出する。そして、文字ストローク判定装置１００は、検出対象ベクタペアｊに含まれるところの、当該延長線上またはその延長線に平行な線上の最小座標値と当該直交方向の最小座標値とがなす第２の端点（Ｔ２）を検出する。
【００２６】
更に、文字ストローク判定装置１００は、当該注目ベクタペアｉに含まれるところの、当該延長線方向の最大座標値と当該直交方向の最小座標値とがなす第３の端点（Ｔ３）を検出する。そして、文字ストローク判定装置１００は、当該検出対象ベクタペアｊに含まれるところの、当該延長線上またはその延長線に平行な線上の最小座標値と当該直交方向の最大座標値とがなす第４の端点（Ｔ４）を検出する。
【００２７】
そして、文字ストローク判定装置１００は、第１の端点（Ｔ１）と第２の端点（Ｔ２）とを結んだ直線と、第３の端点（Ｔ３）と第４の端点（Ｔ４）とを結んだ直線との交点（Ｑ）を求める。文字ストローク判定装置１００は、その交点（Ｑ）が、当該判定対象の文字を構成する輪郭のうち、当該注目ベクタペアｉと当該検出対象ベクタペアｊとが含まれる輪郭の領域内に含まれるか否かを判断する。
【００２８】
図１２（ａ）に示す例の場合、注目ベクタペアｉと検出対象ベクタペアｊとは共に輪郭ＯＬ１に含まれ、その輪郭ＯＬ１の領域内に交点（Ｑ）が含まれる。従ってこの場合、文字ストローク判定装置１００は、注目ベクタペアｉと検出対象ベクタペアｊとが同一ストロークを構成すると判定する。これに対して、図１２（ｂ）に示す例の場合、注目ベクタペアｉと検出対象ベクタペアｊとは共に輪郭ＯＬ３に含まれるものの、その輪郭ＯＬ３の領域内に交点（Ｑ）は含まれない。従ってこの場合、文字ストローク判定装置１００は、注目ベクタペアｉと検出対象ベクタペアｊとは同一ストロークを構成していないと判定する。
【００２９】
そして文字ストローク判定装置１００は、ある注目ベクタペアｉを対象として、全ての検出対象ベクタペアｊに同様な判定を行う。その結果、文字ストローク判定装置１００は、当該注目ベクタペアｉに関して最大長さの同一ストロークを検出する。
【００３０】
即ち、文字ストローク判定装置１００は、図１３に例示するように、水平線（水平方向）のペアを複数検出した場合に、個々のペアの垂直方向の幅（ストローク幅）が異なっていても、所定のしきい値の範囲内であれば、それらの水平線のペア（ペア１乃至３）を、１つのストローク（ストローク１）として検出することができる。
【００３１】
以上説明した本実施形態に係る文字ストローク判定装置１００によれば、複数のベクタペアによって構成される文字輪郭のサイズ変更やウェイト（書体の太さ）などが変換された場合であっても、文字ストロークを正確に判定することができる。即ち、本実施形態に係る文字ストローク判定装置１００においては、注目ベクタペアｉと検出対象ベクタペアｊとの間において、ストローク幅（上述した例では縦方向の長さ）にばらつきがあっても、所定のしきい値の範囲内であれば、係る注目ベクタペアｉと検出対象ベクタペアｊとを同一のストロークと判定することができる。
【００３２】
＜第２の実施形態＞
次に、上述した第１の実施形態に係る文字ストローク判定装置１００を基本とする第２の実施形態に係る文字輪郭補正装置１０００について説明する。
【００３３】
図２は、本発明の模範的な第２の実施形態に係る文字輪郭補正装置の構成を示すブロック図である。文字輪郭補正装置１０００は、アウトラインデータのツリー構造生成部１１、水平・垂直線検出部１２、ベクタペア検出部１３、ストローク判定部１４、及び輪郭座標演算部１５を備える。本実施形態において、水平・垂直線検出部１２、ベクタペア検出部１３、及びストローク判定部１４は、ツリー構造生成部１１によって生成されたツリー構造に従って、輪郭単位で処理を行う。
【００３４】
尚、アウトラインデータを基に輪郭を検出する手順自体は、現在では一般的な手法を採用できるので、本実施形態における詳細な説明は省略する。
【００３５】
アウトラインデータのツリー構造生成部１１は、外部より取得したある文字に関するアウトラインフォントデータ（アウトラインフォント情報）に基づいて、その文字を構成するところの、輪郭を表すツリー構造を生成する。ここで、アウトラインフォントデータは、当該文字の輪郭（アウトライン）を構成するベクタ（ベクトル）の集合である。そしてツリー構造は、対象となる文字を構成する各輪郭の包含関係を表す。
【００３６】
図３及び図４は、ツリー構造生成部１１によって生成される文字のツリー構造を概念的に説明する図である。
【００３７】
例えば、文字「亜」の場合、その漢字の輪郭を表すベクタ（アウトラインフォントデータ）は、図３（ａ）に示すように、最外郭の輪郭を表す輪郭Ａと、その内部に包含（内包）される輪郭Ｂ，Ｃ，Ｄ，Ｅ，Ｆとによって構成される。そしてこの場合、ツリー構造生成部１１は、文字「亜」の輪郭のツリー構造として、図３（ｂ）に概念的に示すように、輪郭Ａを親とし、輪郭Ｂ，Ｃ，Ｄ，Ｅ，Ｆをその親の子として関連付けしたツリー構造を生成する。
【００３８】
例えば、文字「茴」の場合、その漢字の輪郭を表すベクタ（アウトラインフォントデータ）は、図４（ａ）に示すように、離間配置された２つの輪郭H及び輪郭Ｉと、その輪郭Ｉに包含される輪郭J、K、及びLとによって構成される。そしてこの場合、ツリー構造生成部１１は、文字「茴」の輪郭のツリー構造として、図４（ｂ）に概念的に示すツリー構造を生成する。即ち、係るツリー構造において、輪郭Hは、その内部に輪郭を含まないので子は無い。輪郭Ｉは、輪郭J、K、及びLを子として有する。但し、輪郭Jは輪郭K、及びLを子として有し、輪郭Kは輪郭Lを子として有する。この関係から、文字「茴」に関するツリー構造において、輪郭Ｉ、J、K、及びLは直列に並ぶ。また、輪郭Hと輪郭Ｉとは、互いに独立に存在しているため並列的な関係である。このため、輪郭Hと輪郭Ｉとは、文字「茴」に関するツリー構造において、輪郭無しという親を持つ。
【００３９】
尚、ツリー構造生成部１１の動作については、図５乃至図７を参照して後述する。
【００４０】
水平・垂直線検出部１２は、ツリー構造生成部１１から入手した輪郭情報とそのツリー構造とに基づいて、注目する文字（補正対象の文字）を構成する水平線（横線）ベクタ及び垂直線（縦線）ベクタを検出する。尚、水平・垂直線検出部１２の動作については、図８を参照して後述する。
【００４１】
ベクタペア検出部１３は、水平・垂直線検出部１２によって検出された水平線ベクタ及び垂直線ベクタを対象として、ペア（組）をなすベクタを検出する。尚、ベクタペア検出部１３の動作については、図９を参照して後述する。
【００４２】
ストローク判定部１４は、第１の実施形態において上述した文字ストローク判定装置１００（ストローク判定部１０１）と同様な処理を行う。即ち、ストローク判定部１４は、ベクタペア検出部１３によって検出された個々のベクタペアのうち、互いに隣接した位置に存在し、且つ第１の実施形態において上述した条件を満足するベクタペアを同一ストロークと判定する。尚、ストローク判定部１４の動作については、図１０を参照して後述する。
【００４３】
そして輪郭座標演算部（輪郭座標補正部）１５は、ストローク判定部１４による判定結果に基づいて、同一ストロークと判定されたストロークを構成する複数のベクタペアの座標情報（この場合、ｙ座標値）を均一な値に補正することにより、それらベクタペアがなす輪郭の座標を補正する。これにより、輪郭座標演算部１５は、文字輪郭のサイズ変更（拡大、縮小）やウェイトなどが変換された場合であっても、同一ストロークと判定されたストロークを構成する複数のベクタペア間において、ばらつきが生じたストローク幅を補正できるので、変更後の輪郭が不揃いになることを防止することができる。
【００４４】
次に、上述したアウトラインデータのツリー構造生成部１１、水平・垂直線検出部１２、ベクタペア検出部１３、及びストローク判定部１４の動作の詳細について図７乃至図１０に示すフローチャートを参照して詳述する。
【００４５】
（ツリー構造生成部１１）
図７は、本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００のツリー構造生成部１１が行うツリー構造生成処理を示すフローチャートである。
【００４６】
ツリー構造生成部１１は、外部から処理対象（輪郭補正対象）の文字に関してアウトラインデータと当該文字を構成する個々の輪郭（総輪郭数Ｃ）を表す情報（ｘ−ｙ座標値）とを入手し、ツリー構造（輪郭ツリー）の生成を開始すべく、輪郭番号ｉ及びｊを初期化する（ステップＳ１１）。
【００４７】
ツリー構造生成部１１は、輪郭ｉが輪郭ツリーに登録されているか調べ（ステップＳ１２）、登録されていない場合（ステップＳ１２にてＮＯ）は処理をステップＳ１３に進め、登録されている場合（ステップＳ１２にてＹＥＳ）は処理をステップＳ１９に進める。
【００４８】
ツリー構造生成部１１は、処理対象の文字に関して、輪郭ｉを構成する座標点（ｘ−ｙ座標値）のうち、最大の座標値及び最小の座標値（以下「ＢＢｏｘｉ」と表現する）を求める（ステップＳ１３）。次に、ツリー構造生成部１１は、処理対象の文字に関して、輪郭ｊを構成する座標点（ｘ−ｙ座標値）のうち、最大の座標値及び最小の座標値（以下「ＢＢｏｘｊ」と表現する）とを求める（ステップＳ１４）。本実施形態において、ＢＢｏｘは、輪郭の外接四角形（Bounding Box）を表す。ＢＢｏｘn（ｎは自然数）は、輪郭の番号を表す。
【００４９】
そしてツリー構造生成部１１は、ＢＢｏｘｊがＢＢｏｘｉに内包されているか否かを、それぞれの座標値に基づいて判断し（ステップＳ１５）、内包されていない場合（ステップＳ１５にてＮＯ）には処理をステップＳ１７に進める。一方、ＢＢｏｘｊがＢＢｏｘｉに内包されている場合（ステップＳ１５にてＹＥＳ）、ツリー構造生成部１１は、輪郭ツリーに輪郭ｊを登録する（ステップＳ１６）。
【００５０】
ツリー構造生成部１１は、輪郭番号ｊが、ステップＳ１１にて入手した処理対象の文字を構成する輪郭数Ｃ以下であるかを判断し（ステップＳ１７）、輪郭番号ｊが輪郭数（上限値）Ｃより小さい場合（ステップＳ１７にてＹＥＳ）はｊに１加算（ステップＳ２０）してから処理をステップＳ１４に戻す。これにより、ツリー構造生成部１１は、ステップＳ１４からステップＳ１７までの処理を、輪郭数の上限数Ｃまで繰り返し行う。一方、現在注目している輪郭番号ｉの輪郭に対して全ての輪郭について包含関係を調べ終わった場合（ｊ＝Ｃ：ステップＳ１７にてＮＯ）、ツリー構造生成部１１は、輪郭ツリーに輪郭ｉを登録する（ステップＳ１８）。
【００５１】
そしてツリー構造生成部１１は、ステップＳ１９において、上述した一連の処理を、輪郭ツリーに登録されていない輪郭ｉについて輪郭の上限数Ｃまで行ったかを判断し、ｉ＜Ｃ（ステップＳ１９にてＹＥＳ）の場合はｉに１加算（ステップＳ２１）してから処理をステップＳ１２に戻し、ｉ＝Ｃの場合（ステップＳ１９にてＮＯ）は処理を終了する。
【００５２】
ここで、輪郭の包含関係の判断方法について具体例を参照して説明する。図５及び図６は、第２の実施形態に係るツリー構造生成処理による輪郭の包含関係の判断例を具体的に説明する図である。
【００５３】
図５（ａ）は、文字「茴」に関して、ＢＢｏｘｉとＢＢｏｘｊとが包含関係を有しない場合を表す。即ち、ＢＢｏｘ１の４つの頂点全ては、ＢＢｏｘ２の領域に含まれていない。このため、ＢＢｏｘ２は、ＢＢｏｘ１を包含していない。そして、ＢＢｏｘ２の４つの頂点全ては、ＢＢｏｘ１の領域に含まれていない。このため、ＢＢｏｘ１は、ＢＢｏｘ２を包含していない。従って、ＢＢｏｘ１とＢＢｏｘ２とは、互いに包含関係にはなく、並列な関係である。
【００５４】
次に図５（ｂ）は、文字「茴」に関して、ＢＢｏｘｉとＢＢｏｘｊとが包含関係を有している場合を表す。即ち、ＢＢｏｘ２の４つの頂点全ては、ＢＢｏｘ３の領域に含まれていない。このため、ＢＢｏｘ３は、ＢＢｏｘ２を包含していない。そして、ＢＢｏｘ３の４つの頂点全ては、ＢＢｏｘ２の領域に含まれる。このため、ＢＢｏｘ２は、ＢＢｏｘ３を包含している。
【００５５】
即ち、ＢＢｏｘｉがＢＢｏｘｊを包含する条件は、ＢＢｏｘｉの領域がＢＢｏｘｊの全ての頂点を含む場合だけである。一方、ＢＢｏｘｊがＢＢｏｘｉを包含する条件は、ＢＢｏｘｊの領域がＢＢｏｘｉの全ての頂点を含む場合だけである。
【００５６】
次に、文字「宙」に関しての包含関係を示す図６の場合、ＢＢｏｘ１の４つの頂点全ては、ＢＢｏｘ２の領域に含まれていない。このため、ＢＢｏｘ２は、ＢＢｏｘ１を包含していない。但し、ＢＢｏｘ２の４つの頂点のうち、２つの頂点（ｐ１，ｐ２）は、ＢＢｏｘ１の領域に含まれる。一方、残る２つの頂点（ｐ３，ｐ４）は、ＢＢｏｘ１の領域に含まれない。このため、ＢＢｏｘ１は、ＢＢｏｘ２を包含していない。即ち、ＢＢｏｘ１とＢＢｏｘ２とは、互いに包含関係にはなく、並列な関係である。
【００５７】
尚、本実施形態におけるツリー構造生成処理は一例であって、対象とする文字に関して、その文字を構成する各輪郭の包含関係を調べると共に、ツリー構造（輪郭ツリー）を生成できれば何れの方法を採用してもよい。
【００５８】
（水平・垂直線検出部１２）
図８は、本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００の水平・垂直線検出部１２が行う水平・垂直線検出処理を示すフローチャートである。水平線・垂直線検出部１２（水平・垂直線検出処理）は、補正対象の文字輪郭を構成するベクタの中から、水平線ベクタまたは垂直線ベクタを検出する。ここでは、水平線ベクタを検出する場合を例に説明するが、垂直線ベクタを検出する場合についても同様な処理を行えばよい。
【００５９】
水平線・垂直線検出部１２は、水平線（垂直線）ベクタの検出を開始すべく、水平線ベクタの検出を開始する輪郭の端点である座標点（座標番号）ｉ及びｊを初期化する（ステップＳ５１）。
【００６０】
水平線・垂直線検出部１２は、注目座標ｊに隣接する座標（ｊ＋１）が端点であるか否かを判断し（ステップＳ５２）、端点である場合（ステップＳ５２にてＹＥＳ）には処理をステップＳ５３に進める。一方、水平線・垂直線検出部１２は、ステップＳ５２の判断にて座標（ｊ＋１）が端点でないと判断した場合（ステップＳ５２にてＮＯ）、注目座標が端点になるまでｊを移動する。
【００６１】
水平線・垂直線検出部１２は、注目座標ｊの座標値と、隣接する座標（ｊ＋１）の座標値との差分を算出することによって当該２つの座標を比較し（ステップＳ５３）、ｘ座標の差分が０以上且つｙ座標の差分が０の条件を満たすか否かを判断する（ステップＳ５４）。
【００６２】
水平線・垂直線検出部１２は、注目座標ｊのｘ座標と隣接する座標（ｊ−１）のｘ座標との大小関係を判断することにより、注目する水平線ベクタの向きを検出する（ステップＳ５５）。そして水平線・垂直線検出部１２は、注目する水平線ベクタの向きが右向きの場合（Ｘｊ≧Ｘ（ｊ−１）：ステップＳ５５にてＹＥＳ）は処理をステップＳ５６に進め、ベクタの向きが左向きの場合（Ｘｊ＞Ｘ（ｊ−１）：ステップＳ５５にてＮＯ）は処理をステップＳ５７に進める。
【００６３】
そして水平線・垂直線検出部１２は、注目する水平線ベクタに関して、水平線抽出テーブルＨＴに登録する情報を作成し（ステップＳ５６、ステップＳ５７）、生成した情報を水平線抽出テーブルＨＴに登録する（ステップＳ５８）。ここで、「水平線抽出テーブルＨＴ」は、注目する文字の輪郭をなすベクタのうち、水平線（横線）をなすベクタ（線分）だけを保持するテーブル（尚、垂直線ベクタが処理対象の場合、「垂直線抽出テーブルＶＴ」には、注目する文字の輪郭をなすベクタのうち、垂直線（縦線）をなすベクタ（線分）だけが保持される）。
【００６４】
即ち、水平線・垂直線検出部１２は、ステップＳ５６及びステップＳ５８において、当該注目する水平線ベクタに関して、水平線抽出テーブルＨＴに、ｘ座標値の最大値をＸｊ、最小値をＸ（ｊ＋１）、そして向きを右向きと設定する。或いは、水平線・垂直線検出部１２は、ステップＳ５７及びステップＳ５８において、当該注目する水平線ベクタに関して、水平線抽出テーブルＨＴに、ｘ座標値の最大値Ｘを（ｊ＋１）、最小値をＸｊ、そして向きを左向きと設定する。
【００６５】
水平線・垂直線検出部１２は、処理対象の文字の輪郭をなす全ての座標値（座標点数Ｎ）に対してステップＳ５２乃至ステップＳ５８の検出処理を行ったかを判断する（ステップＳ５９）。そして水平線・垂直線検出部１２は、未処理の座標値がある場合（ｊ≦Ｎ：ステップＳ５９にてＹＥＳ）はｊに１加算（ステップＳ６２）してから処理をステップＳ５２に戻し、未処理の座標値がない場合（ｊ＞Ｎ：ステップＳ５９にてＮＯ）には処理をステップＳ６０に進める。
【００６６】
そして、水平線・垂直線検出部１２は、処理対象の文字を構成する全ての輪郭（輪郭数Ｃ）に対してステップＳ５２乃至ステップＳ５９の検出処理を行ったかを判断する（ステップＳ６０）。そして水平線・垂直線検出部１２は、未処理の輪郭がある場合（ｉ≦Ｃ：ステップＳ６０にてＹＥＳ）はｉに１加算（ステップＳ６３）してから処理をステップＳ５２に戻し、未処理の輪郭がない場合（ｉ＞Ｃ：ステップＳ６０にてＮＯ）には処理をステップＳ６１に進める。
【００６７】
最後に水平線・垂直線検出部１２は、処理対象の文字を構成する全ての輪郭（輪郭数Ｃ）に対して上記の如く水平線ベクタを保持した水平線検出テーブルＨＴを、ｙ座標によってソートする（ステップＳ６１）。
【００６８】
尚、本実施形態における水平線・垂直線検出処理は一例であって、対象とする文字を構成する各輪郭に関して、水平線ベクタと垂直線ベクタとを検出できれば何れの方法を採用してもよい。
【００６９】
（ベクタペア検出部１３）
図９は、本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００のベクタペア検出部１３が行うベクタペア検出処理を示すフローチャートである。ベクタペア検出部１３（ベクタペア検出処理）は、上述した水平線・垂直線ベクタ検出部４３（水平線・垂直線ベクタ検出処理）によって生成された水平線検出テーブルＨＴ（垂直線ベクタテーブルＶＴ）を参照することにより、ペア（組）をなすベクタを検出をする。ここでは、水平線ベクタペアを検出する場合を例に説明するが、垂直線ベクタペアを検出する場合についても同様な処理を行えばよい。
【００７０】
ベクタペア検出部１３は、水平線ベクタペアの検出を開始すべく、水平線ベクタペアの検出を開始する水平線ベクタの番号（水平線番号）ｉ及びｊを初期化する（ステップＳ７１）。
【００７１】
ベクタペア検出部１３は、検出対象の水平線ベクタに関して、ペアをなす水平線ベクタの検出が終了しているかどうかを、ペア検出フラグのオン・オフ状態によって判断し（ステップＳ７２）、終了している場合（ステップＳ７２にてＹＥＳ：ペア検出フラグ＝オン）、処理をステップＳ７８に進め、終了していない場合（ステップＳ７２にてＮＯ：ペア検出フラグ＝オフ）、処理をステップＳ７３に進める。
【００７２】
ベクタペア検出部１３は、ペアの検出が終了していない水平線ベクタ（注目水平線、注目水平線ベクタ）ｉに関して、その注目水平線ベクタｉが属する輪郭と同じ輪郭、またはその輪郭と包含関係にある輪郭に属する水平線ベクタであって、且つｙ座標が当該注目水平線ベクタｉのｙ座標値を基準として、所定のしきい値（ストローク幅）の範囲内にある水平線ベクタｊを、当該水平線ベクタｉとベクタペアをなす候補として検出する（ステップＳ７３）。
【００７３】
そしてベクタペア検出部１３は、ステップＳ７３にて検出した水平線ベクタｊの向きが、当該注目水平線ベクタｉの向きと異なるか否かを、水平線・垂直線ベクタ検出部４３によって生成された水平線検出テーブルＨＴを参照することによって判定する（ステップＳ７４）。即ち、ベクタペア検出部１３は、当該水平線ベクタｉ及びｊの互いの向きが異なる場合（反対方向の場合）に、それら水平線ベクタｉ及びｊがペア（組）をなすベクタ（ベクタペア）であると判定し（ステップＳ７４にてＹＥＳ）、互いの向きが同じ場合（ステップＳ７４にてＮＯ）には処理をステップＳ７６に進める。
【００７４】
ベクタペア検出部１３は、ステップＳ７４にて互いの向きが異なると判定された当該水平線ベクタｉ及びｊを関連付けた状態で、ペアテーブルＰＴに登録する（ステップＳ７５）。ここで、「ペアテーブル（水平線)ペアテーブル）ＰＴ」は、水平線ベクタの組を保持するテーブルである。そして、ベクタペア検出部１３は、当該水平線ベクタｉに関して、ペア検出フラグをオンに設定する（ステップＳ７７）。
【００７５】
一方、ベクタペア検出部１３は、ステップＳ７４にて当該水平線ベクタｉ及びｊの互いの向きが同じと判定された場合、比較対象の水平線ベクタｊがまだあるかを判断し（ステップＳ７６）、まだ比較していない水平線ベクタがある場合（ｊ≦Ｌ：ステップＳ７６にてＹＥＳ）はｊに１加算（ステップＳ７９）してから処理をステップＳ７３に戻す。一方、ベクタペア検出部１３は、比較対象の水平線ベクタｊがもうない場合（ｊ＞Ｌ：ステップＳ７６にてＮＯ）は処理をステップＳ７８に進める。ここで、Ｌは、水平線検出テーブルＨＴに登録されている水平線数を表す。
【００７６】
そして、ベクタペア検出部１３は、上述したステップＳ７２からステップＳ７６までの処理を、全ての注目水平線ベクタｉに関して行ったか否かを判断し（ステップＳ７８）、まだ処理対象としていない水平線ベクタｉが存在する場合（ｊ≦Ｌ：ステップＳ７８にてＹＥＳ）はｉに１加算（ステップＳ８０）してから処理をステップＳ７２に戻す。一方、全ての水平線ベクタｉについて上記一連の処理を完了した場合（ｉ＞Ｌ：ステップＳ７８にてＮＯ）、ベクタペア検出部１３は処理を終了する。
【００７７】
（ストローク判定部１４）
図１０は、本発明の模範的な第２の実施形態に係る文字輪郭補正装置１０００のストローク判定部１４が行うストローク判定処理を示すフローチャートである。ここでは、水平線ベクタペアを対象として同一ストロークを検出する場合を例に説明するが、垂直線ベクタペアを対象として同一ストロークを検出する場合についても同様な処理を行えばよい。
【００７８】
ストローク判定部１４は、ベクタペア検出部１３によって検出された個々のベクタペアのうち、互いに隣接した位置に存在し、且つ第１の実施形態において上述した条件を満足するベクタペアを同一ストロークと判定すべく、ベクタペアの番号ｉ及びｊを初期化する（ステップＳ９１）。ここで、ベクタペア番号ｉのベクタペアは、図１２を参照して上述した説明における「注目ベクタペアｉ」であり、ベクタペア番号ｊのベクタペアは、「検出対象ベクタペアｊ」に相当する。
【００７９】
ストローク判定部１４は、ベクタペア検出部１３によって検出された全てのベクタペア（ベクタペア数Ｐ）に関してストローク判定を終了したか否かを判定し（ステップＳ９２）、終了していない場合（ステップＳ９２にてＮＯ）にはステップＳ９４に処理を進め、終了した場合（ステップＳ９２にてＹＥＳ）には処理をステップＳ９７に進める。
【００８０】
ストローク判定部１４は、ベクタペア番号ｉのベクタペアと、ベクタペア番号ｊのベクタペアとの交点Ｑを、図１２を参照して上述した如く求める（ステップＳ９３）。即ち、ステップＳ９３において、ストローク判定部１４は、複数の水平線ベクタペアのうち、注目ベクタペアｉ（第１のベクタペア）を構成する各ベクタの延長線上（ｘ軸方向）、またはその延長線の直交方向（ｙ軸方向）に、その延長線から所定長さ離れたしきい値の範囲内に、該ベクタと同方向の水平線ベクタペアが存在するか否かを判断する。
【００８１】
この判断に合致する水平線ベクタペアが存在する場合、ストローク判定部１４は、当該水平線ベクタペアを、当該注目ベクタペアｉに対する検出対象ベクタペアｊ：第２のベクタペア）と判断する。そしてストローク判定部１４は、注目ベクタペアｉの(最大ｘ座標値,最大ｙ座標値：図１２における端点Ｔ１)と、検出対象ベクタペアｊの(最小ｘ座標値,最小ｙ座標値：図１２における端点Ｔ２)とを結んだ直線を求める。次に、ストローク判定部１４は、注目ベクタペアｉの(最大ｘ座標値,最小ｙ座標値：図１２における端点Ｔ３)と、検出対象ベクタペアｊの(最小ｘ座標値,最大ｙ座標値：図１２における端点Ｔ４)とを結んだ直線を求める。そしてストローク判定部１４は、求めた当該２直線の交点Ｑを求める。平面上の２直線の交点を求める処理自体は現在では一般的な手順を採用することができるので、本実施形態における詳細な説明は省略する。
【００８２】
次に、ストローク判定部１４は、注目ベクタペアｉと、検出対象ベクタペアｊとが同一ストロークをなしているかを判断する（ステップＳ９４）。即ち、ステップＳ９４において、ストローク判定部１４は、水平線（ｘ軸）方向に関して、ステップＳ９３において求めた交点Ｑが、現在注目している輪郭内に含まれており、且つ交点Ｑのｙ座標値が注目ベクタペアｉの最小ｙ座標より大きいか否かを判断する。同様に、垂直線（ｙ軸）方向の場合、ストローク判定部１４は、同ステップにおいて、交点Ｑが、現在注目している輪郭内に含まれており、且つ交点Ｑのｘ座標値が、注目ベクタペアｉの最小ｘ座標より大きいか否かを判断する。そしてストローク判定部１４は、本ステップにて同一ストロークであると判定した場合（ステップＳ９４にてＹＥＳ）は処理をステップＳ９５に進め、同一ストロークではないと判定した場合（ステップＳ９４にてＮＯ）は処理をステップＳ９６に進める。
【００８３】
ストローク判定部１４は、ステップＳ９４にて同一ストロークであると判定した注目ベクタペアｉと検出対象ベクタペアｊとを関連付けた状態で、同一ストロークを構成するベクタペアとして、ストロークテーブルに登録する(ステップＳ９５)。
【００８４】
ストローク判定部１４は、ある注目ベクタペアｉを対象として、ステップＳ９２からステップＳ９５までの一連の処理を、全てのベクタペア（ベクタペア数Ｐ）を検出対象ベクタペアｊとして行ったか否かを判断する（ステップＳ９６）。そしてストローク判定部１４は、まだ判断していない検出対象ベクタペアｊがある場合（ステップＳ９６にてＮＯ）はｊに１加算（ステップＳ９８）してから処理をステップＳ９２に戻し、全てのベクタペアに関して終了した場合（ステップＳ９６にてＹＥＳ）はステップＳ９７に進める。
【００８５】
そしてストローク判定部１４は、上述したステップＳ９２からステップＳ９６までの一連の処理を全てのベクタペア（ベクタペア数Ｐ）を注目ベクタペアｉとして行ったか否かを判断する（ステップＳ９７）。そしてストローク判定部１４は、まだ判断していない注目ベクタペアｉがある場合（ステップＳ９７にてＹＥＳ）はｉに１加算（ステップＳ９９）してから処理をステップＳ９２に戻し、全てのベクタペアに関して終了した場合（ステップＳ９７にてＮＯ）は処理を終了する。
【００８６】
本実施形態に係る文字輪郭補正装置１０００によれば、アウトラインフォントのサイズ変更（拡大、縮小）、またはウェイト（書体の太さ）などの変換を行った際に発生するストローク幅のばらつきを的確に補正することができる。よって本実施形態に係る文字輪郭補正装置１０００によれば、補正対象となる文字の輪郭の品質向上を実現することができる。
【００８７】
尚、上述した第１の実施形態では、説明の便宜上から、文字ストローク判定装置１００が本実施形態に係るストローク判定部１４に相当するストローク判定部１０１だけを備える場合について説明した。しかしながら、本発明に係る文字ストローク判定装置は、第２の実施形態にて上述したベクタ検出部１３を更に備えてもよい。また、同様な観点から、ストローク判定部１０１（１４）及びベクタ検出部１３に加えて、水平・垂直線検出部１２、更にはアウトラインデータのツリー構造生成部１１を備えて、本発明に係る文字ストローク判定装置を構成してもよい。
【００８８】
＜第３の実施形態＞
次に、上述した第１の実施形態に係る文字ストローク判定装置１００及び第２の実施形態に係る文字輪郭補正装置１０００を、コンピュータ（情報処理装置）を利用して実現する場合について説明する。即ち、第１及び第２の実施形態に係る装置は、専用のハードウェアを利用して実現しても良いが、本実施形態の如くコンピュータを利用して実現しても良い。
【００８９】
図１１は、本発明の第１及び第２の実施形態に係る装置を実現可能なコンピュータのハードウェア構成を例示的に説明する図である。図１１に示した文字輪郭補正装置（文字ストローク判定装置）２００のハードウェアは、ＣＰＵ２０１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３、及び通信インタフェース（Ｉ／Ｆ）２０４を備える。通信インタフェース２０４は、上述した各実施形態において、図１または図２には不図示の外部装置（外部ユニット）との間においてデータ通信を実現する一般的な通信手段である。
【００９０】
そして、上述した第２の実施形態を例に説明した本発明は、その説明において参照したフローチャート（図７乃至図１０）の機能を実現可能なコンピュータ・プログラムを、図１１に示す文字輪郭補正装置２００に対して供給した後、そのコンピュータ・プログラムを、当該コンピュータのＣＰＵ２０１に読み出して実行することによって達成される。また、第１の実施形態に係る文字ストローク判定装置１００を例に説明した本発明は、第２の実施形態において参照した図１０に示すストローク判定処理を実現可能なコンピュータ・プログラムを、ＣＰＵ２０１に読み出して実行することによって達成される。また、当該文字輪郭補正装置（文字ストローク判定装置）２００内に供給されたコンピュータ・プログラムは、読み書き可能な一時記憶メモリ（２０２）またはハードディスク装置（不図示）等の記憶デバイス（記憶媒体）に格納すれば良い。
【００９１】
また、前記の場合において、当該各装置内へのコンピュータ・プログラムの供給方法は、ＣＤ−ＲＯＭ等の各種記録媒体を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等のように、現在では一般的な手順を採用することができる。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコード或いは係るコードが格納された記憶媒体によって構成される。
【００９２】
＜第４の実施形態＞
次に、上述した第２の実施形態に係る文字輪郭補正装置１０００、或いは第３の実施形態に係る文字輪郭補正装置２００を基本とする文字出力装置について説明する。
【００９３】
図１４は、本発明の模範的な第４の実施形態に係る文字出力装置の構成を例示するブロック図である。係る文字出力装置は、例えば、プリンタ（印刷装置）である。図１４において、記憶装置２は、アウトラインフォントデータ、各種パラメータ、処理すべき印刷情報、及び上述した第３の実施形態におけるコンピュータ・プログラムのコードなどを記憶するハードディスク装置等の記憶デバイスである。アウトラインデータ展開装置３は、出力すべき印刷情報を、アウトラインフォントデータに基づいて、指定されたサイズやウェイトに変換する処理等を行う。文字輪郭補正装置４は、上述した第２の実施形態に係る文字輪郭補正装置１０００、或いは第３の実施形態に係る文字輪郭補正装置２００に相当する。即ち、本実施形態において、文字輪郭補正装置４は、アウトラインデータ展開装置３が処理した変換後のアウトラインフォントデータに対して、上述した一連の手順によって輪郭補正を施す。出力装置５は、文字輪郭補正装置４によって輪郭補正が施されたアウトラインフォントデータに基づいて、例えばビットマップに展開した文字画像データを、一般的な機構を利用して紙媒体に印刷する。そして、制御装置１は、図１４に示す文字出力装置の全体の動作制御を司る。即ち、制御装置１は、例えば外部のコンピュータ（不図示）からの指示に基づいて、図１４に示した各装置の動作を制御することにより、係るコンピュータから入手した印刷情報を、指定されたサイズやウェイトに従って、紙媒体に印刷する。
【符号の説明】
【００９４】
１    制御装置
２    記憶装置
３    アウトラインデータ展開装置
４，１０００    文字輪郭補正装置
５    出力装置
１１    アウトラインデータのツリー構造生成部
１２    水平・垂直線検出部
１３    ベクタペア検出部
１４    ストローク判定部
１５    輪郭座標演算部
１００    文字ストローク判定装置
１０１    ストローク判定部
２００    文字ストローク判定装置（文字輪郭補正装置）
２０１    ＣＰＵ
２０２    ＲＡＭ
２０３    ＲＯＭ
２０４    入出力インタフェース（Ｉ／Ｆ）
【図１】
2012103431.tif 000003
【図２】
2012103431.tif 000004
【図３】
2012103431.tif 000005
【図４】
2012103431.tif 000006
【図５】
2012103431.tif 000007
【図６】
2012103431.tif 000008
【図７】
2012103431.tif 000009
【図８】
2012103431.tif 000010
【図９】
2012103431.tif 000011
【図１０】
2012103431.tif 000012
【図１１】
2012103431.tif 000013
【図１２】
2012103431.tif 000014
【図１３】
2012103431.tif 000015
【図１４】
2012103431.tif 000016
【図１５】
2012103431.tif 000017
【図１６】
2012103431.tif 000018