前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于FPGA的中值滤波算法的实现

基于FPGA的中值滤波算法的实现

作者头像
FPGA开源工作室
发布2019-10-29 10:26:47
1K0
发布2019-10-29 10:26:47
举报
文章被收录于专栏:FPGA开源工作室FPGA开源工作室

基于FPGA的中值滤波算法的实现

作者:lee神

1.背景知识

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为3*3,5*5区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

中值滤波法对消除椒盐噪声非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大.

中值滤波在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法。

2.中值滤波理论

中值滤波是一种非线性滤波,在数字图像处理中,对于 N X N (N 为奇数) 中值滤波器,可以滤除小于或等于邻域中(N 2- 1)/2 个像素的噪声并且较好地保持图像的边缘[3]。对图像进行中值滤波处理首先要确定一个模板 N ×N ,一般选取 3X 3 或 5 ×5。中问位置的图像数据的表达式为

f (x ,y ) = med{f (x ± k,Y ± Z) , (K≤ (N -1) /2,Z≤ (N-1) /2) }

要得到模板中数据的中间值,首先要将数据按大小排序,然后根据有序的数字序列来找中问值。中值滤波排序的过程有很多成熟的算法,如冒泡排序、二分排序等,大多是基于微机平台的软件算法,而适合硬件平台的排序算法则比较少。

3.FPGA硬件实现方法

L(1,1)

L(1,2)

L(1,3)

L(2,1)

L(2,2)

L(2,3)

L(3,1)

L(3,2)

L(3,3)

如上所示,为一个3x3的图像模板,

第一步:

分别对三行像素进行排序(例:由L11,L12,L13得到L1max,L1mid,L1min);

第二步:

分别对三行像素中的最大,中间和最小分别进行排序(例:由L1max,L2max,L3max得到Lmax_max,Lmax_mid,Lmax_min);

第三步:对最大的最小,中间的中间以及最小的最大进行排序(例:由Lmax_min,Lmid_mid,Lmin_max得到midian);

FPGA的算法实现步骤基本如此。

4.MATLAB的中值滤波演示

源码:

clear all;

clc;

img = imread('flower.bmp'); %读入原始图像

figure,imshow(img); %显示原始图像

title('original');

gray_rgb = rgb2gray(img);

figure,imshow(gray_rgb); %显示原始图像转化成gray图像

title('grayoriginal');

salt_img = imnoise(img,'salt& pepper',0.02); %对原始图像加入椒盐噪声

figure,imshow(salt_img); %显示加入椒盐噪声后的图像

title('salt& pepper noise');

gray = rgb2gray(salt_img);

figure,imshow(gray); %显示加入椒盐噪声的灰度图像

title('gray');

median_filting_img = medfilt2(gray); %对加入椒盐噪声的灰度图像进行中值滤波

figure,imshow(median_filting_img);

title('medfiltersalt & pepper noise');

实验结果:

原始图像

直接由RGB转换过来的Gray图像

加入椒盐噪声的彩色图像

加入椒盐噪声后的gray图像

中值滤波后的结果

结果分析:中值滤波后的灰度图像明显去除了所有的椒盐噪声,与原始灰度图像相比图像本身被轻微模糊化。

5.FPGA的中值滤波实现

部分源码:

//-------------------------------------

//pipeline data

//-------------------------------------

reg [15:0]line0_data0;

reg [15:0]line0_data1;

reg [15:0]line0_data2;

reg [15:0]line1_data0;

reg [15:0]line1_data1;

reg [15:0]line1_data2;

reg [15:0] line2_data0;

reg [15:0]line2_data1;

reg [15:0]line2_data2;

//--------------------------------------------------------------------------

// Form an imagematrix of three multiplied by three

//--------------------------------------------------------------------------

always @(posedgeclk or negedge rst_n) begin

if(!rst_n) begin

line0_data0 <= 16'b0;

line0_data1 <= 16'b0;

line0_data2 <= 16'b0;

line1_data0 <= 16'b0;

line1_data1 <= 16'b0;

line1_data2 <= 16'b0;

line2_data0 <= 16'b0;

line2_data1 <= 16'b0;

line2_data2 <= 16'b0;

end

else if(data_in_en) begin

line0_data0 <= line0;

line0_data1 <= line0_data0;

line0_data2 <= line0_data1;

line1_data0 <= line1;

line1_data1 <= line1_data0;

line1_data2 <= line1_data1;

line2_data0 <= line2;

line2_data1 <= line2_data0;

line2_data2 <= line2_data1;

end

else ;

end

//------------------------------------------------------------------------------

// middle

//------------------------------------------------------------------------------

always @(posedgeclk or negedge rst_n) begin

if(!rst_n)

mid <= 16'd0;

else if(data_in_en) begin

if(((max_mid >= mid_mid) &&(max_mid < min_mid)) || ((max_mid >= min_mid) && (max_mid <mid_mid)))

mid <= max_mid;

else if(((mid_mid > max_mid) &&(mid_mid < min_mid)) || ((min_mid >= min_mid) && (mid_mid <max_mid)))

mid <= mid_mid;

else if(((min_mid > max_mid) &&(min_mid < mid_mid)) || ((min_mid > mid_mid) && (mid_min <max_mid)))

mid <= min_mid;

end

else ;

end

modelsim仿真

仿真结果分析:

有modelsim仿真波形来看,三个时钟后得到九个像素点的中间值,源码仿真成功。

实验结果:

原图

RGB图像加入椒盐噪声

中值滤波后

Gray图像加入椒盐噪声

中值滤波后

结果分析:

从RGB图像和灰度图像来看,去除了大部分椒盐噪声噪点,部分没有去除的原因在于部分噪点过大,或者相邻太近,被当作中间值显示出来。大家可以试验增加到两次中值滤波的实验结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA开源工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档