我一直在尝试制作自己的卷积运算符,而不是使用 Java 自带的内置卷积运算符。我在此图像链接上应用了内置卷积运算符
使用带有高斯滤波器的内置卷积算子我得到了这个图像。 关联
现在我使用我的代码运行相同的图像
public static int convolve(BufferedImage a,int x,int y){
int red=0,green=0,blue=0;
float[] matrix = {
0.1710991401561097f, 0.2196956447338621f, 0.1710991401561097f,
0.2196956447338621f, 0.28209479177387814f, 0.2196956447338621f,
0.1710991401561097f, 0.2196956447338621f, 0.1710991401561097f,
};
for(int i = x;i<x+3;i++){
for(int j = y;j<y+3;j++){
int color = a.getRGB(i,j);
red += Math.round(((color >> 16) & 0xff)*matrix[(i-x)*3+j-y]);
green += Math.round(((color >> 8) & 0xff)*matrix[(i-x)*3+j-y]);
blue += Math.round(((color >> 0) & 0xff)*matrix[(i-x)*3+j-y]);
}
}
return (a.getRGB(x, y)&0xFF000000) | (red << 16) | (green << 8) | (blue);
}
我得到的结果是这样的。 关联
另外,我如何优化我编写的代码。内置卷积运算符需要 1~2 秒,而我的代码即使没有达到预期的确切目的,也需要 5~7 秒!
我在上传时不小心旋转了我的源图像。所以请忽略这一点。