**均值滤波:**在图像上对目标像素给一个模板,该模板包括了其周围的临近像素,再用模板中的全体像素的平均值来代替原来像素值。
缺点:均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
matlab自带函数:
H = fspecial('average',hsize) %为均值滤波,参数为hsize代表模板尺寸,默认值为【3,3】。
H = fspecial('disk',radius) %为圆形区域均值滤波,参数为radius代表区域半径,默认值为5.
另一种方法:
x=imread('G:\matlab\1.jpg');%需要过滤的图像
n=3; %模板大小
[height, width]=size(x); %获取图像的尺寸(n小于图片的宽高)
figure;
imshow(x);%显示原图
% x = padarray(x,[3,3]); %对图像边缘进行填充
x = imnoise(x,'salt & pepper'); %加入椒盐噪声
figure;
imshow(x); %显示加入噪声后的图片
x1=double(x); %数据类型转换
x2=x1; %转换后的数据赋给x2
for i=1:height-n+1
for j=1:width-n+1
c=x1(i:i+(n-1),j:j+(n-1)); %在x1中从头取模板大小的块赋给c
e=c(1,:); %e中存放是c矩阵的第一行
for u=2:n %将c中的其他行元素取出来接在e后使e为一个行矩阵
e=[e,c(u,:)];
end
s=sum(e); %取一行的和
x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %将模板各元素的均值赋给模板中心位置的元素
end
end
d=uint8(x2); %未被赋值的元素取原值
figure;
imshow(d); %显示过滤图片
C=rgb2gray(x); %灰度处理,灰度处理后的图像是二维矩阵
A=fspecial('average',[n,n]); %matlab中自带值滤波函数
b=imfilter(C,A);
figure;
imshow(b); %显示过滤后的灰度图片
原图:
加入噪声后图:
程序降噪图:
自带函数降噪图: