如何在iOS应用中重现Adobe Lightroom的高光和阴影效果

问题描述 投票:1回答:1

我正在尝试在我的iOS应用程序中重现Adobe Lightroom效果。目前我正在使用GPUImage进行所有效果,但发现难以重现高光和暗影效果。此外,我已经尝试使用CIFilter的CIHighlightShadowAdjust,但它给了我错误的结果。

所以我至少在寻找Lightroom用于此效果的算法。它们都与亮度变化非常相似,但似乎它们仅用于改变图像的亮/暗部分,取决于是否使用了高光或阴影。

任何人都可以指出正确的方向我需要看到什么来产生相同的效果?如何仅为图片的暗/亮部分改变亮度?

以下是示例1.左边是原始图像,右边是具有+100高光调整的图像(可能范围-100; 100默认为0)。

Highlights +100

你可以看到天空(图像的较亮部分)有不同的亮度,但雕像几乎没有改变。

  1. 左边是原始图像,右边是具有+100阴影调整的图像(可能范围-100; 100默认为0)。

Shadows + 100

在这里你可以看到雕像(图片的较暗部分)的亮度发生了很大的变化,但是天空几乎没有变化。

ios image-processing gpuimage
1个回答
1
投票

它看起来像是应用了非线性亮度变换。例如,突出显示效果可能意味着只有图像的较亮部分具有更高的亮度,并且阴影调整可能意味着图像的较暗部分具有增加的亮度。

一般方法是

  • 将RGB图像数据转换为颜色空间,亮度为单独的维度,例如HSL或CIELAB。
  • 使用单个变换函数逐像素地变换亮度/亮度/亮度,该变换函数是连续且单调增加的,但是限制在允许值的范围内。这类似于非线性拉伸或压缩亮度直方图。
  • 用转换的亮度替换原始亮度。
  • 转换回RGB色彩空间。

亮度变换功能的一个特点是它通常只会拉伸或压缩某个亮度范围(您可以在示例图像中很好地显示)。这通常需要的不仅仅是一个参数(您需要定义受影响的直方图的范围以及强度)。它看起来像Adobe有一些启发式方法它被视为阴影,它作为高光(可能是亮度直方图的平均值)视为截止,它只提供强度作为参数。

转型的确切形状也符合您的口味。我玩了一下

突出显示类似于我可以使用的突出显示(转换为CIELAB和Lightness L从0到100)的分段线性函数:

a = 1.5
b = 50
L(L>b)=a*L(L>b)-(a-1)*b

enter image description here

阴影增强看起来类似于你的阴影增强,我可以通过指数衰减的增强来获得。

a = 4;
b = 20;
L = ((a-1)*exp(-L/b)+1) * L;

enter image description here

你看,我总是需要至少两个参数,我相信一个人可以找到更好的转换函数,但结果强烈暗示,实质上它只不过是一个亮度转换,可以在iOS应用程序中重现。使用不同的转换函数可能会更好地理解什么是好的,什么不是。

© www.soinside.com 2019 - 2024. All rights reserved.