3x3开窗中值滤波器的FPGA硬件实现

本文介绍了在数字逻辑课程的自由设计项目中,如何在FPGA上实现3x3开窗中值滤波器。该滤波器用于处理128*128像素图像,能有效减弱噪声并保持边缘。硬件实现包括开窗、中值计算和存储器三个模块。通过MATLAB验证,硬件实现与软件中值滤波器效果一致,平均像素值差仅为0.034,误差小于0.1%。
摘要由CSDN通过智能技术生成

数字逻辑课程的自由设计中,我编写了一个3x3开窗的中值滤波器,处理一副128*128像素值的图像,并且最终可以在FPGA上板实现。

中值滤波的本质就是对于一个n*n的窗口,将其内部的值进行排序,取中位数作为中间的点的值。通过中值滤波可以很好的减弱图片的噪声,并且报纸边缘不变。

中值滤波的硬件实现主要分为三个模块:开窗模块、中值计算模块与存储器模块。

 

【1】开窗模块主要需要利用循环同步计数器来实现,分别进行列和位置的循环,从而达到最终开窗的目的。

开窗模块的代码如下:

`timescale 1ns / 1ps
//
//  Q为0~127计数的循环计数器,pos为1~128的循环计数器                        //
//  clk为输入时钟, rst_n为低电平有效的reset信号,en为高电平有效的使能端    //
//
module Counter14(clk, rst_n, en, mm, aa, bb, cc, dd, ee, ff, gg, hh, jj);
    
    input clk, rst_n, en;

    output [13:0]mm,aa,bb,cc,dd,ee,ff,gg,hh,jj;
    wire [13:0]m_,Q_,a2,b2,c2,d2,e2,f2,g2,h2,j2;   
    wire [15:0]m,Q,pos,pos2,a,b,c,d,e,f,g,h,j;
    wire [6:0]i; 
    
    wire posm_w;
    
    not not1(posm_w, pos2[7]);
    assign Q_ = Q[13:0];        // 13位0~127计数器                            

//    assign shamt2 = shamt[13:0];// 13位移位数据
    assign mm = m[13:0];
    assign a2 = a[13:0];
    assign b2 = b[13:0];
    assign c2 = c[13:0];
    assign d2 = d[13:0];
    assign e2 = e[13:0];
    assign f2 = f[13:0];
    assign g2 = g[13:0];
    assign h2 = h[13:0];
    assign j2 = j[13:0];
    
    wire Q0, Q1, Q2, Q3, Q4, Q5;
    wire m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12;
    wire [15:0]a_,b_,c_,d_,e_,f_,g_,h_,j_;
    wire [13:0]ya,yb,yc,yd,ye,yf,yg,yh,yj;
   
    T_trigger t1(.clk(clk), .rst_n(rst_n), .EN(en), .Q(Q[0]), .QN(Q0));
    T_trigger t2(.clk(Q0),  .rst_n(rst_n), .EN(en), .Q(Q[1]), .QN(Q1));
    T_trigger t3(.clk(Q1),  .rst_n(rst_n), .EN(en), .Q(Q[2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值