У меня проблема с разделением матриц по элементам, поэтому я имею в виду, что я хочу, чтобы элемент [i, j] первой матрицы (foto_dcp, см. Код) был разделен на элемент [i, j] второй матрицы (Q).
Некоторая справочная информация: я загрузил изображение из своего хранилища.Я сохранил монохромные значения каждого пикселя в матрице под названием «pixelMatrix». Эта команда превращает большую матрицу (размером 128x128) в меньшую (размером 8x8)
foto_dct = skimage.util.view_as_blocks(pixelMatrix, block_shape=(8, 8))
Теперь, после этого мне нужноразделите каждую матрицу в foto_dct на другую матрицу (в этом коде называемую 'Q') поэлементно.
for x in foto_dct:
for i in range(8):
for j in range(8):
x[i,j] = x[i,j] / Q[i,j]
проблема в том, что я получаю неправильные результаты.Это матрица 'Q':
[[ 16 11 10 16 24 40 51 61]
[ 12 12 14 19 26 58 60 55]
[ 14 13 16 24 40 57 69 56]
[ 14 17 22 29 51 87 80 62]
[ 18 22 37 56 68 109 103 77]
[ 24 35 55 64 81 104 113 92]
[ 49 64 78 87 103 121 120 101]
[ 72 92 95 98 112 100 103 99]]
Это примерная матрица (foto_dct [3,3], хотя я сделал некоторые операции над ней, 3-й столбец матриц, 3-й ряд матриц), если вы помните из шага 1.)
[[613 250 -86 64 -63 59 -44 24]
[ 38 -84 50 -57 54 -47 35 -19]
[-16 4 -4 7 -5 4 -3 1]
[ 10 -18 19 -20 21 -20 16 -9]
[-17 19 -18 16 -14 11 -7 4]
[ -7 9 -10 12 -13 11 -9 5]
[-11 15 -14 15 -14 11 -9 5]
[ -1 2 -4 5 -5 4 -3 2]]
И вот что я получаю после деления:
[[43 17 -6 4 -4 4 -3 1]
[ 2 -4 2 -3 3 -2 2 -1]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]]
Как вы можете видеть, например, возьмите элемент [0,0]= 613, поэтому после деления мы должны получить [0,0] = 613/16 = 38,3125 (как вы можете видеть, что это также автоматически округляется?) Кстати, я попытался изменить
x[i,j] = x[i,j] / Q[i,j]
на
x[i,j] = x[i,j] / 2
и получил правильные (хотя и округленные) результаты.Так что это что-то с Q [i, j]
Я также пытался сделать это так:
for x in foto_dct:
x = np.divide(x,Q)
Но это возвращает мне исходную матрицу, ничего не делая, даже не возвращая код ошибки, даже если он должен делиться поэлементно.Кто-нибудь может мне помочь?