Дискретное косинусное преобразование

редактировать
Метод представления данных в виде суммы функций косинуса

A дискретное косинусное преобразование (DCT ) выражает конечную последовательность точек данных в виде суммы функций косинуса, колеблющихся на разных частотах. DCT, впервые предложенный Насиром Ахмедом в 1972 году, представляет собой широко используемую технику преобразования при обработке сигналов и сжатии данных. Он используется в большинстве случаев цифровых носителей, включая цифровые изображения (например, JPEG и HEIF, где могут быть небольшие высокочастотные компоненты отброшено), цифровое видео (например, MPEG и H.26x ), цифровое аудио (например, Dolby Digital, MP3 и AAC ), цифровое телевидение (например, SDTV, HDTV и VOD ), цифровое радио (например, AAC + и DAB + ) и кодирование речи (например, AAC - LD, Сирена и Опус ). DCT также важны для множества других приложений в науке и технике, таких как цифровая обработка сигналов, телекоммуникационные устройства, что снижает использование полосы пропускания сети., и спектральные методы для численного решения дифференциальных уравнений в частных производных.

Использование функций косинуса, а не синуса решающее значение для сжатия, поскольку оказывается (как описано ниже), что для аппроксимации типичного сигнала требуется меньше функций косинуса, тогда как для дифференциальных косинусы выражают конкретный выбор граничных условий. В частности, DCT - это преобразование Фурье, дискретное преобразование Фурье (DFT), но с использованием только действующих чисел. DCT обычно связаны с коэффициентами ряда Фурье периодически и симметрично расширенной последовательной, тогда как DFT связаны с коэффициентами ряда Фурье периодически расширенной последовательной. DCT эквивалентны DFT примерно в два раза большей длины, оперирующими реальными данными с симметрией даже (поскольку преобразование Фурье реальной и четной функции является действительным и четным), тогда как в некоторых вариантах входные и / или выходные данные сдвинуты на половину отсчета. Существует восемь стандартных вариантов DCT, четыре из которых являются общими.

Наиболее распространенным дискретным косинусным преобразователем является DCT типа II, который часто называют просто «DCT». Это оригинальный был DCT, впервые предложенный Ахмедом. Его обратный DCT типа III, соответственно, часто называют просто «обратным DCT» или «IDCT». Двумя связанными преобразованиями является дискретное синусоидальное преобразование (DST), эквивалентное ДПФ физических и нечетных функций, и модифицированное дискретное косинусное преобразование (MDCT), которое основано на DCT перекрывающихся данных. Для расширения концепции DCT для сигналов MD реализуют многомерные DCT (MD DCT). Существует несколько алгоритмов вычислений МД DCT. Было разработано множество быстрых алгоритмов, чтобы уменьшить вычислительную сложность реализации DCT. Одним из них является целочисленный DCT (IntDCT), целочисленное приближение стандартного DCT, используемое в нескольких международных стандартах ISO / IEC и ITU-T.

Сжатие DCT, также известное как сжатие блоков, сжимает данные в наборы дискретных блоков DCT. Блоки DCT могут иметь несколько размеров, включая 8x8 пикселей для стандартного DCT и различные целочисленные размеры DCT от 4x4 до 32x32 пикселей. DCT обладает сильным свойством «сжатия», позволяющего достичь высокого качества при высоких сжатия данных. Однако блочные артефакты сжатия могут появиться при применении сильного сжатия DCT.

Содержание

  • 1 История
  • 2 Приложения
    • 2.1 Общие приложения
    • 2.2 Стандарты визуальных медиа DCT
      • 2.2.1 Форматы изображений
      • 2.2.2 Видеоформаты
    • 2.3 Аудио MDCT стандарты
      • 2.3.1 Общее аудио
      • 2.3.2 Кодирование речи
    • 2.4 MD DCT
    • 2.5 Цифровая обработка сигналов
    • 2.6 Артефакты сжатия
  • 3 Неофициальный обзор
  • 4 Формальное определение
    • 4.1 DCT-I
    • 4.2 DCT-II
    • 4.3 DCT-III
    • 4.4 DCT-IV
    • 4.5 DCT V-VIII
  • 5 Обратные преобразования
  • 6 многомерные DCT
    • 6.1 MD DCT-II
      • 6.1.1 3-D DCT-II VR DIF
        • 6.1.1.1 Арифметическая сложность
    • 6.2 MD-DCT-IV
  • 7 Вычисление
  • 8 Пример IDCT
  • 9 См......
  • 10 Пояснительные примечания
  • 11 Цитаты
  • 12 Дополнительная литература
  • 13ние ссылки

История

Насир Ахмед, изобретатель Внешнего косинусного преобразования (DCT), который он также впервые использует в 1972 году году году году.

Дискретное косинусное преобразование (DCT) было впервые задумано Насиром Ахмедом, когда он работал в Государственном университете Канзаса, и эта идея была использована Национальному научному фонду в 1972 году. Первоначально он предназначал DCT для сжатия изображений. Ахмед разработал практический алгоритм DCT со своим аспирантом Т. Натараджаном и другом К. Р. Рао в Техасском университете в Арлингтоне в 1973 году, они представлены, что это самый эффективный алгоритм сжатия изображений. Они представили свои результаты в статье под названием «Дискретное косинусное преобразование», опубликованной в январе 1974 года. В нем описывается то, что сейчас называется DCT типа II (DCT-II), а также обратное DCT типа III (IDCT). Это была эталонная публикация, и с момента ее публикации на нее как на фундаментальное развитие тысяч работ. Основная исследовательская работа и события, которые приводят к разработке DCT, были кратко изложены в более поздней публикации Ахмеда «Как я пришел к дискретному косинусному преобразованию».

С момента его появления в 1974 г. большие исследования по DCT. В 1977 году Вен-Сюн Чен опубликовал работу с К. Харрисоном Смитом и Стэнли К. Фраликом, в котором представлен быстрый алгоритм DCT, и он основал Compression Labs для коммерциализации технологии DCT. Дальнейшие разработки статьи 1978 года М.Дж. Нарасимхи и А.М. Петерсон и статья Б.Г. Ли. Эти исследовательские работы, наряду с исходной статьей Ахмеда 1974 года и статья Чена 1977 года, процитированы Объединенная группа экспертов по фотографии в качестве основы для алгоритма сжатия изображений JPEG с потерями в 1992 году..

В 1975 году Джон А. Роуз и Ганер С. Робинсон адаптировали DCT для межкадрового кодирования видео с компенсацией движения. Они экспериментировали с DCT и быстрым преобразованием Фурье (FFT), разработали межкадровые гибридные кодеры для обоих, и представили, что DCT является наиболее эффективным из-за его меньшей сложности, способного сжимать данные изображения. до 0,25- бит на пиксель для сцены видеотелефона с качеством изображения, сравнимым с внутрикадровым кодером, требующим 2 бита на пиксель. DCT был применен к кодированию видео Wen-Hsiung Chen, который разработал быстрый алгоритм DCT с C.H. Смит и С.С. Фралик в 1977 году и основали Compression Labs для коммерциализации технологии DCT. В 1979 году Анил К. Джайн и Джасвант Р. Джайн далее разработали сжатие видеосигнала DCT с компенсацией движения, также называемое компенсацией движения блока. Это привело к тому, что в 1981 году Чен разработал практический алгоритм сжатия видео, названный DCT с компенсацией движения или адаптивным кодированием сцены. DCT с компенсацией движения позже стал стандартным методом кодирования для сжатия видео с конца 1980-х годов.

целочисленный DCT используется в Advanced Video Coding (AVC), представленном в 2003 году, и High Efficiency Video Coding (HEVC), представленном в 2013 году. Целочисленный DCT также используется в высокоэффективный формат изображения (HEIF), который использует подмножество формата кодирования видео HEVC для кодирования неподвижных изображений.

, модифицированный дискретный косинусный преобразователь (MDCT), былоано Джоном П. Принсеном, AW Джонсон и Алан Б. Брэдли из Университета Суррея в 1987 году, после более ранней работы Принсена и Брэдли в 1986 году. MDCT используется в большинстве современных форматов сжатия звука, таких как Dolby Digital (AC-3), MP3 (в котором используется гибридный алгоритм DCT- FFT ), Advanced Audio Coding (AAC), и Vorbis (Ogg ).

Дискретное синусоидальное преобразование (DST) было получено из DCT путем <замены>условий Неймана при x = 0 с условием Дирихле. DST был описан в статье DCT 1974 г. Ахмедом, Натараджаном и Рао. DST-I типа (DST-I) позже был описан Анил К. Джайн в 1976 году, а в 1978 году Х. Б. Кекра и Дж. К. Соланка описали DST типа II (DST-II).

Насир Ахмед также разработал алгоритм DCT без потерь с Гиридхаром Мандьямом и Нираджем Маготрой в 381>Университет Нью-Мексико в 1995 г. Это позволяет использовать метод DCT для сжатия без потерь изображений. T является модификацией алгоритма алгоритма DCT и включает в себя элементы обратного DCT и дельта-модуляции. ективный а лгоритм сжатия без потерь, чем энтропийное кодирование. DCT без потери также известен как LDCT.

Вейвлет-кодирование, использование вейвлет-преобразователей при сжатии изображений, началось после разработки кодирования DCT. Введение DCT привело к развитию вейвлет-кодирования, варианта DCT-кодирования, в котором используются вейвлеты вместо блочного алгоритма DCT. Кодирование дискретного вейвлет-преобразования (DWT) используется в JPEG 2000, с 1997 по 2000 год, и формат сжатия видео Dirac, выпущенный компанией BBC, выпущенный в 2008 году. Вейвлет-кодирование требует большей нагрузки на процессор, и пока чтобы увидеть широкое распространение в обращении к потребителю.

Приложения

DCT - это широко используемый метод преобразования в сигналов и безусловно, широко используемый линейный преобразовать в сжатие данных. Сжатие данных DCT было связано Digital Revolution. Несжатые цифровые носители, а также сжатие без потерь памяти имели непрактично высокие требования к и пропускной способности, которые были значительно уменьшены за счет высокоэффективного DCT метод сжатия с потерями, позволяющий от 8: 1 до 14: 1 для качества, близкого к студийному, и до 100: 1 для качества приемлемого качества. Широкое внедрение стандартов сжатия DCT привело к появлению и распространению цифровых изображений-технологий, таких как цифровые изображения, цифровые фотографии, цифровое видео, потоковое мультимедиа, цифровое телевидение, потоковое телевидение, видео по запросу (VOD), цифровое кино, видео высокой четкости (HD-видео) и телевидение высокой четкости (HDTV).

DCT, и в частности DCT-II, часто используется в сигнале обработки изображений, особенно для сжатия с потерянными, потому что она обладает сильным «сжатием»: в типичных приложениях большая часть информации имеет тенденцию концентрироваться в нескольких низкочастотных компонентах... DCT. Для сильно коррелированных марковских процессов DCT может приблизиться к эффективности уплотнения преобразования Карунена-Лоэва (что оптимальным с точки зрения зрения зрения декорреляции). Как объясняется ниже, это происходит из граничных условий, неявных в функциях косинуса.

DCT также широко используются при решении дифференциальных уравнений в частных производных с помощью спектральных методов, где разные варианты DCT соответствуют немного разным четным / нечетным граничным условиям на два конца массива.

DCT также использует с многочленами Чебышева, быстрые DCT-алгоритмы (ниже) используются в аппроксимации Чебышева произвольных функций сериями полиномов Чебышева, например в квадрат Кленшоу - Кертиса.

DCT - это стандарт кодирования для мультимедийных телекоммуникационных устройств. Он широко используется для уменьшения скорости передачи и уменьшения полосы пропускания. Сжатие DCT увеличивает объем памяти и полосу пропускания, необходимые для цифровых сигналов.

Общие приложения

DCT широко используется во многих приложениях, в том числе следующие.

Стандарты визуальных медиа DCT

DCT-II, также известный как просто DCT, является важным методом сжатия изображений. Он используется в стандарте сжатия изображений, таких как JPEG, и стандартов сжатия видео, таких как H.26x, MJPEG, <256..>MPEG, DV, Theora и Daala. Здесь вычисляются двумерные блоки DCT-II N × N {\ displaystyle N \ times N}N \ times N , и результаты квантуются и энтропийно кодируются.. В этом случае N {\ displaystyle N}N обычно равно 8, и формула DCT-II используется к каждой строке и столбцу блока. Результатом является массив коэффициентов преобразования 8 × 8, в котором элемент (0, 0) {\ displaystyle (0,0)}(0,0)(вверху слева) является DC (нулевой частотой) Компонент и записи с увеличивающимися значения вертикального и горизонтального значения более высокие вертикальные и горизонтальные пространственные частоты.

Расширенное кодирование видео (AVC) использует целочисленное DCT (IntDCT), целочисленное приближение DCT. Он использует целочисленные блоки DCT 4x4 и 8x8. Высокоэффективное кодирование видео (HEVC) и Высокоэффективный формат изображения (HEIF) используют различные целочисленные размеры блоков DCT от 4x4 до 32x32 пикселей. По состоянию на 2019 год AVC является наиболее часто используемым форматом для записи, сжатия и распространения видеоконтента, который используется 91% разработчиков видео, за которым следует HEVC, который используется 43% разработчиков.

Форматы изображений

Сжатие изображений стандартГодОбщие приложения
JPEG 1992Наиболее широко используемое сжатие изображений стандартный и цифровой формат изображения,
JPEG XR 2009Open XML Paper Specification
WebP 2010Графический формат, поддерживающий с потерями сжатие из цифровых изображений. Разработано Google.
Высокоэффективный формат изображения (HEIF)2013Формат файла изображения на основе сжатия HEVC. Он улучшает сжатие по сравнению с JPEG и поддерживает анимацию с гораздо более эффективным форматом анимированный GIF.
BPG 2014На основе HEVC сжатие

Видеоформаты

Стандарт кодирования видео ГодОбщие приложения
H.261 1988Первый из семейства стандарты кодирования видео. Используется в основном в старых продуктах для видеоконференцсвязи и видеотелефонах.
Motion JPEG (MJPEG)1992QuickTime, цифровые камеры
MPEG-1 Видео1993Распространение цифрового видео на CD или через World Wide Web.
MPEG-2 Video (H.262)1995Хранение и обработка цифровых изображений в приложениях вещания, цифровое телевидение, HDTV, кабельное, спутниковое, высокоскоростное Интернет, DVD распространение видео
DV 1995Видеокамеры, цифровые кассеты
H.263 (MPEG-4 Part 2 )1996Видеотелефония через телефонную сеть общего пользования (PSTN), H.320, Цифровая сеть с интегрированными услугами (ISDN)
Расширенное кодирование видео ( AVC / H.264 / MPEG-4 )2003Наиболее распространенное HD-видео формат записи / сжатия / распространения, потоковая передача Интернет-видео, YouTube, диски Blu-ray, HDTV трансляции, веб-браузеры, потоковое телевидение n, мобильные устройства, потребительские устройства, Netflix, видеотелефония, Facetime
Theora 2004Интернет-видео, веб-браузеры
VC-1 2006Windows media, Blu-ray Disc
Apple ProRes 2007Professional производство видео.
WebM Видео2010A мультимедиа формат с открытым исходным кодом, шаблон Google и предназначенный для использования с HTML5.
Высокоэффективное кодирование видео (HEVC / H.265)2013Новый преемник стандарта H.264 / MPEG-4 AVC, имеющий значительно улучшенные возможности сжатия.
Daala 2013

Аудиостандарты MDCT

Общее аудио

Аудио сжатие стандартГодОбщие приложения
Dolby Цифровой (AC-3)1991Кино, цифровое кино, DVD, Blu-ray, потоковое мультимедиа, видеоигры
Adaptive Transform Acoustic Coding (ATRAC)1992MiniDisc
MPEG Layer III (MP3)1993Цифровое аудио распространение, MP3-плееры, портативные медиа-плееры, потоковое мультимедиа
Perceptual audio coder (PAC)1996Служба цифрового аудио-радио (DARS)
Advanced Audio Coding (AAC / MP4 Audio)1997Цифровое аудио распространение, портативные медиаплееры, потоковое мультимедиа, 634>игровые консоли, мобильные устройства, iOS, iTunes, Android, BlackBerry
П ривет gh-Efficiency Advanced Audio Coding (AAC +)199 7Цифровое радио, цифровое аудиовещание (DAB +), Мировое цифровое радио (DRM)
Cook Codec 1998RealAudio
Windows Media Audio (WMA)1999Windows Media
Vorbis 2000Цифровое аудио распространение, радиостанции, потоковое мультимедиа, видеоигры, Spotify, Википедия
Кодирование высокой четкости (HDC)2002Цифровое радио, HD Radio
Адаптация динамического разрешения (DRA)2008Национальный аудиостандарт Китая, China Multimedia Mobile Broadcasting, DVB-H
Dolby AC-4 2017ATSC 3.0, телевидение сверхвысокой четкости (UHD TV)
MPEG -H 3D Audio

Кодирование речи

Кодирование речи стандартГодОбщие приложения
AAC -LD (LD-MDCT)1999Мобильная телефония, передача голосов по IP (VoIP), iOS, FaceTime
Сирена 1999VoIP, широкополосный звук, G.722.1
G.722.1 1999VoIP, широкополосный звук, G.722
G. 729.1 2006G.729, VoIP, широкополосный звук, мобильная телефония
EVRC-WB 2007Широкополосный звук
G.718 2008VoIP, широкополосное аудио, мобильная телефония
G.719 2008Телеконференцсвязь, видеоконференцсвязь, голосовая почта
CELT 2011VoIP, мобильная телефония
Opus 2012VoIP, мобильная телефония, WhatsApp, PlayStation 4
Enhanced Voice Services (EVS)2014Мобильная телефония, VoIP, широкополосное несколько аудио

MD DCT

Многомерные DCT (MD DCT) имеют применений, в основном 3 -D DCT, такие как 3-D DCT-II, который имеет несколько н овых прило ж ений, таких как системы кодирования гиперспектральных изображений, кодирование 3-D DCT с временной, алгоритмы кодирования видео ,, адаптивное кодирование видео и сжатие 3-D. В связи с усовершенствованием аппаратного и программного обеспечения внедрения быстрых алгоритмов необходимость использования M-D DCT быстро возрастает. DCT-IV завоевал популярность благодаря своей быстрой реализации многофазных фильтров с действительным знаком, ортогональных преобразователей с перекрытием и косинусно-модулированных базовых импульсов.

Цифровая обработка сигналов

DCT играет очень важную роль в цифровая обработка сигналов. Используя DCT, можно сжимать сигналы. DCT может быть в электрокардиографии для сжатия сигналов ЭКГ. DCT2 обеспечивает лучшую степень сжатия, чем DCT.

DCT широко используется в процессорах цифровых сигналов (DSP), а также в программном обществе цифровой обработки сигналов. Многие компании разработали DSP на основе технологии DCT. DCT широко используются для таких приложений, как кодирование, декодирование, видео, аудио, мультиплексирование, управляющие сигналы, сигнализация и аналого-цифровое преобразование <164...>. DCT также обычно используются для кодировщика / декодера телевидения высокой четкости (HDTV) чипов.

Артефакты сжатия

Распространенная проблема со сжатием DCT в цифрового носителях - это блочные артефакты сжатия, вызванные блоками DCT. Алгоритм DCT может вызвать блочные артефакты при применении сильного сжатия. DCT используется в большинстве случаев кодирования кодирования цифровых изображений и видео (таких как JPEG, H.26x и MPEG форматы) блочные артефакты сжатия на основе DCT широко распространены в цифровых носителях. В алгоритме DCT изображение (или кадр в последовательности изображений) делится на квадратные блоки, которые обрабатываются независимо друг от друга от друга от друга, берется DCT эти блоки, и результирующие DCT-коэффициенты квантуются. Этот процесс может вызвать артефакты блокировки, в первую очередь при высоких степенях сжатия данных . Это также может вызвать эффект «москитного шума », который обычно встречается в цифровом видео (например, в форматах MPEG).

Блоки DCT часто используются в глюк-арт. Художник Роза Менкман использует артефакты сжатия на основе DCT в своем глитч-арте, в частности блоки DCT, встречающиеся в большинстве форматов цифровых носителей, таких как JPEG цифровые изображения и MP3 цифровой звук. Другой пример - Jpegs немецкого фотографа Томаса Руффа, который использует преднамеренные артефакты JPEG в качестве основы стиля изображения.

Неформальный обзор

Нравится любое связанное с Фурье преобразование, дискретное косинусное преобразование (DCT) выражает функцию или сигнал в виде суммы синусоид с разными частотами и амплитудами. Подобно дискретному преобразованию Фурье (DFT), DCT оперирует функцию в дискретных точках данных. Очевидное различие между DCT и DFT заключается в том, что в первом используются только косинусные функции, а во втором - как косинусы, так и синусы (в форме комплексных экспонентов ). Однако это видимое различие является следствием более глубокого различия: DCT подразумевает отличные граничные условия от DFT или других преобразований.

Связанные с Фурье преобразования, которые работают с функцией в конечной области, например, DFT или DCT или ряд Фурье, можно рассматривать как неявно определение расширения функций за пределы области. То есть, если вы напишете функцию f (x) {\ displaystyle f (x)}f (x) как сумму синусоид, вы можете вычислить эту сумму при любом x {\ displaystyle x}x , даже для x {\ displaystyle x}x , где исходный f (x) {\ displaystyle f (x)}f (x) был не указан. ДПФ, как и ряд Фурье, подразумевает периодическое расширение исходной функции. DCT, как и косинусное преобразование , подразумевает даже расширение исходной функции.

Иллюстрация неявных четных / нечетных расширений входных данных DCT для N = 11 точек данных (красных точек) для четырех наиболее распространенных типов DCT (типы I-IV).

Однако, поскольку DCT работают на конечных дискретных последовательностях, применяются две проблемы, которые не применяются к непрерывному косинусному преобразованию. Во-первых, необходимо указать, является ли функция четной или нечетной как на левой, так и на правой границах области (т.е. на границах min-n и max-n в определениях ниже, соответственно). Во-указать, в какой точке функция четная или нечетная функция. В частности, рассмотрим последовательность abcd из четырех равноотстоящих точек и скажем, что мы задаем четную левую границу. Есть две разумные возможности: либо данные к предыдущей точке, либо данные находятся в точке полпути между предыдущей точкой, и в случае четного расширения - dcbaabcd (повторяется).

Этот выбор приводит всем стандартным вариациям DCT, а также к дискретным синусоидальным преобразованием (DST). Граница может быть четной или нечетной (2 варианта на границу) и может быть симметричной относительно точек или точек на полпути между двумя точками данных (2 варианта на границу), всего 2 × 2 × 2 × 2 = 16 возможностей. Половина этих возможностей, с четной левой границей, соответствуют 8 типам DCT; другая половина - это 8 типов DST.

Эти различные граничные условия сильно влияют на приложения преобразования и приводят к уникальным полезным свойствам для различных типов DCT. Наиболее прямо при использовании связанных с Фурье преобразований для решения уравнения в частных производных с помощью спектральных методов граничные условия задаются непосредственно как часть решаемой задачи. Или для MDCT (на основе DCT типа IV) граничные условия непосредственно участвуют в критическом своемстве MDCT отмены наложения во временной области. Более тонко, граничные условия отвечают за свойства «энергетической компактификации», которые делают DCT полезными для сжатия изображения и звука, потому что границы влияют на скорость сходимости любого ряда, подобного Фурье.

В частности, хорошо известно, что любые разрывы в функции уменьшают скорость сходимости ряда Фурье, так что требуется больше синусоид для представления функция с заданной точностью. Тот же принцип определяет применимость DFT и других преобразований для сжатия сигнала; чем плавнее функция, тем меньше членов в ее ДПФ или ДКП требуется для ее точного представления и тем больше ее можно сжать. (Здесь мы думаем о ДПФ или DCT как о приближении для ряда Фурье или косинусного ряда функции, соответственно, чтобы говорить о его «гладкости».) Однако, неявная периодичность ДПФ означает, что разрывы обычно возникают на границах: маловероятно, что любой случайный сегмент сигнала будет иметь одинаковое значение как на левой, так и на правой границах. (Аналогичная проблема возникает для DST, в котором нечетное левое граничное условие подразумевает разрыв для любой функции, которая не оказывается равной нулю на этой границе.) Напротив, DCT, где обе границы даже всегда имеют постоянное расширение на границах. (хотя наклон обычно прерывистый). Вот почему DCT и, в частности, DCT типов I, II, V и VI (типы, которые имеют две четные границы) обычно лучше работают для сжатия сигнала, чем DFT и DST. На практике для таких приложений типа обычно предпочтительнее использовать DCT II, ​​некоторые из соображений вычислительного удобства.

Формальное определение

Формально дискретное косинусное преобразование - это линейная обратимая функция f: RN → RN {\ displaystyle f : \ mathbb {R} ^ {N} \ to \ mathbb {R} ^ {N}}f: \ mathbb {R} ^ {N} \ to \ mathbb {R} ^ {N} (где R {\ displaystyle \ mathbb {R}}\ mathbb {R} обозначает набор действительных чисел ) или, что эквивалентно, обратимая квадратная матрица размером N × N . Есть несколько вариантов DCT с немного измененными определениями. N действительных чисел x 0,..., x N-1 преобразуются в N действительных чисел X 0,..., X N-1 по одной из формул:

DCT-I

X k = 1 2 (x 0 + (- 1) kx N - 1) + ∑ n = 1 N - 2 xn соз ⁡ [π N - 1 nk] k = 0,…, N - 1. {\ displaystyle X_ {k} = {\ frac {1} {2}} (x_ {0} + (- 1) ^ {k} x_ {N-1}) + \ sum _ {n = 1} ^ {N-2} x_ {n} \ cos \ left [{\ frac {\ pi} {N-1}} nk \ right] \ quad \ quad k = 0, \ dots, N-1.}X_k = \ frac { 1} {2} (x_0 + (-1) ^ k x_ {N-1}) + \ sum_ {n = 1} ^ {N-2} x_n \ cos \ left [\ frac {\ pi} {N- 1} nk \ right] \ quad \ quad k = 0, \ dots, N-1.

Некоторые авторы дополнительно умножают члены x 0 и x N-1 на √2, и соответственно умножить члены X 0 и X N-1 на 1 / √2. Это делает матрицу DCT-I ортогональной, если дополнительно умножить на общий масштабный коэффициент 2 N - 1 {\ displaystyle {\ sqrt {\ tfrac {2} {N-1}} }}{\ displaystyle {\ sqrt {\ tfrac {2} {N-1}}}} , но нарушает прямое соответствие с ДПФ с реальной четностью.

DCT-I в точности эквивалентен (до общего масштабного коэффициента 2) ДПФ 2 N - 2 {\ displaystyle 2N-2}2N-2 действительных чисел с ровной симметрией. Например, DCT-I из N = 5 действительных чисел abcde в точности эквивалентен ДПФ из восьми действительных чисел abcdedcb (даже симметрия), разделенных на два. (Напротив, типы DCT II-IV включают сдвиг на половину выборки в эквивалентном DFT.)

Обратите внимание, однако, что DCT-I не определен для N меньше 2. (Все другие типы DCT определены для любого положительного N.)

Таким образом, DCT-I соответствует граничным условиям: x n четно около n = 0 и даже около n = N-1; аналогично для X k.

DCT-II

X k = ∑ n = 0 N - 1 xn cos ⁡ [π N (n + 1 2) k] k = 0,…, N - 1. {\ displaystyle X_ {k} = \ sum _ {n = 0} ^ {N-1} x_ {n} \ cos \ left [{\ frac {\ pi} {N}} \ left (n + {\ frac {1} { 2}} \ right) k \ right] \ quad \ quad k = 0, \ dots, N-1.}X_k = \ sum_ {n = 0} ^ {N-1} x_n \ cos \ left [\ frac {\ pi} {N} \ left (n + \ frac {1} {2} \ right) k \ right] \ quad \ quad k = 0, \ dots, N-1.

DCT-II, вероятно, является наиболее часто используемой формой, и ее часто называют просто «DCT».

Это преобразование точно эквивалентно (с общим масштабным коэффициентом 2) DFT 4 N {\ displaystyle 4N}4N вещественные входы с четной симметрией, где элементы с четным индексом равны нулю. То есть это половина ДПФ 4 N {\ displaystyle 4N}4N входов yn {\ displaystyle y_ {n}}y_ {n} , где y 2 n = 0 {\ displaystyle y_ {2n} = 0}y_ {2n} = 0 , y 2 n + 1 = xn {\ displaystyle y_ {2n + 1} = x_ {n}}y_ {2n + 1} = x_n для 0 ≤ N < N {\displaystyle 0\leq n0 \ leq n <N , Y 2 N = 0 {\ displaystyle y_ {2N} = 0}y_ {2N} = 0 и y 4 N - n = yn {\ displaystyle y_ {4N-n} = y_ {n}}y_ {4N-n} = y_n для 0 < n < 2 N {\displaystyle 00 <n <2N . Преобразование DCT II также возможно с использованием сигнала 2N с последующим умножением на полус ущерба. Это демонстрирует Махоул.

Некоторые демонстрируют полученную матрицу на общий масштабный коэффициент 2 N {\ displaystyle {\ sqrt {\ tfrac {\ displaystyle {\ sqrt {\ tfrac {\ sqrt {\ tfrac {\ displaystyle {\ sqrt {\ tfrac {). 2} {N}}}}{\ displaystyle {\ sqrt {\ tfrac {2} {N}}}} (см. Ниже соответствующие изменения в DCT-III). Это делает матрицу DCT-II ортогональной, но нарушает прямое соответствие с реальным четным ДПФ полусмещенного ввода. Это нормализация, используемая, например, Matlab. Во многих приложенийх, таких как JPEG, масштабирование является произвольным, поскольку масштабные коэффициенты могут быть объединены с последующим этапом вычислений (например, этап в JPEG). лять DCT с меньшим вычислить умножений.

DCT-II подразумевает граничные условия: x n даже около n = −1/2 и даже около n = N− 1/2; X k является четным около k = 0 и нечетным около k = N.

DCT-III

X k = 1 2 x 0 + ∑ n = 1 N - 1 xn cos ⁡ [π NN (k + 1 2)] k = 0,…, N - 1. {\ displaystyle X_ {k} = {\ frac {1} {2}} x_ {0} + \ sum _ {n = 1} ^ {N-1} x_ {n} \ cos \ left [{\ frac {\ pi} {N}} n \ left (k + {\ frac {1} {2}} \ right) \ right] \ quad \ quad k = 0, \ dots, N-1.}X_k = \ frac {1} {2} x_0 + \ sum_ {n = 1} ^ {N-1} x_n \ cos \ left [\ frac {\ pi} {N} n \ left (k + \ frac {1}) {2} \ right) \ right] \ quad \ quad k = 0, \ dots, N-1.

Это инверсия DCT-II (с точностью до масштабного коэффициента, см. ниже), эту форму иногда просто называют "инверсией DCT" ("IDCT").

Некоторые авторы делят член x 0 на √2 вместо 2 (в результате получается общее x 0 / √2 член) и умножьте полученную матрицу на общий коэффициент масштабирования 2 N {\ displaystyle {\ sqrt {\ tfrac {2} {N}}}}{\ displaystyle {\ sqrt {\ tfrac {2} {N}}}} (см. Выше соответствующее изменение в DCT-II), так что DCT-II и DCT-III являются транспозами друг друга. Это делает матрицу DCT-III ортогональной, но нарушает прямое соответствие с реальным четным ДПФ полусмещенного вывода.

DCT-III подразумевает граничные условия: x n является четным около n = 0 и нечетным около n = N; X k равно примерно k = -1/2 и даже примерно k = N-1/2.

DCT-IV

X k = ∑ n = 0 N - 1 xn cos ⁡ [π N (n + 1 2) (k + 1 2)] k = 0,…, N - 1. {\ displaystyle X_ {k} = \ sum _ {n = 0} ^ {N-1} x_ {n} \ cos \ left [{\ frac {\ pi} {N}} \ left (n + {\ frac {1} {2}} \ right) \ left (k + {\ frac {1} {2}} \ right) \ right] \ quad \ quad k = 0, \ dots, N-1.}X_k = \ sum_ {n = 0} ^ {N-1 } x_n \ cos \ left [\ frac {\ pi} {N} \ left (n + \ frac {1} {2} \ right) \ left (k + \ frac {1} {2} \ right) \ right] \ четырехъядерный \ четырехъядерный к = 0, \ точки, N-1.

Матрица DCT-IV становится ортогональной (и, таким образом, явно симметричной, сама обратная), если еще умножить на общий коэффициент масштабирования 2 / N {\ displaystyle {\ sqrt {2 / N} }}\ sqrt {2 / N} .

Вариант DCT-IV, в котором данные различных преобразователей перекрываются, называется модифицированным дискретным косинусным преобразованием (MDCT).

DCT-IV подразумевает граничные условия: x n четно около n = -1/2 и нечетно около n = N-1/2; аналогично для X k.

DCT V-VIII

DCT типов I-IV между двумя точками симметрии: границ. Напротив, DCT типов V-VIII подразумевают четные / нечетные границы вокруг точек для одной границы и на полпути между двумя точками данных для другой границы.

Другими словами, типами DCT I-IV эквивалентны вещественно-четным ДПФ четного порядка (независимо от того, является ли N четным или нечетным), поскольку соответствующее ДПФ имеет длину 2 (N - 1) (для DCT-I) или 4N (для DCT-II / III) или 8N (для DCT-IV). Четыре дополнительных типа дискретного косинусного преобразования по существу соответствуют вещественно-четным ДПФ логически нечетного порядка, которые имеют множители N ± ½ в знаменателях аргументов косинуса.

Однако эти варианты, похоже, редко используются на практике. Одна из причин, возможно, заключается в том, что алгоритмы БПФ для ДПФ нечетной длины, как правило, более сложны, чем алгоритмы БПФ для ДПФ четной длины (например, эта повышенная сложность) переносится на DCT. как описано ниже.

(Тривиальный массив одного вещественно-четных чисел, ДПФ длиной один (нечетная длина) числа a, соответствует длине DCT-V N = 1.)

Обратные преобразования

Используя приведенные выше правила о нормализации, обратное DCT-I - это DCT-I, умноженное на 2 / (N-1). Обратное к DCT-IV - DCT-IV, умноженное на 2 / N. Обратным к DCT-II является DCT-III, умноженный на 2 / N и наоборот.

Как и для DFT коэффициент нормализации перед этими определениями преобразования является просто условием и отличается от лечения. Например, некоторые авторы умножают преобразование на 2 / N {\ displaystyle {\ sqrt {2 / N}}}\ sqrt {2 / N} , так что обратное преобразование не требует какого-либо дополнительного мультипликативного множителя. В сочетании с несколькими множителями √2 (см. Выше) это можно использовать, сделать матрицу преобразования ортогональной.

многомерными DCT

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

MD DCT-II

Например, двухмерный DCT-II изображения или матрицы - это просто одномерный DCT-II сверху, выполненный вдоль строк и по столбикам (или наоборот). То есть 2D DCT-II задается формулой (без нормализации и других масштабных коэффициентов, как указано выше):

X k 1, k 2 = ∑ n 1 = 0 N 1 - 1 (∑ n 2 = 0 N 2 - 1 xn 1, n 2 cos ⁡ [π N 2 (n 2 + 1 2) k 2]) cos ⁡ [π N 1 (n 1 + 1 2) k 1] = ∑ n 1 = 0 N 1 - 1 ∑ n 2 = 0 N 2 - 1 xn 1, n 2 cos ⁡ [π N 1 (n 1 + 1 2) k 1] cos ⁡ [π N 2 (n 2 + 1 2) k 2]. {\ displaystyle {\ begin {align} X_ {k_ {1}, k_ {2}} = \ sum _ {n_ {1} = 0} ^ {N_ {1} -1} \ left (\ sum _ { n_ {2} = 0} ^ {N_ {2} -1} x_ {n_ {1}, n_ {2}} \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left ( n_ {2} + {\ frac {1} {2}} \ right) k_ {2} \ right] \ right) \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left ( n_ {1} + {\ frac {1} {2}} \ right) k_ {1} \ right] \\ = \ sum _ {n_ {1} = 0} ^ {N_ {1} -1} \ сумма _ {n_ {2} = 0} ^ {N_ {2} -1} x_ {n_ {1}, n_ {2}} \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} {2}} \ right) k_ {1} \ right] \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left ( n_ {2} + {\ frac {1} {2}} \ right) k_ {2} \ right]. \ end {align}}}{\ displaystyle {\ begin {align} X_ {k_ {1}, k_ {2}} = \ sum _ {n_ {1} = 0} ^ {N_ {1} -1} \ left (\ sum _ {n_ {2} = 0} ^ {N_ {2} -1} x_ {n_ {1}, n_ {2}} \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left (n_ {2} + {\ frac {1} {2}} \ right) k_ {2} \ right] \ right) \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} {2}} \ right) k_ {1} \ right] \\ = \ sum _ {n_ {1} = 0} ^ {N_ {1} -1} \ sum _ {n_ {2} = 0} ^ {N_ {2} - 1} x_ {n_ {1}, n_ {2}} \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} {2}) } \ right) k_ {1} \ right] \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left (n_ {2} + {\ frac {1} {2}} \ right) k_ {2} \ right]. \ en d {a ligned}}}
Обратное многомерное DCT - это просто разделимое произведение инверсии соответствующих одномерных DCT (см. выше), например одномерные инверсии, применяемые по одному измерению за раз в алгоритме строка-столбец.

Трехмерный DCT-II может быть вычислен с помощью формула 2-D DCT-II может быть вычислен с помощью формулы

X k 1, k 2, k 3 = ∑ n 1 = 0 N 1 - 1 ∑ n 2 знак равно 0 N 2 - 1 ∑ n 3 = 0 N 3 - 1 xn 1, n 2, n 3 cos ⁡ [π N 1 (n 1 + 1 2) k 1] cos ⁡ [π N 2 ( n 2 + 1 2) k 2] соз ⁡ [π N 3 (n 3 + 1 2) k 3], ∀ ki = 0, 1, 2,…, N i - 1. {\ displaystyle {\ begin {выровнено } X_ {k_ {1}, k_ {2}, k_ {3}} = \ sum _ {n_ {1} = 0} ^ {N_ {1} -1} \ sum _ {n_ {2} = 0 } ^ {N_ {2} -1} \ sum _ {n_ {3} = 0} ^ {N_ {3} -1} x_ {n_ {1}, n_ {2}, n_ {3}} \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} {2}} \ right) k_ {1} \ right] \ cos \ left [{ \ frac {\ pi} {N_ {2}}} \ left (n_ {2} + {\ frac {1}) {2}} \ right) k_ {2} \ right] \ cos \ left [{\ frac {\ pi} {N_ {3}}} \ left (n_ {3} + {\ frac {1} {2})} \ right) k_ {3} \ right], \ quad \ forall k_ {i} = 0,1,2, \ точки, N_ {i} -1. \ end {align}}}{\ displaystyle {\ begin {выровнены} X_ {k_ {1}, k_ {2}, k_ {3}} = \ sum _ {n_ {1} = 0} ^ {N_ {1} -1} \ sum _ {n_ {2 } = 0} ^ {N_ {2} -1} \ sum _ {n_ {3} = 0} ^ {N_ {3} -1} x_ {n_ {1}, n_ {2}, n_ {3}} \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} {2}} \ right) k_ {1} \ right] \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left (n_ {2} + {\ frac {1} {2}} \ right) k_ {2} \ right] \ cos \ left [{ \ frac {\ pi} {N_ {3}}} \ left (n_ {3} + {\ frac {1} {2}} \ right) k_ {3} \ right], \ quad \ forall k_ {i} Знак равно 0,1,2, \ точки, N_ {i} -1. \ End {align}}}

Обратная величина 3-D DCT-II - это 3-D DCT-III и может быть вычислен по формуле, задаваемое выражение

xn 1, n 2, n 3 = ∑ k 1 = 0 N 1 - 1 ∑ k 2 = 0 N 2 - 1 ∑ k 3 = 0 N 3 - 1 X k 1, k 2, k 3 cos ⁡ [π N 1 (n 1 + 1 2) k 1] cos ⁡ [π N 2 (n 2 + 1 2) k 2] cos ⁡ [π N 3 (n 3 + 1 2) k 3], ∀ ni = 0, 1, 2,…, N i - 1. {\ displaystyle {\ begin {выровнено} x_ {n_ {1}, n_ {2}, n_ {3}} = \ sum _ {k_ {1} = 0} ^ {N_ {1} -1} \ sum _ {k_ {2} = 0} ^ {N_ {2} -1} \ sum _ {k_ {3} = 0} ^ {N_ {3} -1} X_ {k_ {1}, k_ {2}, k_ {3}} \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} { 2}} \ right) k_ {1} \ right] \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left (n_ {2} + {\ frac {1} {2}}) \ right) k_ {2} \ right] \ cos \ left [{\ frac {\ pi} {N_ {3}}} \ left (n_ {3} + {\ frac {1} {2}} \ right) k_ {3} \ right], \ quad \ forall n_ {i} = 0,1,2, \ dots, N_ {i} -1. \ end {align}}}{\ displaystyle {\ begin {align} x_ {n_ {1}, n_ {2}, n_ {3 }} = \ sum _ {k_ {1} = 0} ^ {N_ {1} -1} \ sum _ {k_ {2} = 0} ^ {N_ {2} -1} \ sum _ {k_ { 3} = 0} ^ {N_ {3} -1} X_ {k_ {1}, k_ {2}, k_ {3}} \ cos \ left [{\ frac {\ pi} {N_ {1}}} \ left (n_ {1} + {\ frac {1} {2}} \ right) k_ {1} \ right] \ cos \ left [{\ frac {\ pi} {N_ {2}}} \ left ( n_ {2} + {\ frac {1} {2}} \ right) k_ {2} \ right] \ cos \ left [{\ frac {\ pi} {N_ {3}}} \ left (n_ {3 } + {\ frac {1} {2}} \ right) k_ {3} \ right], \ quad \ forall n_ {i} = 0,1,2, \ dots, N_ {i} -1. \ end {выровнено}}}

Технически, Вычисление двух-, трехмерного (или многомерного) DCT с помощью последовательностей одномерных DCT по каждому измерению известно как алгоритм-столбца. Однако, как и в случае с многомерными алгоритмами БПФ, существуют другие методы для вычисления же самого при выполнении вычислений в порядке (т.е. чередование / комбинирование алгоритмов для разных измерений). В связи с быстрым ростом приложений, основанных на 3-D DCT, разработано несколько быстрых алгоритмов для вычислений 3-D DCT-II. Алгоритмы Vector-Radix применяются для вычислений M-D DCT, чтобы уменьшить вычислительную сложность и увеличить скорость вычислений. Для эффективных вычислений 3-D DCT-II был разработан быстрый алгоритм - векторно-радикальное прореживание по частоте (VR DIF).

3-D DCT-II VR DIF

Чтобы применить алгоритм VR DIF, входные данные должны быть сформулированы и перегруппированы следующим образом. Предполагается, что размер преобразования N x N x N равен 2.

Четыре основных этапа обработки 3-D DCT-II с использованием алгоритма VR DIF.
x ~ (n 1, n 2, n 3) = х (2 n 1, 2 n 2, 2 n 3) x ~ (n 1, n 2, N - n 3 - 1) = x (2 n 1, 2 n 2, 2 n 3 + 1) x ~ (n 1, N - n 2-1, n 3) = x (2 n 1, 2 n 2 + 1, 2 n 3) x ~ (n 1, N - n 2 - 1, N - n 3 - 1) = x (2 n 1, 2 n 2 + 1, 2 n 3 + 1) x ~ (N - n 1 - 1, n 2, n 3) = х (2 n 1 + 1, 2 n 2, 2 n 3) х ~ (N - n 1 - 1, n 2, N - n 3 - 1) = x (2 n 1 + 1, 2 n 2, 2 n 3 + 1) x ~ (N - n 1 - 1, N - n 2 - 1, n 3) = x (2 n 1 + 1, 2 n 2 + 1, 2 n 3) x ~ (N - n 1 - 1, N - n 2 - 1, N - n 3-1) знак равно Икс (2 n 1 + 1, 2 n 2 + 1, 2 n 3 + 1) {\ displaystyle {\ begin {array } {lcl} {\ tilde {x}} (n_ {1}, n_ {2}, n_ {3}) = x (2n_ {1}, 2n_ {2}, 2n_ {3}) \\ {\ tilde {x}} (n_ {1}, n_ {2}, N- n_ {3} -1) = x (2n_ {1}, 2n_ {2}, 2n_ {3} +1) \\ {\ tilde { x}} (n_ {1}, N-n_ {2} -1, n_ {3}) = x (2n_ {1}, 2n_ {2} + 1,2n_ {3}) \\ {\ tilde {x }} (n_ {1}, N-n_ {2} -1, N-n_ {3} -1) = x (2n_ {1}, 2n_ {2} + 1,2n_ {3} +1) \\ {\ tilde {x}} (N-n_ {1} -1, n_ {2}, n_ {3}) = x (2n_ {1} + 1,2n_ {2}, 2n_ {3}) \\ { \ тильда {x}} (N-n_ {1} -1, n_ {2}, N-n_ {3} -1) = x (2n_ {1} + 1,2n_ {2}, 2n_ {3} +1) \\ {\ tilde {x} } (N-n_ {1} -1, N-n_ {2} -1, n_ {3}) = x (2n_ {1} + 1,2n_ {2} + 1,2n_ {3}) \\ { \ tilde {x}} (N-n_ {1} -1, N-n_ {2} -1, N-n_ {3} -1) = x (2n_ {1} + 1,2n_ {2} + 1, 2n_ {3} +1) \\\ end {array}}{\ displaystyle {\ begin {array} {lcl} {\ tilde {x}} (n_ {1}, n_ { 2}, n_ {3}) = x (2n_ {1}, 2n_ {2}, 2n_ {3}) \\ {\ tilde {x}} (n_ {1}, n_ {2}, N-n_ { 3} -1) = x (2n_ {1}, 2n_ {2}, 2n_ {3} +1) \\ {\ tilde {x}} (n_ {1}, N-n_ {2} -1, n_ {3}) = x (2n_ {1}, 2n_ {2} + 1,2n_ {3}) \\ {\ tilde {x}} (n_ {1}, N-n_ {2} -1, N-n_ {3} -1) = х (2n_ {1}, 2n_ {2} + 1,2n_ {3} +1) \\ {\ тильда {x}} (N-n_ {1} -1, n_ {2}, n_ {3}) = x (2n_ {1} + 1,2n_ {2}, 2n_ {3}) \\ {\ tilde {x}} (N-n_ {1} -1, n_ {2}, N-n_ {3} -1) = x (2n_ {1} + 1,2n_ {2}, 2n_ {3} +1) \\ {\ tilde {x}} (N-n_ {1} -1, N-n_ {2} -1, n_ {3}) = x (2n_ {1} + 1,2n_ {2} + 1,2n_ {3}) \\ {\ tilde {x}} (N-n_ {1} -1, N -n_ {2} -1, N-n_ {3} -1) = x (2n_ {1} + 1,2n_ {2} + 1,2n_ {3} +1) \\\ конец {массив}}} где 0 ≤ n 1, n 2, n 3 ≤ N 2 - 1 {\ displaystyle 0 \ leq n_ { 1}, n_ {2}, n_ {3} \ leq {\ frac {N} {2}} - 1}{\ displaystyle 0 \ leq n_ {1}, n_ {2}, n_ {3} \ leq {\ frac {N} {2}} - 1}

На рисунке рядом показаны четыре этапа, которые участвуют в вычислении 3 -D DCT-II с использованием алгоритма VR DIF. Первый этап - это 3-D переупорядочивание с использованием индекса, проиллюстрированного приведенными выше уравнениями. Второй этап - расчет бабочки. Каждая бабочка вместе вычисляет восемь точек, как показано на рисунке ниже, где c (ϕ i) = cos ⁡ (ϕ i) {\ displaystyle c (\ phi _ {i}) = \ cos (\ phi _ {i })}{\ displaystyle c (\ phi _ {i}) = \ cos (\ phi _ {i})} .

Исходный 3-D DCT-II теперь можно записать как

X (k 1, k 2, k 3) = ∑ n 1 = 1 N - 1 ∑ n 2 = 1 N - 1 ∑ N 3 знак равно 1 N - 1 Икс ~ (N 1, N 2, N 3) соз ⁡ (ϕ k 1) соз ⁡ (ϕ k 2) cos ⁡ (ϕ k 3) {\ Displaystyle X (k_ {1}, k_ {2}, k_ {3}) = \ sum _ {n_ {1} = 1} ^ {N-1} \ sum _ {n_ {2} = 1} ^ {N-1} \ sum _ {n_ {3} = 1} ^ {N-1} {\ tilde {x}} (n_ {1}, n_ {2}, n_ {3}) \ cos (\ phi k_ {1}) \ cos (\ phi k_ {2}) \ cos (\ phi k_ {3})}{\ displaystyle X (k_ {1}, k_ {2}, k_ {3}) = \ sum _ {n_ {1} = 1} ^ {N-1} \ sum _ {n_ {2 } = 1} ^ {N-1} \ sum _ {n_ {3} = 1} ^ {N-1} {\ tilde {x}} (n_ {1}, n_ {2}, n_ {3}) \ соз (\ phi k_ {1}) \ cos (\ phi k_ {2}) \ cos (\ phi k_ {3})}

где ϕ i = π 2 N (4 N i + 1), а i = 1, 2, 3 {\ displaystyle \ phi _ {i} = {\ frac {\ pi} {2N}} (4N_ {i} +1), {\ text {and}} i = 1,2,3}{\ displaystyle \ phi _ {i} = {\ frac {\ pi} {2N}} (4N_ {i} +1), {\ text {and}} i = 1,2,3} .

четное и нечетные части k 1, k 2 {\ displaystyle k_ {1}, k_ {2}}k_ {1}, k_ {2} и k 3 {\ displaystyle k_ {3}}k_ {3} и подробно, общая формула для расчета 3-D DCT-II может быть выражена как

стадия одиночной бабочки алгоритма VR D ЕСЛИ.
X (k 1, k 2, k 3) = ∑ n 1 = 1 N 2 - 1 ∑ n 2 = 1 N 2 - 1 ∑ n 1 = 1 N 2 - 1 x ~ ijl (n 1, n 2, n 3) соз ⁡ (ϕ (2 К 1 + я) соз ⁡ (ϕ (2 К 2 + J) соз ⁡ (ϕ (2 K 3 + l)) {\ Displaystyle X (k_ {1}, k_ {2}, k_ {3}) = \ sum _ {n_ {1} = 1} ^ {{\ tfrac {N} {2}} - 1} \ sum _ {n_ {2} = 1} ^ {{ \ tfrac {N} {2}} - 1} \ sum _ {n_ {1} = 1} ^ {{\ tfrac {N} {2}} - 1} {\ tilde {x}} _ {ijl} ( n_ {1}, n_ {2}, n_ {3}) \ cos (\ phi (2k_ {1} + i) \ cos (\ phi (2k_ {2} + j) \ cos (\ phi (2k_ {3 } + l))}{\ displaystyle X (k_ {1}, k_ {2}, k_ {3}) = \ sum _ {n_ {1} = 1} ^ {{\ tfrac {N} {2}} - 1} \ sum _ {n_ {2} = 1} ^ { {\ tfrac {N} {2}} - 1} \ sum _ {n_ {1} = 1} ^ {{\ tfrac {N} {2} } -1} {\ tilde {x}} _ {ijl} (n_ {1}, n_ {2}, n_ {3}) \ cos (\ phi (2k_ {1} + i) \ cos (\ phi ( 2k_ {2} + j) \ cos (\ phi (2k_ {3} + l))}

где

x ~ ijl (N 1, N 2, N 3) знак равно Икс ~ (N 1, N 2, N 3) + (- 1) Лк ~ (N 1, N 2, N 3 + N 2) {\ Displaystyle {\ тильда {x}} _ {ijl} (n_ {1}, n_ {2}, n_ {3}) = {\ tilde {x}} (n_ {1}, n_ {2}, n_ {3}) + (- 1) ^ {l} {\ tilde {x}} \ left (n_ {1}, n_ {2}, n_ {3} + {\ frac {n} {2}} \ right)}{\ displaystyle {\ tilde {x}} _ {ijl} (n_ {1}, n_ {2}, n_ {3}) = {\ tilde {x}} (n_ {1}, n_ {2}, n_ {3}) + (- 1) ^ {l} {\ tilde {x}} \ left (n_ {1}, n_ {2}, n_ {3} + {\ frac {n} {2}} \ right)}
+ (- 1) jx ~ (n 1, n 2 + n 2, n 3) + (- 1) j + lx ~ (n 1, n 2 + n 2, n 3 + n 2) {\ displaystyle + (- 1) ^ {j} {\ tilde {x}} \ left (n_ {1}, n_ {2} + {\ frac {n} {2 }}, n_ {3} \ right) + (- 1) ^ {j + l} {\ til de {x}} \ left (n_ {1}, n_ {2} + {\ frac {n} {2}}, n_ {3} + {\ frac {n} {2}} \ right)}{\ displaystyle + (- 1) ^ {j} {\ tilde {x}} \ left (n_ {1}, n_ {2} + {\ frac {n} {2}}, n_ {3} \ right) + (- 1) ^ {j + l} {\ tilde {x}} \ left (n_ { 1}, n_ {2} + {\ frac {n} {2}}, n_ {3} + {\ frac {n} {2}} \ right)}
+ (- 1) ix ~ (n 1 + n 2, n 2, n 3) + (- 1) я + jx ~ (n 1 + n 2 + n 2, n 2, n 3) {\ displaystyle + (- 1) ^ {i} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2})}, n_ {2}, n_ {3} \ right) + (- 1) ^ {i + j} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2}} + {\ frac {n} {2}}, n_ {2}, n_ {3} \ right)}{\ displaystyle + (- 1) ^ {i} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2}}, n_ {2}, n_ {3} \ right) + (- 1) ^ {i + j} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2}} + {\ frac {n} {2}}, n_ {2}, n_ {3} \ right)}
+ (- 1) я + lx ~ (n 1 + n 2, n 2, n 3 + n 3) {\ displaystyle + (- 1) ^ {i + l} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2}}, n_ {2}, n_ {3} + {\ frac {n} {3}} \ right)}{\ displaystyle + (- 1) ^ {i + l} {\ tilde {x}} \ left (n_ {1} + {\ frac {n } {2}}, n_ {2}, n_ {3} + {\ frac {n} {3}} \ right)}
+ (- 1) я + j + lx ~ (n 1 + n 2, n 2 + n 2, n 3 + n 2) где i, j, l = 0 или 1. {\ displaystyle + (- 1) ^ {i + j + l} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2}}, n_ {2} + {\ frac {n} {2}) }, n_ {3} + {\ frac {n} {2}} \ right) {\ text {where}} i, j, l = 0 {\ text {или}} 1.}{\ displaystyle + (- 1) ^ {i + j + l} {\ tilde {x}} \ left (n_ {1} + {\ frac {n} {2}}, n_ {2} + {\ frac {n} {2}}, n_ {3} + {\ frac {n} {2}} \ right) {\ text {where}} i, j, l = 0 {\ текст {или}} 1.}
Арифметическая сложность

Для всего вычисления 3-D DCT [log 2 ⁡ N] {\ displaystyle [\ log _ {2} N]}{\ displaystyle [\ log _ { 2} N]} этапов, и каж дый этап включает N 3/8 {\ displaystyle N ^ {3} / 8}{\ displaystyle N ^ {3} / 8} бабочек. Для всего 3-D DCT требуется [(N 3/8) log 2 ⁡ N] {\ displaystyle \ left [(N ^ {3} / 8) \ log _ {2} N \ right]}{\ displaystyle \ left [(N ^ {3} / 8) \ log _ {2} N \ right]} бабочек для вычислений. Все бабочка требует семи реальных умножений (включая тривиальное умножение) и 24 реальных сложений (включая тривиальные сложения). Следовательно, общее количество действительных умножений, необходимых для этого этапа, равно [(7/8) N 3 log 2 ⁡ N] {\ displaystyle \ left [(7/8) N ^ {3} \ log _ {2 } N \ right]}{\ displaystyle \ le ft [(7/8) N ^ {3} \ log _ {2} N \ right]} , а общее количество реальных добавлений, т. Е. Включая пост-добавление (рекурсивные добавления), которые могут быть вычислены непосредственно после стадии бабочки или после стадии обратного побитового преобразования, задаются как [3 2 N 3 log 2 ⁡ N] ⏟ Real + [3 2 N 3 log 2 ⁡ N - 3 N 3 + 3 N 2] ⏟ Рекурсивный = [9 2 N 3 log 2 ⁡ N - 3 N 3 + 3 N 2] {\ displaystyle \ underbrace {\ left [{\ frac {3} {2}} N ^ {3} \ log _ {2} N \ right]} _ {\ text {Real}} + \ underbrace {\ left [{\ frac {3} {2}} N ^ {3} \ log _ { 2} N-3N ^ {3} + 3N ^ {2} \ right]} _ {\ text {Рекурсивный}} = \ left [{\ frac {9} {2}} N ^ {3} \ log _ { 2} N-3N ^ {3} + 3N ^ {2} \ right]}{\ displaystyle \ underbrace {\ left [{\ frac {3} {2}} N ^ {3} \ log _ {2} N \ right]} _ { \ text {Real}} + \ underbrace {\ left [{\ frac {3} {2}} N ^ {3} \ log _ {2} N-3N ^ {3} + 3N ^ {2} \ right] } _ {\ text {Рекурсивно}} = \ left [{\ frac {9} {2}} N ^ {3} \ log _ {2} N-3N ^ {3} + 3N ^ {2} \ right] } .

Обычный метод вычислений MD-DCT-II использует подход «строка-столбец-кадр» (RCF), который является сложным в вычислительном отношении и менее продуктивным на самых современных современных аппаратных платформх. Количество умножений, необходимых для вычислений алгоритма VR DIF по сравнению с алгоритмом RCF, довольно невелико. Количество умножений и сложений, используемых в подходе RCF, определяется как [3 2 N 3 log 2 ⁡ N] {\ displaystyle \ left [{\ frac {3} {2}} N ^ {3} \ log _ { 2} N \ right]}{\ displaystyle \ left [{\ frac {3} {2}} N ^ {3} \ log _ {2} N \ right]} и [9 2 N 3 log 2 ⁡ N - 3 N 3 + 3 N 2] {\ displaystyle \ left [{\ frac {9} {2} } N ^ {3} \ log _ {2} N-3N ^ {3} + 3N ^ {2} \ right]}{\ displaystyle \ left [{\ frac {9} {2}} N ^ {3} \ log _ {2} N-3N ^ {3} + 3N ^ {2} \ right]} соответственно. Из таблицы 1 видно, что общее количество

ТАБЛИЦА 1 Сравнение алгоритмов VR DIF и RCF для вычислений 3D-DCT-II
Размер преобразования3D VR MultsRCF Mults3D VR перехRCF периф
8 x 8 x 82,6254,510,87510,875
16 x 16 x 163,5615,18815,188
32 x 32 x 324,3757,519,59419,594
64 x 64 x 645,25924,04724,047

связанных умножений с 3-D DCT алгоритм VR меньше, чем связанный с подходом RCF более чем на 40%. Кроме того, подход RCF включает в себя транспонирование матрицы и большее количество операций индексации и обмен данных, чем новый алгоритм VR. Это делает алгоритм 3-D DCT VR более и лучше подходит для 3-D приложений, которые включают 3-D DCT-II, как сжатие видео и другие приложения для обработки 3-D изображений. Главное соображение при выборе быстрого алгоритма - избежать вычислительных и структурных сложностей. По мере развития технологий компьютеров и DSP время выполнения арифметических операций (умножения и сложения) становится очень быстрым, и регулярная вычислительная структура становится наиболее используемыми факторами. Следовательно, хотя предложенный выше алгоритм 3-D VR не достигает теоретической нижней границы числа умножений, он имеет более простую вычислительную структуру по сравнению с другими алгоритмами 3-D DCT. Он может быть реализован на месте с использованием единственной бабочки и свойствами алгоритма БПФ Кули - Тьюки в трехмерном пространстве. Следовательно, 3-D VR представляет собой хороший выбор для сокращения арифметических операций при вычислении 3-D DCT-II, сохраняя при этом простую структуру, характерную для стиля «бабочка». Алгоритмы БПФ Кули - Тьюки.

Двумерный DCT частоты из JPEG DCT

На изображении справа отображает комбинацию горизонтальных и вертикальных частот для 8 x 8 (N 1 = N 2 = 8 {\ displaystyle N_ {1} = N_ {2} = 8}N_1 = N_2 = 8 ) двумерное DCT. Каждый шаг слева направо и сверху вниз - это увеличение частоты на 1/2 цикла. Например, перемещение вправо из верхнего левого квадрата дает увеличение на полупериод горизонтальной частоты. Еще одно движение вправо дает два полупериода. Движение вниз дает два полупериода по горизонтали и полупериод по вертикали. Исходные данные (8x8) преобразуются в линейную комбинацию этих 64 квадратов частот.

MD-DCT-IV

M-D DCT-IV - это просто расширение 1-D DCT-IV на M размерную область. Двумерный матрицы DCT-IV или изображения задается как

X k, l = ∑ n = 0 N - 1 ∑ m = 0 M - 1 xn, m cos ⁡ ((2 m + 1) (2 k + 1) π 4 N) cos ⁡ ((2 n + 1) (2 l + 1) π 4 M). где К знак равно 0, 1, 2..., N - 1 и l = 0, 1, 2..., M - 1 {\ displaystyle X_ {k, l} = \ sum _ {n = 0} ^ { N-1} \ sum _ {m = 0} ^ {M-1} x_ {n, m} \ cos \ left ({\ frac {(2m + 1) (2k + 1) \ pi} {4N}} \ right) \ cos \ left ({\ frac {(2n + 1) (2l + 1) \ pi} {4M}} \ right) {\ text {. где}} k = 0,1,2..., N-1 {\ text {and}} l = 0,1,2..., M-1}{\ displaystyle X_ {k, l} = \ sum _ {n = 0} ^ {N-1} \ sum _ {m = 0} ^ {M-1} x_ {n, m} \ cos \ left ({\ frac {(2m + 1) (2k + 1) \ pi} {4N}} \ right) \ cos \ left ({\ гидроразрыва {(2n + 1) (2l + 1) \ pi} {4M}} \ right) {\ text {. где}} k = 0,1,2..., N-1 {\ text {and}} l = 0,1,2..., M-1} .

Мы можем вычислить MD DCT-IV используя обычный метод строка-столбец, или мы можем использовать метод полиномиального преобразования для быстрого и эффективного вычисления. Основная идея этого алгоритма состоит в том, чтобы использовать полиномиальное преобразование для прямого преобразования многомерного DCT в серию одномерных DCT. MD DCT-IV также имеет несколько приложений в различных областях.

Вычисление

Хотя прямое применение этих формул потребовало бы O (N) операций, можно вычислить то же самое со сложностью только O (N log N) путем факторизации вычислений аналогичным образом. в быстрое преобразование Фурье (БПФ). Можно также вычислить DCT с помощью БПФ в сочетании с O (N) этапами предварительной и последующей обработки. В общем, O (N log N) методы для вычисления DCT известны как алгоритмы быстрого косинусного преобразования (FCT).

В принципе, наиболее эффективными алгоритмами обычно являются те, которые предназначены непосредственно для DCT, в отличие от использования обычного БПФ плюс O (N) дополнительных операций (см. Исключение ниже). Однако даже "специализированные" алгоритмы DCT (включая все те из них, которые достигают наименьшего известного арифметического счета, по крайней мере, для размеров степени двойки ) обычно тесно связаны с алгоритмами БПФ, поскольку DCT по сути являются ДПФ Для реальных и четных данных можно разработать быстрый алгоритм DCT, взяв БПФ и исключив избыточные операции из-за этой симметрии. Это можно сделать даже автоматически (Frigo Johnson, 2005). Алгоритмы, основанные на алгоритме БПФ Кули – Тьюки, являются наиболее распространенными, но любой другой алгоритм БПФ также применим. Например, это приводит к алгоритмам минимального умножения для ДПФ, хотя, как правило, за счет дополнительных добавлений, и аналогичный алгоритм был предложен Фейгом и Виноградом (1992) для DCT. Поскольку все алгоритмы для DFT, DCT и подобных преобразований очень тесно связаны, любое улучшение алгоритмов для одного преобразования теоретически приведет к немедленному улучшению и для других преобразований (Duhamel Vetterli 1990).

Хотя алгоритмы DCT, которые используют немодифицированное FFT, часто имеют некоторые теоретические накладные расходы по сравнению с лучшими специализированными алгоритмами DCT, первые также имеют явное преимущество: широко доступны высокооптимизированные программы FFT. Таким образом, на практике часто бывает проще получить высокую производительность для обычных длин N с помощью алгоритмов на основе БПФ. (Производительность на современном оборудовании обычно не зависит от простого арифметического подсчета, а оптимизация требует значительных инженерных усилий.) С другой стороны, специализированные алгоритмы DCT широко используются для преобразований небольших фиксированных размеров, таких как 8 × 8 {\ displaystyle 8 \ times 8}8 \ times 8 DCT-II, используемый при сжатии JPEG, или небольшие DCT (или MDCT), обычно используемые при сжатии звука. (Уменьшение размера кода также может быть причиной использования специализированного DCT для приложений встроенных устройств.)

Фактически, даже алгоритмы DCT, использующие обычное БПФ, иногда эквивалентны сокращению избыточных операций из более крупного БПФ. вещественно-симметричных данных, и они могут быть даже оптимальными с точки зрения арифметических подсчетов. Например, DCT типа II эквивалентен ДПФ размера 4 N {\ displaystyle 4N}4N с симметрией вещественно-четной формы, чьи четно-индексированные элементы равны нулю. Один из наиболее распространенных методов вычисления этого с помощью БПФ (например, метод, используемый в FFTPACK и FFTW ) был описан Narasimha Peterson (1978) и Махоул (1980), и этот метод в ретроспективе можно рассматривать как один шаг алгоритма децимации по основанию 4 во времени Кули-Тьюки, применяемого к «логическому» ДПФ с реальной четностью, соответствующему DCT II. (Шаг radix-4 уменьшает размер 4 N {\ displaystyle 4N}4N DFT до четырех размеров- N {\ displaystyle N}N DFT реальных данных, два из которых равны нулю, а два равны друг другу по четной симметрии, что дает единый размер - N {\ displaystyle N}N БПФ реальных данных плюс O ( N) {\ displaystyle O (N)}O (N) бабочки.) Поскольку элементы с четным индексом равны нулю, этот шаг по основанию счисления-4 в точности совпадает с шагом с разделением по основанию; если последующий размер - N {\ displaystyle N}N БПФ с реальными данными также выполняется с помощью алгоритма с разделением с основанием счисления с реальными данными (как в Sorensen et al. al. 1987), то полученный алгоритм фактически соответствует тому, что долгое время было самым низким опубликованным арифметическим счетом для DCT-II со степенью двойки (2 N log 2 ⁡ N - N + 2 {\ displaystyle 2N \ log _ {2} N-N + 2}2 N \ log_2 N - N + 2 вещественно-арифметические операции). Недавнее сокращение количества операций до 17 9 N log 2 ⁡ N + O (N) {\ displaystyle {\ frac {17} {9}} N \ log _ {2} N + O (N)}{\ displaystyle {\ frac {17} {9}} N \ log _ {2} N + O (N)} также использует БПФ реальных данных. Итак, нет ничего плохого в вычислении DCT с помощью БПФ с арифметической точки зрения - иногда это просто вопрос, является ли соответствующий алгоритм БПФ оптимальным. (На практике накладные расходы на вызов функции при вызове отдельной процедуры БПФ могут быть значительными для небольших N {\ displaystyle N}N , но это скорее реализация, чем алгоритмический вопрос, поскольку он может быть решена путем разворачивания / встраивания.)

Пример IDCT

Пример, показывающий восемь различных фильтров, примененных к тестируемому изображению (вверху слева) путем умножения его спектра DCT (вверху справа) на каждый фильтр.

Рассмотрим это изображение заглавной буквы A в оттенках серого 8x8

Исходный размер, масштабированный 10x (ближайший сосед), масштабированный 10x (билинейный). Базовые функции дискретного косинусного преобразования с соответствующими коэффициентами (специфичными для нашего изображения).. DCT изображения = [6,1917 - 0,3411 1,2418 0,1492 0,1583 0,2742 - 0,0724 0,0561 0,2205 0,0214 0,4503 0,3947 - 0,7846 - 0,4391 0,1001 - 0,2554 1,0423 0,2214 - 1,0017 - 0,2720 0,0789 - 0,1952 0,2803 0,417 0,0239 0,2801 0,4713 - 0,25 - 0,2866 0,6351 0,3501 - 0,1433 0,3550 0,2750 0,0226 0,1229 0,2183 - 0,2583 - 0,0742 - 0,2042 - 0,5906 0,0653 0,0428 - 0,4721 - 0,2905 0,4745 0,2875 - 0,0284 - 0,1311 0,3169 0,0541 - 0,1033 - 0,0225 - 0,0056 0,1017 0,09 0,09 0,09 0,09 0,09 0,150 - 0,150 - 0,1136 - 0,1031 0,1887 0,1444] {\ displaystyle {\ begin {bmatrix} 6,1917 -0,3411 1,2418 0,1492 0,1583 0,2742 -0,0724 0,0561 \\ 0,2205 0,0214 0,4503 0,3947 -0,7846 -0,4391 0.1001 -0,2554 \\ 1,0423 0,2214 -1,0017 -0,2720 0,0789 -0,1952 0,2801 0,4713 \\ - 0,2340 -0,0392 -0,2617 -0,2866 0,6351 0,3501 -0,1433 0,3550 \\ 0,2750 0,0226 0,1229 0,2183 -0,2583 -0,0742 -0,2042 -0,5906 \\ 0,0653 0,0428 -0,4721 -0,2905 0,4745 0,2875 -0,0284 -0,1311 \\ 0,3169 0,0541 -0,1033 - 0,0225 и -0,0056 и 0,1017 и -0,1650 и -0,1500 \ - 0. 2970 -0.0627 0.1960 0.0644 -0.1136 -0.1031 0.1887 0.1444 \\\ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} 6.1917 -0.3411 1.2418 0.1492 0.1583 0.2742 -0,0724 0,0561 \\ 0,2205 0,0214 0,4503 0,3947 -0,7846 -0,4391 0,1001 -0,2554 \\ 1,0423 0,2214 -1,0017 -0,2720 0,0789 -0,1952 0,2801 0,4713 \\ - 0,2340 -0,0392 -0,2617 -0,2866 0,6351 0,3501 -0,1433 0,3550 \\ 0,2750 0,0226 0,1229 0,2183 -0,2583 -0,0742 -0,2042 -0,5906 \\ 0,0653 0,0428 -0,4721 - 0,2905 и 0,4745 и 0,2875 и -0,0284 и -0,1311 \\ 0,3169 и 0,0541 и -0,1033 и -0,0225 и -0,0056 и 0,1017 и -0,1650 и -0,1500 \\ - 0,2970 и -0,0627 и 0,1960 и 0,0644 и -0,1136 и -0,1031 0,1887 0,1444 \\\ конец {bmatrix}}} .

Каждая базовая функция умножается на свой коэффициент, а затем это произведение добавляется к окончательному изображению.

Слева финальное изображение. В центре находится взвешенная функция (умноженная на коэффициент), которая добавляется к окончательному изображению. Справа - текущая функция и соответствующий коэффициент. Изображения масштабируются (с использованием билинейной интерполяции) с коэффициентом 10 ×.

См. Также

Пояснительные примечания

Цитаты

Дополнительная литература

Внешние ссылки

На Викискладе есть материалы, связанные с Дискретным косинусным преобразованием.
Последняя правка сделана 2021-05-17 08:47:55
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте