色彩调整之亮度、曝光度、对比度滤镜

GPUImageBrightnessFilter

调节图像的亮度,公式如下:

y = x + 255 ∗ b y = x + 255 * b y=x+255∗b
其中 x x x为调节前的像素值, y y y为调节后的像素值, b b b为调节参数;即分别在R、G、B三通道上加上调节参数即可。

vec3 col = texture(iChannel0,uv).rgb;
float brightness = 0.5;
col += vec3(brightness);
fragColor = vec4(col, 1.);

brightness等于0.0、0.5、0.7 时效果如下:

色彩调整之亮度、曝光度、对比度滤镜色彩调整之亮度、曝光度、对比度滤镜色彩调整之亮度、曝光度、对比度滤镜
GPUImageExposureFilter

调节图像的曝光度。根据*给出的定义:

曝光值是一个以2为底的对数刻度系统。曝光值(EV)满足公式: E V = l o g 2 N 2 t EV = log_{2}\frac{N^2}{t} EV=log2​tN2​, 2 E V = N 2 t 2^{EV} = \frac{N^2}{t} 2EV=tN2​。其中N是光圈(f值);t是曝光时间(快门),单位秒。

因为我们关心的是曝光值大小与图像的关系,所以只看 2 E V 2^{EV} 2EV即可。这里GPUImage的作者认为图像的呈现效果是与 2 E V 2^{EV} 2EV大小成线性关系的。

// 曝光值设置成1.0
const float exposure = 1.;
vec2 uv = fragCoord/iResolution.xy;
vec4 col = texture(iChannel0,uv);
// 调整图像的RGB
col.rgb = col.rgb * pow(2.,exposure);
fragColor = vec4(col.rgb,1.0);

exposure等于0.0、1.0、1.5 时效果如下:

色彩调整之亮度、曝光度、对比度滤镜色彩调整之亮度、曝光度、对比度滤镜色彩调整之亮度、曝光度、对比度滤镜
GPUImageContrastFilter

调节图像的对比度。对比度,简单来讲就是反应了一张图像的亮区域和暗区域的层次感。更详细的内容请访问对比度。对比度的算法公式如下:

y = [ x − 127.5 ∗ ( 1 − b ) ] ∗ k + 127.5 ∗ ( 1 + b ) y = [x - 127.5 * (1 - b)] * k + 127.5 * (1 + b) y=[x−127.5∗(1−b)]∗k+127.5∗(1+b)

其中 x x x为调节前的像素值, y y y为调节后的像素值; b b b的取值范围 [ − 1 , 1 ] [-1,1] [−1,1],用于调节亮度; k k k用于调整对比度。特别地: 当 b = 0 时 , y = ( x − 127.5 ) ∗ k + 127.5 当b=0时, y = (x - 127.5) * k + 127.5 当b=0时,y=(x−127.5)∗k+127.5,此时只调节对比度;当 k = 1 时 , y = x + 255 ∗ b k=1时, y = x + 255 * b k=1时,y=x+255∗b,此时只调节亮度。

vec3 col = texture(iChannel0,uv).rgb;
float contrast = 0.2;
col = (col.rgb - vec3(.5)) * contrast + vec3(.5);
fragColor = vec4(col, 1.);

contrast等于1.0、2.0、3.0 时效果如下:

色彩调整之亮度、曝光度、对比度滤镜色彩调整之亮度、曝光度、对比度滤镜色彩调整之亮度、曝光度、对比度滤镜
上一篇:libevent源码学习(11):超时管理之min_heap


下一篇:0124