如何缩放图像中的像素以调整亮度?

Nor*_*sey 5 gamma image-processing pbmplus

我有一张照片的灰度图像.我已经确定图像的某些部分是欠发光的,并且亮度Y = 0.8的像素实际上应该调整为90%灰度,即该像素应该被赋予亮度0.9.我的问题是如何缩放附近的其他像素? 我很确定将所有亮度乘以9/8是错误的,因为我依稀记得听说为了看起来一致,缩放必须是非线性的.但我很难找到一个可以让我取得进步的等式.(当然,我实际上正在编写一个程序来对很多照片进行调整.)

我的像素来源是pbmplus PGM格式,手册页的内容如下:

每个灰度值是与像素强度成比例的数字,由CIE Rec调整.709伽马传递函数.(该传递函数指定的伽玛数为2.2,并且对于小强度具有线性部分).因此,零值为黑色.Maxval的值表示CIE D65白色和图像中可能与之比较的任何其他图像中最强的值.

如果我更好地理解这一点,我可能会更好地了解如何继续.

我发现了一个关于制作均匀亮度图像的相关问题.


感谢Shmoopty让我走上正轨.我接受了你的回答然后添加了一些信息.

Dre*_*ann 6

您可能需要伽马校正,这将保持真正的黑色和真正的白色正确,同时弯曲两者之间的值.

当输入范围(0.0,1.0)时,伽玛调整的公式为:

output = pow( input, gamma )
Run Code Online (Sandbox Code Playgroud)

... gamma当小于1.0时,哪里会变亮,而当大于1.0时会变暗.

要将0.8推高到0.9,您计算log(0.9)/log(0.8)得到的伽玛值为0.4722.

请注意,这是很多公式中的一个 - 它在数学上最简单,将黑色和白色保留为独特的颜色(有些人会认为很重要) - 但是没有一个正确的公式可以为您提供"真实".


附录:我验证了伽马校正可以应用于已经进行了伽马编码的值.在降价时很难记下数学,但关键的代数定律是

(y**a)**b == y**(a*b) == y**(b*a) == (y**b)**a
Run Code Online (Sandbox Code Playgroud)

如果您应用此法则,您可以确定伽马校正通勤,因此可以将伽马校正应用于已校正的值. - NR