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