精华内容
下载资源
问答
  • 伽马校正

    2020-12-18 22:04:13
    关于伽马校正问题是我本科毕业设计留下来的一个扩展问题。我的毕业设计是基于FPGA的全彩屏显示控制器设计,老师在实验室给我拿了一个LED全彩屏,是一个32x16的显示屏,当然这个尺寸的屏幕就别想显示什么图片了。当我...

    关于伽马校正问题是我本科毕业设计留下来的一个扩展问题。我的毕业设计是基于FPGA的全彩屏显示控制器设计,老师在实验室给我拿了一个LED全彩屏,是一个32x16的显示屏,当然这个尺寸的屏幕就别想显示什么图片了。当我完成整个设计并向指导老师汇报了完成情况时,老师说看看能不能加上伽马校正,后来我就找了一些文章看,知道校正方法但是对其中的原理还是一知半解。最近在看FPGA的图像处理方面的东西又遇到了,找了一些文章和书籍又了解了一下。本文将对图像的采样量化编码入手,说明在图像采集设备(相机)的Encoding Gamma(1/γ),在显示器控制器(CPU/DSP/FPGA)的伽马校正(Gamma Correction),人眼感受光的曲线,显示器的显示曲线四者的关系。本文未涉及到伽马校正的方法和变换的数学模型,这些可以在相关论文和期刊中找到。

    本文主要回答和涉及以下几个方面:

    0:伽马校正是什么

    1:三原色的组合

    2:从物理世界到屏幕显示过程

    3:从模拟(连续)到数字(离散):采样量化编码

    4:为什么要非量化编码

    5:伽马校正中四种关系

     

    0:伽马校正是什么

           许多成像设备在采集光信号并将其转化为电信号的过程中会具有很多非线性特性。许多显示器、几乎所有的摄影胶片以及印刷品都具有非线性特性。幸运的是,几乎所有的非线性设备的传输函数都可以用一个简单的幂函数来近似,

                                                        y = x^γ

    这个公式叫做色调曲线或者伽马曲线。将一幅图像的伽马函数从一个转换到另一个的过程叫做伽马校正。在大多数的数码相机当中,伽马校正在信号处理链的图像获取阶段就已经完成:每一个线性的R、G、B组成都通过RGB伽马校正函数转化为非线性信号。伽马曲线利用改变原图像直方图分布的非线性函数将输人像素值转换为其他值。对于大多数CRT显示系统而言,上式中的伽马值约为0.45.不过,对于静态数码相机而言,伽马值并不是恒定的。在数码相机中,色调曲线一般有两类实现过程,即RGB和 Ycbcr色彩空间。通常,前者存在于使用RGB色彩滤波阵列传感器的数码相机中,后者存在于使用互补色彩滤波阵列传感器的数码相机和数码摄像机中。在一些应用当中,RGB伽马校正有三个通道,分别对应于R、G、B。

                                            RGB查找表法伽马校正

    其实上图就是下面4要说的和非均匀量化结果类似。

    1:颜色组合原理

           初中物理我们知道颜料的三原色是红黄蓝,显示器的三原色是红绿蓝,而其他颜色可以由这三种颜色组合得到。在显示器进行显示时,不可能像真实世界用任意的比例去得到无数种颜色。这是因为我们现在用数字信号去存储数据,而在现有的计算机系统中只有01两种数值。通常每一位色度信号是8位。而这8位可以产生从00_000_000 — 11_111_111 一共2^8 = 256种亮度信息,而红绿蓝三种颜色可以组合成 2^8×2^8×2^8  = 2^24 种颜色,这就是我们常说的16兆(M)色屏。

     

    2:从物理世界到屏幕显示过程

    从真实物理世界到显示屏上的画面大致经过:传感器接收光源—— 传感器上电压(流)变化 ——> 模数转换(ADC)同时完成数据采集端的伽马转换——> 显示设备的数模转换(DAC)——> 三原色发出不同的亮度组合成不同的颜色。

    下面将对模拟到数字信号转换(AD)进行说明

    3:采样量化编码

    模拟信号到数字信号,要进过ADC进行采样量化编码。而采样遵循的原则是奈奎斯特采样定理:采样的频率至少是所采样信号频率的两倍。下图是一个采样的简单模型,图中曲线是连续的物理量,连续的物理量(电压/电流)在数字计算机中是不能直接进行运算处理的,多亏了前人伟大的科学家给我们的理论,就是在不需要连续的信号情况下我们只要遵循奈奎斯特采样定理,以一定的周期记录离散的数值就可以恢复出原来的信号,这简直太神奇了。这也是我们所处数字世界的必要条件。

    但是采样周期并非越大越好,超过一定的频率边际效用递减,一方面会带来更多的数据要处理存储再处理,另一方面这些过多的数据对于还原原来的模拟信号质量的提升微乎及微了。就像一个人在饥饿状态下,吃了两个饼感觉到饱了,如果再吃不会对之前饥饿感有太多收益。

    量化编码就是用二进制数字来表示采样的值。如下图所示对于1v的电压采用8个等级来量化,其中量化会有误差量化的位数越多误差就会越小。考虑到成本并“不是”越多越好。

    4:非均匀量化

    非均匀量化的基本思想是,使量化间隔随信号幅度的大小变化。在大信号时,量化间隔取大一点,而小信号时,量化间隔取小一点。这样就可以保证在量化级数(编码位数)不变的条件下,提高小信号的量化信噪比,扩大输人信号的动态范围,也就是能记录更多的亮度信息。可能你会疑惑什么是更多的亮度信息,因为相机传感器在接收到光强和颜色的物理量后由AD将模拟信号转变为数字信号,红绿蓝(RGB)三色数字信号,通常每一位色度信号是8位。而这8位一共可以参数28 = 256种亮度信息常称为灰度信息(Gray)因为人眼对亮度较弱的变化很敏感,所以在低亮度可以用更多的数据去记录,而这种关系是按照人眼对环境光感受曲线来定的(1/γ)。这样最后还原的数据与更符合人的视觉体验,这是为什么要非线性编码(经过伽马校正后的)。下图这里的均匀输出是对人眼感受而言的。

                                                   非均匀量化编码

    显示器的亮度大约与输入的模拟信号电压的γ次方成正比。在 CRT或者 LCD 显示器上,该值一般为 2.2~2.5。因此,相机的预补偿功能,是让 RGB的量值按照 1/γ次方的关系来变化。该效应所带来的影响是,视频摄像机和计算机图形学程序, 伽马(Gamma) 校正可以预先对其 RGB 输出流进行预校正,以便补偿所针对的显示器的非线性,并就眼睛实际感受场景的方式形成一种有现实意义的模型 。在把非线性变化(已经经过伽马校正)的数据输入到显示屏上显示后,要使输出的效果线性的,人眼感觉到从黑到白是均匀变化的。

                         

    5:伽马校正中四种关系

      图像采集设备(相机)的Encoding Gamma(1/γ),在显示器的驱动器(CPU/DSP,FPGA)的伽马校正(Gamma Correction),人眼感受光的曲线,显示器的显示曲线。进行伽马校正的原因是为了让显示效果更接近人眼在实际看到的。而Encoding Gamma1/γ)现在相机中是一定有的。这是因为显示器的伽马值是γ的话,输出的刚好是线性的。而Encoding Gamma就是尽量和人眼的伽马感受曲线就是一样。其中在处理器内部的伽马校正是根据显示器不同的情况来定的,一般相机的伽马编码的关系式是固定的。但是如果不同显示器的伽马值在2.2~2.5之间变化的话那就要进行伽马校正,例如相机采集的图像信息是按照1/2.2来编码的,如果显示器的伽马值是2.5,那这时就需要校正让其γ值一样。显示器的伽马值固定了,那这时处理数据只能按照对应关系换算成1/2.5情况下的编码数据,这一过程称作伽马校正。所以在显示端伽马校正有时是不需要的。一切的原因还是在量化光强编码时的位数少了RGB888每一通路是8位也就是256种亮度信息,而我们要更可能多的去记录那些暗部信息,所以在相机有了一次伽马校正(Encoding Gamma),而由于相机的伽马值未必与显示屏的伽马值相匹配所有在显示控制器端又有了一次伽马校正。

    显示曲线表示的是输出的客观亮度和对应的像素值大小不是线性的,例如在像素为8的时候亮度不是像素为1亮度的八倍而是要大于8。

    所以才有了上面非均匀量化编码那样的编码图,二者结合理想上是输出线性的光强,如下。

    展开全文
  • LED伽马校正算法

    2019-03-06 13:04:50
    LED玛咖校正算法函数,可对多通道调光同时进行求值,只需要输入待转换数据数组入口地址、gamma转换后数据存储数组入口地址、PWM的分辨率、转换的通道数、gamma数值 (1~10)即可实现伽马校正数据,非常实用;
  • 简单理解伽马校正

    千次阅读 2019-02-22 14:50:54
    伽马校正相关的资料说明很多,但其中不少内容都写的比较繁杂,令人难以理解, 本文尝试简单解释一下伽马校正的相关内容~ 早期的 CRT 显示器存在非线性输出的问题,简单来说,你给 CRT 显示器输入(input)一个 0.5(**注意,...

    伽马校正相关的资料说明很多,但其中不少内容都写的比较繁杂,令人难以理解, 本文尝试简单解释一下伽马校正的相关内容~

    早期的 CRT 显示器存在非线性输出的问题,简单来说,你给 CRT 显示器输入(input)一个 0.5(注意,输入范围为[0,1]), CRT 显示器的输出(output)并不是 0.5,而是约等于 0.218,输入与输出间存在一个指数大概为 2.2 的幂次关系:

    outputinput2.2 output \approx input^{2.2}

    所以当你输入 0.5 时,输出即为:

    0.2180.52.2 0.218 \approx 0.5^{2.2}

    其中 2.2 这个指数即为伽马(gamma)值,而显示器的这种非线性输出过程则称为伽马展开(gamma expansion).

    为了能够得到正确的输出,我们必须对输入进行补偿,方法就是对输入进行一次指数为 1 / 2.2 的幂次运算,这个补偿的过程便是伽马校正(gamma correction), :

    inputinput1/2.2 input \rightarrow input^{1 / 2.2}

    经过伽马校正后,显示器便能够正确显示我们的输入了 :

    inputinput1/2.2output(input1/2.2)2.2=input \begin{aligned} & input \rightarrow input^{1 / 2.2} \\ & output \approx (input^{1 / 2.2})^{2.2} = input \end{aligned}

    所以为了让显示器正确输出 0.5, 我们需要对 0.5 进行伽马校正,实际给显示器的输入约为 0.73 :

    0.50.51/2.20.73 0.5 \rightarrow 0.5^{1 / 2.2} \approx 0.73

    看到这里你可能会有个疑问:既然伽马校正起源于早期 CRT 显示器的非线性输出问题,而我们现在基本已经淘汰掉这些显示器,并且当今的显示器已经可以做到线性输出了(输入0.5,输出也是0.5),那么我们是不是可以直接废弃伽马校正了呢?

    答案可能有些出人意料 : 我们仍然需要进行伽马校正!

    原因有些巧合 : 伽马校正除了可以解决早期 CRT 显示器的非线性输出问题, 同时还可以帮助我们"改善"输出的图像质量 :

    人眼对于较暗(接近0)的亮度值比较敏感,对于较亮(接近1)的亮度值则不太敏感,假设我们现在使用一个字节(能够表达整数范围[0,255])来存储亮度值(之前都忽略了亮度值(输入值)的表示问题,这里需要考虑),并且我们要存储 0.2400.243 这两个亮度值,如果不进行伽马校正,则有:

    value_1=0.240255=61.2clamp61value_2=0.243255=61.965clamp61 \begin{aligned} & value\_1 = 0.240 * 255 = 61.2 & \stackrel{clamp}{\longrightarrow} 61 \\ & value\_2 = 0.243 * 255 = 61.965 & \stackrel{clamp}{\longrightarrow} 61 \end{aligned}

    可以看到 0.2400.243 的存储数值都是 61,所以这两个输入的实际显示效果其实是一样的(细节差异丢失了).

    但如果我们进行一次伽马校正,则有:

    value_1=0.2401/2.2255133.3clamp133value_2=0.2431/2.2255134.1clamp134 \begin{aligned} & value\_1 = 0.240 ^ {1 / 2.2} * 255 \approx 133.3 & \stackrel{clamp}{\longrightarrow} 133 \\ & value\_2 = 0.243 ^ {1 / 2.2} * 255 \approx 134.1 & \stackrel{clamp}{\longrightarrow} 134 \end{aligned}

    0.2400.243 的存储数值变为了 133134,所以这两个输入的实际显示效果便区分开了(细节差异保留了).

    实际上,伽马校正增大了较暗数值的表示精度,而减小了较亮数值的表示精度,人眼又恰好对较暗数值比较敏感,对较亮数值不太敏感,于是从视觉角度讲,输出的图像质量就被伽马校正"改善"了.

    基于这个原因,我们仍然需要进行伽马校正,而既然我们进行了伽马校正,当今的显示器也便保留了非线性输出(伽马展开)的功能,颇有些因果倒置的意思.

    更多资料

    展开全文
  • 针对平板显示器在光电转换过程中出现的非线性关系,视频图像在处理过程中引入了伽马校正。本文提出了一种关于0.5英寸主动式有机发光显示器SVGA050D的伽马校正方法。该方法根据查找表的对应关系,采用PIC单片机作为主控...
  • LED灯调光存在非线性,为达到线性调光,需要采用伽马校正,本资源采用EXCEL作为工具,只要输入伽马值及调光分辨率,可计算出各级伽马校正后的数值,并可在后侧图标查看曲线响应图非常直观。(输入参数:伽马值,...
  • 基于FPGA的LCoS微显示器的数字伽马校正
  • 图像3A算法及伽马校正原理及部分实现.doc
  • 自适应伽马校正

    2021-04-13 17:00:19
    光照影响图像的质量,弱光条件下获得的图像较暗,本代码采取自适应gamma校正算法,实现图像亮度的调整 光照影响图像的质量,弱光条件下获得的图像较暗,本代码采取自适应gamma校正算法,实现图像亮度的调整
  • 伽马校正(Gamma Correction) 为什么需要伽马校正? 部分人认为,是由于早期CRT显示器的输出亮度和输入电压存在非线性关系,具体就是近似2.2次幂的关系,导致显示器的亮度要比计算机上存储的亮度要低。 举个例子:...

    伽马校正(Gamma Correction)

    为什么需要伽马校正?

    部分人认为,是由于早期CRT显示器的输出亮度和输入电压存在非线性关系,具体就是近似2.2次幂的关系,导致显示器的亮度要比计算机上存储的亮度要低。

    举个例子:假如你计算机存储的亮度是0.5(亮度范围是0~1),CRT显示器的输出亮度并不是0.5,而是约等于 0.218,具体计算过程如下
    output=input2.2 output = input^{2.2}
    当你输入0.5时,输出到显示器的值为
    output=0.52.20.218 output = 0.5^{2.2} \approx 0.218
    其中2.2这个指数就是伽马值,而显示器的这种非线性输出过程称为伽马展开(gamma expansion)。

    为了能够得到正确的输出,必须对输入进行补偿,方法是对输入进行一次指数为1/2.2的幂次运算,这个补偿的过程就是伽马校正:

    inputinput12.2 input \longrightarrow input^{\frac{1}{2.2}}
    经过伽马校正后,显示器便能正确显示我们的输入了 :
    {inputinput12.2output=(input12.2)2.2=input \left\{ \begin{aligned} input& \longrightarrow input^{\frac{1}{2.2}} \\ output& = (input^{\frac{1}{2.2}})^{2.2} = input \end{aligned} \right.
    还是之前那个例子,我们先对0.5进行伽马校正,实际给显示器的输入约为0.73
    0.50.512.20.73 0.5 \longrightarrow 0.5^{\frac{1}{2.2}} \approx 0.73
    然后,计算显示器的输出
    output=(0.73)2.20.50 output = (0.73)^{2.2} \approx 0.50
    最终保证了输出也是0.5


    既然伽马校正起源于早期CRT显示器的非线性输出问题,而现在基本已经淘汰掉这些显示器了,并且当今的显示器已经可以做到线性输出了,那么我们是不是可以直接废弃伽马校正了呢?

    实际上,我们仍然需要伽马校正!

    原因是:伽马校正可以提高暗部亮度的存储精度

    人眼对于较暗(接近0)的亮度值比较敏感,对于较亮(接近1)的亮度值则不太敏感,我们只能用一个8位二进制(可以表达0~255的整数)来存储亮度值,我们希望在整个图像中尽可能保留暗部细节。

    下面举了例子说明:

    假定我们要存储0.2400.243这两个亮度值,如果不进行伽马校正,图片亮度的存储值分别为:
    I1=0.240255=61.261I2=0.243255=61.96561 I_1 = 0.240 * 255 = 61.2 \stackrel{保留整数}{\longrightarrow} 61 \\ I_2 = 0.243 * 255 = 61.965 \stackrel{保留整数}{\longrightarrow} 61
    可以看到0.2400.243的存储值都是61,它们的细节差异丢失了,所以实际显示效果会是一样的。

    如果我们进行一次伽马校正,则有:
    I1=0.2401/2.2255133.3133I2=0.2431/2.2255134.1134 I_1 = 0.240^{1/2.2} * 255 \approx 133.3 \stackrel{保留整数}{\longrightarrow} 133 \\ I_2 = 0.243^{1/2.2} * 255 \approx 134.1 \stackrel{保留整数}{\longrightarrow} 134 \\
    0.2400.243的存储值变为了133134,它们的实际显示效果就区分开了。

    当然,伽马校正会带来亮度较大值的表示精度的减小,例子如下:

    无伽马校正:
    I1=0.844255=215.22215I2=0.848255216.24216 I_1 = 0.844 * 255 = 215.22 \stackrel{保留整数}{\longrightarrow} 215 \\ I_2 = 0.848 * 255 \approx 216.24 \stackrel{保留整数}{\longrightarrow} 216
    有伽马校正:
    I1=0.8441/2.2255236.08236I2=0.8481/2.2255236.59236 I_1 = 0.844^{1/2.2} * 255 \approx 236.08 \stackrel{保留整数}{\longrightarrow} 236 \\ I_2 = 0.848^{1/2.2} * 255 \approx 236.59 \stackrel{保留整数}{\longrightarrow} 236 \\
    可以看到,无伽马矫正的时候能区分的亮度值,到了伽马校正后反而无法分开了。

    不过,人眼恰好对较暗值比较敏感,对较亮值不太敏感,所以亮部细节的丢失不会造成什么影响,而暗部细节的保留则会大大改善图像质量,这就是伽马校正至今依然采用的原因。


    参考链接:

    简单理解伽马校正:https://blog.csdn.net/tkokof1/article/details/87878442

    Gamma 的由来:https://zhuanlan.zhihu.com/p/36581276

    色彩校正中的 gamma 值是什么?https://www.zhihu.com/question/27467127

    展开全文
  • 对lena.jpg进行伽马校正(c=1c=1c=1,g=2.2g=2.2g=2.2)! 伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大 RGB 的值来...

    lena.jpg进行伽马校正(c=1c=1g=2.2g=2.2)!

    伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大 RGB 的值来排除显示器的影响,达到对图像修正的目的。

    由于下式引起非线性变换,在该式中,xx被归一化,限定在[0,1][0,1]范围内。cc是常数,gg为伽马变量(通常取2.22.2):
    x=c Iing x' = c\ {I_{in}}^ g
    因此,使用下面的式子进行伽马校正:
    Iout=1c Iin1g I_{out} ={\frac{1}{c}\ I_{in}} ^ {\frac{1}{g}}

    # -*- coding: utf-8 -*-
    """
    Created on Sat Jul 12 14:53:28 2020
    
    @author: 陨星落云
    """
    import imageio
    import numpy as np
    import matplotlib.pylab as plt
    
    def GammaCorrection(img,c=1.0,g=2.2):
    
        # 伽马校正
        out = (np.power(img/255, 1.0/g)/c)*255
    
        return out.astype(np.uint8)
    
    if __name__ == "__main__":
        
        # 读取图像
        img = imageio.imread("lena.jpg")
        
        # 伽马校正
        imageio.imsave("GammaCorrection.jpg",GammaCorrection(img))
    
        # 显示图像
        plt.figure(figsize=(10,8))
        plt.subplot(121)
        plt.imshow(img)
        plt.subplot(122)
        plt.imshow(GammaCorrection(img))
        plt.show()
    

    结果:
    在这里插入图片描述

    展开全文
  • 介绍伽马校正的由来, 作用以及实践
  • 低动态范围显示的保留细节的色调映射,带有自适应伽马校正
  • 介绍了低相干测量技术相关原理,利用16 阶二元相位光栅衍射的方法实现了对Holoeye Pluto 数字电寻址式液晶空间光调制器(SLM)绿光伽马校正,从而得到了相位与灰度之间的线性关系。搭建实验装置,在同一光路中完成伽马...
  • OpenGL Gamma Correction伽马校正先上图,再解答。完整主要的源代码源代码剖析 先上图,再解答。 完整主要的源代码 #include <glad/glad.h> #include <GLFW/glfw3.h> #include <stb_image.h> #...
  • 自动伽马校正(Auto Gamma Correction)算法 目录 文章目录自动伽马校正(Auto Gamma Correction)算法目录理论代码实现参考资料 理论 在对图像进行处理过程中,查找到一篇对图像进行自动gamma校正的论文,论文名称及...
  • opencv 图像伽马校正

    千次阅读 2015-12-12 20:07:37
    伽马校正,最好的,最高效的方法是通过table来访问: 核心函数LUT(The Core Function)¶ 这是最被推荐的用于实现批量图像元素查找和更该操作图像方法。在图像处理中,对于一个给定的值,将其替换成其他的值是一个...
  • 我理解的伽马校正(Gamma Correction)

    千次阅读 2019-01-22 12:46:53
    【图形学】我理解的伽马校正(Gamma Correction) 2015年05月30日 18:22:52妈妈说女孩子要自立自强阅读数:69844 版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • QuickGamma是一款专业的自动显示器伽马校正软件,可以快速调整显示器的gamma值,校正RGB三色,支持srgb和edid rgb模式。小编还提供了使用教程,需要的朋友可以下载试试! QuickGamma使用教程 1、在使用QuickGamma...
  • 利用OpenCV进行图像伽马校正

    千次阅读 2014-10-13 22:55:03
    伽马校正,最好的,最高效的方法是通过table来访问:
  • (不是伽马校正) 在摩根大通。李在14/12/2017 概述。 这个问题我们讨论相关问题的颜色空间线性spcace,如果你们已经从工作空间但是surdenly会改变γ颜色空间线性颜色空间在你的游戏。 内容。 上图展示的伽马2.2游戏...
  • 平时我们所说的伽马校正、伽马编码、伽马压缩,都是伽马曲线的各种应用场景,属于相似的概念。对于伽马工作原理的理解,一方面可以提高摄影者的曝光技术,另一方面可以帮助人们更好地利用后期的图像编辑功能。
  • 本篇参考B站视频 “技术美术百人计划”·霜狼_may ;...本篇内容主要包括伽马校正,韦伯定律,CRT,线性工作流,Unity颜色空间。 一.伽马校正 1.色彩空间 在之前的文章里有具体讲过色彩空间相关的东西,我们.
  • 智能优化算法应用:基于麻雀搜索算法与双伽马校正的图像自适应增强算法 - 附代码 文章目录智能优化算法应用:基于麻雀搜索算法与双伽马校正的图像自适应增强算法 - 附代码1.全局双伽马校正2.麻雀搜索算法3.适应度...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

伽马校正