FPGA图像处理-中值滤波

简介

上一篇博客介绍了如何实现3x3均值滤波,本次就来实现3x3中值滤波。
中值滤波常用于去除图像的噪声,对椒盐噪声比较有效。
在每个3x3窗口中通过排序获取中间值作为输出即可。
在FPGA中以流水线方式获取3x3窗口的中值:
在这里插入图片描述
图中详细描述了取得中值的步骤,同时也描述了每一级流水线需要完成的任务:

  1. 对3x3窗口的每一行进行排序
  2. 对3个max排序,取最小,对3个mid排序,取mid,对3个min排序,取max
  3. 对第二步产生的三个数进行排序,得到中值

模块简介

为了简单起见,输入输出都是valid+data形式:

module mid_filter(
    input clk,
    input rst_n,
    
    input iValid,
    input [7:0] iData,

    output oValid,
    output [7:0] oData
);

中值滤波算法的实现

获取3x3卷积模板

之前有介绍如何获取3x3卷积模板,感兴趣的可以看看
需要注意获取3x3卷积模板消耗了2时钟周期。

filter_3x3 inst_filter_3x3(
    .clk      (clk),
    .rst_n    (rst_n),
    .iValid   (iValid),
    .iData    (iData),
    .oValid   (filter_oValid),
    .oData_11 (filter_11), .oData_12 (filter_12), .oData_13 (filter_13),
    .oData_21 (filter_21), .oData_22 (filter_22), .oData_23 (filter_23),
    .oData_31 (filter_31), .oData_32 (filter_32), .oData_33 (filter_33)
);

排序模块

分析上述步骤,每一步都是对3个数进行排序,所以需要一个模块来完成这个任务,该模块消耗1时钟周期。

module sort_3(
    input clk,
    input rst_n,
    input [7:0] data1, data2, data3,
    output reg [7:0] max, mid, min
);
    always @(pos
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值