中值滤波(matlab)

中值滤波

中值滤波:是一种非线性数字滤波器技术, 用于降噪。
理解:去一个模板,可为3 * 3, 5 * 5,n * n…每次从图像中取出模板大小的矩阵,将所有元素排序,取中间值放入木板的中心位置,再还原到原图中,以此类推扫描整个图像。

可先对图像进行填充,填充函数:

B = padarray(A,padsize,padval,direction)

注释:
功能:填充图像或填充数组。
A:输入图像;
B:填充后的图像;
padsize:填充的行数和列数,通常用[r ,c]来表示。
padval:表示填充方法。它的具体值和描述如下:
包括:

  • 'symmetric’表示图像大小通过围绕边界进行镜像反射来扩展;
  • 'replicate’表示图像大小通过复制外边界中的值来扩展;
  • 'circular’图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
    direction:表示填充的方向。
    包括:
  • 'pre’表示在每一维的第一个元素前填充;
  • 'post’表示在每一维的最后一个元素后填充;
  • ‘both’表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
    若参量中不包括direction,则默认值为’both’。
    若参量中不包含padval,则默认用零来填充。
    若参量中不包括任何参数,则默认填充为零且方向为’both’。
    在计算结束时,图像会被修剪成原始大小。

matlab中自带的中值滤波函数:

b=medfilt2(x0,[n,n]);

x0:需要过滤的图像;
[n,n]:模板大小
注意:此函数用于二维中值滤波,通常先灰度处理。

另一种方法程序代码

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  
        med=median(e);      %取一行的中值  
        x2(i+(n-1)/2,j+(n-1)/2)=med;   %将模板各元素的中值赋给模板中心位置的元素  
    end  
end    
d=uint8(x2);  %未被赋值的元素取原值 
figure;
imshow(d);  %显示过滤图片
x0=rgb2gray(x);  %灰度处理,灰度处理后的图像是二维矩阵
b=medfilt2(x0,[n,n]);  %matlab中自带值滤波函数
figure;
imshow(b); %显示过滤后的灰度图片


结果截图:
原图:
中值滤波(matlab)_第1张图片
加入椒盐噪声后的图:
中值滤波(matlab)_第2张图片
手写程序滤波后:
中值滤波(matlab)_第3张图片
自带函数滤波:
中值滤波(matlab)_第4张图片

你可能感兴趣的:(中值滤波(matlab))