首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改jpeg的曝光

更改jpeg的曝光
EN

Stack Overflow用户
提问于 2015-08-05 18:44:09
回答 1查看 1.2K关注 0票数 1

给定一个jpeg,将该jpeg的曝光更改为+/-1 stop或称为1 EV的公式是什么?我想模拟这种曝光变化。有没有这样做的公式/方法?

EN

回答 1

Stack Overflow用户

发布于 2015-08-06 05:53:26

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

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

代码语言:javascript
复制
convert -size 512x512 gradient:black-yellow gradient.png

现在,增加+1 stop曝光量的方法是使用Screen混合模式将图像本身合成-它在Photoshop和ImageMagick中可用,并且描述为here

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

代码语言:javascript
复制
1-stop brighter image = 1-(1-A)(1-B)

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

代码语言:javascript
复制
1-(1-A)(1-A)

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

代码语言:javascript
复制
convert gradient.png -colorspace RGB -fx "(1-(1-p)(1-p))" result.png

请注意,维基百科的文章和ImageMagick的-fx都假设像素强度在01.0之间有所不同。如果您使用8位图像,则应使用255而不是1进行计算,即

代码语言:javascript
复制
+1 stop brighter image = 255-(255-A)(255-A)

或者如果使用16位值

代码语言:javascript
复制
+1 stop brighter image = 65535-(65535-A)(65535-A)

但是,上面的fx-based方法非常慢,因为-fx是解释的,而不是编译的,所以更快的方法是:

代码语言:javascript
复制
convert gradient.png gradient.png -colorspace RGB -compose screen -composite screen.png

有趣的是,另一种方法是我们取A的逆,也就是1-A,然后求逆,所以可以这样做:

代码语言:javascript
复制
convert gradient.png -colorspace RGB -negate -evaluate pow 2 -negate result.png

-1 stop曝光减少的等价物是使用Multiply混合模式将图像与自身合成,公式为

代码语言:javascript
复制
1-stop darker image = A x B

你可以更快的使用它

代码语言:javascript
复制
convert gradient.png gradient.png -colorspace RGB -compose multiply -composite result.png

或者更快,通过使用内存到内存克隆,而不是两次从磁盘读取,

代码语言:javascript
复制
convert gradient.png -colorspace RGB +clone -compose multiply -composite result.png

但也可以与

代码语言:javascript
复制
convert gradient.png -colorspace RGB -evaluate pow 2 result.png

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31830260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档