0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用MATLAB来实现中值滤波

电子工程师 来源:未知 作者:工程师飞燕 2018-08-25 09:33 次阅读

在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有的点排序后的中值来代替。

中值滤波对椒盐噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。而且,中值滤波的算法比较简单,也易于用硬件实现。这篇我们先用MATLAB来实现中值滤波。

中值滤波方法是,对待处理的当前像素,选择一个模板3x3、5x5或其他,这里选择3x3矩阵,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。

如何用MATLAB来实现中值滤波

排序算法示意图

当我们使用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边缘检测。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    182

    文章

    2963

    浏览量

    230129
  • 图像采集
    +关注

    关注

    2

    文章

    299

    浏览量

    41252
  • 滤波
    +关注

    关注

    10

    文章

    662

    浏览量

    56584
  • 中值滤波
    +关注

    关注

    0

    文章

    14

    浏览量

    8367

原文标题:基于MATLAB的中值滤波算法实现

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA verilog HDL实现中值滤波

    ; 3、对各个模块进行语法检查、波形仿真、时序设计、调试验证; 4、与matlab中值滤波结果进行比较。 二、实现过程: 1、查看了中值
    发表于 06-18 18:50

    何用数组模版做图像的中值滤波

    有没有人用labview做过图像的中值滤波?求指教
    发表于 03-21 11:42

    请教一种可识别未受污染点的中值/均值滤波matlab程序

    小弟最近需要学习一种关于灰度图像去噪的改进算法,它需要在原始的中值滤波或者均值滤波器上加以改进,达到这样的要求:1.判断图像中哪些点是受污染的点2.若受污染,则用简单的中值/均值
    发表于 03-30 17:06

    matlab中值滤波问题

    做脉象信号 基线纠漂,用中值滤波,现在出现的问题是滤波后出现负数,波形整体与-1为基线,理论上应该是以0为基线,求大神指点,这是什么问题?function Data_m=medianfilter
    发表于 12-19 16:52

    均值滤波中值滤波MATLAB中的实现代码

    求均值滤波中值滤波实现代码,不要直接调用函数实现的,要用平移循环的代码,,均值滤波包括四领域
    发表于 04-19 17:00

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

    的一点的值用该点邻域内所有点的中值代替。中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性
    发表于 09-01 07:04

    一文教你用MATLAB实现中值滤波

    不被模糊。这些优良特性是线性滤波方法所不具有的。而且,中值滤波的算法比较简单,也易于用硬件实现。这篇我们先用MATLAB
    发表于 03-26 06:30

    请问如何实现改进的中值滤波器的设计?

    如何实现改进的中值滤波器的设计?中值滤波的基本原理是什么?中值
    发表于 04-14 06:54

    ×字形滤波窗口在Matlab自适应中值滤波算法中的应用

    本文对Matlab工具箱中的中值滤波算法进行改进,提出一种基于×字形滤波窗口的自适应中值滤波算法
    发表于 07-08 08:55 2653次阅读
    ×字形<b class='flag-5'>滤波</b>窗口在<b class='flag-5'>Matlab</b>自适应<b class='flag-5'>中值</b><b class='flag-5'>滤波</b>算法中的应用

    MATLAB实现图像中值 均值 维纳滤波 源程序代码

    MATLAB中关于图像处理的算法,其中有关于中值、均值、维纳各种滤波代码的源程序;真的不错,可以下载。
    发表于 04-15 11:17 9次下载

    基于FPGA的实时图像中值滤波算法及实现_蒋涛

    基于FPGA的实时图像中值滤波算法及实现_蒋涛
    发表于 03-19 11:38 15次下载

    图像处理基础自适应中值滤波器(基于OpenCV实现)

    本文主要介绍了自适应的中值滤波器,并基于OpenCV实现了该滤波器,并且将自适应的中值滤波器和常
    的头像 发表于 03-05 17:02 1.2w次阅读
    图像处理基础自适应<b class='flag-5'>中值</b><b class='flag-5'>滤波</b>器(基于OpenCV<b class='flag-5'>实现</b>)

    如何使用FPGA实现图像的中值滤波算法

    中值滤波和多级中值滤波的特点和适用范围,针对滤波算法的邻域性特点,设计了基于FPGA的滤波器整体
    发表于 04-01 11:21 42次下载
    如何使用FPGA<b class='flag-5'>实现</b>图像的<b class='flag-5'>中值</b><b class='flag-5'>滤波</b>算法

    中值滤波的原理和C代码

    中值滤波是一种非线性数字滤波技术,主要应用于信号处理和图像处理领域,用于减小信号中的噪声和离群值。中值滤波的核心思想是通过计算一组数据点的中
    的头像 发表于 12-05 08:00 1484次阅读
    <b class='flag-5'>中值</b><b class='flag-5'>滤波</b>的原理和C代码

    中值滤波窗口大小对结果影响有哪些

    中值滤波是一种常用的数字滤波技术,它通过将信号中的每个点用其邻域内的中值替换来实现信号的平滑和去噪。中值
    的头像 发表于 07-29 09:10 764次阅读