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);

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

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. 高斯噪声是图像中每个像素点都从原灰度值根据高斯分布做随机噪声,那么选取中值的代表意义并不大,因为各个像素都是独立同分布的。中值滤波相当于在模版内再选出了一个经过高斯噪声变换后的灰度值,滤波效果和噪声图像没有明显改善,所以比较之下均值滤波较优。
时间: 2024-11-10 00:08:19

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

Matlab图像处理系列3———空间域锐化滤波器

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 1.锐化滤波器 锐化滤波,是将图像的低频部分减弱或去除,保留图像的高频部分,即图像的边缘信息. 图像的边缘.轮廓一般位于灰度突变的地方,也就是图像的高频部分,通常用灰度差分提取边缘轮廓. 图像中边缘轮廓通常是任意方向的,因此我们的差分运算需要具有方向性.各向同性的边缘检测算子对任意方向的边缘轮廓都有相同的检测能力,那么什么是算子? 算子是一个函数空间到函数空间上的映射O:X→X.广义上的算子可以推广到任何空间,如内积空间等

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

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内可以加工处理图像以外,我们还可以将图像变换到其他空间后进行处理,这些方法称为变换域方法,最常见的变换域是频域. 使用Fourier变换把图像从空间域变换到频域,在频域内做相应增强处理,再从频域变换到空间域得到处理后的图像. 我们这里主要学习Fourier变换和FFT变换的算法,没有学过通信原理,我对信号.时域分析也不是很清楚. 2.FFT算法 (1)离散Fourier变

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

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对灰度值分布的变换. 1.灰度线性变换 (1)线性变换函数 原图向灰度值为g,通过线性函数f(x)=kx+b转换为f(g)得到灰度的线性变换. (2)代码实现 Matlab中支持矩阵作为函数参数传入,定义一个线性转换函数,利用Matlab矩阵操作,用一行代

空间域平滑滤波器

原文:https://www.cnblogs.com/zfyouxi/p/5144068.html 1.空间域增强 (1)模版运算 图像处理中.模版能够看作是n*n(n通常是奇数)的窗体.模版连续地运动于整个图像中,对模版窗体范围内的像素做相应处理. 模版运算主要分为: 模版卷积 模版排序 模版卷积是把模版内像素的灰度值和模版中相应的灰度值相乘,求平均值赋给当前模版窗体的中心像素.作为它的灰度值: 模版排序是把模版内像素的灰度值排序,取某个顺序统计量作为模版中心像素灰度值. Matlab中做模版

2_Matlab图像的空间域变换操作

1. 目的:为了达到某种视觉效果,变换输入图像的像素位置,通过把输入图像的像素位置映射到一个新的位置以达到改变原图像显示效果的目的. 2. 操作包括: ? 图像插值(Interpolation) ? 图像缩放(Resizing) ? 图像旋转(Rotation) ? 图像剪切(Cropping) 3.图像差值操作 1)原因:在处理图像的过程中,比如对图像进行缩放及旋转,这时图像中每个像素的值都要发生变化.数字图像的坐标是整数,经过这些变换之后的坐标不一定是整数,使得输入图像的像素点经过空间域变换

MATLAB图像处理基础

MATLAB图像处理基础 2.2.1 图像文件格式及图像类型 1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式. ⑵BMP(Windows Bitmap):有1位.4位.8位.24位非压缩图像,8位RLE(Run length Encoded)的图像.文件内容包括文件头(一个BITMAP FILEHEADER数据结构).位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜

学习笔记(2)---Matlab 图像处理相关函数命令大全

Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \

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

1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读] - 当当图书.html1 1.3. 数字图像处理(MATLAB版)(第二版)(本科教学版)2 1.1. MATLAB数字图像处理 第1章 图像处理与MATLAB2007a简介 第2章 图像的编码和解码 第3章 图像复原 第4章 图像处理的相关操作 第5章 图像频域变换 第6章 图像处理中的代数运算及几何变换 第7章 图像增强 第8章 图像分割与边缘检测 第9章 小波分析

空间域图像增强

增强的目的是处理图像,使其比原始图像更适合于特定应用.图像增强方法分为空间域方法(直接对图像的像素处理)和频域(傅里叶变换为基础).以这两种结合来增强图像的非常少!最好的图像处理方法是得到最好的机器可识别的结果. 空间域图像增强公式g(x,y)=T(f(x,t)).g处理后的图像,f是原始图像,T是对f的一种操作. 图像增强的三个基本类型函数:线性(正比例,反比例),对数的(对数和反对数变换),幂次的(n次幂好n次方根变换). 以下,r为原始灰度,s为变换后的灰度.线性的图像反转:s=L-1-r