Java 高斯函数
高斯模糊是一種兩維的卷積模糊操作,在圖像完成高斯模糊相對(duì)于均值模糊來(lái)說(shuō),
?
計(jì)算量會(huì)增加,但是高斯模糊可以實(shí)現(xiàn)一些特殊效果,特別是在圖像噪聲(非椒鹽
?
噪聲)消去方面,更是有著非常好的效果。
?
一維高斯公式
?
?
其中x是指定密度分布[-n,n]范圍的整數(shù),sigma代表標(biāo)準(zhǔn)方差(如果在范圍內(nèi)做平均密度分布,sigma=n/3)。
?
一維高斯函數(shù)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);}?
兩維的高斯分布函數(shù)
?
對(duì)應(yīng)的Java實(shí)現(xiàn)代碼為:
?
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);}?
?
一個(gè)2D高斯分布的圖可以表示如下:
?
?
總結(jié)
- 上一篇: ppt模板下载keyppt.cn
- 下一篇: maven打包springboot项目的