Down-Sampling 降采样(Verilog)

简介

         在图像处理领域中,降采样是一个非常常用的图像处理方法,目的是为了在大体上不改变图片的情况下,缩小图像,降低分辨率,减少数据的计算量,生成对应图像的降采样图。本质就是抽取图像数据来降低特征的维度进而保留有效的信息。

原理

         对一个需要处理的图片的像素值序列间隔几个像素值取样一次,也就是抽取像素值,得到的新的像素值序列就是原像素值序列的降采样,也称为下采样。 

         降采样分为整数倍降采样和分数倍降采样,在这篇文章中,介绍的是比较常用的 2 倍降采样,也可以说是奇数降采样或偶数降采样。

模块端口图

         这里把 RGB 数据的三个通道都列了出来,当然也可以用其他的图像数据格式,如:YUV 。

设计文件代码

         以下为降采样的设计代码,留下的是偶数列的图像数据。代码中控制计数器的为 MCNT,也就是计数最大值,这个视情况而定,也可用数据有效信号(Data_valid)来控制计数器。 

   module Down_Sampling(
          Data_in_r,
          Data_in_g, 
          Data_in_b,

          clk,
          rst_n,
 
          Data_out_r,
          Data_out_g,
          Data_out_b,

);


       input [7:0] Data_in_r;
       input [7:0] Data_in_g;
       input [7:0] Data_in_b;

       input clk;
       input rst_n;

       output [7:0] Data_out_r;
       output [7:0] Data_out_g;
       output [7:0] Data_out_b;


       parameter MCNT = 根据情况定 也可用数据有效信号控制;

          reg [10:0] Data_cnt;
   always@(posedge clk or negedge rst_n)
         if(!rst_n)
              Data_cnt <= 0;
         else if(Data_cnt == MCNT) 
              Data_cnt <= 0;
         else 
              Data_cnt <= Data_cnt + 1;

   always@(posedge clk or negedge rst_n)
         if(!rst_n)begin
              Data_out_r <= 0;
              Data_out_g <= 0;
              Data_out_b <= 0;
         end
         else if(!Data_cnt[0])begin
              Data_out_r <= Data_in_r;
              Data_out_g <= Data_in_g;
              Data_out_b <= Data_in_b;
            end  
            else begin
              Data_out_r <= Data_out_r;
              Data_out_g <= Data_out_g;
              Data_out_b <= Data_out_b;
            end

      
endmodule

         以下为留下奇数列的图像数据。

   module Down_Sampling(
          Data_in_r,
          Data_in_g, 
          Data_in_b,

          clk,
          rst_n,
 
          Data_out_r,
          Data_out_g,
          Data_out_b,

);


       input [7:0] Data_in_r;
       input [7:0] Data_in_g;
       input [7:0] Data_in_b;

       input clk;
       input rst_n;

       output [7:0] Data_out_r;
       output [7:0] Data_out_g;
       output [7:0] Data_out_b;


       parameter MCNT = 根据情况定 也可用数据有效信号控制;

          reg [10:0] Data_cnt;
   always@(posedge clk or negedge rst_n)
         if(!rst_n)
              Data_cnt <= 0;
         else if(Data_cnt == MCNT) 
              Data_cnt <= 0;
         else 
              Data_cnt <= Data_cnt + 1;

   always@(posedge clk or negedge rst_n)
         if(!rst_n)begin
              Data_out_r <= 0;
              Data_out_g <= 0;
              Data_out_b <= 0;
         end
         else if(Data_cnt[0])begin
              Data_out_r <= Data_in_r;
              Data_out_g <= Data_in_g;
              Data_out_b <= Data_in_b;
            end  
            else begin
              Data_out_r <= Data_out_r;
              Data_out_g <= Data_out_g;
              Data_out_b <= Data_out_b;
            end

      
endmodule

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值