Как использовать дискретное косинусное преобразование (DCT) в OpenCV - PullRequest
0 голосов
/ 22 апреля 2019

dct не выполняет преобразование должным образом в opencv.

imf = np.float32 (блок)
dct = cv2.dct (imf)

           [[154,123,123,123,123,123,123,136],
           [192,180,136,154,154,154,136,110],
           [254,198,154,154,180,154,123,123],
           [239,180,136,180,180,166,123,123],
           [180,154,136,167,166,149,136,136],
           [128,136,123,136,154,180,198,154],
           [123,105,110,149,136,136,180,166],
           [110,136,123,123,123,136,154,136]] 

этот блокизображение при преобразовании с кодом, показанным выше

[162,3, 40,6, 20,0 ... [30,5, 108,4 ...

, это должен быть результат,

[1186,3, 40,6, 20,0 ... [30,5, 108,4 ....

но я нашел этот Результат.для блока выборки https://www.math.cuhk.edu.hk/~lmlui/dct.pdf

1 Ответ

2 голосов
/ 22 апреля 2019

DCT работает нормально.Разница между тем, что вы получили, и тем, что вы ожидаете, заключается в том, что данный конкретный пример на самом деле выполняет ДПФ на М вместо исходного изображения I .В этом случае, как показывает статья, M = I - 128 .Единственное отличие в вашем примере состоит в том, что вы не вычитаете эту часть, поэтому значения все больше.В косинусном преобразовании или преобразовании Фурье первый коэффициент («смещение постоянного тока», как его иногда называют) имеет более высокое значение, потому что значения вашего изображения просто больше.Но именно поэтому все остальные коэффициенты одинаковы.Если вы берете изображение и просто добавляете некоторые или вычитаете некоторые из всего изображения в равной степени, коэффициенты преобразования будут одинаковыми, за исключением самого первого.

Из стандартного определения DCT:

DCT definition

Здесь вы можете видеть, что для первого коэффициента с k = 0, что внутри функции косинуса вы просто получаете 0, а cos (0) = 1. Таким образом, X_0 , как показано на этом рисунке, является просто суммой всех x_n значения.Обычно это значение может быть масштабировано на что-то, относящееся к N , так что это что-то вроде среднего .При этом это относится к тому, что X_0 является термином «смещение постоянного тока», которое вы увидите описанным как «среднее значение сигнала», или, другими словами, как далеко находится сигнал от0. Это очень полезно иметь в качестве одного из коэффициентов косинуса / преобразования Фурье, поскольку он может полностью описать сигнал;все другие коэффициенты описывают частотный контент, и поэтому они ничего не говорят о том, как далеко находятся значения от 0, но первый коэффициент, смещение постоянного тока, действительно говорит вам о сдвиге!

...