Обработка изображений с использованием Java (фильтр Min); Размещение элемента в центре 2D-матрицы - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь реализовать различные фильтры обработки изображений для файла ".pgm", используя Java. Ниже приведен код минимального фильтра:

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

Используя этот метод, я получаю вывод, где мое желаемое изображение находится в одном углу фотографии. Вы можете увидеть выходное изображение, нажав здесь. В моем коде цикл c и цикл k помогают нам пройти по всему изображению, в то время как цикл i и цикл j предоставляют нам маленькое нужное нам окно применить минимальный фильтр. Я уже преобразовал изображение «.pgm» в матрицу для манипуляций.

Я почти уверен, что ошибка исходит из строки сразу после строки комментария. Я не могу правильно разместить пиксель минимального значения в нужном месте. Что я должен делать?

1 Ответ

0 голосов
/ 29 июня 2018

вы должны заменить индексирование 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);
        }
    }
}
...