以下に図面を参照して、実施形態の説明を行う。
図1は、一実施形態に係る3次元モデル生成システムの構成の一例を示している。3次元モデル生成システム1は、形状データ測定装置11、3次元スキャナ(3Dスキャナ)12、仮想形状生成装置21、モデル提供装置31、出力装置33を有する。形状データ測定装置11、仮想形状生成装置21、そしてモデル提供装置31は、ネットワーク10で相互接続されている。ネットワーク10は、いわゆるローカルエリアネットワーク(LAN)であってもよいし、あるいは形状データ測定装置11、仮想形状生成装置21、そしてモデル提供装置31がそれぞれ異なる拠点に設置されている場合には、これらがいわゆるインターネットなどの広域ネットワークで接続されていてもよい。
形状データ測定装置11には、3次元スキャナ(3Dスキャナ)12が接続されている。3Dスキャナ12は、物体(3次元オブジェクト)の形状を計測する装置である。本実施形態では、3Dスキャナ12によって、人体の全身の形状(以下、「人体形状」と呼ぶ)が計測される例を主に説明する。ただし、3Dスキャナ12による計測対象の物体は、人体に限定されず、任意の物体が計測されてもよい。
また、モデル提供装置31には、出力装置33が接続されている。本実施形態では、出力装置33は、たとえば液晶ディスプレイなどの表示装置である。出力装置33(及びモデル提供装置31)は、3次元モデル生成システム1(具体的には、形状データ測定装置11、仮想形状生成装置21)によって生成された、3次元物体の形状を表現したデータ(3次元形状データ)を、ユーザが容易に理解可能な形式(画像など)に変換してユーザに提供するための装置である。3次元形状データは、たとえば人体などの3次元物体の表面上の各位置の座標の集合からなる情報だが、出力装置33(及びモデル提供装置31)はこの情報から人体形状を表現する画像を生成し、表示する。なお、出力装置33は必ずしも液晶ディスプレイなどの表示装置でなくてもよい。たとえば、出力装置33が3Dプリンタであってもよい。
本実施形態に係る3次元モデル生成システム1は、ユーザの指定する条件に適合した人体形状の画像を出力装置に出力することを目的とする。たとえば身長や胸囲など、一般的に(人体の)体格を表す際に用いられる情報(本実施形態ではこの情報を「サイズ情報」と呼ぶ)を条件としてユーザが入力すると、その条件に合致した(あるいはその条件に近い)形状の画像を、出力装置33(たとえば液晶ディスプレイ)に出力(表示)する。また、出力装置33が3Dプリンタの場合には、ユーザが入力した条件に合致した(あるいは近い)形状の人体モデルを、3Dプリンタに作成させる。
以下ではまず、本実施形態に係る3次元モデル生成システム1を用いた、3次元モデルの生成方法の概要を説明する。まず、複数人の人体形状のデータ(人体の表面上の各点の座標)を3Dスキャナ12を用いて計測する。以下の説明では、k人(kは1以上の整数)の人体形状のデータが計測される例を説明する。kの値は特定の値に限定されないが、人体形状の測定は、比較的時間のかかる作業であり、人体形状が測定される対象となる人間(被測定者)を多く集めることも現実的ではない。そのためkの値は、3次元モデル生成システム1のユーザが、実際に集めてくることが可能な被測定者の数(たとえば数百人程度)に限定される。
形状データ測定装置11は、計測されたk人分の人体形状のデータについて、所定の変換処理を施し、形状データ測定装置11に記憶する。この所定の変換処理の詳細は後述する。また、以下では、形状データ測定装置11によって計測・収集された人体形状のデータ、あるいはこの人体形状のデータに対して所定の変換処理を施したデータのことを「実測データ」と呼ぶ。
先に述べた通り、人体形状の測定は比較的時間のかかる作業であり、多くの被測定者の人体形状データを収集することは難しい。そのため、k人分の実測データ(人体形状のデータ)の中に、ユーザが入力する条件に適合する体型(形状)の実測データが存在する可能性は決して高くない。そのため、本実施形態に係る3次元モデル生成システム1は、k人分の実測データに対して一種の統計的処理(多変量解析)を施し、その結果得られたデータをもとに、実測データとは異なる形状の、多くの人体形状データを生成する。たとえばユーザが、身長や胸囲を入力条件として指定する場合、多種多様な身長の人体形状データや、多種多様な胸囲の人体形状データが生成される。この処理は主に仮想形状生成装置21で実施される。また本実施形態では、仮想形状生成装置21が生成する人体形状データのことを、「仮想形状データ」と呼ぶ。
モデル提供装置31は、ユーザから身長や胸囲などの条件が入力されると、多数の仮想形状データの中から、入力された条件に適合する人体形状データを選択する。そしてモデル提供装置31は、選択された人体形状データをもとに、人体形状の3次元画像を生成して出力装置33に出力(表示)する。
本実施形態で用いられる、形状データ測定装置11、仮想形状生成装置21、モデル提供装置31は、いわゆるPCサーバなどの、汎用的な用途で用いられるコンピュータである。図2に、形状データ測定装置11のハードウェア構成の概略図を示す。形状データ測定装置11は、CPU51、メモリ52、インタフェース53、補助記憶装置54、ドライブ装置55、のハードウェアエレメントを有し、これらはたとえばバス50で相互接続されている。
CPU51はいわゆるマイクロプロセッサで、後述するメモリ52に格納(ロード)されたプログラムを実行するハードウェアエレメントである。
メモリ52は、いわゆるRAM(Random Access Memory)などの揮発性半導体記憶装置で、CPU51で実行されるプログラムと、このプログラムが実行されるときに使用されるデータなどが記憶される。またメモリ52は、プログラムが実行されるときのワークエリア等にも使用される。なお、メモリ52はRAMに加えて、フラッシュメモリなどの不揮発性半導体記憶媒体を有していてもよい。
インタフェース53は、形状データ測定装置11がネットワーク10を介して外部装置(仮想形状生成装置21やモデル提供装置31など)と通信するためのハードウェアである。またインタフェース53は、形状データ測定装置11が3Dスキャナ12との通信(3Dスキャナ12が計測したデータの収集など)を行うためのハードウェアも含む。
補助記憶装置54は、たとえばハードディスクドライブ(HDD)などの不揮発性記憶装置であり、CPU51によって実行されるプログラムや、3Dスキャナ12から収集したデータを格納するために用いられる。なお、HDDのような磁気記憶装置のほか、SSD(Solid State Drive)などの、不揮発性半導体記憶装置が補助記憶装置54として用いられてもよい。
ドライブ装置55は、記録媒体56の読取装置である。記録媒体56はいわゆる可搬型記録媒体であり、たとえばCD−ROMやDVDなどの光学ディスク、あるいはSDメモリカードなどの半導体メモリである。
ドライブ装置55は、プログラムを形状データ測定装置11にインストールする(補助記憶装置54に格納する)ために用いられる。具体的には、形状データ測定装置11で実行されるプログラムが、DVDなどの可搬型記録媒体(記録媒体56)に記録された形態で提供される場合、形状データ測定装置11は、この可搬型記録媒体に記録されたプログラムをドライブ装置55によって読み取って、補助記憶装置54に格納する。ただし、形状データ測定装置11で実行されるプログラムは、必ずしも可搬型記録媒体(記録媒体56)に記録された形態で提供される必要はない。例えば、ネットワーク10経由で外部の装置から形状データ測定装置11に提供されてもよい。その場合には、形状データ測定装置11はインタフェース53を介して外部の装置からプログラムを受信して、補助記憶装置54に格納する。
なお、形状データ測定装置11は、上で説明したもの以外のハードウェアエレメントを有していてもよい。たとえば、キーボード、マウスなどの、ヒューマンインタフェースデバイス(HID)を有していてもよい。また、液晶ディスプレイ、プリンタなどの外部機器を接続するためのインタフェースコントローラを有していてもよい。
また、図2では形状データ測定装置11のハードウェア構成が示されているが、仮想形状生成装置21とモデル提供装置31のハードウェア構成も、図2と同様で良い。つまり仮想形状生成装置21とモデル提供装置31も、上で説明したハードウェアエレメントを備えている。
続いて、形状データ測定装置11、仮想形状生成装置21、モデル提供装置31で行われる処理の詳細を説明する。まず、形状データ測定装置11で行われる処理を、図3等を参照しながら説明する。図3は、形状データ測定装置11で行われる、実測データ収集処理のフローチャートである。なお、形状データ測定装置11のメモリ52にロードされたプログラム(以下、このプログラムを「実測データ収集プログラム」と呼ぶ)をCPU51が実行することにより、実測データ収集処理が実現される。
まずステップS101で、形状データ測定装置11(実測データ収集プログラム)は3Dスキャナ12を用いて、k人の人体の全身をスキャンして、k人の人体の全身形状のデータを収集する。また、形状データ測定装置11は、各人の得られた全身形状のデータを用いて、各人の相同モデルを作成する(本実施例では、この相同モデルを作成する処理のことを、相同モデル化と呼ぶ)。相同モデルは、例えば特許文献1に示されているように、人体の形状を同一点数のユークリッド座標値で表される同数の点と同一位相のポリゴンによって再構築したものである。
相同モデル化を行うことにより、たとえば各人(ここではk人)の人体の全身形状は、多数の頂点座標の集合として表現されることになる。本実施例では、1人の人体の形状が相同モデル化により、n個の頂点座標のセットで構成される例を説明する。また、ステップS101で計測されたk人の人体のうち、j番目(jは、1以上k以下の整数)の人体のn個の頂点をそれぞれ、Pj1,Pj2,Pj3,...,Pjnと表記する。また頂点座標Pjiは(iは、1以上n以下の整数である)、それぞれXYZ座標系(3次元直交座標系)の座標値(Xji,Yji,Zji)と表記される。また、不特定の人体の頂点座標を表現する際には、n個の頂点はそれぞれP1,P2,P3,...,Pnと表記され、頂点Pcの座標値は(Xc,Yc,Zc)と表記される(cは1以上n以下の整数)。また、頂点の添え字(頂点Pcであれば、cが添え字)のことを「頂点番号」と呼ぶ。
相同モデル化を行うことにより、各人の人体の身体的特徴点の位置が、同じ頂点番号の頂点として表現される。たとえば、頂点P1,P2,P3,...,Pnのうち、鼻の先端を表す頂点は、c番目の頂点Pcと決められている(cは1以上n以下の整数)。そのため、k人のうち、a番目の人の鼻の先端の座標値(Pac、=(Xac,Yac,Zac))、b番目の人の鼻の先端の座標値(Pbc=(Xbc,Ybc,Zbc))が容易に特定できる。なお、相同モデル化つまりステップS101で行われる処理は、特許文献1等に示されているように公知の処理であるため、詳細な説明は略す。
続いてステップS102では、各頂点P1,P2,P3,...,Pnの座標は、仮想的な球面の座標にマッピングされる。この処理は、3次元直交座標系の座標を、球面座標系に変換する処理と類似した処理である。図4に球面座標系の例を示す。図4に示す通り、球面上の点Qはたとえば、ある軸(z軸)と動径のなす角θと、先に述べたある軸(z軸)と直交する別の軸(たとえばx軸)と動径のなす角φ、及び動径の長さによって特定される(球面の場合、動径の長さは一定のため、図4では動径の長さの表記は略している)。なお、θとφの取り得る値の範囲はたとえば、0≦θ<π、0≦φ<2πである。
図5を用いて、ステップS102で行われるマッピング処理の概要を説明する。図5は、人体形状の各頂点がどのように球面上の点にマッピングされるかを表した概念図である。図5(a)は人体の形状と、人体形状の各頂点を例示した図である。なお、説明をわかりやすくするため、図5(a)には人体形状の断面を示しており、また図5(b)には、人体形状の各頂点座標がマッピングされる球面の断面(円)を示している。
先に述べた通り、球面上の点Qはたとえば、角θと、角φ、及び動径の長さ(定数)に表すことができる。また図4において動径の長さがr(定数)の場合、球面上の点Qは、以下の式(1)、(2)、(3)により表される。
x=r×sinθ×cosφ …(1)
y=r×sinθ×sinφ …(2)
z=r×cosθ …(3)
これは、球面(球面上の各点)が角θと角φの関数として表現できることを意味する。本発明の実施例に係る3次元モデル生成システム1ではこれと同様の考え方で、人体形状(人体形状の表面上の各点)を、角θと角φの関数として表現し、人体形状の各頂点座標値を保持する代わりに、関数(の係数)を管理する。人体形状が角θと角φの関数として表現される場合、3次元モデル生成システム1はある人物の人体形状のデータを管理(記憶)しておく際に、人体形状の各頂点座標値を保持する代わりに、関数(の係数)だけを管理すればよい。関数の係数を管理しておけば、3次元モデル生成システム1は人体形状の各頂点(のXYZ座標値)を計算により求めることが可能である。そして関数の係数だけを管理しておけばよいので、3次元モデル生成システム1はある人物の人体形状のデータを管理しておく際の記憶データ量を削減することが可能になる。ただし人体形状は複雑なため、球面上の点のように簡単な関数では表現できない。具体的には球面調和関数の線形和として人体形状の頂点を表現する。詳細は後述する。
また、人体形状を角θと角φの関数として管理(記憶)しておく場合、人体形状の各頂点(のXYZ座標値)が、(角θと角φの)一価関数として表される必要がある。たとえばある角θに対して、複数の座標値が定まる関数の場合には、人体形状の各頂点(のXYZ座標値)を計算により求めることができなくなるためである。
たとえば図5(a)において、人体形状の各頂点がマッピングされる角θを、人体内のある点(たとえば図5(a)の点O)と頂点を通過する線と、ある軸(たとえば鉛直方向軸(図5(a)において点Oを垂直方向に通過する線)とのなす角の角度である、という規則に基づいて、人体形状の各頂点に角θをマッピングした場合、頂点Pjbは、点Oと頂点Pjaを結ぶ線分上に位置する点であるので、頂点Pjbと頂点Pjaが同じ角度にマッピングされてしまう。このような規則に基づいて人体形状の各頂点に角θをマッピングすると、人体形状の各頂点(のXYZ座標値)を角θの一価関数として表すことができなくなる。そのため、本実施例に係る3次元モデル生成システム1では、人体形状の各頂点が異なる角θ、異なる角φにマッピングされるように、マッピング関係を定める。
図5では、図5(a)に示された各頂点Pj1,Pj2,Pj3,...,Pjn(つまりj番目の人のn個の頂点)がそれぞれ、図5(b)に示された球面(円)上の点Qj1,Qj2,Qj3,...,Qjnにマッピングされる例を示している。なお、先に述べた通り、球面上の点は、2つの角度(角θと角φ)を用いて表現(特定)されるが、ここでは説明をわかりやすくするため、角θのみを示している(角φがたとえば0等の定数であるケースが図示されているとみなすことができる)。
なお、人体形状の各頂点を球面上の点(角θ、角φ)にマッピングする際、上に述べたように各頂点が異なる角θ、異なる角φにマッピングされるようにすることに加えて、マッピング前の人体の形状(たとえば図5(a))を構成する各ポリゴン(複数の頂点から構成される)の面積比率が、マッピング後もできるだけ同じになるように、マッピング規則を定めると良い。たとえば人体形状の頂点P1,P2,P3,P4が球面上の点Q1,Q2,Q3,Q4にマッピングされ、頂点P1,P2,P3から構成されるポリゴン(三角形)と頂点P2,P3,P4から構成されるポリゴンの面積比がA:Bだった場合、マッピング後の点Q1,Q2,Q3,Q4から構成される2つのポリゴン(点Q1,Q2,Q3から構成される三角形と、点Q2,Q3,Q4から構成される三角形)の面積比が、できるだけA:Bに近くなるように、点Q1,Q2,Q3,Q4の位置(角θ、角φ)を定める。たとえば先に挙げた非特許文献2に示されている、Spherical parametrizationアルゴリズムを用いてマッピング規則を定めるとよい。
また、本実施形態では、各人の人体形状の各頂点にマッピングされる角(θ,φ)の値は同じである。つまり、s番目(sは1≦s≦kを満たす任意の整数)の人体形状の、i番目の頂点Psi=(Xsi,Ysi,Zsi)がマッピングされる球面上の点Qsiの角(θsi,φsi)は、t番目(tは1≦t≦kを満たす任意の整数。ただしs≠tとする)の人体形状のi番目の頂点Pti=(Xti,Yti,Zti)がマッピングされる球面上の点Qtiの角(θti,φti)と等しい。そのため以下の説明では、角θsiと角θtiを区別せずにθiと表記し、同様に角φsiと角φtiを区別せずに、φiと表記する。
続いて形状データ測定装置11(実測データ収集プログラム)は、球面調和関数の値を計算する(ステップS103)。本実施例に係る3次元モデル生成システム1では、人体形状の頂点Piの座標値(Xi,Yi,Zi)を角θと角φの関数として表現する。具体的には、j番目の人の人体形状の頂点Pjiの座標値(Xji,Yji,Zji)が、公知の球面調和関数の線形和で表現されるものと仮定する。具体的には頂点Pjiの座標値(Xji,Yji,Zji)が、以下の式(4)で表される。
上の式(4)において、Yl mは、以下の式(5)で表される関数であり、これが球面調和関数になる事が知られている。
l,mは次数で、l≧|m|の関係がある。またPl |m|はルジャンドルの陪多項式である。球面調和関数は公知の関数であるため、ここでは詳細は略す。また、式(4)において、球面調和関数Yl mの直前に記されている記号(係数)(alm_j,blm_j,clm_j)は定数値で、後述するステップS105で、k人の人体形状毎に算出される。また、式(5)及びこれ以降に挙げる式において、eは自然対数の底(ネイピア数)を表し、虚数単位を表す記号としては、英文字iを括弧で囲んだもの「(i)」が用いられる。
ステップS103では、このYl mの値を計算する。例として、次数lが0,1,2の場合のYl mの値を以下に示す。
式(6)から分かる通り、θiとφiの値が既知であれば、Yl mの値は三角関数の値を算出することで、容易に算出可能である。ステップS102で、各頂点座標と(θi,φi)とのマッピングが定まっているため、θiとφiの値が既知である。そのため、ステップS103では、形状データ測定装置11はステップS102で定めたθiとφiの値を用いて、球面調和関数Yl mの値を算出する。
なお、各頂点の座標値(Xi,Yi,Zi)を表現するために用いられる球面調和関数の個数(最大何次の球面調和関数まで用いるべきか)は、多いほど精度が高い。つまり、(Xi,Yi,Zi)が多くの球面調和関数の線形和で表現されていると、角度θiとφiの値を用いて(Xi,Yi,Zi)を計算したときに、元の計測データ(ステップS101で計測された値)に近い値が得られる。本願発明者による実験の結果では、50次程度の球面調和関数までを用いた場合に、極めて高い精度で各頂点の座標値(Xi,Yi,Zi)が算出できることが分かっている。
続いてステップS104で、形状データ測定装置11(実測データ収集プログラム)は、変数jを用意し、jの値を初期化する(jに1を代入する)。
ステップS105では、形状データ測定装置11(実測データ収集プログラム)は、j番目の人体形状の頂点座標値Pjiの座標値(Xji,Yji,Zji)と、上で述べた式(4)を用いて、式(4)の各係数(alm_j,blm_j,clm_j)を求める。この係数の算出には、例えば最小二乗法が用いられると良い。
ステップS101で計測した、j番目の人体形状の各頂点のX座標(Xj1,Xj2,...Xjn)と、上述の式(4)(及び角度θiとφiの値)を用いて算出されるX座標の値との誤差二乗和Ejxは以下の式(7)のように表される。
同様に、ステップS101で計測した、j番目の人体形状の各頂点のY座標(Yj1,Yj2,...Yjn)と、上述の式(4)(及び角度θiとφiの値)を用いて算出されるY座標の値との誤差二乗和は以下の式(8)に示される通りである。また、j番目の人体形状の各頂点のZ座標(Zj1,Zj2,...Zjn)と、上述の式(4)(及び角度θiとφiの値)を用いて算出されるZ座標の値との誤差二乗和は以下の式(9)に示される通りになる。なお、式(7),(8),(9)におけるnは、先に述べた通り、1人の人体の形状を構成する頂点座標の数である。
ステップS105では、上に示した式(7),(8),(9)の値Ejx,Ejy,Ejzの値が最小になるときの係数(alm_j,blm_j,clm_j)を算出する。たとえばハウスホルダー法などの、公知の計算方法を用いればよい。
係数が求められると、形状データ測定装置11はこの係数を形状データ測定装置11の記憶領域(補助記憶装置54など)に記憶する。この時、形状データ測定装置11はj番目の人の係数(alm_j,blm_j,clm_j)をj番目の人の頂点座標値のセット((Xj1,Yj1,Zj1),(Xj2,Yj2,Zj2),...(Xjn,Yjn,Zjn))と対応付けて記憶してもよいが、あるいは形状データ測定装置11はj番目の人の頂点座標値のセット((Xj1,Yj1,Zj1),(Xj2,Yj2,Zj2),...(Xjn,Yjn,Zjn))を記憶領域から削除し、係数(alm_j,blm_j,clm_j)がj番目の人の係数のセットであるという情報のみに対応付けて記憶してもよい。頂点座標値のセット(の近似値)は、係数のセットと式(4)を用いることで算出できるからである。
ステップS106では、形状データ測定装置11(実測データ収集プログラム)は、変数jに1を加算する。
ステップS107で、変数jの値がk(ステップS101で計測を行った人の数)を超過した場合、処理を終了する。変数jの値がk以下の場合には、形状データ測定装置11(実測データ収集プログラム)は再びステップS105を実行する。これを繰り返すことによりk人それぞれについて、関数の係数のセット(式(4)に示された係数(alm_j,blm_j,clm_j))を求めることができる。つまり形状データ測定装置11は、k人それぞれの人体形状データを、式(4)に示された関数として表現(関数に変換)することができ、かつk人それぞれの人体形状データを、式(4)に示された関数の形で管理(記憶)することができる。
なお、本実施形態においては、人体形状の頂点P1,P2,P3,...,Pnと球面上の点Q1,Q2,Q3,...,Qnのマッピング関係が固定的であるので、ステップS102、ステップS103の処理は予め実行しておいてもよい。つまり、人体形状の頂点P1,P2,P3,...,Pnと球面上の点Q1,Q2,Q3,...,Qnのマッピング関係の情報と、球面調和関数Yl mの値は、予め補助記憶装置54等の記憶領域に保存しておき、実測データ収集処理の実行時には、形状データ測定装置11(実測データ収集プログラム)はステップS102、ステップS103は実行せずに、記憶領域に保存された情報を用いてステップS105の処理を実行してよい。
続いて、仮想形状生成装置21で行われる処理を、図6等を参照しながら説明する。図6は、仮想形状生成装置21で行われる、仮想形状生成処理のフローチャートである。なお、仮想形状生成処理は、仮想形状生成装置21のCPU51が仮想形状生成装置21のメモリ52にロードされたプログラム(以下、このプログラムを「仮想形状生成プログラム」と呼ぶ)を実行することにより、実現される処理である。
仮想形状生成装置21は、形状データ測定装置11が実施した実測データ収集処理(図3)の結果得られたk人分の形状データに関連した係数(alm_j,blm_j,clm_j)を用いて、仮想形状データを算出する。そのため、仮想形状生成処理の実行が開始される前に、実測データ収集処理の実行が完了している必要がある。
まずステップS201で、仮想形状生成装置21(仮想形状生成プログラム)は、形状データ測定装置11から、k人分の係数を取得する。続いて仮想形状生成装置21(仮想形状生成プログラム)は、収集したk人分の係数の主成分分析を実施する。
主成分分析は公知の統計的手法であるため、ここでは概要のみを記す。主成分分析は、各データをできるかぎり情報損失を抑えるように張られた低次元の部分空間によって表現する統計的手法である。
ここまでの説明では、j番目の人の形状データから得られた係数(alm_j,blm_j,clm_j)と表記したが、以下では説明の簡単化のため、これらの係数alm_j,係数blm_j,係数clm_jを、「係数g」と呼ぶ。また、以下の説明では、形状データ測定装置11(実測データ収集プログラム)が実行する処理により、各人の形状データからh個の係数が得られる(各人の形状データがh個の係数に変換される)場合の例を中心に説明する。そして、j番目の人の形状データから得られたh個の係数をそれぞれ、gj1,gj2,...,gjhと表記する。また、h個の係数のセットgj1,gj2,...,gjhを、(j番目の人の)係数ベクトルと呼び、この係数ベクトルをGjと表記する。
ステップS201では、このk人分の係数ベクトル(G1,G2,...,Gk)の主成分分析が行われる。主成分分析の結果、複数の主成分ベクトル(部分空間の基底)が得られる。ここで、主成分分析の結果として得られる複数の主成分ベクトルをそれぞれ、p1,p2,...,prとするとき(rは2以上の整数)、係数ベクトルGjはたとえば以下の式(10)で表現することができる。なお、Gmeanは、k人分の係数ベクトル(G1,G2,...,Gk)の平均値を表すベクトルである(以下、平均値ベクトルと呼ぶ)。また、pqはh次元のベクトルである。具体的にはp1は第1主成分ベクトルを表し、p2,...,prはそれぞれ第2主成分ベクトル、…第r主成分ベクトルを表す。またsjqは主成分得点を表す。sjqはスカラー値である。また以下の説明では、sj1,sj2,...,sjrのセットをSjと表記する(Sjはr次元のベクトルである)。式(10)から分かる通り、sj1,sj2,...,sjrの値がすべて0の時、係数ベクトルGjは平均値ベクトルGmeanと等しい。
ステップS201で、仮想形状生成装置21(仮想形状生成プログラム)は、主成分分析を行い、その結果、上に示す主成分ベクトルを得る。ステップS201ではさらに、仮想形状生成装置21(仮想形状生成プログラム)は係数ベクトルGjごとに主成分得点のセットSjを得る。なお、以下では特に断りのない限り、仮想形状生成装置21(仮想形状生成プログラム)が主成分分析を行った結果、第1主成分ベクトル及び第2主成分ベクトルまでを得る場合の例を説明する。
図7は、第1主成分得点を横軸に、第2主成分得点を縦軸にとったグラフ上に、係数ベクトル(G1,G2,...,Gk)をプロットした場合の例を示す(グラフ上の個々の点が、係数ベクトルに相当する)。図7は一例であり、形状データ測定装置11(実測データ収集プログラム)が測定・収集したk人の人体形状に依存して、グラフ上の係数ベクトルの分布は異なる。しかし一般的に、無作為に選択された複数人の被測定者の人体形状の測定を行い、複数人分の係数ベクトルを得て、得られた係数ベクトルの主成分分析を行うと、図7に示されるように、複数人分の係数ベクトルの分布は一様にならないことが多いと推測される。被測定者が無作為に選択された場合には、係数ベクトルの分布はたとえば多次元正規分布に従う可能性が高い。
ステップS202では、仮想形状生成装置21(仮想形状生成プログラム)は、係数ベクトル(G1,G2,...,Gk)に基づいて、係数ベクトルの分布の推定(確率密度の推定)を行う。図8は、図7に示された係数ベクトルの分布について確率密度推定を行った結果の例を示す。図8のグラフ中のいくつかの閉曲線は、確率密度が等しい線(等高線)をあらわす。図8の例の場合は、グラフの中心(第1主成分得点及び第2主成分得点がいずれも0の点)に近い閉曲線(等高線)ほど確率密度が高く、グラフの中心に対して、より遠くの位置にある閉曲線ほど、確率密度が低いことを表す。
確率密度推定を行う方法は公知であるため、ここでは詳細な説明は略す。たとえば公知の確率密度推定方法として、カーネル密度推定(KDE)が良く知られており、ステップS202では、カーネル密度推定を行うためのソフトウェア(プログラム)を用いてもよい。
先に述べた通り、形状データ測定装置11で収集したk人分の人体形状データに関する係数ベクトルは、上の式(10)のように表現することができる。また、主成分得点sjqの値を様々な値に変化させると、様々な係数ベクトルを得ることができる。たとえば下に示す式(11)に従って、係数ベクトルGvを算出することにより、形状データ測定装置11によって収集されたk人分の人体形状データ以外の人体形状データを人工的に(仮想的に)生成することができる。なお、式(11)は、式(10)におけるrを2に限定し、式(10)における第1主成分得点sj1と第2主成分得点sj2をそれぞれs1とs2に置き換えたものである(s1とs2は任意のスカラー値でよい)。
図11は、式(11)において、第1主成分得点s1を変化させることで得られる、(仮想的な)人体形状データを図示したものである。なお、図11に示す(a)、(b)、(c)の各図では、第2主成分得点s2がいずれも0である。図11の(b)は第1主成分得点s1が0の場合(また第2主成分得点s2も0)の人体形状である。つまり平均値ベクトルGmeanから得られる人体形状(平均値ベクトルGmeanの各要素を式(4)に代入して得られる各頂点座標をもとに人体形状を図示したもの)で、k人分の人体形状の平均的な形状に相当する。図11の(a)は第1主成分得点s1を減少させた(負の値にした)場合に得られる人体形状である。一方、図11の(c)は第1主成分得点s1を増加させた(正の値にした)場合に得られる人体形状である。図11の各図からわかるとおり、第1主成分得点s1を減少させる(負の値にする)ことで、平均的な人体形状よりも身長の低い人体形状を得ることができる。逆に、第1主成分得点s1を増加させる(正の値にする)ことで、平均的な人体形状よりも身長の高い人体形状を得ることができる。
図12は、式(11)において、第2主成分得点s2を変化させたときに得られる、(仮想的な)人体形状データを図示したものである。図12に示す(a)、(b)、(c)の各図では、第1主成分得点s1がいずれも0である。図12の(b)は図11(b)と同じ図である。つまり平均的な人体形状(第1、第2主成分得点s1,s2が0の場合の人体形状)である。図12の(a)は第2主成分得点s2を減少させた(負の値にした)場合に得られる人体形状である。一方、図12の(c)は第2成分得点s2を増加させた(正の値にした)場合に得られる人体形状である。図12の各図からわかるとおり、第2主成分得点s2を減少させる(負の値にする)ことで、平均的な人体形状よりも痩せた(横幅の狭い)人体形状を得ることができる。逆に、第2主成分得点s2を増加させる(正の値にする)ことで、平均的な人体形状よりも太った(横幅の広い)人体形状を得ることができる。
本実施形態では、式(11)を用いて算出した係数ベクトルGv(先に述べた通り、係数ベクトルGvの各要素は、式(4)の各係数(alm_j,blm_j,clm_j)に相当する)を式(4)に代入することで得られる、人体形状を構成する各頂点の座標値のセット(P1,P2,P3,...,Pn)を仮想形状データと呼ぶ。ただし式(11)を用いて算出された係数ベクトルGvのことも仮想形状データと呼ぶことがある。
ステップS203では仮想形状生成装置21(仮想形状生成プログラム)は、仮想形状データを多数生成する。以下では、ステップS203で生成される仮想形状データの数をN(Nは整数)とする。Nの数は任意であるが、少なくともk人よりも充分に大きい数の仮想形状データ(たとえば10万個、あるいは100万個の仮想形状データ)が生成されることが望ましい。
具体的には、第1主成分得点s1の値及び第2主成分得点s2の値を少しずつ変化させた値を式(11)に対して代入して、多数の係数ベクトルGvを算出し、さらに算出された係数ベクトルGvを式(4)に代入して、(仮想的な)人体形状の各頂点の座標値を算出する。これにより、多数の人体形状のデータ(頂点座標値のセット)を生成することができる。なお、仮想形状生成装置21は、式(4)を用いて(仮想的な)人体形状の各頂点の座標値を算出する際に必要となる、各頂点座標に対応する角度(θi,φi)を、あらかじめ仮想形状生成装置21の記憶領域(補助記憶装置54等)に保存している。仮想形状生成装置21(仮想形状生成プログラム)がステップS203を実行する時には、あらかじめ保存している各頂点座標に対応する角度(θi,φi)ごとに、球面調和関数Yl m(θi,φi)の値を算出する。そして、この球面調和関数Yl m(θi,φi)の値と、式(11)を用いて算出した係数ベクトルGvの各要素(これは式(4)の各係数(alm_j,blm_j,clm_j)に相当する)とを式(4)に代入することで、(仮想的な)人体形状の各頂点の座標値を算出する。また、別の実施形態として、仮想形状生成装置21は角度(θi,φi)に対応する球面調和関数Yl m(θi,φi)の値もあらかじめ保存しておき、あらかじめ保存しておいた球面調和関数Yl m(θi,φi)の値を使って、(仮想的な)人体形状の各頂点の座標値を算出してもよい。
なお、ステップS203において生成される複数の仮想形状の分布は、実態に即している(実際に世の中にいる人の形状の分布・傾向に近い)ことが望ましい。そこで、ステップS203では仮想形状生成装置21(仮想形状生成プログラム)は、算出される複数の仮想形状の分布が、ステップS202で得られた係数ベクトルの分布(確率密度関数)に従うように、算出処理を行う。ステップS202で得られる係数ベクトルの分布は、実際に存在する(複数の)人のデータに基づいて生成されたものであるから、実態に近い分布であると考えられるためである。
算出方法の概要を、図9を用いて説明する。たとえばステップS202で得られた係数ベクトルの分布(確率密度関数)が、図9に示されるような曲線A(関数F(x))だった場合を想定する。実際にステップS202で得られる係数ベクトルの分布は二次元の確率密度関数だが、ここでは説明を簡単にするため、関数F(x)を第1主成分得点のみの関数(あるいは第2主成分得点のみの関数)とする。
ステップS203でN個の係数ベクトルが生成されるケースを想定する。また図9において、第1主成分得点の値の範囲xcからxdの範囲の領域Bの面積がB(0<B<1)だった場合、仮想形状生成装置21(仮想形状生成プログラム)は、ステップS203で生成される係数ベクトルの総数(N個)に対して、第1主成分得点の値がxcからxdの区間に収まる係数ベクトルの数(M)の割合がBになるようにする(M/N=Bになるようにする)。言い換えれば、仮想形状生成装置21(仮想形状生成プログラム)は第1主成分得点の値がxcからxdの範囲の係数ベクトルを(B×N)個生成すると良い。
ステップS203で生成される係数ベクトルGvの分布が、ステップS202で求められた分布(確率密度関数)と(ほぼ)同じになるようにするためには、たとえば棄却法を用いて、係数ベクトルGvの算出に必要な第1主成分得点s1の値及び第2主成分得点s2の値のペアを生成するとよい。棄却法は公知の手法であるため、ここでは概略のみ説明する。
ここでは、ステップS202で求められた確率密度関数をf(s1,s2)と呼ぶ(fは第1主成分得点及び第2主成分得点の関数であり、s1,s2はそれぞれ第1主成分得点及び第2主成分得点を意味する)。またここでは確率密度関数fの値域が[0,c]で、第1主成分得点(s1)及び第2主成分得点(s2)の定義域が[−d,d]である場合の例を説明する。
(A) 仮想形状生成装置21(仮想形状生成プログラム)は、一様乱数を生成するためのプログラム(以下「乱数生成モジュール」と呼ぶ)を実行することで、[−d,d]の範囲の一様乱数を2つ求める。ここで求められた2つの一様乱数をsr1及びsr2と呼ぶ。そして仮想形状生成装置21(仮想形状生成プログラム)は、求められたsr1及びsr2を用いて、確率密度関数fの値(f(sr1,sr2))を計算する。
(B) さらに仮想形状生成装置21(仮想形状生成プログラム)は、乱数生成モジュールを実行することで、[0,c]の範囲の一様乱数を1つ求める。ここで求められる乱数をrとする。
(C) 仮想形状生成装置21(仮想形状生成プログラム)はrとf(sr1,sr2)を比較する。r<f(sr1,sr2)であった場合、仮想形状生成装置21(仮想形状生成プログラム)はsr1,sr2をそれぞれ、第一主成分得点及び第2主成分得点として採択し、これらを用いて仮想形状データを生成する(式(11)のs1にsr1を代入し、s2にsr2を代入することで係数ベクトルGvを算出し、また算出された係数ベクトルGvを式(4)に代入して、(仮想的な)人体形状の各頂点の座標値を算出する)。逆にr≧f(sr1,sr2)だった場合には、仮想形状生成装置21(仮想形状生成プログラム)は仮想形状データの算出は行わない(生成されたsr1,sr2を棄却する)。
上の(A)〜(C)を繰り返すことで、生成される複数の係数ベクトルの分布は確率密度関数fに従うものになる。仮想形状生成装置21(仮想形状生成プログラム)は、必要な数(たとえば十万〜百万)の仮想形状データが生成されるまで、上の(A)〜(C)を繰り返し実行する。また、ステップS203で生成されるべき複数の係数ベクトルはそれぞれ異なるベクトルであることが好ましい(重複する仮想形状データが生成されても、それは後述するモデル出力処理で用いられないためである)。そのため、上の(A)〜(C)の処理の過程で、同じ(重複する)係数ベクトルが生成された場合、その係数ベクトルは棄却される。このように、重複する係数ベクトルが生成されないようにすることで、それぞれが異なる形状(体格)を表す、多数の仮想形状データを生成することができる。ただし、重複する係数ベクトルが生成されても(つまり、重複する仮想形状データが生成されても)大きな問題にはならないため、重複する係数ベクトルが生成された場合にその係数ベクトルを棄却する処理は省略されてもよい。
ステップS203で生成された、複数の係数ベクトルの分布の例を図10に示す。図10は、図7(あるいは図8)と同様に、第1主成分得点を横軸に、第2主成分得点を縦軸にとったグラフであり、このグラフ上に、ステップS203で生成された複数の係数ベクトルがプロットされている。ステップS203ではN個の(k(個)よりも多くの)係数ベクトルが生成されるため、図10のグラフ上の点の密度は図7(あるいは図8)よりも高い。ただし図10のグラフにおいて、各点(係数ベクトル)の分布は図7(あるいは図8)と類似している。
最後にステップS204で、仮想形状生成装置21(仮想形状生成プログラム)は、ステップS203で算出されたすべての仮想形状データから、サイズ情報(身長や胸囲などの、体格や身体的特徴を表す値)を算出する。ここではサイズ情報として、身長と胸囲が算出される例を説明する。ステップS203で、(仮想的な)人体形状の各頂点の座標値が求められているので、身長や胸囲等は容易に算出可能である。仮想形状生成プログラムは、たとえば身長は、「頭部を構成する複数の頂点の中の、特定の頂点PsのZ座標と、足の裏を構成する複数の頂点の中の特定の頂点PtのZ座標の差」を算出することで求められる、という計算規則を保持している。同様に仮想形状生成プログラムは、複数の頂点座標値から胸囲を計算するための計算規則も保持している。仮想形状生成プログラムは、これらの計算規則に基づいて、身長や胸囲を算出する。
なお、ステップS204で算出される値は、後述するモデル提供装置31で用いられる値(条件情報としてモデル提供装置31がユーザから受け付ける値)である。そのため、たとえば条件情報としてモデル提供装置31がユーザから受け付ける値として、肩幅が含まれている場合、ステップS204で仮想形状生成装置21(仮想形状生成プログラム)は肩幅の値も算出する。
身長と胸囲の算出が終了すると、仮想形状生成装置21は、算出された身長と胸囲の値を、ステップS203で算出された係数ベクトルGvと人体形状の各頂点の座標値のセットに対応付けて、仮想形状生成装置21の補助記憶装置54に保存し、仮想形状生成処理を終了する。なお、ここで人体形状の各頂点の座標値は必ずしも保存されなくてもよい。係数ベクトルGvが保存されていれば、係数ベクトルを用いて人体形状の各頂点の座標値を算出可能だからである。
最後に、モデル提供装置31で行われる、モデル出力処理の流れを説明する。図13は、モデル出力処理のフローチャートである。なお、モデル出力処理は、モデル提供装置31のCPU51がモデル提供装置31のメモリ52にロードされたプログラム(以下、このプログラムを「モデル出力プログラム」と呼ぶ)を実行することにより、実現される処理である。なおモデル出力処理が実行される前に、仮想形状生成装置21で行われる仮想形状生成処理(図6)の実行が完了している必要がある。
また、以下の説明ではモデル提供装置31に接続されている出力装置33はディスプレイ装置であり、モデル提供装置31はユーザから入力された条件(身長及び胸囲)に適合する1または複数の人体形状(仮想的な人体形状)をディスプレイ装置に表示する例を説明する。
モデル出力プログラムの実行が開始されると、モデル提供装置31はユーザから、表示させたい人体形状の条件の入力を受け付ける(ステップS301)。なお、ここの説明では、人体形状の条件として、身長と胸囲の入力を受け付ける例を説明する。
モデル出力プログラムの実行が開始されると、モデル提供装置31はユーザから、表示させたい人体形状の条件の情報(身長と胸囲)の入力を受け付ける(ステップS301)。なおモデル提供装置31は、ユーザからの条件情報の入力を受け付け、それに応じた人体形状の表示を行うためのグラフィカルユーザインタフェース(GUI)を提供する機能を備えているが、ここで提供されるGUIは本実施例の内容とは直接関係しないため、詳細な説明は略す。
ユーザから、表示させたい人体形状の条件(身長と胸囲)を受け付けると、ステップS302が実行される。ステップS302では、モデル提供装置31は仮想形状生成装置21から、複数の仮想形状データ(仮想形状生成装置21で生成されたもの)に対応付けられて保存されている、サイズ情報(身長及び胸囲の情報)を取得する。モデル提供装置31は、取得した複数のサイズ情報の中から、ユーザから受け付けた条件に適合するサイズ情報を1または複数選択する。
ユーザから受け付けた条件に適合するサイズ情報を選択する方法は、特定のものに限定されない。たとえば、ユーザが指定した身長に最も近い身長の仮想形状データを1つ選択し、さらにユーザが指定した胸囲に最も近い胸囲の仮想形状データを1つ選択し、それぞれの(2つの)仮想形状データに基づいて生成される人体形状画像を、出力装置33に出力してもよい。あるいは、仮想形状データがユーザが指定した条件にどの程度適合しているかを表す一種のスコア(適合度)を仮想形状データ毎に算出し、スコアの最も高い仮想形状データを1つ選択する、あるいは複数(たとえば5つ)の仮想形状データをスコアの高い順に選択するようにしてもよい。
スコアの算出方法の例を以下に示す。ユーザが指定した身長と胸囲をそれぞれT,Bとし、(スコア(適合度)算出対象の)仮想形状データに対応付けられた身長と胸囲をそれぞれ、T'、B'とする。この場合、たとえば以下の式(12)で算出される値をスコア(適合度)と定義してよい。式(12)で算出されるスコアは0以下の値を取る。スコアが0に近いほど、そのサイズ情報(T'とB')がユーザの指定した条件に近いことを表す。
ステップS302で、モデル提供装置31は式(12)を用いて各サイズ情報のスコアを算出し、スコアの高いサイズ情報から順に選択してもよい。ただし、上で説明した式(12)以外の計算式によってスコア(適合度)が算出されてもよい。
ユーザから指定された条件に適合するサイズ情報が選択されると、モデル提供装置31は仮想形状生成装置21から、選択されたサイズ情報に対応する、人体形状の各頂点の座標値を取得する(ステップS303)。もし仮想形状生成装置21が仮想形状生成処理を実行したときに(ステップS203、ステップS204で)、人体形状の頂点座標値を保存していない場合(係数ベクトルと、サイズ情報[身長・胸囲]だけを保存している場合)、モデル提供装置31はステップS303で、選択されたサイズ情報に対応する係数ベクトルを仮想形状生成装置21から取得し、取得した係数ベクトルと式(4)を用いて、選択された仮想形状の各頂点の座標値を算出する。また、ステップS302でサイズ情報を取得する際に、サイズ情報とともに係数ベクトル(または人体形状の頂点座標値)を取得してもよい。その場合には、ステップS303は実行されなくてもよい。
ステップS304で仮想形状生成装置21は、ステップS303で取得(または算出)された、各頂点の座標値を用いて、選択された(仮想的な)人体形状の画像(3次元CG)を作成してディスプレイ装置(出力装置33)に表示し、モデル出力処理を終了する。
以上、各実施形態に基づき本発明の説明を行ってきたが、上記実施形態に示した要件に本発明が限定されるものではない。これらの点に関しては、本発明の主旨をそこなわない範囲で変更することができ、その応用形態に応じて適切に定めることができる。
たとえば上で説明した実施形態では、実測データ収集処理、仮想形状生成処理、モデル出力処理がそれぞれ、異なるコンピュータ(形状データ測定装置11、仮想形状生成装置21、そしてモデル提供装置31)で実行される例を説明した。ただし、実測データ収集処理、仮想形状生成処理、モデル出力処理は必ずしも、異なるコンピュータで実行される必要はなく、これらの処理が1台のコンピュータで実行されて良い。たとえば3次元モデル生成システムが、3Dスキャナと出力装置(ディスプレイ装置あるいは3Dプリンタ)が接続された1台のコンピュータで構成されていてもよい。この場合には、このコンピュータに実測データ収集プログラム、仮想形状生成プログラム、モデル出力プログラムをインストールし、この1台のコンピュータで、実測データ収集処理、仮想形状生成処理、仮想形状生成処理を順次実行させることで、上で説明した実施形態と同じことが実現できる。
また、上で説明した各処理の実行順序は適宜変更されてもよい。たとえば上の説明では、仮想形状データに対応するサイズ情報(身長や胸囲)を、仮想形状生成装置21が仮想形状生成処理実行時(ステップS204)に算出しているが、別の例として、モデル出力処理実行時に(たとえばステップS302の実行時に)サイズ情報の算出が行われてもよい。
また、上で説明した仮想形状生成処理の説明では、仮想形状データの生成に第1主成分ベクトルと第2主成分ベクトル(及び第1・第2主成分得点)のみを用いる例を説明したが、これは一例に過ぎない。第3主成分以降の主成分ベクトルも仮想形状データの生成に用いられてもよい。
また、上で説明した実施形態では、モデル出力処理において、仮想形状生成処理で生成された仮想形状データの中からのみ、ユーザの入力した条件に適合するものを検索(選択)しているが、実測データの中にユーザの入力した条件に適合するものが含まれていることもあり得る。そのため、別の実施形態として、仮想形状データに加えて、実測データについてもサイズ情報を生成し、実測データの中にユーザの入力した条件に適合するものが含まれていれば、実測データに基づいて3次元人体形状画像を作成して出力してもよい。たとえば仮想形状生成処理実行時に、形状データ測定装置11から仮想形状生成装置21に実測データを送信し、仮想形状生成装置21において実測データについてサイズ情報を生成するとよい。ただし仮想形状生成装置21以外の装置で(たとえば形状データ測定装置11などで)、実測データについてサイズ情報を生成する処理が行われてもよい。また、上で説明した仮想形状生成処理で生成される仮想形状データが、複数の実測データのいずれかと同じになることもあり得る。別の実施形態として、仮想形状生成処理で生成される仮想形状データが、いずれの実測データとも重複しないようにする処理を行ってもよい。たとえば上で説明したステップS203において、生成された仮想形状データと実測データとを比較して、生成された仮想形状データがいずれかの実測データと重複していた場合に仮想形状データを作り直す処理を行ってもよい。ただし、生成された仮想形状データと実測データとを逐一比較する処理はオーバーヘッドが大きい。また仮想形状生成処理で生成される仮想形状データがいずれかの実測データと重複していたとしても、特段問題にはならないため、仮想形状データが、いずれの実測データとも重複しないようにする処理は必須ではない。
また、上で説明した実施形態では、3Dスキャナなどで計測した実測データ(XYZ座標値のセット)を、式(4)に示した関数(角θと角φの関数。具体的には「複数の球面調和関数×所定の係数」の線形和)に変換して、変換された関数に含まれる各係数についての主成分分析を行っている。しかし別の実施形態として、実測データを式(4)に示すような関数に変換せず、仮想形状生成処理ではXYZ座標値のセットについて主成分分析を行い、その結果をもとに仮想形状データの生成等を行ってもよい。その場合、式(4)を用いた変換処理は不要になる。しかし、本願発明者による検証結果によると、XYZ座標値のセットについて主成分分析を行って、その結果をもとに仮想形状データの生成等を行った場合、仮想形状データを生成する際に、多くの主成分ベクトル(第3主成分ベクトル以降の主成分ベクトル)を用いた計算を行わないと、実際の人体に近い形状が得られない等の問題が分かっている。一方、上の実施形態で説明した方法のように、人体形状データを角度(角θと角φ)の関数に変換し、関数の係数を主成分分析した結果を用いて仮想形状データを生成する場合には、第2主成分までを用いれば、比較的実際の人体に近い形状を得ることができる。
また、人体形状は、性別や年齢によって違いが出ることもある。そのため、例えば実測データ収集処理において男性のみの(あるいは女性のみの)実測データを収集し、仮想形状データの生成においても、男性のみ(あるいは女性のみ)の実測データに基づいた仮想形状データを生成してもよい。そしてモデル出力処理でユーザが人体形状の出力・表示を行う際には、男性の人体形状を出力する場合には男性のみの実測データに基づいた仮想形状データを用いて出力を行う、逆に女性の人体形状を出力する場合には女性のみの実測データに基づいた仮想形状データを用いて出力を行ってもよい。
また、上では人体形状の分析、生成、出力についての処理を中心に説明してきたが、本発明は人体以外の物体(3次元オブジェクト)の分析、生成、出力に適用することも可能である。さらに2次元オブジェクト(たとえば紙に描かれた人物の形状など)の分析、生成、出力への適用も可能である。
本願は、日本特許庁に2019年4月10日に出願された特願2019−74909号の優先権を主張するものであり、その全内容を参照によりここに援用する。