Matlab图像处理系列2———空间域平滑滤波器
注:本系列来自于图像处理课程实验,用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
这里我调用了一系列的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 : 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)讨论
这里并没有数学理论的数学分析。也没有给出样例。仅仅是从直观理解角度简要分析:
- 中值滤波去除椒盐效果更好。由于椒盐噪声是阶跃脉冲噪声(取值0或255且小概率出现),中值滤波是去中位数,不会被阶跃值影响,所以差点儿能全然过滤掉阶跃脉冲噪声。
而均值滤波处理阶跃值时分配权重不会变化。那么求平均值时受阶跃值影响而产生的误差就较大。因此效果不理想。
- 高斯噪声是图像中每一个像素点都从原灰度值依据高斯分布做随机噪声。那么选取中值的代表意义并不大,由于各个像素都是独立同分布的。中值滤波相当于在模版内再选出了一个经过高斯噪声变换后的灰度值,滤波效果和噪声图像没有明显改善,所以比較之下均值滤波较优。
Matlab图像处理系列2———空间域平滑滤波器的更多相关文章
- Matlab图像处理系列4———图像傅立叶变换与反变换
注:本系列来自于图像处理课程实验.用Matlab实现最主要的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内能够加工处理图像以外.我们还能够将图像变换到其它空间后进行处理.这些方法 ...
- Matlab图像处理系列1———线性变换和直方图均衡
注:本系列来自于图像处理课程实验,用Matlab实现最主要的图像处理算法 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操 ...
- Matlab图像处理系列4———傅立叶变换和反变换的图像
注意:这一系列实验的图像处理程序,使用Matlab实现最重要的图像处理算法 1.Fourier兑换 (1)频域增强 除了在空间域内能够加工处理图像以外,我们还能够将图像变换到其它空间后进行处理.这些方 ...
- MATLAB图像处理基础
MATLAB图像处理基础 2.2.1 图像文件格式及图像类型 1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像 ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- Matlab图像处理函数:regionprops
本篇文章为转载,仅为方便学术讨论所用,不用于商业用途.由于时间较久,原作者以及原始链接暂时无法找到,如有侵权以及其他任何事宜欢迎跟我联系,如有侵扰,在此提前表示歉意.----------------- ...
- MATLAB图像处理函数汇总(一)
1.applylut功能: 在二进制图像中利用lookup表进行边沿操作.语法:A = applylut(BW,lut)举例lut = makelut('sum(x(:)) == 4',2);BW1 ...
- [转载]matlab图像处理为什么要归一化和如何归一化
matlab图像处理为什么要归一化和如何归一化,一.为什么归一化1. 基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变 ...
- Matlab图像处理基础知识
Matlab图像处理基础知识 Matlab的图片以矩阵的形式存储,矩阵的行列值为图片的行列的色彩值. 1图像表达方式: 像素索引 图像被视为离散单元.如使用I(2,2)可以获取第二行第二列的像素值 空 ...
随机推荐
- java实现文件夹(包括其中的子文件夹、子文件)的复制——递归
这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹.子文件)的复制. 以下是我的实现,使用了递归: package com.simon.m ...
- 【论文阅读】Retrieving Similar Similar Styles to Parse Clothing(相关工作)
发表于2015年5月PAMI 作者: Kota Yamaguchi, M.Hadi Kiapour, Luis E. Ortiz, Tamara L. Berg 相关工作: [服装检索Clothing ...
- Clojure学习:表达式与函数
Clojure是一门Lisp方言——确切地说,是一门JVM上的Lisp方言——也是一门非纯粹的函数式语言. Clojure理所当然地秉承了Lisp“代码即数据( code is data! )”的设计 ...
- Python 2.7 学习笔记 面向对象的编程
python是一种面向对象的语言.本文介绍如何用python进行面向对象的编程. 首先我们说下对象和类,类是一种类型的定义,对象是类的实例. 一.内置对象类型(内置类) 其实我们前面已经大量用到了对象 ...
- 基于visual Studio2013解决C语言竞赛题之0521圆盘求和
题目
- redhat6.0 安装ORACLE11GR2过程记录
vawaretools安装 我的是8.0vm 1,vm=>install vmtools 2,会在redhat里出现一个虚拟光驱图标. 3,复制里面的文件到root目录下. 4,解压缩文件 ta ...
- VirtualBox开发环境的搭建详解
有关VirtualBox的介绍请参考:VirtualBox_百度百科 由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开发包,到最后生成二进制文件,中间遇到了许多的 ...
- Ubuntu下安装和配置mysql
一.检查 1.检查是否已经安装mysql whereis mysql 2.检查mysql服务是否已经启动 sudo netstat -tap | grep mysql 如果没有安装,下面就进行安装. ...
- 简单的http代理服务器
简单的http代理服务器 本项目课程是基于 Python 实现的一个简单的 HTTP 代理服务器,要求用户需了解 Python 基础和一定的 HTTP 服务器基础知识.
- cocos2d-x游戏开发系列教程-中国象棋06-游戏规则
前情回顾 上一个博文我们提到象棋运动的函数dealWithChess,但是只是说该函数完成了棋子的选择和移动功能 其实在这个函数里,在移动棋子之前,是要对棋子的移动是否合法进行判断的,我们一起来看看如 ...