灰度的gamma变换

合集下载

gamma及oled

gamma及oled

一、什么是GAMMA校正GAMMA校正是普遍应用在摄影技术、视频图像和计算机图形学中的一种技术,是一个实现图像尽可能真实地反映对象物体或源图形视觉信息的技术过程。

其中GAMMA表示的是表征灰度的电信号与光学亮度之间的非线性,这种非线性通常由器件本征的光电特性决定。

灰度电压与OLED发光的亮度阶梯有一一对应的关系,这就是GAMMA电压曲线。

在生产制造中,由于工艺的偏差以及所使用的材料不同,驱动OLED器件的GAMMA电压曲线有所不同。

GAMMA校正曲线描述的是二进制数与灰度电压的函数关系,通常来说,GAMMA曲线的横坐标是二进制数,纵坐标是二进制数对应的灰度电压。

GAMMA曲线使得电压与输出亮度满足以下关系:L=Caγ其中L为输出亮度,a为输入灰阶电平,C为系统常熟,γ为其指数。

二、GAMMA校正系统的构成如下图所示,是Gamma 校正系统原理图, 虚线框内是搭建的测量系统,其余部分是LCD 驱动中的Gamma 校正电路. 其中模拟数字转换器(ADC)完成模拟量到数字量的转换.经过Gamma 校正后,再由数字模拟转换器(DAC)把数字量还原成模拟量.实际系统中有3 个LCD 和Gamm a 查找表, 分别对应R 、G 、B 三基色图2 中左边的纵坐标是归一化光强E , 对应测量曲线和目标曲线; 右边的纵坐标是归一化Gamma值,对应Gam ma 曲线; 横坐标是归一化的输入灰阶N . 当未校正时投影机的输入- 输出曲线如图2 中测量曲线所示,呈S 形. G am ma 表的作用就是把通过ADC 输入的数据进行反S 形的非线性变换,最终使投影机的输入- 输出曲线满足理论要求自动校正的具体过程是: 由计算机控制Gamma表10 位寄存器的输出从0 递增到1 023,测量LCD投影机的光强输出得到系统未校正时的输入- 输出曲线。

当计算机得到投影机的输入- 输出特性曲线后,通过计算自动得出Gamm a 数据,并写入Gamm a 表寄存器. 计算方法是: 对于Gam ma 表的某一个输入数字信号A , 先找到A 对应的目标输出光强B , 然后在测量的特性曲线中找到此光强点C 所对应的Gamma 表输出值, 那么此值即为点A 的Gamm a 校正值点E. 对于0 ~255 的每一个输入数字量,重复上述过程,就能得到图2 中的Gam ma 校正曲线三、OLED的光电特性OLED的非线性光电特性示意图如下图左侧所示,右侧表明了OLED的电流—亮度特性。

灰度校正(γ校正)

灰度校正(γ校正)

灰度校正(γ校正)1、灰度校正的原理对完整的广播电视系统而言,要进行两次光一电的转换。

一次是在摄像端,由摄像机把光像转变成电信号;另一次是在显像端,由电视机把电信号重新转换成光像。

两次转换中,重要的转换器件使摄像器件和显像管。

从整个系统的角度来看,显像管重现的图案,应该于被摄景物上各种亮度成比例,使两次转换的过程为线性,即重现的图像亮度 B=K* B O(k-常数;B O-景物亮度)。

否则图像就会出现亮度和色度的非线性失真。

摄像器件的光-电转换关系为: E 0=K1 * B Oγ1(3-8)式中:E 0- 摄像器件输出电压;K1-常数; B O-景物亮度;γ1-转换非线性系数。

对于CCD和氧化铅等摄像管,可近似认为γ1=1,即摄像端的光电转换可以看作是线性的,即E 0=K1 * B O而显像管的电—光转换关系为:B d = K2 * Eγ2(3-9)式中:B d一显像管上的光像亮度;K2一系数;E一显像管栅极上的信号电压;γ2一显像管的转换非线性系数;一般γ2=2.2。

显然,显像管的电一光转换是一种非线性性关系。

这两种转换的γ特性如图3-55(a)、(b)所示。

图3-55为了使整个系统的综合特性保持线性关系,就必须在图像传输过程中认为地加入一个特性与显像管端相反的非线性失真,以校正由γ2非线性造成的失真。

设这一校正电路的传输特性为:E=K*E Oγ1(3-10)要保正系统为线性特性,则一定要满足:γ1*γ2*γ3=1(3-11)可得出:γ=1/(γ1*γ2)=1/2.2=0.45 (3-12)其特性如图3-55(c)。

我们把这种校正电路称为γ校正。

γ校正可以在摄像机电路中进行,也可以在电视机电路中进行,由于电视机数量远远大于摄像机数量,从降低接收机成本考虑,γ校正同意安排在摄像机电路中实施。

2、灰度校正的电路如图3-56所示,这是一个具有折线特性的γ校正电路。

图像信号经T1和R1直接耦合到射极输出的T3的基极,在耦合电路中加入由D1、D2等组成的γ校正电路。

灰度变换之伽马变换

灰度变换之伽马变换

灰度变换之伽马变换1.概述伽玛变换⼜名指数变换、幂次变换或幂律变换,是另⼀种常⽤的⾮线性变换伽马变换主要⽤于图像的校正,将灰度过⾼或者灰度过低的图⽚进⾏修正,增强对⽐度。

变换公式就是对原图像上每⼀个像素值做乘积运算:s=c⋅rγr∈[0,1]其中 c 和γ为正常数,有时考虑到偏移量,也将表达式写为:s=c⋅(r+ϵ)γr∈[0,1]与对数变换不同,伽玛变换可以根据γ的不同取值选择性地增强低灰度区域的对⽐度或是⾼灰度区域的对⽐度。

γ是图像灰度校正中⾮常重要的⼀个参数,其取值决定了输⼊图像和输出图像之间的灰度映射⽅式,即决定了是增强低灰度( 阴影区域)还是增强⾼灰度(⾼亮区域)。

其中:γ > 1 时,图像的⾼灰度区城对⽐度得到增强γ < 1 时,图像的低灰度区城对⽐度得到增强γ = 1 时,图像是线性变换,对⽐度保持不变针对于数字图像处理,我们可以将公式写为:output=(input+ϵ)γ由于幂运算值域变化范围可能太⼤,对于当前主要的8 bit显⽰器,我们采⽤归⼀化⼿段:output=255×(input+ϵ255)γ2. 补偿系数的作⽤导⼊库:In [1]:from PIL import Imageimport numpy as npimport matplotlib.pyplot as plt定义伽马变换函数:In [2]:def gamma_trans(input, gamma=2, eps=0 ):return 255. * (((input + eps)/255.) ** gamma)测试补偿系数为0时的效果:In [3]:input_arr = np.array( [ [0, 50, 100, 150],[0, 50, 100, 150],[0, 50, 100, 150],[0, 50, 100, 150]] )fig = plt.figure()ax0 = fig.add_subplot(221)ax0.set_title("input")ax0.imshow(input_arr, cmap='gray',vmin=0,vmax=255)gamma = 0.25output = gamma_trans(input_arr, gamma=gamma, eps=0)ax1 = fig.add_subplot(222)ax1.set_title("output, gamma = " + str(gamma))ax1.imshow(output, cmap='gray', vmin=0, vmax=255)gamma = 0.75output = gamma_trans(input_arr, gamma=gamma, eps=0)ax1 = fig.add_subplot(223)ax1.set_title("output, gamma = " + str(gamma))ax1.imshow(output, cmap='gray', vmin=0, vmax=255)gamma = 1.5output = gamma_trans(input_arr, gamma=gamma, eps=0)ax1 = fig.add_subplot(224)ax1.set_title("output, gamma = " + str(gamma))ax1.imshow(output, cmap='gray', vmin=0, vmax=255)print(output)plt.show()[[ 0. 22.14037214 62.62242911 115.04474833][ 0. 22.14037214 62.62242911 115.04474833][ 0. 22.14037214 62.62242911 115.04474833][ 0. 22.14037214 62.62242911 115.04474833]]由图可以看到,如果补偿系数ϵ=0,则灰度等于0的区域将不会产⽣任何变化,我们添加⼀个补偿系数ϵ=0.5:In [4]:input_arr = np.array( [ [0, 50, 100, 150],[0, 50, 100, 150],[0, 50, 100, 150],[0, 50, 100, 150]] )fig = plt.figure()ax0 = fig.add_subplot(221)ax0.set_title("input")ax0.imshow(input_arr, cmap='gray',vmin=0,vmax=255)gamma = 0.25output = gamma_trans(input_arr, gamma=gamma, eps=0.5)ax1 = fig.add_subplot(222)ax1.set_title("output, gamma = " + str(gamma))ax1.imshow(output, cmap='gray', vmin=0, vmax=255)gamma = 0.75output = gamma_trans(input_arr, gamma=gamma, eps=0.5)ax1 = fig.add_subplot(223)ax1.set_title("output, gamma = " + str(gamma))ax1.imshow(output, cmap='gray', vmin=0, vmax=255)gamma = 1.5output = gamma_trans(input_arr, gamma=gamma, eps=0.5)ax1 = fig.add_subplot(224)ax1.set_title("output, gamma = " + str(gamma))ax1.imshow(output, cmap='gray', vmin=0, vmax=255)print(output)plt.show()[[2.21403721e-02 2.24733066e+01 6.30926839e+01 1.15620451e+02][2.21403721e-02 2.24733066e+01 6.30926839e+01 1.15620451e+02][2.21403721e-02 2.24733066e+01 6.30926839e+01 1.15620451e+02][2.21403721e-02 2.24733066e+01 6.30926839e+01 1.15620451e+02]]可以看到整体的对⽐度都有变化,灰度值为0的问题可以避免3. 伽马变换矫正显⽰失真⽼式电视机CRT会有显⽰失真的问题,不同的电视有不同的失真指数我们假设某⽼式电视失真指数γ=0.5,我们使⽤伽马变换进⾏矫正,只需取矫正指数γ′=1γ原图像:In [5]:gray_img = np.asarray(Image.open('./img/intensity_ramp.tif').convert('L'))fig = plt.figure()ax0 = fig.add_subplot()ax0.set_title("origin")ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255)plt.show()失真图像和伽马矫正:In [6]:gray_img = np.asarray(Image.open('./img/intensity_ramp.tif').convert('L'))fig = plt.figure()ax0 = fig.add_subplot(131)ax1 = fig.add_subplot(132)ax2 = fig.add_subplot(133)gamma=0.5ax0.set_title("origin")ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255)ax1.set_title("distortion")distortion = gamma_trans(gray_img, gamma=gamma, eps=0)ax1.imshow(distortion, cmap='gray',vmin=0,vmax=255)ax2.set_title("correct")correct = gamma_trans(distortion, gamma=1/gamma, eps=0)ax2.imshow(correct, cmap='gray',vmin=0,vmax=255)plt.show()此处看起来是脱裤⼦放屁多此⼀举,但是实际中失真指数是不知道的,需要去得到矫正指数4. 伽马变换拉伸对⽐度对于暗⾊照⽚,我们可以进⾏伽马系数⼩于⼀的伽马变换从⽽提⾼低灰度值的对⽐度原图像:In [7]:gray_img = np.asarray(Image.open('./img/fractured_spine.tif').convert('L'))fig = plt.figure()ax0 = fig.add_subplot()ax0.set_title("origin")ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255)plt.show()伽马变换:In [8]:gray_img = np.asarray(Image.open('./img/fractured_spine.tif').convert('L'))fig = plt.figure()ax0 = fig.add_subplot(121)ax1 = fig.add_subplot(122)gamma=0.4ax0.set_title("origin")ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255)ax1.set_title("correct")correct = gamma_trans(gray_img, gamma=gamma, eps=0)ax1.imshow(correct, cmap='gray',vmin=0,vmax=255)plt.show()注意此处的伽马系数0.4是⼀种探索得出的数字,不⼀定是最佳值,下⾯的2.0同理对于亮⾊照⽚,我们可以进⾏伽马系数⼤于⼀的伽马变换从⽽提⾼低灰度值的对⽐度原图像:In [9]:gray_img = np.asarray(Image.open('./img/washed_out.tif').convert('L'))fig = plt.figure()ax0 = fig.add_subplot()ax0.set_title("origin")ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255)plt.show()伽马变换:In [10]:gray_img = np.asarray(Image.open('./img/washed_out.tif').convert('L'))fig = plt.figure()ax0 = fig.add_subplot(121)ax1 = fig.add_subplot(122)gamma = 2.0ax0.set_title("origin")ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255)ax1.set_title("correct")correct = gamma_trans(gray_img, gamma=gamma, eps=0)ax1.imshow(correct, cmap='gray',vmin=0,vmax=255)plt.show()可以看到伽马变换带来的图像增强效果还是显著的5. 参考资料[1][2][3]Processing math: 100%。

ghh函数

ghh函数

ghh函数
ghh函数是一种常用的图像处理算法,也称为Gamma矫正函数或灰度修正函数。

该函
数可以对图像进行非线性的灰度调整,从而增强图像对比度和亮度,使图像视觉效果更加
鲜明、清晰。

ghh函数是一种映射函数,通常它用来对原始的光强数据进行调整。

在图像
处理过程中,ghh函数应用广泛,例如在图像增强、色彩校正、显示媒体等方面都有着重
要的应用。

ghh函数的定义为:g(i,j)=c[f(i,j)]^γ,其中f(i,j)是原始图像的像素值,g(i,j)是新的像素值,c和γ分别是常量,用来调整灰度调整的幅度和曲线斜率。

在一般情况下,常量c的取值为1,γ的取值通常在0.1~10.0之间,它的作用就是控制图像的光强反应变化率,增强图像的对比度和亮度。

(1)提取图像的像素值
(2)计算像素值经过ghh函数处理后的新值
(3)将新的像素值替换原始像素值
(4)对整幅图像进行处理
(1)增强图像的亮度和对比度
ghh函数可以显著地改变图像的灰度分布,增强过暗或过亮的区域细节,使图像更具
有视觉效果和艺术效果。

(2)色彩校正
ghh函数可以对图像的色彩进行校正,增加图像的鲜艳度和层次感。

常用于印刷和媒
体制作领域。

(3)显示媒体
ghh函数应用于显示媒体时可以调整图像的亮度和对比度,使得在弱光条件下也能获
得清晰的图像信息。

例如,智能手机和平板电脑的后台媒体渲染。

总之,ghh函数是一种非常有用的图像处理算法,可以在各个领域中发挥重要作用。

它的应用可以大大改善图像的质量,增加图像的视觉效果,让观众更好地理解图像信息。

将RGB值转换为灰度值的简单算法

将RGB值转换为灰度值的简单算法

将RGB值转换为灰度值的简单算法RGB是如何转换为灰度的?这是让⼈困惑已久的⼀道难题。

1、RGB复合通道转灰度:转换后的⾊阶值只与RGB空间有关,⽽与作为⽬的地的灰度空间⽆关。

也就是说,只要当前的RGB空间不变,不管将灰度空间设置为哪种,转换后的⾊阶值都是⼀样的。

2、RGB中的单通道转灰度:转换后的⾊阶值不仅于RGB空间有关,⽽且还与作为⽬的地的灰度空间有关。

但是,其灰度值K 只于RGB⾊阶有关,⽽与RGB空间及灰度空间⽆关。

其值与RGB⾊阶X的关系为:K=1-X/2553、在RGB模式中,修改颜⾊设置中的RGB⼯作空间,将影响复合通道的外观和灰度K值,以及单通道的灰度值。

但是,不会影响到单通道的外观。

4、在RGB模式中,如果修改颜⾊设置中的灰度空间,将影响到单⾊通道的外观以及单⾊通道、复合通道的灰度K值,但是,不会影响到复合通道的外观。

以上见解供⼤家讨论!⼀、RGB向灰度转换的原理RGB向灰度转换时,是以LAB模式为中介的(这和PS中关于LAB模式的⼀贯解释是完全吻合的)。

其基本的流程是:⾸先将RGB转换为LAB,然后在LAB中去⾊,使A、B均为零,并依此⽣成⼀个RGB等值的灰阶,最后再根据该灰阶向灰度空间转换。

由此可见,转换为灰度的等值RGB只与原来的RGB空间有关,⽽与作为⽬标空间的灰度空间⽆关。

⼆、灰阶的计算不同的RGB空间,灰阶的计算公式有所不同,常见的⼏种RGB空间的计算灰阶的公式如下:1、简化 sRGB IEC61966-2.1 [gamma=2.20]Gray = (R^2.2 * 0.2126 + G^2.2 * 0.7152 + B^2.2 * 0.0722)^(1/2.2)2、 Adobe RGB (1998) [gamma=2.20]Gray = (R^2.2 * 0.2973 + G^2.2 * 0.6274 + B^2.2 * 0.0753)^(1/2.2)3、Apple RGB [gamma=1.80]Gray = (R^1.8 * 0.2446 + G^1.8 * 0.6720 + B^1.8 * 0.0833)^(1/1.8)4、ColorMatch RGB [gamma=1.8]Gray = (R^1.8 * 0.2750 + G^1.8 * 0.6581 + B^1.8 * 0.0670)^(1/1.8)5、简化 KODAK DC Series Digital Camera [gamma=2.2]Gray = (R^2.2 * 0.2229 + G^2.2 * 0.7175 + B^2.2 * 0.0595)^(1/2.2)三、灰度K的计算由于RGB空间与灰度空间都有其相互独⽴的灰度系数(即GAMMA,设RGB空间的GAMMA为GAMMA1,灰度空间的GAMMA 为GAMMA2),因此,就有了两种意义上的灰度K,⼀种是在RGB空间中相对于GAMMA1的灰度K1,另⼀种是转换到灰度空间后,相对于灰度空间GAMMA2的灰度K2(K2实际上就是经过GAMMA转换后的灰度)。

实验2_灰度修正技术1

实验2_灰度修正技术1

实验2 灰度修正技术一、 实验目的:1. 掌握灰度变换2. 深入理解图像直方图的概念,掌握图像直方图的绘制方法3. 掌握直方图均衡化的原理,并会用直方图均衡化对图像进行处理二、 实验原理2.1灰度修正技术包括直接灰度变换和直方图修正,其目的是增强图像的对比度,使图像更加清晰。

1.灰度变换灰度变换是一种最简单的图像增强技术,它属于点操作,这种变换方法有多种,如线性变换、对数变换、幂次变换等。

(1) 线性变换所谓线性变换是指:输出图像灰度值g 和输入图像灰度值f 之间的函数关 系是线性关系。

由图2-1(a)所示的线性变换可知,输出图像灰度值g 的表达式可以写成M m f M m f mn M N g +-=+---=)()(α (2-1) 若α > 1,则输出图像对应的灰度范围扩大,对比度增强;若0 < α < 1,则输出图像对应的灰度范围压缩,对比度减小;若α < 0,则图像灰度值求反(见图2-1(b)),使白变黑,使黑变白。

(a) (b)图2-1 灰度线性变换 (a)线性变换;(b)求反.(2) 对数变换设输入图像灰度值为非负值,即0≥f ,则对数变换的数学表达式为)1log(f c g += (2-2)式中c 是一个可以调整的常数。

当1=c 时,对数变换曲线如图2-2所示。

由图可以看出,窄范围的低灰度输入图像值映射为一宽范围输出值,而宽范围的高灰度值映射为一窄范围的输出值,即暗像素的灰度值范围被扩大,而亮像素的灰度值范围被压缩,这就使低灰度区域的图像细节能够获得清晰的显示。

对数变换能有效地压缩图像的动态范围,其典型应用是图像Fourier频谱的显示。

Fourier幅度谱的动态范围很大,其数值在0至106数量级范围内变化,而普通显示器的动态范围只有8比特,如果不经对数变换而直接显示,则低数值的细节就无法显示出来。

图2-2 对数变换(3)幂次变换幂次变换的数学表达式可以写成γ=(2-3)g⋅cf式中γ,c均是正的常数。

Gamma详解与改变GAMMA的影响

Gamma详解与改变GAMMA的影响

Gamma详解转自:/a/gb2312/news/20100113/65.html 发布者::eecotech 发布时间::2010-01-13 14:23浏览次数::207在显示器应用的过程中,经常会遇到一个参数Gamma值,许多人对此了解不深,Gamma值在影像显示中到底起什么作用?我们如何设置适宜的Gamma值?在此我们转载太平洋电脑网的一篇文章,文中讲述了Gamma的概念及如何设置,希望能对大家有所帮助!一. 在哪见过、听说过Gamma?* 还用说,Adobe Gamma* 常听说MAC的默认Gamma是1.8,PC的是2.2* 我的显卡驱动程序里有Gamma调节* 我下载了一个软件,也可以调节显示器的Gamma* WinDVD播放器带Gamma校正功能* ACDSEE的曝光调节里可以调Gamma* ACDSEE的选项中有Enable Gamma Correction* XV Viewer 能以参数-gamma 2.2 启动(x window也可以)* PNG文件里有Gamma校正* Photoshop里当然也有* ICC Profile也和Gamma有关?* 摄像头、数码相机、扫描仪?胶片?……中也有提到Gamma的……这些都是怎么回事?显卡(驱动程序)上的Gamma设置ACDSEE中的曝光调节二. 什么是Gamma?2.1. 显示器Gamma曲线Gamma可能源于CRT(显示器/电视机)的响应曲线,即其亮度与输入电压的非线性关系。

一典型显示器的响应曲线,非常接近指数函数上图中输入值为数字化的,即通常的RGB值,但可以理解数/模转换是线性的,所以它和输入电压是等效的。

归一化后,我们通常可以用一简单的函数来表示:output = input ^ gammagamma就是指数函数中的幂。

归一化的Gamma曲线注意上图曲线的一些特性:* 端点是不变的,即不管gamma值如何变化,0对应的输出始终是0,1的输出始终是1(这一特性会被用到)。

数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)

数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)

数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)总结性的⼀篇博⽂,内容其实很简单,之所以写出来是为了对⾃⼰之前所学做⼀些总结。

参考⾃:《数字图像处理》--第三版--冈萨勒斯--中,以及师兄提供的参考资料,在此对师兄表⽰感谢。

空间域处理是直接对像素进⾏操作的⽅法,这是相对于频率域处理⽽⾔的。

空间域处理主要分为两⼤类:灰度变换和空间滤波。

灰度变换在图像单个像素上操作,主要以对⽐度和阈值处理为⽬的。

空间滤波涉及改善性能的操作,通过像元领域来处理。

空间域处理均可由下式表达:表⽰f(x, y)输⼊图像,g(x,y)表⽰输出图像,T 是变换算⼦(数学规则)灰度变换可以看作领域⼤⼩为1*1的空间域处理,这这种情况下上式变为灰度变换函数:r和s分别为输⼊、输出灰度基本的灰度变换函数常⽤的基本函数有三类:线性函数,对数函数(对数和反对数)和幂律函数(n次幂和n次根)图像反转适⽤于增强嵌⼊在⼀幅图像暗区域中的⽩⾊或灰⾊细节。

变换公式为:图像灰度级范围为[0,L-1]"""反转变换"""import numpy as npimport cv2import matplotlib.pyplot as pltdef reverse(img):output = 255 - imgreturn outputimg1 = cv2.imread(r'F:\program_study\Python\data\breast.tif') # 前头加r是消除反斜杠转义cv2.imshow('input', img1)x = np.arange(0, 256, 0.01)y = 255 - xplt.plot(x, y, 'r', linewidth=1)plt.title('反转变换函数图')plt.xlim([0, 255]), plt.ylim([0, 255])plt.show()img_output = reverse(img1)dWindow('output', cv2.WINDOW_NORMAL) # 可改变窗⼝⼤⼩cv2.imshow('output', img_output)cv2.waitKey(0)cv2.destroyAllWindows()反转变换对数变换对数变换可以拉伸范围较窄的低灰度值,同时压缩范围较宽的⾼灰度值。

图像处理灰度变换实验

图像处理灰度变换实验

一. 实验名称:空间图像增强(一)一.实验目的1.熟悉和掌握利用matlab工具进行数字图像的读、写、显示、像素处理等数字图像处理的基本步骤和流程。

2.熟练掌握各种空间域图像增强的基本原理及方法。

3.熟悉通过灰度变换方式进行图像增强的基本原理、方法和实现。

4.熟悉直方图均衡化的基本原理、方法和实现。

二.实验原理(一)数字图像的灰度变换灰度变换是图像增强的一种经典而有效的方法。

灰度变换的原理是将图像的每一个像素的灰度值通过一个函数,对应到另一个灰度值上去从而实现灰度的变换。

常见的灰度变换有线性灰度变换和非线性灰度变换,其中非线性灰度变换包括对数变换和幂律(伽马)变换等。

1、线性灰度变换1)当图像成像过程曝光不足或过度,或由于成像设备的非线性和图像记录设备动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清,图像缺少层次。

这时,可将灰度范围进行线性的扩展或压缩,这种处理过程被称为图像的线性灰度变换。

对灰度图像进行线性灰度变换能将输入图像的灰度值的动态范围按线性关系公式拉伸扩展至指定范围或整个动态范围。

2)令原图像f(x,y)的灰度范围为[a,b],线性变换后得到图像g(x,y),其灰度范围为[c,d],则线性灰度变换公式可表示为a y x fb y x f a b y x fc c a y x f a b cd d y x g <≤≤>⎪⎩⎪⎨⎧+---=),(),(),(,,]),([,),( (1)由(1)式可知,对于介于原图像f (x,y )的最大和最小灰度值之间的灰度值,可通过线性变换公式,一一对应到灰度范围[c,d]之间,其斜率为(d-c)/(b-a);对于小于原图像的最小灰度值或大于原图像的最大灰度值的灰度值,令其分别恒等于变换后的最小和最大灰度值。

变换示意图如图1所示。

图1 线性灰度变换示意图当斜率大于一时,变换后的灰度值范围得到拉伸,图像对比度得到提高;当斜率小于一时,变换后的灰度值范围被压缩,最小与最大灰度值的差变小,图像对比度降低;当斜率等于一时,相当于对图像不做变换。

OpenCV图像处理之常见的图像灰度变换

OpenCV图像处理之常见的图像灰度变换

OpenCV图像处理之常见的图像灰度变换1.灰度线性变换图像的灰度线性变换是图像灰度变换的⼀种,图像的灰度变换通过建⽴灰度映射来调整源图像的灰度,从⽽达到图像增强的⽬的。

灰度映射通常是⽤灰度变换曲线来进⾏表⽰。

通常来说,它是将图像的像素值通过指定的线性函数进⾏变换,以此来增强或者来减弱图像的灰度,灰度线性变换的函数就是常见的线性函数。

g(x, y) = k · f(x, y) + d设源图像的灰度值为x,则进⾏灰度线性变换后的灰度值为y = kx + b (0<=y<=255),下⾯分别来讨论k的取值变化时线性变换的不同效果(1).|k|>1时当k>1时,可以⽤来增加图像的对⽐度,图像的像素值在进⾏变换后全部都线性⽅法,增强了整体的显⽰效果,且经过这种变换后,图像的整体对⽐度明显增⼤,在灰度图中的体现就是变换后的灰度图明显被拉伸了。

(2).|k|=1时当k=1时,这种情况下常⽤来调节图像的亮度,亮度的调节就是让图像的各个像素值都增加或是减少⼀定量。

在这种情况下可以通过改变d值来达到增加或者是减少图像亮度的⽬的。

因为当k=1,只改变d 值时,只有图像的亮度被改变了,d>0时,变换曲线整体发⽣上移,图像的亮度增加,对应的直⽅图整体向右侧移动,d<0时,变换曲线整体下移,图像的亮度降低,对应的直⽅图发⽣⽔平左移。

(3).0<|k|<1时此时变换的效果正好与k>1时相反,即图像的整体对⽐度和效果都被削减了,对应的直⽅图会被集中在⼀段区域上。

k值越⼩,图像的灰度分布也就越窄,图像看起来也就显得越是灰暗。

(4).k<0时在这种情况下,源图像的灰度会发⽣反转,也就是原图像中较亮的区域会变暗,⽽较暗的区域将会变量。

特别的,此时我们令k = -1,d = 255,可以令图像实现完全反转的效果。

对应的直⽅图也会发⽣相应的变化。

相应的程序试下如下://实现图像的灰度线性变化#include <iostream>#include <opencv2\core\core.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\imgproc\imgproc.hpp>using namespace std;using namespace cv;int main(){Mat srcImg = imread("1234.jpg");if (!srcImg.data){cout << "读⼊图⽚失败" << endl;return -1;}imshow("原图像", srcImg);double k, b;cout << "请输⼊k和b值:";cin >> k >> b;int RowsNum = srcImg.rows;int ColsNum = srcImg.cols;Mat dstImg(srcImg.size(), srcImg.type());//进⾏遍历图像像素,对每个像素进⾏相应的线性变换for (int i = 0; i < RowsNum; i++){for (int j = 0; j < ColsNum; j++){//c为遍历图像的三个通道for (int c = 0; c < 3; c++){//使⽤at操作符,防⽌越界dstImg.at<Vec3b>(i, j)[c] = saturate_cast<uchar>(k* (srcImg.at<Vec3b>(i, j)[c]) + b);}}}imshow("线性变换后的图像", dstImg);waitKey();return 0;}当k=1.2,b=50时执⾏程序的效果如下:2.灰度对数变换对数变换的基本形式为其中,b是⼀个常数,⽤来控制曲线的弯曲程度,其中,b越⼩越靠近y轴,b越⼤越靠近x轴。

matlab 反gamma变换

matlab 反gamma变换

在数字图像处理中,Gamma变换是一种常见的灰度变换方法,用于调整图像的对比度和亮度。

与Gamma变换相对的是反Gamma变换,也称为伽马校正,用于矫正原图像进行了Gamma变换后的图像。

在Matlab中,可以利用反Gamma变换函数来实现图像的伽马校正。

本文将从深度和广度两方面对Matlab中的反Gamma变换进行全面评估,以帮助读者更深入地理解这一主题。

1. 反Gamma变换的基本概念反Gamma变换是指对经过Gamma变换后的图像进行逆变换,以还原原始图像的过程。

在数字图像处理中,Gamma变换是非线性的灰度变换,它可以调整图像的亮度和对比度。

而反Gamma变换则是为了矫正原图像经过了Gamma变换后的图像,使其恢复到原来的状态。

2. Matlab中反Gamma变换的实现在Matlab中,可以利用imadjust函数来进行反Gamma变换,实现图像的伽马校正。

imadjust函数可以设置参数gamma来实现反Gamma变换的效果,具体的实现方法可以参考Matlab官方文档或者其他相关资料。

3. 反Gamma变换的应用反Gamma变换在图像处理中有着广泛的应用,特别是在数字摄影和医学图像处理领域。

通过反Gamma变换,可以对经过Gamma变换后的图像进行矫正,保持图像的真实性和准确性,提高图像的质量和可视效果。

4. 个人观点和理解在我看来,反Gamma变换是一种非常有用的图像处理技术,可以帮助我们调整图像的对比度和亮度,提高图像的质量和可视效果。

在Matlab中实现反Gamma变换也相对简单,只需要几行代码就可以完成。

我希望通过学习和掌握反Gamma变换的原理和实现方法,可以更好地应用于实际的图像处理工作中。

总结回顾通过本文的讨论,我们对Matlab中的反Gamma变换有了深入的了解。

我们介绍了反Gamma变换的基本概念、Matlab中的实现方法以及其在图像处理中的应用。

我也共享了我个人对于反Gamma变换的观点和理解。

matlab中 gamma变换

matlab中 gamma变换

文章标题:深入探讨 Matlab 中的 Gamma 变换一、引言在数字图像处理中,Gamma 变换是一种常见的像素灰度调整方法。

它通过非线性变换来调整图像的对比度和亮度,对于图像增强和色彩调整具有重要作用。

在 Matlab 中,Gamma 变换是一种简单但有效的图像处理技术,本文将深入探讨 Gamma 变换的原理、应用和实现方法。

二、 Gamma 变换的原理1. 什么是 Gamma 变换Gamma 变换是一种用来调整图像亮度和对比度的非线性变换方法。

其数学表达式为:\[I_{\text{out}} = I_{\text{in}}^\gamma\]其中,\(I_{\text{in}}\) 表示输入图像的像素值,\(\gamma\) 为Gamma 值,\(I_{\text{out}}\) 表示经过 Gamma 变换后的输出图像像素值。

2. Gamma 值的影响Gamma 值大于1 时,可以增强图像的对比度,使图像更加清晰饱满;Gamma 值小于 1 时,可以降低对比度,使图像更加柔和亮丽。

三、 Gamma 变换的应用1. 图像增强通过调整 Gamma 值,可以对图像进行局部增强或整体增强,使细节更加清晰或颜色更加鲜艳。

2. 色彩调整Gamma 变换也可以用于对图像的色彩进行调整,加深或减淡图像的色彩饱和度。

3. 视觉心理学Gamma 变换还与人类视觉特性有关,通过合适的 Gamma 值可以更好地符合人眼对亮度的感知。

四、 Matlab 中的 Gamma 变换实现在 Matlab 中,可以通过以下步骤来实现 Gamma 变换:1. 读入原始图像通过 imread 函数读入原始图像,得到图像矩阵。

2. Gamma 变换公式根据 Gamma 变换的公式,对图像矩阵进行非线性变换,得到输出图像矩阵。

3. 显示输出图像通过 imshow 函数显示经过 Gamma 变换后的输出图像。

五、个人观点和理解在实际图像处理中,Gamma 变换是一种简单而有效的增强图像对比度和亮度的方法。

gamma 曲线的概念

gamma 曲线的概念

Gamma曲线是一种特殊的色调曲线,当Gamma值等于1的时候,曲线为与坐标轴成45°的直线,这个时候表示输入和输出密度相同。

在数码图像中,每个像素都有一定的光亮程度,即从黑色(0)到白色(1)。

这些像素值就是输入到电脑显示器里面的信息。

但由于技术的限制,纯平(CRT)显示器只能以一种非线性的方式输出这些值,即:输出=输入/伽马。

在不加调整的情况下,多数CRT显示器都有一个2.5的伽马值,它的意义是:假如一个像素的光亮度为0.5,在没有颜色管理应用程序的干预下,它在显示器上输出的光亮度只有0.2(0.5/2.5)。

此外,gamma曲线可以指不同灰阶与亮度的关系曲线。

把0-255灰阶(灰度值)作为X轴,把亮度作为Y轴,画出来的曲线就叫做gamma曲线。

从最明亮到最黑暗,假设人眼能够看到一定的范围,那么胶片(或CCD等电子感光器件)所能表现的远比人眼看到的范围小的多,而这个有限的范围就是感光宽容度。

以上信息仅供参考,如有需要,建议查阅相关网站。

gamma变换

gamma变换

gamma变换
gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:
这个指数即为gamma,Vin的取值范围为0-1,因此需要先进行归一化,然后取指数。

gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。

经过gamma变换后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。

可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。

浅谈PythonOpencv中gamma变换的使用详解

浅谈PythonOpencv中gamma变换的使用详解

浅谈PythonOpencv中gamma变换的使⽤详解伽马变换就是⽤来图像增强,其提升了暗部细节,简单来说就是通过⾮线性变换,让图像从暴光强度的线性响应变得更接近⼈眼感受的响应,即将漂⽩(相机曝光)或过暗(曝光不⾜)的图⽚,进⾏矫正。

伽马变换的基本形式如下:⼤于1时,对图像的灰度分布直⽅图具有拉伸作⽤(使灰度向⾼灰度值延展),⽽⼩于1时,对图像的灰度分布直⽅图具有收缩作⽤(是使灰度向低灰度值⽅向靠拢)。

#分道计算每个通道的直⽅图img0 = cv2.imread('12.jpg')hist_b = cv2.calcHist([img0],[0],None,[256],[0,256])hist_g = cv2.calcHist([img0],[1],None,[256],[0,256])hist_r = cv2.calcHist([img0],[2],None,[256],[0,256])def gamma_trans(img,gamma):#具体做法先归⼀化到1,然后gamma作为指数值求出新的像素值再还原gamma_table = [np.power(x/255.0,gamma)*255.0 for x in range(256)]gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)#实现映射⽤的是Opencv的查表函数return cv2.LUT(img0,gamma_table)img0_corrted = gamma_trans(img0, 0.5)cv2.imshow('img0',img0)cv2.imshow('gamma_image',img0_corrted)cv2.imwrite('gamma_image.png',img0_corrted)#分通道计算Gamma校正后的直⽅图hist_b_c =cv2.calcHist([img0_corrted],[0],None,[256],[0,256])hist_g_c =cv2.calcHist([img0_corrted],[1],None,[256],[0,256])hist_r_c =cv2.calcHist([img0_corrted],[2],None,[256],[0,256])fig = plt.figure('gamma')pix_hists = [[hist_b, hist_g, hist_r],[hist_b_c, hist_g_c, hist_r_c]]pix_vals = range(256)for sub_plt, pix_hist in zip([121, 122], pix_hists):ax = fig.add_subplot(sub_plt, projection='3d')for c, z, channel_hist in zip(['b', 'g', 'r'], [20, 10, 0], pix_hist):cs = [c] * 256ax.bar(pix_vals, channel_hist, zs=z, zdir='y', color=cs, alpha=0.618, edgecolor='none', lw=0)ax.set_xlabel('Pixel Values')ax.set_xlim([0, 256])ax.set_ylabel('Count')ax.set_zlabel('Channels')plt.show()cv2.waitKey()以上这篇浅谈Python Opencv中gamma变换的使⽤详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

gamma变换表达式

gamma变换表达式

gamma变换表达式Gamma变换是数字图像处理中常用的一种灰度变换方法,它可以用来调整图像的对比度和亮度。

Gamma变换的表达式为:s = c * r^γ其中,s为输出像素值,r为输入像素值,γ为Gamma值,c为常数。

Gamma变换的作用是通过对输入像素值进行非线性映射,从而改变图像的亮度和对比度。

Gamma值决定了变换的曲线形状,不同的Gamma值可以产生不同的效果。

Gamma变换常用于纠正显示设备的非线性特性,例如电视和显示器。

这些设备在显示图像时会对输入信号进行Gamma校正,以使图像在显示屏上呈现出更好的亮度和对比度。

通过应用逆Gamma 变换,可以将经过Gamma校正的图像恢复为原始的线性表示。

Gamma变换还可以用于图像增强和颜色校正。

通过调整Gamma 值,可以增强图像的细节和对比度,使图像更加清晰和鲜明。

同时,Gamma变换也可以用来调整图像的色彩平衡,纠正图像中的色偏问题。

在实际应用中,选择合适的Gamma值非常重要。

较小的Gamma 值(小于1)可以增强图像的暗部细节,使图像更加明亮;较大的Gamma值(大于1)可以增强图像的亮部细节,使图像更加对比鲜明。

不同的图像和应用场景需要不同的Gamma值来达到最佳效果。

需要注意的是,Gamma变换是一种非线性操作,可能会引入一定的失真。

因此,在应用Gamma变换时,需要谨慎调整Gamma值,避免过度增强或失真图像。

Gamma变换是一种常用的图像处理方法,通过调整Gamma值可以改变图像的亮度和对比度。

它在图像显示、图像增强和颜色校正等方面有着广泛的应用。

正确使用Gamma变换可以改善图像质量,提升视觉效果。

gamma变换表达式

gamma变换表达式

gamma变换表达式摘要:1.引言2.gamma变换的定义3.gamma变换的性质4.gamma变换在信号处理中的应用5.总结正文:gamma变换是一种在信号处理、图像处理等领域广泛应用的数学变换。

它可以将一个信号从时域转换到频域,并且具有很多优秀的性质。

在本文中,我们将详细介绍gamma变换的定义、性质以及在信号处理中的应用。

首先,我们来定义gamma变换。

gamma变换是一种非线性变换,它将一个信号x(t)转换为一个频域表示y(s)。

其中,t表示时域变量,s表示频域变量。

gamma变换的表达式如下:Y(s) = x(t) * |s|^(-α) * e^(-βt)其中,α和β是gamma变换的两个参数,决定了变换的性质。

当α = 0时,gamma变换退化为傅里叶变换;当α = 1时,gamma变换退化为曼彻斯特变换。

gamma变换具有很多优秀的性质。

首先,它具有良好的时域和频域的局部特性。

这意味着,当我们对一个信号进行gamma变换时,变换后的频域表示只与信号的某个时间段的时域表示有关,而与其他时间段无关。

这使得gamma变换在处理信号的局部特性时非常有效。

其次,gamma变换具有良好的稳定性。

这意味着,当我们对一个信号进行gamma变换时,变换后的频域表示不会因为信号的幅度变化而产生明显的失真。

这使得gamma变换在处理信号的幅度变化时非常有效。

最后,gamma变换在信号处理中有广泛的应用。

例如,在图像处理中,gamma变换可以用来实现图像的锐化、边缘检测等操作。

在音频处理中,gamma变换可以用来实现音频的压缩、降噪等操作。

总之,gamma变换是一种非常有用的数学变换,它具有定义简单、性质优秀、应用广泛等优点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in以下与high_in以上的值被剪切掉了,也就是说,low_in以下的值映射到low_out,high_in以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。其中gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。
title('Gamma=0.2');
figure(1);%绘图
subplot(3,2,3);
imshow(imadjust(I,[],[],5)); % gamma=5,默认整个范围的数值都转换
title('Gamma=5');
figure(1);
subplot(3,2,4);
stem(imhist(imadjust(I,[],[],5),64));
% title('Gamma=2,in=[0,0.5]');
%
% figure(1);%绘图
% subplot(2,4,8);
% imshow(imadjust(I,[0,0.5],[],4)); % gamma=4,默认整个范围的数值都转换
% title('Gamma=4,in=[0,0.5]');
% subplot(2,4,6);
% imshow(imadjust(I,[0,0.5],[],0.8)); % gamma=0.8,默认整个范围的数值都转换
% title('Gamma=0.8,in=[0,0.5]');
%
% figure(1);%绘图
% subplot(2,4,7);
% imshow(imadjust(I,[0,0.5],[],2)); % gamma=2,默认整个范围的数值都转换
title('Gamma 0.5');
H=imread('chippy_corn.jpg');%读取彩图
I=rgb2gray(H);%转换为灰度图
%figure(1);%绘图
% subplot(2,4,1);
% imshow(imadjust(I,[],[],0.4)); % gamma=0.4,默认整个范围的数值都转换
figure(1);%绘图
subplot(3,2,1);
imshow(imadjust(I,[],[],0.2)); % gamma=0.2,默认整个范围的数值都转换
title('Gamma=0.2');
figure(1);
subplot(3,2,2);
stem(imhist(imadjust(I,[],[],0.2),64));
title('Gamma=5');
ቤተ መጻሕፍቲ ባይዱfigure(1);%绘图
subplot(3,2,5);
imshow(I); % gamma=1,默认整个范围的数值都转换
title('Gamma=1,未调整');
figure(1);
subplot(3,2,6);
stem(imhist(I,64));
title('Gamma=1,未调整');
% imshow(imadjust(I,[],[],2)); % gamma=2,默认整个范围的数值都转换
% title('Gamma=2');
%
% figure(1);%绘图
% subplot(2,4,4);
% imshow(imadjust(I,[],[],4)); % gamma=4,默认整个范围的数值都转换
% title('Gamma=0.4');
%
% figure(1);%绘图
% subplot(2,4,2);
% imshow(imadjust(I,[],[],0.8)); % gamma=0.8,默认整个范围的数值都转换
% title('Gamma=0.8');
%
% figure(1);%绘图
% subplot(2,4,3);
% title('Gamma=4');
%
% figure(1);%绘图
% subplot(2,4,5);
% imshow(imadjust(I,[0,0.5],[],0.4)); % gamma=0.4,默认整个范围的数值都转换
% title('Gamma=0.4,in=[0,0.5]');
%
% figure(1);%绘图
其中,x、y的取值范围为[0,1]。esp为补偿系数,r则为Gamma系数。
Gamma变换是根据r的不同取值选择性的增强低灰度区域的对比度
或者高灰度区域的对比度。
esp值如何调整?
I=imread('nir.bmp');
figure;
imshow(imadjust(I,[],[],0.5));%gamma=0.5
相关文档
最新文档