一. 伽马校正简介:
伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大 RGB 的值来排除影响,达到对图像校正的目的。
![](https://upload-images.jianshu.io/upload_images/17221499-7058bab6ab193602.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
伽马校正做了什么 ↑
二. 伽马校正算法:
非线性变换是由下式引起的,其中I_in和I_out 被归一化,限定在 [0,1] 范围内,c是常数,g为伽马变量,通常取 2.2。
![](https://upload-images.jianshu.io/upload_images/17221499-0f1781b1427ac619.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
该式引起非线性变换 ↑
我们只需要进行上面非线性变换的逆变换就可以进行伽马校正了,伽马校正式子如下:
![](https://upload-images.jianshu.io/upload_images/17221499-cd2013e13715e403.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
伽马校正算法 ↑
三. 伽马校正python实现,其中c=1,g=2.2
1 import cv2 2 import numpy as np 3 import matplotlib.pyplot as plt 4 5 # gamma correction 6 def gamma_correction(img, c=1, g=2.2): 7 out = img.copy() 8 out /= 255. 9 out = (1/c * out) ** (1/g) 10 11 out *= 255 12 out = out.astype(np.uint8) 13 14 return out 15 16 # Read image 17 img = cv2.imread("../paojie.jpg").astype(np.float) 18 # Gammma correction 19 out = gamma_correction(img) 20 # Save result 21 cv2.imshow("result", out) 22 cv2.imwrite("out.jpg", out) 23 cv2.waitKey(0) 24 cv2.destroyAllWindows()
四. 实验结果:
![](https://upload-images.jianshu.io/upload_images/17221499-33f5ce8c0b8ab9a1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
原图 ↑
![](https://upload-images.jianshu.io/upload_images/17221499-6931098729c99e05.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
伽马校正后 ↑
说白了,照相机等电子设备传感器在成像时会使得图像变暗,变得不真实,我们采用伽马校正来校正图像,使得图像明亮真实。
五. 参考内容: