我正在编写一段java代码,给出宽度,高度和西格玛值将返回一个2D高斯模板,然后我将能够与另一个图像进行卷积。
这是高斯二维方程:
现在,我正在简单地将此类似于此。我们可以将它分成两部分,一部分是Pi和E。
所以在我的代码中我有这个:
piProduct = Math.pow(2 * Math.PI * Math.pow(sigma,2), -1);
对于E部分,我再分为2部分(基数和指数):
eulerNumberProductExponent = (Math.pow(x,2) + Math.pow(y,2)) / (2 * Math.pow(sigma,2));
和基数(带指数):
eulerNumberProduct = Math.pow(Math.E, -1*eulerNumberProductExponent);
现在我所要做的就是将Pi部分与E部分相乘:
coefficient = piProduct * eulerNumberProduct;
以下是完整的代码:
public double[][] getGaussianTemplate(int width, int height, double sigma){
double[][] gaussianTemplate = new double [height][width];
double coefficient;
double piProduct;
double eulerNumberProductExponent;
double eulerNumberProduct;
piProduct = Math.pow(2 * Math.PI * Math.pow(sigma,2), -1);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
eulerNumberProductExponent = (Math.pow(x,2) + Math.pow(y,2)) / (2 * Math.pow(sigma,2));
eulerNumberProduct = Math.pow(Math.E, -1*eulerNumberProductExponent);
coefficient = piProduct * eulerNumberProduct;
gaussianTemplate[y][x] = coefficient;
System.out.println("At x: "+x+" and y: "+y+" the coefficient is: "+coefficient);
}
}
printTemplate(gaussianTemplate,width,height);
return gaussianTemplate;
}
现在这是我为sigma = 0.1获得的:
| 15.915494 | 0.000000 | 0.000000 | 0.000000 | 0.000000
| 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000
| 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000
| 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000
| 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000
这是printTemplate(gaussianTemplate,width,height);
打印的内容。
根据我正在关注的5x5模板,西格玛为0.1,我应该得到这个:
这里的代码有什么问题?
答案 0 :(得分:0)
通常过滤器是从中心计算的
for (int x = -width/2; x <= width/2; x++) {
for (int y = -height/2; y <= height/2; y++) {
eulerNumberProductExponent = (Math.pow(x,2) + Math.pow(y,2)) / (2 * Math.pow(sigma,2));
eulerNumberProduct = Math.pow(Math.E, -1*eulerNumberProductExponent);
coefficient = piProduct * eulerNumberProduct;
// gaussianTemplate[y][x] = coefficient;
System.out.println("At x: "+x+" and y: "+y+" the coefficient is: "+coefficient);
}
}
这将为您提供围绕中心的对称过滤器。这本书的内容以及计算的内容都是未知的。