修改R中光栅图像的颜色范围
Modify range of color of raster image in R
我拍的是黑色背景的照片,但是由于光线的原因,它可能会有一些反光。在 R 中,我想将背景更改为黑色(RGB = 0)。我想select把RGB值小于80的颜色改成0。
我在 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了!!
如何 select 颜色范围并在不修改图像尺寸和其他颜色的情况下更改它。我需要使用光栅还是有其他解决方案?
这里是你如何做到这一点。请注意,我将颜色更新为 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)
我拍的是黑色背景的照片,但是由于光线的原因,它可能会有一些反光。在 R 中,我想将背景更改为黑色(RGB = 0)。我想select把RGB值小于80的颜色改成0。
我在 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了!!
如何 select 颜色范围并在不修改图像尺寸和其他颜色的情况下更改它。我需要使用光栅还是有其他解决方案?
这里是你如何做到这一点。请注意,我将颜色更新为 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)