给定一个jpeg,将该jpeg的曝光更改为+/-1 stop或称为1 EV的公式是什么?我想模拟这种曝光变化。有没有这样做的公式/方法?
发布于 2015-08-06 05:53:26
我可以使用ImageMagick进行演示,它包含在大多数Linux发行版中,可从here获得,可用于OSX和Windows。
首先,在终端命令行中创建一个映像:
convert -size 512x512 gradient:black-yellow gradient.png

现在,增加+1 stop曝光量的方法是使用Screen混合模式将图像本身合成-它在Photoshop和ImageMagick中可用,并且描述为here。
因此,将图像A与图像B合成的公式为:
1-stop brighter image = 1-(1-A)(1-B)但当我们将图像与自身合成时,A和B是相同的,所以我们实际上有
1-(1-A)(1-A)ImageMagick指的是使用p而不是A的图像像素,所以我们可以像这样进行一站式的增加:
convert gradient.png -colorspace RGB -fx "(1-(1-p)(1-p))" result.png请注意,维基百科的文章和ImageMagick的-fx都假设像素强度在0和1.0之间有所不同。如果您使用8位图像,则应使用255而不是1进行计算,即
+1 stop brighter image = 255-(255-A)(255-A)或者如果使用16位值
+1 stop brighter image = 65535-(65535-A)(65535-A)但是,上面的fx-based方法非常慢,因为-fx是解释的,而不是编译的,所以更快的方法是:
convert gradient.png gradient.png -colorspace RGB -compose screen -composite screen.png有趣的是,另一种方法是我们取A的逆,也就是1-A,然后求逆,所以可以这样做:
convert gradient.png -colorspace RGB -negate -evaluate pow 2 -negate result.png

-1 stop曝光减少的等价物是使用Multiply混合模式将图像与自身合成,公式为
1-stop darker image = A x B你可以更快的使用它
convert gradient.png gradient.png -colorspace RGB -compose multiply -composite result.png或者更快,通过使用内存到内存克隆,而不是两次从磁盘读取,
convert gradient.png -colorspace RGB +clone -compose multiply -composite result.png但也可以与
convert gradient.png -colorspace RGB -evaluate pow 2 result.png

https://stackoverflow.com/questions/31830260
复制相似问题