Извлеките каждый слой RGB из растра и вставьте в матрицу в R - PullRequest
1 голос
/ 07 мая 2020

Я хочу сохранить растровое изображение в пустой матрице. Я загружаю свое изображение и создаю пустую матрицу того же размера.

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 растра в соответствующую матрицу. Наконец, соберите матрицу 3 для создания изображения.

Как это сделать?

1 Ответ

2 голосов
/ 07 мая 2020

Существует метод as.array для объектов класса raster.

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

Как видите, это приведет к преобразованию растрового объекта в трехмерный массив.

...