(58)【調査した分野】(Int.Cl.,DB名)
前記幅データは、前記Mが1である場合に、前記N個の位置データにより示される軌跡の幅が固定値であることを示し、前記Mが2以上前記N以下である場合に、前記N個の位置データにより示される軌跡の幅が可変であることを示す、
請求項1に記載のデジタルインクの符号化方法。
前記幅データは、前記Mが1である場合に、前記N個の位置データにより示される軌跡の幅が固定値であることを示し、前記Mが2以上前記N以下である場合に、前記N個の位置データにより示される軌跡の幅が可変であることを示す、
請求項7に記載のデジタルインクの復号方法。
【発明を実施するための形態】
【0018】
以下、添付図面を参照しながら、本発明の実施の形態について詳細に説明する。
【0019】
図1は、本発明の実施の形態による座標検出装置1のシステム構成を示す図である。同図には、座標検出装置1への入力装置として機能するスタイラス2(ポインティングデバイス)も図示している。
【0020】
図1に示すように、座標検出装置1は、電極群11に接続されたセンサコントローラ10と、センサコントローラ10に接続された入出力部23、CPU21、RAM22、及び、GPU30を含み構成されるコンピュータである。図示していないが、座標検出装置1には、液晶ディスプレイなどの表示部も設けられる。具体的な例では、座標検出装置1はタブレット端末又はスマートフォンである。
【0021】
電極群11は、座標検出装置1に設けられるパネル面(平面)に平行に面を形成するように配設された各複数の電極11x,11yを含んで構成される。複数の電極11x,11yはそれぞれ、上記表示部の表示面上(又は裏側)に配置された透明な導体である。
図1に示すように、複数の電極11xは、それぞれy方向(パネル面内の方向)に延設され、かつ、x方向(パネル面内でy方向に直交する方向)に等間隔で配置される。また、複数の電極11yは、それぞれx方向に延設され、かつ、y方向に等間隔で配置される。
【0022】
センサコントローラ10は、電極群11を用いて、ポインティングデバイスとしてのスタイラス2がパネル面に接触したか(
図1に示す「DOWN」)、又は、離間したか(
図1に示す「UP」)を検出する機能と、パネル面内におけるスタイラス2の位置を示す位置データPを導出する機能と、スタイラス2から筆圧値WPを受信する機能とを有する。ここで、位置データPは、パネル面内の位置を示す2次元の座標(すなわち、x座標データ及びy座標データの組(x,y))によって表されてもよいし、パネル面内の位置及びパネル面とスタイラス2のペン先との間の距離を示す3次元の座標(すなわち、x座標データ、y座標データ、及びz座標データの組(x,y,z))によって表されてもよい。また、筆圧値WPは、スタイラス2のペン先がパネル面から受ける力を示す値であり、スタイラス2内に設けられるセンサによって検出される。
【0023】
センサコントローラ10は、スタイラス2の状態によって決まる所定の期間内におけるスタイラス2の動作に伴って、一連の位置データの取得を行う。具体的には、例えば位置データPが2次元の座標によって表される場合であれば、センサコントローラ10は、例えばスタイラス2がパネル面にダウンされてからパネル面からアップされるまでの間、スタイラス2の位置データPの導出を周期的に行えばよい。また、位置データPが3次元の座標によって表される場合であれば、センサコントローラ10は、例えばスタイラス2がパネル面に一旦ダウンされてからユーザによってスタイラス2のボタン(スタイラス2の側面又は端部に配置される押しボタン)が押下されるまでの間、又は、ユーザによってスタイラス2のボタンが押下されてから再度ユーザによってスタイラス2のボタンが押下されるまでの間、スタイラス2の位置データPの導出を周期的に行えばよい。こうして導出された一連の位置データPは、それぞれ筆圧値WPと対応付けて、スタイラスデータとして入出力部23に供給される。
【0024】
CPU21、RAM22、及び入出力部23は、デジタルインク100についての各種の処理を実行するデジタルインク処理部20を構成する。具体的に説明すると、CPU21は、センサコントローラ10から入出力部23に供給されたスタイラスデータに基づいてRAM22内にデジタルインク100を生成し、生成したデジタルインク100を後述する
図8に示す符号化方法によって符号化する処理を実行する。また、CPU21は、符号化したデジタルインク100を含むバイナリストリームBinInkを、後述する
図18に示す方法によって所定形式のコンテナファイルCF内にアーカイブし、外部に出力する処理を実行する。
【0025】
ここで、コンテナファイルCFの出力先は、他のコンピュータであってもよいし、座標検出装置1自身であってもよい。また、コンテナファイルCF内にアーカイブされていない状態のバイナリストリームBinInkを直接、外部に出力することとしてもよい。この場合、バイナリストリームBinInkの断片化によって得られる各断片を、互いに異なるパケットのペイロードに含めて通信することとしてもよい。
【0026】
CPU21はまた、符号化したデジタルインク100を含むバイナリストリームBinInkがアーカイブされたコンテナファイルCF(又は、コンテナファイルCF内にアーカイブされていない状態のバイナリストリームBinInk)の入力を受け付け、その中に含まれるデジタルインク100を後述する
図11及び
図12に示す復号方法によって復号することにより、デジタルインク100をRAM22内に復元する処理を実行する。
【0027】
GPU40は、RAM22内に生成又は復元されたデジタルインク100のレンダリングを実行し、その結果をパネル面(表示部)に供給する機能を有する。これにより、デジタルインク100の描画が実行される。
【0028】
デジタルインク100について説明する。デジタルインク100は、インクペンや鉛筆等の筆記具を用いて紙媒体等に残されたインクあるいは鉛筆粉等により表現される筆跡を模擬するデータである。デジタルインク100には、少なくとも1つのパスデータPAが含まれる。パスデータPAは、スタイラス2などのポインティングデバイスを動かすことにより生成されるデータであり、例えば、スタイラス2がパネル面にタッチしてから(
図1のDOWN)、パネル面上を摺動した後、パネル面から離れる(
図1のUP)までにパネル面上で動いた軌跡(trajectory、path、stroke等と称される)の幾何形状(2次元グラフィックス上での特徴)を表現している。
【0029】
なお、本明細書では、このように手書きの軌跡を表現するデータを「パスデータ」と称するが、これは非特許文献1の用語に従ったものであり、他の用語を用いても差し支えない。例えば、非特許文献2において使用される「ストローク(Stroke)」、デジタルインクの標準の1つとして知られる非特許文献3において使用される「トレース(trace)」などの用語を、パスデータの代わりに用いてもよい。
【0030】
パスデータPAには、軌跡の幅を示す幅データ、軌跡の色・透明度を示すカラーデータなどのメタデータや、その他のデータ(例えば画像データ)が関連付けられ得る。パスデータPAのレンダリングは、関連付けられたレンダリング方法によって実行される。このレンダリング方法は、形状の全てをベクターベースでレンダリングする、というものであってもよいし、ビットマップ等ピクセルデータを一部利用することによりピクセルベースの処理を用いてレンダリングする、というものであってもよいし、これら2つの方法を混合させた方法を用いてレンダリングする、というものであってもよい。
【0031】
図2は、デジタルインク100のデータのモデルを示すER(Entity-Relationship)図である。同図において、矩形はエンティティを示し、楕円はエンティティの属性を示している。
図2に示すように、デジタルインク100は、パスクラス101及びセグメントクラス110という2つのエンティティを含んで構成される。上述したパスデータPAは、パスクラス101のインスタンスである。また、以下では、セグメントクラス110のインスタンスをセグメントSと称する。
【0032】
図2の菱形は、エンティティ間の関係を示している。菱形の両側にある記号は多重度(cardinality)を示すもので、
図2の例では、1以上のパスクラス101のインスタンス(=パスデータPA)のそれぞれに、0個以上のセグメントクラス110のインスタンス(=セグメントS)が包含される、という関係(1対0以上の関係)が示されている。
【0033】
パスクラス101は、デジタルインク100の核となるエンティティであり、スタイラス2をパネル面にダウンさせてからアップさせるまでのパネル面上におけるスタイラス2の移動の軌跡(SVGにおける「パスストローク」)を記述するために使用される。パスクラス101のインスタンスであるパスデータPAは複数の位置データPを含んで構成され、1つの軌跡が生成される都度新たに生成される。パスクラス101の属性には、ストロークカラー102及びストローク幅103という2つのスタイル属性と、スタートパラメータ104及びエンドパラメータ105という2つの幾何属性と、精度データ106とが含まれる。
【0034】
セグメントクラス110は、パスデータPAを構成する複数の位置データPによって表される軌跡を分割してなるセグメントを示すエンティティであり、キャットマル−ロム曲線などの所定の補間曲線に関連付けて使用される。以下では、この補間曲線がキャットマル−ロム曲線である場合を例にとって説明を続ける。この場合、セグメントクラス110のインスタンスであるセグメントSには、属性として4つの位置111が含まれる。各位置111は補間曲線のコントロールポイントを表すもので、キャットマル−ロム曲線の場合には、それぞれがパスデータPAを構成する複数の位置データPのいずれかに対応する。この点については、後ほど
図6及び
図7を参照しながら詳しく説明する。
【0035】
なお、パスクラス101及びセグメントクラス110といったエンティティの名前自体は、非特許文献1に記載されるSVGのパス仕様(Path Specification)のサブセット(Path data、SVGPathSeg等)を踏襲したものであるが、
図2に示す各属性は、本発明のデジタルインク100のために拡張されたものである。
【0036】
図3は、N個の位置データP
1〜P
Nにより構成されるパスデータPAと、このパスデータPAに包含されるN−1個のセグメントS
1〜S
N−1との幾何上の関係を示す図である。同図に示すように、セグメントS
k(kは1〜N−1までの整数)は、位置データP
kと位置データP
k+1との間に形成される曲線を表すデータとなる。
【0037】
図2に戻り、ストロークカラー102は、パスデータPAをレンダリングする際に用いられる色及び透明度を示す属性である。ストロークカラー102によって示される色及び透明度は、1つのパスデータPAにつき1つ(1つのRGB値及び1つの透明度A。固定カラー)としてもよいし、1つのパスデータPAにつきM個(M個のRGB値及びM個の透明度A。可変カラー)としてもよい。また、1つのパスデータPAに対し、1つのRGB値及びM個の透明度Aを示すストロークカラー102を対応付けることとしてもよい。ただし、Mは、1以上N以下の整数である。以下では、ストロークカラー102についての説明は特に行わないが、デジタルインク処理部20は、後述するストローク幅103についての処理と同様の処理により、ストロークカラー102の符号化及び復号を行うよう構成される。
【0038】
ストローク幅103は、パスデータPAを構成する複数の位置データそれぞれの位置における軌跡の幅を示す属性である。デジタルインク処理部20は、センサコントローラ10から供給される筆圧値WP(
図1を参照)に基づいて、ストローク幅103の具体的な値(幅データW)を決定する。ストロークカラー102と同様に、ストローク幅103によって示される幅は、1つのパスデータPAにつき1つ(固定幅)としてもよいし、1つのパスデータPAにつきM個(可変幅)としてもよい。なお、Mの具体的な値は、ストロークカラー102とストローク幅103とで同じであってもよいし、異なっていてもよい。
【0039】
図4は、
図3に示したパスデータPAに含まれる幅データWの例を示す図である。同図には、パスデータPAを構成するN個の位置データP
1〜P
Nがそれぞれ2次元の座標によって表される例を示している。また、
図4(a)にはM=Nの場合を示し、
図4(b)にはM<Nの場合を示している。
【0040】
初めに
図4(a)を参照すると、この場合のパスデータPAには、N個の位置データP
1〜P
Nそれぞれの位置における軌跡の幅を示すN個の幅データW
1〜W
Nが含まれる。
図1に示したGPU40を用いたレンダリングにおいては、このN個の幅データW
1〜W
Nに従ってN個の位置データP
1〜P
Nそれぞれの位置における軌跡の幅が決定され、決定された幅を直径とする円をなめらかに包絡することによって、軌跡の描画が実行される。上掲した特許文献2には、この描画の詳細が記載されている。
【0041】
なお、軌跡の描画のために用いる図形としては、円ではなく楕円を用いることとしてもよい。この場合における幅データWは楕円の長径又は短径などを示すデータとなり、GPU40は、N個の位置データP
1〜P
Nそれぞれの位置における軌跡の幅を決定する際に、各位置における楕円の向きを決定する必要がある。各位置における楕円の向きによって描画結果が変わってくるからである。これに対し、円を用いる場合には、円が等方性を有することから、この向きを決定するステップを省略することができる。
【0042】
次に
図4(b)を参照すると、この場合のパスデータPAには、M個の位置データP
1〜P
Mそれぞれの位置における軌跡の幅を示すM個の幅データW
1〜W
Mが含まれる。ただし、同図においてはM<Nである。N−M個の位置データP
M+1〜P
Nそれぞれの位置における軌跡の幅を示す幅データWは、パスデータPAに含まれない。
【0043】
この場合、
図1に示したGPU40によるレンダリングにおいては、まずM個の幅データW
1〜W
Mに従ってM個の位置データP
1〜P
Mそれぞれの位置における軌跡の幅が決定され、次いで、M個の幅データW
1〜W
Mのうちのいずれか(
図4(b)の例では、幅データW
M)に従って、残りのN−M個の位置データP
M+1〜P
Nそれぞれの位置における軌跡の幅が決定される。そして、こうして決定された幅を直径とする円をなめらかに包絡することによって、軌跡の描画が実行される。
【0044】
なお、
図4(b)についての説明から理解されるように、M=1である場合には、
図1に示したGPU40によるレンダリングにおいて、1個の幅データW
1に従ってN個の位置データP
1〜P
Nそれぞれの位置における軌跡の幅が決定されることになる。したがって、固定幅で軌跡の描画が実行されることになる。
【0045】
図5は、
図3に示したパスデータPAに含まれる幅データWの他の例を示す図である。同図には、パスデータPAを構成するN個の位置データP
1〜P
Nがそれぞれ3次元の座標によって表される例を示している。ただし、
図5においては、N=5としている。
【0046】
図5に示すように、位置データP
1〜P
Nがz座標データを含む3次元の座標によって表される場合、幅データWは、球SHの径(例えば直径又は半径)を示すデータであるとすることが好適である。この場合のレンダリングにおいては、N個の幅データW
1〜W
NによりN個の位置データP
1〜P
Nそれぞれの位置を中心とする球SHの直径が決定され、さらに、位置データPの進行方向(例えば、位置データP
1〜P
Nを補間してなる補間曲線の各位置における接線の延在方向)に対して鉛直な面内に位置する球SHの大円(
図5に網掛けで示した図形)が決定される。そして、各大円をなめらかに通過するように軌跡の描画が実行される。
【0047】
なお、位置データPが3次元の座標によって表される場合の幅データWは、軌跡を通過させる所定の形状の輪郭あるいは面積に対応するデータであればよい。上述した球SHの直径を示す幅データWは、このような幅データWの一例である。また、所定の形状としては、球SHの大円ではなく、楕円や正方形を用いることとしてもよい。ただし、この場合におけるGPU40は、軌跡の描画の際に、進行方向に対して鉛直な面内に配置される所定の形状の輪郭の座標位置を得るために、上記鉛直な面内における楕円や正方形の向きを決定する必要がある。大円を用いる場合には、大円が上記鉛直な面内で等方性を有することから、1つのパラメータで輪郭の座標位置が決定されるため、向きを決定するためのステップを省略することができる。
【0048】
図2に戻り、スタートパラメータ104は、1つのパスデータPAを構成する1以上のセグメントSのうち、先頭に対応する開始セグメントS
startの描画開始位置を示す属性である。また、エンドパラメータ105は、1つのパスデータPAを構成する1以上のセグメントSのうち、末尾に対応する終了セグメントS
endの描画終了位置を示す属性である。
【0049】
図6は、スタートパラメータ104及びエンドパラメータ105を説明する図である。同図に示したパスデータPA及び各セグメントSは、
図3及び
図4に示したものと同じものである。同図では、上述したキャットマル−ロム曲線についても詳しく説明する。
【0050】
スタートパラメータ104は、開始セグメントS
start(=S
1)のt値によって表される。t値は、
図6に併記したセグメントS
iの拡大図に示すように、0以上1以下の値をとるセグメントの内分点である。スタートパラメータ104によれば、位置データP
1により示される位置と位置データP
2により示される位置との間の任意の位置を、表示処理を開始する位置として指定することができる。
【0051】
スタートパラメータ104の初期値は0である(後述する
図10の2行目「default=0」を参照)。この初期値0は、パスデータPAのレンダリングが開始セグメントS
startの先頭から開始されることを示している。参考のために、
図6には、スタートパラメータ104の値が0.5である場合において開始セグメントS
startの表示が開始される位置SPを示している。
【0052】
エンドパラメータ105は、終了セグメントS
end(=S
N−1)のt値によって表される。エンドパラメータ105によれば、位置データP
N−1により示される位置と位置データP
Nにより示される位置との間の任意の位置を、表示処理を終了する位置として指定することができる。
【0053】
エンドパラメータ105の初期値は1である(後述する
図10の3行目「default=1」を参照)。この初期値1は、パスデータPAのレンダリングが終了セグメントS
endの末尾まで実行されることを示している。参考のために、
図6には、エンドパラメータ105の値が0.7である場合において終了セグメントS
endの表示が終了する位置EPを示している。
【0054】
なお、開始セグメントS
startでも終了セグメントS
endでもないセグメントS
iにおいては、すべての区間で表示処理が実行されるため、t値は特段の意味を有さない。スタートパラメータ104及びエンドパラメータ105は、1つのパスデータPAに1つずつ存在するものである。
【0055】
キャットマル−ロム曲線について、説明する。キャットマル−ロム曲線によるセグメントS
iは、属性である位置111(
図2を参照)として、その両端に位置する2つの位置データP
i,P
i+1と、さらにその外側に位置する2つの位置データP
i−1,P
i+2とを含んで構成される。
図1に示したGPU40は、これら4つの位置データP
i−1〜P
i+2の座標をキャットマル−ロム曲線のコントロールポイントとして用いることにより、セグメントS
iの具体的な形状を決定するよう構成される。
【0056】
図7は、
図6に示したセグメントS
i,S
i+1のそれぞれと、GPU40によって描画されるキャットマル−ロム曲線との関係を示す図である。同図中段には、4つの位置データ{P
i−1,P
i,P
i+1,P
i+2}の組によって、位置データP
i,P
i+1のそれぞれにより示される位置の間に存在するセグメントS
iの具体的な形状が定義されることを示している。また、同図下段には、4つの位置データ{P
i−1,P
i,P
i+1,P
i+2}の組を1つ右にスライドしてなる4つの位置データ{P
i,P
i+1,P
i+2,P
i+3}の組によって、位置データP
i+1,P
i+2のそれぞれにより示される位置の間に存在するセグメントS
i+1の具体的な形状が定義されることを示している。
【0057】
なお、開始セグメントS
startを構成する曲線の形状は、パスデータPAの始点に対応する位置データP
1と同じ位置に設定した位置データP
0を含む4つの位置データ{P
0,P
1,P
2,P
3}の組によって定義される。同様に、終了セグメントS
endを構成する曲線の形状は、パスデータPAの終点に対応する位置データP
Nと同じ位置に設定した位置データP
N+1を含む4つの位置データ{P
N−2,P
N−1,P
N,P
N+1}の組によって定義される。ただし、位置データP
0に位置データP
1と異なる位置を示す値を設定してもよく、位置データP
N+1に位置データP
Nと異なる位置を示す値を設定してもよい。
【0058】
図2に戻り、精度データ106は、パスデータPAを符号化する際に用いる符号化の精度を示す属性であり、値が大きいほど、
図9を参照して後述する変換処理(ステップS21)の結果として得られる整数型データの精度が細かいことを示す。精度データ106は、1つのパスデータPAに対して1つ割り当てられる。このようにパスデータPAごとに精度データ106が割り当てられるのは、パスデータPAを生成する際に使用されたスタイラス2の種類や座標検出装置1の種類などによって、位置データPや幅データWの取得精度が異なる可能性があるためである。
【0059】
以下、
図8〜
図13を参照しながら、
図1に示したデジタルインク処理部20によって実行されるデジタルインク100の符号化及び復号処理について、詳しく説明する。
【0060】
図8は、デジタルインク100の符号化処理を示すフロー図である。同図に示すように、デジタルインク処理部20は、デジタルインク100の中に含まれるパスデータPAの数(Z個とする)だけ、ステップS2〜S12の処理を繰り返すよう構成される(ステップS1)。この繰り返しにより、各パスデータPAが順次符号化される。詳しくは後述するが、符号化された各パスデータPAはそれぞれパスメッセージBinPathを構成し、各パスメッセージBinPathは、1つのバイナリストリームBinInk内に区別可能な状態で順次追加される。なお、
図8及び後掲の図においては、j番目のパスデータPAをパスデータPA[j]と表すことにする。
【0061】
j番目のパスデータPA[j]に関して、デジタルインク処理部20はまず、
図2に示したスタートパラメータ104、エンドパラメータ105、及び精度データ106を取得する(ステップS2)。デジタルインク処理部20は通常、スタートパラメータ104及びエンドパラメータ105の値として、それぞれの初期値0,1を取得する。ただし、パスデータPA[j]がユーザ操作等による他のパスデータPAの切断の結果として生成されたものである場合、スタートパラメータ104又はエンドパラメータ105が初期値とは異なる値になることがある。また、デジタルインク処理部20は、精度データ106の値として、バスデータPA[j]を生成するために使用されたスタイラス2及び座標検出装置1の組み合わせに対応して予め定められた値を取得する。
【0062】
次にデジタルインク処理部20は、パスデータPA[j]に含まれるN個の位置データP
1〜P
Nの符号化処理を実行することにより、N個の符号化位置データEP
1〜EP
Nを取得する(ステップS3)。
【0063】
図9は、位置データPの符号化処理のフロー図である。後ほど説明するが、この符号化処理は幅データWの符号化においても使用される。同図に示すように、この符号化処理は、1以上の入力データD
i(i≧1)のそれぞれについて繰り返し実行される(ステップS20)。この符号化処理がステップS3で呼び出される場合、1以上の入力データD
iはN個の位置データP
1〜P
Nとなる。
【0064】
i番目の入力データD
iに関して、デジタルインク処理部20はまず、
図8のステップS2で取得した精度データ106を用いて、浮動小数型である入力データD
iを整数型データINTD
iに変換する処理を行う(ステップS21)。この処理を行うことにより、入力データD
iのビット数を削減できるとともに、後述する
図8のステップS8,S9で行う可変長符号化の結果として生成されるバイナリデータのビット数をも削減することが可能になる。
【0065】
次にデジタルインク処理部20は、入力データD
iを符号化してなる符号化データED
iを導出する。具体的には、iが1に等しいか否かを判定し(ステップS22)、等しいと判定した場合には、整数型データINTD
iを符号化データED
iとして出力する(ステップS23)。一方、等しくないと判定した場合には、整数型データINTD
iから1つ前の整数型データINTD
i−1を減じてなる値INTD
i−INTD
i−1(差分値)を符号化データED
iとして出力する(ステップS24)。ステップS3においては、こうして出力された符号化データED
iが、符号化位置データEP
iとして取得される。
【0066】
図8に戻る。デジタルインク処理部20は続いて、パスデータPA[j]に含まれるM個の幅データW
1〜W
Mを1以上の入力データD
iとして
図9に示す符号化処理を実行することにより、M個の符号化幅データEW
1〜EW
Mを取得する(ステップS4)。符号化処理の詳しい内容については、
図9を参照して説明したとおりである。
【0067】
この後に実行されるステップS5〜S12の処理は、パスデータPA[j]を構成する各データを所定のスキーマに従って符号化することによって、バイナリストリームBinInkに追加するためのパスメッセージBinPath[j]を生成する処理である。
【0068】
図10は、1つのパスデータPAを符号化することによって得られるパスメッセージBinPathのスキーマ(デジタルインク100のデータ構造)の例を示す図である。このスキーマは、
図8に示す符号化処理によってパスメッセージBinPathを生成する目的の他、後述する
図11及び
図12に示す復号処理においてパスデータPAを構成する各データを復号するためにも用いられる。なお、
図10においては、スキーマを記述するために、インタフェース記述言語(Interface Definition Language)を用いている。
【0069】
図10に示すように、本実施の形態によるパスメッセージBinPathのスキーマにおいては、2行目にスタートパラメータ104のフィールド(startParameter)が定義され、3行目にエンドパラメータ105のフィールド(endParameter)が定義され、4行目に精度データ106のフィールド(decimalPrecision。第3のバイナリ)が定義され、5行目に位置データPのフィールド(Positions。第1のバイナリ)が定義され、6行目に幅データWのフィールド(strokeWidths。第2のバイナリ)が定義され、7行目にカラーデータのフィールド(strokeColor)が定義される。なお、カラーデータは、ストロークカラー102の具体的な値である。各フィールドは、パスメッセージBinPath内の互いに異なる領域に格納される。例えば、幅データWのフィールドは、一連のx座標データ、y座標データ、及びz座標データの組を示す位置データP(ただし、z座標データは3次元の場合のみ)のフィールドから全体として分離されている。
【0070】
各フィールドの名称に付加された「optional」の文字は、そのフィールドが省略可能であることを示している。また、「repeated」の文字は、そのフィールドが複数の値を持ち得ることを示している。さらに、「float」は浮動小数点型、「uint32」は32ビット符号なし整数型、「sint32」は32ビット符号あり整数型をそれぞれ示している。また、各フィールドの等号の直後に記載される数値はフィールドを識別するためのタグの値を示し、「default」により示される値はそのフィールドの初期値を示している。「packed=true」は、そのフィールドに格納されているデータが圧縮されたものであることを示している。ここでいう圧縮されたものとは、
図9に示した符号化処理を経たデータであることを意味する。
【0071】
図8に戻り、ステップS5において、デジタルインク処理部20は、タグの値に1を設定する。そして、タグの値の判定を行う(ステップS6)。タグの値が1,2,3のいずれかである場合、デジタルインク処理部20は、タグの値と、対応するデータとを固定長符号化する処理を行う(ステップS7)。
【0072】
ステップS7で符号化の対象となるのは、ステップS2で取得したスタートパラメータ104、エンドパラメータ105、精度データ106である。タグの値が1である場合、デジタルインク処理部20はスタートパラメータ104を固定長符号化することによって浮動小数点型のデータを生成し、パスメッセージBinPath[j]に追加する(ステップS10)。また、タグの値が2である場合、デジタルインク処理部20はエンドパラメータ105をすることによって浮動小数点型のデータを生成し、パスメッセージBinPath[j]に追加する(ステップS10)。さらに、タグの値が3である場合、デジタルインク処理部20は精度データ106を固定長符号化することによって32ビット符号なし整数型のデータ(第3のバイナリ)を生成し(精度データ符号化ステップ)、パスメッセージBinPath[j]に追加する(ステップS10)。
【0073】
ここで、精度データ106のタグの値として、位置データP、幅データW、及びカラーデータよりも小さい値を付与しているのは、後述する
図11及び
図12に示す復号処理において、精度データ106がこれらのデータよりも先に復号されるようにするためである。精度データ106を先に復号することで、位置データP、幅データW、及びカラーデータを正しく復号することが可能になる。
【0074】
ステップS10で各データをパスメッセージBinPath[j]に追加したデジタルインク処理部20は、現在のタグの値が5であるか否かを判定し(ステップS11)、5でなければタグの値を1インクリメントし(ステップS12)、処理をステップS6に戻す。なお、カラーデータの符号化を考慮する場合、ステップS11の判定は、タグの値が6であるか否かの判定となる。タグの値が5であると判定した場合の処理については、後述する。
【0075】
ステップS6でタグの値が4であると判定した場合、デジタルインク処理部20は、タグの値4と、ステップS3で取得したN個の符号化位置データEP
1〜EP
Nのそれぞれとを可変長符号化することにより、一連のx座標データ、y座標データ、及びz座標データの組を示す第1のバイナリ(ただし、z座標データは3次元の場合のみ)を生成し(ステップS8。座標符号化ステップ)、生成した第1のバイナリをパスメッセージBinPath[j]に追加する(ステップS10)。可変長符号化の具体的な方式としては、符号化の対象となる値の絶対値が小さいほど符号化の結果として得られる値のビット数が少なくなるものであれば、特に限定されない。例えば、指数ゴロム符号や、グーグルプロトコルバッファで用いられるsint32などを利用することが可能である。
【0076】
ここで、スタイラス2の動きにより取得される位置データPの値は、連続した2つの値が近い値をとる傾向がある。これはスタイラス2が物理的に1つしかなく、これがパネル面をなぞるように動かされるためである。したがって、
図9を参照して説明したように、連続する2つの位置データP間の差分値を符号化対象値とし、この値の符号化に可変長符号を用いることにより発生確率が比較的高い値を短いビット数の符号にすることができ、それによってデジタルインク100のビット数を削減することが可能になる。
【0077】
ステップS6でタグの値が5であると判定した場合、デジタルインク処理部20は、タグの値5と、ステップS4で取得したM個の符号化幅データEW
1〜EW
Mのそれぞれとを可変長符号化することにより、第1のバイナリから全体として分離されてなる第2のバイナリを生成し(ステップS9。幅符号化ステップ)、生成した第2のバイナリをパスメッセージBinPath[j]に追加する(ステップS10)。可変長符号化の具体的な方式としては、ステップS8と同様に、符号化の対象となる値の絶対値が小さいほど符号化の結果として得られる値のビット数が少なくなるものであれば、特に限定されない。例えば、指数ゴロム符号や、グーグルプロトコルバッファで用いられるsint32などを利用することが可能である。
【0078】
ここで、位置データPの場合と同様、幅データWについても、連続した2つの値が近い値をとる傾向がある。これは、幅データWが上述したように筆圧値WPから決定されるものであり、筆圧値WPは、スタイラス2を物理的に押し付ける力をサンプリングして得られる値であるためである。したがって、この場合にも、連続する2つの幅データW間の差分値を符号化対象値とし、この値の符号化に可変長符号を用いることにより発生確率が比較的高い値を短いビット数の符号にすることができ、それによってデジタルインク100のビット数を削減することが可能になる。
【0079】
ステップS9の後のステップS10が終了すると、処理中のパスデータPAに関する各データがパスメッセージBinPath[j]内にすべてシリアライズされることになる。なお、カラーデータの符号化を考慮する場合には、処理中のパスデータPAに関する各データがパスメッセージBinPath[j]内にすべてシリアライズされるのは、さらにカラーデータについての処理も終了した後となる。
【0080】
こうして生成されたパスメッセージBinPath[j]は、復号順で第2のバイナリより前に第3のバイナリが含まれるように、第1乃至第3のバイナリを互いに異なる領域に含むバイナリデータとなる。デジタルインク処理部20は、ステップS11でタグの値が5(カラーデータの符号化を考慮する場合には6)であると判定した場合、パスメッセージBinPath[j]が完成したと判断し、パスメッセージBinPath[j]のビット長と、パスメッセージBinPath[j]とを順次バイナリストリームBinInkに追加する処理を行う(ステップS13。シリアライズステップ)。
【0081】
デジタルインク処理部20が以上の処理をデジタルインク100内のZ個のパスデータPAのそれぞれについて実行することにより、各パスデータPAのパスメッセージBinPathをシリアライズしてなるバイナリストリームBinInkが完成する。
【0082】
表1は、以上の処理の結果として生成されるバイナリストリームBinInkの構成を示している。この表に示すように、バイナリストリームBinInkは、パスメッセージBinPathのビット長とパスメッセージBinPathの実体との組み合わせを、パスデータPAの個数分、繰り返し含んで構成される。なお、パスメッセージBinPathには、
図10のスキーマに示した{タグの値、バイナリ}のペアが含まれる。
【0084】
次に、
図11及び
図12は、デジタルインク100の復号処理を示すフロー図である。同図に示すように、デジタルインク処理部20は、まず初めにバイナリストリームBinInkを含むコンテナファイルCF、又は、バイナリストリームBinInkがフラグメント化されてなる通信パケットから、デジタルインク100を含むバイナリストリームBinInkを抽出する処理を行う(ステップS30)。
【0085】
次にデジタルインク処理部20は、変数jに0を代入し(ステップS31)、ステップS30で抽出したバイナリストリームBinInkからパスメッセージBinPath[j]のビット長及びパスメッセージBinPath[j]の抽出を試みる(ステップS32)。その結果、抽出できた場合には
図12のステップS34に処理を移し、抽出できなかった場合には処理を終了する。
【0086】
ステップS34以降の処理は、
図10に示したスキーマに従って、パスメッセージBinPath[j]内に格納されている各データ(スタートパラメータ104、エンドパラメータ105、精度データ106、位置データP、幅データW、カラーデータ)を復号する処理である。
【0087】
具体的に説明すると、デジタルインク処理部20はまず、パスメッセージBinPathの未だ復号していない部分に最初に含まれるタグの復号を試みる(ステップS34)。そして、復号できたか否かを判定し(ステップS35)、できなかったと判定した場合には、変数jの値を1インクリメントしたうえで(ステップS36)、処理を
図11のステップS32に戻す。これにより、次のパスメッセージBinPath[j]についての処理が開始されることになる。
【0088】
一方、ステップS35で復号できたと判定した場合には、復号したタグの値の判定を行う(ステップS37)。その結果、タグの値が1,2,3のいずれかであると判定した場合、デジタルインク処理部20は、それぞれのタグの後方領域に格納されている固定長のバイナリ列から、対応する固定長の各データを復号する処理を行う(ステップS38)。こうして復号されるデータは、タグの値が1の場合にはスタートパラメータ104、タグの値が2の場合にはエンドパラメータ105、タグの値が3の場合には精度データ106となる。デジタルインク処理部20は、あるタグの値についてステップS38が終了した場合には、その都度、ステップS34に処理を戻し、次のタグの値の復号を実施する。
【0089】
次に、ステップS37でタグの値が4であると判定した場合、デジタルインク処理部20は、4であるタグの後方領域(第1の領域)に格納されているバイナリ列からN個の位置データP
1〜P
Nを復号する処理を行う(ステップS39,S40。位置データ復号ステップ)。
【0090】
具体的に説明すると、デジタルインク処理部20はまず、ステップS39において、符号化されたバイナリ列(第1のバイナリ)からN個の整数値型の符号化対象値を可変長復号する。この処理は
図8に示したステップS8の処理の逆処理であり、結果としてN個の符号化位置データEP
1〜EP
Nが取得される。
【0091】
続いてデジタルインク処理部20は、ステップS40において、N個の符号化位置データEP
1〜EP
Nから浮動小数点型のN個の位置データP
1〜P
Nを復元するための復号処理を行う。
【0092】
図13は、位置データPの復号処理のフロー図である。後ほど説明するが、この復号処理は幅データWの復号においても使用される。同図に示すように、この復号処理は、1以上の入力データED
i(i≧1)のそれぞれについて繰り返し実行される(ステップS50)。この復号処理がステップS40で呼び出される場合、1以上の入力データED
iはN個の符号化位置データEP
1〜EP
Nとなる。
【0093】
i番目の入力データED
iに関して、デジタルインク処理部20はまず、iが1に等しいか否かを判定し(ステップS51)、等しいと判定した場合には、入力データED
iを整数型データINTD
iとして取得する(ステップS52)。一方、等しくないと判定した場合には、入力データED
iに1つ前の整数型データINTD
i−1を加算してなる値ED
i+INTD
i−1を整数型データINTD
iとして取得する(ステップS53)。
【0094】
次にデジタルインク処理部20は、
図12のステップS38で復号済みの精度データ106を用いて、整数型データINTD
iを浮動小数型のデータD
iに変換して出力する処理を行う(ステップS54)。ステップS40においては、こうして出力されたデータD
iが位置データP
iとして取得されることになる。
【0095】
図12に戻る。ステップS40の処理を終えたデジタルインク処理部20は、ステップS34に処理を戻し、次のタグの値の復号を実施する。
【0096】
次に、ステップS37でタグの値が5であると判定した場合、デジタルインク処理部20は、5であるタグの後方領域(第1の領域とは異なる第2の領域)に格納されているバイナリ列からM個の幅データW
1〜W
Mを復号する処理を行う(ステップS41,S42。幅データ復号ステップ)。
【0097】
具体的に説明すると、デジタルインク処理部20はまず、ステップS41において、符号化されたバイナリ列(第2のバイナリ)からN個の整数値型の符号化対象値を可変長復号する。この処理は
図8に示したステップS9の処理の逆処理であり、結果としてM個の符号化幅データEW
1〜EW
Mが取得される。
【0098】
続いてデジタルインク処理部20は、ステップS42において、M個の符号化幅データEW
1〜EW
Mを1以上の入力データED
iとして
図13に示す復号処理を実行することにより、浮動小数点型のM個の幅データW
1〜W
Mを復元する。復号処理の詳しい内容については、
図13を参照して説明したとおりである。
【0099】
M個の幅データW
1〜W
Mを復元したデジタルインク処理部20は、MとNの値を比較する(ステップS43)。その結果、MがNより小さくない(又は、MがNに等しい)と判定した場合、デジタルインク処理部20は、ステップS34に処理を戻し、次のタグの値の復号を試みる。一方、MがNより小さいと判定したデジタルインク処理部20は、例えばM番目の幅データW
Mにより、M+1番目〜N番目の幅データW
M+1〜W
Nを補完する処理を行う(ステップS44。幅補完ステップ)。具体的には、幅データW
M+1〜W
Nに幅データW
Mの値を代入する。これにより、MがNより小さく、すべての位置データPに対応する幅データWが存在しない場合にも、すべての位置データPに幅データWを対応付けることが可能になる。なお、代入する幅データWは、必ずしも幅データW
Mでなくてもよく、幅データW
1〜W
Mのいずれかであればよい。ステップS44の完了後、デジタルインク処理部20は、ステップS34に処理を戻し、次のタグの値の復号を試みる。
【0100】
以上説明したように、本実施の形態によるデジタルインクの符号化方法、復号方法、及びデータ構造によれば、固定幅(M=1)であっても可変幅(1<M≦N)であっても、同一の復号方法によりデジタルインクを復号できるようになる。また、ストロークの少なくとも一部を固定幅にする場合(1≦M<N)には、N個未満の幅データを付加すれば足りることになるので、ストロークの全部を可変幅にする場合(M=N)と比べてデジタルインクのビット数を削減することが可能になる。
【0101】
また、本実施の形態によるデジタルインクの符号化方法、復号方法、及びデータ構造によれば、座標検出装置1又はスタイラス2ごとに異なり得る精度データ106に基づき、ストローク単位で位置データPを符号化ないし復号可能となる。したがって、1つのデジタルインク100内に、互いに精度の異なる複数の位置データPを配置することが可能になる。幅データW及びカラーデータについても同様である。
【0102】
例えば、本実施の形態によるデジタルインクの符号化方法、復号方法、及びデータ構造によれば、スタイラス2が第1及び第2のスタイラス(第1及び第2のポインティングデバイス)を含む場合、バイナリストリームBinInkは、第3のバイナリとして、第1のスタイラスについて取得される位置データPの精度を示す第1の精度データと、第2のスタイラスについて取得される位置データPの精度を示す第2の精度データとを含む。そしてこの場合、
図9のステップS21においては、第1のスタイラスについて取得される一連の位置データPを第1の精度データを用いて符号化する一方、第2のスタイラスについて取得される一連の位置データPを第2の精度データを用いて符号化する。したがって、第1のスタイラスによるストロークを構成する一連の位置データPと、第2のスタイラスによるストロークを構成する一連の位置データPとが、異なる精度データ106に基づいて符号化される。
【0103】
次に、
図14〜
図18を参照しながら、
図1に示したデジタルインク処理部20によって実行されるコンテナファイルCFの生成処理について、詳しく説明する。なお、以下では、非特許文献4に記載されるOPC(OpenPackagingConvention)のフォーマットに従ったファイルの生成方法を説明する。OPCは、XMLファイル群及び非XMLファイル群(SVGファイル、及び、バイナリストリームBinInk等)がZIPアーカイブされてなるコンテナファイルCFのフォーマットである。
【0104】
図14は、コンテナファイルCFを構成するエンティティを説明するER図である。ER図の表記方法及び多重度は
図2と同じであるが、図中に矩形で示す各エンティティは、上述したOPCの「パッケージ」と、その中に含まれる「OPCパーツ」とに対応している。
【0105】
図14に示すように、コンテナファイルCF内には、エンティティとしてパッケージ301、コア情報302、アプリ情報303、SVGセクション情報304、バイナリストリーム305が含まれる。
【0106】
コア情報302は、コンテナファイルCFに関する一般的な情報と、このパッケージ全体に含まれる各ファイルについてのメタデータとを含む情報であり、パッケージ301と1対1に対応する(関係rel1)。アプリ情報303は、コンテナファイルCFを生成するために用いられたオリジナルアプリケーションを示す情報を含む情報であり、パッケージ301と1対1に対応する(関係rel2)。
【0107】
SVGセクション情報304は、SVGに従って符号化されたマルチメディアコンテンツを含む情報であり、パッケージ301との間に1対0以上の関係rel3を有する。バイナリストリーム305は、本発明によるデジタルインクの符号化方法により生成されたバイナリストリームBinInkであり、SVGセクション情報304との間に1対0以上の関係rel4を有する。
【0108】
なお、パッケージ301、コア情報302、及びこれらの関係rel1は、非特許文献4に記載されるOPCに規定されるものである。これに対し、その他のエンティティ及びこれらに関する関係rel2〜rel4(破線で囲った部分)は、本発明によるOPCの拡張に相当する。
【0109】
図15は、コンテナファイルCF内にアーカイブされるファイル群の構成例を示す図である。同図において、長方形はディレクトリを示し、平行四辺形はファイルを示している。同図に示すように、パッケージ301は実体としてはディレクトリであり、関係ディレクトリ400(_rels)、プロパティディレクトリ410(prop)、セクションディレクトリ420(sections)という3つのディレクトリを含んで構成される。
【0110】
関係ディレクトリ400には、パッケージ301とパッケージ301に含まれる各パーツとの関係(
図14に示した関係rel1〜rel3)を示す関係ファイル401(.rels)が含まれる。
【0111】
図16(a)は、関係ファイル401の具体的な内容の例を示す図である。同図に示す「/props/core.xml」はコア情報302のURI(Uniform Resource Identifier)であり、「/props/app.xml」はアプリ情報303のURIであり、「/sections/section0.svg」は1番目のSVGセクション情報304のURIである。同図に示すように、関係ファイル401には、コア情報302、アプリ情報303、SVGセクション情報304のそれぞれについて、後にコンテナファイルCFを参照するコンピュータがその情報を識別するための識別情報(Id)と、その情報のタイプを示す情報(Type)と、その情報のURIとが対応付けて格納される。なお、関係ファイル401並びに後述する関係ファイル422及びSVGファイル423は、XMLに従って記述されたXMLデータがUTF−8等のテキストの符号化方法によってバイナリ列化されてなるXMLファイルである。
【0112】
例えば、
図16(a)の例による関係ファイル401には、対応するパッケージ301に「section0」という識別情報が付与されたセクション(並びにコンテンツ)が存在し、そのURIが「/sections/section0.svg」あるいはその位置から派生する位置であることが記載されており、さらに、そのセクションには、「/props/core.xml」の位置に示されるメタデータが付与されることが記載されている。
【0113】
図15に戻り、プロパティディレクトリ410には、コア情報302が記述されてなるXMLファイル411(core.xml)と、アプリ情報303が記述されてなるXMLファイル412(app.xml)とが含まれる。
図16(b)は、XMLファイル411の具体的な内容の例を示し、
図16(c)は、XMLファイル412の具体的な内容の例を示している。例えば
図16(b)に示した「Author_name_0001」は、コンテナファイルCFの作成者の情報を示している。
【0114】
セクションディレクトリ420には、関係ディレクトリ421(_rels)と、それぞれSVGセクション情報304が記述されてなる1以上のSVGファイル423(section0.svg,section1.svg)と、メディアディレクトリ424(media)とが含まれる。なお、
図15には2つのSVGファイル423を示しているが、これは例示であり、SVGファイル423の数は2つに限定されない。
【0115】
メディアディレクトリ424には、それぞれ本発明によるデジタルインクの符号化方法によって符号化されたバイナリストリーム305(バイナリストリームBinInk)である1以上のバイナリファイル425(paths0.protobuf,paths1.protobuf)が含まれる。なお、
図15には2つのバイナリファイル425を示しているが、これは例示であり、バイナリファイル425の数は2つに限定されない。また、関係ディレクトリ421には、1以上のSVGファイル423のそれぞれに対応して、1以上のバイナリファイル425との関係(
図14に示した関係rel4)を示す関係ファイル422(section0.svg.rel,section1.svg.rel)が格納される。
【0116】
図17(a)は、関係ファイル422の具体的な内容の例を示す図である。例えば、この例においては、「paths0.protobuf」であるバイナリファイル425を示すターゲットID「strokes0」が記述されており、これにより、「paths0.protobuf」がこの関係ファイル422に対応するものであることが示されている。また、
図17(b)は、SVGファイル423の具体的な内容の例を示す図である。
【0117】
図18は、以上で説明した構造を有するコンテナファイルCFの生成方法のフロー図である。以下、この
図18を参照しながら、
図1に示したデジタルインク処理部20によるコンテナファイルCFの生成処理について、詳しく説明する。
【0118】
コンテナファイルCFの生成処理は、まず、
図8に示したデジタルインク100の符号化処理を行ってバイナリストリームBinInkを得ることから開始される。すなわち、デジタルインク処理部20はまず、スタイラス2(
図1を参照)が平面にダウンされてから、該平面からアップされるまでの動作に伴い取得されたN個の位置データPを第1の符号化方法(
図8のステップS3,S4,S7〜S9において実行される符号化方法の総体)により符号化することによって、バイナリストリームBinInkを取得する(ステップS60。第1の符号化ステップ)。
【0119】
次にデジタルインク処理部20は、バイナリストリームBinInkに付与すべきメタデータ(
図16(b)に示した「Author_name_0001」に対応する作成者の情報など)を取得し(ステップS61)、該メタデータを含むコア情報302(第1のXMLデータ)を第2の符号化方法(UTF−8等)により符号化することによって、
図15に示したXMLファイル411(Core.xml。第1のXMLファイル)を生成する(ステップS62。第1のメタデータバイナリ生成ステップ)。
【0120】
続いてデジタルインク処理部20は、ステップS60で取得したバイナリストリームBinInkを示すターゲットIDと、ステップS62で生成したXMLファイル411との関係を示すXMLデータ(第2のXMLデータ)を生成し(ステップS63)、該XMLデータを上記第2の符号化方法により符号化することによって、
図15に示した関係ファイル401(.rels。第2のXMLファイル)を生成する(ステップS64。第2のメタデータバイナリ生成ステップ)。
【0121】
そして最後に、デジタルインク処理部20は、ステップS60で取得したバイナリストリームBinInkと、ステップS62,S64で生成したXMLファイル411及び関係ファイル401とを、1つのコンテナファイルCF(パッケージ)内にアーカイブする(ステップS65。パッケージ生成ステップ)。
【0122】
以上説明したように、本実施の形態によるデジタルインクを含むファイルの生成方法によれば、ストロークを構成する一連の位置データを符号化することによって生成されたバイナリストリームに対し、XML等の汎用の記述法によりメタデータを付与し、それぞれを1つのコンテナファイルCF内にアーカイブすることが可能になる。これにより、例えば本発明に係る符号化方法により生成されたバイナリストリームBinInkを復号できないアプリケーションであっても、OPC形式のコンテナファイルCFに格納されたXMLファイルを解釈することが可能であれば、そのメタデータを得ることが可能になる。
【0123】
以上、本発明の好ましい実施の形態について説明したが、本発明はこうした実施の形態に何等限定されるものではなく、本発明が、その要旨を逸脱しない範囲において、種々なる態様で実施され得ることは勿論である。
固定幅であっても可変幅であっても同一の復号方法によりデジタルインクを復号可能であり、かつ、ストロークの少なくとも一部を固定幅にする場合に、ストロークの全部を可変幅にする場合と比べてデジタルインクのビット数を削減できるデジタルインクの符号化を実現する。本発明によるデジタルインクの符号化方法は、スタイラスの動作に伴って取得されたN個の位置データPを符号化することによって、一連のx座標データ及びy座標データの組を示す第1のバイナリを取得するステップS8と、N個の位置データPそれぞれの位置における幅を決定するM個(Mは1以上N以下の整数)の幅データWを符号化することによって、第1のバイナリから全体として分離されてなる第2のバイナリを取得するステップS9と、第1及び第2のバイナリを互いに異なる領域に含むバイナリストリームBinInkを生成するシリアライズステップS13と、を含む。