Обесцвечивание изображения - Выполнение задачи для каждого элемента матрицы изображения
В последнее время я занимался обработкой изображений и выбрал 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 ответ
Чтобы получить ожидаемый результат, вам просто нужно изменить следующую строку:
sum = sum + data[i+x-1][j+y-1] * kernelMat[x][y]
чтобы:
sum = data[i+x-1][j+y-1] * kernelMat[x][y]
Надеюсь, поможет!