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

时间:2009-12-15 02:30:53

标签: image-processing gamma pbmplus

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

我的像素来源是pbmplus PGM格式,手册页上写着:

  

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

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

我在making an image of uniform brightness上找到了相关问题。


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

1 个答案:

答案 0 :(得分:6)

你可能想要gamma correction,它会保持真正的黑色和真正的白色正确,同时弯曲它们之间的值。

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

output = pow( input, gamma )

... 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

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