自己曾经尝试过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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

原文链接:通过RGB或YUV改变图像的色度和饱和度_rgb怎么改饱和度-CSDN博客