改变jpeg的曝光

时间:2015-08-05 10:44:09

标签: image-processing graphics image-manipulation

鉴于jpeg,将jpeg的曝光量改变+/- 1级或称为1 EV的公式是什么?我想模拟这种曝光变化。有这样的公式/方法吗?

1 个答案:

答案 0 :(得分:1)

我可以演示使用ImageMagick,它包含在大多数Linux发行版中,可用于here的OSX和Windows。

首先,在终端命令行中创建一个图像:

convert -size 512x512 gradient:black-yellow gradient.png

enter image description here

现在,实现+1 stop曝光增加的方法是使用Screen混合模式将图像与自身合成 - 它在Photoshop和ImageMagick中可用,并且描述为here。< / p>

因此,将图像A与图像B合成的公式为:

1-stop brighter image = 1-(1-A)(1-B)

但是当我们将图像与自身合成时,AB是相同的,所以我们实际上有

1-(1-A)(1-A)

ImageMagick使用p而不是A来指代图片的像素,因此我们可以像这样进行一站式增加:

convert gradient.png -colorspace RGB -fx "(1-(1-p)(1-p))" result.png

请注意,维基百科文章和ImageMagick的-fx都假设您的像素强度在01.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

enter image description here

-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

enter image description here