明德扬小冉 发表于 2019-12-12 15:29:51

【基于FPGA的图像处理工程】边缘检测工程之二值化模块代码解析

【基于FPGA的图像处理工程】                                                            —边缘检测工程:二值化模块代码解析作者:陈刀刀本文为明德扬原创文章,转载请注明出处!二值化模块的功能:该模块将输入进来的数据与二值图像的阈值进行判断,最终输出0或者1。

      一、设计架构      该模块的功能对输入的灰度图像做二值化处理。       期望输出波形如下所示:      设value取150,在第一个红色箭头处,当din_vld=1时,din为56大于150,dout输出1,同时dout_vld为1;      在第二个箭头处,当din_vld=1时,din为85小于150,dout输出0,同时dout_vld为1;      在第三个箭头处,当din_vld=1时,din为87小于150,dout输出0,同时dout_vld为1;      其他情况以此类推。

      二、信号的意义
信号类型意义
clk输入信号时钟信号,时钟频率为25M
rst_n输入信号复位信号,低电平有效。
value输入信号二值图像的阈值
din输入信号输入灰度图像数据,为8位。
din_vld输入信号输入灰度图像数据有效信号。1:数据有效;0:数据无效。
din_sop输入信号输入灰度图像数据起始指示信号。1:数据有效;0:数据无效。
din_eop输入信号输入灰度图像数据结束指示有效信号。1:数据有效;0:数据无效。
dout输出信号输出的二值图像的图像数据,为1位。设计逻辑:当输入的值比设定阈值大,则输出1;反之则输出0。
dout_vld输出信号输出二值图像数据的有效信号。1:数据有效;0:数据无效。设计逻辑:与输入的二值图像数据的有效信号同步。
dout_sop输出信号输出灰度图像数据起始指示信号。1:数据有效;0:数据无效。设计逻辑:与输入的灰度图像数据起始指示信号同步。
dout_eop输出信号输出灰度图像数据结束指示有效信号。1:数据有效;0:数据无效。设计逻辑:与输入的灰度图像数据结束指示有效信号同步。
      三、参考代码       下面展出本模块的设计,欢迎进一步交流,如果需要源代码,欢迎与本人联系。 module gray_bit(
      clk         ,
      rst_n       ,
      value       ,
      din         ,
      din_vld   ,
      din_sop   ,
      din_eop   ,
      dout      ,
      dout_vld    ,
      dout_sop    ,
      dout_eop      
    );

    input               clk   ;
    input               rst_n   ;
    input          value   ;
    input          din   ;
    input               din_vld ;
    input               din_sop ;
    input               din_eop ;

    output            dout    ;
    output            dout_vld;
    output            dout_sop;
    output            dout_eop;

    reg               dout    ;
    reg               dout_vld;
    reg               dout_sop;
    reg               dout_eop;


    always@(posedge clk or negedge rst_n)begin
      if(rst_n==1'b0)begin
            dout <= 1'b0;
      end
      else if(din >= value)begin
            dout <= 1'b1;
      end
      else begin
            dout <= 1'b0;
      end
    end
   
    always@(posedge clk or negedge rst_n)begin
      if(rst_n==1'b0)begin
            dout_vld <= 1'b0;
      end
      else begin
            dout_vld <= din_vld;
      end
    end
   
    always@(posedge clk or negedge rst_n)begin
      if(rst_n==1'b0)begin
            dout_sop <= 1'b0;
      end
      else begin
            dout_sop <= din_sop;
      end
    end
   
    always@(posedge clk or negedge rst_n)begin
      if(rst_n==1'b0)begin
            dout_eop <= 1'b0;
      end
      else begin
            dout_eop <= din_eop;
      end
    end
   
   


end module


      明德扬专注FPGA研究,我司正在连载两本书籍: 《基于FPGA至简设计法实现的图像边缘检测系统》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=691)、《ASIC和FPGA时序约束理论与应用》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=705),有兴趣点击观看。也欢迎加入群(838209674),及时获取最新的文章信息,个性化问题也可以找我哦:Q 1277642036(陈刀刀)。
页: [1]
查看完整版本: 【基于FPGA的图像处理工程】边缘检测工程之二值化模块代码解析