从光栅中提取每个 RGB 图层并粘贴到 R 中的矩阵中

Extract each RGB layers from raster and paste into matrix in R

我想将光栅图像存储到一个空矩阵中。我加载图像并创建一个相同维度的空矩阵。

setwd("C:/Users/Desktop/image/")
img_path <- "image.jpeg"
raster <- brick(img_path, package="raster")
nrow <- dim(raster)[1]
ncol <- dim(raster)[2]
img_matrix <- matrix(, nrow = nrow, ncol = ncol)
dim(raster)
[1]  896 1408    3
dim(img_matrix)
[1]  896 1408

当我尝试将栅格加载到矩阵中时出现此错误:

img_matrix[1, 1] <- raster
Error in img_matrix[1, 1] <- raster : 
number of items to replace is not a multiple of replacement length

我认为问题是栅格中有 3 层而矩阵只有 1。所以我想我创建了 3 个矩阵并将栅格的每个 R、G、B 层粘贴到相关矩阵中。最后,assemble创建图像的3个矩阵。

怎么做?

class raster 的对象有一个 as.array 方法。

library(raster)
raster <- brick("3.jpg", package="raster")
dim(raster)
#[1] 665 800   3

array <- as.array(raster)
dim(array)
#[1] 665 800   3

array[201:205,401:405,1]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]  244  244  244  244  244
#[2,]  244  244  244  244  244
#[3,]  244  244  244  244  244
#[4,]  244  244  244  244  244
#[5,]  244  244  244  244  244

array[201:205,401:405,2]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]  202  202  202  202  202
#[2,]  202  202  202  202  202
#[3,]  202  202  202  202  202
#[4,]  202  202  202  202  202
#[5,]  202  202  202  202  202

如您所见,这会将光栅对象强制转换为三维数组。