数字图像处理(20):图像饱和度调节
(1)饱和度S是描述颜色的一种属性,体现颜色的纯净度和鲜艳程度。当S=1时,表示颜色完全饱和,即颜色是最纯洁的;当S=0时,表示颜色完全去饱和,即颜色变为灰度,没有鲜明色彩。
(2)饱和度S的变化会影响到颜色的外观,使颜色变得更加鲜艳或更加柔和。当饱和度增加时,颜色变得更加鲜艳,反之变得更加柔和甚至灰度。
(3)具体调节步骤:
- 引入YUV中的Y:Y= 0.2989*R + 0.5870*G + 0.1140*B;
- R_new = -Y * value + R*(1+value); G_new = -Y * value + G*(1+value);B_new = -Y * value + B*(1+value); 可见,value=-1时,R_new=G_new=B_new=Y,完全为灰度图像;当value=0时,等同于完全不做饱和处理,value=1时,R_new=2R-Y;G=2G-Y;B=2B-Y;
(4)FPGA实现
module image_saturation_adjust
(
input wire [7:0] red ,
input wire [7:0] green ,
input wire [7:0] blue ,
input wire sign , //1表示正,0表示负
input wire [7:0] adjust_val ,
output wire [7:0] red_adjust ,
output wire [7:0] green_adjust,
output wire [7:0] blue_adjust
);
wire [17:0] Y_w;
wire [7:0] Y;
wire [16:0] R_new,G_new,B_new;
parameter Y_1 = 18'd306; //0.299*1024
parameter Y_2 = 18'd601; //0.587*1024
parameter Y_3 = 18'd117; //0.114*1024
assign Y_w = Y_1 * red + Y_2 * green + Y_3 * blue;
assign Y = Y_w[17:10];
assign R_new = sign ? ((red*(255+adjust_val)>Y*adjust_val)?(red*(255+adjust_val)-Y*adjust_val):17'd0):
(red*(255-adjust_val)+Y*adjust_val);
assign G_new = sign ? ((green*(255+adjust_val)>Y*adjust_val)?(green*(255+adjust_val)-Y*adjust_val):17'd0):
(green*(255-adjust_val)+Y*adjust_val);
assign B_new = sign ? ((blue*(255+adjust_val)>Y*adjust_val)?(blue*(255+adjust_val)-Y*adjust_val):17'd0):
(blue*(255-adjust_val)+Y*adjust_val);
assign red_adjust = ((R_new >> 8)>=255) ? 8'd255:(R_new >> 8);
assign green_adjust = ((G_new >> 8)>=255) ? 8'd255:(G_new >> 8);
assign blue_adjust = ((B_new >> 8)>=255) ? 8'd255:(B_new >> 8);
endmodule
(5)实验现象:
- 顶层输入sign=0,adjust_val = 200,即大量降低饱和度,实验现象如下:
- 顶层输入sign=1,adjust_val = 200,即大量增加饱和度,实验现象如下:
原文地址:https://blog.csdn.net/2301_80417284/article/details/144420012
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!