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

标签 algorithm image-processing photoshop

我想写一个类似于photoshop的高光和阴影修改功能的图像增强算法。你能帮我看看 photoshop 的这个功能在内部对图像做了什么吗?

最佳答案

简单方法

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

很难从这些文档中准确猜出他们使用的是哪种算法。下面我只会尝试解释一些我在遇到这个问题时会使用的方法。不要指望有一个清晰的算法,但请使用我的答案作为指导,至少可以引导您找到一条路径。

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

  • 邻域大小(或内核)
  • Highlight Threshold:以上都属于highlight
  • Shadow Threshold:低于此值的一切都被认为属于阴影

文档中提到了其他一些,但它们对理解算法概念没有用。

1。判断像素属于哪个类别:高光/阴影/无。

对于这部分,您可以考虑使用灰度图像或 HSV 变换的值 channel 。

我会查看像素及其邻域。 计算局部分布的统计量(均值和方差)。

我会将均值与之前定义的阈值进行比较,然后使用方差来区分像素是有噪声还是属于轮廓,在那些情况下我会期望有很大的方差。

2。应用处理

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

愚蠢的方法:
将根据内部方差对您的颜色 channel 进行加权。

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

由于蓝色占主导地位,我会为蓝色设置一个高系数,如 1.3,并降低 R 和 G channel 的重要性,系数约为 0.8。

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


其他(高级)方法

拉普拉斯金字塔

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

这些链接可能对您很有帮助,特别是因为资源可用并且概念得到了很好的解释。 我建议您继续寻求更深入地了解 darktable。它是 Lightroom 的强大免费/开源替代品。
我已经通过查看他们的博客发现了一些有趣的东西。

很抱歉这个不完整的答案,我可能会回来改进它。
非常欢迎所有意见和建议

关于algorithm - Photoshop 的高光或阴影改变背后的算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51591445/

相关文章:

algorithm - 从左列到右列的路径的最大总和

image-processing - Canny 边缘检测和 LoG 的区别

video - 在哪里可以找到面部检测软件、算法等?

Java 识别图像中的特定对象

css - Origami(facebook 的原型(prototype)框架)的用途和原因是什么?

javascript - 将智能对象的比例重置为 100% 的脚本

ios - 惯性滚动算法与帧无关 - 预测结束位置

python - 如何检查 IP 地址是否在 python 网络列表中的任何网络中?

algorithm - 如何理解代码: to calculate the number of 1 in range(0:a)

jquery - 根据浏览器窗口动态更改表格大小