均值滤波(matlab)

**均值滤波:**在图像上对目标像素给一个模板,该模板包括了其周围的临近像素,再用模板中的全体像素的平均值来代替原来像素值。
缺点:均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
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); %显示过滤后的灰度图片

原图:
在这里插入图片描述
加入噪声后图:
在这里插入图片描述
程序降噪图:
在这里插入图片描述
自带函数降噪图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43211132/article/details/87606156