如何用MATLAB来实现中值滤波

在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有的点排序后的中值来代替。
中值滤波对椒盐噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。而且,中值滤波的算法比较简单,也易于用硬件实现。这篇我们先用matlab来实现中值滤波。
中值滤波方法是,对待处理的当前像素,选择一个模板3x3、5x5或其他,这里选择3x3矩阵,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。
排序算法示意图
当我们使用3x3窗口后获取领域中的9个像素,就需要对9个像素值进行排序,为了提高排序效率,排序算法思想如图所示。
(1)对窗内的每行像素按降序排序,得到最大值、中间值和最小值。
(2)把三行的最小值即第三列相比较,取其中的最大值。
(3)把三行的最大值即第一列相比较,取其中的最小值。
(4)把三行的中间值即第二列相比较,再取一次中间值。
(5)把前面的到的三个值再做一次排序,获得的中值即该窗口的中值。
sort排序函数
sort(a)若a可以使矩阵或行列向量,默认都是对a进行升序排列。
sort(a)是默认的升序,而sort(a,'descend')是降序排序。sort(a)若a是矩阵,默认对a的各列进行升序排列sort(a,dim)dim=1时相当于sort(a)
dim=2时表示对矩阵a中的各行元素升序排列
sort(a, dim, 'descend’)则对矩阵的每行进行降序排列
matlab median filter代码实现
1 %rgb_ycbcr 2 clc; 3 clear all; 4 close all; 5 6 rgb_data = imread(‘lena.jpg’);% 7 8 r_data = rgb_data(:,:,1); 9 g_data = rgb_data(:,:,2);
10 b_data = rgb_data(:,:,3);11 12 %imshow(rgb_data);13 14 [row,col, dim] = size(rgb_data); 1516 y_data = zeros(row,col);
17 cb_data = zeros(row,col);18 cr_data = zeros(row,col);19 gray_data = rgb_data;20 21 for r = 1:row 22 for c = 1:col23
y_data(r, c) = 0.299*r_data(r, c) + 0.587*g_data(r, c) + 0.114*b_data(r, c);24
cb_data(r, c) = -0.172*r_data(r, c) - 0.339*g_data(r, c) + 0.511*b_data(r, c) + 128;25
cr_data(r, c) = 0.511*r_data(r, c) - 0.428*g_data(r, c) - 0.083*b_data(r, c) + 128;26
end27 end 28 29 gray_data(:,:,1)=y_data;30 gray_data(:,:,2)=y_data;31 gray_data(:,:,3)=y_data;32 33 figure;
34 imshow(gray_data);
35 36 %median filter37 imgn = imnoise(gray_data,‘salt & pepper’,0.02);
38 39 figure;40 imshow(imgn);41 42 43 for r = 2:row-144
for c = 2:col-145
median3x3 =[imgn(r-1,c-1) imgn(r-1,c) imgn(r-1,c+1)46
imgn(r,c-1) imgn(r,c) imgn(r,c+1)47
imgn(r+1,c-1) imgn(r+1,c) imgn(r+1,c+1)];48
sort1 = sort(median3x3, 2, ‘descend’);49
sort2 = sort([sort1(1), sort1(4), sort1(7)], ‘descend’);50
sort3 = sort([sort1(2), sort1(5), sort1(8)], ‘descend’);51
sort4 = sort([sort1(3), sort1(6), sort1(9)], ‘descend’);52
mid_num = sort([sort2(3), sort3(2), sort4(1)], ‘descend’);53
median_img(r,c) = mid_num(2);54 end55 end56 57 figure;58 imshow(median_img);
处理前后比较
gray lena
加入椒盐噪声后的lena
对加入椒盐噪声后进行中值滤波的lena
可以看出,中值滤波对椒盐噪声的滤除效果真是非常的好。光看我处理后图图片可能看不出太明显对比,有兴趣的朋友可以自己尝试下。这里mtalab的排序部分基本是是按照排序算法一步步来的,完全符合fpga实现的思路,所以说掌握算法的基础原理和verilog自己就可以尝试用fpga实现了。
这里需要强调的一下是这样的滤波对图像的边缘没有进行处理,这是因为我们在求取均值或中值时,生成的3x3矩阵,第一行的像素并没有处理,同样的图像最外层边缘的像素都没有处理,不过这个对整体影响不大,所以后面再弄,下一篇来实现sobel边缘检测。

吉利斥资80亿加码动力电池,“战斗力”全面升级
安森美半导体将收购Aptina Imaging
华为轮值CEO徐直军并不看好5G技术前景
吴憨子:一文读懂储能温度传感器优缺点及应用(专家干货)
物联网实现电子身份识别
如何用MATLAB来实现中值滤波
氮化镓晶体管有什么样的应用
部署工业网络连接,你不得不知的这些方案!
王建宙:中移动今年将推千元以内3G手机
射频技术:小信号种类之外的多种S参数
闪烁光疗法或有助于对抗老年痴呆症
现有的外设接口的优缺点解析以及一种新型外设接口的构想
实时空间光调制器结构原理图
天嵌科技TQ210v6开发板产品介绍
LED照明实现高功率因数性能的无任何闪烁的调光控制技术与构建
AR电力远程巡查系统有哪些突破?
串联谐振试验装置_串联谐振接线图_串联谐振如何接线
深天马第一季度净利润3亿元 逆势增长84.79%
便携气象站与传统方法的对比,它的应用优势是什么
iPhone12或搭载苹果超薄触摸显示技术