Обесцвечивание изображения - Выполнение задачи для каждого элемента матрицы изображения - PullRequest
0 голосов
/ 12 декабря 2018

В последнее время я занимался обработкой изображений и выбрал Python в качестве языка реализации.

Проблема

У меня есть два набора матриц, одна из которых является моей матрицей данных (которая содержит пиксельные значения изображения), а другая - матрицей ядра.Мое требование состоит в том, чтобы выполнить каждый элемент матрицы данных (исключая ребра) и вычислить определенное значение (используя матрицу ядра) и заменить исходное значение в матрице данных на вычисленное значение.

Объяснение

Я должен заменить каждый элемент суммой всех соседей, умноженной на элемент в матрице ядра.т. е. d[i][j] = d[i-1][j-1] * k[0][0] + d[i][j-1] * k[0][1]....+ d[i+1][j+1] * k[1][1], учитывая, что k является матрицей 3 x 3.

Мой фрагмент кода

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
kernelMat = [[0, 1, 0], [1, -4, 1], [0, 1, 0]]

rowCount = len(data)
colCount = len(data[0])

for i in range(1, rowCount-1):
    for j in range(1, colCount-1):
        sum = 0
        for x in range(0, 3):
            for y in range(0, 3):
                sum = sum + data[i+x-1][j+y-1] * kernelMat[x][y]
        data[i][j] = sum


Expected output: [[1, 2, 3, 4],
            [5, 0, 0, 8],
            [9, 0, 0, 12],
            [13, 14, 15, 16]] but returning different set of values.

Где я ошибаюсь? Я новичок в программированииизвините, если вопрос глупый.

1 Ответ

0 голосов
/ 12 декабря 2018

Чтобы получить ожидаемый результат, вам просто нужно изменить следующую строку:

sum = sum + data[i+x-1][j+y-1] * kernelMat[x][y]

на:

sum = data[i+x-1][j+y-1] * kernelMat[x][y]

Надеюсь, это поможет!

...