赞
踩
伽马矫正是一种借助了指数变换映射的增强技术。伽马矫正的映射函数可表示为:d = T(s)= csY ,其中c和y为常数。y的值是控制变换效果的主要因素,所以被称之为伽马矫正。
如右图所示:
·当y 之1时,输入的低灰度范围被压缩,
高灰度范围被拉伸,实现了强化亮部,压缩暗部的图像增强效果;
·当y >1时,输入的高灰度范围被压缩,
·低灰度范围被拉伸,实现了强化暗部,压缩亮部的图像增强效果;
gama,pY
代码实现
import numpy as np
import cv2
def gama_trans(img, gamma):
# 先归一化处理,再做伽马计算,再还原到[0,255]
gmma_list = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]
# 将列表换成nparray,换成无符号8为数
gamma_table = np.round(np.array(gmma_list)).astype(np.uint8)
return cv2.LUT(img, gamma_table)
# 定义matshow方法
def matshow(title='image', image=None, gray=False):
if isinstance(image, np.ndarray):
if len(image.shape) == 2:
pass
elif gray:
# 转换成GRAY格式
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
else:
# 图片默认BGR通道,将突破转换成RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 使用这种方式显示图片可能会导致图片显示畸形
# cv2.imshow('image', image)
plt.figure()
# 载入图像
plt.imshow(image, cmap="gray")
# 设置标题
plt.title(title)
plt.show()
if __name__ == '__main__':
im = cv2.imread('data/lena.jpg', 0)
matshow('im', im)
# 使用小于1的伽马值
im = gama_trans(im, 0.5)
matshow('im0.5', im)
# 使用大于1的伽马值
im = gama_trans(im, 3)
matshow('im3', im)
实现效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。