Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Photoshop'背后的算法是什么;是高光还是阴影变化?_Algorithm_Image Processing_Photoshop - Fatal编程技术网

Algorithm Photoshop'背后的算法是什么;是高光还是阴影变化?

Algorithm Photoshop'背后的算法是什么;是高光还是阴影变化?,algorithm,image-processing,photoshop,Algorithm,Image Processing,Photoshop,我想写一个图像增强算法,它类似于photoshop的高光和阴影变换功能。你能帮我了解一下photoshop的这项功能对图像的内部作用吗?简单方法 首先,您可以在他们的文档中找到一些线索: 从这些文档中很难猜测他们到底使用了哪种算法。下面,我将只尝试解释一些方法,我会使用,如果我面对这个问题。不要期望有一个清晰的算法,但用我的答案作为指针,至少可以引导你找到一条路径 据我所知,该算法在局部尺度上提高了对比度,这意味着它将根据邻域调整每个像素的值。 为此,您有几个输入参数: 邻域大小(或内核) 突

我想写一个图像增强算法,它类似于photoshop的高光和阴影变换功能。你能帮我了解一下photoshop的这项功能对图像的内部作用吗?

简单方法 首先,您可以在他们的文档中找到一些线索:

从这些文档中很难猜测他们到底使用了哪种算法。下面,我将只尝试解释一些方法,我会使用,如果我面对这个问题。不要期望有一个清晰的算法,但用我的答案作为指针,至少可以引导你找到一条路径

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

  • 邻域大小(或内核)
  • 突出显示阈值:以上所有内容都被视为属于突出显示
  • 阴影阈值:下面的所有内容都被视为属于阴影
文档中提到了其他一些,但它们对理解算法概念没有帮助

1.确定像素属于哪个类别:高光/阴影/无。

对于这个部分,您可以考虑从HSV转换中使用灰度图像或值通道。 我会看看像素和它的邻域。 计算局部分布的统计数据(均值和方差)

我会将均值与之前定义的阈值进行比较,然后使用方差来区分像素是否有噪声或属于轮廓,在这种情况下,我预计会出现巨大的方差

2.应用处理 如果像素属于阴影或高光类,则需要提高其对比度,而不是“灰色”,而是“颜色”对比度

哑方法:
将根据颜色通道的内部差异对其进行加权

这里有一个例子:考虑你的像素是:(32, 35, 50)(R,G,B),属于阴影类。我将确定3个系数Rc、Gc、Bc,它们定义在0.5-1.5(任意)之间,适用于各自的信道

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

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


其他(高级别)办法 拉普拉斯金字塔 使用金字塔来区分不同比例的细节,使用拉普拉斯来提高对比度

这些链接可能对您非常有帮助,特别是因为有可用的来源,并且对概念进行了很好的解释。 我建议你继续你的探索,在黑暗中寻找更深的东西。它是Lightroom强大的免费/开源替代品。
我已经在他们的博客上找到了一些有趣的东西

很抱歉回答不完整,我可能会回来改进。

所有的评论和建议都非常受欢迎

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

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;
lumR=0.299;
lumG=0.587;
lub=0.114;
//我们必须找到像素的亮度

//这里是0.0,您询问的是一个专用软件中使用的算法。它不是开源的,所以可能很难知道,因为:1-您没有代码来查看它实现了什么算法。2-最有可能的是photoshop提供了保护以避免反向工程。3-反向工程photoshop程序在某些国家可能是非法的,很可能是违反其EULA。我不想要确切的算法。我在找类似的东西。只是一个开始,这样我就可以自己写一些东西。“photoshop的这个功能对一个_图像内部有什么作用?”如果没有逆向工程,就不可能知道。到目前为止,你研究/尝试了什么?分享你的发现。开源软件包(GIMP)中是否存在相同的功能?当你在Photoshop中增加“阴影”参数时,绝对黑色仍然是黑色,而你增加的最多。@IvanKuckir我说这不准确,只是我的解决方法。