图像处理:平均灰度图像

问题描述 投票:5回答:1

我想用平均R. 2幅灰度图像(大小相同的两个PNG文件)

考虑下面作为一个例子的图像:

img1.png

enter image description here

img2.png

enter image description here

img3.png

enter image description here

img1.pngimg2.png的平均应导致类似img3.png。我看着到magickimager包没有成功。

r
1个回答
10
投票

当然也有这个问题的多种解决方案。这里有一个清楚发生了什么显示,并允许更多的灵活性。

让我们加载两个示例图片。

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")

enter image description here

所以,这种方法也适用于彩色图像和允许人们通过改变权重,等等。与式实验

© www.soinside.com 2019 - 2024. All rights reserved.