курсовая6. Курсовая работа Кредитный рынок и его место в системе макроэкономического кругооборота
Скачать 340.59 Kb.
|
Методы сжатия подвижных изображений (видео)Основной проблемой в работе с подвижными изображениями являются большие объемы данных, с которыми приходится иметь дело. Например, при записи на компакт-диск в среднем качестве на него можно поместить несколько тысяч фотографий, более 10 часов музыки и всего полчаса видео. Видео телевизионного формата требует потока данных примерно 240 Мбит/с (1,8 Гбит/мин). При этом обычные методы сжатия, ориентированные на кодирование отдельных кадров (в том числе и JPEG), не спасают положения, поскольку даже при уменьшении битового потока в 10 - 20 раз он остается чересчур большим для практического использования. При сжатии подвижных изображений учитывается наличие в них нескольких типов избыточности, в частности:
С середины 80-х гг. многие западные университеты и лаборатории фирм работали над созданием алгоритма компрессии цифрового видеосигнала. Появилось достаточно большое число внутрифирменных стандартов. В 1992 году был представлен стандарт кодирования MPEG-I. Сейчас используется стандарт MPEG-2. Технология сжатия видео в MPEG распадается на две части: уменьшение избыточности видеоинформации во временном измерении, основанное на том, что соседние кадры, как правило, отличаются не сильно, и сжатие отдельных изображений. MPEG сжимает последовательность движущихся образов, используя корреляцию между последовательными движущимися изображениями. Создается три типа изображений: интра-изображения (I – изображения), предсказанные (P-изображения) и изображения двунаправленного предсказания (B- изображения). В MPEG каждое изображение в последовательности может быть полностью сжато с использованием алгоритма JPEG – это I- изображения. Затем процесс сравнивает последовательные I- изображения и идентифицирует часть образа, которая была перемещена. Части образа, которые не были перемещены, переносятся в промежуточное изображение с помощью памяти декодера. После этого процесс отбирает подмножество промежуточных изображений, а затем предсказывает (посредством линейной интерполяции между I-изображениями) и корректирует расположение частей образа, которые были перемещены. Эти предсказанные и скорректированные образы являются P-изображениями. Между I и P изображениями находятся B-изображения, которые включают стационарные части образа, не охваченные движущимися частями (рис. 6) Рис. 6. Последовательность изображений при сжатии MPEG Одним из основных понятий при сжатии нескольких изображений является макроблок - матрица пикселов 16х16 элементов (размер изображения должен быть кратен 16). Отдельные макроблоки сжимаются независимо. Существует достаточно много алгоритмов, сжимающих статические изображения. Из них чаще всего используются алгоритмы на базе дискретного косинусного преобразования. Алгоритм сжатия отдельных кадров в MPEG похож на соответствующий алгоритм для статических изображений - JPEG. При этом к макроблокам применяется ДКП. Использование векторов смещений блоков.Алгоритм состоит в том, что для каждого блока изображения находят блок, близкий к нему в некоторой метрике (например, по минимуму суммы квадратов разностей пикселов), в предыдущем кадре в некоторой окрестности текущего положения блока. Если минимальное расстояние между блоками в этой метрике меньше некоторого порога, то вместе с каждым блоком в выходном потоке сохраняется вектор смещения - координаты смещения максимально похожего блока в предыдущем I или P- кадре. Если различия больше этого порога, блок сжимается независимо.
Реализация алгоритма арифметического кодированияНиже показан фрагмент псевдокода процедур кодирования и декодирования. Символы в нем нумеруются как 1,2,3... Частотный интервал для i-го символа задается от cum_freq[i] до cum_freq[i-1]. Пpи убывании i cum_freq[i] возрастает так, что cum_freq[0] = 1. (Причина такого "обpатного" соглашения состоит в том, что cum_freq[0] будет потом содеpжать ноpмализующий множитель, котоpый удобно хpанить в начале массива). Текущий pабочий интеpвал задается в [low; high] и будет в самом начале pавен [0; 1) и для кодиpовщика, и для pаскодиpовщика. Алгоритм кодирования: С каждым символом текста обpащаться к пpоцедуpе encode_symbol(). Пpовеpить, что "завеpшающий" символ закодиpован последним. Вывести полученное значение интеpвала [low; high). encode_symbol(symbol, cum_freq) { … range = high - low high = low + range*cum_freq[symbol-1] low = low + range*cum_freq[symbol] … } Алгоритм декодирования: Value - это поступившее на вход число. Обpащение к пpоцедуpе decode_symbol() пока она не возвpатит "завеpшающий" символ. decode_symbol(cum_freq) //поиск такого символа, что cum_freq[symbol] <= (value - low)/(high - low) < cum_freq[symbol-1] Это обеспечивает pазмещение value внутpи нового интеpвала [low;high), что отpажено в оставшейся части пpогpаммы: range = high - low high = low + range*cum_freq[symbol-1] low = low + range*cum_freq[symbol] return symbol Реализация алгоритма на C# приведена в Приложении. |