图像滤波算法整理

您所在的位置:网站首页 图像滤波模板 图像滤波算法整理

图像滤波算法整理

2023-08-13 18:00| 来源: 网络整理| 查看: 265

首先分为平滑空间滤波器和锐化空间滤波器来进行介绍。平滑空间滤波器主要用于模糊处理和降低噪声,主要两类:均值滤波器和中值滤波器。锐化空间滤波器主要是:拉普拉斯算子和梯度算子。

一、均值滤波方法:对高斯噪声的抑制效果较好。

       假设我们有一个3*3的模板,系数全为1,那么欲求的中心点像素值就是以该模板为中心的9个像素的平均值来代替。根据定义可知,该滤波器具有模糊边缘的负面效应。通过空间均值处理来模糊图像,可以突出感兴趣的物体,即将部分图像融入背景中 ,部分图像‘突出显示’出来,达到平滑图像的作用,重点理解平滑对于图像的意义。

MATLAB代码:

set(gca,'Fontname','Monospaced'); I=imread('a.tif'); subplot(231),imshow(I), title('origin image'); %I=rgb2gray(I); %I1=imnoise(I,'salt & pepper',0.02); %subplot(2 3 2) %imshow(I1) %title('添加椒盐噪声的图像'); I1 = I; k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波 k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波 k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波 k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波 k5=filter2(fspecial('average',15),I1)/255; %进行15*15模板平滑滤波 subplot(232),imshow(k1);title('3*3 smoothing filtering'); subplot(233),imshow(k2);title('5*5 smoothing filtering'); subplot(234),imshow(k3);title('7*7 smoothing filtering'); subplot(235),imshow(k4);title('9*9 smoothing filtering'); subplot(236),imshow(k5);title('15*15 smoothing filtering');

结果:可以看出,在模板逐渐扩大的过程中,图像的锯齿边缘被模糊掉,颗粒状的噪声也没有了,达到了我们想要的效果,但是在9*9甚至更大的模板,图像开始失真,图像过度模糊了。所以我们在图像平滑的时候,要选最佳的模板尺寸。 

二、中值滤波方法:对椒盐噪声的抑制效果较好。

中值滤波器是一种统计排序滤波器,即图像像素等于周围像素排序后的中值,加入模板为3*3,则目标点的像素等于排序后的第五个像素的值。中值滤波器特别适用于椒盐噪声。由定义知,中值滤波器对于孤立点特别敏感,还可以保持图像的边缘特性。由中值滤波扩展出来的还有最大值滤波器和最小值滤波器。

MATLAB代码:

%=======second part====== I = imread('book_XRaySalt.tif'); subplot(131),imshow(I);title('原椒盐噪声图像'); k1=filter2(fspecial('average',3),I)/255; %进行3*3模板平滑滤波 k2=medfilt2(I,[3,3]); %进行3*3模板中值滤波 subplot(132),imshow(k1);title('3*3模板均值滤波'); subplot(133),imshow(k2);title('3*3模板中值滤波'); I(100:110,100:110), k2(100:110,100:110),

结果:

三、高斯滤波方法:

        高斯滤波器是利用高斯核与输入图像的每个点进行卷积。提到高斯,就想到‘草帽’,更能记住它。高斯滤波器是一种平滑线性滤波器,使用高斯滤波器对图像进行滤波,其效果是降低图像灰度的“尖锐”变化,也就是使图像“模糊”了。高斯滤波对于抑制服从正态分布的噪声效果非常好,其代价是使图像变得“模糊”。当然,有时对图像进行平滑滤波的目的就是让图像变得模糊。

一维高斯分布函数:                                                                                二维高斯分布函数:

                                          

它们的图像分别为:

            

其3*3与5*5的卷积核对应如下:

MATLAB实现:

img = imread('lena.tif'); w = fspecial('gaussian',[5,5],0.5); %replicate:图像大小通过赋值外边界的值来扩展 %symmetric 图像大小通过沿自身的边界进行镜像映射扩展 I = imfilter(img,w,'replicate'); subplot(1,2,1);title('原图像');imshow(img); subplot(1,2,2);title('高斯滤波后的图像');imshow(I);

从结果可以看出,图像整体模糊平滑了,特别是头发和帽子部分,是图像的尖锐变化被降低了吧。

 

参考图像锐化(增强)和边缘检测:https://blog.csdn.net/mghhz816210/article/details/37820483

四、拉普拉斯算法进行图像锐化

       拉普拉斯算子是一种二阶微分算子,其强调的是图像中灰度的突变,通过将原图像和拉普拉斯图像加在一起,可以达到锐化图像的作用,最终在保留图像的背景信息的前提下从而突出细节。拉普拉斯锐化模板在边缘检测中非常有用。因为图像的边缘就是那些灰度跳变厉害的的区域。

拉普拉斯算子模板:

实现代码:

%============================================================= f=imread('moon.jpg'); subplot(2,3,1),imshow(f); title('原图像'); w4=fspecial('laplacian',0), g1=imfilter(f,w4,'replicate'); subplot(2,3,2),imshow(g1); title('拉普拉斯模板滤波后的图像'); f2=im2double(f);%将f转换归一化的double类图像,然后进行滤波 g2=imfilter(f2,w4,'replicate'); % imshow(img,[low high]) [low high]用于指定图像显示的灰度范围 对于double数据认为是0-1范围内 subplot(2,3,3),imshow(g2,[]); title('含有负值的滤波结果'); g=f2-g2; subplot(2,3,4),imshow(g);title('原图-含有负值的滤波结果'); %w8=[0 1 0;1 -4 1;0 1 0], w8=[1 1 1;1 -8 1;1 1 1], g8=f - imfilter(f,w8,'replicate'); subplot(2,3,5),imshow(g8);title('对角线中心为8的拉普拉斯模板'); %=============================================================

五、梯度算子进行图像锐化

     相比于拉普拉斯二阶微分算子,梯度算子一一阶微分算子,更为简单。其实个人觉得,把梯度算子放在‘ 边缘检测’更为合适。

f(x,y)在X方向和Y方向的梯度:

经典模板:

车道线检测之-sobel算子边缘检测原理:https://blog.csdn.net/aiailab/article/details/82849158

代码实现:

代码中增加注释,很详细的介绍了求梯度算子锐化的过程。

% soble algorithm % ZhangFL at SWPU 2017.04.26 % Sobel算子中的垂直模板得到的梯度图,由于梯度方向与边缘走向垂直,所以该梯度图对水平边缘有较强的响应,从而水平细节信息非常清晰。 % sobel算子中的水平模板得到的梯度图,它对垂直边缘有较强的响应,垂直细节非常清晰。 % Sobel算子水平和垂直方向叠加的梯度图,水平和垂直细节都非常清晰。 A=imread('house.tif'); %I=rgb2gray(A); I=A; subplot(2,2,1); imshow(I); title('原图'); k2=filter2(fspecial('average',5),I)/255; %进行5*5模板平滑滤波 I=k2; hx=[-1 -2 -1;0 0 0 ;1 2 1], %产生sobel垂直梯度模板 hy=hx', %产生sobel水平梯度模板 gradx=filter2(hx,I,'same'); gradx=abs(gradx); %计算图像的sobel垂直梯度 subplot(2,2,2); imshow(gradx,[]); title('图像的sobel垂直梯度'); grady=filter2(hy,I,'same'); grady=abs(grady); %计算图像的sobel水平梯度 subplot(2,2,3); imshow(grady,[]); title('图像的sobel水平梯度'); grad=gradx+grady; %得到图像的sobel梯度 subplot(2,2,4); imshow(grad,[]); title('图像的sobel梯度(使用5*5模板平滑滤波)');

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3