简介
用verilog实现彩色图像的灰度化算法,并进行Modelsim仿真。 图像处理操作中最简单的一类就是点操作,一个像素的输出只取决于输入图像的相应像素值。 RGB转GRAY公式: GRAY = 0.299R + 0.587G + 0.114B 由于FPGA不方便小数运算,所以放大256倍进行运算,然后右移8位: GRAY = (77R + 150G + 29B) >> 8 彩色图像的灰度化属于点操作,但两级寄存器之间组合逻辑过多会导致时序出问题,所以对该公式进行流水线处理,分为三级流水线:
第一级处理乘法第二级处理加法第三级处理移位
模块说明
module rgb2gray(
input clk,
input rst_n,
// input data & valid
input iValid,
input [7:0] red,
input [7:0] green,
input [7:0] blue,
// output data & valid
output oValid,
output [7:0] gray
);
为了简单起见,输入输出都是valid+data的形式
第一级流水线:乘法
// 第一级乘法寄存器
reg [15:0] red_r;
reg [15:0] green_r;
reg [15:0] blue_r;
always @(posedge clk, negedge rst_n) begin
if(!rst_n) begin
red_r |