Я пытаюсь создать изображение, усредняя несколько других изображений. Чтобы достичь этого, я сначала затемняю каждое изображение на коэффициент, эквивалентный количеству изображений, которые я усредняю:
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
может не просто складывать пиксели, а использовать какой-то немного другой алгоритм, но я не нашел никакой документации по этому поводу. Я также попытался изменить множитель затемнения, чтобы увидеть, не ошибся ли я в расчетах, но если я затемняю изображения меньше, блики становятся переэкспонированными при повторном объединении изображений.