图像预处理算法————灰度化处理
��像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。
灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255
方法:一般有分量法、最大值法、平均值法、加权平均法四种方法对彩色图像进行灰度化。
一:最大值法
将彩色图像中的三分量亮度 R , G , B 的最大值作为灰度图的灰度值。具体表达式如下。 gray(i, j) = max[𝑅(𝑖,𝑗),𝐺(𝑖,𝑗),𝐵(𝑖,𝑗)]二:平均值法
1.原理
将彩色图像中的三分量亮度求平均得到一个灰度值。如下 : gray(i, j) = { 𝑅(𝑖,𝑗) + 𝐺(𝑖,𝑗) + 𝐵(𝑖,𝑗) } / 3 上式中有除法,考虑到在 FPGA 中实现除法比较的消耗资源(除法就可以使用 移位的方式 实现),这里在实现前可以先做如下的近似处理:除以256可以看作是向右移8位,同样,512,1024,2048等2的n次都可以
2.verilog实现
分析:只有加法乘法以及移位操作
module rgb2gray ( input clk, //时钟 input reset_p, //复位 input rgb_valid, //rgb输入有效标识 input rgb_hs, //rgb输入行信号 input rgb_vs, //rgb输入场信号 input [7:0] red_8b_i, //R输入 input [7:0] green_8b_i, //G输入 input [7:0] blue_8b_i, //B输入 output [7:0] gray_8b_o, //GRAY输出 output reg gray_valid, //gray输出有效标识 output reg gray_hs, //gray输出行信号 output reg gray_vs //gray输出场信号 );
//求平均法GRAY = (R+B+G)/3=((R+B+G)*85)>>8 =((R+B+G)*(64+16+4+1))>>8
=(R+B+G)*64+(R+B+G)*16+(R+B+G)*4+(R+B+G) >>8
= (sum 8右移8位 always@(posedge clk) begin gray_valid 8
reg [15:0] R1; reg [15:0] R2; reg [15:0] R3; reg [15:0] G1; reg [15:0] G2; reg [15:0] G3; reg [15:0] B1; reg [15:0] B2; reg [15:0] B3; reg [15:0] Y1; reg [15:0] Cb1; reg [15:0] Cr1; reg [7:0] Y2,Cb2,Cr2; reg [3:0] rgb_valid_r; //rgb输入有效标识 reg [3:0] rgb_hs_r; //rgb输入行信号 reg [3:0] rgb_vs_r; //rgb输入场信号
提取三种分量的RGB值,并且进行相加得到
always@(posedge clk or negedge reset_p) begin if (reset_p) begin {R1,G1,B1}
The End