自己曾经尝试过BGR先转成HSV,再改变S分量,但是效果非常差,这里是我是在别人论文上查到的,给大家参考一下。
1.RGB调整饱和度
通过RGB改变图像的饱和度 r的范围一般是(-1,+5)
公式:
B = B + (B-(R+G)/2)*r;
G = G + (G-(R+B)/2)*r;
R = R + (R-(B+G)/2)*r;
效果图:
2.YUV介绍
在YUV空间,Y代表亮度,UV又称CR和CB代表色度偏红和偏紫,要改变饱和度需要将U和V同比例的增加和减少,如下图
2.1YUV调整饱和度(有缺陷,颜色会有点偏移)
通过YUV改变图像的饱和度,这里的r的范围一般为(0 , 5) , 如果为1 表示不改变图像数据
公式如下:
Y = Y;
U = U*r;
V = V*r;
注意:这里的 U~(-128- 128), V~(-128-128) 如果你的UV的范围是0-255 或者 16-240 ,那么就需要先减去128.
效果图:
2.2YUV调整色相
通过yuv 改变图像的色相(Cb即为U,Cr即为V) UV∈(-128,128)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调节色度
% U' = (U-128) x Cos(H) + (V-128) x Sin(H)
% V' = (V-128) x Cos(H) - (U-128) x Sin(H)
H1=120;
H1=H1/180*pi;
for i=1:m
for j=1:n
Cb1(i,j) =(Cb1(i,j)-128)*sin(H1) +(Cr1(i,j)-128)*cos(H1)+128;
Cr1(i,j) =(Cr1(i,j)-128)*sin(H1) -(Cb1(i,j)-128)*cos(H1)+128;
end
end
H2=60;
H2=H2/180*pi;
for i=1:m
for j=1:n
Cb2(i,j) =(Cb2(i,j)-128)*sin(H2) +(Cr2(i,j)-128)*cos(H2)+128;
Cr2(i,j) =(Cr2(i,j)-128)*sin(H2) -(Cb2(i,j)-128)*cos(H2)+128;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2.3调整对比度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
C1=0.5;
C2=2;
for i=1:m
for j=1:n
temp = (Y1(i,j)-128)*C1 + 128;
Y1(i,j) = min(max(temp, 0), 255);
end
end
for i=1:m
for j=1:n
temp = (Y2(i,j)-128)*C2 + 128;
Y2(i,j) = min(max(temp, 0), 255);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%