zoukankan      html  css  js  c++  java
  • 数字图像处理之平滑滤波

    数字图像处理之平滑滤波

                                             by方阳

     

    版权声明:本文为博主原创文章,转载请标出转载地址

    http://www.cnblogs.com/fydeblog/p/6590343.html

     

    1.相关知识

    今天介绍平滑滤波的一些知识!

    相关知识:均值模板和中值滤波

    例如,3X3均值模板(取图像相邻区域的像素求和取平均代替中心像素,更高次类似)

    [ 1 1 1

      1 1 1

      1 1 1]

    然后说说中值滤波,还是以3X3来说,将3X3区域内的像素按大小值进行排列,取中间的值代替模板中心的值。

    好了,基础说完了,来实际操作吧!

    2.内容代码

    2.1 选择一副具有大小尺寸的物体图像,分别选择 3×37×725×25 等平均模板进行均值滤波模糊处理,并对不同尺寸的滤波器模板操作后的图像进行比较。

    参考代码:

    I=imread('fig620.jpg');
    I1=fy_Mean_filter(I,3);
    I2=fy_Mean_filter(I,7);
    I3=fy_Mean_filter(I,25);
    figure;
    subplot(1,3,1);
    imshow(I1);
    title('3X3');
    subplot(1,3,2);
    imshow(I2);
    title('7X7');
    subplot(1,3,3);
    imshow(I3);
    title('25X25');
    

     fy_Mean_filter函数参考代码:

    %实现均值滤波器
    %image_in为输入图像,N选择几乘几的算子,image_out为输出图像
    %  by 方阳
    function image_out=fy_Mean_filter(image_in,N)
    [m,n]=size(image_in);
    N=ones(N);
    [a,b]=size(N);
     n=n/3;%由于我的灰度图像是314x323x3的,所以除了3,你们如果是PxQ的,就不要加了
     A=zeros(m+2*(a-1),n+2*(b-1));%构造矩阵(0填充)
     B=A;%用来存放均值后A的值
     C=zeros(m,n);%存最后的输出结果
     for i=a:m+a-1
         for j=b:n+b-1
            A(i,j)= image_in(i-a+1,j-b+1);%填充图像到A
         end
     end
     [L,T]=size(A);
     %以下是实现均值相关运算
     for i=1:L-a+1
         for j=1:T-b+1
             for p=1:a
                 for q=1:b
                 B(i+(a-1)/2,j+(b-1)/2)=B(i+(a-1)/2,j+(b-1)/2)+A(p+i-1,q+j-1);
                 end
             end
         end
     end
    B=uint8(B/(a*b));
     %对运算完的B进行剪切,恢复出均值后的图像
     for x=a:m+a-1
         for y=b:n+b-1
         C(x-a+1,y-b+1)=B(x,y);
         end
     end
    image_out=uint8(C);
     
     
     
    

     运行结果:

    可见模板越大,图像越平滑,但也越模糊。

    2.2 选择一副图像,对图像加入椒盐噪声,检验两种滤波模板(3×3 平均模板和 3×3 中值滤波器)对噪声的滤波效果。


    参考代码:

    I4=imread('lena.bmp');
    I5=imnoise(I4,'salt & pepper',0.02);
    I6=fy_Mean_filter(I5,3);
    I7=fy_Mid_Filter(I5,3);
    figure;
    subplot(2,2,1);
    imshow(I4);
    title('原图');
    subplot(2,2,2);
    imshow(I5);
    title('加椒盐噪声后的图像');
    subplot(2,2,3);
    imshow(I6);
    title('均值滤波后的图像');
    subplot(2,2,4);
    imshow(I7);
    title('中值滤波后的图像');
    

     fy_Mid_Filter函数的参考代码(与fy_Mean_filter类似):

    %该函数实现中值滤波
    function image_out=fy_Mid_Filter(image_in,N)
    [m,n]=size(image_in);
    n=n/3;
    A=zeros(m+2*(N-1),n+2*(N-1));%构造矩阵
    B=A;%用来存放均值后A的值
    C=zeros(m,n);%存最后的输出结果
     for i=N:m+N-1
         for j=N:n+N-1
            A(i,j)= image_in(i-N+1,j-N+1);%填充图像到A
         end
     end
      [L,T]=size(A);
      for i=1:L-N+1
         for j=1:T-N+1
             c=A(i:i+(N-1),j:j+(N-1));
             e=c(1,:);      %是c矩阵的第一行  
            for u=2:N  
                e=[e,c(u,:)];     %将c矩阵变为一个行矩阵      
            end  
            mm=median(e);      %mm是中值  
            B(i+(N-1)/2,j+(N-1)/2)=mm;
         end
      end
     for x=N:m+N-1
         for y=N:n+N-1
         C(x-N+1,y-N+1)=B(x,y);
         end
     end
     image_out=uint8(C);
      
             
             
    

     实验结果:

    由此可见,在滤除椒盐噪声方面,中值滤波要比均值滤波要好!

  • 相关阅读:
    Elasticsearch节点下线(退役)and unassigned shards
    详解Hbase架构原理
    docker安装(yum方式)
    矩形的逆时针蛇形填数
    CentOS7安装iptables防火墙
    Linux:-bash: ***: command not found
    两个大数相乘JAVA版
    SQL Server 2012时出现命名管道提供程序: 无法打开与 SQL Server 的连接
    jstl函数库及自定义函数库
    This Android SDK requires Android Developer Toolkit version 23.0.0 or above
  • 原文地址:https://www.cnblogs.com/fydeblog/p/6590343.html
Copyright © 2011-2022 走看看