我正在尝试在我的iOS应用程序中重现Adobe Lightroom效果。目前,我对所有效果都使用GPUImage
,但发现难以重现“高光”和“阴影”效果。另外,我已经尝试过使用CIFilter中的CIHighlightShadowAdjust
,但结果却是错误的。
因此,我正在寻找至少由Lightroom用于此效果的算法。它们两者都与亮度更改非常相似,但是看起来它们仅用于更改图片的明暗部分,具体取决于是否使用了高光或阴影。
任何人都可以指出正确的方向来实现相同的效果吗?如何仅更改图片的暗/亮部分的亮度?
这里是例子 1.左为原始图像,右为具有+100高光调整的图像(可能的范围是-100; 100,默认值为0)。
您可以看到天空(图像的较亮部分)具有不同的亮度,但是雕像几乎没有变化。
在这里您可以看到雕像(图片的较暗部分)的亮度变化很大,但是天空几乎没有变化。
答案 0 :(得分:1)
似乎已应用了非线性亮度变换。例如,突出显示效果可能意味着只有图像的较亮部分具有更高的亮度,而阴影调整可能意味着图像的较暗部分具有更高的亮度。
一般方法是
亮度转换函数的一个特征是,它通常仅拉伸或压缩一定的亮度范围(在示例图像中可以很好地显示出来)。通常,这不仅仅需要一个参数(您需要定义受影响的直方图的范围以及强度)。看来Adobe具有一些启发式的功能,即它视为阴影,而其视为高光(可能是亮度直方图的平均值)作为截止值,而仅提供强度作为参数。
转换的确切形状也取决于您自己的口味。我玩了一些
看起来像您可以使用的突出显示的突出显示部分(转换为CIELAB,Ligthness L从0-100开始)是分段线性函数:
a = 1.5
b = 50
L(L>b)=a*L(L>b)-(a-1)*b
与您的阴影增强效果相似的阴影增强效果,我可以通过指数衰减的增强得到。
a = 4;
b = 20;
L = ((a-1)*exp(-L/b)+1) * L;
您看到我总是需要至少两个参数,并且我相信一个参数可以找到更好的转换函数,但是结果强烈表明,从本质上讲,它不只是可以在iOS中复制的亮度转换。应用程式。尝试使用不同的转换函数可能会更好地了解什么是好的,什么不是。