我想用平均R. 2幅灰度图像(大小相同的两个PNG文件)
考虑下面作为一个例子的图像:
img1.png
img2.png
img3.png
当然也有这个问题的多种解决方案。这里有一个清楚发生了什么显示,并允许更多的灵活性。
让我们加载两个示例图片。
library(png)
img1 <- readPNG("owzUE.png")
img2 <- readPNG("HMka0.png")
它发生,他们不相同尺寸的:
dim(img1)
# [1] 145 190 4
dim(img2)
# [1] 144 191 4
所以,让我们的大小相同与
img1 <- img1[1:144, 1:190, 1:4]
img2 <- img2[1:144, 1:190, 1:4]
每个图像由四个矩阵,前三个对应于RGB通道和最后一个字母。让我们先来定义生成的图像
img3 <- img1 * 0
这很好地给出相同的尺寸和img1
img2
的阵列。
一个密切相关的概念是alpha blending但公式是不是正是你需要的;有图像之间的关系似乎并不是对称的。我们可以做的是考虑加权平均每个RGB通道,其中权重对应于相应的阿尔法:
for(d in 1:3)
img3[, , d] <- (img1[, , d] * img1[, , 4] + img2[, , d] * img2[, , 4] ) / (img1[, , 4] + img2[, , 4])
由于在某些情况下,这两个阿尔法为0,我们解决这些例
img3[is.nan(img3)] <- 0
最后,我们的α值设定为两个图像的一个较大的
img3[, , 4] <- pmax(img1[, , 4], img2[, , 4])
并保存结果
writePNG(img3, "img3.png")
所以,这种方法也适用于彩色图像和允许人们通过改变权重,等等。与式实验