Gamma校正

伽马校正是一种针对图像辉度和三色刺激值的非线性运算,常用于解决人眼对亮度感知的指数规律与有限图像灰度级别的矛盾。在视觉系统中,2.2的伽马值能较好地匹配人类感知。本文通过Python代码展示了如何利用伽马校正对图像进行随机抖动,实现图像增强效果。

1.介绍

1.1伽马校正是什么

伽马校正,是用来针对影片或是影像系统里对于光线的辉度(luminance)或是三色刺激值(tristimulus values)所进行非线性的运算或反运算。1

最简单的例子里伽马校正是由幂定律公式 V o u t = A V i n γ V_{out}=AV_{in}^\gamma Vout=AVinγ所定义。其中通常情况下A=1, V o u t 、 V i n ∈ [ 0 , 1 ] V_{out}、V_{in}\in[0,1] VoutVin[0,1]

伽马值γ < 1的情况有时被称作编码伽马值, 也叫伽马压缩。

伽马值γ > 1的情况有时也被称作解码伽马值,也叫伽马展开。

1.2为什么需要伽马校正

对于声音,人耳感受到的声音是以分贝衡量的,10倍的声音我们感受到10分贝的变化,100倍的声音对应20分贝感受变化,1000倍对应30分贝感受…, 人们对于物体明亮程度的主观感受,也遵循指数规律。根据实验测定,人类对明亮程度的主观感受,线性对应于物理亮度的2.2次方。

对于视觉来说,自然界中光的灰度级别是无数的,而一般图像的表示是8bit,也就是只有256个灰度级别,但是现在的显示器在展示灰度图时显示器的的灰度级别又远远大于256种。 因人类对于外界刺激变化程度的感受,是指数形式的,所以可以使用伽马校正来化解“无限的自然存在,与有限的存储容量/传输带宽之间的矛盾”。2

2.伽马校正在图像增强中的应用

也就是使用公式 V o u t = A V i n γ V_{out}=AV_{in}^\gamma Vout=AVinγ 对图像RGB三通道上的添加随机抖动。

from PIL import Image
import numpy as np
import matplotlib.pyplot  as plt

img = Image.open("1.jpeg")
img_array = np.array(img)
plt.figure(figsize=(9.6,4.1),facecolor='gray',edgecolor='black')
for j in range(2,10):
    plt.subplot(2,4,j-1)
    tmp_img = img_array.copy()      
    gamma = np.random.uniform(0.2, 1.8)
    tmp_img = tmp_img / 255
    tmp_img = np.uint8(tmp_img**gamma*255)
    plt.imshow(tmp_img)
    tmp_img = Image.fromarray(tmp_img)
    tmp_img.save(f"{j}.png")           
plt.savefig("gamma_adjust.png")

结果:

在这里插入图片描述

参考:

1.https://zh.wikipedia.org/wiki/%E4%BC%BD%E7%91%AA%E6%A0%A1%E6%AD%A3
2.https://www.zhihu.com/question/27467127

<think>好的,我现在需要处理用户关于逆伽马校正的问题。首先,我得确认用户的需求。用户已经了解伽马校正,现在想了解逆伽马校正的概念、应用和实现方法。首先,我应该回顾伽马校正的基础知识,确保自己对逆伽马校正的理解正确。 根据引用[2],伽马校正是为了调整图像的伽马曲线,校正显示设备的非线性响应。伽马校正的公式通常是$V_{out} = V_{in}^\gamma$,其中$\gamma$值决定校正的类型。当$\gamma > 1$时,图像变暗;当$\gamma < 1$时,图像变亮。而逆伽马校正应该是指相反的过程,即如果原校正用了某个$\gamma$值,逆过程则使用其倒数,比如用$1/\gamma$来恢复原始线性值。 但实际应用中,逆伽马校正可能并不是简单的取倒数。例如,在图像处理流程中,当图像已经被伽马编码后,进行某些线性操作(如滤波)之前,可能需要先进行逆伽马校正,将像素值转换回线性空间,处理后再重新应用伽马校正。这部分需要查证是否正确,确保引用的准确性。 接下来,应用场景方面,用户可能遇到的情况包括:图像恢复、颜色校正计算机视觉中的预处理等。例如,在图像增强中,如果之前应用过伽马校正导致图像过亮或过暗,可能需要逆过程来调整。另外,在深度学习的图像处理中,输入数据可能需要线性化的处理,这时候逆伽马校正就派上用场了。 实现方法方面,逆伽马校正的公式应该是$V_{out} = V_{in}^{1/\gamma}$。但需要注意,通常在数字图像中,像素值会被归一化到0到1之间,应用幂函数后需要重新量化到0-255的范围。同时,处理过程中可能会引入精度损失,需要考虑如何避免或减少这种情况。例如,使用浮点数计算后再转换为整数。 我还需要检查是否有引用支持这些观点。引用[2]提到伽马校正用于调整对比度,那么逆伽马校正可能用于恢复原始线性数据,但具体引用中没有直接提到逆伽马校正。可能需要结合伽马校正的原理来推导逆过程,并指出这是基于伽马校正的逆操作,但需要明确说明这是否是标准做法,或者是否有其他注意事项。 此外,用户提供的引用中还提到了直方图均衡化[3][4],这可能与逆伽马校正在对比度调整方面的应用有关联,但需要区分两者的不同。直方图均衡化是重新分布像素强度,而伽马校正则是非线性调整。 最后,代码实现部分,用户可能需要Python的示例。需要展示如何对图像应用逆伽马校正,包括读取图像、归一化、应用幂函数、反归一化等步骤。同时,提醒用户注意参数调整,比如选择适当的$\gamma$值,可能需要根据具体情况调整。 总结一下,回答的结构应该是:解释逆伽马校正的概念,其与伽马校正的关系,应用场景,实现方法,并附上代码示例。同时,生成相关问题以引导用户深入学习。</think>### 逆伽马校正的概念与应用 逆伽马校正(Inverse Gamma Correction)是伽马校正的逆向操作,主要用于恢复图像在伽马编码前的线性亮度值。伽马校正最初用于补偿显示设备的非线性响应特性,而逆伽马校正则用于在特定场景下还原线性光强数据[^2]。 #### 1. **原理与公式** - **伽马校正**的公式为: $$V_{\text{out}} = V_{\text{in}}^\gamma$$ 其中$\gamma$是校正参数(通常$\gamma \approx 2.2$)。 - **逆伽马校正**的公式为: $$V_{\text{out}} = V_{\text{in}}^{1/\gamma}$$ 通过取$\gamma$的倒数,将非线性编码的像素值还原为线性空间的值。 #### 2. **应用场景** - **图像预处理**:在计算机视觉中,若需对图像进行线性运算(如滤波、光照模拟),需先将伽马编码后的图像还原为线性值[^2]。 - **颜色校正**:当需要匹配不同设备的色彩表现时,需通过逆伽马校正统一色彩空间。 - **图像恢复**:若图像因伽马校正导致对比度失真,可通过逆操作调整后再重新编码。 #### 3. **实现方法(Python示例)** ```python import numpy as np import cv2 def inverse_gamma_correction(img, gamma=2.2): # 归一化到[0,1]并应用逆伽马变换 linear_img = np.power(img / 255.0, 1/gamma) # 反归一化并转换为8位图像 return np.uint8(linear_img * 255) # 读取图像并应用逆伽马校正 image = cv2.imread('input.jpg', cv2.IMREAD_COLOR) corrected_image = inverse_gamma_correction(image) cv2.imwrite('output.jpg', corrected_image) ``` #### 4. **注意事项** - **参数选择**:需根据原始伽马编码的参数选择$\gamma$,否则可能导致过亮或过暗。 - **精度损失**:多次伽马和逆伽马操作会累积量化误差,建议在浮点空间处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值