数字图像处理(Matlab版)-3 空间滤波

了解滤波的概念、分类以及滤波的应用
数字图像处理(Matlab版)-3 空间滤波

滤波

滤波是图像处理中很常用的技术,主要是对图像进行操作,可以增强图像、去除图像噪声、模糊图形、锐化图像等等。
在实际操作中,空间滤波其实就是一个奇数行列的矩阵,一般称为模板或者滤波器,比如3x3,5x5,9x9…扣在图像上,对扣住的图像范围进行数学运算,然后将运算结果赋给中心点,为什么是奇数呢,因为可以保证每一个模板扣住的范围都有一个确定的中心点。

空间滤波的分类

空间滤波分为两类,线性空间滤波和非线性空间滤波,什么是线性和非线性?从数学概念上讲:线性(linear),指量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数;非线性(non-linear)则指不按比例、不成直线的关系,一阶导数不为常数。

线性空间滤波

基于计算乘积和(线形操作)的滤波。例如中心像素=x1w1+x2w2+x3w3+x4w4+x5w5…,这是一个线形操作。

执行线性空间滤波时,需理解两个相似的概念:相关和卷积。
数字图像处理(Matlab版)-3 空间滤波
相关:R5(中心像素) = R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
卷积:(模板又称核,旋转180度): R5(中心像素) = R1G9 + R2G8 + R3G7 + R4G6+ R5G5 + R6G4 + R7G3 + R8G2 + R9G1

通过函数 g = imfilter(f,w,‘replicate’) 实现相关
通过函数 g = imfilter(f,w,‘conv’,‘replicate’) 实现卷积
f为输入图像,w为滤波模板,‘conv’为卷积,即将w旋转180°,‘replicate’通过复制图像边界来扩展边界

函数 w = fspecial(‘type’,parameters),type为指定滤波器的类型,parameters进一步定义规定的滤波器。
数字图像处理(Matlab版)-3 空间滤波

>> f = imread('pig.jpg');
>> g = im2double(f);
>> w = fspecial('average');
>> g1 = imfilter(f,w,'replicate');
>> g2 = imfilter(f,w,'conv','replicate');
>> imshow(f);
>> figure
>> imshow(g1)
>> figure
>> imshow(g2)

图一为原图,图二线性,图三卷积,卷积核为3x3的平均滤波器。
数字图像处理(Matlab版)-3 空间滤波

非线性空间滤波

基于某种机制进行滤波,对于中心点的选择,可能选择最大值、最小值、平均值、中位数等等,根据实际情况而定。如中值滤波,对邻域范围内的图像像素选取中间值,赋予中心点对应的像素。
常用的非线性滤波函数:g = conlfilt(f,[m n],‘sliding’,fun),f为输入图片,,mn表示滤波区域的维数组,‘sliding’表明处理过程是mxn区域在输入图像f中逐像素的滑动,fun是个函数句柄。

使用函数colfilt

>> f = imread('pig.jpg');
>> f = rgb2gray(f);
>> f = im2double(f);
>> f = padarray(f,[3 3],'replicate');
>> g = colfilt(f,[3 3],'sliding',@gmean);
>> imshow(f)
>> figure()
>> imshow(g)

数字图像处理(Matlab版)-3 空间滤波

手工指定滤波器及增强技术的比较

>> f = imread('Fig0316(a)(moon).tif');
>> w4 = [1 1 1;1 -4 1;1 1 1];
>> w8 = [1 1 1;1 -8 1;1 1 1];
>> w4 = [0 1 0;1 -4 1;0 1 0];
>> f = im2double(f);
>> g4 = f - imfilter(f,w4,'replicate');
>> g8 = f - imfilter(f,w8,'replicate');
>> imshow(f);
>> figure,imshow(g4);
>> figure,imshow(g8);

数字图像处理(Matlab版)-3 空间滤波

利用函数medfilt2进行中值滤波

中值滤波是降低图像中椒盐噪声的有力工具

>> f = imread('Fig0318(a)(ckt-board-orig).tif');
>> fn = imnoise(f,'salt & pepper',0.2); %加上椒盐噪声
>> gm = medfilt2(fn); %默认0填充边界
>> gms = medfilt2(fn,'symmetric'); %通过边界镜像反射填充,减少边界的黑点
>> imshow(f);
>> figure
>> imshow(fn);
>> figure
>> imshow(gm);
>> figure
>> imshow(gms);

数字图像处理(Matlab版)-3 空间滤波