Как реализован cv2.dct? - PullRequest
       67

Как реализован cv2.dct?

0 голосов
/ 30 марта 2020

Я узнал, что dct использует матрицу 8x8 в качестве матрицы преобразования, и сдвиньте ее на изображение и вычислите с окном 8x8 на изображении. Таким образом, если входное изображение имеет все 1 в качестве значений пикселей, результирующее изображение должно иметь одинаковые значения в каждом окне 8x8.

import numpy as np
import cv2
a = np.ones((16, 8))
b = cv2.dct(a)

Я получил результат b следующим образом:

[[11.31, 0, 0, ...], [0, 0, 0, ...,], ...]

Только b[0][0] отличен от нуля, а все остальные значения равны нулю. Это имеет смысл интуитивно, поскольку в частотной области должна быть только одна частота, амплитуда которой не равна нулю (поскольку входной массив имеет только одно значение). Но из формулы реализации кажется, что результат a[:8, :] и a[8:, :] должен быть одинаковым, поскольку входные данные для этих двух windows одинаковы?

Редактировать:

In Чтобы прояснить мой вопрос, давайте возьмем, например, 1-й курс. Если имеется окно длины 8. Затем для массива длиной 16 (все значения равны 1), когда окно находится в своем первом местоположении (позиция 0), вычисляются первые 8 значений в массиве, а затем, когда Окно находится во второй позиции (поз. 8), вычисляются вторые 8 значений, поэтому первая половина и вторая половина массива результатов должны быть одинаковыми, но результат, указанный в cv.dct, показывает, что массив результатов имеет только значение в позиции 0. Почему это так?

...