MATLAB数字图像处理(3)滤波

滤波是图像处理中常用的技术,可以锐化图像、模糊图像、去除噪声、增强图像等等。这里只讲空间滤波,频率域滤波将在以后讲。
空间滤波:简单来说,是用一个模板(3x3矩阵、5x5矩阵…一般为奇数)扣在图像上,用模板中每一个元素对扣住的范围中对应的像素进行数学操作,将产生的数值赋给模板中心点所对应。

分类:线形空间滤波、非线形空间滤波。

线性空间滤波:基于计算乘积和(线形操作)的滤波。例如New=a*g1+b*g2+c*g3+d*g4+e*g5,这是一个线形操作。

非线性空间滤波:基于某种机制进行滤波,如中值滤波,对模板范围内的图像像素选取中间值,赋予中心点对应的像素。

线性空间滤波

这里必须要理解两个概念:相关和卷积。这两个在具体运算上与前面所有的空间滤波相同。两个在运算上的不同点是,卷积在进行运算前将模板旋转180度(逆、顺时针均可以)。卷积和相关的具体概念容易把人讲糊涂,这里只讲具体应用,只需要知道怎么运算的即可。

运算过程:
这里写图片描述
相关:R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
卷积(模板又称核,旋转180度):
R5(中心像素)=R1G9 + R2G8 + R3G7 + R4G6+ R5G5 + R6G4 + R7G3 + R8G2 + R9G1

MATLAB中提供了函数imfilter()进行滤波操作。

g=imfilter(f,w,'replicate')

f是待处理的图像,w是滤波器,replicate指定通过复制图像边界外的值来扩展。MATLAB提供了函数fspecial(),生成各类二维线形滤波器,函数如下。

w=fspecial('type'parameters)

type滤波器的类型,parameters,可选参数。

下面来运行一下,看看如何应用和效果。

  f=imread('1.jpg');
  imshow(f),title('原图');
 w=fspecial('average');%3x3(默认)均匀滤波器
  f1=imfilter(f,w,'replicate');
  figure,imshow(f1),title('线性滤波直方图');

右侧滤波后的图片模糊了

非线性空间滤波

非线性空间滤波:基于设计滤波器保卫的邻域内的像素的非线性操作,例如,令每一个中心点响应等于邻域内最大的像素值。

对于非线性空间滤波,由于其规则太多如:取最大值,最小值,中值或者定义一个非线性函数进行运算。这里只讲最著名、常用的中值滤波。
中值滤波常会用在去除噪声上,特别是椒盐噪声。具体应用如下

f=imread('1.jpg');
f=imnoise(f,'salt & pepper',0.2);
g=medfilt2(f);
g=medfilt2(f,'symmetric');
subplot(1,2,1);imshow(f);title('噪声污染');
subplot(1,2,2);imshow(g);title('中值滤波');

这里写图片描述

注:MATLAB提供了函数参数手册(help),点击?即可查询各种函数的用法。当然是纯英文的。以前看过一句话, 想要学好计算机,英语一定要好好学,不然你可能连一个函数原型的英文帮助文档都看不懂。

猜你喜欢

转载自blog.csdn.net/KimLK/article/details/78073449