图像处理gamma修正(伽马γ校正)的原理和实现算法

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

本文详细解析了Gamma校正的背景、定义及原理,解释了为何在电视和图形监视器中需要进行Gamma补偿,以及如何通过非线性色调编辑提高图像对比度。并介绍了快速算法实现Gamma校正,避免大量浮点数运算。

☞ ░ 前往老猿Python博文目录 ░

本文转自博客园:淇淇宝贝的文章《图像处理之gamma校正》,原文链接:https://www.cnblogs.com/qiqibaby/p/5325193.html

一、gamma校正背景

在电视和图形监视器中,显像管发生的电子束及其生成的图像亮度并不是随显像管的输入电压线性变化,电子流与输入电压相比是按照指数曲线变化的,输入电压的指数要大于电子束的指数。这说明暗区的信号要比实际情况更暗,而亮区要比实际情况更高。所以,要重现摄像机拍摄的画面,电视和监视器必须进行伽玛补偿。这种伽玛校正也可以由摄像机完成。我们对整个电视系统进行伽玛补偿的目的,是使摄像机根据入射光亮度与显像管的亮度对称而产生的输出信号,所以应对图像信号引入一个相反的非线性失真,即与电视系统的伽玛曲线对应的摄像机伽玛曲线,它的值应为1/γ,我们称为摄像机的伽玛值。电视系统的伽玛值约为2.2,所以电视系统的摄像机非线性补偿伽玛值为0.45。彩色显像管的伽玛值为2.8,它的图像信号校正指数应为1/2.8=0.35,但由于显像管内外杂散光的影响,重现图像的对比度和饱和度均有所降低,所以彩色摄像机的伽玛值仍多采用0.45。在实际应用中,我们可以根据实际情况在一定范围内调整伽玛值,以获得最佳效果。
 在这里插入图片描述

二、gamma校正定义

(Gamma Correction,伽玛校正):所谓伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。计算机绘图领域惯以此屏幕输出电压与对应亮度的转换关系曲线,称为伽玛曲线(Gamma Curve)。

以传统CRT(Cathode Ray Tube)屏幕的特性而言,该曲线通常是一个乘幂函数,Y=(X+e)γ,其中,Y为亮度、X为输出电压、e为补偿系数、乘幂值(γ)为伽玛值,改变乘幂 值(γ)的大小,就能改变CRT的伽玛曲线。典型的Gamma值是0.45,它会使CRT的影像亮度呈现线性。使用CRT的电视机等显示器屏幕,由于对于 输入信号的发光灰度,不是线性函数,而是指数函数,因此必需校正。

在这里插入图片描述

三、 gamma校正原理

假设图像中有一个像素,值是 200 ,那么对这个像素进行校正必须执行如下步骤:

1. 归一化 :将像素值转换为 0 ~ 1 之间的实数。 算法如下 : ( i + 0. 5)/256 这里包含 1 个除法和 1 个加法操作。对于像素 A 而言 , 其对应的归一化值为 0. 783203 。

2. 预补偿 :根据公式 , 求出像素归一化后的 数据以 1 /gamma 为指数的对应值。这一步包含一个 求指数运算。若 gamma 值为 2. 2 , 则 1 /gamma 为 0. 454545 , 对归一化后的 A 值进行预补偿的结果就 是 0. 783203 ^0. 454545 = 0. 894872 。

3. 反归一化 :将经过预补偿的实数值反变换为 0 ~ 255 之间的整数值。具体算法为 : f*256 - 0. 5 此步骤包含一个乘法和一个减法运算。续前 例 , 将 A 的预补偿结果 0. 894872 代入上式 , 得到 A 预补偿后对应的像素值为 228 , 这个 228 就是最后送 入显示器的数据。

如上所述如果直接按公式编程的话,假设图像的分辨率为 800*600 ,对它进行 gamma 校正,需要执行 48 万个浮点数乘法、除法和指数运算。效率太低,根本达不到实时的效果。

针对上述情况,提出了一种快速算法,如果能够确知图像的像素取值范围 , 例如 , 0 ~ 255 之间的整数 , 则图像中任何一个像素值只能 是 0 到 255 这 256 个整数中的某一个 ; 在 gamma 值 已知的情况下 ,0 ~ 255 之间的任一整数 , 经过“归一 化、预补偿、反归一化”操作后 , 所对应的结果是唯一的 , 并且也落在 0 ~ 255 这个范围内。

如前例 , 已知 gamma 值为 2. 2 , 像素 A 的原始值是 200 , 就可求得 经 gamma 校正后 A 对应的预补偿值为 228 。基于上述原理 , 我们只需为 0 ~ 255 之间的每个整数执行一次预补偿操作 , 将其对应的预补偿值存入一个预先建立的 gamma 校正查找表 (LUT:Look Up Table) , 就可以使用该表对任何像素值在 0 ~ 255 之 间的图像进行 gamma 校正。

关于moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

关于收费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录 ░
伽马校正(Gamma Correction)与sRGB 介绍伽马校正的由来, 作用以及实践 阅读详情

相关推荐

数字图像处理(21):伽马校正

伽马校正

2301_80417284的博客 2519

伽马矫正(Gamma correction)

伽马矫正(Gammacorrection) 在学习HOG描述子时,对图像进行预处理中使用了伽马矫正这个方法,这里对伽马矫正进行简要的介绍。 伽马矫正也称幂律变换,一般用于平滑的扩展暗调的细节。进行伽马矫正的原因是因为人类的眼睛在感知光线时,眼睛对亮度的感知遵循近似的幂函数(如下图所示)而不是线性函数。 计算机系统中,由于显示器或显卡的原因会出现实际输出图像有亮度偏差。在第一次进入一些游戏时,想必大家都经历过调节屏幕亮度参数直至能看清底部图片的操作吧,这也伽马矫正的一种。 从图像中可以看出,当输.

dx199771的博客 1万+

色彩校正矩阵(CCM)与伽马校正(Gamma)在图像处理中的协同优化策略

本文深入探讨了色彩校正矩阵(CCM)与伽马校正(Gamma)在图像处理中的协同优化策略。通过解析CCM的3x3矩阵原理和伽马校正的非线性变换,揭示了二者在提升色彩准确性和视觉体验中的关键作用。实战案例展示了在设备差异和光照条件下如何动态调整参数,实现精准的色彩还原与亮度优化。

butter的博客 1159

Gamma校正

1.介绍 1.1伽马校正是什么 伽马校正,是用来针对影片或是影像系统里对于光线的辉度(luminance)或是三色刺激值(tristimulus values)所进行非线性的运算或反运算。1 最简单的例子里伽马校正是由幂定律公式Vout=AVinγV_{out}=AV_{in}^\gammaVout​=AVinγ​所定义。其中通常情况下A=1,Vout、Vin∈[0,1]V_{out}、V_{in}\in[0,1]Vout​、Vin​∈[0,1] 伽马值γ < 1的情况有时被称作编码伽马值, 也叫伽马

机器人视觉感知 2820

图像处理插件与算法实现详解

本文详细介绍了多个图像处理相关任务的实现方法,包括使用ImageJ开发插件实现伽马校正、边界扩展、高斯滤波、中值滤波、边缘检测(如Sobel、Kirsch)、霍夫变换、RANSAC圆检测等。同时探讨了线性滤波器的特性、冲激响应验证、RGB图像处理及角点检测优化等内容,涵盖从算法原理到代码实现的全过程。

zeta9的博客 1204

图像增强算法小结(直方图、Gamma变换、CLAHE 和 Retinex)

这几天一直在做一个图像处理的任务,简单来说就是对一个过曝的图片进行处理,使得被亮光“遮盖”的一些细节信息显现出来。 注:我处理的是医学图像,所以某些细节问题可能不太一样(比如对RGB不考虑,全部转为灰度图) 环境:win10、python 3.6.6、Jupyter Notebook、opencv 3.4.2 相关代码已上传至个人github 一、直方图均衡化(Histogram Equaliza...

weixin_34137799的博客 4470

python 数据图像修正_图像处理gamma修正(伽马γ校正)的原理和实现算法

本文转自博客园:淇淇宝贝的文章《图像处理之gamma校正》,原文链接:https://www.cnblogs.com/qiqibaby/p/5325193.html一、gamma校正背景在电视和图形监视器中,显像管发生的电子束及其生成的图像亮度并不是随显像管的输入电压线性变化,电子流与输入电压相比是按照指数曲线变化的,输入电压的指数要大于电子束的指数。这说明暗区的信号要比实际情况更暗,而亮区要比实...

weixin_39981681的博客 1006

图像处理编程实践与算法实现

本文涵盖多个图像处理相关任务的编程实践,包括直方图均衡化、伽马校正、线性滤波器、边缘检测、角点检测、霍夫变换、RANSAC方法、图像旋转等核心算法实现。同时涉及ImageJ插件开发、图像噪声影响分析、参数自适应调整等内容,适用于图像增强、特征提取与图像分析应用。

terraform7cloud的博客 737

【opencv】图像处理之伽马变换

■ 概述       伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:       伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:       γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越

Roaddd的博客 2万+

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3385

别再乱拖了!Godot 4.x 场景编辑器的7个隐藏操作技巧(附快捷键清单)

本文揭示了Godot 4.x场景编辑器的7个隐藏操作技巧,包括智能对齐、轴心点应用、多节点批量操作等,帮助开发者提升游戏开发效率。特别介绍了坐标系切换和自定义快捷键等实用功能,适用于处理复杂场景和团队协作。

weixin_29534421的博客 361

FPGA实现Gamma校正的系统性指南

方法资源消耗速度精度灵活性适用场景查找表法中等(存储资源)极快(1周期)高(由LUT决定)低(固定γ)标准视频处理(如HDMI、摄像头处理),γ值固定分段线性近似中低(小LUT+乘加器)快(2-3周期)中高(可调)高(γ可动态变)需要动态调节γ的应用,或高位深(10/12-bit)图像计算单元法高(CORDIC/多个LUT)慢(数十周期)最高最高科学计算、高动态范围成像、需要极高精度和动态γ简化整数法极低快低低资源极度受限,对画质要求不高的场合流水线设计。

s0907136的博客 908

手把手教你用ROS2 Humble给PX4无人机写个“画圆”程序:从C++代码到Gazebo仿真全流程

本文详细介绍了如何使用ROS2 Humble和PX4飞控实现无人机圆形轨迹控制,涵盖从环境配置、Gazebo仿真到C++代码实现的完整流程。通过实战教程,读者将掌握轨迹跟踪仿真的核心技术,包括ROS2与PX4的通信接口、圆形轨迹算法设计及Gazebo仿真调试技巧。

weixin_29056781的博客 257

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

幂律变换也称伽马变换,可以提升暗部细节,对发白(曝光过度)或过暗(曝光不足)的图片进行矫正。 伽马变换通过非线性变换对人类视觉特性进行补偿,最大化地利用有效的灰度级带宽。很多拍摄、显示、打印设备的亮度曲线都符合幂律曲线,因此伽马变换广泛应用于各种设备显示效果的调校,称为伽马校正。...

youcans的博客 7825

基于CODESYS与EtherCAT的步进电机单轴控制实践

本文详细介绍了基于CODESYS平台与EtherCAT总线技术实现步进电机单轴控制的完整实践流程。从硬件选型、软件工程创建、EtherCAT主从站配置,到运动控制功能块编程与在线调试,手把手指导读者完成从零到一的搭建,并提供了常见问题的排坑指南,帮助自动化开发者快速掌握这一高效、灵活且成本可控的工业运动控制解决方案。

hh234的博客 491

halcon C++编程 第4讲 HObject/HImage Mat相互转换(tcy)

网上有很多相互转换程序,但并不知那个正确,本文对相互转换后的结果和原对象比较是否相同判断转换是否正确。经测试ok.本文包括转换代码及测试是否相同。 1.转换程序: /************************************ HObject转为Mat:time:2021/3/16 V1.0 *************************************/ cv::Mat HalconClass::HObjectToMat(const HalconCpp::HObject&..

tcy-阿春 4933

gamma- 伽马的正名

本文为gamma正名,指出其在图像编码中并非为补偿CRT而设,而是实现感知均匀的码值分配。核心观点:1)gamma编码本质是优化有限比特下的视觉表现;2)所谓γ值变化大实为黑电平未调准所致,真实指数仅2.35–2.55;3)编码端使用≈0.5而非理论0.4,是主动注入的渲染意图。论文驳斥了“gamma是缺陷”等十余项误解,强调正确理解亮度、明度与luma的区别,并以“码值100问题”证明线性编码需14位以上,而gamma编码8位即可满足感知需求。

ISP行业的忠实粉丝 466

STM32CubeMX配置FSMC驱动外部SRAM全流程详解

FSMC(灵活静态存储控制器)是STM32实现高速并行外部存储扩展的核心外设,其本质是将片外SRAM地址空间映射为CPU可直接读写的内存区域。原理上依赖于精确的时序寄存器配置(如BTRx)、GPIO复用功能启用及AHB3总线时钟同步机制,技术价值在于免DMA搬运的零拷贝访问能力与确定性低延迟。典型应用场景包括工业HMI缓存、医疗设备实时数据采集、嵌入式图形加速等对带宽和确定性要求严苛的系统。本文围绕STM32F407ZG平台,结合STM32CubeMX工程化配置、硬件信号完整性设计与HAL库底层映射逻辑,系

weixin_34718952的博客 232

Gamma Correction(伽马校正)

Gamma correction, gamma nonlinearity, gamma encoding, or often simply gamma, is the name of a nonlinear operation used to code and decode luminance or tristimulus values in video or still image system

Kelvin_Yan的专栏 7716

C++ Qt6 QtQuick/QML入门进阶与项目实战视频教程

C++ Qt这些年在PC客户端、嵌入式、汽车座舱仪表等领域应用很广泛,例如剪映专业版、微信4.0、亿图脑图、Steam、美图秀秀、腾讯会议、钉钉(部分模块)等都是使用C++ QWidget/QML开发。特别是QML这种声明式UI开发更加快捷,QML的界面开发效率相对于QWidget更快速,界面效果更好,QtQuick/QML在Qt6版本也逐渐完善了,使用QML进行客户端开发是个不错的选择。

琅嬛福地 4487

手把手教你学Simulink--基础电机控制场景实例:基于Simulink的无刷直流电机六步换相仿真

摘要:本文详细介绍了基于Simulink的无刷直流电机(BLDC)六步换相仿真方法。文章首先阐述了BLDC六步换相控制的原理,包括霍尔传感器定位、六步换相逻辑和方波电流驱动三大支柱。然后通过电动工具(角磨机)应用场景,展示了如何在Simulink中搭建完整的六步换相系统:从主电路构建、霍尔信号生成、Stateflow换相逻辑实现到开环电压控制。仿真结果显示该系统具有低成本优势(仅需霍尔传感器),但存在±20%转矩脉动。文章还提供了核心代码实现,包括霍尔信号生成、六步换相状态机和转矩分析脚本,并对比了六步换相

MHD0815的博客 149

伽马校正-

伽马校正 问题描述:读取图像,然后对图像进行伽玛校正。 伽马校正 这里是一篇写伽马校正比较好的文章,我觉得可以作为背景知识补充。 伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大 RGB 的值来排除显示器的影响,达到对图像修正的目的。 由于下式引起非线性变换,在该式中,xxx被归一化,限定在[0,1][0,1][0,1]范围内。ccc是常数,ggg为伽马变量(通常取2.22.22.2): x′=c Iing x

hahahanba的博客 1398

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Emgu CV教程】7.5、图像锐化(增强)之伽马变换

Emgu CV教程,图像锐化(增强)、伽马增强

活宝的博客 1476

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

图像处理——gamma矫正

图像处理——gamma矫正

cinly1994的博客 1991

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python图像增强算法_图像增强算法小结(直方图、Gamma变换、CLAHE 和 Retinex)

这几天一直在做一个图像处理的任务,简单来说就是对一个过曝的图片进行处理,使得被亮光“遮盖”的一些细节信息显现出来。注:我处理的是医学图像,所以某些细节问题可能不太一样(比如对RGB不考虑,全部转为灰度图)环境:win10、python 3.6.6、Jupyter Notebook、opencv 3.4.2相关代码已上传至个人github一、直方图均衡化(Histogram Equalization...

weixin_39984403的博客 2509

《图像处理基础知识》专栏文章目录

☞ ░ 前往老猿Python博客 https://blog.youkuaiyun.com/LaoYuanPython ░ 一、专栏简介 《图像处理基础知识》专栏介绍老猿在图像处理知识学习中的一些基础知识总结和感悟,但不包括OpenCV-Python相关知识,OpenCV-Python相关知识请见《OpenCV-Python图形图像处理》,供与老猿同样零基础图像知识的同好参考。 二、文章目录 图像灰度与灰阶的纠结:gray level/scale译文释义 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道

老猿Python 2260
上一篇: 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Release释放操作
下一篇: moviepy音视频剪辑:输出文件前预览剪辑和视频帧的preview和imdisplay方法
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值