Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 改变jpeg的曝光_Image Processing_Graphics_Image Manipulation - Fatal编程技术网

Image processing 改变jpeg的曝光

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

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

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

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

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)在相机中一次停止不同。