1. 程式人生 > >影象亮度、對比度 演算法--cg

影象亮度、對比度 演算法--cg

亮度、對比度原理:
亮度對比度的演算法公式
一副影象的亮度對比度調節屬於影象的灰度線性變換,其公式如下:
y = [x - 127.5 * (1 - B)] * k + 127.5 * (1 + B);
x為調節前的畫素值,y為調節後的畫素值。
其中B取值[-1,1],調節亮度;
k調節對比度,arctan(k)取值[1,89],所以
k = tan( (45 + 44 * c) / 180 * pi );
其中c取值[-1,1]。通常我們用該值來設定對比度
特別的,
當B=0 時:y = (x - 127.5) * k + 127.5; 這時只調節對比度。
當c=0 時,k = 1:y = x + 255 * B; 這時只調節亮度。

同時,我專案中是需要處理成黑白顏色的。rgb處理成黑白的方法通常是用經驗演算法:
float gray = dot( color, float3(0.2989, 0.5870, 0.1140));

cg實現:

sampler2D RT : register(s0);
float4 Gan_ps(//in float4 pos : POSITION,
                     float2 iTexCoord : TEXCOORD0,
                     float4 outPos : TEXCOORD1,
                    , float4 outColor : TEXCOORD2
                    ,uniform
float br//亮度 ,uniform float duibi ) : COLOR { float4 color=tex2D(RT, iTexCoord); float c = dot( color.rgb, float3(0.2989, 0.5870, 0.1140)); //黑白處理 float k=tan((45+44*duibi)/180.0*3.1415926); c=(c-0.5*(1-br))*k+0.5*(1+br);//亮度、對比度計算 return float4(c,c,c,1
); }