【参考资料】https://blog.csdn.net/lichengyu/article/details/8457425

                     http://www.jb51.net/article/137566.htm

 

一、什么是Gamma变换

Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:



这个指数即为Gamma。


Gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。


经过Gamma变换后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。



图1  Gamma校正

 

二、为什么进行Gamma变换

1.
人眼对外界光源的感光值与输入光强不是呈线性关系的,而是呈指数型关系的。在低照度下,人眼更容易分辨出亮度的变化,随着照度的增加,人眼不易分辨出亮度的变化。而摄像机感光与输入光强呈线性关系。如图2所示:



图2  人眼和摄像机的感光与实际输入光强的关系

为方便人眼辨识图像,需要将摄像机采集的图像进行Gamma变换。

2. 为能更有效的保存图像亮度信息,需进行Gamma变换。

未经Gamma变换和经过Gamma变换保存图像信息如图3所示:



图3  未经Gamma变换和经过Gamma变换保存图像信息


可以观察到,未经Gamma变换的情况下,低灰度时,有较大范围的灰度值被保存成同一个值,造成信息丢失;同时高灰度值时,很多比较接近的灰度值却被保存成不同的值,造成空间浪费。经过Gamma变换后,改善了存储的有效性和效率。

 

三、Gamma变换的基本形式

大于1时,对图像的灰度分布直方图具有拉伸作用(使灰度向高灰度值延展),而小于1时,对图像的灰度分布直方图具有收缩作用(是使灰度向低灰度值方向靠拢)。

 

四、Python下有关Gamma变换的示例代码
def adjust_gamma(imgs, gamma=1.0): assert (len(imgs.shape)==4) #4D arrays
assert (imgs.shape[1]==1) #check the channel is 1 # build a lookup table
mapping the pixel values [0, 255] to # their adjusted gamma values invGamma =
1.0 / gamma table = np.array([((i / 255.0) ** invGamma) * 255 for i in
np.arange(0, 256)]).astype("uint8") # apply gamma correction using the lookup
table new_imgs = np.empty(imgs.shape) for i in range(imgs.shape[0]):
new_imgs[i,0] = cv2.LUT(np.array(imgs[i,0], dtype = np.uint8), table) return
new_imgs
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信