伽马变换(Gamma Correction)是一种在图像处理中常用的非线性变换方法,用于调整图像的亮度和对比度。它在图像的像素值上应用一个幂次函数,以改变图像的灰度级分布,从而影响图像的感知亮度。伽马变换通常用于纠正显示器的非线性响应以及在低光照条件下拍摄的图像的亮度调整。
伽马变换的原理:在图像处理中,原始图像的亮度与显示器或摄像机的响应并不总是线性关系。伽马变换通过对每个像素的值应用一个幂函数来调整图像的亮度分布。这个幂函数的参数称为伽马值(γ),它可以用来控制图像的对比度和明暗程度。
公式表示为:
I
out
=
I
in
γ
I_{\text{out}} = I_{\text{in}}^\gamma\
Iout=Iinγ
其中,
I
in
I_{\text{in}}
Iin是输入图像的像素值,
I
out
I_{\text{out}}
Iout是输出图像的像素值,
γ
\gamma
γ是伽马值,通常取大于0的实数。
伽马值gamma控制了变换的曲率。当 gamma > 1时,图像的低亮度部分会被拉伸,从而增强了图像的对比度。当 gamma < 1时,图像的高亮度部分会被拉伸,从而减弱了图像的对比度。
伽马变换的意义和适用场景:伽马变换可以用于调整图像的感知亮度和对比度,使得图像在显示设备上或特定环境中更容易观察和分析。它在以下情况下特别有用:
纠正显示器的非线性响应:显示器通常具有非线性的光强-显示响应曲线。通过应用适当的伽马变换,可以纠正这种非线性响应,使图像在显示器上呈现更准确的亮度和对比度。
调整低光照图像:在低光照条件下拍摄的图像通常会变得模糊且缺乏对比度。通过应用伽马变换,可以增强图像的细节和对比度,使其更容易分析。
以下是使用OpenCV进行图像伽马变换的代码示例:
import cv2
import numpy as np
class Gamma:
def __init__(self,input_path,gama):
self.input_path=input_path
self.gama=gama
def gamma_correction(self):
img=cv2.imread(self.input_path,flags=0)
if img is None:
print('Unable to load image!')
else:
print('Load image successfully!')
for i in range(len(self.gama)):
corrected_image=np.power(img/255,self.gama[i])*255
corrected_image=np.clip(corrected_image,0,255).astype(np.uint8)
self.img_show(corrected_image)
def img_show(self,image):
cv2.namedWindow("image", cv2.WINDOW_FREERATIO)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
imgfile = "./Images/cat.jpg"
gamalist=[0.3,0.4,0.8,1.2,1.5]
img=Gamma(imgfile,gamalist)
coorected_img=img.gamma_correction()