图像预处理算法————灰度化处理

小明 2025-04-28 00:14:06 15

��像预处理算法适合在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
微信