Я пытаюсь сделать свой собственный оператор свертки вместо использования встроенного, который поставляется с Java. Я применил оператор встроенной свертки на этом изображении linkОператор свертки, дающий спектр цветов
используя встроенный оператор свертки с гауссовским фильтром. Я получил это изображение. link
Теперь я запускаю тот же образ, используя мой код
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);
}
И В результате я получил это. link
Также как оптимизировать код, который я написал. Оператор встроенной свертки занимает 1 ~ 2 секунды, в то время как мой код, даже если он не выполняет точную цель, как предполагается, занимает 5 ~ 7 секунд!
Я случайно повернул свое исходное изображение во время загрузки. Поэтому, пожалуйста, проигнорируйте это.