кластеризация 3D-массива в R

Я пытаюсь сгруппировать 3D-данные, которые у меня есть в массиве. На самом деле это информация из трехмерного изображения, поэтому этот массив представляет собой одно изображение со значениями x, y, z. Я хотел бы знать, какой воксель имеет тенденцию группироваться с чем. Массив выглядит так.

 dim(x)
[1] 34 34 34  1

Как я могу это сделать? Я пытался просто построить график с помощью scatterplot3d, но это не сработало.


person user3141121    schedule 24.01.2014    source источник
comment
Что вы пробовали? Покажи нам свой код.   -  person Konrad Rudolph    schedule 25.01.2014
comment
это не сработало (не то, чтобы эти кластеры): scatterplot3d(x[,,,1]) и dist(x[,,,1]) просто не заканчиваются.   -  person user3141121    schedule 25.01.2014
comment
Ваша матрица, кажется, имеет 4 измерения (34,34,34,1). В чем смысл последнего измерения?   -  person jlhoward    schedule 25.01.2014
comment
Вам нужна кластеризация или сегментация?   -  person Vincent Zoonekynd    schedule 25.01.2014
comment
последнее измерение массива означает, что у меня есть 1 трехмерная матрица размерами 34X34X34. Если бы внутри массива x было 2 3D-матрицы, они были бы представлены как (34,34,34,2). @VincentZoonekynd я думаю, что я хочу сегментации   -  person user3141121    schedule 25.01.2014


Ответы (1)


Итак, это попытка кластеризации. Вы действительно должны предоставить данные, если хотите получить лучший ответ.

library(reshape2)   # for melt(...)
library(rgl)        # for plot3d(...)

set.seed(1)         # to create reproducible sample

# 3D matrix, values clustered around -2 and +2
m      <- c(rnorm(500,-2),rnorm(500,+2))
dim(m) <- c(10,10,10) 
v      <- melt(m, varnames=c("x","y","z"))  # 4 columns: x, y, z, value
# interactive 3D plot, coloring based on value
plot3d(v$x,v$y,v$z, col=1+round(v$value-min(v$value)),size=5)
# identify clusters
v      <- scale(v)                          # need to scale or clustering will fail
v      <- data.frame(v)                     # need data frame for later
d  <- dist(v)                               # distance matrix
km <- kmeans(d,centers=2)                   # kmeans clustering, 2 clusters
v$clust <- km$cluster                       # identify clusters
# plot the clusters
plot(z[1:4],col=v$clust)                    # scatterplot matrix
plot3d(v$x,v$y,v$z, col=v$clust,size=5)     # 3D plot, colors based in cluster

Основная идея состоит в том, чтобы преобразовать вашу 3D-матрицу в «длинный» формат со столбцами для x, y, z и фактическими значениями матрицы. Итак, теперь x, y и z содержат позиционную информацию (здесь значения индекса 1:10). Вам нужно масштабировать это так, чтобы столбец value и столбцы индекса были в одном масштабе, иначе кластеризация даст вам вводящие в заблуждение результаты.

person jlhoward    schedule 25.01.2014