2D дискретное косинусное преобразование

Я проверил с помощью функции dct в Matlab, но она реализовала DCT только по столбцам для ввода матрицы:

>> help dct 
If X is a matrix, the DCT operation is applied to each
column.

Есть ли функция, которая может выполнять 2D DCT в Matlab, или есть какие-то алгоритмы, которые могут применять dct, выполнять какое-то преобразование, а затем получать 2D DCT?


person ChuNan    schedule 30.11.2013    source источник


Ответы (1)


Согласно Wikipedia, «многомерные варианты различных типов DCT прямо вытекают из одномерных определений: они просто отделимый продукт (то есть композиция) DCT по каждому измерению ".

После этого вы сможете получить 2d-DCT, вычислив

dct(dct(A.').')

Также есть dct2 в панели инструментов обработки изображений, а ядро ​​реализации -

b = dct(a, mpad);
if m > 1 && n > 1, b = dct(b.', npad).'; end
person A. Donda    schedule 30.11.2013
comment
Спасибо, Донда. Что означает dct (A. ')? пожалуйста? Я не совсем понимаю грамматику слова «)». здесь. Означает ли это в вашей реализации dct2 сначала dct для каждого столбца, а затем для каждой строки? - person ChuNan; 01.12.2013
comment
Оператор .', он означает транспонирование без дополнения. Матрица A сначала транспонируется, вычисляется DCT, результат переносится обратно, а DCT вычисляется снова. Это приводит к 2d-DCT A. - person A. Donda; 01.12.2013
comment
Может, вас ввела в заблуждение подсветка синтаксиса? Боюсь, это не работает с Matlab. Структура dct( dct( A .' ) .' ). - person A. Donda; 01.12.2013
comment
Понятно . Большое тебе спасибо! - person ChuNan; 01.12.2013