Сжатие видео: что такое дискретное косинусное преобразование?

Я реализовал технику преобразования изображения / видео, называемую дискретным косинусным преобразованием. Этот метод используется при кодировании видео MPEG. Я основал свой алгоритм на идеях, представленных по следующему URL-адресу:

http://vsr.informatik.tu-chemnitz.de/~jan/MPEG/HTML/mpeg_tech.html

Теперь я могу преобразовать раздел 8x8 черно-белого изображения, например:

0140 0124 0124 0132 0130 0139 0102 0088  
0140 0123 0126 0132 0134 0134 0088 0117  
0143 0126 0126 0133 0134 0138 0081 0082  
0148 0126 0128 0136 0137 0134 0079 0130  
0147 0128 0126 0137 0138 0145 0132 0144  
0147 0131 0123 0138 0137 0140 0145 0137  
0142 0135 0122 0137 0140 0138 0143 0112  
0140 0138 0125 0137 0140 0140 0148 0143 

В это изображение со всей важной информацией вверху справа. Преобразованный блок выглядит так:

1041 0039-023 0044 0027 0000 0021-019  
-050 0044-029 0000 0009-014 0032-010  
0000 0000 0000 0000-018 0010-017 0000  
0014-019 0010 0000 0000 0016-012 0000  
0010-010 0000 0000 0000 0000 0000 0000  
-016 0021 -014 0010 0000 0000 0000 0000  
0000 0000 0000 0000 0000 0000 0000 0000  
0000 0000-010 0013-014 0010 0000 0000  

Теперь мне нужно знать, как я могу воспользоваться этой трансформацией? Я хотел бы обнаружить другие блоки 8x8 в том же изображении (или другом изображении), которые представляют собой хорошее совпадение.

Кроме того, что дает мне это преобразование? Почему важна информация, хранящаяся в правом верхнем углу преобразованного изображения?

Ответов (6)

Концепции, лежащие в основе таких преобразований, легче понять, если сначала рассмотреть одномерный случай. Изображение здесьпоказывает прямоугольную волну вместе с несколькими из первых членов бесконечного ряда. Глядя на это, обратите внимание, что если функции для членов складываются вместе, они начинают приближаться к форме прямоугольной волны. Чем больше терминов вы добавите, тем точнее будет приближение. Но чтобы приблизиться к точному сигналу, вам нужно просуммировать бесконечное количество членов. Причина этого в том, что прямоугольная волна является прерывистой. Если вы думаете о прямоугольной волне как о функции времени, она переходит от -1 до 1 за нулевое время. Чтобы представить такую ​​вещь, требуется бесконечный ряд. Взглянем еще раз на сюжет терминов сериала. Первый красный, второй желтый. Последовательные термины имеют больше переходов "вверх и вниз". Это из-за увеличивающейся частоты каждого термина. Придерживаясь прямоугольной волны как функции времени,

В реальном мире нет прямоугольных волн. Ничего не происходит в нулевое время. Аудиосигналы, например, занимают диапазон от 20 Гц до 20 кГц, где Гц - 1 / время. Такие вещи можно представить конечными сериями ».

Для изображений математика такая же, но разные вещи. Во-первых, он двухмерный. Во-вторых, понятие времени не имеет смысла. В одномерном смысле прямоугольная волна - это просто функция, которая дает некоторое числовое значение для аргумента, который, как мы сказали, был временем. (Статическое) изображение - это функция, которая дает числовое значение для каждой пары строк и индексов столбца. Другими словами, изображение является функцией двухмерного пространства, то есть прямоугольной области. Подобную функцию можно представить в терминах ее пространственной частоты. Чтобы понять, что такое пространственная частота, рассмотрим 8-битное изображение с уровнем серого и пару соседних пикселей. Самый резкий переход, который может произойти в изображении, идет от 0 (например, черный) до 255 (например, белый) на расстоянии в 1 пиксель.

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

Для сжатия изображения вы можете преобразовать изображение, отбросить некоторое количество высокочастотных членов и обратное преобразование оставшихся обратно в изображение, которое имеет меньше деталей, чем оригинал. Хотя он преобразуется обратно в изображение того же размера (с удаленными членами, замененными на ноль), в частотной области он занимает меньше места.

Другой способ взглянуть на это - уменьшить изображение до меньшего размера. Если, например, вы попытаетесь уменьшить размер изображения, отбросив три из каждых четырех пикселей в строке и три из каждых четырех строк, у вас будет массив 1/4 размера, но изображение будет выглядеть ужасно. В большинстве случаев это достигается с помощью 2D-интерполятора, который создает новые пиксели путем усреднения прямоугольных групп пикселей большего изображения. При этом интерполяция имеет эффект, аналогичный отбрасыванию членов ряда в частотной области, только ее вычисление выполняется намного быстрее.

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

Что касается звукового сигнала, подумайте о комбинированных функциях sin и косинуса, принимающих в своих аргументах исходную величину для сдвига функции вперед и назад (как часть представления сигнала). Для изображения информация о фазе описывает, как каждый член ряда сдвигается относительно других членов в частотном пространстве. На изображениях края (будем надеяться) настолько отчетливы, что хорошо характеризуются членами с наименьшей частотой в частотной области. Это происходит не потому, что это резкие переходы, а потому, что у них, например, много черной области, прилегающей к большей части более светлой области. Рассмотрим одномерный срез края. Уровень серого равен нулю, затем повышается и остается на нем. Визуализируйте синусоидальную волну, которая будет членом первого приближения, где она пересекает среднюю точку перехода сигнала в sin (0). Фазовый угол этого члена соответствует смещению в пространстве изображения. Имеется прекрасная иллюстрация этогоздесь . Если вы пытаетесь найти фигуры и можете создать эталонную фигуру, это один из способов их распознать.

Если я правильно помню, эта матрица позволяет сохранять данные в файл со сжатием.

Если вы прочтете дальше, вы найдете зигзагообразный узор данных для чтения из этой окончательной матрицы. Наиболее важные данные находятся в верхнем левом углу, а наименее важные - в правом нижнем углу. Таким образом, если вы перестанете писать в какой-то момент и просто будете считать остальные нули, даже если это не так, вы получите аппроксимацию изображения с потерями.

Количество отбрасываемых значений увеличивает сжатие за счет точности изображения.

Но я уверен, что кто-то другой может дать вам лучшее объяснение.

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

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

Надеюсь это поможет

Я бы порекомендовал взять копию Digital Video Compression - это действительно хороший обзор алгоритмов сжатия изображений и видео.

Все, что я знаю о DCT, я узнал из Книги по сжатию данных . Помимо того, что он является отличным введением в область сжатия данных, в нем есть близкая к концу глава о сжатии изображений с потерями, в которой представлены JPEG и DCT.

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

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