关于伽马变换小记

打印 上一主题 下一主题

主题 1767|帖子 1767|积分 5301

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
伽马变换(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, 1]                     [0,1] 或                                         [                            0                            ,                            255                            ]                                  [0, 255]                     [0,255]。
  •                                                    I                               out                                            I_{\text{out}}                     Iout​:颠末伽马变换后的输出图像像素值。
  •                                         c                                  c                     c:归一化系数,通常取                                         c                            =                            1                                  c=1                     c=1(假如像素值归一化到                                         [                            0                            ,                            1                            ]                                  [0,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

  1. import cv2
  2. import numpy as np
  3. def gamma_correction(image, gamma):
  4.     gamma_table = np.array([(i / 255.0) ** gamma * 255 for i in range(256)]).astype("uint8")
  5.     return cv2.LUT(image, gamma_table)
  6. image = cv2.imread("input.jpg")
  7. gamma_corrected = gamma_correction(image, gamma=2.2)
  8. cv2.imshow("Original", image)
  9. cv2.imshow("Gamma Corrected", gamma_corrected)
  10. cv2.waitKey(0)
  11. cv2.destroyAllWindows()
复制代码
3.2 使用 NumPy

  1. def gamma_correction_numpy(image, gamma):
  2.     norm_img = image / 255.0
  3.     corrected_img = np.power(norm_img, gamma) * 255
  4.     return corrected_img.astype(np.uint8)
  5. image = cv2.imread("input.jpg")
  6. gamma_corrected = gamma_correction_numpy(image, 2.2)
  7. cv2.imshow("Gamma Corrected", gamma_corrected)
  8. cv2.waitKey(0)
复制代码
4. 伽马变换的局限性


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



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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表