Matlab图像处理系列2———空间域平滑滤波器
注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法
本文章是Matlab图像处理系列的第二篇文章,介绍了空间域图像处理最基本的概念————模版和滤波器,给出了均值滤波起和中值滤波器的Matlab实现,最后简要讨论去躁效果。
1.空间域增强
(1)模版运算
图像处理中,模版可以看作是n*n(n一般是奇数)的窗口,模版连续地运动于整个图像中,对模版窗口范围内的像素做相应处理。
模版运算主要分为:
- 模版卷积
- 模版排序
模版卷积是把模版内像素的灰度值和模版中对应的灰度值相乘,求平均值赋给当前模版窗口的中心像素,作为它的灰度值;
模版排序是把模版内像素的灰度值排序,取某个顺序统计量作为模版中心像素灰度值。
Matlab中做模版卷积十分高效,取出模版内子矩阵和模版权重点乘求平均即可
我们很容易想到模版的中心点是边界的特殊情况,处理边界有很多种做法:
- 忽略边界
- 外插边界
- 改变模版领域
忽略边界是模版直接在非边界点运动操作,直接忽略这些边界点。这么做的好处当然是效率高,比较适合图像尺寸较大或人们感兴趣部分不在图像边缘的情况;
外插边界顾名思义就是补齐边界点作为模版中心时缺失的像素部分,可以赋予补边像素一定的灰度值并作计算。优点在于不牺牲性能的情况下,对边界进行了处理,但是补边像素的灰度值设定势必导致边界的像素点的不连贯性,严重情况下导致失真;
改变模版领域是指在边界处理中改变模版窗口的大小,为边界做特殊处理,如3*3
模版在处理最左上角像素点时只考虑图像内点2*2
的模版运算。这样为边界特殊考虑既不失真又没有忽略任何像素点,但是在判断边界时势必会产生一定的开销,略微会影响图像处理的性能(可以分情况写,在牺牲程序复杂度的情况下弥补判断带来的开销)。
任何的边界处理都不是完美的,都在一定程度上重新分配了模版权重。
(2)空间域滤波
把模版运算运用于图像的空间域增强的技术称为空间域滤波,根据滤波频率空间域滤波分为平滑滤波(减弱和去除高频分量)和锐化滤波(减弱和去除低频分量),根据滤波计算特点又分为线性滤波和非线性滤波。
因此空间域滤波可分为:
分类 | 线性 | 非线性 |
---|---|---|
平滑 | 线性平滑 | 非线性平滑 |
锐化 | 线性锐化 | 非线性锐化 |
2.均值滤波
(1)均值滤波器
领域均值滤波顾名思义是就是求模版内像素点灰度的均值,是最经典的线性平滑滤波。空域滤波常用于去除加性噪声,通常把滤波算法封装的模块称作滤波器。
均值滤波的模版就是ones(n, n)
,模版内所有元素均是一,即他们的权重一模一样。
其他常用的线性滤波还有:
- 加权滤波:通常中心元素权重较大,且对称向外递减
- 高斯滤波:加权滤波的特例,根据高斯分布确定模版系数
(2)代码实现
先调用Matlab函数给图像添加3%的椒盐噪声:
salt = imnoise(original,'salt & pepper',0.03);
- 1
- 2
接下来构造我们的均值滤波器,我采用改变模版领域,也就是对边界条件判断做特殊处理:
function [ filtered ] = MeanFilter( noise )filtered = noise;h = size(filtered, 1);w = size(filtered, 2);for i = 1 : hfor j = 1 : wup = 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)));endendend
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
这里我调用了一系列的max
和min
函数避免写起来比较繁杂的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 : hfor j = 1 : wup = 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);endendend
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
只需要将子矩阵转成向量,再求median
即可。
注:我没有仔细研究Matlab median函数实现方式,假设它是一个平方量级的算法,那么我们有以下两种优化方式,来提升中值滤波的速度:
- 寻求效率更高的顺序统计量算法,见算法导论——期望为线性时间的选择算法和最坏情况为线性时间的选择算法
- 利用模版移动的连续性,邻近移动区域只有少量像素点不同,可以根据模版的这个性质构造线性时间的增量式顺序统计量算法
4.两种滤波器结果对比讨论
(1)平滑结果展示
下面是椒盐噪声的去除效果,中值滤波的效果更优:
下面是高斯噪声的去除效果,均值滤波的效果更优:
(2)讨论
这里并没有数学理论的数学分析,也没有给出例子,只是从直观理解角度简要分析:
- 中值滤波去除椒盐效果更好,因为椒盐噪声是阶跃脉冲噪声(取值0或255且小概率出现),中值滤波是去中位数,不会被阶跃值影响,所以几乎能完全过滤掉阶跃脉冲噪声。而均值滤波处理阶跃值时分配权重不会变化,那么求平均值时受阶跃值影响而产生的误差就较大,因此效果不理想。
- 高斯噪声是图像中每个像素点都从原灰度值根据高斯分布做随机噪声,那么选取中值的代表意义并不大,因为各个像素都是独立同分布的。中值滤波相当于在模版内再选出了一个经过高斯噪声变换后的灰度值,滤波效果和噪声图像没有明显改善,所以比较之下均值滤波较优。
Matlab图像处理系列2———空间域平滑滤波器相关推荐
- 数字图像处理系列(二)---空间域图像增强-点运算
chapter2 空间域图像增强(点增强) 1.图像增强的基本概念 在不考虑图像降质的情况下,通过经验和试探的方法,把图像感兴趣的部分进行选择性突出,而把不在意的部分进行压制,从而得到我们想要的信息. ...
- 图像处理3-经典空间域增强——空域滤波
图像处理系列: 图像处理1-经典空间域增强--灰度映射 图像处理2-经典空间域增强--直方图均衡化 空域滤波 这里根据模板是线性的还是非线性的进行分类,分别根据<图像处理与分析教程>上的方 ...
- 【笔记】数字图像处理--图像增强(空间域+频率域)
前言 本篇文章仅作为博主学习笔记使用,各位小伙伴可以简单浏览大概了解一下图像增强方面的知识呀
- 图像处理-空间域锐化滤波
个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-14.html 目录: 1.前言 2.锐化滤波 3.Robe ...
- 数字图像处理 空间域平滑 MATLAB实验
一.原理_均值滤波 设加噪图像为 f(x,y) ,经均值滤波处理后的图像为g(x,y) ,则: 式中, S是(x,y)像素点的邻域,K是S内的像素数. 最典型的S为3X3邻域,可用模板形式表示为: 这 ...
- 数字图像处理 空间域高斯低通滤波 MATLAB实验
一.原理_空间域高斯低通滤波 高斯低通滤波是一种使用的去噪滤波,可用于去除高斯噪声,且几乎没有振铃现象. 二.步骤 (1)读入原图像lena.bmp并显示: (2)对原图像分别添加高斯噪声,并显示加噪 ...
- 数字图像处理 空间域锐化 MATLAB实验
一.原理_空间域锐化 设图像为 f(x,y) , Roberts算子的定义式为: 其对应的模板为: Prewitt算子的定义式为: 其中, 其对应的模板为: Sobel算子的定义式为: 其中, 其对应 ...
- MATLAB中实现图像的空间域滤波和频率域滤波
1. 空间域滤波 空间域滤波是指在图像空间中借助模板对图像领域进行操作,处理图像每一个像素值.主要分为线性滤波和非线性滤波两类,根据功能可分为平滑滤波器和锐化滤波器.平滑可通过低通来实现,平滑的目的有 ...
- 数字图像处理——第三章 空间域图像增强(空间滤波)
文章目录 1. 空间滤波基础 2. 线性滤波器 2.1 平滑空间滤波器 2.2 锐化空间滤波器 2.2.1 基于一阶微分的图像增强--梯度法 2.2.2 基于二阶微分的图像增强--拉普拉斯算子 3. ...
- 数字图像处理——第三章 空间域图像增强(灰度变换和直方图处理)
文章目录 空间域图像增强 1. 背景知识 2. 基本灰度变换 2.1 图像反转 2.2 对数变换 2.3 幂次变换 2.4 分段线性变换函数 2.4.1 对比拉伸 2.4.2 灰度切割 2.4.3 位 ...
最新文章
- Windows环境下利用VS和mingw编译LLVM
- 20165223《Java程序设计》第八周Java学习总结
- CentOS-6.3安装使用MongoDB
- 探讨SEO与前端:使用display:none对seo的影响
- 华为交换机不同网段互访_华为交换机实现不同VLAN之间互访
- 时序动作定位:Rethinking the Faster R-CNN Architecture for Temporal Action Localization(TAL-Net)
- c java python php_php c java python 语言对比
- 【转】JAVA错误:The public type *** must be defined in its own file***
- 关于SVN更新时文件加锁的小结
- 老版资源嗅探浏览器 - 遨游浏览器稀有绿色版
- FFmpeg —— 屏幕录像机
- 速腾聚创三维激光雷达 实现cartographer 建图复现工作(代完成)
- riot账号服务器互通吗,云顶之弈手游和PC数据互通吗账号数据同步分析
- win10装win7进入不了bios的解决方法
- 华为S5700交换机开启Telnet和SSH服务
- Peewee 使用手册
- 华为mate30pro和华为p40pro哪个好
- C++之initializer_list,可变参数模板参数展开方法
- 51单片机定时器中断按键消抖(无延时)
- Question Retrieval with Distributed Representations and Participant Reputation in Community QA论文笔记
热门文章
- redhat 安装 snort
- Oracle数据库文件中的导入\导出(imp/exp命令)
- 【Android studio快捷键】代码提示
- 【android自定义控件】button样式自定义二
- matlab abs()le8,《MATLAB_语言与数学运算》练习答案
- Java与MySQL连接错误_mysql连接错误
- nagios监控php使用情况,给nagios增加监控当前php进程数的插件,并用pnp出图
- WIN计算机左侧没有桌面,电脑桌面没有计算机图标!三步解决!
- form 表单添加请求头_Golang GinWeb框架5-绑定多种请求类型的数据
- 利用hashmap的java_利用Java如何实现对HashMap的集合使用