CIAdditionCompositing 给出不正确的效果

2024-05-14

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

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: Original image

Average of 2 images: 2x average

Average of 8 images: 8x average

Average of 20 images: 20x average

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


这可能来得有点晚,但有些。

第一次尝试

我怀疑问题在于色域不是线性的,就像肯·托马斯提到的那样。不幸的是,将所有图像转换为与"CISRGBToneCurveToLinear"过滤器,并在所有图像堆叠后将它们转换回来"CILinearToSRGBToneCurve"并不能解决问题。

Solution

每次添加两张图像后使用曝光调整将曝光减半确实解决了问题。要将曝光减半,您需要将光圈值减小 1 级,因此曝光值 (EV) 需要为 -1。

此外,我添加了中间图像,只是因为当滤镜堆栈在我的旧手机上时,有时我会遇到麻烦。CIImage太大了。

if let evFilter = CIFilter(name: "CIExposureAdjust", parameters: ["inputImage":self, "inputEV":NSNumber(-1)]) {
    return evFilter.outputImage?.insertingIntermediate()
}

P.S.:请注意,为了创建正确的结果,图像需要相互添加并减半曝光,以便每个图像与结果图像具有相同的权重。只需添加下一张图像并随后减少曝光,最新添加的图像将始终占整体结果 50% 的权重。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CIAdditionCompositing 给出不正确的效果 的相关文章

  • iOS 和 Firebase 自动续订订阅

    我的问题 我很难找到一种使用 Firebase 在 iOS 中安全管理自动续订订阅的方法 购买流程 User1 purchases a subscription 使用订阅标识符更新 Firebase 上 User1 的帐户 用于解锁内容 存
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • iOS9 Sprite 套件问题

    一切都很顺利 直到我升级到 xCode 7 和 iOS 9 我当前的项目是一个 2D 平台游戏 自从升级以来 我就陷入了我们许多人似乎都面临的精灵套件错误 错误的困扰 我的问题是 每次游戏在模拟器或设备上运行时 所有精灵的 zPositio
  • 核心数据executeFetchRequest消耗大量内存

    我正在核心数据数据库中插入 cca 100 000 条记录 数据库包含 3 个实体 球员 俱乐部 球员俱乐部 实体之间存在关系 玩家 gt 玩家俱乐部俱乐部 在 PlayerClub 中插入时 我注意到插入大约 50 000 条记录后会消耗
  • NSWorkspaceWillPowerOffNotification 从未被调用

    我正在尝试在后台进程中运行一个程序 该程序将注册系统中的每个关闭事件 通过注册 NSWorkspaceWillPowerOffNotification 来实现此目的 如下所示 import
  • 强制本地化图像或图像资产

    正如在这个问题中 如何强制 NSLocalizedString 使用特定语言 https stackoverflow com questions 1669645 how to force nslocalizedstring to use a
  • 以编程方式更改自动布局约束后视图未更新

    事先我必须说 我实际上得到了我想要的可见效果 但不是以令人满意的方式 因为现在需要 打破 约束而不是正确更新 我有一个 ViewController 其中包含一个 UITableView 那个的高度tableView可以从 0 不可见 到它
  • C“睡眠”函数(大写“S”)在 Mac 上有什么作用?

    注意其中的大写 S Sleep Sleep大写 S 是在 PC 上休眠毫秒的标准函数 在 Mac OS X 上 没有这样的符号 然而 Xcode 链接环境似乎找到了可以链接到的东西 它是什么 嗯 这是一个古老的 Carbon 函数 在 Co
  • 如何使用 SwiftUI 使按钮可拖动/可移动?

    我正在尝试使用 SwiftUI 制作一个可移动的按钮 从看起来这应该可行 我尝试将带有文本的按钮放入另一个 ZStack 中 有一秒钟它可以工作 但一旦我释放按钮 拖动就会停止 我无法再拖动 我注意到尽管按钮已经移动 但水龙头仍然位于中心
  • iOS 中第一响应者的正式定义是什么?

    据我所知 第一响应者对象是根据输入活动等接收回调信号 并且它将沿着链向上冒泡 直到找到愿意处理它的响应者 但更正式地说 第一响应者的范围是什么 例如 它是应用程序范围的响应程序吗 似乎作为第一响应者只是说这个特定的对象将收到交互通知 其他响
  • libtiff 错误:未配置旧式 JPEG 压缩支持

    在 Mac OS X 上使用 libtiff 将 TIFF 转换为 BMP 时 出现以下错误 scannerdata tif Old style JPEG compression support is not configured scan
  • 当您从不同的视图控制器进行segue时,如何将数据从一个视图控制器保存(追加)到另一个视图控制器?

    抱歉 问题有点长 请多多包涵 基本上 我正在尝试使用 swift 编写一个简单的递增 递减 ios 应用程序 我有三个主视图控制器 一个是 初始视图控制器 即根视图控制器 仅包含两个按钮 一个以模态方式呈现到实际计数页面 第二个视图控制器
  • Xcode 7.2 无法连接到装有 iOS 9.2 的 iPhone

    出于开发目的 我已经在我的 iPhone 5s 上安装了 iOS 9 2 beta 当然 我还安装了Xcode 7 2 beta 当我想在设备上运行应用程序扩展 键盘 时 该应用程序会正确构建 安装在 iPhone 上并启动 然而 然后我在
  • Swift 字典映射 - 闭包中的 init

    我有 Swift 字典 private var params String AnyObject 这包含查询项目 例如 lat 40 lon 100 我想将这本词典映射到NSURLQueryItem大批 我想让它 迅速 params map
  • 如何在复杂的层次结构中上下同步 CALayer 和 UIView 动画

    See 如何在整个层次结构中管理 CALayer 动画 https stackoverflow com questions 26917908 how to manage calayer animations throughout a hie
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • 如何动态添加XCTestCase

    我正在为一个白标签项目编写 UI 测试 其中每个应用程序都有一组不同的菜单项 测试点击每个菜单项并截取屏幕截图 使用快车道快照 https docs fastlane tools actions snapshot 目前这一切都发生在一个内部
  • iOS 上的推送通知渐进式 Web 应用程序

    我需要开发一个集成了推送通知的渐进式网络应用程序 在网上搜索我发现了关于这个主题的不同意见 如果我理解正确的话 目前我们无法在移动版 safari 中推送通知 但仅限桌面版 这样对吗 你有什么建议来获得相同的结果吗 我不是iOS专家 我想知
  • Objective-C 中 NSURL 为 null 而 NSString 是正确的

    我有一个NSString包含一个 url 以及当我分配时NSURL与NSString NSURL 输出 空 这是因为url中有一些非法字符 导致NSURL不编码就无法读取NSString包含网址 NSString u incomingUrl
  • 在启动屏幕中执行代码已更新

    在原始启动屏幕中执行代码 https stackoverflow com questions 27642016 execute code in launch screen 现在默认的LaunchScreenXcode 项目中的文件已更改为

随机推荐