转自 Gamma校正及其OpenCV实现,略有改动。

一、什么是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. void MyGammaCorrection(Mat& src, Mat& dst, float fGamma)
  2. {
  3. CV_Assert(src.data);
  4. // accept only uchar type matrices,when use CV_8UC1 or CV_8UC3,src.depth()==0
  5. //sizeof(uchar)==1
  6. CV_Assert(src.depth() != sizeof(uchar));
  7. // build look up table
  8. unsigned char lut[256];
  9. for( int i = 0; i < 256; i++ )
  10. {
  11. lut[i] = saturate_cast<uchar>(pow((float)(i/255.0), fGamma) * 255.0f);
  12. }
  13. dst = src.clone();
  14. const int channels = dst.channels();
  15. switch(channels)
  16. {
  17. case 1:
  18. {
  19. MatIterator_<uchar> it, end;
  20. for( it = dst.begin<uchar>(), end = dst.end<uchar>(); it != end; it++ )
  21. //*it = pow((float)(((*it))/255.0), fGamma) * 255.0;
  22. *it = lut[(*it)];
  23. break;
  24. }
  25. case 3:
  26. {
  27. MatIterator_<Vec3b> it, end;
  28. for( it = dst.begin<Vec3b>(), end = dst.end<Vec3b>(); it != end; it++ )
  29. {
  30. //(*it)[0] = pow((float)(((*it)[0])/255.0), fGamma) * 255.0;
  31. //(*it)[1] = pow((float)(((*it)[1])/255.0), fGamma) * 255.0;
  32. //(*it)[2] = pow((float)(((*it)[2])/255.0), fGamma) * 255.0;
  33. (*it)[0] = lut[((*it)[0])];
  34. (*it)[1] = lut[((*it)[1])];
  35. (*it)[2] = lut[((*it)[2])];
  36. }
  37. break;
  38. }
  39. }
  40. }

伽马(Gamma)校正的原理及opencv实现相关推荐

  1. 关于视频播放的伽马——gamma校正

    关于视频播放中的gamma 我们在做视频播放器过程中经常会看到有的播放器有gamma调整,通过gamma调整也能明显觉察到视频图像颜色亮度等变化,但gamma对普通用户太专业难懂,即时对开发人员来说g ...

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

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 Gamma校正的原理很简单,就一个很简单的表达式 ...

  3. python怎么用gamma函数_如何通俗的理解伽马(gamma)函数

    如何通俗的理解伽马(gamma)函数 - 直觉,求导和示例 我为什么要在乎garmma分布? 使用伽马函数定义了许多概率分布,例如伽马分布,Beta分布,狄利克雷分布,卡方分布和学生t分布等. 对于数 ...

  4. gamma分布_如何通俗的理解伽马(gamma)函数

    如何通俗的理解伽马(gamma)函数 - 直觉,求导和示例 我为什么要在乎garmma分布? 使用伽马函数定义了许多概率分布,例如伽马分布,Beta分布,狄利克雷分布,卡方分布和学生t分布等. 对于数 ...

  5. 【Unity3D】sRGB伽马(gamma)空间和sRGB Frame Buffer线性空间的简单介绍

    2022年7月20日更新 线性空间是指物理意义上的真实颜色值,伽马空间是人眼会自动将真实世界进行一个伽马校正运算,即对数据进行1/2.2次幂,提高较暗区域细节,减弱亮区域细节.人眼处理这种细节变化是用 ...

  6. gamma校正 matlab,Gamma校正 ——图像灰度变化 OpenCV (十)

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

  7. 【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)

    [OpenCV 例程200篇]44. 图像的灰度变换(伽马变换) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 线性 ...

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

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

  9. python图片矫正后对比_python库skimage 对图像进行gamma校正和log校正

    Gamma校正 Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 这个指数即为Gamma. Gamma校正的原理很简单,就一个很简单的表达式,如下图所示: ...

最新文章

  1. 计算机程序c复杂,《计算机程序设计(C语言)》见面课答案
  2. arduino串口绘图_一起打造一款光驱迷你绘图仪
  3. Eclipse 中隐藏的 5 个非常有用的功能
  4. ios 自动缩小字体_如何避免iOS自动调整字体大小?
  5. linux下反汇编命令,Linux命令学习手册-objdump命令
  6. div设置背景半透明
  7. sshpass-Linux命令之非交互SSH密码验证
  8. 将html导出到excel或word
  9. 计算机里怎么添加桌面,电脑上怎么把我的电脑添加到桌面上
  10. JavaBean的前世晋升程序员如何提升领导力
  11. 适合女士开的车15万左右买哪个?凌渡怎么样?
  12. Zabbix 地址Ping检测告警
  13. 线性代数-MIT 18.06-7(a)
  14. Dixon 检验法判断正态分布离群值——原理和 Python 实现
  15. mysql slow query_Mysql 开启 Slow 慢查询
  16. 三种类型SD卡的对比
  17. 第十四周DP算法总结
  18. html字体变大自动换行,css 实现文字自动换行切同行元素高度自适应
  19. creator 3d 穿模解决方案
  20. win10必须禁用的服务_WIN10关闭自动更新的两种方法

热门文章

  1. 接口测试平台代码实现138: 关于大用例登陆态干扰bug
  2. Spring框架02(IOC和DI)
  3. 燕十八公益讲堂-mysql笔记_燕十八公益讲堂-mysql笔记
  4. mysql存储animoji_iPhoneXS在微信里发送Animoji表情操作教程
  5. Java习题练习:和尚挑水
  6. 今天特意分享一个程序猿的微信群,聊天专用
  7. 鸿蒙系统应用开发初体验(一)
  8. 小梅哥AC620学习记录—UART_EEPROM_part2
  9. 汤因比的《历史研究》所感之一
  10. 刘慈欣 计算机工程师,刘慈欣:《三体》之外,我只是个普通的工程师