- RのRandomFieldsパッケージを使って粗密に違いのある2つの2次元ランダムフィールドをシミュレーション作成してみる
library(RandomFields)
n <- 2^8
nuA <- 0.1
nuB <- 0.9
modelA <- RMwhittle(nu=nuA)
modelB <- RMwhittle(nu=nuB)
x <- y <- seq(from=-3,to=3,length=n)
simuA <- RFsimulate(modelA,x,y)
simuB <- RFsimulate(modelB,x,y)
plot(simuA)
plot(simuB)
- さて、これをウェーブレット変換してみよう(Rのwaveslimパッケージ)
- この仕組みも粗密を段階的に変えて情報を分解する仕組みなので、うまく粗密を取り出せるのでは、と思う
library(waveslim)
k <- 5
A.dwt <- dwt.2d(as.matrix(simuA), "haar", k)
B.dwt <- dwt.2d(as.matrix(simuB), "haar", k)
par(mfcol=c(1,2))
plot.dwt.2d(A.dwt)
plot.dwt.2d(B.dwt)
-
- この表示の仕方は、左下隅に、もっとも粗い絵、そのL字型周囲に残りの情報の細かい成分が配されている。これを、L字単位でま「成分の二乗和」を取ってみる(これは、単なる試み)
sum(plot.dwt.2d(A.dwt, plot=FALSE)^2)
sum(plot.dwt.2d(B.dwt, plot=FALSE)^2)
sA <- sapply(A.dwt,function(x){sum(x^2)})
sB <- sapply(B.dwt,function(x){sum(x^2)})
sA
sB
d <- 2
m.sA <- matrix(c(sA,rep(sA[length(sA)],d^2-2)),byrow=TRUE,ncol=d^2-1)
m.sB <- matrix(c(sB,rep(sB[length(sB)],d^2-2)),byrow=TRUE,ncol=d^2-1)
sA.2 <- apply(m.sA,1,sum)
sB.2 <- apply(m.sB,1,sum)
sA.2[length(sA.2)] <- sA.2[length(sA.2)]/ncol(m.sA)
sB.2[length(sB.2)] <- sB.2[length(sB.2)]/ncol(m.sB)
plot(sA.2,sB.2)
-
- それなりに、値に違いのあるものが出た。これを「粗密ベクトル」とすれば、この「粗密ベクトル」は画像の何かしらの情報なのではないだろうか
2
[1] 23378.453 9318.149 6632.126 6399.840 7183.711 18488.662
> sB.2
[1] 112.7862 294.8789 830.9757 2096.2763 4341.9278 53639.2285