盛世宏图 发表于 2025-3-30 13:44:02

关于伽马变换小记

伽马变换(Gamma Correction)讲解

1. 伽马变换的基本概念

伽马变换(Gamma Correction)是一种非线性的灰度变换方法,主要用于调整图像的亮度和对比度,以适应人眼视觉特性或装备特性。它广泛应用于图像增强、HDR 处理、医学图像分析、视频编码等范畴。
伽马变换的数学公式如下:
                                                    I                               out                                    =                            c                            ⋅                                       I                               in                               γ                                          I_{\text{out}} = c \cdot I_{\text{in}}^{\gamma}                     Iout​=c⋅Iinγ​
此中:


[*]                                                   I                               in                                          I_{\text{in}}                     Iin​:输入图像的像素值,通常归一化到                                       [                            0                            ,                            1                            ]                                                        或                                       [                            0                            ,                            255                            ]                                                       。
[*]                                                   I                               out                                          I_{\text{out}}                     Iout​:颠末伽马变换后的输出图像像素值。
[*]                                        c                                  c                     c:归一化系数,通常取                                       c                            =                            1                                  c=1                     c=1(假如像素值归一化到                                       [                            0                            ,                            1                            ]                                                       )。
[*]                                        γ                                  \gamma                     γ(Gamma):控制变换的水平。
1.1 伽马值的影响



[*]                                             γ                               >                               1                                    \gamma > 1                        γ>1(比方                                       γ                            =                            2.2                                  \gamma=2.2                     γ=2.2):对较暗区域增强,使暗部细节更加明显,但可能损失高亮部分的细节。(暗增亮损)
[*]                                             γ                               <                               1                                    \gamma < 1                        γ<1(比方                                       γ                            =                            0.5                                  \gamma=0.5                     γ=0.5):对较亮区域增强,使高亮部分的细节更突出,但暗部细节可能丢失。(亮增暗损)
[*]                                             γ                               =                               1                                    \gamma = 1                        γ=1:保持原图像不变。
2. 伽马变换的应用

2.1 适应人眼视觉特性

人眼对亮度变革的感知是非线性的,更敏感于较暗区域的亮度变革,而对高亮区域的变革不敏感。因此,在存储和表现进步行 Gamma 编码(Gamma Encoding)可以增强暗部细节。
2.2 表现装备校正

不同的表现装备(如 CRT、LCD、OLED)对输入信号的相应并不是线性的,因此必要进行伽马校正(Gamma Correction)以确保精确的亮度表现。
2.3 图像增强



[*]增强医学图像:用于 X-ray、CT 扫描图像,提高对比度。
[*]遥感图像处理:提高卫星图像的细节。
[*]夜视增强:改善低光照条件下的图像可视性。
2.4 视频编码



[*]sRGB 颜色空间使用 $ \gamma \approx 2.2 $ 进行编码。
[*]H.264 和 HEVC 视频编解码器在处理过程中思量伽马校正,以优化存储和表现。
3. 伽马变换的实现

3.1 使用 OpenCV

import cv2
import numpy as np

def gamma_correction(image, gamma):
    gamma_table = np.array([(i / 255.0) ** gamma * 255 for i in range(256)]).astype("uint8")
    return cv2.LUT(image, gamma_table)

image = cv2.imread("input.jpg")
gamma_corrected = gamma_correction(image, gamma=2.2)

cv2.imshow("Original", image)
cv2.imshow("Gamma Corrected", gamma_corrected)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.2 使用 NumPy

def gamma_correction_numpy(image, gamma):
    norm_img = image / 255.0
    corrected_img = np.power(norm_img, gamma) * 255
    return corrected_img.astype(np.uint8)

image = cv2.imread("input.jpg")
gamma_corrected = gamma_correction_numpy(image, 2.2)

cv2.imshow("Gamma Corrected", gamma_corrected)
cv2.waitKey(0)
4. 伽马变换的局限性


[*]无法自适应局部特征:伽马变换是全局操作,可能无法适应不同区域的亮度分布。
[*]过度增强可能导致信息损失:过大的                                       γ                                  \gamma                     γ 可能使亮度失衡,导致过曝或过暗。
[*]不适用于全部场景:某些任务(如 HDR 处理)必要更复杂的局部对比度调整方法。
5. 总结



[*]伽马变换是基于幂律的非线性变换,主要用于调整图像的亮度和对比度。
[*]常用于人眼视觉适配、表现装备校正、图像增强和视频编码。
[*]可以使用 OpenCV 或 NumPy 实现,但在特定场景可能必要更高级的图像增强技能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 关于伽马变换小记