- d次元球面上の点集合があったときに、m=2,3次元回転を同一視して、商群を取ったもの
- : 特殊直交群 (mxm直交行列であって、行列式が +1)
- m=2,3が大事な例
- 特徴点がm=2次元座標として得られているとする
- 特徴点の数k=30の例
- まず、m=2次元の両軸について原点中心にする(自由度が2減る)
- さらに、mxk次元ベクトルとして、「長さ」を1に標準化する
- 自由度はmkから(2+1)下がってmk-3
m <- 2
k <- 30
z <- matrix(rnorm(m*k),nrow=m)
z[1,] <- z[1,]*0.3 + 1
z[2,] <- z[2,]*0.2 + 2
ang <- Arg(z[1,] + i * z[2,])
z <- z[,order(ang)]
plot(t(z),pch=20,asp=1)
z.normed <- z - apply(z,1,mean)
plot(t(z.normed),pch=20,asp=1)
z.normed. <- z.normed/sqrt(sum(z.normed^2))
plot(t(cbind(z,z.normed,z.normed.)),pch=20,asp=1,type="p")
points(t(z),pch=20,col=1,type="b")
points(t(z.normed),pch=20,col=2,type="b")
points(t(z.normed.),pch=20,col=3,type="b"
- 自由度mxkをmxk- m - 1に下げた。そのうち、最後の「ノルム=1」の自由度の減は、線型変換ではないので、以下に示すように、線型変換によってmxk-m-1次元平面に映すことは出来ないが、mxk-m次元平面にある、単位球に移すことは出来る
- 以下では、多数のm=2,k=3の長さmxk=6のベクトルを作成し、それを重心標準化、ノルム標準化することによって得られる、6次元空間座標を持った多様体上の点が、mxk-m=4次元平坦空間に存在し、それがノルム=1の制約を持っていること、すなわち、mxk-m次元にあるという多様体を成していることを示すRのコードである
library(MASS)
library(Matrix)
library(rgl)
n <- 1000
Z <- matrix(0,n,m*k)
for(i in 1:n){
z <- matrix(rnorm(m*k),nrow=m)
z[1,] <- z[1,]*0.3 + 1
z[2,] <- z[2,]*0.2 + 2
z.normed <- z - apply(z,1,mean)
z.normed. <- z.normed/sqrt(sum(z.normed^2))
Z[i,] <- z.normed.
}
rankMatrix(Z)
df <- m*k - (m)
topZ <- Z[1:df,]
qr.out <- qr(t(topZ))
Q <- qr.Q(qr.out)
R <- qr.R(qr.out)
range(t(R) %*% R - topZ %*% t(topZ))
Q.inv <- ginv(Q)
round(Q.inv %*% t(topZ) - R)
rotZ <- Q.inv %*% t(Z)
d1 <- Z %*% t(Z)
d2 <- t(rotZ) %*% rotZ
range(d1-d2)
range(apply(rotZ^2,2,sum))
plot3d(t(rotZ[1:3,]))
plot3d(t(rotZ[2:4,]))
> rankMatrix(Z)
[1] 4
attr(,"method")
[1] "tolNorm2"
attr(,"useGrad")
[1] FALSE
attr(,"tol")
[1] 2.220446e-13
>
>
>
> range(t(R) %*% R - topZ %*% t(topZ))
[1] -1.110223e-16 1.110223e-16
>
> round(Q.inv %*% t(topZ) - R)
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
[4,] 0 0 0 0
> range(d1-d2)
[1] -1.221245e-15 1.221245e-15
>
>
> range(apply(rotZ^2,2,sum))
[1] 1 1
- この球面は、Preshape sphereと呼ぶ。なぜなら、まだ回転同一視をしていないから
- m=2の場合、回転は群 SO(2)であってそれは(円環)なので、なる、2k-4次元のコンパクトな多様体であることがわかる
- これはk-2次元のcomplex projective spaceと(微分)同相
- これは次のようにも書ける
-
- 行列z、ただし、Traceの制約は、zの全要素の二乗の和が1であること、1_kなる、全成分が1の長さkのベクトルを含む式は、k要素のすべての平均が0でるように標準化した制約に相当する
- うまく等長変換して、mxk-m次元平面に移せるので
- とまで持ち込める
- こうすることで、線型制約が無くなるので便利
- 本ではHelmert変換を使って-m次元する、と書いている
- 上のコードでは、QR分解を使っている
- さて、回転同一視をする
- Direct Similarity Shape Spaces
- ではは多様体になるとは限らない
- そのような場合をと書けば
- で、これは多様体であって、その次元はだという
- 微分同相が担保されれば、接空間、接空間を軌道とその直交成分に分けることなどの議論が進められる
- ※ 行列と転置行列の積のトレースは、行列をベクトル化して、その内積を取るのと同じであることに注意
- 接空間は、ただしはを含んだ超平面。その超平面内の球上の接空間は球面上のベクトルとの直交条件で示せる
- 回転同一視をして、その上での形間(測地線)距離は、ただしと表される、球面上の測地線
- したがって
- の最大化はのsvd分解によって求まる
- 最大値というsvd分解でのであり
- それをもたらす回転は
library(svd)
m <- 3
k <- 5
x <- matrix(rnorm(m*k),ncol=k)
y <- matrix(rnorm(m*k),ncol=k)
x <- t(t(x)-apply(x,2,mean))
y <- t(t(y)-apply(y,2,mean))
x <- x/sqrt(sum(x^2))
y <- y/sqrt(sum(y^2))
apply(x,1,sum)
apply(y,1,sum)
sum(x^2)
sum(y^2)
yxt <- y %*% t(x)
svdout <- svd(yxt)
U <- svdout$u
V <- svdout$v
U %*% diag(svdout$d) %*% t(V)
yxt
W <- t(t(V)) %*% t(U)
sum(diag(W %*% y %*% t(x)))
sum(svdout$d)
W %*% y