图像处理 二维高斯分布



为X,Y的相关系数!为0;σ1=σ2=σ

二维高斯曲面的公式(x,y代表像素的模板坐标,模板中心位置为原点)


根据这个公式,我们可以计算得到不同σ的高斯模板。下面是C语言程序实现:

当σ即半径为0.7时:

#include "stdafx.h"
#include <fstream>
#include <math.h>
#include <iomanip>
using namespace std;
#define N 4
#define PI 3.141592653
int _tmain(int argc, _TCHAR* argv[])
{
    char* path = "C:\\path1.txt";
    ofstream fout(path);
    double a[2 * N + 1][2 * N + 1];    // 高斯模板;
    double r = 1;                     // 高斯半径;
    double A = 1 / (2 * PI * r * r);
    if (fout)
    {
        for (int i = -1 * N; i <= N; i++)
        {
            for (int j = -1 * N; j <= N; j++)
            {
                a[i + N][j + N] = A*exp((-1)*(i*i + j*j) / (2 * r*r));
                fout << setiosflags(ios::fixed) << setprecision(6) << a[i + N][j + N] << "   ";
            }
            fout << endl;
        }
    }
    fout.close();
    return 0;
}
最后得到的结果如下图所示

那么,我们还有个问题,如何确定模板的大小与标准差之间的关系。经过我们的不断验证,即改变上述的σ和模板大小的值,可以得知。当σ越大时,要求的模板也就是越大。即当σ为1时,我们可以得到如下的高斯模板:

上图的意思是,与水平面平行的x,y平面,也就是上面高斯模板中的坐标(x,y),z轴表示的灰度值,也就是上面高斯模板中的灰度值。

通过上图我们可以得知,7*7的模板已经不能满足我们,我们需要9*9的模板,这时如果用5*5的模板,则会取中间部分的5*5模板。模板和σ的选择取决于我们图像的大小。如果图像是几万的分辨率,则需要高斯模板和σ值都要很大,如果几十的分辨率,用很小的如3*3的模板或者5*5的模板就可以了,这时σ一般可以取0.5左右(也就是matlab里fspecial函数里默认的σ值)。

得到的绘出的高斯曲面:


现在众所周知用的3*3或者5*5的模板,都是对高斯曲面的一个整数除法形式的近似,也就是对高斯半径约为0.849时的一个近似。

1 2 1 
2 4 2 /16 
1 2 1

16代表的是权重,即模板内所有的数之和。5*5的模板如下,也是对高斯曲面的一个整数除法形式的近似。







  • 17
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值