Photoshop的高光或阴影更改背后的算法是什么?

时间:2018-07-30 09:58:48

标签: algorithm image-processing photoshop

我想写一个图像增强算法,该算法类似于photoshop的高光和阴影更改功能。关于photoshop的此功能在图像内部有什么帮助?

2 个答案:

答案 0 :(得分:4)

简单方法

首先,您已经在其文档中找到了一些线索:https://helpx.adobe.com/photoshop/using/adjust-shadow-highlight-detail.html

从这些文档中很难猜测出它们到底使用了哪种算法。下面,我将仅尝试解释如果遇到此问题将使用的一些方法。别指望有一个明确的算法,但是请使用我的答案作为指针至少将您驱动到一条路径。

据我了解,该算法可在局部范围内改善对比度,这意味着对于每个像素,它将根据邻域调整值。 为此,您有几个输入参数:

  • 邻居大小(或内核)
  • 突出显示阈值:以上所有内容均视为突出显示
  • 阴影阈值:以下所有内容均被视为阴影

文档中提到了其他算法,但是它们对理解算法概念没有帮助。

1。确定像素所属的类别:高光/阴影/无。

对于这一部分,您可以考虑使用灰度图像或HSV转换中的“值”通道。

我来看看像素及其附近。 计算局部分布的统计量(均值和方差)。

我将把平均值与先前定义的阈值进行比较,然后使用方差来区分像素是否嘈杂或属于轮廓,在这种情况下,我将期待巨大的方差。

2。应用处理

如果像素属于阴影或高光类别,则要提高其对比度,而不是“灰色”对比度,而不是“颜色”对比度。

愚蠢的方法:
将根据它们的内部差异来加权您的颜色通道。

这里是一个示例:考虑您的像素为:(32,35,50)(R,G,B)并属于阴影类。我将确定3个系数Rc,Gc,Bc,它们定义在0.5至1.5(任意)之间,适用于各个通道。

由于蓝色占主导地位,所以我将对蓝色具有较高的系数,如1.3,并降低R和G通道的重要性,系数约为0.8。

要计算这些系数,您可以考虑一下颜色方差,即颜色通道本身之间的差异以及每个通道之间的差异以及像素均值。


其他(高级)方法

拉普拉斯金字塔

使用金字塔来区分不同比例的细节,使用拉普拉斯来提高对比度。

这些链接可能对您确实有帮助,尤其是因为有可用的资源并且对概念进行了很好的解释。 我建议您继续寻求在暗表中更深入的探索。它是Lightroom的强大免费/开源替代品。
仅通过查看他们的博客,我已经发现了一些有趣的东西。

对于这个不完整的答案很抱歉,我可能会回到那里改进它。
所有评论和建议都值得欢迎

答案 1 :(得分:0)

您可以遵循以下技术。它不准确,但模仿得很好。

lumR = 0.299;
lumG = 0.587;
lumB = 0.114;

// we have to find luminance of the pixel
// here 0.0 <= source.r/source.g/source.b <= 1.0 
// and 0.0 <= luminance <= 1.0

luminance = sqrt( lumR*pow(source.r,2.0) + lumG*pow(source.g,2.0) + lumB*pow(source.b,2.0));



// here highlights and and shadows are our desired filter amounts
// highlights/shadows should be <= -1.0 and <= +1.0
// highlights = shadows = 0.0 by default
// you can change 0.05 and 8.0 according to your needs but okay for me

h = highlights * 0.05 * ( pow(8.0, luminance) - 1.0 );
s = shadows * 0.05 * ( pow(8.0, 1.0 - luminance) - 1.0 );

output.r = source.r + h + s;
output.g = source.g + h + s;
output.b = source.b + h + s;