我正在尝试通过平均其他几个图像来创建图像。为了实现这一点,我首先将每个图像变暗,其系数等于我平均的图像数量:
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
}
该代码执行并生成一个新图像,但是我平均在一起的图像越多,阴影就越暗。高光部分与每个单独图像的亮度大致相同,但较暗的部分会变得越来越暗。有谁知道可能出了什么问题?
Original image:
Average of 2 images:
Average of 8 images:
Average of 20 images:
为了减少潜在问题的数量,我还尝试在 Lightroom 中将图像调暗,然后应用CIAdditionCompositing
筛选。这给出了相同的结果,这让我认为CIAdditionCompositing
可能不仅仅是添加像素,而是使用一些稍微不同的算法,但我还没有找到任何关于此的文档。我还尝试更改变暗乘数以查看是否存在计算错误,但如果我将图像变暗得较少,则在再次将图像添加在一起时,高光会变得曝光过度。