Image processing 改变jpeg的曝光
给定jpeg,将该jpeg的曝光量更改+/-1次或称为1 EV的公式是什么?我想模拟这种曝光变化。有一个公式/方法可以做到这一点吗?我可以用ImageMagick演示,它包含在大多数Linux发行版中,可从中用于OSX和Windows 首先,在终端命令行创建一个图像:Image processing 改变jpeg的曝光,image-processing,graphics,image-manipulation,Image Processing,Graphics,Image Manipulation,给定jpeg,将该jpeg的曝光量更改+/-1次或称为1 EV的公式是什么?我想模拟这种曝光变化。有一个公式/方法可以做到这一点吗?我可以用ImageMagick演示,它包含在大多数Linux发行版中,可从中用于OSX和Windows 首先,在终端命令行创建一个图像: convert -size 512x512 gradient:black-yellow gradient.png 现在,实现+1次停止曝光增加的方法是使用屏幕混合模式将图像与自身合成-这在Photoshop和ImageMagi
convert -size 512x512 gradient:black-yellow gradient.png
现在,实现+1次停止
曝光增加的方法是使用屏幕
混合模式将图像与自身合成-这在Photoshop和ImageMagick中提供,并已介绍
因此,将图像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
convert gradient.png -colorspace RGB -negate -evaluate pow 2 -negate result.png
请注意,Wikipedia文章和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 -fx "(1-(1-p)(1-p))" result.png
convert gradient.png -colorspace RGB -negate -evaluate pow 2 -negate result.png
-1停止
曝光减少的等效方法是使用倍增
混合模式将图像与自身合成,公式如下:
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
我认为最好使用线性光。更改一个f-stop会使捕获的光子数加倍(或减半),因此我认为您需要
out=(2*in^gamma)^(1/gamma)
,其中gamma
大约是sRGB的2.4。如果您不使用gamma/ungamma,那么当您使用hack进行整洁的构图时,您将增强(或降低)对比度。@user894763感谢您的想法。我怀疑你是对的,但我不确定如何在ImageMagick中实现这一点。。。如果我在读入图像后但在处理之前将输入图像转换为RGB colorpsace,是否正确?嗨,马克,是的,我想是的<在处理开始时编码>-colorspace RGB,然后在处理结束时编码>-colorspace sRGB。您可能不需要第二个,是否自动为您执行转换?我不确定。@user894763再次感谢您的输入-我想我已经正确地更新了线性伽马处理,是的,我相信IM会在写出来时自动转换为sRGB。我用几张照片尝试了这一点,但它实际上不起作用。有颜色和对比度的变化,这与改变曝光(例如,通过改变ISO)在相机中一次停止不同。