СЖАТИЕ ИЗОБРАЖЕНИЯ JPEG: ЧТО ВЫ НЕ ВИДИТЕ (ЧАСТЬ II)
Каждому нужны высоко оптимизированные изображения. Меньше размер файла, то же визуальное качество. Вы можете сделать это здесь, в Compressman, но по пути мы продолжаем больше узнавать об алгоритме сжатия изображений JPEG.
Способ сжатия JPEG-изображений делает свою магию интересной и полезной для понимания. Все это благодаря алгоритмам оптимизации изображений, которые позволяют уменьшить размер изображения без потери визуального качества. В прошлый раз мы стали глубже погружаться в методы сжатия изображений JPEG. В эту эпоху бесконечных сиквелов ко всему - мы представляем вам часть II нашего путешествия.
Квантование в сжатии изображений
Поправим: коэффициенты Fw, u, являются вещественными числами. Эти числа будут сохранены как целые числа. В любом случае число, которое мы получим, в любом случае велико, поэтому это может вызвать небольшие проблемы. Решение состоит в округлении коэффициентов; как мы увидим, мы делаем это таким образом, чтобы было легче сделать еще большее сжатие.
Но округление целого не так просто, как кажется. Легкий способ - знать, округлить цифру или округлить ее. Вместо этого мы делим коэффициент на коэффициент квантования, а затем записываем следующее:
round(Fw,u / Qw,u)
Вот график альфа-функции как функции q:
Посмотрите ближе, и yoi увидит что-то интересное. Ты понял? Более высокие значения q дают более низкие значения альфа-функции. Затем мы округляем веса, как
round(Fw,u / a Qw,u)
Вычисление наилучшего сжатия изображения
Нет необходимости вычислять наилучшие значения яркости и / или цветности самостоятельно. Стандарт JPEG предлагает и рекомендует их для вас. Взгляните на стандартные значения для Qw, u - во-первых, для коэффициентов яркости, а затем для коэффициентов цветности:
Стандарт JPEG выбирает эти цифры, чтобы подчеркнуть более низкие частоты. Хорошо, теперь пришло время узнать, как эти математические mumbo-jumbo работают для нашего блочного изображения. Вы все еще помните об этом? Вот:
Предположим, что квантование с q = 50 дает следующие блоки:
Число в верхнем левом углу - все, что он делает, представляет среднее значение по всему блоку во время процесса сжатия изображения. Давайте переместимся вправо - мы увидим увеличение горизонтальной частоты. Если мы спустимся - мы столкнемся с увеличением вертикальной частоты. Звучит неплохо, здорово, что дальше? Не так быстро - здесь есть что-то важное. Вы заметили, что здесь есть много, много нулей? Теперь мы упорядочим коэффициенты определенным образом, чтобы первые частоты появлялись первыми. Присмотритесь ближе:
Возьмем один пример. Для коэффициентов яркости мы записываем так:
20 -7 1 -1 0 -1 1 0 0 0 0 0 0 0 -2 1 1 0 0 0 0 ... 0
Реконструкция и оптимизация изображения
Воистину, много нулей. Можем ли мы избавиться от них? Конечно. Вместо того, чтобы записывать все нули, мы можем просто сказать, сколько из них действительно появляется. Кстати, вы заметили, что в весах цветности еще больше нулей ?. Таким образом, последовательности DCT-коэффициентов значительно сокращаются. И ЭТО - истинная цель любого алгоритма сжатия! Мы скажем еще больше - алгоритм JPEG использует чрезвычайно эффективные методы для кодирования данных, подобных этому.
Когда мы восстанавливаем коэффициенты DCT, мы обнаруживаем, что восстановление изображения из данных довольно просто и просто. Матрицы квантования сохраняются в файле во время процесса сжатия изображения. Это означает, что приблизительные значения DCT-коэффициентов могут быть пересчитаны. Отсюда вектор (Y, Cb, Cr) находится через обратное дискретное косинусное преобразование. Затем вектор (R, G, B) воссоздается путем изменения процесса преобразования цветового пространства.
Присмотритесь к реконструкции блока 8 на 8 (второе изображение) и сравните его с оригиналом. В этом случае параметр q устанавливается равным 50 и 10 (третье изображение):
Золотой стандарт JPEG 2000
Итак, мы увидели, что алгоритм сжатия изображений JPEG довольно успешный, когда вы хотите получить лучшее сжатие изображения. Хотя, есть некоторые факторы, которые создали потребность в новом алгоритме сжатия изображений. Давайте поговорим о них.
Таким образом, использование алгоритма JPEG в DCT приводит к разрыву на краях 8 на 8 блоков. Например, цвет пикселя на краю блока можно манипулировать с пикселем в любом месте блока. Но не соседним пикселем в другом блоке. Это приводит к блокировке артефактов, показанных версией нашего изображения, которая была создана с параметром качества q, установленным в 5 (кстати, размер этого файла изображения составляет всего 1702 байта). Это объясняет, почему JPEG не является идеальным форматом для сохраняя и удерживая часть линейного искусства.
Давайте также добавим, что алгоритм JPEG, поскольку он позволяет нам воссоздать изображение только с одним разрешением. Ну, не лучшие новости, да? В некоторых конкретных случаях настоятельно желательно также восстановить исходное изображение при более низких или более высоких разрешениях. Например, это может быть удобно, когда необходимо отображать изображение с более высоким разрешением, пока полное изображение загружается в фоновом режиме.
Знакомство с преобразованиями вейвлета
Это одна из многих причин, почему стандарт JPEG 2000 был введен в декабре 2000 года - для удовлетворения этих требований, в частности. Хотя между этими двумя алгоритмами есть несколько - один или два, а может быть и больше - мы сосредоточимся на том, что JPEG 2000 использует вейвлет-преобразование вместо DCT. Звучит ново?
Да, это действительно так, но прежде чем мы объясним вейвлет-преобразование, которое мы используем в алгоритме сжатия JPEG JPEG 2000, мы рассмотрим гораздо более простой пример вейвлет-преобразования. Еще раз, мы предположим, что мы работаем со значениями яркости-цветности для каждого пикселя. DCT работает, применяя преобразование к одной строке за раз, а затем преобразовывая столбцы. Вейвлет-преобразование будет работать так же тихо.
Итак, предположим, что мы имеем последовательность f0, f1, ..., fn, которая описывает значения одной из трех переменных во всей строке пикселей. Еще раз, мы хотим отделить быстрые изменения в последовательности от более медленных изменений. Итак, теперь мы создаем последовательность вейвлет-коэффициентов:
Вы заметили, что четные коэффициенты записывают среднее значение двух последовательных значений? Мы называем это полосой низких частот. Это связано с тем, что информация о высокочастотных изменениях теряется. Итак, в то время как нечетные коэффициенты записывают разницу в двух последовательных числах - мы называем это полосой высоких частот. Это связано с тем, что передается высокочастотная информация. Количество коэффициентов низкого пропускания - это половина количества значений в исходной последовательности (как и число коэффициентов высокого прохода).
Кроме того, помните об этом: мы можем воссоздать исходные значения f из вейвлет-коэффициентов. Например, когда нам нужно будет делать это при восстановлении изображения. Также, пожалуйста, рассмотрите эту лекцию о вейвлет-преобразованиях. Это длинное видео, но очень хорошее:
Важность заказа при сжатии изображений
Мы меняем расположение и порядок вейвлет-коэффициентов, сначала записывая коэффициенты низких частот. Затем сразу проходят коэффициенты высоких частот. Как и в случае двумерного DCT, теперь мы можем применить ту же самую операцию для преобразования вейвлет-коэффициентов по вертикали. В результате получается: двумерная сетка вейвлет-коэффициентов, разделенная на четыре блока полосами низких и высоких частот.
Еще раз мы знаем и используем тот факт, что человеческий глаз гораздо менее чувствителен к быстрым изменениям, чтобы подчеркнуть быстрые изменения, наблюдаемые с помощью коэффициентов высокочастотного пропускания, по сравнению с процессом квантования, аналогичным тому, который был замечен в алгоритме JPEG. Обратите внимание, что область LL получается путем усреднения значений в блоке 2 на 2, и поэтому id действительно представляет версию изображения с более низким разрешением.
На самом деле наш образ разделен на плитки. Размер одной плитки обычно имеет размер 64 на 64. Почему может потребоваться степень двух? Терпение, падаван, терпение. Мы расскажем вам и объясним причину выбора силы 2 достаточно скоро. Мы покажем его с помощью нашего изображения с указанной плитки. (Эта плитка 128 на 128, чтобы ее можно было более легко увидеть на этой странице.)
Уникальные возможности алгоритма JPEG 2000
Вы заметили, что если мы сначала преобразуем коэффициенты в области LL, мы можем воссоздать изображение с гораздо более низким разрешением, прежде чем все коэффициенты сойдут вместе сразу. И это одна из многих целей алгоритма JPEG 2000 - и одна из самых важных наверняка.
Теперь мы можем начать тот же процесс на изображении с более низким разрешением в области LL. Это приведет нас к получению изображений с более низким и низким разрешением.
Вейвлет-коэффициенты могут быть рассчитаны с помощью процесса подъема:
Выглядит интересно, не так ли? Для этого есть что-то уникальное. Преимущество здесь в том, что коэффициенты могут быть рассчитаны без использования дополнительной компьютерной памяти. A0 сначала заменяет f0, а затем a1 заменяет f1. Добавим также, что в вейвлет-преобразованиях - алгоритм JPEG 2000 использует их, конечно, - процесс подъема позволяет намного быстрее вычислять коэффициенты, чем обычно.
Преобразование JPEG 2000 Wavelet
Мы уже обсуждали и описывали вейвлет-преобразование. Несмотря на то, что они похожи по духу, это проще, чем те, которые предлагаются в хорошем стандарте JPEG 2000. Например, действительно желательно сделать среднее значение более чем на два последовательных значения, чтобы получить гораздо более большую непрерывность в воссозданном изображении и тем самым избежать таких явлений, как некоторые блокирующие артефакты. Никто не нуждается в каких-то блокирующих артефактах, верно ?! Одним из используемых вейвлет-преобразований является сплайн Ле Галля (5,3), в котором коэффициенты низких частот (четные) и высокие (нечетные) коэффициенты вычисляются по формуле
И снова это преобразование обратимо. Мы не можем вернуть его, это будет так, как есть. И есть схема подъема для того, чтобы сделать ее эффективной - даже намного более эффективной, мы бы осмелились сказать. Другим одним из этих вейвлет-преобразований, включенным в стандарт, является биортогональное преобразование Коэн-Добеши-Фауре 9/7, детали которого немного сложнее описать, хотя существует простой рецепт для литья, чтобы использовать его правильным и полезным способом.
JPEG против JPEG 2000 - кто лучше?
Действительно, очень хорошо сравнивать JPEG и JPEG 2000. Скажем, что в целом оба алгоритма имеют одинаковые коэффициенты сжатия. Хотя JPEG 2000 требует гораздо больших вычислительных усилий для восстановления изображения, чем его конкурента. Изображения JPEG 2000 не показывают блокирующие артефакты, которые представлены во многих формах в изображениях JPEG при высоких коэффициентах сжатия. Но вместо этого они становятся более размытыми с гораздо более высоким значением сжатия изображения. Изображения JPEG 2000 часто оцениваются людьми с более высоким визуальным качеством. Глупые люди, что они знают, правильно.... Правильно?!
Так что прямо сейчас JPEG 2000 не очень широко поддерживается всеми веб-браузерами, но используется в цифровых камерах и медицинских изображениях. Существует также соответствующий стандарт Motion JPEG 2000. Они используют его в цифровой киноиндустрии.
Итак, вы здесь, в конце нашего двухчастного приключения в дебрях деталей JPEG Image Compression. Увидимся в следующий раз!
Конец второй части. См. первую часть.
Источник The American Mathematical Society