图像的自身混合操作:
图像处理是根据图像自身计算并生成基值,图像可能为灰度图或模糊图像
饱和度
颜色饱和度可描述为颜色值的“纯度”,或者颜色值距灰度值的距离。这里,颜色饱和度与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 时,将使图像变亮。