Java 高斯函数

高斯模糊是一种两维的卷积模糊操作,在图像完成高斯模糊相对于均值模糊来说,

 

计算量会增加,但是高斯模糊可以实现一些特殊效果,特别是在图像噪声(非椒盐

 

噪声)消去方面,更是有着非常好的效果。

 

一维高斯公式

 

 

其中x是指定密度分布[-n,n]范围的整数,sigma代表标准方差(如果在范围内做平均密度分布,sigma=n/3)。

 

一维高斯函数Java代码如下:

 

    public static Kernel get(int radius, boolean horizontal){
        if (radius < 1) {
            throw new IllegalArgumentException("radius must be >= 1");
        }
        int size = radius * 2 +1;
        float[] data = new float[size];

        float sigma = radius/3.0f;
        float twoSigmaSquare = 2.0f * sigma * sigma;
        float sigmaRoot = (float) Math.sqrt(twoSigmaSquare * Math.PI);
        float sum = 0.0f;

        for (int i = -radius; i <= radius; i++) {
            float distance = i * i;
            int index = i + radius;
            data[index] = (float) Math.exp(-distance / twoSigmaSquare) / sigmaRoot;
            sum += data[index];
        }

        for (int i = 0; i < data.length; i++) {
            data[i] /= sum;
        }

        return horizontal? new Kernel(size, 1, data): new Kernel(1, size, data);
    }

 

两维的高斯分布函数


 

对应的Java实现代码为:

 

    public static Kernel get2D(int radius){
        if (radius < 1) {
            throw new IllegalArgumentException("radius must be >= 1");
        }
        float sum=0.0f;
        int width= radius *2+1;
        int size = (int)Math.pow((float)(width), 2);
        float sigma=radius/3.0f;
        float twoSigmaSquare = 2.0f*sigma*sigma;
        float sigmaRoot = (float)Math.PI * twoSigmaSquare;
        float[] data = new float[size];
        int index = 0;
        float x, y;
        for(int i=-radius; i<= radius; i++) {
            for(int j=-radius; j<= radius; j++) {
                x = i*i;
                y = j*j;
                data[index] = (float)Math.exp(-(x + y)/twoSigmaSquare)/sigmaRoot;
                sum+=data[index];
                index++;
            }
        }
        for(int k=0; k<size; k++){
            data[k]=data[k]/sum;
        }
        return new Kernel(width, width, data);
    }

 

 

一个2D高斯分布的图可以表示如下:


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值