使用Java进行图像处理(最小滤镜);将元素放置在2D矩阵的中心

时间:2018-06-28 19:42:24

标签: java arrays image-processing multidimensional-array imagefilter

我正在尝试使用Java在“ .pgm”文件上实现各种图像处理过滤器。下面是最小过滤器的代码:

void applyMinFilter() {
    int [] array = new int[size*size];
    int t = 0, i = 0, j = 0;
    for(int c = 0; c<h-size+1; c++) {
        for(int k = 0; k<w-size+1; k++) {
            t = 0;
            for(i = c; i<c+size; i++) { 
                for(j = k; j<k+size; j++) {
                    array[t++] = matrix[i][j];
                }
            }
            //placing the minimum value in the centre of the considered grid
            matrix[i/2][j/2] = minimum(array);
        }
    }
}

注意:在这里,大小= 5,w = h = 400

使用这种方法,我得到的输出是我想要的图像在照片的一个角上。 You can see the output image by clicking here.在我的代码中,c循环和k循环帮助我们遍历整个图像,而i循环和j循环为我们提供了应用最小滤波器所需的小窗口。我已经将“ .pgm”图像转换为矩阵进行操作。

我很确定错误来自注释行之后的行。我无法正确地将最小值像素放置在正确的位置。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您应将matrix[i/2][j/2]的索引替换为matrix[c+size/2][k+size/2],否则您可以编写如下代码:

void applyMinFilter() {
    int [] array = new int[size*size];
    int t = 0, i = 0, j = 0;
    // for size = 5 you can use h-2 or w-2
    // to make it general replace with h-size/2 and w-size/2
    for(int c = 2; c < h-2; c++) {
        for(int k = 2; k < w-2; k++) {
            t = 0;
            for(i = c-2; i < c+2; i++) { 
                for(j = k-2; j < k+2; j++) {
                    array[t++] = matrix[i][j];
                }
            }
            //placing the minimum value in the centre of the considered grid
            matrix[c][k] = minimum(array);
        }
    }
}