package ie.dcu.image.gray; import ie.dcu.matrix.DoubleMatrix; public class GrayConvolve { public static DoubleMatrix convolve( DoubleMatrix image, DoubleMatrix filter) { DoubleMatrix result = new DoubleMatrix(image.rows, image.cols); for (int i = 0; i < image.rows; i++) { for (int j = 0; j < image.cols; j++) { double value = 0.0; for (int ii = 0; ii < filter.rows; ii++) { int i1 = i - (filter.rows >> 1) + ii; if (image.hasRow(i1)) { for (int jj = 0; jj < filter.cols; jj++) { int j1 = j - (filter.cols >> 1) + jj; if (image.hasCol(j1)) { double filterValue = filter.doubleAt(ii, jj); value += image.doubleAt(i1, j1) * filterValue; } } } } result.setDoubleAt(i, j, value); } } return result; } }