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

标签 image-processing gamma pbmplus

我有一张照片的灰度图像。我确定图像的某些部分照明不足,并且亮度Y = 0.8的像素实际上应调整为90%的灰色,即该像素的亮度应为0.9。我的问题是,如何缩放附近的其他像素? 我很确定将所有亮度乘以9/8是错误的,因为我模糊地记得听到过,为了看起来均匀,缩放必须是非线性的。但是我很难找到一个方程式,可以使我取得进步。 (当然,我实际上是在编写程序来对很多照片进行此调整。)

我的像素来源是pbmplus PGM格式,手册页对此说:

Each gray value is a number proportional to the intensity of the pixel, adjusted by the CIE Rec. 709 gamma transfer function. (That transfer function specifies a gamma number of 2.2 and has a linear section for small intensities). A value of zero is therefore black. A value of Maxval represents CIE D65 white and the most intense value in the image and any other image to which the image might be compared.



如果我更好地理解了这一点,我可能会对如何进行有更好的了解。

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

感谢Shmoopty使我步入正轨。我接受了您的回答,然后在其中添加了一些信息。

最佳答案

您可能需要gamma correction,它可以使真实的黑色和真实的白色保持正确,同时在两者之间弯曲值。

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

output = pow( input, gamma )

...当gamma小于1.0时变亮,而大于1.0则变暗。

要将0.8推至0.9,您可以计算log(0.9)/log(0.8)以获得0.4722的 Gamma 值。

请注意,这是很多公式之一-而且在数学上最简单,它会将黑白保留为唯一的颜色(有些人会认为很重要)-但是,没有一个正确的公式可以为您提供“真实”的含义。

附录:我验证了可以将 Gamma 校正应用于已经进行了 Gamma 编码的值。很难用 Markdown 来表示数学,但是关键的代数定律是
(y**a)**b == y**(a*b) == y**(b*a) == (y**b)**a

如果您应用此定律,则可以确定 Gamma 校正是通勤的,因此可以将 Gamma 校正应用于已经校正的值。 -NR

关于image-processing - 如何缩放图像中的像素以调整亮度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904865/

相关文章:

image-processing - 从rec的正确转换。 709转sRGB

r - Rcpp 和 R 中的密度 Gamma

r - 在 R-PIRLS step-halvings 中执行 Gamma glmer 时出现错误消息,无法减少 pwrssUpdate 中的偏差

python - 创建二进制 PBM/PGM/PPM

c# - 如何将移动图像转换为黑白C#

c++ - 匹配线段 - 稳健且快速的方式

opencv - 基于图像处理的巡线器

python - 平均后图像全灰