找回密码
 注册
搜索
查看: 11049|回复: 38

[讨论] Camera 图像处理原理分析 色彩篇

[复制链接]
发表于 2011-4-16 11:59:27 | 显示全部楼层 |阅读模式
Camera 图像处理原理分析  色彩篇

摘自:http://www.52rd.com/bbs/dispbbs.asp?boardid=87&id=126468&replyID=35056

1         前言
做为拍照手机的核心模块之一,camera sensor效果的调整,涉及到众多的参数,如果对基本的光学原理及sensor软/硬件对图像处理的原理能有深入的理解和把握的话,对我们的工作将会起到事半功倍的效果。否则,缺乏了理论的指导,只能是凭感觉和经验去碰,往往无法准确的把握问题的关键,不能掌握sensor调试的核心技术,无法根本的解决问题。
所以,这里笔者结合自己出于对摄影的爱好所学习的一些图像处理相关的原理,试图通过分析一些与Sensor图像处理相关的因素,和大家分享一下自己的一些理解,共同探讨,共同学习进步。
2         色彩感应及校正
2.1        原理
人眼对色彩的识别,是基于人眼对光线存在三种不同的感应单元,不同的感应单元对不同波段的光有不同的响应曲线的原理,通过大脑的合成得到色彩的感知。 一般来说,我们可以通俗的用RGB三基色的概念来理解颜色的分解和合成。
 
理论上,如果人眼和sensor对光谱的色光的响应,在光谱上的体现如下的话,基本上对三色光的响应,相互之间不会发生影响,没有所谓的交叉效应。
 

但是,实际情况并没有如此理想,下图表示了人眼的三色感应系统对光谱的响应情况。可见RGB的响应并不是完全独立的。

下图则表示了某Kodak相机光谱的响应。可见其与人眼的响应曲线有较大的区别。

2.2        对sensor的色彩感应的校正
既然我们已经看到sensor对光谱的响应,在RGB各分量上与人眼对光谱的响应通常是有偏差的,当然就需要对其进行校正。不光是在交叉效应上,同样对色彩各分量的响应强度也需要校正。通常的做法是通过一个色彩校正矩阵对颜色进行一次校正。
1
该色彩校正的运算通常是由sensor模块集成或后端的ISP完成,软件通过修改相关寄存器得到正确的校正结果。值得注意的一点是,由于RGB -> YUV的转换也是通过一个3*3的变换矩阵来实现的,所以有时候这两个矩阵在ISP处理的过程中会合并在一起,通过一次矩阵运算操作完成色彩的校正和颜色空间的转换。
3         颜色空间
3.1        分类
实际上颜色的描述是非常复杂的,比如RGB三基色加光系统就不能涵盖所有可能的颜色,出于各种色彩表达,以及色彩变换和软硬件应用的需求,存在各种各样的颜色模型及色彩空间的表达方式。这些颜色模型,根据不同的划分标准,可以按不同的原则划分为不同的类别。

匹配任意可见光所需的三原色光比例曲线
 
对于sensor来说,我们经常接触到的色彩空间的概念,主要是RGB , YUV这两种(实际上,这两种体系包含了许多种不同的颜色表达方式和模型,如sRGB, Adobe RGB, YUV422, YUV420 …), RGB如前所述就是按三基色加光系统的原理来描述颜色,而YUV则是按照 亮度,色差的原理来描述颜色。
3.1.1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; RGB <-> YUV的转换
不比其它颜色空间的转换有一个标准的转换公式,因为YUV在很大程度上是与硬件相关的,所以RGB与YUV的转换公式通常会多个版本,略有不同。
&#160;
常见的公式如下:
Y=0.30R+0.59G+0.11B
U=0.493(B-Y) = -0.15R-0.29G+0.44B
V=0.877(R-Y) = 0.62R-0.52G-0.10B
&#160;
但是这样获得的YUV值存在着负值以及取值范围上下限之差不为255等等问题,不利于计算机处理,所以根据不同的理解和需求,通常在软件处理中会用到各种不同的变形的公式,这里就不列举了。
体现在Sensor上,我们也会发现有些Sensor可以设置YUV的输出取值范围。原因就在于此。
从公式中,我们关键要理解的一点是,UV 信号实际上就是蓝色差信号和红色差信号,进而言之,实际上一定程度上间接的代表了蓝色和红色的强度,理解这一点对于我们理解各种颜色变换处理的过程会有很大的帮助。
&#160;

1.1&#160;&#160;&#160;&#160;&#160;&#160;&#160; 白平衡
1.1.1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 色温
色温的定义:将黑体从绝对零度开始加温,温度每升高一度称为1开氏度(用字母K来表示),当温度升高到一定程度时候,黑体便辐射出可见光,其光谱成份以及给人的感觉也会着温度的不断升高发生相应的变化。于是,就把黑体辐射一定色光的温度定为发射相同色光光源的色温。

常见光源色温:
光源&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 色温(K)
&#160;&#160;&#160; 钨丝灯(白炽灯)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2500-3200k
&#160;&#160;&#160; 碳棒灯&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;4000-5500k
&#160;&#160;&#160; 荧光灯(日光灯,节能灯)&#160;&#160; 4500-6500k
氙灯 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5600 k
炭精灯 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5500~6500k
&#160;&#160;&#160; 日光平均&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5400k
&#160;&#160;&#160; 有云天气下的日光&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6500-7000k
&#160;&#160;&#160; 阴天日光&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12000-18000k
&#160;
随着色温的升高,光源的颜色由暖色向冷色过渡,光源中的能量分布也由红光端向蓝光端偏移。
值得注意的是,实际光源的光谱分布各不相同,而色温只是代表了能量的偏重程度,并不反映具体的光谱分布,所以即使相同色温的光源,也可能引起不同的色彩反应。
人眼及大脑对色温有一定的生理和心理的自适应性,所以看到的颜色受色温偏移的影响较小,而camera的sersor没有这种能力,所以拍出来的照片不经过白平衡处理的话,和人眼看到的颜色会有较大的偏差(虽然人眼看到的和白光下真实的色彩也有偏差)。
太阳光色温随天气和时间变化的原因,与不同频率光的折射率有关:

波长长的光线,折射率小,透射能力强,波长短的光线,折射率大,容易被散射,折射率低,这也就是为什么交通灯用红色,防雾灯通常是黄色,天空为什么是蓝色的等等现象的原因。
知道了这一点,太阳光色温变化的规律和原因也就可以理解和分析了,留给大家自己思考。
&#160;
&#160;
1.1.1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 色温变化时的色彩校正
所以从理论上可以看出,随着色温的升高,要对色温进行较正,否则,物体在这样的光线条件下所表现出来的颜色就会偏离其正常的颜色,因此需要降低sensor对红色的增益,增加sersor对蓝光的增益。同时在调整参数时一定程度上要考虑到整体亮度的要保持大致的不变,即以YUV来衡量时,Y值要基本保持不变,理论上认为可以参考RGB->YUV变换公式中,RGB三分量对Y值的贡献,从而确定RGAIN和BGAIN的变化的比例关系。但实际情况比这还要复杂一些,要考虑到不同sensor对R,B的感光的交叉影响和非线性,所以最佳值可能和理论值会有一些偏差。
1.1.2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 自动白平衡原理
1.1.2.1&#160;&#160;&#160;&#160;&#160;&#160;&#160; 原理
自动白平衡是基于假设场景的色彩的平均值落在一个特定的范围内,如果测量得到结果偏离该范围,则调整对应参数,校正直到其均值落入指定范围。该处理过程可能基于YUV空间,也可能基于RGB空间来进行。对于Sensor来说,通常的处理方式是通过校正R/B增益,使得UV值落在一个指定的范围内。从而实现自动白平衡。
&#160;
1.1.2.2&#160;&#160;&#160;&#160;&#160;&#160;&#160; 特殊情况的处理
在自动白平衡中,容易遇到的问题是,如果拍摄的场景,排除光线色温的影响,其本身颜色就是偏离平均颜色值的,比如大面积的偏向某种颜色的图案如:草地,红旗,蓝天等等,这时候,强制白平衡将其平均颜色调整到灰色附近,图像颜色就会严重失真。
因此,通常的做法是:在处理自动白平衡时,除了做为目标结果的预期颜色范围外,另外再设置一对源图像的颜色范围阙值,如果未经处理的图像其颜色均值超出了该阙值的话,根本就不对其做自动白平衡处理。由此保证了上述特殊情况的正确处理。
可见,这两对阙值的确定对于自动白平衡的效果起着关键性的作用。
1.1.3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 某平台的例子
英文代码&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 中文界面&#160;&#160;&#160;&#160;&#160;&#160; 色温&#160;&#160;&#160;&#160;&#160;&#160; 色温&#160;&#160;&#160;&#160;&#160;&#160; RGAIN, GGAIN,&#160;&#160; BGAIN
cloud&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 阴天&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7500k&#160;&#160; 0x1D4C, 0x00CD, 0x0085, 0x0080
daylight &#160;&#160;&#160;&#160;&#160;&#160; 日光&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6500k&#160;&#160; 0x1964, 0x00A3, 0x0080, 0x0088
INCANDESCENCE&#160;&#160; 白热光&#160;&#160;&#160; 5000k&#160;&#160; 0x1388, 0x00A5, 0x0080, 0x0088
FLUORESCENT&#160;&#160;&#160;&#160; 日光灯&#160;&#160;&#160;&#160;&#160; 4400k&#160;&#160; 0x1130, 0x0098, 0x0080, 0x00A8
TUNGSTEN&#160;&#160;&#160;&#160;&#160;&#160;&#160; 钨丝灯&#160;&#160;&#160;&#160;&#160; 2800k&#160;&#160; 0x0AF0, 0x0080, 0x0081, 0x00A4
&#160;
可以看到随着色温的升高,其变化规律基本符合上节中的理论分析。不过这里多数参数与理论值都有一些偏差,其中日光灯的色温参数设置与理论值有较大的偏差,实际效果也证明该日光灯的参数设置使得在家用日光灯环境下拍摄得到的照片颜色偏蓝。修改其参数后实拍效果明显改善。(再查一些资料可以看到通常会有两种荧光灯色温 4000 和 5000K,目前我所接触到的应该是5000K居多)
1.1.4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 调试和验证
具体参数的调整,应该在灯箱环境下,使用各种已知色温的标准光源对标准色卡拍摄,在Pc机上由取色工具测量得到其与标准色板的RGB分量上的色彩偏差,相应的调整各分量增益的比例关系。为了更精确的得到结果,曝光量增益的设置在此之前应该相对准确的校正过。



颜色相关特效处理
1.1&#160;&#160;&#160;&#160;&#160;&#160;&#160; grayscale (灰阶)
灰阶图的效果就是将彩色图片转换为黑白图片。
1.2&#160;&#160;&#160;&#160;&#160;&#160;&#160; 理论
理论上,在YUV空间,将UV分量丢弃,只保留Y分量,这样就可以得到黑白图像,这也是彩色电式机信号能兼容黑白电视机的原理。如下图理论上Y值一样的颜色(右边是用acdsee转成灰度图的效果),在grayscale模式下看应该是一样的颜色。
&#160;&#160;&#160;&#160;
算法上的操作,理论上应该把UV值改成灰色对应数值就可以了。不过根据软件算法和硬件结构的不同,具体代码也会有不同。
1.3&#160;&#160;&#160;&#160;&#160;&#160;&#160; 以某平台为例
核心的两行代码如下:
&#160;&#160;&#160;&#160;&#160;&#160; SET_HUE_U_GAIN(0);
&#160;&#160;&#160;&#160;&#160;&#160; SET_HUE_V_GAIN(0);
这里设置UV GAIN为0,如果UV offset设置为128的话,最终得到的UV就是128,这就和理论是相符合的。
1.4&#160;&#160;&#160;&#160;&#160;&#160;&#160; sepia / sepiagreen / sepiablue
所谓的复古(绿,蓝)就是在灰阶的基础上,对UV值额外再做了一个offset,将灰度图转换成某种颜色的梯度图。理论上为了获得蓝色效果,应该增加蓝色差信号,减小红色差信号。即增大U,减小V。
以sepiablue效果为例,这里的字节的MSB表示符号位:所以88为88,158为-30。
&#160;&#160;&#160; SET_HUE_U_GAIN(0);&#160;
&#160;&#160;&#160; SET_HUE_V_GAIN(0);&#160;
&#160;&#160;&#160; SET_HUE_U_OFFSET(88);
&#160;&#160;&#160; SET_HUE_V_OFFSET(158);
&#160;
&#160;
1.5&#160;&#160;&#160;&#160;&#160;&#160;&#160; negative
所谓负片效果,就是将图像的颜色反转,看起来就像是在看胶片底片时的效果。这从理论上也很容易理解和处理,就是在RGB空间,取其补色,具体的操作就是用255分别减去RGB得到新的RGB值。通常会在ISP中实现该功能。
&#160;
2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 小结
理解了原理,要做出其它颜色变换方面的效果就很容易了。
基本上,在颜色校正和处理方面,需要考虑的相关参数大致包括:
自动WB上下限,自动白平衡时的目标范围,RGB gain, UV gain, UV offset, color correction.有些还会有saturation 和 hue相关的设置。
从sensor或ISP硬件处理的流程上说,通常方向是先做RGB gain,再做color correction,最后做YUV空间的处理。所以调整效果的时候,为了减少参数之间的相互影响,基本上也可以按这个顺序来调整参数。

点评

学习了  发表于 2020-12-31 14:34
感谢大爱付出~~~  发表于 2016-3-15 20:23
发表于 2011-4-19 20:12:14 | 显示全部楼层
好,学习了~~~~
点评回复

使用道具 举报

发表于 2011-4-22 21:54:06 | 显示全部楼层
学习了  感谢楼主!!
点评回复

使用道具 举报

发表于 2011-5-4 10:00:47 | 显示全部楼层
挺基础的~适合俺 谢谢了
点评回复

使用道具 举报

发表于 2011-5-6 17:14:26 | 显示全部楼层
非常感谢楼主,学习了
点评回复

使用道具 举报

发表于 2011-6-8 14:51:37 | 显示全部楼层
kanakanakan
点评回复

使用道具 举报

发表于 2011-6-10 23:20:49 | 显示全部楼层
慢慢学习中。。。。。。
点评回复

使用道具 举报

发表于 2011-6-17 13:56:31 | 显示全部楼层
先学习了
点评回复

使用道具 举报

发表于 2011-6-22 10:54:16 | 显示全部楼层
学习了,谢谢楼主!
点评回复

使用道具 举报

发表于 2011-7-15 11:12:03 | 显示全部楼层
楼主 辛苦 V5 !
点评回复

使用道具 举报

发表于 2011-7-15 11:31:41 | 显示全部楼层
LZ bu hou dao !
点评回复

使用道具 举报

发表于 2011-8-1 11:34:58 | 显示全部楼层
好资料,谢谢
学习中。[em08]
点评回复

使用道具 举报

发表于 2011-8-12 17:55:09 | 显示全部楼层
需要Aptina CMOS,SONY CMOS ,OV CMOS 都可以来找我 13510531636
点评回复

使用道具 举报

发表于 2011-8-22 21:36:07 | 显示全部楼层
学习了,,,,,
点评回复

使用道具 举报

发表于 2011-8-29 23:38:32 | 显示全部楼层
非常感谢楼主,学习了
点评回复

使用道具 举报

发表于 2011-9-4 23:48:48 | 显示全部楼层
本人想用中星微342+镁光2010的电脑摄像头模组,要求是烧录程序后
可以手动调节亮度、对比度、色调、饱和度、清晰度、伽玛、白平衡、逆光对比和曝光。
请高手留下联系方式,或QQ我:78818098
点评回复

使用道具 举报

发表于 2011-9-14 16:35:20 | 显示全部楼层
感谢楼主
点评回复

使用道具 举报

发表于 2011-10-12 20:16:47 | 显示全部楼层
学习了,谢谢[em01]
点评回复

使用道具 举报

发表于 2011-11-15 20:32:19 | 显示全部楼层
以下是引用muojie在2011-4-16 11:59:27的发言:

既然我们已经看到sensor对光谱的响应,在RGB各分量上与人眼对光谱的响应通常是有偏差的,当然就需要对其进行校正。不光是在交叉效应上,同样对色彩各分量的响应强度也需要校正。通常的做法是通过一个色彩校正矩阵对颜色进行一次校正。

从sensor或ISP硬件处理的流程上说,通常方向是先做RGB gain,再做color correction,最后做YUV空间的处理。所以调整效果的时候,为了减少参数之间的相互影响,基本上也可以按这个顺序来调整参数。


我认为,color correction 的直接目的不是要将 sensor 对光谱的响应校正为与人眼对光谱的响应相同,而是要使 sensor 的光谱特性与相应显示标准相匹配。假如 camera 输出的要在 sRGB 标准显示器上显示,那么 sensor 的光谱特性就要根据 sRGB 的三基色来设计,但是通常我们需要的特性中都含有负瓣,为了模拟这些负瓣,最简单有效的方法就是使用 3x3 的 matrix。而挑选这9个系数则是一个优化的过程,通常是针对某些关键颜色而优化。当然,这一切确实是与人眼三种感色细胞的光谱响应特性的交叉有必然联系。

对于信号处理流程,缺了一个gamma correction,加入之后大致是 RGB gain->color correction->gamma correction->color space conversion。

欢迎共同探讨。[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2011-11-26 22:42:11 | 显示全部楼层
多谢楼主~~~[em14]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-8 07:46 , Processed in 0.082955 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表