(57)【要約】【課題】手書き入力された文字を精度よく認識できる電子機器を実現する。【解決手段】実施形態によれば、電子機器は、表示処理手段を具備する。表示処理手段は、ディスプレイの画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示する。前記表示処理手段は、前記１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向とを用いて定められる文字が記載された第３方向に基づいて、前記１以上のストロークの認識結果に対応する文字を表示する。【選択図】図５
2015225526.tif 000002
【特許請求の範囲】
【請求項１】
ディスプレイの画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示する表示処理手段を具備し、
前記表示処理手段は、前記１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向とを用いて定められる文字が記載された第３方向に基づいて、前記１以上のストロークの認識結果に対応する文字を表示する電子機器。
【請求項２】
前記表示処理手段は、前記第１方向が正規化された場合の、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向を用いて定められる文字が記載された第３方向に基づいて、前記文字を表示する請求項１記載の電子機器。
【請求項３】
前記表示処理手段は、
前記第１方向が左から右への方向であり、且つ前記第２方向が下方向である場合、前記第３方向が横書きであることに基づいて、前記文字を表示し、
前記第１方向が左から右への方向であり、且つ前記第２方向が上方向である場合、前記第３方向が縦書きであることに基づいて、前記文字を表示する請求項１記載の電子機器。
【請求項４】
前記表示処理手段は、
前記第１方向が左から右への方向であり、且つ前記第２方向が右下方向である場合、前記第３方向が横書きであることに基づいて、前記文字を表示し、
前記第１方向が左から右への方向であり、且つ前記第２方向が右上方向である場合、前記第３方向が縦書きであることに基づいて、前記文字を表示する請求項３記載の電子機器。
【請求項５】
前記表示処理手段は、
前記第１方向が左から右への方向であり、且つ前記第２方向が右下方向又は左下方向である場合、前記第３方向が横書きであることに基づいて、前記文字を表示し、
前記第１方向が左から右への方向であり、且つ前記第２方向が右上方向又は左上方向である場合、前記第３方向が縦書きであることに基づいて、前記文字を表示する請求項３記載の電子機器。
【請求項６】
前記表示処理手段は、
前記第１方向が左から右への方向であり、且つ前記１以上のストロークに対応する、ストロークの始点から終点への１以上のベクトルの内の下方向へのベクトルの割合がしきい値より大きい場合、前記第３方向が横書きであることに基づいて、前記文字を表示し、
前記第１方向が左から右への方向であり、且つ前記１以上のベクトルの内の下方向へのベクトルの割合が前記しきい値以下である場合、前記第３方向が縦書きであることに基づいて、前記文字を表示する請求項１記載の電子機器。
【請求項７】
前記表示処理手段は、さらに、前記第１方向と、前記第２方向と、前記１以上のストロークの内の第１ストロークの終点から、当該第１ストロークに後続する第２ストロークの始点へのベクトルに対応する第４方向とを用いて定められる文字が記載された第３方向に基づいて、前記文字を表示する請求項１記載の電子機器。
【請求項８】
ディスプレイの画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示し、
前記１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークに第２方向とを用いて定められる文字が記載された第３方向に基づいて、前記１以上のストロークの認識結果に対応する文字を表示する方法。
【請求項９】
前記文字を表示することは、前記第１方向が正規化された場合の、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向を用いて定められる文字が記載された第３方向に基づいて、前記文字を表示する請求項８記載の方法。
【請求項１０】
前記文字を表示することは、
前記第１方向が左から右への方向であり、且つ前記第２方向が下方向である場合、前記第３方向が横書きであることに基づいて、前記文字を表示し、
前記第１方向が左から右への方向であり、且つ前記第２方向が上方向である場合、前記第３方向が縦書きであることに基づいて、前記文字を表示する請求項８記載の方法。
【請求項１１】
前記文字を表示することは、さらに、前記第１方向と、前記第２方向と、前記１以上のストロークの内の第１ストロークの終点から、当該第１ストロークに後続する第２ストロークの始点へのベクトルに対応する第４方向とを用いて定められる文字が記載された第３方向に基づいて、前記文字を表示する請求項８記載の方法。
【請求項１２】
コンピュータにより実行されるプログラムであって、前記プログラムは、
ディスプレイの画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示する手順と、
前記１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向とを用いて定められる文字が記載された第３方向に基づいて、前記１以上のストロークの認識結果に対応する文字を表示する手順とを前記コンピュータに実行させるプログラム。
【請求項１３】
前記文字を表示する手順は、前記第１方向が正規化された場合の、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向を用いて定められる文字が記載された第３方向に基づいて、前記文字を表示する請求項１２記載のプログラム。
【請求項１４】
前記文字を表示する手順は、
前記第１方向が左から右への方向であり、且つ前記第２方向が下方向である場合、前記第３方向が横書きであることに基づいて、前記文字を表示し、
前記第１方向が左から右への方向であり、且つ前記第２方向が上方向である場合、前記第３方向が縦書きであることに基づいて、前記文字を表示する請求項１２記載のプログラム。
【請求項１５】
前記文字を表示する手順は、さらに、前記第１方向と、前記第２方向と、前記１以上のストロークの内の第１ストロークの終点から、当該第１ストロークに後続する第２ストロークの始点へのベクトルに対応する第４方向とを用いて定められる文字が記載された第３方向に基づいて、前記文字を表示する請求項１２記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、文字を手書き入力する技術に関する。
【背景技術】
【０００２】
近年、タブレット、ＰＤＡ、スマートフォンといった種々の電子機器が開発されている。この種の電子機器の多くは、ユーザによる入力操作を容易にするために、タッチスクリーンディスプレイを備え、手書きするための機能を有するものもある。そのためユーザは、この電子機器を用いて、テキストや画像だけでなく、手書きの文字や図形も含む文書を作成することができる。
【０００３】
手書きの文字は、例えば別のアプリケーションプログラムで利用するために、各種の文字認識処理によってテキスト（文字コード）に変換されることがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−６６２３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、タッチスクリーンディスプレイの画面上で手書き入力される文字は、単一の方向だけでなく、様々な方向に手書きされることがある。このように様々な方向に手書きされた文字では、文字認識の精度が低下する可能性がある。
【０００６】
本発明の一形態は、手書き入力された文字を精度よく認識できる電子機器及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態によれば、電子機器は、表示処理手段を具備する。表示処理手段は、ディスプレイの画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示する。前記表示処理手段は、前記１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向とを用いて定められる文字が記載された第３方向に基づいて、前記１以上のストロークの認識結果に対応する文字を表示する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係る電子機器の外観を示す例示的な斜視図。
【図２】同実施形態の電子機器のタッチスクリーンディスプレイ上に手書きされるストロークの例を示す図。
【図３】同実施形態の電子機器によって記憶媒体に保存される、図２の手書きストロークに対応する時系列情報（ストロークデータ）を説明するための例示的な図。
【図４】同実施形態の電子機器のシステム構成を示す例示的なブロック図。
【図５】同実施形態の電子機器によって実行されるデジタルノートブックアプリケーションプログラムの機能構成を示す例示的なブロック図。
【図６】同実施形態の電子機器のタッチスクリーンディスプレイ上に手書きされる行が正規化される例を説明するための図。
【図７】同実施形態の電子機器のタッチスクリーンディスプレイ上に手書きされる行が正規化される別の例を説明するための図。
【図８】同実施形態の電子機器によって正規化された行の例を示す図。
【図９】図８の行に含まれるストロークの始点から終点へのベクトルの例を示す図。
【図１０】同実施形態の電子機器によって正規化された行の別の例を示す図。
【図１１】図１０の行に含まれるストロークの始点から終点へのベクトルの例を示す図。
【図１２】同実施形態の電子機器によって実行される手書き入力処理の手順を例示的に示すフローチャート。
【図１３】同実施形態の電子機器によって実行される手書き文字認識処理の手順を例示的に示すフローチャート。
【図１４】同実施形態の電子機器によって実行される手書き文字認識処理の別の手順を例示的に示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、実施の形態について図面を参照して説明する。
【００１０】
図１は、一実施形態に係る電子機器の外観を示す斜視図である。この電子機器は、例えば、ペン又は指によって手書き入力可能なペン・ベースの携帯型電子機器である。この電子機器は、タブレットコンピュータ、ノートブック型パーソナルコンピュータ、スマートフォン、ＰＤＡ等として実現され得る。以下では、この電子機器がタブレットコンピュータ１０として実現されている場合を想定する。タブレットコンピュータ１０は、タブレット又はスレートコンピュータとも称される携帯型電子機器であり、図１に示すように、本体１１とタッチスクリーンディスプレイ１７とを備える。タッチスクリーンディスプレイ１７は、本体１１の上面に重ね合わせるように取り付けられている。
【００１１】
本体１１は、薄い箱形の筐体を有している。タッチスクリーンディスプレイ１７には、フラットパネルディスプレイと、フラットパネルディスプレイの画面上のペン又は指の接触位置を検出するように構成されたセンサとが組み込まれている。フラットパネルディスプレイは、例えば、液晶表示装置（ＬＣＤ）であってもよい。センサとしては、例えば、静電容量方式のタッチパネル、電磁誘導方式のデジタイザなどを使用することができる。以下では、デジタイザとタッチパネルである２種類のセンサの双方がタッチスクリーンディスプレイ１７に組み込まれている場合を想定する。
【００１２】
デジタイザ及びタッチパネルの各々は、フラットパネルディスプレイの画面を覆うように設けられる。このタッチスクリーンディスプレイ１７は、指を使用した画面に対するタッチ操作のみならず、ペン１００を使用した画面に対するタッチ操作も検出することができる。ペン１００は例えば電磁誘導ペンである。
【００１３】
ユーザは、外部オブジェクト（ペン１００又は指）を使用してタッチスクリーンディスプレイ１７上で、手書きによりストロークを入力する手書き入力操作を行うことができる。手書き入力操作中においては、画面上の外部オブジェクト（ペン１００又は指）の動きの軌跡、つまり手書き入力操作によって手書きされるストロークの軌跡（筆跡）がリアルタイムに描画され、これによって各ストロークの軌跡が画面上に表示される。外部オブジェクトが画面に接触されている間の外部オブジェクトの動きの軌跡が１ストロークに相当する。多数のストロークの集合、つまり多数の軌跡（筆跡）の集合が、手書きの文字や図形などを構成する。
【００１４】
本実施形態では、このような手書きストローク（手書きの文字及び図形）は、イメージデータではなく、各ストロークの軌跡の座標列とストローク間の順序関係を示す時系列情報として記憶媒体に保存される。この時系列情報の詳細は図３を参照して後述するが、この時系列情報は、概して、複数のストロークにそれぞれ対応する時系列のストロークデータの集合を意味する。各ストロークデータは、手書きにより入力可能なある一つのストロークを表現可能なデータであればどのようなものであってもよく、例えば、このストロークの軌跡上の点それぞれに対応する座標データ系列（時系列座標）を含む。これらストロークデータの順序は、ストロークそれぞれが手書きされた順序つまり筆順に相当する。
【００１５】
タブレットコンピュータ１０は、記憶媒体から既存の任意の文書データを読み出し、この文書データに対応する文書、つまり、時系列情報によって示される複数のストロークそれぞれに対応する軌跡が描画された手書き文書を、画面上に表示することができる。
【００１６】
次いで、図２及び図３を参照して、ユーザによって手書きされたストローク（手書きの文字、マーク、図形、表など）と時系列情報との関係について説明する。図２は、ペン１００などを使用してタッチスクリーンディスプレイ１７上に手書きされる文書の例を示している。
【００１７】
この文書では、一旦手書きされた文字や図形などの上に、さらに別の文字や図形などが手書きされるというケースが多い。図２においては、「ＡＢＣ」の手書き文字列が「Ａ」、「Ｂ」、「Ｃ」の順番で手書きされ、この後に、手書きの矢印が、手書き文字「Ａ」のすぐ近くに手書きされた場合が想定されている。
【００１８】
手書き文字「Ａ」は、ペン１００などを使用して手書きされる２つのストローク（「∧」形状のストローク、「−」形状のストローク）によって、つまり２つの軌跡によって表現される。最初に手書きされる「∧」形状のペン１００の軌跡は例えば等時間間隔でリアルタイムにサンプリングされ、これによって「∧」形状のストロークの時系列座標ＳＤ１１、ＳＤ１２、…ＳＤ１ｎが得られる。同様に、次に手書きされる「−」形状のペン１００の軌跡もサンプリングされ、これによって「−」形状のストロークの時系列座標ＳＤ２１、ＳＤ２２、…ＳＤ２ｎが得られる。
【００１９】
手書き文字「Ｂ」は、ペン１００などを使用して手書きされた２つのストローク、つまり２つの軌跡によって表現される。手書き文字「Ｃ」は、ペン１００などを使用して手書きされた１つのストローク、つまり１つの軌跡によって表現される。手書きの矢印は、ペン１００などを使用して手書きされた２つのストローク、つまり２つの軌跡によって表現される。
【００２０】
図３は、図２の文書に対応する時系列情報２００を示している。時系列情報２００は、複数のストロークデータＳＤ１、ＳＤ２、…、ＳＤ７を含む。時系列情報２００内においては、これらストロークデータＳＤ１、ＳＤ２、…、ＳＤ７は、筆跡順に、つまり複数のストロークが手書きされた順に時系列に並べられている。
【００２１】
時系列情報２００において、先頭の２つのストロークデータＳＤ１、ＳＤ２は、手書き文字「Ａ」の２つのストロークをそれぞれ示している。３番目と４番目のストロークデータＳＤ３、ＳＤ４は、手書き文字「Ｂ」を構成する２つのストロークをそれぞれ示している。５番目のストロークデータＳＤ５は、手書き文字「Ｃ」を構成する１つのストロークを示している。６番目と７番目のストロークデータＳＤ６、ＳＤ７は、手書き矢印を構成する２つのストロークをそれぞれ示している。
【００２２】
各ストロークデータは、一つのストロークに対応する座標データ系列（時系列座標）、つまり一つのストロークの軌跡上の複数の点それぞれに対応する複数の座標を含む。各ストロークデータにおいて、複数の座標は、ストロークが書かれた順に時系列に並べられている。例えば、手書き文字「Ａ」に関しては、ストロークデータＳＤ１は、手書き文字「Ａ」の「∧」形状のストロークの軌跡上の点それぞれに対応する座標データ系列（時系列座標）、つまりｎ個の座標データＳＤ１１、ＳＤ１２、…ＳＤ１ｎを含む。ストロークデータＳＤ２は、手書き文字「Ａ」の「−」形状のストロークの軌跡上の点それぞれに対応する座標データ系列、つまりｎ個の座標データＳＤ２１、ＳＤ２２、…ＳＤ２ｎを含む。なお、座標データの数ｎはストロークデータ毎に異なっていてもよい。
【００２３】
各座標データは、対応する軌跡内のある１点に対応するＸ座標及びＹ座標を示す。例えば、座標データＳＤ１１は、「∧」形状のストロークの始点のＸ座標（Ｘ１１）及びＹ座標（Ｙ１１）を示す。ＳＤ１ｎは、「∧」形状のストロークの終点のＸ座標（Ｘ１ｎ）及びＹ座標（Ｙ１ｎ）を示す。
【００２４】
また、各座標データは、その座標に対応する点が手書きされた時点に対応するタイムスタンプ情報Ｔを含んでいてもよい。手書きされた時点は、絶対時間（例えば、年月日時分秒）と、ある時点を基準とした相対時間のいずれであってもよい。例えば、各ストロークデータに、ストロークが書き始められた絶対時間（例えば、年月日時分秒）をタイムスタンプ情報として付加し、さらに、ストロークデータ内の各座標データに、絶対時間との差分を示す相対時間をタイムスタンプ情報Ｔとして付加してもよい。各座標データにタイムスタンプ情報Ｔが追加された時系列情報を使用することにより、ストローク間の時間的関係をより精度よく表すことができる。
【００２５】
さらに、各座標データは、その座標に対応する点が手書きされた時点の、外部オブジェクト（例えば、ペン１００）が画面に接触されたことによる圧力Ｐを含んでいてもよい。
【００２６】
本実施形態では、上述したように、手書きされるストロークは、イメージや文字認識結果ではなく、時系列のストロークデータの集合から構成される時系列情報２００として記憶されるので、言語に依存せずに手書きの文字や図形を扱うことができる。よって、本実施形態の時系列情報２００の構造は、使用言語が異なる世界中の様々な国で共通に使用できる。
【００２７】
図４は、タブレットコンピュータ１０のシステム構成を示す図である。  
タブレットコンピュータ１０は、図４に示されるように、ＣＰＵ１０１、システムコントローラ１０２、主メモリ１０３、グラフィクスコントローラ１０４、ＢＩＯＳ−ＲＯＭ１０５、不揮発性メモリ１０６、無線通信デバイス１０７、エンベデッドコントローラ（ＥＣ）１０８、等を備える。
【００２８】
ＣＰＵ１０１は、タブレットコンピュータ１０内の各種コンポーネントの動作を制御するプロセッサである。ＣＰＵ１０１は、ストレージデバイスである不揮発性メモリ１０６から主メモリ１０３にロードされる各種ソフトウェアを実行する。これらソフトウェアには、オペレーティングシステム（ＯＳ）２０１、及び各種アプリケーションプログラムが含まれている。アプリケーションプログラムには、デジタルノートブックアプリケーションプログラム２０２が含まれている。このデジタルノートブックアプリケーションプログラム２０２は、手書き入力された１以上のストロークに対応する文字を認識する文字認識機能を有する。
【００２９】
また、ＣＰＵ１０１は、ＢＩＯＳ−ＲＯＭ１０５に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。
【００３０】
システムコントローラ１０２は、ＣＰＵ１０１のローカルバスと各種コンポーネントとの間を接続するデバイスである。システムコントローラ１０２には、主メモリ１０３をアクセス制御するメモリコントローラも内蔵されている。また、システムコントローラ１０２は、ＰＣＩ  ＥＸＰＲＥＳＳ規格のシリアルバスなどを介してグラフィクスコントローラ１０４との通信を実行する機能も有している。
【００３１】
グラフィクスコントローラ１０４は、本タブレットコンピュータ１０のディスプレイモニタとして使用されるＬＣＤ１７Ａを制御する表示コントローラである。このグラフィクスコントローラ１０４によって生成される表示信号はＬＣＤ１７Ａに送られる。ＬＣＤ１７Ａは、表示信号に基づいて画面イメージを表示する。このＬＣＤ１７Ａ上にはタッチパネル１７Ｂ及びデジタイザ１７Ｃが配置されている。タッチパネル１７Ｂは、ＬＣＤ１７Ａの画面上で入力を行うための静電容量式のポインティングデバイスである。指が接触される画面上の接触位置及び接触位置の動き等はタッチパネル１７Ｂによって検出される。デジタイザ１７ＣはＬＣＤ１７Ａの画面上で入力を行うための電磁誘導式のポインティングデバイスである。ペン１００が接触される画面上の接触位置、接触位置の動き、接触圧力、等はデジタイザ１７Ｃによって検出される。
【００３２】
無線通信デバイス１０７は、無線ＬＡＮ又は３Ｇ移動通信などの無線通信を実行するように構成されたデバイスである。ＥＣ１０８は、電力管理のためのエンベデッドコントローラを含むワンチップマイクロコンピュータである。ＥＣ１０８は、ユーザによるパワーボタンの操作に応じて本タブレットコンピュータ１０を電源オン又は電源オフする機能を有している。
【００３３】
上述したように、ユーザは、タッチスクリーンディスプレイ１７の画面に表示された手書き文書に、文字を構成するストロークを手書き入力する。入力されたストロークに対応するストロークデータには、デジタルノートブックアプリケーションプログラム２０２によって文字認識処理が施され、これによりストロークデータが文字に変換される。
【００３４】
ところで、ユーザは、ストロークを含む行を、手書き文書上の任意の方向に手書きすることができる。また、行内のストロークで構成される文字は、縦書きと横書きのいずれかの向きに手書きされている。つまり、手書き文書上では、任意方向の行内にストロークが手書きされ、且つ縦書きの文字を含む行と横書きの文字を含む行とが混在し得る。文字認識処理では、手書き文書上のストロークが例えば行単位で文字認識されるが、所定の行構造（例えば、一定の行の方向に、一定の文字の向きで手書きされること）を前提として、行内のストロークに文字認識処理が施された場合、文字を適切に認識することができない可能性がある。
【００３５】
そのため本実施形態では、手書き文書上に手書きされた１以上のストロークを含む任意の方向の行が、縦書きと横書きのいずれであるかを決定し、その決定に応じた文字認識を行う。本実施形態では、例えば、手書き文書上の１つの行が手書きされる方向（第１方向）と、ストロークの始点から終点への１以上のベクトルに対応する、１以上のストロークの第２方向とを用いて定められる文字が記載された第３方向（すなわち、縦書き又は横書き）に基づいて、それら１以上のストロークに対応する文字を認識（表示）する。行が手書きされる方向とストロークの始点から終点へのベクトルとを用いることによって、行が縦書きと横書きのいずれであるかを高精度に決定することができる。これにより、手書き入力された文字を適切に認識することができる。
【００３６】
図５は、本タブレットコンピュータ１０によって実行されるデジタルノートブックアプリケーションプログラム２０２の機能構成の例を示す。デジタルノートブックアプリケーションプログラム２０２は、タッチスクリーンディスプレイ１７を用いた操作によって入力される時系列情報（ストロークデータ）から文字を認識する。
【００３７】
デジタルノートブックアプリケーションプログラム２０２は、例えば、軌跡表示処理部３０１、時系列情報生成部３０２、行検出部３０３、手書き方向検出部３０４、文字認識部３０５、文書保存処理部３０６、文書取得処理部３０７、及び文書表示処理部３０８を備える。
【００３８】
タッチスクリーンディスプレイ１７は、「タッチ」、「移動（スライド）」、「リリース」等のイベントの発生を検出するように構成されている。「タッチ」は、画面上に外部オブジェクトが接触したことを示すイベントである。「移動（スライド）」は、画面上に外部オブジェクトが接触されている間に接触位置が移動されたことを示すイベントである。「リリース」は、画面から外部オブジェクトが離されたことを示すイベントである。
【００３９】
軌跡表示処理部３０１及び時系列情報生成部３０２は、タッチスクリーンディスプレイ１７によって発生される「タッチ」、「移動（スライド）」又は「リリース」のイベントを受信し、これによって手書き入力操作を検出する。「タッチ」イベントには、接触位置の座標が含まれている。「移動（スライド）」イベントには、移動先の接触位置の座標が含まれている。「リリース」イベントには、接触位置が画面から離された位置の座標が含まれている。したがって、軌跡表示処理部３０１及び時系列情報生成部３０２は、タッチスクリーンディスプレイ１７から、接触位置の動きの軌跡に対応する座標列を受信することができる。
【００４０】
軌跡表示処理部３０１は、タッチスクリーンディスプレイ１７の画面上で手書きにより入力される１以上のストロークを表示する。軌跡表示処理部３０１は、タッチスクリーンディスプレイ１７から座標列を受信し、この座標列に基づいて、ペン１００等を使用した手書き入力操作によって手書きされる各ストロークの軌跡をタッチスクリーンディスプレイ１７内のＬＣＤ１７Ａの画面上に表示する。この軌跡表示処理部３０１により、画面にペン１００が接触している間のペン１００の軌跡、つまりストロークがＬＣＤ１７Ａの画面上に描画される。
【００４１】
時系列情報生成部３０２は、タッチスクリーンディスプレイ１７から出力される上述の座標列を受信し、この座標列に基づいて、図３で詳述したような構造を有する時系列情報（ストロークデータ）を生成する。この場合、時系列情報、つまりストロークの各点に対応する座標及びタイムスタンプ情報は作業メモリ４０１に一時保存されてもよい。また、時系列情報生成部３０２は、生成された時系列情報（ストロークデータ）を行検出部３０３に出力する。なお、行検出部３０３は、表示中の手書き文書の文字認識が要求されたことに応じて、その手書き文書に対応する時系列情報を作業メモリ４０１や記憶媒体４０２から読み出すようにしてもよい。
【００４２】
なお、軌跡表示処理部３０１及び時系列情報生成部３０２は、マウス、ペン型マウス、タッチパッド等の各種のポインティングデバイスから、ディスプレイの画面上の位置、その位置の動きの軌跡に対応する座標列を受信してもよい。その場合、軌跡表示処理部３０１は、このようなポインティングデバイスを用いて、画面上で手書きにより入力される１以上のストロークを表示する。また、時系列情報生成部３０２は、ポインティングデバイスから出力される座標列を受信し、この座標列に基づいて、図３で詳述したような構造を有する時系列情報（ストロークデータ）を生成する。
【００４３】
ディスプレイ１７の画面上で手書きにより入力されるストロークは、手書き文書上の行を構成する。ユーザは、例えば、タッチスクリーンディスプレイ１７の画面上で、手書き文書上の任意の方向に、ストロークを含む行を手書きすることができる。軌跡表示処理部３０１は、ディスプレイ１７の画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示する。
【００４４】
行検出部３０３、手書き方向検出部３０４、文字認識部３０５、及び文書表示処理部３０８は、手書き文書上の１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストローク第２方向とを用いて定められる文字が記載された第３方向に基づいて、１以上のストロークの認識結果に対応する文字を画面に表示する。行検出部３０３と手書き方向検出部３０４とは、手書き文字認識処理の前処理として、手書きされた文字を含む任意方向の行が、縦書きと横書きのいずれであるかを決定する。
【００４５】
より具体的には、まず、行検出部３０３は、手書き入力されたストロークに対応するストロークデータを用いて、手書き文書内の行を検出する。行検出部３０３は、例えば、時系列順に隣り合うストロークがしきい値以内の範囲にある場合に、それらストロークが１つの行に含まれると判断する。
【００４６】
そして、手書き方向検出部３０４は、検出された行に含まれるストロークに基づいて、その行を正規化する。この正規化は、行（行内の文字）が手書き文書上で手書きされた方向が、規定された方向になるように、行（行内のストローク）を回転させることを示す。手書き方向検出部３０４は、行内の時系列順のストロークの各々に対応する座標データ列を用いて、その行が手書き文書上で手書きされた方向が、正規化として予め規定された方向になるようにストロークを回転させる。以下では、説明を簡単にするために、左から右へ手書きされた行が、正規化された行であると規定されている場合を想定する。
【００４７】
例えば、行（行内の文字）が左から右へ手書きされている場合、その行内のストロークは既に正規化されている状態にあると云え、手書き方向検出部３０４はストロークを回転させない。また、例えば、行（行内の文字）が上から下へ手書きされている場合、手書き方向検出部３０４は、その行内のストロークを反時計回りに９０度回転させることによって、当該行を正規化する。
【００４８】
図６及び図７を参照して、様々な向きに手書きされた行が正規化される例を説明する。
【００４９】
図６に示す手書き文書上には、正規化されている行５１と、正規化されていない行５１Ａ，５１Ｂ，５１Ｃとが手書きされている。正規化されている行５１は、ストローク５１１、ストローク５１２、ストローク５１３、……、ストローク５２２の順に手書きされているので、正規化として予め規定された方向（ここでは、左から右）に手書きされた行である。よって、手書き方向検出部３０４は、行５１に正規化のための処理を施さない。
【００５０】
一方、正規化されていない行５１Ａ，５１Ｂ，５１Ｃは、手書き方向検出部３０４によって正規化される。  
より具体的には、行５１Ａは、ストローク５１１Ａ、ストローク５１２Ａ、ストローク５１３Ａ、……、ストローク５２２Ａの順に手書きされているので、手書き文書上の右から左へ手書きされた行である。そのため、手書き方向検出部３０４は、行５１Ａを反時計回りに１８０度回転することによって行５１Ａを正規化する。
【００５１】
行５１Ｂは、ストローク５１１Ｂ、ストローク５１２Ｂ、ストローク５１３Ｂ、……、ストローク５２２Ｂの順に手書きされているので、手書き文書上の上から下へ手書きされた行である。そのため、手書き方向検出部３０４は、行５１Ｂを反時計回りに９０度回転することによって行５１Ｂを正規化する。
【００５２】
行５１Ｃは、ストローク５１１Ｃ、ストローク５１２Ｃ、ストローク５１３Ｃ、……、ストローク５２２Ｃの順に手書きされているので、手書き文書上の下から上へ手書きされた行である。そのため、手書き方向検出部３０４は、行５１Ｃを反時計回りに２７０度回転することによって行５１Ｃを正規化する。
【００５３】
また、図７に示す例には、正規化されている行６１と、正規化されていない行６１Ａ，６１Ｂ，６１Ｃとが手書きされている。正規化されている行６１は、ストローク６１１、ストローク６１２、ストローク６１３、……、ストローク６２０の順に手書きされているので、正規化として予め規定された方向（ここでは、左から右）に手書きされた行である。よって、手書き方向検出部３０４は、行６１に正規化のための処理を施さない。
【００５４】
一方、正規化されていない行６１Ａ，６１Ｂ，６１Ｃは、手書き方向検出部３０４によって正規化される。  
より具体的には、行６１Ａは、ストローク６１１Ａ、ストローク６１２Ａ、ストローク６１３Ａ、……、ストローク６２０Ａの順に手書きされているので、手書き文書上の右から左へ手書きされた行である。そのため、手書き方向検出部３０４は、行６１Ａを反時計回りに１８０度回転することによって行６１Ａを正規化する。
【００５５】
行６１Ｂは、ストローク６１１Ｂ、ストローク６１２Ｂ、ストローク６１３Ｂ、……、ストローク６２０Ｂの順に手書きされているので、手書き文書上の上から下へ手書きされた行である。そのため、手書き方向検出部３０４は、行６１Ｂを反時計回りに９０度回転することによって行６１Ｂを正規化する。
【００５６】
また、行６１Ｃは、ストローク６１１Ｃ、ストローク６１２Ｃ、ストローク６１３Ｃ、……、ストローク６２０Ｃの順に手書きされているので、手書き文書上の下から上へ手書きされた行である。そのため、手書き方向検出部３０４は、行６１Ｃを反時計回りに２７０度回転することによって行６１Ｃを正規化する。
【００５７】
なお、図６及び図７では、手書きされる方向が９０度刻みで異なる行の例を示したが、手書き方向検出部３０４は、任意の角度に手書きされた行を同様にして正規化することができる。
【００５８】
次いで、手書き方向検出部３０４は、正規化された行内の各ストロークの始点から終点へのベクトル（ストロークの方向成分）を算出する。つまり、手書き方向検出部３０４は、行に含まれるストロークに対応するストロークデータを用いて、始点の座標から終点の座標へのベクトルを算出する。
【００５９】
図８及び図９を参照して、ストロークの始点から終点へのベクトルが算出される例を説明する。図８及び図９に示すストロークは、アルファベットの文字を構成するストロークである。
【００６０】
図８に示す例では、手書き文書上に、ストローク５１１〜５２２を含む行５１と、ストローク６１１〜６２０を含む行６１とが手書きされている。行５１は、ストローク５１１、ストローク５１２、ストローク５１３、……、ストローク５２２の順に手書きされているので、この行５１は左から右へ手書きされている。また、行６１は、ストローク６１１、ストローク６１２、ストローク６１３、……、ストローク６２０の順に手書きされているので、この行６１も左から右へ手書きされている。したがって、行５１と行６１とは、いずれも左から右へ手書きされているので（すなわち、正規化として規定された方向に手書きされているので）、正規化された行であると云える。
【００６１】
図９に示すように、手書き方向検出部３０４は、正規化された行５１に含まれるストローク５１１〜５２２に対応する、ストロークの始点から終点へのベクトル５３１〜５４２を算出する。また、手書き方向検出部３０４は、正規化された行６１に含まれるストローク６１１〜６２０に対応する、ストロークの始点から終点へのベクトル６３１〜６４０を算出する。手書き方向検出部３０４は、例えば、ストローク５１１の始点５１１Ｓから終点５１１Ｅへのベクトル５３１を算出する。また、手書き方向検出部３０４は、例えば、ストローク６１１の始点６１１Ｓから終点６１１Ｅへのベクトル６３１を算出する。同様にして、手書き方向検出部３０４は、正規化された行内の各ストロークに対応するベクトルを算出する。
【００６２】
また、図１０及び図１１は、ストロークの始点から終点へのベクトルが算出される別の例を示す。図１０及び図１１に示すストロークは、日本語の文字を構成するストロークである。
【００６３】
図１０に示す例では、手書き文書上に、ストローク７１１〜７２３を含む行７１と、ストローク８１１〜８２４を含む行８１とが手書きされている。行７１は、ストローク７１１、ストローク７１２、ストローク７１３、……、ストローク７２３の順に手書きされているので、この行７１は左から右へ手書きされている。また、行８１は、ストローク８１１、ストローク８１２、ストローク８１３、……、ストローク８２４の順に手書きされているので、この行８１も左から右へ手書きされている。したがって、行７１と行８１とは、いずれも左から右へ手書きされているので、正規化された行であると云える。
【００６４】
図１１に示すように、手書き方向検出部３０４は、正規化された行７１に含まれるストローク７１１〜７２３に対応する、ストロークの始点から終点へのベクトル７３１〜７４３を算出する。また、手書き方向検出部３０４は、正規化された行８１に含まれるストローク８１１〜８２４に対応する、ストロークの始点から終点へのベクトル８３１〜８４４を算出する。
【００６５】
このように、手書き方向検出部３０４は、手書き入力されたストロークに対応するストロークデータ（時系列情報）を用いることにより、ストロークで構成される文字の種類に関わらず、正規化された行に含まれるストロークに対応する、ストロークの始点から終点へのベクトルを算出することができる。
【００６６】
次いで、手書き方向検出部３０４は、算出されたベクトルを用いて、行内の文字が縦書きと横書きのいずれであるかを決定する。つまり、手書き方向検出部３０４は、行の第１方向が正規化された場合の、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向を用いて定められる文字が記載された第３方向を決定する。以下では、行内の文字が縦書きと横書きのいずれであるかを決定するいくつかの構成の例を説明する。
【００６７】
第１の例として、手書き方向検出部３０４は、行内のストロークに対応するベクトルを合成することによって、合成ベクトルを算出する。手書き方向検出部３０４は、算出された合成ベクトルの向きに基づいて、行内の文字が縦書きと横書きのいずれであるかを決定する。手書き方向検出部３０４は、合成ベクトルが、手書き文書上で下方向へのベクトルである場合、その行を横書きに決定する。また、手書き方向検出部３０４は、合成ベクトルが、手書き文書上で下方向へのベクトルでない場合、すなわち、上方向へのベクトルである場合、その行を縦書きに決定する。換言すると、手書き方向検出部３０４は、行の第１方向が左から右への方向であり、且つストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向が下方向である場合、文字が記載された第３方向が横書きであることを決定する。また、手書き方向検出部３０４は、行の第１方向が左から右への方向であり、且つストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向が上方向である場合、文字が記載された第３方向が縦書きであることを決定する。
【００６８】
より具体的には、手書き方向検出部３０４は、算出された合成ベクトルの垂直方向成分の正負に基づいて、行内の文字が縦書きと横書きのいずれであるかを決定する。手書き方向検出部３０４は、合成ベクトルの垂直方向成分が負である場合、その行を横書きに決定する。また、手書き方向検出部３０４は、合成ベクトルの垂直方向成分が正である場合、その行を縦書きに決定する。
【００６９】
なお、手書き方向検出部３０４は、合成ベクトルが、手書き文書上で右下方向へのベクトル又は左下方向へのベクトルである場合に、その行を横書きに決定してもよい。また、手書き方向検出部３０４は、合成ベクトルが、手書き文書上で右上方向へのベクトル又は左上方向へのベクトルである場合に、その行を縦書きに決定してもよい。換言すると、手書き方向検出部３０４は、行の第１方向が左から右への方向であり、且つストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向が右下方向又は左下方向である場合、文字が記載された第３方向が横書きであることを決定してもよい。また、手書き方向検出部３０４は、行の第１方向が左から右への方向であり、且つストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向が右上方向又は左上方向である場合、文字が記載された第３方向が縦書きであることを決定してもよい。
【００７０】
また、手書き方向検出部３０４は、合成ベクトルを算出する際に、ベクトルに対応するストロークの長さや形状の特徴に基づく重みで、ベクトルを重み付けして合成してもよい。例えば、ストロークが長いほど、重みに大きな値が設定される。また、ストロークの形状が複雑である（例えば、ストロークの向きの変化が大きい）ほど重みに小さな値が設定され、複雑でないほど重みに大きな値が設定される。
【００７１】
さらに、合成ベクトルの向きが水平方向に近く、縦書きと横書きのいずれに判定するべきかがあいまいである場合（例えば、合成ベクトルの垂直方向成分が０を含む所定の範囲内である場合）、手書き方向検出部３０４は、その行が縦書きと横書きのいずれであるかの決定を保留してもよい。手書き方向検出部３０４は、手書き文書内の他の行が縦書きと横書きのいずれであるかの判定結果が確定された後に、その判定結果を用いて、決定が保留された行が縦書きと横書きのいずれであるかを決定する。手書き方向検出部３０４は、決定が保留された行の判定結果として、例えば、手書き文書内の他の行の判定結果で支配的な方を採用する。また、他の行の判定結果で、縦書きと横書きのいずれも支配的でない場合は、合成ベクトルに基づく判定を採用してもよい。これにより、合成ベクトルがほぼ水平の向きを有する場合に、行内の文字が縦書きと横書きのいずれであるかの誤判定を低減することができる。
【００７２】
さらに、縦書きと横書きのいずれに判定するかあいまいである場合には、手書き方向検出部３０４は、縦書きと横書きの内、予め規定された方（デフォルト値）に決定されるようにしてもよい。ユーザは、例えば、設定画面を用いて、縦書きと横書きのいずれに判定するかあいまいである場合に、縦書きと横書きのどちらに決定されるかを選択しておくことができる。
【００７３】
次いで、第２の例として、手書き方向検出部３０４は、行内の複数のストロークに対応する複数のベクトルの内の、手書き文書上で下方向へのベクトル（すなわち、垂直方向成分が負であるベクトル）の数を算出し、行内の全ベクトル数に対する下方向へのベクトルの数の割合に基づいて、その行内の文字が縦書きと横書きのいずれであるかを決定してもよい。手書き方向検出部３０４は、全ベクトル数に対する下方向へのベクトルの数の割合がしきい値より大きい場合、その行を横書きに決定する。手書き方向検出部３０４は、全ベクトル数に対する下方向へのベクトルの数の割合がしきい値以下である場合、その行を縦書きに決定する。換言すると、手書き方向検出部３０４は、行の第１方向が左から右への方向であり、且つ１以上のストロークに対応する、ストロークの始点から終点への１以上のベクトルの内の下方向へのベクトルの割合がしきい値より大きい場合、文字が記載された第３方向が横書きであることを決定する。また、手書き方向検出部３０４は、行の第１方向が左から右への方向であり、且つ前記１以上のベクトルの内の下方向へのベクトルの割合がしきい値以下である場合、文字が記載された第３方向が縦書きであることを決定する。しきい値は、例えば、０．５に設定され、その場合、行内の複数のストロークに対応する複数のベクトルに、下方向へのベクトルと上方向へのベクトルのいずれが多く含まれているかが判定される。なお、しきい値は、判定精度が高くなるように事前に調整することもできる。
【００７４】
なお、手書き方向検出部３０４は、行内の複数のストロークに対応する複数のベクトルの内の、手書き文書上で右下方向へのベクトルの数を算出し、行内の全ベクトル数に対する右下方向へのベクトルの数の割合に基づいて、その行内の文字が縦書きと横書きのいずれであるかを決定してもよい。
【００７５】
また、全ベクトル数に対する下方向へのベクトルの数の割合がしきい値を含む所定の範囲内（例えば、しきい値を中心とする＋０．１から−０．１の範囲内）である場合には、手書き方向検出部３０４は、手書き文書内の他の行が縦書きであるか横書きであるかを考慮して、その行が縦書きと横書きのいずれであるかを決定してもよい。これにより、例えば、下方向へのベクトルの数と上方向へのベクトルの数とがほぼ等しい場合に、行内の文字が縦書きと横書きのいずれであるかの誤判定を低減することができる。
【００７６】
第３の例として、手書き方向検出部３０４は、行内の１以上のストロークに対応する、ストロークの始点から終点への１以上のベクトルに加えて、それら１以上のストロークの内の第１ストロークの終点から、当該第１ストロークに後続する第２ストロークの始点へのベクトル（以下、ストローク間ベクトルとも称する）も用いて、行内の文字が縦書きと横書きのいずれであるかを決定する。つまり、手書き方向検出部３０４は、行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向と、１以上のストロークの内の第１ストロークの終点から、当該第１ストロークに後続する第２ストロークの始点へのベクトルに対応する第４方向とを用いて定められる文字が記載された第３方向を決定する。
【００７７】
より具体的には、まず、手書き方向検出部３０４は、行内の各ストロークの始点から終点へのベクトルを算出する。そして、手書き方向検出部３０４は、行内の隣り合うストロークを用いて、先行する第１ストロークの終点から、当該第１ストロークに後続する第２ストロークの始点へのストローク間ベクトルを算出する。手書き方向検出部３０４は、算出されたストローク間ベクトルが上下（垂直方向）に反転されたベクトルを算出する。
【００７８】
手書き方向検出部３０４は、算出された行内の各ストロークに対応するベクトルと、上下に反転されたストローク間ベクトルとを合成することによって、合成ベクトルを算出する。手書き方向検出部３０４は、合成ベクトルを算出する際に、行内の各ストロークに対応するベクトルを、対応するストロークの長さや形状の特徴に基づく重みで重み付けし、ストローク間ベクトルを、当該ベクトルの大きさに基づく重みで重み付けして、ベクトルを合成してもよい。手書き方向検出部３０４は、第１の例と同様にして、算出された合成ベクトルの向きに基づいて、行内の文字が縦書きと横書きのいずれであるかを決定する。
【００７９】
ストローク間ベクトルは、１つのストロークの手書き入力が完了した位置から、次のストロークを書き出す位置へのベクトルである。そして、例えば左から右に手書きされた横書きの行は、１つのストロークの手書き入力が行の下方で完了した後、次のストロークが行の上方の位置で書き出されることが多く、また左から右に手書きされた縦書きの行は、１つのストロークの手書き入力が行の上方で完了した後、次のストロークが行の下方の位置で書き出されることが多いという性質を有する。そのため、ストローク間ベクトルが上下に反転されたベクトルをさらに用いて合成ベクトルを算出することによって、行内の文字が縦書きと横書きのいずれであるかの誤判定を低減することができる。
【００８０】
また、ストローク間ベクトルの大きさが大きい場合（しきい値以上である場合）、そのストローク間ベクトルの終点から始まるストロークは、文字の先頭のストロークである可能性が高い。そのため、手書き方向検出部３０４は、ストローク間ベクトルの大きさがしきい値以上であることに基づいて、文字の先頭のストロークを検出し、文字の先頭のストロークの始点に基づいて、行内の文字が縦書きと横書きのいずれであるかを決定してもよい。手書き方向検出部３０４は、例えば、文字の先頭のストロークの始点が行の上部に多い場合に、その行を横書きに決定し、始点が行の下部に多い場合に、その行を縦書きに決定する。
【００８１】
ところで、行内の文字が縦書きと横書きのいずれであるかを判定する方法として、行内のストロークを包含する矩形の幅と高さとの比を用いる方法がある。この方法では、矩形の幅が高さよりも大きい場合に、行内の文字が横書きであると判定され、矩形の幅が高さよりも小さい場合に、行内の文字が縦書きであると判定される。しかし、この方法では、例えば図７に示した行６１内のストロークを包含する矩形の幅が高さよりも大きいので、行６１内の文字が横書きであると誤って判定される。
【００８２】
本実施形態では、上述した手書き方向検出部３０４の構成によって、このような誤判定を回避し、例えば、行６１内の文字が縦書きであることを正しく判定することができる。なお、手書き方向検出部３０４は、行を正規化するための処理を行うことなく、行が手書きされる方向（第１方向）と、当該行に含まれる１以上のストロークに対応する、ストロークの始点から終点への１以上のベクトル（第２方向）との関係に基づいて、行が縦書きと横書きのいずれであるかを決定するように構成されてもよい。
【００８３】
次いで、文字認識部３０５は、行内の文字が縦書きと横書きのいずれであるかに基づいて、その行内の文字を認識する。文字認識部３０５は、例えば、記憶媒体４０２に格納された手書き文字辞書データ４０２Ａを用いて、行内の文字を認識する。
【００８４】
より具体的には、まず、文字認識部３０５は、手書き入力されたストロークに対応するストロークデータを用いて、ストロークに対応する特徴量（第１特徴量）を算出する。文字認識部３０５は、例えば、行内の文字が縦書きと横書きのいずれであるかと、ストロークの形状、順序等に基づいて特徴量を算出する。
【００８５】
そして、文字認識部３０５は、算出された第１特徴量と、手書き文字辞書データ４０２Ａ内の文字に対応する第２特徴量とを用いて、手書き入力されたストロークで構成される文字と手書き文字辞書データ４０２Ａ内の文字の各々との類似度を算出する。この手書き文字辞書データ４０２Ａは、手書きされる様々な文字の特徴量のデータを含み、例えば、手書きされたストロークに対応するストロークデータや、手書き文書データ４０２Ｂを解析することによって生成される。手書き文字辞書データ４０２Ａは、例えばユーザ毎に生成されるので、各ユーザによって手書きされた文字の特徴を反映することができる。
【００８６】
文字認識部３０５は、例えば、手書き入力されたストロークに対応する第１特徴量と、手書き文字辞書データ４０２Ａに示される複数の手書き文字に対応する複数の第２特徴量の各々との類似度を算出する。そして、文字認識部３０５は、手書き文字辞書データ４０２Ａ内の複数の文字から、最も類似度が高い文字を検出し、その文字を手書き入力されたストロークに対応する文字に決定する。
【００８７】
文書表示処理部３０８は、行内のストロークを認識された文字に置き換えることによって、文字を画面に表示する。文書表示処理部３０８は、例えば、認識された文字が利用されるアプリケーションプログラム（例えば、ワードプロセッシングソフトウェア、プレゼンテーションソフトウェア、メーラ、等）に応じたフォーマットで、文字を表示することができる。
【００８８】
文書保存処理部３０６は、認識された文字を含む整形文書データを、所定のフォーマットで記憶媒体４０２に保存してもよい。記憶媒体４０２は、例えば、タブレットコンピュータ１０内のストレージデバイスである。保存された整形文書データは、上述したアプリケーションプログラム等で利用することができる。
【００８９】
また、文書保存処理部３０６は、生成されたストロークデータ（作業メモリ４０１に一時保存されたストロークデータ）を、手書き文書データ４０２Ｂとして記憶媒体４０２に保存する。
【００９０】
文書取得処理部３０７は、記憶媒体４０２から既に格納されている任意の手書き文書データ４０２Ｂを読み出す。読み出された手書き文書データ４０２Ｂは文書表示処理部３０８に送られる。文書表示処理部３０８は、手書き文書データ４０２Ｂを解析し、この解析結果に基づいて、ストロークデータ（時系列情報）によって示される各ストロークの軌跡を含む文書（ページ）を画面上に表示する。
【００９１】
次いで、図１２のフローチャートを参照して、デジタルノートブックアプリケーションプログラム２０２によって実行される手書き入力処理の手順の例について説明する。
【００９２】
軌跡表示処理部３０１は、手書き入力操作によるペン１００等の動きの軌跡（ストローク）を文書上に表示する（ブロックＢ１１）。また、時系列情報生成部３０２は、手書き入力操作による軌跡に対応する座標列に基づいて上述の時系列情報（時系列順に並べられたストロークデータ）を生成し、その時系列情報を作業メモリ４０１に一時保存する（ブロックＢ１２）。
【００９３】
図１３のフローチャートは、タブレットコンピュータ１０によって実行される手書き文字認識処理の手順の例を示す。以下では、表示中の手書き文書内の文字が認識されることを想定する。
【００９４】
まず、行検出部３０３は、手書き入力されたストロークに対応するストロークデータを用いて、手書き文書内の行を検出する（ブロックＢ２０１）。行検出部３０３は、例えば、時系列順に隣り合うストロークがしきい値以内の範囲にある場合に、それらストロークが１つの行に含まれると判断する。
【００９５】
そして、手書き方向検出部３０４は、検出された行に含まれるストロークに基づいて、その行を正規化する（ブロックＢ２０２）。手書き方向検出部３０４は、行内の時系列順の複数のストロークの各々に対応する座標データ列を用いて、その行（行内の文字）が手書き文書上で手書きされた方向が所定の方向（例えば、左から右に進む方向）になるようにストロークを回転させる。例えば、行（行内の文字）が左から右へ手書きされている場合、その行内の複数のストロークは既に正規化されている状態にあると云え、手書き方向検出部３０４はストロークを回転させない。また、例えば、行（行内の文字）が上から下へ手書きされている場合、手書き方向検出部３０４は、その行内の複数のストロークを反時計回りに９０度回転させることによって、当該行を正規化する。
【００９６】
次いで、手書き方向検出部３０４は、行内のストロークの始点から終点へのベクトルを算出する（ブロックＢ２０３）。そして、手書き方向検出部３０４は、行内に後続するストロークがあるか否かを判定する（ブロックＢ２０４）。行内に後続するストロークがある場合（ブロックＢ２０４のＹＥＳ）、ブロックＢ２０３に戻り、その後続するストロークの始点から終点へのべクトルを算出する。一方、行内に後続するストロークがない場合（ブロックＢ２０４のＮＯ）、手書き方向検出部３０４は、行内の複数のストロークに対応する複数のベクトルを合成することによって、合成ベクトルを算出する（ブロックＢ２０５）。
【００９７】
手書き方向検出部３０４は、算出された合成ベクトルが、手書き文書上で下方向へのベクトルであるか否かを判定する（ブロックＢ２０６）。合成ベクトルが下方向へのベクトルである場合（ブロックＢ２０６のＹＥＳ）、手書き方向検出部３０４は、その行内の文字の手書き方向を横書きに決定する（ブロックＢ２０７）。また、合成ベクトルが下方向へのベクトルでない場合（ブロックＢ２０６のＮＯ）、すなわち、上方向へのベクトルである場合、手書き方向検出部３０４は、その行内の文字の手書き方向を縦書きに決定する（ブロックＢ２０８）。
【００９８】
次いで、文字認識部３０５は、決定された行内の文字の手書き方向に基づいて、その行内の文字を認識する（ブロックＢ２０９）。文字認識部３０５は、例えば、記憶媒体４０２に格納された手書き文字辞書データ４０２Ａを用いて、行内の文字を認識する。文書表示処理部３０８は、行内のストロークを認識された文字（文字コードに対応するフォント）に置き換えることによって、文字を手書き文書上に表示する（ブロックＢ２１０）。
【００９９】
そして、手書き方向検出部３０４は、手書き文書内に後続する行があるか否かを判定する（ブロックＢ２１１）。後続する行がある場合（ブロックＢ２１１のＹＥＳ）、ブロックＢ２０２に戻り、その後続する行内の文字を認識するための処理を実行する。後続する行がない場合（ブロックＢ２１１のＮＯ）、処理を終了する。
【０１００】
また、図１４のフローチャートは、タブレットコンピュータ１０によって実行される手書き文字認識処理の手順の別の例を示す。以下では、表示中の手書き文書内の文字が認識されることを想定する。
【０１０１】
まず、行検出部３０３は、手書き入力されたストロークに対応するストロークデータを用いて、手書き文書内の行を検出する（ブロックＢ３０１）。そして、手書き方向検出部３０４は、検出された行に含まれるストロークに基づいて、その行を正規化する（ブロックＢ３０２）。
【０１０２】
次いで、手書き方向検出部３０４は、行内のストロークの始点から終点へのベクトルを算出する（ブロックＢ３０３）。そして、手書き方向検出部３０４は、行内に後続するストロークがあるか否かを判定する（ブロックＢ３０４）。行内に後続するストロークがある場合（ブロックＢ３０４のＹＥＳ）、ブロックＢ３０３に戻り、その後続するストロークの始点から終点へのべクトルを算出する。一方、行内に後続するストロークがない場合（ブロックＢ３０４のＮＯ）、手書き方向検出部３０４は、行内の複数のストロークに対応する複数のベクトルの内の、手書き文書上で下方向へのベクトルの数を算出する（ブロックＢ３０５）。
【０１０３】
手書き方向検出部３０４は、全ベクトル数に対する下方向へのベクトルの数の割合がしきい値より大きいか否かを判定する（ブロックＢ３０６）。全ベクトル数に対する下方向へのベクトルの数の割合がしきい値より大きい場合（ブロックＢ３０６のＹＥＳ）、手書き方向検出部３０４は、行内の文字の手書き方向を横書きに決定する（ブロックＢ３０７）。一方、全ベクトル数に対する下方向へのベクトルの数の割合がしきい値以下である場合（ブロックＢ３０６のＮＯ）、手書き方向検出部３０４は、行内の文字の手書き方向を縦書きに決定する（ブロックＢ３０８）。
【０１０４】
次いで、文字認識部３０５は、決定された行内の文字の手書き方向に基づいて、その行内の文字を認識する（ブロックＢ３０９）。文書表示処理部３０８は、行内のストロークを認識された文字に置き換えることによって、文字を手書き文書上に表示する（ブロックＢ３１０）。
【０１０５】
そして、手書き方向検出部３０４は、手書き文書内に後続する行があるか否かを判定する（ブロックＢ３１１）。後続する行がある場合（ブロックＢ３１１のＹＥＳ）、ブロックＢ３０２に戻り、その後続する行内の文字を認識するための処理を実行する。後続する行がない場合（ブロックＢ３１１のＮＯ）、処理を終了する。
【０１０６】
以上説明したように、本実施形態によれば、手書き入力された文字を精度よく認識することができる。軌跡表示処理部３０１は、ディスプレイ１７の画面上で手書きにより入力される１以上のストロークであって、手書き文書上の複数の文字を含む１つの行に対応する１以上のストロークを表示する。行検出部３０３、手書き方向検出部３０４、文字認識部３０５、及び文書表示処理部３０８は、１つの行が手書きされる方向である行の第１方向と、ストロークの始点から終点へのベクトルに対応する１以上のストロークの第２方向とを用いて定められる文字が記載された第３方向に基づいて、１以上のストロークの認識結果に対応する文字を表示する。
【０１０７】
これにより、手書き文書上で任意の角度の行にストロークが手書きされ、且つ縦書きの文字を含む行と横書きの文字を含む行とが混在している場合にも、行内のストロークから文字を正しく表示することができる。
【０１０８】
なお、図１２から図１４のフローチャートで説明した本実施形態の処理手順は全てソフトウェアによって実行することができる。このため、この処理手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【０１０９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１０】
１７Ａ…ＬＣＤ、２０２…デジタルノートブックアプリケーション、３０１…軌跡表示処理部、３０２…時系列情報生成部、３０３…行検出部、３０４…手書き方向検出部、３０５…文字認識部、３０６…文書保存処理部、３０７…文書取得処理部、３０８…文書表示処理部、４０１…作業メモリ、４０２…記憶媒体、４０２Ａ…手書き文字辞書データ、４０２Ｂ…手書き文書データ
【図１】
2015225526.tif 000003
【図２】
2015225526.tif 000004
【図３】
2015225526.tif 000005
【図４】
2015225526.tif 000006
【図５】
2015225526.tif 000007
【図６】
2015225526.tif 000008
【図７】
2015225526.tif 000009
【図８】
2015225526.tif 000010
【図９】
2015225526.tif 000011
【図１０】
2015225526.tif 000012
【図１１】
2015225526.tif 000013
【図１２】
2015225526.tif 000014
【図１３】
2015225526.tif 000015
【図１４】
2015225526.tif 000016