Вопросы по статье Jpeg сжатия и по самому Jpeg
На этом сайте лежит статья по сжатию JPEG. Но по ней у меня сразу возникает куча вопросов.
Помимо этой статьи, я прочитал еще несколько, но до конца у меня остались вопросы.
Если кто-то мне сможет их пояснить, буду очень признателен.
Вот например, мы имеем три матрицы IMG размером 8х8
1)матрица с Y
2)матрица с Cb
3)матрица с Cr
Матрицу Y мы оставляем без изменений, как сказано в статье. Сжимаем по предложенному способу, и получаем две сжатые матрицы, и одну матрицу Y, т.е.:
1)IMGY
2)Acb - матрицы полученные после преобразований
3)Acr
Далее, я распологаю их как предложено по зигзагу.
Но как их сохранять в файл.? Так последовательно: сначала число из матрицы Y,
потом число из матрицы Acb, а потом число из матрицы Acr, или надо поменять
местами, или без разницы? И какого типа эллемент матрицы A. BYTE - быть не может, т.к. есть отрицательные числа, а смысла с Integer - если он
занимает 2 байта? Имели 3 матрицы, 3 матрицы и осталось, только с другими значениями. В чем вообще тогда смысл? Или ДКП и Квантование, сами по себе ничего не дают. Возможно они только подготовительный этап для Хаффмана? Что Хаффман больше сжимает после этих двух этапов. Вообще запутался.
Буду очень признателен за пояснения.
С уважением Артем
Цитата:
Originally posted by Akula
Я уже задавал подобные вопросы в форумах, но подробного ответа не получил.
На этом сайте лежит статья по сжатию JPEG. Но по ней у меня сразу возникает куча вопросов.
Помимо этой статьи, я прочитал еще несколько, но до конца у меня остались вопросы.
Если кто-то мне сможет их пояснить, буду очень признателен.
Вот например, мы имеем три матрицы IMG размером 8х8
1)матрица с Y
2)матрица с Cb
3)матрица с Cr
Матрицу Y мы оставляем без изменений, как сказано в статье. Сжимаем по предложенному способу, и получаем две сжатые матрицы, и одну матрицу Y, т.е.:
1)IMGY
2)Acb - матрицы полученные после преобразований
3)Acr
Далее, я распологаю их как предложено по зигзагу.
Но как их сохранять в файл.? Так последовательно: сначала число из матрицы Y,
потом число из матрицы Acb, а потом число из матрицы Acr, или надо поменять
местами, или без разницы? И какого типа эллемент матрицы A. BYTE - быть не может, т.к. есть отрицательные числа, а смысла с Integer - если он
занимает 2 байта? Имели 3 матрицы, 3 матрицы и осталось, только с другими значениями. В чем вообще тогда смысл? Или ДКП и Квантование, сами по себе ничего не дают. Возможно они только подготовительный этап для Хаффмана? Что Хаффман больше сжимает после этих двух этапов. Вообще запутался.
Буду очень признателен за пояснения.
С уважением Артем
Я уже задавал подобные вопросы в форумах, но подробного ответа не получил.
На этом сайте лежит статья по сжатию JPEG. Но по ней у меня сразу возникает куча вопросов.
Помимо этой статьи, я прочитал еще несколько, но до конца у меня остались вопросы.
Если кто-то мне сможет их пояснить, буду очень признателен.
Вот например, мы имеем три матрицы IMG размером 8х8
1)матрица с Y
2)матрица с Cb
3)матрица с Cr
Матрицу Y мы оставляем без изменений, как сказано в статье. Сжимаем по предложенному способу, и получаем две сжатые матрицы, и одну матрицу Y, т.е.:
1)IMGY
2)Acb - матрицы полученные после преобразований
3)Acr
Далее, я распологаю их как предложено по зигзагу.
Но как их сохранять в файл.? Так последовательно: сначала число из матрицы Y,
потом число из матрицы Acb, а потом число из матрицы Acr, или надо поменять
местами, или без разницы? И какого типа эллемент матрицы A. BYTE - быть не может, т.к. есть отрицательные числа, а смысла с Integer - если он
занимает 2 байта? Имели 3 матрицы, 3 матрицы и осталось, только с другими значениями. В чем вообще тогда смысл? Или ДКП и Квантование, сами по себе ничего не дают. Возможно они только подготовительный этап для Хаффмана? Что Хаффман больше сжимает после этих двух этапов. Вообще запутался.
Буду очень признателен за пояснения.
С уважением Артем
Артем, можно ссылку на статью. Спасибо.
А вот собственно и ссылка:http://www.codenet.ru/progr/formt/jpeg_00.php
Я надеюсь, что ты умеешь перемножать матрицы и знаешь, что такое обратная и транспонированная матрицы.
Допустим, матрицу DCT ты построил. В статье, кстати, она нарисована с ошибками, но формула правильная.
У DCT преобразования есть прикольное свойство: (DCT) (умножить на) (DCT транспонированную) (равно) (единичная матрица).
Как произвести преобразование?
Пусть IMG - матрица фрагмента изображения размером 8на8. Тогда матрица результата RES=DCT*IMG*(DCT транспонированную).
Обратное преобразование IMG=(DCT транспонированную)*IMG*DCT.
Что такое квантование??
Здесь это обрезание высокочастотных компонент. Матрица крантования Q как раз устроена так, что в левом верхнем углу находятся минимальные коэффициенты, (соответствующие низким частотам), а снизу справа - наибольшие. При делении элементов матрица RES на матрицу Q обычно отбрасывают остаток от деления. В этом случае и происходит отбрасывание высокочастотных компонент.
Далее матрица, полученная при делении, сворачивается в строку, начиная с левого верхнего угла и заканчивая правым нижним (правило нарисовано в статье). Затем, по - моему, можно сделать RLE - сжатие, поскольку в строке будут длинные цепочки из нулей. Ну а потом - Хаффмен.
В статье ни описано ни формата файла, ни способа сохранения даравы Хаффмена. Поэтому, как я написал, это обзорная статья, описывающая общий подход. Рекомендую зайти на http://www.compression.ru/index.htm - здесь более правильные и подробные статьи есть.