首页 > 编程语言 >基于FPGA的医学图像中值滤波verilog实现,包括testbench和MATLAB验证程序

基于FPGA的医学图像中值滤波verilog实现,包括testbench和MATLAB验证程序

时间:2023-05-25 22:32:01浏览次数:39  
标签:FPGA clk max submed min mid MATLAB testbench rst

1.算法仿真效果 matlab2022a/Vivado2019.2仿真结果如下:

通过matlab产生带噪声医学图片: 1.png

FPGA仿真:

2.png

通过MATLAB读取FPGA的仿真数据,并显示滤波后图像:

3.png

2.算法涉及理论知识概要 中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。 在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪。中值滤波是图像处理中的一个常用步骤,它对于斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)来说尤其有用。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用。 中值滤波器的主要思想是通过入口来遍历信号入口,用邻居入口的中值替换每个入口。邻居的模式被称为“窗口”,它通过入口滑动,覆盖整个信号。对于一维信号,最明显的窗口只是前后几项,而2D(或更高维)信号(如图像)则可能有更复杂的窗口模式(如“盒子”或“十字”模式)。请注意,如果窗口中有奇数个条目,则中位数很容易定义:在窗口中的所有条目都按数字排序之后,这只是中间值。对于偶数的条目,有不止一个可能的中位数。

   通常,大部分的计算工作和时间花费在计算每个窗口的中值上。由于滤波器必须处理信号中的每个条目,对于像图像这样的大信号,这个中值计算的效率是确定算法运行速度的关键因素。上面描述的天真的实现将窗口中的每个条目进行排序以找到中间值;然而,由于只需要列表中的中间值,所以选择算法可以更有效。此外,某些类型的信号(通常是图像的情况)使用整数表示:在这些情况下,直方图因为从窗口到窗口更新直方图是简单的,并且找到直方图的中值并不特别繁琐,所以中值可以更有效得多。
   中位数滤波的主要思想是逐条运行信号,用相邻条目的中位数替换每个条目。邻居的模式被称为窗口,它在整个信号上逐条滑动。对于一维信号来说,最明显的窗口只是前面和后面的几个条目,而对于二维(或更高维度)数据来说,窗口必须包括给定半径或椭圆区域内的所有条目(即中位数滤波器不是一个可分离的滤波器)。
    中位数滤波是一种平滑技术,线性高斯滤波也是如此。所有的平滑技术都能有效地去除信号的平滑斑块或平滑区域的噪声,但对边缘有不利的影响。但通常情况下,在减少信号中的噪声的同时,保留边缘也很重要。例如,边缘对于图像的视觉外观是至关重要的。对于小到中等程度的高斯噪声,在给定的固定窗口大小下,中值滤波器在去除噪声的同时保留边缘方面明显优于高斯模糊。然而,对于高水平的噪声,它的性能并不比高斯模糊好多少,而对于斑点噪声和盐和胡椒噪声(冲动噪声),它特别有效。正因为如此,中值滤波在数字图像处理中得到了非常广泛的应用。

3.Verilog核心程序

submed submed_u1(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({R11,R12,R13}), 
    .max   (max1), 
    .mid   (mid1), 
    .min   (min1)
);
    
wire [7:0] max2, mid2, min2;
submed submed_u2(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({R21,R22,R23}), 
    .max   (max2), 
    .mid   (mid2), 
    .min   (min2)
); 
    
wire [7:0] max3, mid3, min3;
submed submed_u3(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({R31,R32,R33}), 
    .max   (max3), 
    .mid   (mid3), 
    .min   (min3)
);   
    
 
wire [7:0] min_max1;
submed submed_u11(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({max1,max2,max3}), 
    .max   (), 
    .mid   (), 
    .min   (min_max1)
);
 
wire [7:0] mid_mid1;
submed submed_u12(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({mid1,mid2,mid3}), 
    .max   (), 
    .mid   (mid_mid1), 
    .min   ()
);
       
       
wire [7:0] max_min1;
submed submed_u13(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({min1,min2,min3}), 
    .max   (max_min1), 
    .mid   (), 
    .min   ()
);      
submed submed_u44(
    .clk   (i_clk),
    .rst   (i_rst),
    .images({min_max1,mid_mid1,max_min1}), 
    .max   (), 
    .mid   (o_medfilter), 
    .min   ()
);      
 
 
endmodule

标签:FPGA,clk,max,submed,min,mid,MATLAB,testbench,rst
From: https://blog.51cto.com/matworld/6351617

相关文章

  • 基于Lucas-Kanade算法的双目图像光流提取matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的图像,这些变化信息在不同时间,不断的流过眼......
  • m图像多重分形谱计算matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       多重分形(multifractal)一种分为多个区域的复杂分形结构。为了对分形的复杂性和不均匀性进行更细致地刻画,需引进它的概率分布函数及其各阶矩的计算,由此构成了分形维数的一个连续谱,称之为多重分......
  • 基于FPGA的医学图像中值滤波verilog实现,包括testbench和MATLAB验证程序
    1.算法仿真效果matlab2022a/Vivado2019.2仿真结果如下: 通过matlab产生带噪声医学图片:   FPGA仿真:   通过MATLAB读取FPGA的仿真数据,并显示滤波后图像:   2.算法涉及理论知识概要       中值滤波是一种非线性数字滤波器技术,经常用于去除图像或......
  • fpga 一月学习记录
    fpga一月学习记录4月初,导师突然接了一个fpga开发的项目,把我和另一个同学叫过来,让我们速成,学习了2个星期Verilog语法,了解了一下vivado的使用,虽然最终项目因故中止,但是一个月的fpga学习也值得记录一下。我的主要工作内容是实现一个数据接口转换,具体因为没有下板成功就不说了,主要是......
  • 基于Matlab模拟毫米波雷达接收发射信号仿真
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【无人机三维路径规划】基于遗传算法实现无人机三维路径规划含Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 基于状态机方法的按键消抖模块FPGA实现,包括testbench
    1.算法仿真效果vivado2019.2仿真结果如下:   系统RTL图:   2.算法涉及理论知识概要        状态机,FSM(FiniteStateMachine),也称为同步有限状态机从。指的是在同步电路系统中使用的,跟随同步时钟变化的,状态数量有限的状态机,简称状态机。 状态机分类 ......
  • 基于LSTM网络的时间序列数据预测matlab性能仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要     长短期记忆网络(LSTM,LongShort-TermMemory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在......
  • 不同Radix实现方式的快速傅里叶变换复杂度matlab仿真分析,对比基2,基4以及分裂基
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       快速傅里叶变换(fastFouriertransform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计......
  • 不同Radix实现方式的快速傅里叶变换复杂度matlab仿真分析,对比基2,基4以及分裂基
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要快速傅里叶变换(fastFouriertransform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶......