图像预处理算法适合在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 << 6)+(sum << 4)+(sum << 2)+ sum >>8
wire [9:0]sum;
reg [15:0]gray_r;
assign sum = red_8b_i + green_8b_i + blue_8b_i;
always@(posedge clk or posedge reset_p)
begin
if(reset_p)
gray_r <= 16'd0;
else if(rgb_valid)
gray_r <= (sum << 6)+(sum << 4)+(sum &