将两个图像添加到一个 R 中混合它们的颜色

Adding two images into one R mixing their colors

大家好我有一个大小为 1000 宽和 500 高的矩阵。我知道如何使用 R 中的 tiff 和图像函数从矩阵制作图像。我制作了 2 张图片,其中 imageA 具有颜色代码 colorRamPalette(c("white","re​​d","black")),而 imageB 具有颜色代码 colorRamPalette(c("white","blue","black"))。我正在尝试将 2 个图像组合起来以创建一个颜色也适当混合的图像。我做了以下事情:

library(raster)
library(rgdal)
RED<-raster("imageA.tiff");
BLUE<-raster("imageB.tiff");
RB <- overlay(RED, BLUE,fun=sum)
tiff("imageAB.tiff",width=1000,height=500,units="px");
my_palette <- colorRampPalette(c("black","red","blue","white"))
par(mar=c(0,0,0,0))
image(RB, xaxt= "n", yaxt= "n", bty="n", col=my_palette, useRaster=TRUE);
dev.off()

我假设叠加功能会混合颜色并将一个图像叠加在另一个图像之上,但我不知道如何在红色图像叠加在蓝色图像上时显示输出的着色方案。感谢您的帮助。

示例图片:

r <- 1000
c <- 500
m0 <- matrix(0, r, c)
m1 <- apply(m0, c(1,2), function(x) sample(c(0,1),1)) 

tiff("m1.tiff",width=1000,height=500,units="px");
my_palette <- colorRampPalette(c("blue","white"));
par(mar=c(0,0,0,0))
image(m1,xaxt= "n", yaxt= "n", bty="n", col=my_palette(256),useRaster=TRUE);
dev.off()

m2 <- apply(m0, c(1,2), function(x) sample(c(0,1),1))
tiff("m2.tiff",width=1000,height=500,units="px");
my_palette <- colorRampPalette(c("red","white"));
par(mar=c(0,0,0,0))
image(m2,xaxt= "n", yaxt= "n", bty="n", col=my_palette(256),useRaster=TRUE);
dev.off()

合并两个图像后,输出图像应该是添加两个图像的颜色 blue+red=magentaish(适当)。 我使用了此处所示的栅格函数,并没有在这里使用任何其他变量。

罗伯特回复后: 我编辑了我的代码,这按预期工作:

r <- 1000
c <- 500
m0 <- matrix(0, r, c)
m1 <- apply(m0, c(1,2), function(x) sample(c(0,1),1)) 

tiff("m1and2.tiff",width=1000,height=500,units="px");
my_palette1 <- colorRampPalette(c("white","red"));   
m2 <- apply(m0, c(1,2), function(x) sample(c(0,1),1))
my_palette2 <- colorRampPalette(c("white","blue"))(256);
my_palette2<-paste(my_palette2, sprintf("%x", ceiling(255*0.5)), sep="");#alpha=0.5

par(mar=c(0,0,0,0))
image(m1, xaxt= "n", yaxt= "n", bty="n", col=(my_palette1(256)),useRaster=TRUE);
image(m2, xaxt= "n", yaxt= "n", bty="n", col=my_palette2,add=TRUE,useRaster=TRUE);
dev.off()

我还找到了图像功能的 add=TRUE 参数。

也许这有帮助。这个想法是绘制两次,第二次使用 50% 的透明度。 image 没有 add=TRUE 但你可以直接使用 graphics::rasterImage 部分透明的颜色。

library(raster)
r1 <- r2 <- raster(matrix(0, 5, 5))
r1[c(1,3,5), ] <- 1
r2[, c(1,3,5)] <- 1

pal1 <- colorRampPalette(c("blue","white"));
pal2 <- colorRampPalette(c("red","white"));

par(mar=c(0,0,0,0))
plot(r1, col=pal1(2), legend=FALSE, legend.mar=0, legend.width=0)
plot(r2, col=pal2(2), alpha=.5, add=TRUE, legend=FALSE)