Имитация матрицы данных с использованием R в качестве полос спутниковых изображений с нуля - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь 1) Имитировать матрицу данных, используя R (в действительности это изображение чисел, где каждая ячейка в матрице имеет число в числовой шкале 0-255 (8-битные данные))

2) Нанесите на карту смоделированные данные, используя инструменты отображения

3) Классифицируйте изображение на 8-10 классов

Идея состоит в том, чтобы использовать простую функцию для создания изображения с 3 полосами красного Зеленые и синие изображения, имитирующие мультиспектральные изображения со спутника. Итак, состав из 3 разных матриц. Вот так.

Example

Затем классифицируйте состав по цвету на 8 или 10 классов. Любая помощь будет высоко оценена.

1 Ответ

2 голосов
/ 06 апреля 2020

Исходя из ваших комментариев, вот подход к выборке в качестве градиента.

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. Матрица содержит 100 * 100 случайных выборок между 0 и 255, но в cuts число возрастающих групп.

Затем мы можем контролировать направление градиента, используя byrow = в matrix и используя 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)

enter image description here

...