1.YUV调节色彩公式(必须是量化后的YUV(16-235)),非量化后的YUV转换有问题。
转换公式为:
原始YUV(Y,U,V),转换后YUV(Y',U',V'),亮度 :g_Bright (0-1),饱和度:g_Saturation(0-1),对比度:g_Contrast (0-1)
Y' = (g_Contrast * 2.0 * (Y - 0.5) + 0.5) * g_Saturation * 2.0;
U' = g_Bright * 2.0 * (U - 0.5) + 0.5;
V' = g_Bright * 2.0 * (V - 0.5) + 0.5;
2.GRB 调节色彩公式(以下为shader转换代码):亮度 :g_Bright (0-1),饱和度:g_Saturation(0-1),对比度:g_Contrast (0-1)
参考文章:Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
float4 rgba=float4(R,G,B,A);
float4 finalColor = rgba * (g_Bright*2.0f);
//saturation饱和度:首先根据公式计算同等亮度情况下饱和度最低的值:
float gray = 0.2125 * rgba.r + 0.7154 * rgba.g + 0.0721 * rgba.b;
float4 grayColor = float4(gray, gray, gray,1.0f);
//根据Saturation在饱和度最低的图像和原图之间差值
finalColor = lerp(grayColor, finalColor, g_Saturation*2.0f);
//contrast对比度:首先计算对比度最低的值
float4 avgColor = float4(0.5, 0.5, 0.5,1.0f);
//根据Contrast在对比度最低的图像和原图之间差值
rgba = lerp(avgColor, finalColor, g_Contrast*2.0f);
return rgba;