【FPGA图像处理实战】- 彩色图像灰度化-FPGA常见问题社区-FPGA CPLD-ChipDebug

【FPGA图像处理实战】- 彩色图像灰度化

 

一、彩色图像处理灰度化

 

彩色图像灰度化是一种将彩色图像转换为灰度图像的过程。 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值。 因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。 当灰度为255的时候,表示最亮(纯白);当灰度为0的时候,表示最暗(纯黑)。 灰度化的好处是:相较于彩色图像灰度图像占内存更小,运行速度更快;灰度图像后可以在视觉上增加对比,突出目标区域。

二、图像处理灰度化的方法

 

1、平均值法

 

计算图像中每个像素点的RGB值之和,求平均值,作为灰度值。 计算公式:Rn = Gn = Bn = (R + G + B)/3 说明:(Rn,Gn,Bn)表示像素点灰度化后的RGB值,(R,G,B)表示彩色图像的RGB值

2、加权平均值法

 

将R、G、B三个分量的权重分别设为0.299、0.587、0.114,然后将它们与相应的像素值相乘后相加,得到灰度值。 可以看到这个系数权重实际就是之前RGB转YUV公式中的,亮度Y=0.299*R + 0.587*G + 0.114*B。 也就是说灰度化的图像每个像素点值,Rn = Gn = Bn = Y。

三、FPGA实现

 

有了上一章RGB转YUV,今天这个算法的实现很简单哦,这里给大家写出模块名和接口,大家可以先实现,再看后面的答案。

 

1、练习题目

module image_rgb2gray(
   input wire clk,
   input wire reset,
   
   input wire valid_i,
   input wire [23:0] img_data_i,
   
   output wire valid_o,
   output wire [23:0] img_data_o
    );

endmodule

 

2、答案

  这里给出平均法的verilog实现写法,
wire [7:0] R, G, B;

    reg valid_d1;   
    reg [9:0] RGB_avr;
    
    reg valid_d2;   
    reg [16:0] RGB_avr_m;
    
    reg valid_d3;   
    reg [7:0] RGB_new;

    //平均法
    //1/3 * 512 = 171

    assign {R, G, B} = img_data_i;
    always@(posedge clk or posedge reset) begin
        if(reset) begin
            valid_d1 <= 'b0;
            RGB_avr <= 'b0;
        end else begin
            valid_d1 <= valid_i;
            RGB_avr <= R + G + B;
        end
    end

    //最大值不可能超过255*3*171 = 17'd130815
    always@(posedge clk) begin
        RGB_avr_m <= RGB_avr * 8'd171;
    end
    always@(posedge clk or posedge reset) begin
        if(reset) begin
            valid_d2 <= 'b0;
        end else begin
            valid_d2 <= valid_d1;
        end
    end

    //最大值不可能超过255
    always@(posedge clk or posedge reset) begin
        if(reset) begin
            valid_d3 <= 'b0;
            RGB_new <= 'b0;
        end else begin
            valid_d3 <= valid_d2;
            RGB_new <= RGB_avr_m[16:9];
        end
    end
    
    assign valid_o = valid_d3;
    assign img_data_o = {3{RGB_new}};

 

3、测试结果

 

(1)仿真测试时序图

 

图片[1]-【FPGA图像处理实战】- 彩色图像灰度化-FPGA常见问题社区-FPGA CPLD-ChipDebug

(2)效果图

 

图片[2]-【FPGA图像处理实战】- 彩色图像灰度化-FPGA常见问题社区-FPGA CPLD-ChipDebug

图片[3]-【FPGA图像处理实战】- 彩色图像灰度化-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

 

请登录后发表评论