opencv-python 图像灰度变换

  灰度变换作为一种图像预处理技术可以显著的改善图像的质量,下面将介绍几种灰度变换的方法

1. gamma 变换

  Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:

s = c r λ s = cr^{\lambda} s=crλ

这个指数即为Gamma。

Gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。

经过Gamma变换后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。

1.1 实现代码

  下面是就 python2.7 和 opencv 的实现

def gamma_trans(img,gamma):
	#具体做法先归一化到1,然后gamma作为指数值求出新的像素值再还原
	gamma_table = [np.power(x/255.0,gamma)*255.0 for x in range(256)]
	gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
	#实现映射用的是Opencv的查表函数
	return cv2.LUT(img0,gamma_table)

在上面我们看到没有每次都计算一次指数,因为指数的计算复杂度很高,这里我们存储下计算结果,然后使用查表的方法来节省计算时间。但是上面这段代码还可以继续优化,因为每调用一次这个函数就要计算一遍需要查询的表格,当参数 λ \lambda λ 不变的时候,我们可以先计算出需要查的表,然后对每一张图像查表即可。

参考

[1] CSDN 京局京段蓝白猪《Python-OpenCV中的Gamma变换(校正)》

s

你可能感兴趣的:(Python,数字图像处理,opencv)