注:本系列来自于图像处理课程实验,用Matlab实现最主要的图像处理算法

本文章是Matlab图像处理系列的第二篇文章。介绍了空间域图像处理最主要的概念————模版和滤波器,给出了均值滤波起和中值滤波器的Matlab实现。最后简要讨论去躁效果。


1.空间域增强

(1)模版运算

图像处理中。模版能够看作是n*n(n通常是奇数)的窗体。模版连续地运动于整个图像中,对模版窗体范围内的像素做相应处理。

模版运算主要分为:

  • 模版卷积
  • 模版排序

模版卷积是把模版内像素的灰度值和模版中相应的灰度值相乘,求平均值赋给当前模版窗体的中心像素。作为它的灰度值;

模版排序是把模版内像素的灰度值排序,取某个顺序统计量作为模版中心像素灰度值。

Matlab中做模版卷积十分高效,取出模版内子矩阵和模版权重点乘求平均就可以

我们非常easy想到模版的中心点是边界的特殊情况。处理边界有非常多种做法:

  • 忽略边界
  • 外插边界
  • 改变模版领域

忽略边界是模版直接在非边界点运动操作,直接忽略这些边界点。这么做的优点当然是效率高,比較适合图像尺寸较大或人们感兴趣部分不在图像边缘的情况;

外插边界顾名思义就是补齐边界点作为模版中心时缺失的像素部分,能够赋予补边像素一定的灰度值并作计算。优点在于不牺牲性能的情况下,对边界进行了处理。可是补边像素的灰度值设定势必导致边界的像素点的不连贯性,严重情况下导致失真;

改变模版领域是指在边界处理中改变模版窗体的大小,为边界做特殊处理,如3*3模版在处理最左上角像素点时仅仅考虑图像内点2*2的模版运算。这样为边界特殊考虑既不失真又没有忽略不论什么像素点。可是在推断边界时势必会产生一定的开销。稍微会影响图像处理的性能(能够分情况写,在牺牲程序复杂度的情况下弥补推断带来的开销)。

不论什么的边界处理都不是完美的,都在一定程度上又一次分配了模版权重。

(2)空间域滤波

把模版运算运用于图像的空间域增强的技术称为空间域滤波。依据滤波频率空间域滤波分为平滑滤波(减弱和去除高频分量)和锐化滤波(减弱和去除低频分量),依据滤波计算特点又分为线性滤波非线性滤波

因此空间域滤波可分为:

分类 线性 非线性
平滑 线性平滑 非线性平滑
锐化 线性锐化 非线性锐化

2.均值滤波

(1)均值滤波器

领域均值滤波顾名思义是就是求模版内像素点灰度的均值。是最经典的线性平滑滤波。空域滤波经常使用于去除加性噪声,通常把滤波算法封装的模块称作滤波器。

均值滤波的模版就是ones(n, n),模版内全部元素均是一,即他们的权重一模一样。

其它经常使用的线性滤波还有:

  • 加权滤波:通常中心元素权重较大,且对称向外递减
  • 高斯滤波:加权滤波的特例,依据高斯分布确定模版系数

(2)代码实现

先调用Matlab函数给图像加入3%的椒盐噪声

salt = imnoise(original,'salt & pepper',0.03);

接下来构造我们的均值滤波器。我採用改变模版领域。也就是对边界条件推断做特殊处理:

function [ filtered ] = MeanFilter( noise )

    filtered = noise;

    h = size(filtered, 1);
w = size(filtered, 2); for i = 1 : h
for j = 1 : w
up = max(i - 1, 1);
down = min(i + 1, h);
left = max(j - 1, 1);
right = min(j + 1, w);
filtered(i, j) = mean(mean(noise(up : down, left : right)));
end
end end

这里我调用了一系列的maxmin函数避免写起来比較繁杂的if语句。确定了模版边界后直接调用mean函数求均值,淡化了模版卷积的概念(后面边缘检測中会显式地做模版卷积)。

3.中值滤波

(1)中值滤波器

中值滤波选取模版中像素灰度值的中位数赋给模版中心像素,是经典的非线性平滑滤波。

理想情况下,中值滤波的椒盐去噪效果优于均值滤波。是由于它能有效的消除孤立阶跃脉冲噪声。后面将比較分析。

2-D中值滤波也能够选取各种各样的模版,我在这里就选取最简单的8-领域模版做演示。

(2)代码实现

相同我检測边界。做特殊处理:

function [ filtered ] = MedianFilter( noise )
filtered = noise; h = size(filtered, 1);
w = size(filtered, 2); for i = 1 : h
for j = 1 : w
up = max(i - 1, 1);
down = min(i + 1, h);
left = max(j - 1, 1);
right = min(j + 1, w);
sub = noise(up : down, left : right);
sub = sub(:);
filtered(i, j) = median(sub);
end
end end

仅仅须要将子矩阵转成向量。再求median就可以。

注:我没有细致研究Matlab median函数实现方式,如果它是一个平方量级的算法,那么我们有以下两种优化方式,来提升中值滤波的速度:

  • 寻求效率更高的顺序统计量算法。见算法导论——期望为线性时间的选择算法最坏情况为线性时间的选择算法
  • 利用模版移动的连续性。邻近移动区域仅仅有少量像素点不同,能够依据模版的这个性质构造线性时间的增量式顺序统计量算法

4.两种滤波器结果对照讨论

(1)平滑结果展示

以下是椒盐噪声的去除效果,中值滤波的效果更优:

以下是高斯噪声的去除效果,均值滤波的效果更优:

(2)讨论

这里并没有数学理论的数学分析。也没有给出样例。仅仅是从直观理解角度简要分析:

  1. 中值滤波去除椒盐效果更好。由于椒盐噪声是阶跃脉冲噪声(取值0或255且小概率出现),中值滤波是去中位数,不会被阶跃值影响,所以差点儿能全然过滤掉阶跃脉冲噪声。

    而均值滤波处理阶跃值时分配权重不会变化。那么求平均值时受阶跃值影响而产生的误差就较大。因此效果不理想。

  2. 高斯噪声是图像中每一个像素点都从原灰度值依据高斯分布做随机噪声。那么选取中值的代表意义并不大,由于各个像素都是独立同分布的。中值滤波相当于在模版内再选出了一个经过高斯噪声变换后的灰度值,滤波效果和噪声图像没有明显改善,所以比較之下均值滤波较优。

Matlab图像处理系列2———空间域平滑滤波器的更多相关文章

  1. Matlab图像处理系列4———图像傅立叶变换与反变换

    注:本系列来自于图像处理课程实验.用Matlab实现最主要的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内能够加工处理图像以外.我们还能够将图像变换到其它空间后进行处理.这些方法 ...

  2. Matlab图像处理系列1———线性变换和直方图均衡

    注:本系列来自于图像处理课程实验,用Matlab实现最主要的图像处理算法 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操 ...

  3. Matlab图像处理系列4———傅立叶变换和反变换的图像

    注意:这一系列实验的图像处理程序,使用Matlab实现最重要的图像处理算法 1.Fourier兑换 (1)频域增强 除了在空间域内能够加工处理图像以外,我们还能够将图像变换到其它空间后进行处理.这些方 ...

  4. MATLAB图像处理基础

    MATLAB图像处理基础 2.2.1 图像文件格式及图像类型 1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像 ...

  5. Atitit MATLAB 图像处理 经典书籍attilax总结

    Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...

  6. Matlab图像处理函数:regionprops

    本篇文章为转载,仅为方便学术讨论所用,不用于商业用途.由于时间较久,原作者以及原始链接暂时无法找到,如有侵权以及其他任何事宜欢迎跟我联系,如有侵扰,在此提前表示歉意.----------------- ...

  7. MATLAB图像处理函数汇总(一)

    1.applylut功能: 在二进制图像中利用lookup表进行边沿操作.语法:A = applylut(BW,lut)举例lut = makelut('sum(x(:)) == 4',2);BW1 ...

  8. [转载]matlab图像处理为什么要归一化和如何归一化

    matlab图像处理为什么要归一化和如何归一化,一.为什么归一化1.   基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变 ...

  9. Matlab图像处理基础知识

    Matlab图像处理基础知识 Matlab的图片以矩阵的形式存储,矩阵的行列值为图片的行列的色彩值. 1图像表达方式: 像素索引 图像被视为离散单元.如使用I(2,2)可以获取第二行第二列的像素值 空 ...

随机推荐

  1. vs2013内置IISExpress相关问题

    问题描述,以前做的程序迁移到vs2013后出现500.22问题. HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设 ...

  2. Win7 x64安装Paramiko出问题

    今天上午windows下配置paramiko环境时出现问题,随手记录下来.   先说一下我的环境: win7 x64 旗舰版.Python3.5.0.pip8.1.0 pip install para ...

  3. jQuery中的index方法介绍

    从jq api手册摘过来的内容,index这个方法在写 tab silder 之类的组件还是比较有用的说. js没有传统的函数重载的概念,但是根据传入参数的不同,js的函数可以完成不同的功能,也可说是 ...

  4. A shallow summary of oracle log miner

    Sometimes, we should recover one or more rows data which is deleted carelessly by users, but it is n ...

  5. 凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网

    凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网 凡客副总裁被曝离职:或因IPO受阻 2013年05月07日 00:56   每日经济新闻    我有话说     每经 ...

  6. matrix(dp)

    matrix Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  7. 你跟大牛之间仅仅差一个google

    google在中国被墙的厉害,http://209.116.186.231/ 这个地址能够訪问google.另外.有VPN或者某个奇妙的浏览器也能够. 非技术人员,还能够凑合着用百度,可是技术人员必须 ...

  8. Cocos2d-x 3.0final手机游戏开发视频教程2014 - 自学编程 -(陆续更新中)

    内容: 非常多人问我:沈老师,要不要更新引擎版本号到3.0,更新这么快,以后会不会每一个月都有一次,好怕呀. 我说:无论你曾经是哪个版本号,3.0final是一个架构级别的升级,能够在新项目中果断升级 ...

  9. 关于apche无缘无故个启动不了,解决方法

    1. 对于用户不小心把apache下的conf文件不小心给修改了,可那会导致,启动不了apache, 解决办法可以重新下载一个, 64为  32位  下载地址 http://www.veryhuo.c ...

  10. matlab中s函数编写心得(转)

    Part I: 所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab.C.C++.Fortran.Ada等语言来写, 这儿我只介绍怎样用m ...