Python灰度变换中伽马变换分析实现
作者:Henry_zs
灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每个像素灰度值的方法。目的是改善画质,使图像显示效果更加清晰。图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分
1. 介绍
伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正
伽马变换针对的是对单个像素点的变换,也就是点对点的映射
形式为:
其中,s为输出的像素点的灰度值,r为输入像素点的灰度值。c 、 γ 为常数
γ 值不同的时候,对应的变换曲线如图,这里我们不关注具体函数的取值,而只是关注变换曲线的形状
通过观察可以发现
- γ > 1 的时候,会压缩暗区的对比度,抬高亮区的对比度。并且γ越大,效果越明显
- γ < 1 的时候,会提升暗区的对比度,压缩亮区的对比度。并且γ越小,效果越明显
- γ = 1 的时候,图像的灰度不变(c 也为1)
2. 代码实现
import cv2 import numpy as np def grammar(x, r): y = pow(x / 255 , r) * 255 return y.astype(np.uint8) img = cv2.imread('./f.jpg',0) img_grammar = grammar(img,0.6) cv2.imshow('img',np.hstack((img,img_grammar))) cv2.waitKey() cv2.destroyAllWindows()
原图和 γ = 0.6 的效果
这里需要进行归一化处理,因为整数的小数次方可能会丢失精度,我们将灰度值变为(0,1)之间,转换成小数与小数的次方会更加准确。
3. 提升视频的亮度
import numpy as np import cv2 def grammar(x , r): # grammar 变换 y = pow(x / 255 , r) * 255 return y.astype(np.uint8) video = cv2.VideoCapture('./hand.mp4') # 读取视频 while video.isOpened(): # 如果视频/摄像头 读取成功 ret,frame = video.read() # 读取每一帧 img = grammar(frame,0.6) # 将每一帧进行进行grammar变换 if ret == True : # 读取到frame的话 cv2.imshow('img',np.hstack((frame,img))) key=cv2.waitKey(1) if key == ord('q'): # q 退出 break if key == 32: # 空格键 暂停 cv2.waitKey(0) continue video.release() cv2.destroyAllWindows()
视频效果:
到此这篇关于Python灰度变换中伽马变换分析实现的文章就介绍到这了,更多相关Python伽马变换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!