『youcans 的 OpenCV 例程200篇 - 总目录』
【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)
线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。
幂律变换也称伽马变换,可以提升暗部细节,对发白(曝光过度)或过暗(曝光不足)的图片进行矫正。
幂律变换可以由以下公式描述:
Dt=c∗(D+ϵ)γDt = c * (D+\epsilon)^{\gamma} Dt=c∗(D+ϵ)γ
伽马变换本质上是对图像矩阵中的每个值进行幂运算。$ 0< \gamma <1$ 时,拉伸图像中灰度级较低的区域,压缩灰度级较高的部分,增加图像的对比度;γ>1\gamma >1γ>1 时,拉伸图像中灰度级较高的区域,压缩灰度级较低的部分,降低图像的对比度。
伽马变换通过非线性变换对人类视觉特性进行补偿,最大化地利用有效的灰度级带宽。很多拍摄、显示、打印设备的亮度曲线都符合幂律曲线,因此伽马变换广泛应用于各种设备显示效果的调校,称为伽马校正。
例程:1.56 图像的幂律变换
# 1.56 图像的非线性灰度变换: 幂律变换 (伽马变换)img = cv2.imread("../images/imgB2.jpg", flags=0) # flags=0 读取为灰度图像gammaList = [0.125, 0.25, 0.5, 1.0, 2.0, 4.0] # gamma 值normImg = lambda x: 255. * (x-x.min()) / (x.max()-x.min()+1e-6) # 归一化为 [0,255]plt.figure(figsize=(9,6))for k in range(len(gammaList)):imgGamma = np.power(img, gammaList[k])imgGamma = np.uint8(normImg(imgGamma))plt.subplot(2, 3, k+1), plt.axis('off')plt.imshow(imgGamma, cmap='gray', vmin=0, vmax=255)plt.title(f"$\gamma={gammaList[k]}$")plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/121508973)
Copyright 2022 youcans, XUPT
Crated:2021-11-22
【第4章:灰度变换与直方图】
41. 图像的灰度变换(灰度级分层)
42. 图像的灰度变换(比特平面分层)
43. 图像的灰度变换(对数变换)
44. 图像的灰度变换(伽马变换)