幾何学的モーメントの不変式とshape analysis

3DCGでよくやるように、何か(向き付けられた)閉曲面があって、その曲面は、三角形に分割(単体分割)されているとする。この時、曲面内部の領域の体積を計算するには、適当な一点Oを取って(特に理由がなければ原点でいい)、Oと各三角形がなす四面体の符号付き体積の和を計算すればいい(三角形の頂点の順序が、面の向きと合っていなければならない)。3DCGで使われるモデルでは、境界が連結でなく、複数の閉曲面からなることもあるけど、その場合でも、この体積計算は有効。

同様の計算は、三次元空間上で定義された関数を曲面内部の領域で積分するのに使える。関数として、最も単純な単項式を選ぶと、これは、曲面内部の領域の幾何学的モーメントで、体積は特に0次のモーメント。この積分の計算自体は、大学一年生の算数で、ちょろいけど、計算結果が書いてあるものを見つけられなかったので、以下に書いた

単体の幾何学的モーメントの計算
https://vertexoperator.github.io/2018/04/30/simplex_moment.html

実際に計算する時、世の中で出回ってる3Dメッシュデータは、non-manifold edge(本来、全てのedgeは丁度2つの異なる面にのみ含まれるべき)を持つことがよくあるので、気をつける必要がある



幾何学的モーメントは、曲面を合同変換した時に、どのような変換を受けるか分かるので、幾何学的モーメントを組み合わせて、形状不変量を作ることができる。これは、Huモーメントの場合と同じ考え方。

Image moment
https://en.wikipedia.org/wiki/Image_moment

Huモーメント不変量は、通常、二次元で定義されていたけど、三次元でも同様に定義できる。世の中には、形状データベースみたいなものを作りたいという需要もあるらしいから、そういうので、使えそうな気もする。何に使うのか、よく分からないけど。物体認識とかで使えそうな気もするけど、一枚の2D画像から3Dデータを再構成するのはしんどいし、自然界には、同一形状の物体というのはあまり存在しない(岩とか木とか)

低次の場合を考える。0次のモーメントは体積でこれは自明に合同変換で不変な量。一次のモーメントは、重心座標(と体積の積)を表すので、これから合同変換で不変な量は作れない。二次のモーメントは、重心が原点と一致するように動かしておくと、残りの自由度は回転のみで、モーメントを適当に並べると、2階の対称テンソルをなす。これを回転で動かすと、対角化できる。固有関数は互いに直交する三軸で、固有値は、各軸方向の"広がり"を表す。つまり、二次のモーメントは、物体を楕円体で近似した時の形状を表すと思える。回転不変な量は、対称テンソル固有値の対称関数で、トレースや行列式などを含む。

注)ここの対称テンソルは、正確には、群SO(3)の自然表現の対称テンソル積表現空間の元であることを意味する。SO(3)の表現空間には、SO(3)作用で不変な内積が定数倍を除いて一意に存在(コンパクト群の有限次元表現がユニタリ表現になるのと同様の論法)して、特に、双対空間との同一視ができるので、対称テンソルと対称行列が同一視できる。モーメントが対称テンソルになるというのは、物理では、多重極モーメントとかで使う考え方

従って、2次までの幾何学的モーメントは、0次のモーメントで、大体の大きさ、一次のモーメントで、おおよその位置、二次のモーメントで大雑把な形状(平べったいとか丸っこいとか、細長いという程度の)を表現しており、人間の直感的な捉え方に近い感じがする。より詳細な構造の情報は、もっと高次のモーメントに含まれる。高次のモーメントからも、合同変換の不変量が作れて、これらは"実質的に任意の形状"を分類するのに十分な不変量を与える。尤も、これらの不変量を計算する不変式を一般的に求めるのは、多分難しい


どれくらい難しいか。高次のモーメントから幾何学的Huモーメント不変量を作る問題は、並進自由度は簡単に除けるので、残る回転自由度に関する問題となり、数学的には、

3次元のHuモーメント不変量の計算:「SO(3)の自然表現の高階対称テンソル積表現から、表現空間上の多項式関数で、SO(3)作用で不変なものを見つける」

という形に定式化される。一方、数学では、19世紀に不変式論が研究され、そこでの主要な問題は、現代の言葉では、

19世紀不変式論の基本問題:「SL(2,C)の自然表現の対称テンソル積表現(既約表現になる)の表現空間上の多項式関数でSL(2,C)作用で不変なものを見つける」

というものだった(当時は、既約表現という概念もテンソル積という概念も定式化されてないので、2元n形式へのSL(2,C)作用という形で理解されていた)。SO(3,C)とSL(2,C)はLie環を取れば同型であり、こういう風に定式化すると、3次元のHuモーメント不変量を決定する問題と、19世紀の不変式論で扱われてた問題が非常に似た種類の問題だと分かる。Huモーメント不変量の決定のほうが、次元が大きい分、難易度が高そうに思える。ところで、後者の問題は、多分、殆どの数学者が特に重要な問題じゃないと考えるようになって久しく、現在でも、一般的な答えが分かっているわけではない(確か12次くらいまでは、不変式の生成元が決定されていた気がする)


(離散)曲面上のラプラシアンは、1993年のPinkallとPolthierの論文以来、色々な問題で、よく使われるようになった。cotangent formulaで検索すれば、沢山解説が出てくる
Computing discrete minimal surfaces and their conjugates
https://projecteuclid.org/euclid.em/1062620735

曲面の形状の不変量を得るのに、ラプラシアン固有値と固有関数を見るのは、自然に思える。このような方法は、spectral shape analysisという名前が付いている程度には、ポピュラーらしい。けど、例えば、以下の論文のFig4とか見ると、幾何学的Huモーメント不変量ほど、直感的な情報を与えてくれそうな感じはしない。

Spectral Mesh Processing
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.229.4191


うまいことやれば、2つの曲面の剛体位置合わせも多分できる。2つの曲面が完全に合同であれば、適当な合同変換で、幾何学的モーメントが一致するようにできる。簡単のため、二次元で考えると、座標のアフィン変換
x' = ax + by + p
y' = cx + dy + q
は6つの量a,b,c,d,p,qで定まるので、最低でも、二次までのモーメントを見る必要がある。アフィン変換に対して、二次までの幾何学的モーメントは
M_{00}' = (ad - bc)M_{00}
M_{10}' = (ad - bc)(aM_{10} + b M_{01} + p M_{00})
M_{01}' = (ad - bc)(cM_{10} + d M_{01} + q M_{00})
M_{20}' = (ad - bc)(a^2 M_{20} + 2ab M_{11} + b^2 M_{02} + 2ap M_{10} + 2bp M_{01} + p^2 M_{00})
M_{11}' = (ad - bc)(ac M_{20} + (ad+bc) M_{11} + bd M_{02} + (cp + aq)M_{10} + (dp + bq)M_{01} + pq M_{00})
M_{02}' = (ad - bc)(c^2 M_{20} + 2cd M_{11} + d^2 M_{02} + 2cq M_{10} + 2dq M_{01} + q^2 M_{00})
のように変換する。2つの曲面が合同であれば、0次のモーメントは等しいはずだけど、多分殆どの場合は、浮動小数点誤差のために、完全には一致しない。拘束条件として、ad-bc=1を課すか、ad-bcのスケールも不定とするかは問題に依存する選択だと思う。


合同変換であれば、ad-bc=1かつa=dかつb=-cである。この条件を課した上で、互いの幾何学的モーメントがなるべく一致するように、パラメータa,b,c,d,p,qを決定すれば、剛体位置合わせができる。一般に、解は一つとは限らない(例えば、球とかの場合)。何らかの評価関数を決めて最小化するというのが一番オーソドックスに思いつく。


というようなことを考えたけど、差し当たって、何かに使おうと思ってたわけではないので、本当に有用かどうかは知らない