我有一个按时间顺序排列的卫星图像(5个波段),并想按R中的kmeans对其进行分类。我的脚本运行良好(循环浏览我的图像,将图像转换为data.frame,将它们聚类,然后将其转换回一个栅格):
for (n in files) {
image <- stack(n)
image <- clip(image,subset)
###classify raster
image.df <- as.data.frame(image)
cluster.image <- kmeans(na.omit(image.df), 10, iter.max = 10, nstart = 25) ### kmeans, with 10 clusters
#add back NAs using the NAs in band 1 (identic NA positions in all bands), see http://stackoverflow.com/questions/12006366/add-back-nas-after-removing-them/12006502#12006502
image.df.factor <- rep(NA, length(image.df[,1]))
image.df.factor[!is.na(image.df[,1])] <- cluster.image$cluster
#create raster output
clusters <- raster(image) ## create an empty raster with same extent than "image"
clusters <- setValues(clusters, image.df.factor) ## fill the empty raster with the class results
plot(clusters)
}
我的问题是:我无法将分类结果相互比较,因为群集分配器因图像而异。例如,“水”在第一个图像簇编号1中,在下一个图像簇编号2中以及在第三个图像簇中,因此无法比较日期之间的水结果。
如何解决群集分配?
是否可以为所有图像指定一个固定的起点(希望总是先检测到水,然后分类为1)?
如果是的话,怎么办?