基于MATLAB的中值滤波均值滤波以及高斯滤波的实现

作者: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

4

8

1

3

9

5

7

6

g(x,y)=med{f(x-k,y-l),(k,l∈W)}

g = med[2,4,8;1,3,9;5,7,6] = 5

中值滤波后的结果

5

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。

均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

2

4

8

1

3

9

5

7

6

g(x,y)=1/m ∑f(x,y)

g = (1/8)*(2+4+8+1+9+5+7+6) = 5

均值滤波后的结果:

5

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

  1. 2.   MATLAB实现

源码:

%%-------------------------------------------------------------------

%% 2018/01/03

%% lee

%% 137194782@qq.com

%% 微信公众号:FPGA开源工作室

%%-------------------------------------------------------------------

clear all;

clc;

M = imread('timg.jpg');         %读取MATLAB中的名为timg的图像

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

title('original');

gray = rgb2gray(M);

figure,imshow(gray);                         %显示灰度图像

title('gray');

P1 = imnoise(gray,'gaussian',0.02);     %加入高斯躁声

figure,imshow(P1);                        %加入高斯躁声后显示图像

title('gaussian noise');

P2 = imnoise(gray,'salt & pepper',0.02); %加入椒盐躁声

figure,imshow(P2);                        %加入椒盐躁声后显示图像

title('salt & pepper noise');

g = medfilt2(P1);                       %对高斯躁声中值滤波

figure,imshow(g);

title('medfilter gaussian');

h = medfilt2(P2);                       %对椒盐躁声中值滤波

figure,imshow(h);

title('medfilter salt & pepper noise');

a=[1 1 1                               %对高斯躁声算术均值滤波

1 1 1

1 1 1];

l=1/9*a;

k = conv2(double(P1),double(l));

figure,imshow(k,[]);

title('arithmeticfilter gaussian');

d = conv2(double(P2),double(l));           %对椒盐躁声算术均值滤波

figure,imshow(d,[]);

title('arithmeticfilter salt & pepper noise');

sigma=8;% 标准差大小

window=double(uint8(3*sigma)*2+1);% 窗口大小一半为3*sigma

H=fspecial('gaussian', window, sigma);% fspecial('gaussian', hsize, sigma)产生滤波模板

img_gauss=imfilter(P1,H,'replicate'); %为了不出现黑边,使用参数'replicate'(输入图像的外部边界通过复制内部边界的值来扩展)

figure,  imshow(img_gauss);

title('gaussian filting gauss noise');

img_salt=imfilter(P2,H,'replicate');

figure,  imshow(img_salt);

title('gaussian filting salt pepper noise');

结果展示:

原始图像

灰度图像

加入高斯噪声的灰度图像

加入椒盐噪声的灰度图像

经过中值滤波后的高斯噪声灰度图像

经过中值滤波后的椒盐噪声灰度图像

经过均值滤波后的高斯噪声灰度图像

经过均值滤波后的椒盐噪声灰度图像

经过高斯滤波后的高斯噪声灰度图像

经过高斯滤波的椒盐噪声的灰度图像

结果分析:图像经过中值滤波后,高斯噪声没有被完全去除,椒盐噪声几乎被完全去除效果较好。经过均值滤波后不管是高斯噪声还是椒盐噪声大部分都没有被去除,只是稍微模糊化。经过高斯滤波后,高斯噪声和椒盐噪声几乎被很大程度的模糊化,原图好像被加上了一层蒙版。

欢迎大家关注我的微信公众号FPGA开源工作室和资源共享QQ群。(*  ̄3)(ε ̄ *)

基于MATLAB的中值滤波均值滤波以及高斯滤波的实现的更多相关文章

  1. 基于MATLAB的中值滤波算法实现

    在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广 ...

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

    在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...

  3. [学习opencv]高斯、中值、均值、双边滤波

    http://www.cnblogs.com/tiandsp/archive/2013/04/20/3031862.html [学习opencv]高斯.中值.均值.双边滤波 四种经典滤波算法,在ope ...

  4. OpenCv高斯,中值,均值,双边滤波

    #include "cv.h" #include "highgui.h" #include <iostream> using namespace s ...

  5. Matlab图像处理——中值滤波medfilt2问题解决

    本文链接:https://blog.csdn.net/Pxzly1117/article/details/79201772程序: I=imread('13.jpg');%读入图像imshow(I);h ...

  6. matlab中fspecial Create predefined 2-D filter以及中值滤波均值滤波以及高斯滤波

    来源: 1.https://ww2.mathworks.cn/help/images/ref/fspecial.html?searchHighlight=fspecial&s_tid=doc_ ...

  7. 学习 opencv---(8)非线性滤波:中值滤波,双边滤波

    正如我们上一篇文章中讲到的,线性滤波可以实现很多种不同的图像变换.然而非线性滤波,如中值滤波器和双边滤波器,有时可以达到更好的实现效果. 邻域算子的其他一些例子还有对 二值图像进行操作的形态学算子,用 ...

  8. verilog实现中值滤波

    前言 项目需要,想要实现算法中的其中一步即中值滤波,同时,因为图像处理部分中值滤波相对来说还是比较简单的,将中值滤波的硬件实现作为进入FPGA领域的第一次尝试.虽然说网上有较多关于中值滤波的文档,可是 ...

  9. matlab做gaussian高斯滤波

    原文链接:https://blog.csdn.net/humanking7/article/details/46826105 核心提示 在Matlab中高斯滤波非常方便,主要涉及到下面两个函数: 函数 ...

随机推荐

  1. H5页面项目的思路整理

    这是H5项目完成后的一些整理,有些理解不能非常准确,希望大家能帮忙指出. 移动端的适配 一些名词解释 visual viewport 可视视图 layout viewport 布局视图 vm 可视视图 ...

  2. Qname

    Qname的全称是qualified name. Qname由三部分组成: 1.Namespace prefix 2.A colon character(":") 3.A loca ...

  3. php数据库备份脚本

    // 备份数据库 $host = "localhost"; $user = "root"; //数据库账号 $password = ""; ...

  4. 处理eclipse启动时报java.lang.IllegalStateException

    这是我写的第一篇博客,博客我来了: 我是好学的人,希望在这上面遇到志同道合的人,对技术有更高追求的人: 重启eclipse的时候报出来 An error has occurred, See the l ...

  5. 【POJ3254】Corn Fields

    http://poj.org/problem?id=3254 题意:给你一块n*m(0<n,m<=12)的地图,其中有的方格是肥沃的(用1表示),有的方格是贫瘠的(用0表示).现在约翰要在 ...

  6. MySQL-Select语句高级应用

    1.1 SELECT高级应用 1.1.1 前期准备工作 本次测试使用的是world数据库,由mysql官方提供下载地址: https://dev.mysql.com/doc/index-other.h ...

  7. Java-----关于线程池的使用

    关于线程的相关概念不在此阐述,请百度或谷歌之 对于学习线程来说,我认为从代码开始学习比较好,前提是有一定的技术的积累,否则请关闭不用再看了~ 线程池四种实现方式. ①可缓存线程池,如果线程池长度超过处 ...

  8. 4、libgdx应用框架

    (原文:http://www.libgdx.cn/topic/29/4-libgdx%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6) 模块 作为核心.libgdx提供了六个接 ...

  9. UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 46:illegal multibyte sequence

    一. 最近使用python写入文件时,出现了如下的错误: 但是content的内容是unicode编码,不知道怎么和gbk扯上了关系,对content使用encode()和decode(),用gbk, ...

  10. Winform开发框架中工作流模块之审批会签操作

    在前面介绍了框架中工作流的几个开发过程,本篇随笔重点介绍一下日常审批环节中的具体处理过程,从开始创建表单,以及各个审批.会签过程的流转过程,希望大家对其中流程的处理有一个大概的印象. 1.请假申请表单 ...