原理概述
假设输入图像为I,宽为W、高为H,首先将其灰度值归一化到[0,1]范围,对于8位图来说,除以255即可。I (r, c)代表归一化后的第 r 行第 c 列的灰度值, 输出图像记为O,伽马变换就是令
(O(r,c)=I(r,c)^{gamma},0 ≤ r < H, 0 ≤ c < W,)
当 γ= 1 时,图像不变。如果图像整体或者感兴趣区域较暗,则令 0 < γ < 1 可以 增加图像对比度;反之亦然。
代码
图像的伽马变换实质上是对图像矩阵中的每一个值进行幂运算,Numpy提供的幂函数power实现了该功能。
# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1
import cv2
import numpy as np
if __name__ =="__main__":
I = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
# 图像归一化
fI = I/255.0
# 伽马变换
gamma = 0.5
O = np.power(fI, gamma)
# 显示原图和变换后的图
cv2.imshow("I", I)
cv2.imshow("O", O)
cv2.waitKey()
cv2.destroyAllWindows()