鉴于jpeg,将jpeg的曝光量改变+/- 1级或称为1 EV的公式是什么?我想模拟这种曝光变化。有这样的公式/方法吗?
答案 0 :(得分:1)
我可以演示使用ImageMagick,它包含在大多数Linux发行版中,可用于here的OSX和Windows。
首先,在终端命令行中创建一个图像:
convert -size 512x512 gradient:black-yellow gradient.png
现在,实现+1 stop
曝光增加的方法是使用Screen
混合模式将图像与自身合成 - 它在Photoshop和ImageMagick中可用,并且描述为here。< / p>
因此,将图像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
的方法非常慢,因为-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