我正在尝试通过对多张图像进行平均来创建一张图像。为了实现这一目标,我首先需要将每个图像变暗一个因子,该因子等于我要平均的图像数量:
func darkenImage(by multiplier: CGFloat) -> CIImage? {
let divImage = CIImage(color: CIColor(red: multiplier, green: multiplier, blue: multiplier))
let divImageResized = divImage.cropped(to: self.extent) //Set multiplier image to same size as image to be darkened
if let divFilter = CIFilter(name: "CIMultiplyBlendMode", parameters: ["inputImage":self, "inputBackgroundImage":divImageResized]) {
return divFilter.outputImage
}
print("Failed to darken image")
return nil
}
接下来,我会将每个暗淡的图像相加(将图像1和2相加,然后将结果再与图像3相加等等):
func blend(with image: CIImage, blendMode: BlendMode) -> CIImage? {
if let filter = CIFilter(name: blendMode.format) { //blendMode.format is CIAdditionCompositing
filter.setDefaults()
filter.setValue(self, forKey: "inputImage")
filter.setValue(image, forKey: "inputBackgroundImage")
let resultImage = filter.outputImage
return resultImage
}
return nil
}
这段代码可以执行并生成新图片,但是我平均的图片越多,阴影部分就越暗。高光的亮度与每张单独图片差不多,但是暗部却变得越来越黑。有人知道可能出了什么问题吗?
为了减少潜在问题,我也尝试过在Lightroom中预先调暗图像再应用CIAdditionCompositing
滤镜。这给出了相同的结果,这让我认为CIAdditionCompositing
可能不仅仅是简单相加像素,而是使用了一些稍微不同的算法,但我没有找到任何文档资料。我也尝试改变调暗乘数以查看是否有计算错误,但如果我将图像调暗得更少,则在再次添加图像时高光会过度曝光。