Hue的本意是色彩的转换,在RGB空间有较明显的意义,例如当转过120度的时候红色变成绿色,绿色变成蓝色,蓝色变成红色。至于为什么要这么转,其实也没什么道理,除了特效摆酷外,hue一般不会被用到。但Hue是ISP标配,所以还是要说明一下。在Ycbcr domain,Hue意义不能直观的理解,我知道有用三角函数对Cb和Cr分量处理的方法,于是自己做实验琢磨,下面给出Hue转换的近似算法,如有雷同,纯属巧合。
![]()
(左)原图 (中)旋转2π/3 (右)旋转4π/3
假设用户设定需要色彩旋转的角度为α,记D=Cb-128,E=Cr-128。D’和E’为转过α后的数值。
D’=D*cos(x) + E*sin(y)
E’=E*cos(y) +D*sin(x)
当α=0,x=0,y=2π;
当α=2π/3,x=3π/4,y=3π/2;
当α=4π/3,x=3π/2,y=3π/4;
当α=2π,x=2π,y=0;
这里我只实验得出了α为4个关键角度时的x和y取值,当α为其他角度时,x和y可用两点之间线性插值得到。变换过程中Y保持不变,Cb’=D’+128, Cr’=E’+128。这里的4个三角函数可以事先由软件计算好,数字IC只要实现乘加运算。从整体效果来看,色彩确实按照期望的方向在旋转,但是并不完美。
|