??伽馬變換(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 npclass Gamma:def __init__(self,input_path,gama):self.input_path=input_pathself.gama=gamadef 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])*255corrected_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()