伽马变换
伽马变换可以调整图像亮暗
经过Gamma变换后的输入和输出图像灰度值关系如图所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。
import cv2
import time
import numpy as np
def main():
# Open the image.
img = cv2.imread('1.png')
def gamma_f1(img, gamma=0.5):
gamma_corrected = np.array(255 * np.power((img / 255), gamma), dtype='uint8')
return gamma_corrected
def gamma_f2(img, gamma=2.0):
table = np.power(np.arange(256) / 255.0, gamma) * 255
gamma_corrected = cv2.LUT(img, table.astype(np.uint8))
return gamma_corrected
start = time.perf_counter()
img_gamma1 = gamma_f1(img)
print(time.perf_counter() - start)
cv2.imwrite('img_gamma1.png', img_gamma1)
start = time.perf_counter()
img_gamma2 = gamma_f2(img)
print(time.perf_counter() - start)
cv2.imwrite('img_gamma2.png', img_gamma2)
if __name__ == "__main__":
main()