ISP--Gamma Correction

文章目录

  • 现象
  • Gamma产生的原因
    • CRT属性导致
    • 人眼的亮度特性
  • gamma校正
    • LUT法
    • 线性插值法
    • 模拟gamma法

现象

在这里插入图片描述
从上往下看左侧黑色块黑得越来越严重,对比度也在逐渐加深。此时灰阶的高亮区获得的数据位变少,暗区获得的数据位变多,暗区细节会更多。但是需要注意的是这幅图是一个反伽马曲线的特性,和ISP中的gamma表示是反的。

Gamma产生的原因

CRT属性导致

在液晶屏幕诞生前,CRT显示器是唯一的一种显示器。老式电视。
在这里插入图片描述
这种显示器的工作方式如下图所示:
在这里插入图片描述
屏幕后面是一个阴极射线管,工作原理大致就是后面的电子前发射电子,经加速电场和偏移电场的作用打到屏幕上指定的位置,然后屏幕的特殊材质会发光产生画面。然后屏幕显示的亮度就和电子的数量有关,而这个又和电子枪的电压有关,所以屏幕亮度就和电子枪有一个函数关系:
I s r e e n = f ( V ) I sreen =f(V) Isreen=f(V)
但是需要注意的是这个函数关系不是线性的,也就是说当电子枪的电压升高为原来的两倍,但是屏幕亮度并不能变为原来的两倍,后面经过实验总结发现CRT的这种非线性关系满足对数关系:
在这里插入图片描述
正式因为显示时会把亮度压低,所以为了还原原来的线性特征,需要在显示之前进行一个矫正,使其恢复为线性,于是就有的gamma矫正,这也是最早对gamma的理解。到现在液晶显示可不满足这种特性,但是为了兼容以前的视频格式,也会认为在显示的时候添加这个一个反伽马矫正。通过 Gamma 编码的数据(encoding gamma)与 CRT 显示器的 Gamma 特征(display gamma),这两组编码恰好乘积(system gamma)为 1。
在这里插入图片描述
在这里插入图片描述

参考以下链接:
gamma矫正原理

其中:此人眼对亮度的变化的感知能力一开始我理解为是对亮度的响应但看了up主的HVS篇讲解,此应该是对亮度的灵敏度(会在hvs篇解释)
在这里插入图片描述

人眼的亮度特性

对于gamma还有一种说法就是,人眼的亮度响应曲线不是线性的而是如下图的关系:
在这里插入图片描述
视觉感受的中灰色是白色反射率的20%左右。(注:白色为低动态颜色1.0)
再换成更不精确但更好用的话就是:自然界的0.2,在心目中的地位是0.5。

所以为了更好符合人眼的特性,就需要对暗区进行加强以提高画面的动态范围和暗区细节,更好的响应人眼对暗部更敏感的特性。(目的是为了更好地匹配人眼对光线强度的非线性响应特性!!)

参考:
色彩校正中的 gamma 值是什么?–知乎

该回答写的很清楚,其中维基百科的解释更简单易理解:引入gamma压缩是为了更好地利用比特位,因为人眼对暗比高亮更敏感,所以用gamma<1的指数函数变换使得敏感部分获得更多的数据位。 而显示器的gamma值完全是为了解压缩,只要能够使得整个系统的输入输出呈线性就好了。 人眼特性+充分利用存储空间的考虑->gamma编码 ; gamma编码+全系统输入为1的考虑->显示器的gamma值取什么
更直白的话就是:因为硬盘太贵,网线太细,所以地球人目前主流使用8位每通道的sRGB色彩描述体系,它灰阶有限,中灰的地位必须在所有灰阶的中间,记录值为128,而不能是其物理值0.218,把物理量0.218换算成0.5灰阶的过程,就是编码端的Gamma校正,Gamma值为1/2.2=0.454。屏幕读取到128显示成21.8%的亮度的过程,就是解码端的Gamma校正,Gamma值为2.2。整个系统Gamma为1。

gamma校正

以下皆转载up主博客。

LUT法

在这里插入图片描述
如上图的论文中提到一种LUT法的实现方式。就是提前把每个像素值经过gamma矫正后对应的值求出来,然后把这些数值直接存储在一个数组中,到矫正的时候就根据输入的值就能直接通过数组下标就能找到对应的矫正后的值,这种方式最大的优点就是快,几乎不消耗硬件资源,因为几乎不用做任何计算的处理,但是这种方式的弊端在于需要大量的内存来存储这个表,但随着技术的发展内存对于硬件也不是什么限制了,一个手机动辄就8G的内存了,可以通过加DDR来提高内存,所以现在很多方案在用这种查表得方式做gamma矫正。
在这里插入图片描述
就是在一个头文件中定义这么一个数组,完全对应每一个输入值。

clc;clear; close all;
data = csvread('data/Gamma_Data_DEC_20210804103309.csv');
plot(data);
xlim([0, 1024]);
ylim([0, 4098]);
hold on;
plot([0, 1024], [0, 4098], 'r');

在这里插入图片描述

线性插值法

在这里插入图片描述
线性插值法也很好理解,就是在gamma曲线上提取一些采样点,然后把采样点的输入输出作为xy存储起来,然后矫正的时候如果在采样点上就接直接输入矫正值,如果不在,那么肯定在某两个采样点之间,那么就可以就可以通过这两个采样点的线性方程求解出该点的校正值。但是这种方式会有一定的误差,因为线性方程并不能完全拟合gamma曲线。
在这里插入图片描述
如上,通过17个采样点来拟合曲线。

clc;clear;close all;
data = textread('data\gamma.txt', '%s');
xStr = char(data(1));
yStr = char(data(2));
xC = strsplit(xStr, ',');
yC = strsplit(yStr, ',');
x = hex0x2Dec(xC);
y = hex0x2Dec(yC);
plot(x, y);
hold on;
plot([0 255], [0 1023], 'r')
xlim([0, 256]);
ylim([0, 1024]);

在这里插入图片描述
这调曲线就是拟合出来的效果。

模拟gamma法

还有一种方式就是通过模拟的方式来做gamma矫正,但是这种方式不输入ISP PIPELINE中的算法,所以只是简单提一下。
在这里插入图片描述
这种方法的大概思路就是AD转换的时候经过一定的处理使其呈现非线性的特性。如上图定义Vramp和Vsig,当电压达到Vramp时产生一个斜坡信号,同时时钟信号开始工作并计数,然后当电压到达Vsig时latch信号发生一个跳变使得时钟信号停止记数,然后这个电压值就会和这种始终信号有一个非线性特性,后根据这个特性进行gamma矫正。然后这种方式不涉及ISP算法,所以up主并未作重点讲解。

转载来源:https://blog.csdn.net/wtzhu_13/article/details/119533870?spm=1001.2014.3001.5502
https://www.bilibili.com/video/BV1VU4y1n7UC/?spm_id_from=333.1387.homepage.video_card.click&vd_source=917b39787b71f9af867492b65b1fdec3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光谱相机识别瓶子材质的技术原理和应用案例

一、技术原理 ‌光谱特征差异识别‌ 不同材质的塑料&#xff08;如PET、PP、PE等&#xff09;因化学结构差异&#xff0c;在近红外或可见光波段会呈现独特的光谱反射曲线。例如&#xff0c;高光谱相机通过分析数百个窄波段的光谱数据&#xff0c;可生成每种材质的“光谱指纹”…

某快餐店用户市场数据挖掘与可视化

1、必要库的载入 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns2、加载并清洗数据 # 2.1 加载数据 df pd.read_csv(/home/mw/input/survey6263/mcdonalds.csv)# 2.2 数据清洗 # 2.2.1 检查缺失值 print(缺失值情况&#xff1a;) print(df.isn…

MySQL 衍生表(Derived Tables)

在SQL的查询语句select …. from …中&#xff0c;跟在from子句后面的通常是一张拥有定义的实体表&#xff0c;而有的时候我们会用子查询来扮演实体表的角色&#xff0c;这个在from子句中的子查询会返回一个结果集&#xff0c;这个结果集可以像普通的实体表一样查询、连接&…

Electron使用WebAssembly实现CRC-16 MAXIM校验

Electron使用WebAssembly实现CRC-16 MAXIM校验 将C/C语言代码&#xff0c;经由WebAssembly编译为库函数&#xff0c;可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-16 MAXIM格式校验的方式。 CRC-16 MAXIM校验函数WebAssembly源文件 C语言实…

HTB 学习笔记 【中/英】《前端 vs. 后端》P3

&#x1f4cc; 这篇文章讲了什么&#xff1f; 介绍了 前端&#xff08;客户端&#xff09; 和 后端&#xff08;服务器端&#xff09; 的区别。解释了 全栈开发&#xff08;Full Stack Development&#xff09;&#xff0c;即前端后端开发。介绍了 前端和后端常用的技术。讨论…

SpringBoot集成ElasticSearch实现支持错别字检索和关键字高亮的模糊查询

文章目录 一、背景二、环境准备1.es8集群2.Kibana3.Canal 三、集成到SpringBoot1.新增依赖2.es配置类3.建立索引4.修改查询方法 四、修改前端 一、背景 我们在开发项目的搜索引擎的时候&#xff0c;如果当数据量庞大、同时又需要支持全文检索模糊查询&#xff0c;甚至你想做到…

麒麟系统使用-安装 SQL Developer

文章目录 前言一、基础准备1.基本环境2.相关包下载 二、进行相关配置1.配置JAVA2.配置SQL Developer 总结 前言 作为我国自主研发的操作系统&#xff0c;麒麟系统在使用时需要考虑安装相应的app。尽管麒麟系统是基于linux开发&#xff0c;可由于版本的一些差异&#xff0c;麒麟…

PrimeTime:timing_report_unconstrained_paths变量

相关阅读 PrimeTimehttps://blog.csdn.net/weixin_45791458/category_12900271.html?spm1001.2014.3001.5482 PrimeTime自Q-2019.12版本起引入了timing_report_unconstrained_paths变量&#xff08;默认值为false&#xff09;&#xff0c;该变量控制是否在使用report_timing命…

洛谷 P1115 最大子段和(前缀和详解)c++

题目链接&#xff1a;P1115 最大子段和 - 洛谷 1.题目分析 2.算法原理 解法&#xff1a;利用前缀和 思考&#xff1a;如何求出以a[i]为结尾的所有子区间中最大的子段和 假设 i 等于5&#xff0c;以 a[ i ] 为结尾的区间一共是五段&#xff08;黑色线条部分&#xff09;&#…

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains&#xff08;全家桶: IDEA、WebStorm、GoLand、PyCharm&#xff09; 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具&#xff0c;但从 2024.02 版本起&#xff0c;JetBrains 调整了试用政策&#xff0c;新用户不再享有默认的 30 天免费试用…

【数据分析】数据筛选与访问行列元素3

访问元素 .loc属性可以通过传入index的值访问行数据。 .loc属性允许传入两个参数&#xff0c;分别是index的值和columns的值&#xff0c;参数间用“逗号”隔开&#xff0c;这样便可以访问数据中的元素。 1. 访问单个元素 访问单个元素比较简单&#xff0c;只需要通过它的in…

C++ std::list超详细指南:基础实践(手搓list)

目录 一.核心特性 1.双向循环链表结构 2.头文件&#xff1a;#include 3.时间复杂度 4.内存特性 二.构造函数 三.list iterator的使用 1.学习list iterator之前我们要知道iterator的区分 ​编辑 2.begin()end() 3.rbegin()rend() 四.list关键接口 1.empty() 2. size…

【免费】2004-2017年各地级市进出口总额数据

2004-2017年各地级市进出口总额数据 1、时间&#xff1a;2004-2017年 2、来源&#xff1a;城市年鉴 3、指标&#xff1a;进出口贸易总额 4、范围&#xff1a;286个地级市 5、指标说明&#xff1a;进出口总额是指一个国家在特定时期内&#xff08;通常为一年&#xff09;所…

谈谈 undefined 和 null

*** 补充 null 和 ‘’

【第15届蓝桥杯】软件赛CB组省赛

个人主页&#xff1a;Guiat 归属专栏&#xff1a;算法竞赛真题题解 文章目录 A. 握手问题&#xff08;填空题&#xff09;B. 小球反弹&#xff08;填空题&#xff09;C. 好数D. R格式E. 宝石组合F. 数字接龙G. 爬山H. 拔河 正文 总共8道题。 A. 握手问题&#xff08;填空题&…

【计算机视觉】工业表计读数(2)--表计检测

1. 简介 工业表计&#xff08;如压力表、电表、气表等&#xff09;在工控系统、能源管理等领域具有重要应用。然而&#xff0c;传统人工抄表不仅工作量大、效率低&#xff0c;而且容易产生数据误差。近年来&#xff0c;基于深度学习的目标检测方法在工业检测中展现出极大优势&…

提示词工程(Prompt Engineering)

https://www.bilibili.com/video/BV1PX9iYQEry 一、懂原理&#xff0c;要知道 为什么有的指令有效&#xff0c;有的指令无效为什么同样的指令有时有效&#xff0c;又是无效怎么提升指令有效的概率 大模型应用架构师想什么&#xff1f; 怎样能更准确&#xff1f;答&#xff1…

从Instagram到画廊:社交平台如何改变艺术家的展示方式

从Instagram到画廊&#xff1a;社交平台如何改变艺术家的展示方式 在数字时代&#xff0c;艺术家的展示方式正在经历一场革命。社交平台&#xff0c;尤其是Instagram&#xff0c;已经成为艺术家展示作品、与观众互动和建立品牌的重要渠道。本文将探讨社交平台如何改变艺术家的…

Typora 使用教程(标题,段落,字体,列表,区块,代码,脚注,插入图片,表格,目录)

标题 一个#是一级标题, 2个#是二级标题, 以此类推, 最多可达六级标题 示例 输入#号和标题后回车即可 注意: #和标题内容之间需要存在空格(一个或多个均可), 没有空格就会变成普通文字 标题快捷键 Ctrl数字 1-6 可以快速调成对应级别的标题 (选中文本/把光标放在标题上再按…

关于deepseek R1模型分布式推理效率分析

1、引言 DeepSeek R1 采用了混合专家&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;架构&#xff0c;包含多个专家子网络&#xff0c;并通过一个门控机制动态地激活最相关的专家来处理特定的任务 。DeepSeek R1 总共有 6710 亿个参数&#xff0c;但在每个前向传播…