gpt4 book ai didi

ios - CIAdditionCompositing 产生不正确的效果

转载 作者:行者123 更新时间:2023-12-03 09:23:21 24 4
gpt4 key购买 nike

我正在尝试通过平均其他几个图像来创建图像。为了实现这一点,我首先将每个图像变暗一个与我平均的图像数量相等的因子:

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

2张图像的平均值:
2x average

8张图像的平均值:
8x average

平均 20 张图像:
20x average

为了减少潜在问题的数量,我还尝试在 Lightroom 中预先使图像变暗,然后仅应用 CIAdditionCompositing筛选。这给出了相同的结果,这让我认为 CIAdditionCompositing可能不仅仅是将像素相加,而是使用一些略有不同的算法,但我还没有找到任何关于此的文档。我还尝试更改变暗乘数以查看是否计算错误,但是如果我将图像变暗较少,则再次将图像添加在一起时,高光会过度曝光。

最佳答案

这可能来得有点晚,但有些。
第一次尝试
我怀疑问题在于色域不是线性的,就像 Ken Thomases 提到的那样。不幸的是将所有图像转换为线性 "CISRGBToneCurveToLinear"过滤器并在所有图像堆叠后将它们转换回 "CILinearToSRGBToneCurve"不能解决问题。
解决方案
每次添加两个图像后,使用曝光调整将曝光减半确实解决了问题。要将曝光减半,您需要将 f-stop 降低 1 步,因此曝光值 (EV) 需要为 -1。
此外,我添加了中间图像只是因为我的旧手机有时会在 CIImage 中的过滤器堆栈中遇到麻烦。太大了。

if let evFilter = CIFilter(name: "CIExposureAdjust", parameters: ["inputImage":self, "inputEV":NSNumber(-1)]) {
return evFilter.outputImage?.insertingIntermediate()
}
P.S.:请注意,要创建正确的结果,需要将图像相互添加并减半曝光,以便每个图像对生成的图像具有相同的权重。简单地添加下一张图像并随后减少曝光将始终使最新添加的图像占整体结果的 50% 权重。

关于ios - CIAdditionCompositing 产生不正确的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59387956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com