从头开始使用 R 作为卫星图像波段模拟数据矩阵

Simulate a matricies of data using R as bands of satellite imagery from scratch

我正在尝试 1) 使用 R 模拟数据矩阵(实际上是数字图像,其中矩阵中的每个单元格都有一个数字标度为 0-255(8 位数据))

2) 使用映射工具映射模拟数据

3) 将图像分类为8-10 类

我们的想法是使用一个简单的函数来生成具有 3 个红绿蓝图像波段的图像,模拟来自卫星的多光谱图像。所以是 3 个不同矩阵的组合。像这样。

然后按颜色将复合材料分类为 8 或 10 类 任何帮助将不胜感激。

根据您的意见,这里提供了一种渐变采样方法。

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 矩阵。该矩阵包含 0255 之间的 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)