У мене є часовий ряд супутникових зображень (5 діапазонів) і хочу класифікувати їх по 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 і в третьому 10, що робить неможливим порівняння результатів води між датами.
Як я можу виправити призначення кластеру?
Чи можу я вказати фіксовану початкову точку для всього зображення (сподіваючись, що вода завжди виявляється першою і, таким чином, класифікується як 1)?
І якщо так, то як?