Gamma校正及其OpenCV实现

浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整) 阅读详情

转载:http://blog.youkuaiyun.com/lichengyu/article/details/8457425

参考:[1]http://www.cambridgeincolour.com/tutorials/gamma-correction.htm

[2]http://en.wikipedia.org/wiki/Gamma_correction

 

一、什么是Gamma校正?

Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:

[2]

这个指数即为Gamma.

经过Gamma校正后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。

                                                                                图1 Gamma校正.

 

二、为什么进行Gamma校正?

1. 人眼对外界光源的感光值与输入光强不是呈线性关系的,而是呈指数型关系的。在低照度下,人眼更容易分辨出亮度的变化,随着照度的增加,人眼不易分辨出亮度的变化。而摄像机感光与输入光强呈线性关系。如图2所示:

图2 人眼和摄像机的感光与实际输入光强的关系[1]。

为方便人眼辨识图像,需要将摄像机采集的图像进行gamma校正。

 

2. 为能更有效的保存图像亮度信息,需进行Gamma校正。

未经gamma校正和经过gamma校正保存图像信息如图3所示:

图3 未经gamma校正和经过gamma校正保存图像信息.

可以观察到,未经gamma校正的情况下,低灰度时,有较大范围的灰度值被保存成同一个值,造成信息丢失;同时高灰度值时,很多比较接近的灰度值却被保存成不同的值,造成空间浪费。经过gamma校正后,改善了存储的有效性和效率。

 

三、利用OpenCV实现的Gamma校正

[cpp]  view plain copy
  1. Mat& MyGammaCorrection(Mat& I, float fGamma)  
  2. {  
  3.     CV_Assert(I.data);  
  4.   
  5.     // accept only char type matrices  
  6.     CV_Assert(I.depth() != sizeof(uchar));  
  7.   
  8.     // build look up table  
  9.     unsigned char lut[256];  
  10.     for( int i = 0; i < 256; i++ )  
  11.     {  
  12.         lut[i] = pow((float)(i/255.0), fGamma) * 255.0;  
  13.     }  
  14.   
  15.   
  16.     const int channels = I.channels();  
  17.     switch(channels)  
  18.     {  
  19.         case 1:  
  20.             {  
  21.   
  22.                 MatIterator_<uchar> it, end;  
  23.                 for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; it++ )  
  24.                     //*it = pow((float)(((*it))/255.0), fGamma) * 255.0;  
  25.                     *it = lut[(*it)];  
  26.   
  27.                 break;  
  28.             }  
  29.         case 3:   
  30.             {  
  31.   
  32.                 MatIterator_<Vec3b> it, end;  
  33.                 for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; it++ )  
  34.                 {  
  35.                     //(*it)[0] = pow((float)(((*it)[0])/255.0), fGamma) * 255.0;  
  36.                     //(*it)[1] = pow((float)(((*it)[1])/255.0), fGamma) * 255.0;  
  37.                     //(*it)[2] = pow((float)(((*it)[2])/255.0), fGamma) * 255.0;  
  38.                     (*it)[0] = lut[((*it)[0])];  
  39.                     (*it)[1] = lut[((*it)[1])];  
  40.                     (*it)[2] = lut[((*it)[2])];  
  41.                 }  
  42.   
  43.                 break;  
  44.   
  45.             }  
  46.     }  
  47.   
  48.     return I;  
  49.       
  50. }  


四、实现结果

第一幅图是原图,第二幅图是用gamma=0.45做的校正,第三幅图是用gamma=2.2进行校正。可以观察到,第二幅图的整体亮度提高,同时低灰度时的对比度提高。

OpenCV 伽马校正函数gammaCorrection() 给定一个输入的 BGR 或灰度图像以及一个常数 gamma,对图像在 [0, 255] 区间上应用幂律变换(即伽马校正),并返回结果图像。 阅读详情

相关推荐

0020-在OpenCV环境下对图像做Gamma校正

什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系。 上面中的指数γ即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如下图所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像...

清溪算法 3697

图像Gamma(伽玛)校正的原理及OpenCV代码实现

图像Gamma(伽玛)校正的原理及OpenCV代码实现

昊虹AI笔记 2万+

基于C++的OpenCV图像处理之Gamma校正实战

在当今的数字世界中,图像处理已成为一个不可或缺的技术领域,尤其在计算机视觉和机器学习的背景下。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了一套广泛的图像处理功能。对于开发人员和研究人员来说,它是一个宝贵的工具,可以用于开发复杂的应用程序,如面部识别、图像分割、手势识别和深度学习。

weixin_35706067的博客 890

opencv之gamma校正

幂律变换也属于非线性变换,幂律变换也称伽马变换或指数变换,是另一种常用的灰度非线性变换,主要用于图像的校正,对漂白的图片或者过黑的图片进行修正,也就是对灰度过高或者灰度过低的图片进行修正,增强对比度。其中c和γ为正常数,当γ >1时,低灰度区间压缩,高灰度区间拉伸;当γ <1时,低灰度区间拉伸,高灰度区间压缩,当γ =1时,恒等变换。

lrzss的博客 978

安装Anaconda和Labelme的教程

1 登录Anaconda官网,选择Download https://www.anaconda.com/distribution/ 2 选择你想下载的Python版本,选择你的操作系统和位数,然后点击Download按钮就开始下载了 3 开始安装 下面两个框框都勾选 点击next,等待安装成功 打开Anaconda Navigator 点击红色圈圈的按钮 在cmd中输入 (1)创建虚拟环境 conda create -n labelme python=3.6 (2)激活虚拟环境 conda activa

qq_42178122的博客 3810

倍福TwinCAT3 OPC UA配置全流程:从安装到无密码访问(附常见问题解决)

本文提供了倍福TwinCAT3 OPC UA配置的完整实战指南,重点讲解如何实现无密码游客访问。从软件安装、授权配置、服务器初始化到深度排错,详细解析了配置流程中的关键步骤与常见陷阱,帮助工程师高效打通PLC与上位系统的数据通讯通道。

vulkan6gpu的博客 472

java opencv gamma_Gamma校正及其OpenCV实现

一、什么是Gamma校正?Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:[2]这个指数即为Gamma.经过Gamma校正后的输入和输出图像灰度值关系如图1所看到的:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。能够观察到,当gamma值小于1时(蓝色曲线),图像的总...

weixin_33989935的博客 396

超声波 vs 红外 vs 激光雷达:扫地机器人避障传感器选型指南(实测对比)

本文深入对比了扫地机器人三种主流避障传感器——超声波、红外与激光雷达的核心原理与实测表现。文章基于成本、精度、环境适应性等关键指标,提供了清晰的选型决策树和典型场景配置方案,旨在帮助开发者与爱好者根据项目需求与预算,构建高效可靠的机器人避障系统。

h0i1j2k3l的博客 690

OpenCV 【十】——Gamma校正 ——图像灰度变化

Gamma校正(C++、OpenCV实现) 1.作用: Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 伽玛校正由以下幂律表达式定义: 2.函数原型 void calcHist( const Mat* images, int nimages, const int* channels, InputArra...

格物致知 3733

ArcGIS Pro新手避坑:从OpenStreetMap导入路网到创建拓扑关系全流程

本文详细解析了ArcGIS Pro中从OpenStreetMap导入路网数据到创建拓扑关系的全流程,涵盖OSM数据特性、几何完整性检查、属性强化及拓扑关系构建等关键步骤。特别针对路网数据预处理、网络数据集配置和常见问题提供了实用解决方案,帮助GIS新手高效完成网络分析任务。

weixin_33670786的博客 514

【KingSCADA】如何建立硬件系统及相关变量

本篇主要讲解如何定义设备,如何定义变量。KingSCADA3.8的采集系统是指负责和现场设备进行通讯,并采集现场数据和控制现场数据的模块,称之为采集器,也叫IOServer应用,它是一组独立的应用程序,可以脱离KingSCADA3.8软件,它依赖于KingSCADA3.8驱动产品,通过驱动与IO设备进行通讯。采集系统由通讯链路,设备,数据块组成。链路:链路是指计算机通过什么方式(接口)与设备进行连接,链路类别:串口,以太网,GPRS,Modem,通信卡,采集卡,无链路。

做有价值的事,积累有价值的笔记! 1万+

OpenCV Gamma校正

一、什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: [2] 这个指数即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线...

qq_40041064的博客 497

【优化求解】基于matlab粒子群算法PSO确定最佳开关角对称级联多层逆变器【含Matlab源码 13080期】

粒子群算法PSO确定最佳开关角对称级联多层逆变器 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 97

FPGA实战:在单个QUAD里塞进4个Aurora IP核,我是如何解决QPLL和时钟资源冲突的?

本文详细解析了在Xilinx 7系列FPGA单个QUAD内集成4个Aurora IP核的实战技巧,重点解决QPLL资源冲突和时钟优化问题。通过共享GT_COMMON模块、复用时钟模块、BUFG到BUFHCE转换等策略,实现资源高效利用,为高速通信设计提供可靠解决方案。

weixin_33733810的博客 453

一文吃透!C#上位机CAN总线通信开发:从协议解析到数据可视化

CAN底层协议仅定义了8字节数据的传输规则,实际业务需自定义应用层协议,实现多类型数据的有序传输,这是数据解析的核心。仲裁ID(16进制)数据长度(DLC)数据场格式业务含义解析规则0x0014字节0~3:温度数据温度采集(单位:℃)4字节→float类型(大端/小端需统一,如西门子PLC格式)0x0022字节0~1:转速数据电机转速(单位:r/min)2字节→short类型(Int16)0x0031字节0:bit0~bit7设备状态(8路开关量)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 844

R语言glm函数构建二分类logistic回归模型、epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值

R语言glm函数构建二分类logistic回归模型(family参数为binomial)、使用epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)

statistics+insight+vista+power 1397

基于OpenCV的Gamma校正原理与实现

声明:本文原文出自@零钱币的博文,原文地址为:https://blog.youkuaiyun.com/linqianbi/article/details/78617615。本文全文摘抄以及少量修订仅为本人学习、记录所用,若博主有异议请联系本人删除。 gamma校正原理:   假设图像中有一个像素,值是 200 ,那么对这个像素进行校正必须执行如下步骤:   1. 归一化 :将像素值转换为 0 ~ 1 之间的实数。 算法如下 : ( i + 0. 5)/256 这里包含 1 个除法和 1 个加法操作。对于...

tianwaifeimao的专栏 5695

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

opencv实现图像局部gamma校正

校正前后效果如下 原文链接:http://www.ipol.im/pub/art/2011/gl_lcc/?utm_source=doi 中文翻译参考:https://blog.youkuaiyun.com/lz0499/article/details/81038294 代码实现: ///////////////////////////////局部gamma校正/////////////////...

qq_37143871的博客 1151

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

伽马(Gamma)校正的原理及opencv实现

转自 Gamma校正及其OpenCV实现,略有改动。   一、什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: [2] 这个指数即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色

生命在于折腾! 1万+

在OpenCV环境下对图像做Gamma校正

什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系。 上面中的指数γ即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如下图所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像...

浩瀚之水的专栏 3871

OpenCV实战:Gamma校正优化图像灰度分布的技巧与实现

本文详细介绍了使用OpenCV实现Gamma校正优化图像灰度分布的技巧与方法。通过非线性调整灰度值,Gamma校正能有效改善图像显示效果,特别适用于曝光不足或过曝的照片处理。文章涵盖了数学原理、查找表优化、OpenCV实现及参数选择等核心内容,并提供了Python代码示例和性能优化建议,帮助开发者快速掌握这一实用图像处理技术。

tgb345678的博客 874
上一篇: 高等数学干吗要研究级数问题?
下一篇: 给老外索要仿真代码信件
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值