Изменить диапазон цвета растрового изображения в R - PullRequest
0 голосов
/ 21 апреля 2020

Я фотографирую на черном фоне, но из-за света он может немного отражаться. В RI хотел бы изменить фон на черный (RGB = 0). Я хотел бы выбрать цвет со значениями RGB ниже 80 и изменить на 0.

enter image description here

Я использую этот код в R:

 library(raster)
    folder <- "C:/Users/PC/Pictures/"
    img <- list.files(folder) 
    img.raster<-stack(img)
    names(img.raster) <- c('r','g','b')
    color <- 80
    img.black<-img.raster[[1]]
    img.black[img.raster$r<color & img.raster$g<color & img.raster$b<color] <- 0

Я перестроил свое изображение, используя стек

image = stack(img.black, img.black, img.black)

Но при этом я теряю информацию, поскольку у меня есть тот же слой для R, G и B. Если я попытался:

image = stack(img.black, img.raster, img.raster)

таким образом размер изображения составляет 7 !!

Как выбрать диапазон цветов и изменить его, не изменяя размер изображения и другие цвета. Нужно ли использовать растр или есть другое решение?

1 Ответ

1 голос
/ 22 апреля 2020

Вот как ты мог это сделать. Обратите внимание, что я обновил цвет до 255 вместо 0, чтобы увидеть эффект в этом примере. Также вы использовали первый слой RGB как черный. Я полагаю, вы хотели третий.

Пример данных

library(raster)
img <- stack(system.file("external/rlogo.grd", package="raster"))
plotRGB(img)

Решение

color_threshold <- 80
update_value <- 255 # 0 in your case
black <- 3 
i <- all(img < color_threshold)
img[[black]] <- mask(img[[black]], i, maskvalue=1, updatevalue=update_value)
plotRGB(img)

Или, возможно, это то, что вам нужно - обновить все ячейки до нуля, а не только черный канал:

img <- brick(system.file("external/rlogo.grd", package="raster"))
img2 <- mask(img, all(img < 80), maskvalue=1, updatevalue=0)
plotRGB(img2)
...