zoukankan      html  css  js  c++  java
  • 二维高斯滤波器的两种实现

    高斯公式:

    [G(x,y)=frac{1}{{2pi{sigma ^2}}}{e^{ - frac{{{x^2} + {y^2}}}{{2{sigma ^2}}}}} ]

    代码

    clear;close all;clc
    
    % 高斯滤波器参数
    s1 = 15; s2 = 20; 
    sigma = 15;
    
    % 按公式编写
    [x, y]=meshgrid(-((s2-1)/2):(s2/2),(-((s1-1)/2):(s1/2)));   
    gauss=exp(-(x.^2+y.^2)/(2*sigma*sigma)); 
    G1=gauss/sum(gauss(:)); 
    
    % Matlab 自带
    G2 = fspecial('gaussian',[s1,s2],sigma);
    isequal(G1,G2)
    
    figure
    subplot(1,2,1);mesh(G1);title('按公式编写')
    subplot(1,2,2);mesh(G2);title('Matlab 自带')
    

    结果

    ans =
    
      logical
    
       1
    

    结论

    • 按公式编写:先构造 x 和 y 轴方向的数值刻度,形成一张网格点,然后按照公式计算高斯滤波器中各位置的取值,最后做一个归一化(因为归一化会将前面的系数消掉,所以一般不加前面的系数)。则此时的 G 满足求和为 1,相当于积分为1。
    • Matlab 自带:通过 fspecial 实现,设置好滤波器类型,和参数即可。
    • 以上两种方式完全等效。
    © 版权声明
    文章版权归作者所有,未经允许请勿转载。
  • 相关阅读:
    C语言练习之计算某年日是该年的第几天
    C语言练习之 猴子吃桃问题
    C语言练习之 求阶乘
    C语言学习(四)
    C语言学习(三)
    C语言学习(二)
    C语言学习(一)
    自定义函数汇总
    #2019121200026 最大子序列和
    #2019121000025-LGTD
  • 原文地址:https://www.cnblogs.com/gshang/p/14771801.html
Copyright © 2011-2022 走看看