简单平滑滤波器

(1)基本原理

不同的空间滤波器主要就在于所使用的模板(卷积核)不同。图像的简单平滑模板如下图所示(模板前要乘以衰减因子1/9):
这里写图片描述
根据模板操作(卷积运算)的规则不难发现,图像的简单平滑就是对图像中一定邻域内的像素灰度值求平均值,将平均的结果作为中心像素的灰度保存在结果图中(注意,不要在原图上进行赋值,新得的像素因另起一个图像矩阵保存),这样就可以减少图像中的噪声影响。事实上不难发现,这种方法只是把噪点的影响分配到邻域的几个像素中,从而直观上减少了噪点的影响。

(2)编码实现

% ***************************Copyright 2016[c]**************************
% ************************Declaration************************************
% File name:        averaging_filter
% Author:           靖Harry                                        
% Date:             29-Jul-2016 21:16:52                                  
% Version Number:   1.0
% Abstract:  
%   averaging_filter.            
% *********************************end*********************************
clear
clc
I1=imread('lena_pepper.png');%带有椒盐噪声的图像
I2=I1;  %模板操作后得到的像素值不能覆盖原图像中的值,放在图像矩阵I2中
[m,n]=size(I1);
h=[1,1,1;1,1,1;1,1,1]/9;   %简单平滑模板

%模板操作过程(加权平均求和)
for a=2:m-1
   for b=2:n-1
      I2(a,b)=0; %由于I2是原图像I1复制而来,操作前先清零
      for i=-1:1
         for j=-1:1
            I2(a,b)=I1(a+i,b+j)*h(i+2,j+2)+I2(a,b); 
         end
      end
   end
end
%用自带函数求得结果作比较,由于上述操作其实是相关操作,因此用‘corr’
I3=imfilter(I1,h,'corr');

%打印结果,作比较
imshow(I1),title('原图像');
figure,imshow(I2),title('自己编写的函数');
figure,imshow(I3),title('matlab自带函数');

这里写图片描述
这里写图片描述
这里写图片描述
仔细对比后两幅图可以看出,自己编写的函数与imfilter得出的图像完全一致(边缘处理已忽略),证明对算法的理解是正确的。而与原图做对比可以发现,降噪的效果并不好,使用简单平滑处理的方法消除噪声往往是以大幅度降低图像清晰度为代价的。并且如前面讨论的那样,简单平滑处理实质上并没有消除噪声,只是将噪声的影响平均分配而使人眼不易察觉而已。

猜你喜欢

转载自blog.csdn.net/u013608424/article/details/73017271