高斯核函数

1.二维高斯函数形式

A是幅值,(xo,y0)为中心点坐标,σσy是方差,图示如下,A=1,(X0,Y0)=(0,0),σx = σy = 1

2.高斯函数分析

在实际编程应用中,高斯函数的参数包括--

ksize -- 高斯函数的大小

sigma -- 高斯函数的方差

center -- 高斯函数尖峰中心点的坐标

bias -- 高斯函数尖峰中心点的偏移量,用于控制截断高斯函数

假设固定ksize为20,sigma从1-9,固定center在高斯中间,并且bias偏移量为整个半径,即原始高斯函数。

  随着sigma的增大,整个高斯函数的尖峰逐渐减小,整体也变得更加平缓,对图像的平滑效果会越来越明显。

3.高斯核函数卷积

“sigma表示标准差,如果标准差比较小,相当于图像点运算,平滑效果不明显;反之,标准差比较大,相当于平均模板,比较模糊”

       这样一个曲线与x轴围成的图形面积为1。sigma(标准差)决定了这个图形的宽度,给出下述结论:sigma越大,则图形越宽,尖峰越小,图形较为平缓;sigma越小,则图形越窄,越集中,中间部分也就越尖,图形变化比较剧烈。即如果sigma越大,表示该密度分布一定比较分散,由于面积为1,于是尖峰部分减小,宽度越宽(分布越分散);当sigma越小时,说明密度分布较为集中,尖峰越尖,宽度越窄。

所以,sigma越大,分布越分散,各部分比重差别不大,于是生成的模板各元素值差别不大,类似于平均模板;sigma越小,分布越集中,中间部分所占比重远远高于其他部分,反映到高斯模板上就是中心元素值远远大于其他元素值,相当于中间值的点运算。

4.高斯模板

高斯模板实际上也就是模拟高斯函数的特征,具有对称性并且数值由中心向四周不断减小。

double** createG(int iSize, double sigma){
     double **guass;
     double sum = 0;
     double x2 = 0;
     double y2 = 0;
     int center = (iSize - 1) / 2;
     guass = new double*[iSize];   //注意,double*[k]表示一个有10个元素的指针数组

     for (int i = 0; i < iSize; ++i){
          guass[i] = new double[iSize];
     }
 
     for (int i = 0; i<iSize; i++){
        //使用x2,y2降低了运算速度,提高了程序的效率
          x2 = pow(double(i - center), 2);
          for (int j = 0; j<iSize; j++){
               y2 = pow(double(j - center), 2);
               sum += guass[i][j] = exp(-(x2 + y2) / (2 * sigma*sigma));
          }
     }
     if (sum != 0){
      //归一化  
          for (int i = 0; i<iSize; i++){
               for (int j = 0; j<iSize; j++){
                    guass[i][j] /= sum;
                }
          }
     }
     return guass;
} 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值