Я внедрил фильтр свертки в Java.Я делал это некоторое время назад в приложениях, но теперь мне это действительно нужно для чего-то, поэтому я реализовал это, чтобы убедиться, что я все еще знаю, как это сделать.К сожалению, я потерял свою рабочую копию, поэтому не могу сравнить текущий код с моим предыдущим рабочим кодом.Я уверен, что правильно реализую алгоритм, но код все еще не работает должным образом.Может опытный программист, пожалуйста, объясните, что я делаю неправильно.
Вот класс Convolution:
import java.awt.*;
import java.util.Arrays;
public class ConvolutionFilter {
private int[][] image;
private int[][] weights;
private double[][] doubleWeights;
private int[][] convolved;
public ConvolutionFilter(int[][] image, int[][] weights) {
this.image = image;
this.weights = weights;
convolve();
}
public void convolve() {
int sum;
int[][] convolved = new int[image.length][image[0].length];
for (int r = 0; r < convolved.length - weights.length - 1; r++) {
for (int c = 0; c < convolved[r].length - weights.length - 1; c++) {
sum = 0;
for (int i = 0; i < weights.length; i++) {
for (int j = 0; j < weights[i].length; j++) {
sum += image[r + i][c + j] * weights[i][j];
}
}
convolved[r][c] = sum / weight();
}
}
this.convolved = convolved;
}
public int numWeights() {
return weights.length * weights[0].length;
}
public int weight() {
int sum = 0;
for (int r = 0; r < weights.length; r++) {
for (int c = 0; c < weights[r].length; c++) {
sum += weights[r][c];
}
}
if (sum == 0) return 1; else return sum;
}
public int[][] getConvolved() {
return convolved;
}
}
Любая помощь приветствуется!