近距離を無視した最小全域木による乱雑項排除

  • 昨日の記事で、観察乱雑項(やルールの上に酔歩性が乗っている軌道の酔歩性部分)は、観察点間距離が小さいところでの方向変化の一様性としてあらわれ、観察点間距離を長くすると方向変化の一様性がなくなることを見た
  • ということは、近くの動きは無視して、適切な2点間連結をすると、乱雑項を排除できそうだ
  • 観察点があるとする。そこに距離行列を作り、一定距離以下のエッジは引かないで距離の重み付きグラフを描く。そこから最小全域木を描くとそんな絵になりそうなのでやってみる

  • これがうまくいくのだとすると、どうやって、「取り除くべき『近距離』」を決めるか、と、出来上がった、非近距離最小全域木から、行きつ戻りつのない曲線(折れ線)を作る、という処理がうまくいけば良さそう
library(igraph)
t <- seq(from=0,to=1,length=100)*10
x <- exp(t*0.1)*cos(t)
y <- exp(t*0.1)*sin(t)+rnorm(length(t),0,0.1)

plot(x,y)
X <- cbind(x,y)
d <- as.matrix(dist(X))
hist(d)
d. <- d
d.[which(d<0.5)] <- 0
g <- graph.adjacency(d.,mode="undirected",weighted = TRUE)

el <- matrix(as.numeric(get.edgelist(g)),ncol=2)

plot(X,pch=20)
for(i in 1:length(el[,1])){
	segments(X[el[i,1],1],X[el[i,1],2],X[el[i,2],1],X[el[i,2],2])
}

mst <- minimum.spanning.tree(g,weighted=TRUE)
el.mst <- matrix(as.numeric(get.edgelist(mst)),ncol=2)
plot(X,pch=20)
for(i in 1:length(el.mst[,1])){
	segments(X[el.mst[i,1],1],X[el.mst[i,1],2],X[el.mst[i,2],1],X[el.mst[i,2],2])
}