从头开始使用 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 矩阵。该矩阵包含 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)
我正在尝试 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 矩阵。该矩阵包含 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)