ISP PIPLINE (七) gamma
what is the gamma?
CCD、CMOS成像方式是通过像点中的“硅”感受光线的强弱而获得画面。而硅感光是物理成像,它真实地反应光线强度的变化,来多少就输出多少,因此它对光线的反应是线性的。但是它的伽马跟人眼的伽马是冲突的。
左图是人眼看到的画面,右图是ccd,cmos感受到的光电信号。绿线就是gamma曲线

why does correct with gamma?
就为获得人眼感知的图像。
how to correct the rgb format picture with gamma?
ISP gamma算法依然采用LUT将矫正系数或者映射关系存储起来,提高效率,不用再每次计算。
Gamma矫正的数值为1/2.2,大约为0.45。
附上代码:
#include <fstream>
#include <sstream>
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <vector>
#include <ctime>
#pragma warning( disable : 4244 )
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat imgMat = imread("test1.jpg");
if (imgMat.empty())
return -1;
Mat imgGamma(imgMat.size(), CV_8UC3);
// 建立Gamma矫正表
float gamma_val = 0.45;
unsigned char LUT[256] = { 0 };
for (int i = 0; i < 256; i++)
LUT[i] = (unsigned char)(pow((float)(i / 255.0), gamma_val)*(float)255.0);
//遍历图像修改每一个通道上对应像素灰度值
int nWidth = imgMat.rows;
int nHight = imgMat.cols;
for (int r = 0; r < nHight; r++)
{
for (int c = 0; c < nWidth; c++)
{
imgMat.data[r*nWidth * 3 + c * 3 + 0] = LUT[(uchar)imgMat.data[r*nWidth * 3 + c * 3 + 0]];
imgMat.data[r*nWidth * 3 + c * 3 + 1] = LUT[(uchar)imgMat.data[r*nWidth * 3 + c * 3 + 1]];
imgMat.data[r*nWidth * 3 + c * 3 + 2] = LUT[(uchar)imgMat.data[r*nWidth * 3 + c * 3 + 2]];
}
}
imshow("3_2", imgMat);
waitKey(0);
}
如下图(偷拍同事,肖像权已买,他发誓要把lena给顶替掉):

ISP PIPLINE (七) gamma的更多相关文章
- ISP PIPLINE (十四) AE(自动曝光)
自动曝光可以可以通过调节 模拟增益,数字增益,曝光时间,光圈大小来调剂曝光. 曝光在ISP PIPLINE的位置. (先介绍一个额外的知识点: ) gamma compression(也就是de-ga ...
- ISP PIPLINE(零) 知识综述预热
本文为camera isp pipline概述 ISP,即image signal processing.为图像成型做的处理工作.适应不同光学环境下图像的还原. pipline流程如下: 光通过LEN ...
- ISP PIPLINE (六) 3A 综述
前言: 上一篇文章: ISP PIPLINE (五) Denoise 下一篇文章: (1)3A定义包括什么 Iris:自动光圈,根据环境自动调节光圈. 既然讲到光圈,就先看一下光圈是什么,以及它如何影 ...
- ISP PIPLINE (十一) color correction
什么是color correction? 为什么要进行color correction? 转换后的色彩饱和度更加明显,更加符合人眼感官. 如何进行color correction? 下图是步骤: 第一 ...
- ISP PIPLINE (十) HDR
在讲HDR之前先理解一些概念,要知道为什么进行HDR? 再去想如何进行HDR. 自然界的中光强度很宽,而人眼对高亮,极暗环境的细节分辨能力比较弱.而摄像头记录的范围更窄,真正的HDR技术就是记录视觉范 ...
- ISP PIPLINE (一) BLC 以及 线性化
what is the BlackLevel? 暗电流来源1.raw8为例,单个pixel的有效值是0~255,但是实际AD芯片的精度可能无法将电压值很小的一部分转换出来,芯片厂会刻意添加一个固定的偏 ...
- ISP PIPLINE (十五) AF
主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用). AF的大致原理就是检测图像锐度或者等价于锐度的参数,推动马达实现合焦或者对 ...
- ISP PIPLINE (九_2) Denoise 之 time domain denoise
时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...
- ISP PIPLINE (九_1) Denoise 之 space domain denoise
1.空间域噪声类型 1.gauss+possion 2.椒盐噪声(dpc处理已经处理了) 去除空域噪声有哪些方法? 空域噪声一般的思想是对某pixel邻域的pixels进行加权平均. 比如 1.高斯降 ...
随机推荐
- (四)窗口mainwindow
常用控件: lable: 可以放文本,图片,动态图片,链接 Text Edit: 富文本编辑框:多行文本,HTML,图片 Line Edit: 只能放一行 Plain Edit: 只能显示多行文本 ...
- The Preliminary Contest for ICPC China Nanchang National Invitational and International Silk-Road Programming Contest
打网络赛 比赛前的准备工作要做好 确保 c++/java/python的编译器能用 打好模板,放在桌面 A. PERFECT NUMBER PROBLEM #include <cstdio> ...
- IrisSkin 单独控件样式设置 不使用皮肤样式
可以设置控件的Tag为this.skinEngine1.DisableTag [DefaultValue()] [Description("If you do not want skin t ...
- python中的装饰器迭代器生成器
装饰器: 定义:本质是函数(装饰其它函数) 为其它函数添加附加功能 原则: 1 不能修改被装饰函数源代码 2 不修改被装饰函数调用方式 实现装饰器知识储备: 1 函数即‘’变量‘’ 2 高阶函数 ...
- WPF布局的应用
一 写在开头1.1 本文内容本文主要内容是使用WPF来实现几个简单的界面. 二 登录窗口小例子2.1 实现代码XAML代码: <Window x:Class="LoginDialog. ...
- Groovy 设计模式 -- 适配器模式
Adapter Pattern http://groovy-lang.org/design-patterns.html#_adapter_pattern 适配器模式,对象存在一个接口, 此接口在此对象 ...
- Python列表中查找某个元素的索引(多个)
enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 以下是 enumerate() 方法的语法: e ...
- ModuleNotFoundError: No module named 'video_back.urls'
新建Django项目时将settings,urls移除来时报错. 这是我所想要的项目结构 >>> 扁平结构. 将下面这个应用的名字删掉就可以了.
- vue.js组件命名
- Diango 框架起步
一.命令行搭建Django项目 安装django # 在指定解释器环境下安装django 1.11.9# 在真实python3环境下: pip3 install django==1.11.9# 在虚拟 ...