数字图像处理中的空间滤波和图像增强

图像的空间滤波

空间卷积:

        卷积是处理线性系统的基础,以下介绍的滤波计算方式,都与卷积计算有密切关系,其计算形式与卷积的计算方式有高度的相似性。如果下面介绍的滤波算子作用于图像,就相当于一个空间相关的计算过程(卷积的对称计算——相关)。

上式中w(x,y)是一个滤波核(算子),不同的滤波方式就是由不同算子w控制的,如平均值滤波就是通过下面这个核实现的:

        利用该算子作用于图像中的每个像素,可以得到以该像素邻域的平均值为该点像素值的结果,从而实现图像的平滑滤波。需要注意的是,在图像的边缘处,由于边缘像素点没有完整的邻域,所以以该像素所拥有的邻域为变量求平均值,即要注意在边缘不是乘以1/9,而是根据具体用到的像素个数来决定。

通过改变算子w(x,y)的尺寸,可以控制以不同大小的邻域来滤波,如上面给出的例子是3阶邻域,可设置w(x,y)的尺寸为(3,5)、(5,5)、(7,11)等,因为某一点邻域尺寸必定是奇数,所以设置的算子也只能是奇数阶。

上述给出的只是最简单的平均值滤波,对应的还有其他算子,如:

                          中值滤波

扫描二维码关注公众号,回复: 13332710 查看本文章

                    4邻域拉普拉斯算子

                    8邻域拉普拉斯算子

中值滤波:将邻域的值进行排序,选取中值作为该像素的值,这种滤波对椒盐噪声的滤波很有效果,如下图,中值滤波可以很好的去除椒盐噪声。

                          椒盐噪声图

                          均值滤波

                           中值滤波

拉普拉斯算子:       

可以产生图像增强的效果,相比来说8邻域的拉普拉斯算子增强效果更好。

                         月球原图

                      4邻拉普拉斯作用

                    8邻拉普拉斯作用

MATLAB实现方式:

       函数使用格式g = imfilter(I, w, filtering_mode, boundary_option, size_option);

其中I是输入图像,w是算子,后面三个参数选项见下表

选项

描述

filtering_mode

‘corr’

‘conv’

boundary_option

P

‘replicate’

‘Symmetric’

‘circular’

size_option

‘full’

‘same’

 

滤波通过使用相关来完成,该值默认

滤波通过使用卷积来完成

 

输入的图像边界通过P值扩展,P的默认值为0,不需要加‘’

通过复制外边界的值来扩展

通过镜像反射边界来扩展

通过将图像看成是一个二维周期函数的一个周期来扩展

 

输出图像大小与扩展后的大小相同

输出原图像大小,默认值

注:boundary_option  %解决算子在图像边界的计算问题,通过扩展图像来解决。

例子:

I = imread(‘1.jpg’);     %读取当前工作路径上一张名为1的jpg格式图片

I = imresize(I, 0.5);     %缩小图片尺寸,减少计算量,可不用这一步

w = ones(11) /11^2;    %建立滤波算子,记得要除以整个算子的总和

F1 = imfilter(I, w);             %对图像进行滤波,会有黑边

F2 = imfilter(I, w, ‘replicate’); %通过复制扩展边界,可解决黑边问题

figure, imshow(I), figure, imshow(F1), figure, imshow(F2);      %显示图片

                          原图图片

        默认选项下的滤波结果(有黑边)

       以‘replicate’选项扩展下的滤波结果 

图像增强程序:

拉普拉斯算子增强计算公式

如何得到掩膜?把上述提到的算子带入滤波公式,并以‘replicate’选项扩展就可以得到,使用命令如下:

得到掩膜之后,将其叠加到原图像上,就可以获得增强效果,这里叠加形式为“原图减去掩膜”。

完整程序:

clc,clear
close all
c = 0.4;                        %scale
filename = 'moon.tif';          %文件名
I = imread(filename);           %读取图片
I = imresize(I,0.5,'bicubic');  %改变图片尺寸
w = [1,1,1;1,-8,1;1,1,1];       %拉普拉斯算子
L = imfilter(I,scale1*w,'replicate');  %获得拉普拉斯算子作用后的掩膜
imshow(I);                   
figure,imshow(L);
figure,imshow(I-L*c);

运行结果如下:

猜你喜欢

转载自blog.csdn.net/qq_34917728/article/details/82932844