for(int i = -radius; i <= radius; i++){ float distance = i * i; int index = i + radius; data[index] = (float) Math.exp(-distance/twoSigmaSquare) / sigmaRoot; total += data[index]; }
for(int i = 0; i < data.length; i++){ data[i] /= total; }
Kernel kernel = null; if(horizontal){ kernel = new Kernel(size,1,data); } else{ kernel = new Kernel(1,size,data); }
return new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); }
if (radius < 1){
throw new IllegalArgumentException("Radius must be >= 1");
}
int size = radius * 2 + 1;
float[] data = new float[size];
//这里调整被除数系数 被除数越大模糊精度越高 初设20 fang
float sigma = radius / 20.0f;
float twoSigmaSquare = 2.0f * sigma * sigma;
float sigmaRoot = (float) Math.sqrt(twoSigmaSquare * Math.PI);
float total = 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;
total += data[index];
}
for(int i = 0; i < data.length; i++){
data[i] /= total;
}
Kernel kernel = null;
if(horizontal){
kernel = new Kernel(size,1,data);
}
else{
kernel = new Kernel(1,size,data);
}
return new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
}