着色器图像处理(饱和度)

图像的自身混合操作:图像处理是根据图像自身计算并生成基值,图像可能为灰度图或模糊图像

饱和度

颜色饱和度可描述为颜色值的“纯度”,或者颜色值距灰度值的距离。这里,颜色饱和度与HSL色彩系统中的饱和度保持一-致。 在HSL色彩系统中,饱和度是指与纯灰色之间的距离,其中,纯灰于对顶圆锥的中心位置。若降低饱和度,则颜色趋于灰色;若增加饱和度,则色彩更加鲜艳、生动为了有效地控制图像的饱和度,可通过前述定义的亮度值替换各点处的颜色值,进而生成基图像,如下所示:

target= vec3( luminance, luminance, luminance) 

随后,可将当前颜色值与target值进行混合。uT值小于1时的各颜色分量趋近于对应亮度值, 和度也将随之降低;uT值大于1则使得各颜色分量远离当前亮度值,进而增加饱和度.

precision highp float;
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;

//灰度常量, RGB值分别乘以该值, 结果是灰色
const vec3 w = vec3(0.2125, 0.7154, 0.0721);
void main()
{
    lowp vec4 color = texture2D(colorMap, varyTextCoord);
    lowp vec3 rgb = color.rgb;
    //灰色值, dot()是点乘函数, 即w与RGB分量相乘然和求和, 得到灰度值
    float luminance = dot(rgb, w);
    vec3 target = vec3(luminance, luminance, luminance);
    float ut = 0.0;
    //0为灰色, 1为原图, 2为饱和度
    gl_FragColor = vec4(mix(target, rgb, ut), color.a);

}
截屏2019-12-01下午3.19.45.png

知识拓展

图像的内插和外插

思想是确定一幅可以与源图像一起使用的目标图像,以便执行
内插和外插。方程式是一个混合两个图像的很简单的线性内插:

ImageOut =(1- a)* ImageTarget + a *ImageSource

ImageTarget是用于差值的目标图像, ImageSource就是原来的图像
目标图像是希望内插或者外插的图像。对于在0与1之间的alpha值,将在两个图像之间执行内插:对于大于1的值,将执行外插。
例如,要想调整亮度,且目标图像的每一个像素都是黑色。当alpha为1时,结果就是源图像。当alpha为0时,结果就是所有像素都是黑色。当alpha在0与1之间时,结果就是源图像与黑色图像之间的线性混合,图像有效地变黑。当alpha大于1 时,将使图像变亮。

你可能感兴趣的:(着色器图像处理(饱和度))