我正在尝试1)使用R来模拟一个数据矩阵(实际上是一个数字图像,矩阵中的每个单元都有一个0-255 (8位数据)的数字)
2)使用映射工具映射模拟数据
3)将图片分为8-10类
这个想法是使用一个简单的函数来生成一个具有3个波段的红色、绿色和蓝色图像的图像,模拟来自卫星的多光谱图像。所以三种不同的母体的组合。就像这样。

然后根据颜色将合成材料分为8或10类,如果有任何帮助,将非常感谢。
发布于 2020-04-07 00:11:41
基于你的评论,这里是一种将样本作为渐变的方法。
imagerows <- 100
imagecols <- 100
cuts <- 8
(imagecols * imagerows) %% cuts == 0 #Must be true
colorgroups <- as.integer(cut(0:255,cuts))
colors <- c("red","green","blue")
result <- lapply(colors,function(y){
unlist(
lapply(seq(1,cuts),function(x){sample((0:255)[colorgroups == x],
size = (imagerows*imagecols)/cuts,
replace = TRUE)})
)})result现在是一个长度为3的列表,其中每个元素都是一个100x100矩阵。该矩阵包含0和255之间的100 * 100个随机样本,但在cuts中增加了组的数量。
然后,我们可以使用matrix中的byrow =和对数据使用rev()来控制渐变的方向。
red.matrix <- matrix((result[[1]]),nrow=imagerows,ncol=imagecols,byrow = TRUE)
green.matrix <- matrix((result[[2]]),nrow=imagerows,ncol=imagecols,byrow = FALSE)
blue.matrix <- matrix(rev(result[[3]]),nrow=imagerows,ncol=imagecols,byrow = FALSE) 然后我们把颜色和rgb()放在一起,它输出一个向量。我们可以通过分配维度将其强制返回到矩阵中。然后使用grid.raster()进行绘图。
library(grid)
rgb.matrix <- rgb(red.matrix,green.matrix,blue.matrix,maxColorValue = 255)
dim(rgb.matrix) <- c(imagerows,imagecols)
grid.newpage()
grid.raster(rgb.matrix,interpolate = FALSE)

https://stackoverflow.com/questions/61064004
复制相似问题