颜色的基本处理

news/2024/12/14 9:39:02/

       相机>数码相机能够获取彩色图像,但相机的色彩处理是一个非常复杂的过程,是非常重要的。

       此过程生产制造商在细节方面都是不公布的,但是基本的概念是相同的。当相机捕捉一个真实场景时,是怎么还原成人眼所看到的图像呢?

1.RAW----相机获取到的原始图像

       绝大多数的彩色图像传感器使用Bayer模式,Bayer模式颜色传感器是采用红、绿、蓝滤光片。所以每个像素是能够探测到一种颜色,它“看到”的是红色、绿色或蓝色。因为绿色是亮度信息中最重要的颜色, 所有我们对于绿色采用两个像素,蓝色一个,红色一个。

 图1:传感器信号不包含颜色信息,每个像素代表一种颜色。

图2 :上图的细节。每个像素只检测一个颜色。图片仍然是“马赛克”

2.去马赛克

       为了得到每个像素的红色,绿色和蓝色的信息,去马赛克的重要步骤是对丢失的信息进行插值。这关系着图像的质量。因此很多厂商是不会透露在细节上做了什么。不同的滤光片导致对光的灵敏度不同且信号强度较低,因此噪声级别可能会非常不同。在去马赛克的处理过程中,噪声是通过相邻元素之间扩散,不同的颜色通道中噪声是相互关联的。

图3 :一个像素的信息用于相邻像素的颜色信息

图4 :经过去马赛克处理,每个像素都有了一个红、绿、蓝的值,所以原图会变成彩色图片

3.白平衡

       在相机>数码相机中,不同颜色通道的灵敏度是不同的。为了获取符合人眼视觉的正确颜色,相机以不同方式控制不同通道的增益。经过白平衡处理后,图像中的中性区域显现中性,并且数值和红色,绿色及蓝色几乎相同。

图5:调整所有的通道的增益后,图像显现中性

4.颜色校正矩阵(CCM)

       每个相机都有各自的光谱灵敏度。所以每个相机都具有特定的RGB输出。要获得所有相机一致的结果,必须将相机的RGB转换为标准已知的色彩空间,在大多数情况下是sRGB,但可以是任意其它的色彩空间。要把值从RGB_camera转换到sRGB,必须对数据添加一个3 x3的颜色校正矩阵(CCM)。

图6:当CCM矩阵应用后,颜色被转换为已知定义的色彩空间(sRGB)

5.Gamma

       不管图像中是在暗区检查和亮区检查,到目前步骤为止,图像的数据依然是线性的。因此将光强加倍会使图像中的数值加倍。在输出设备中为了得到正确的表现方式,图像通常会应用Gamma功能。这个曲线被用在图像处理的最后阶段,因为从现在起图像的数据就是非线性的,开始接近于人眼所看到的的图像画面。

 

图7:完成后,把RAW图片转换成sRGB图片


http://www.ppmy.cn/news/1554985.html

相关文章

k8s中设置annotation的方法总结

k8s中设置annotation的方法总结 annotation是什么 在 Kubernetes 中,Annotations 是一种用于向 Kubernetes 对象附加非标识性元数据的机制。 annotation有什么用 annotation与 Labels 类似,但有一些关键区别和特定用途。 常用于存储与对象相关的配置…

【Hexo】给博客添加宠物挂件

适配安知鱼主题和Solitude主题,我采用的是安知鱼主题,Solitude主题可参考教程 {% link 给你的博客底部添加一排宠物,青桔气球,https://blog.qjqq.cn/posts/f69c.html %} 同时感谢梦爱吃鱼 大佬的耐心指导和帮助,原文可参考 {% link 给你的…

用于日语词汇学习的微信小程序+ssm

日语词汇学习小程序是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式,所以有必要开发日语词汇…

单元测试中如何使用 Mockito 框架

使用 Mockito 进行单元测试的基本框架可以分为几个步骤。Mockito 是一个强大的 Java 框架,用于创建模拟对象(mock objects),可以在不依赖外部系统或组件的情况下测试代码。以下是使用 Mockito 架构进行单元测试的通用步骤&#xf…

前端页面导出word

html-docx-js bug: vite使用html-docx.js会报错&#xff0c;点击下载上方文件替换即可 正文 npm install html-docx-js -S npm install file-saver -S<template><div id"managerReport">word内容......</div> </template><script>&l…

边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导

写成分量形式 原始式子&#xff1a; ∂ u i ′ ∂ t u ‾ j ∂ u i ′ ∂ x j u j ′ ∂ u ‾ i ∂ x j u j ′ ∂ u i ′ ∂ x j − 1 ρ ‾ ⋅ ∂ p ′ ∂ x i g θ v ′ θ ‾ v δ i 3 f ϵ i j 3 u j ′ v ∂ 2 u i ′ ∂ x j 2 ∂ ( u i ′ u j ′ ‾ ) ∂ x j…

satoken 后端获取用户id的原理是啥 用了前端传的那个参数

在 Sa-Token 框架中&#xff0c;后端获取用户 ID 的过程与前端传递的参数密切相关。Sa-Token 是一个基于 JWT 的轻量级权限管理框架&#xff0c;主要用于解决权限控制、登录管理等问题。具体来说&#xff0c;后端如何获取用户 ID&#xff0c;取决于你前后端如何设计以及 Sa-Tok…

vue项目通过appendChild()函数向页面上追加组件

前言&#xff1a; 此篇文章自己结合项目和文档自己理解的&#xff0c;作用于往后遇见此类开发需求时参考。 正文&#xff1a; 1、createApp() 创建一个应用程序实例 function createApp(rootComponent: Component, rootProps?: object): App 第一个参数是根组件。第二个可选…