что такое сжатие растра
Сжатие изображений
Сжатие изображений — применение алгоритмов сжатия данных к изображениям, хранящимся в цифровом виде. В результате сжатия уменьшается размер изображения, из-за чего уменьшается время передачи изображения по сети и экономится пространство для хранения. Сжатие изображений подразделяют на сжатие с потерями качества и сжатие без потерь. Сжатие без потерь часто предпочтительней для искусственно построенных изображений, таких как графики, иконки программ, либо для специальных случаев, например, если изображения предназначены для последующей обработки алгоритмами распознавания изображений. Алгоритмы сжатия с потерями при увеличении степени сжатия как правило порождают хорошо заметные человеческому глазу артефакты.
Содержание
Примеры алгоритмов
Алгоритмы сжатия без потерь
Алгоритмы сжатия с потерями
См. также
Теория |
| ||||||
---|---|---|---|---|---|---|---|
Без потерь |
| ||||||
Аудио |
| ||||||
Изображения |
| ||||||
Видео |
|
Полезное
Смотреть что такое «Сжатие изображений» в других словарях:
Сжатие изображений — процесс минимизации данных, определяющих изображение. При сжатии изображений может происходить определенная (допустимая) потеря информации. По английски: Images compression См. также: Обработка изображений Финансовый словарь Финам … Финансовый словарь
сжатие изображений — Формат графических файлов, допускающий сжатие данных. [http://www.morepc.ru/dict/] Тематики информационные технологии в целом EN PICPicture Image Compression … Справочник технического переводчика
Сжатие видео — (англ. Video compression) уменьшение количества данных, используемых для представления видеопотока. Сжатие видео позволяет эффективно уменьшать поток, необходимый для передачи видео по каналам радиовещания, уменьшать пространство,… … Википедия
сжатие (в информационных технологиях) — сжатие Преобразование данных либо программ с целью уменьшения их размеров. Сжатие может быть статическим либо динамическим. В первом случае оно происходит в виде отдельной операции, скорость выполнения которой не имеет существенного значения.… … Справочник технического переводчика
Сжатие с использованием вейвлет — Вейвлетное сжатие общее название класса методов кодирования изображений, использующих двумерное вейвлет разложение кодируемого изображения или его частей. Обычно подразумевается сжатие с потерей качества. Существенную роль в алгоритмах… … Википедия
Сжатие данных — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (26 мая 2012) … Википедия
сжатие неподвижных изображений — Преобразование изображений в цифровую форму с использованием скалярного или векторного квантования. Неподвижное изображение содержит большую избыточность, устранение которой позволяет повысить эффективность передачи и снизить объем памяти,… … Справочник технического переводчика
СЖАТИЕ ДАННЫХ — СЖАТИЕ ДАННЫХ, в вычислительной технике методика, позволяющая добиться сокращения объема памяти, занимаемой данными. Для этого прописные буквы представляют меньшим числом бит, чем обычно, а часто употребляемые слова воспроизводят сокращенными… … Научно-технический энциклопедический словарь
Сжатие (компрессия) изображений различный форматов
Для того чтобы страницы сайта открывались быстро нужно использовать картинки как можно меньшего веса (размера файла). При этом, после компрессии качество изображений не должно сильно пострадать.
Чтобы выяснить, какой формат является оптимальным, мы провели тестирование форматов GIF, JPG, PNG и WEBP, и сравнили размеры получающихся файлов.
Методика тестирования
Компрессия осуществлялась на работающем сайте с помощью двух программ:
• Графическая библиотека GD, встроенная в PHP по умолчанию.
• Сторонняя программа ImageMagick и ее php-расширение Imagick.
Путем уменьшения настройки качества от 100 до 0 процентов, находилось значение, при котором качество изображения оставалось приемлемым.
Сразу скажем, что обе программы GD и Imagick дают одинаковый результат при одном и том же параметре качества (Q), поэтому все примеры приведены только для изображений, полученных в программе GD.
Реальные размеры для больших изображений 1600x900px, для миниатюр 400x225px — видимые размеры могут отличаться.
Миниатюрное изображения (thumbnail) 400x225px
По степени сжатия формат WEBP неоспоримый лидер.
WEBP 3,55 КБ при Q=20%
JPG 6,54 КБ при Q=30%
GIF 53,2 КБ, не зависит от Q
PNG 154 КБ, не зависит от Q
Примечание по формату PNG
Формат PNG практически на поддается сжатию обеими программами и дает размер файла на порядок больший, чем все остальные форматы. В частности, в данном тесте файлы в формате PNG имели размер файла более чем в 40 раз больший, чем у формата WEBP.
Можно было бы использовать формат PNG для изображений с прозрачным фоном, однако, формат WEBP также работает с альфа-каналом, и дает, при этом, гораздо лучший результат.
Таким образом, если вы хотите добиться хорошей компрессии файлов, формат PNG вам не подойдет.
Примечание по формату GIF
Формат GIF плохо передает градиенты и не подходит для обычных фотографий. Вообще формат GIF дает хорошие результаты только для графичных рисунков со сплошными заливками цвета, но изображение придется подготовить заранее. Однако в связи с появлением векторного формата SVG, формат GIF становится неактуальным (кроме gif-анимации).
Большое изображения 1600x900px
Для больших изображений формат WEBP также выигрывает у формата JPG, который весит на 50% больше.
WEBP 60,5 КБ при Q=30%
JPG 89,6 КБ при Q=40%
Качество изображений при максимальном сжатии
Как мы видели выше, формат WEBP дает наиболее оптимальное качество при меньшем весе. Более того, этот формат дает возможность получить еще меньшие размеры файлов без заметного ухудшения качества, что невозможно для других форматов.
Преимуществом формата WEBP является то, что он хорошо сглаживает градиентные участки изображения даже при большой компрессии.
JPEG. Алгоритм сжатия
И снова здравствуйте! Я нашел эту статью, написанную еще мае 2019-ого года. Это — продолжение серии статей о WAVE и JPEG, Вот первая. Эта публикация включит в себе информацию об алгоритме кодирования изображений и о самом формате в целом.
Щепотку истории
Столовую ложку статьи из Википедии:
JPEG (Joint Photographic Experts Group) — один из популярных растровых графических форматов, применяемый для хранения фотоизображений и подобных им изображений.
Разработан этот стандарт был Объединенной группой экспертов по фотографии еще в 1991 году для эффективного сжатия изображений.
Какой путь проходят изображения от сырого вида до JPEG
Некоторые считают, что JPEG-картинки — сжатые методом Хаффмана сырые данные, но это не так. Перед контрольным сжатием данные проходят длинный путь.
Сначала цветовую модель меняют с RGB на YCbCr. Для этого даже есть специальный алгоритм — здесь. Y не трогают, так как он отвечает за яркость, и его изменение будет заметно.
Первое, что делают с изображением — это «прореживание» (subsampling). Понять это просто: берется 2х2 массив пикселей, далее берутся Cb и Cr — средние значения каждого из компонентов YCbCr этих 4 пикселей. И так, мы выиграли 6 байт, вместо 4 Y, 4 Cb, 4 Cr мы получили 4 Y и одинаковые для каждого из них Cb и Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). В масштабах даже 2×2 сжатие с потерей с коэффициентом сжатия 2:1 звучит солидно. Это применяется ко всему изображению. И так — сбросили половину размера. А такой прием мы можем использовать благодаря нашему цветовому восприятию. Человек с легкостью заметит разницу в яркости, но не в цвете, если он усредненный в маленьком блоке пискелей. Также прореживание может выполняться в линию, 4 пикселя по горизонтали и вертикали. Первый вариант используется чаще. Если важно качество изображения, то прореживание не выполняется вообще.
Наглядная иллюстрация прореживания (Хабр не дал вставить гифку) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif
Основная часть подготовки
Теперь самая сложная и необходимая часть. Вся картинка разбивается на блоки 8×8 (используют заполнение в случае, если разрешение не кратно стороне блока).
Теперь к каждому блоку применяют ДКП (Дискретно-косинусное преобразование). В этой части из картинки вынимают все лишнее. Используя ДКП надо понять, описывает ли данный блок (8×8) какую-нибудь монотонную часть изображения: неба, стены; или он содержит сложную структуру (волосы, символы и т.д.). Логично, что 64 похожих по цвету пикселей можно описать всего 1-им, т.к. размер блока уже известен. Вот вам и сжатие: 64 к 1.
ДКП превращает блок в спектр, и там, где показания резко сменяются, коэффициент становится положительным, и чем резче переход, тем выше будет выход. Там, где коэффициент выше, на картинке изображенны четкие переходы в цвете и яркости, где он ниже — слабые (плавные) смены величин компонентов YCbCr в блоке.
Квантование
Тут уже применяются настройки сжатия. Каждый из коэффициентов в каждой из матриц 8×8 делится на определенное число. Если качество изображения после всех его модификаций вы более уменьшать не будете, то делитель должен быть единицей. Если вам важнее память, занимаемая этой фотографией, то делитель будет больше 1, и частное округляется. Так выходит, что после округления нередко получается много нулей.
Квантование делают для создания возможности еще большего сжатия. Вот как это выглядит на примере квантования графика y = sin(x):
Сжатие
Сначала проходим по матрице зиг-загом:
Получаем одномерный массив с числами. Мы видим, что в нем много нулей, их можно убрать. Для этого вместо последовательности из множества нулей мы вписываем 1 нуль и после него число, обозначающее их количество в последовательности. Таким образом можно сбросить до 1/3 размера всего массива. А дальше просто сжимает этот массив методом Хаффмана и вписываем уже в сам файл.
Где используется
Везде. Как и PNG, JPEG используется в фотокамерах, OS’ях (в качестве логотипов компании, иконок приложений, thumbnail’ов) и во всех возможных сферах, где нужно эффективно хранить изображения.
Вывод
Справка
Основной эффект сжатия данных – уменьшение размера файла, что позволяет экономить место на жестком диске. Дополнительным преимуществом является значительно улучшенная производительность по сети, потому что вы передаете уменьшенное количество данных, которые считываются с диска и передаются на сервер или напрямую в приложение для чтения. Тем не менее, поскольку сжатые данные необходимо распаковать перед выводом на экран, этот процесс может занять некоторое время и может увеличить требования CPU на сервере или в приложении. Большинство wavelet- сжатий более тяжелые для CPU, чем JPEG, LZW или LZ77. При использовании сжатия JPEG 2000 затрачиваемое на сжатие время часто связано с долей сжатия. Чем сильнее сжаты данные, тем больше времени требуется на их распаковку.
Сжатие также можно применять к сервисам изображений при переносе пикселов из сервера в клиентские приложения. Это сжатие передачи, которое не зависит от сжатия хранения. Сжатие передачи может значительно повысить производительность за счёт снижения требований к ширине канала. (Сжатие передачи для кэша карты такое же, как сжатие хранения).
ArcGIS может хранить сжатые данные в следующих форматах: IMG, JPEG, JPEG 2000, TIFF, Esri Grid или в базе геоданных. При хранении данных в базе геоданных, блоки данных сжимаются до сохранения.
Сжатие данных бывает с потерями (JPEG и JPEG 2000) или без потерь (LZ77, PackBits, CCITT). Сжатие без потерь означает, что значения ячеек набора растровых данных не меняются и не теряются. Если значения пикселов должны использоваться для анализа или на их основе будут разрабатываться другие данные, следует выбрать сжатие без потерь.
Типы сжатия растров, поддерживаемые в ArcGIS
Может определить качество сжатия
С потерями или без потерь
Может определить качество сжатия
Применяет только к TIFF
Применяет только к TIFF
Применяет только к TIFF
Применяет только к TIFF
Типы сжатия растров, поддерживаемые в ArcGIS
Сжатие LZ77 (по умолчанию) является сжатием без потерь, т.е. значения ячеек сохраняются. Этот тип сжатия использует тот же алгоритм, что и формат изображений PNG, и напоминает сжатие ZIP. Поскольку при сжатии без потерь сохраняются все значения пикселов, степень сжатия в этом случае невелика (обычно 2:1 или 3:1, в зависимости от данных). Сжатие с потерями, с другой стороны, может в значительно большей степени уменьшить размер набора растровых данных (до 20:1); однако, при этом не сохраняются точные значения каждого пиксела. Сжатие с потерями подходит для тех ГИС проектов, в которых набор растровых данных используется только в качестве фона, и обычно не годится для анализа растра.
При сохранении растра в файл на диске или в персональную базу геоданных с использованием сжатия JPEG 2000 вы можете сохранить растровые данные без потерь, если зададите качество сжатия 100. вы не получите сжатие без потерь при помощи этих методов с файловой или многопользовательской базой геоданных. Для файловой и многопользовательской базы геоданных используйте LZ77.
Сжатие с потерями следует выбрать
Сжатие без потерь следует выбрать
Программист, не имеющий представления о сжатии данных, создал суперзамену формату PNG
Создан «убийца» PNG?
Создан новый формат сжатия растровых изображений, использующих цветовую модель RGB(A), без потери качества. Разработка получила название QOI (Quite OK Image, «вполне нормальное изображение»). Ее отличают простота и лаконичность реализации, а также высокая скорость компрессии/декомпрессии.
По заявлению автора формата и эталонной реализации, программиста Доминика Саблевски (Dominic Szablewski) из Германии, скорость кодирования изображения в формате QOI в 20-50 раз выше по сравнению с использованием распространенного в интернете PNG (Portable Network Graphics, «переносимая сетевая графика»). По быстроте декодирования QOI также превосходит PNG, однако не столь значительно – в три-четыре раза. При этом размер сжатого QOI-файла сопоставим с PNG-файлом, содержащим аналогичную картинку.
PNG – это растровый формат хранения графической информации, использующий сжатие без потерь по алгоритму Deflate. Формат был представлен в 1996 г. в качестве свободной альтернативы проприетарному GIF.
Эксперименты с замером производительности алгоритмов сжатия и распаковки разработчик производил над набором из 185 изображений. Среди них разнообразные скриншоты, обои рабочего стола, фотографии людей и природы, комиксы и текстуры. Для кодирования/декодирования в формате PNG использовались открытые библиотеки libpng и stb_image.
Исходный код открыт для всех
Исходный код всех материалов, имеющих отношение к QOI опубликован на хостинге Github и доступен на условиях свободной лицензии MIT.
По состоянию на 29 ноября 2021 г. проект состоит всего из трех файлов: заголовочный qoi.h содержит реализацию функций кодирования/декодирования изображения; qoiconv.c – утилиту командной строки для преобразования файлов из формата PNG в QOI и обратно; qoibench.c – инструмент-обертка для сравнения скорости кодирования с использованием libpng, stb_image и qoi.h.
Объем кода эталонной однопоточной реализации составляет 492 строки, конвертера – еще 76 строк, без учета комментариев. Дополнительно сторонними разработчики подготовлены реализации кодировщиков и декодировщиков на языках Go, Zig и Rust.
Автор не может – сообщество поможет
Автор подчеркивает, что совершенно не разбирается в алгоритмах сжатия. «Я понятия не имею, что творю, – предупреждает Саблевски в своем сообщении, размещенном в его личном блоге. – Я едва понимаю принцип работы алгоритма кодирования Хаффмана и как выполняется дискретное косинусное преобразование».
Алгоритм Хаффмана был создан в 1952 г. аспирантом Массачусетского технологического института (MIT) Дэвидом Хаффманом (David Huffman). Этот метод кодирования информации и его модификации широко используются в различных программах сжатия, в частности, он задействован в методе Deflate, который применяется при упаковке данных в формате PNG.
Дискретное косинусное преобразование (Discrete Cosine Transform, DCT) – это математическое преобразование, например, применяемое в алгоритмах сжатия данных с потерями, в том числе MPEG (видео) и JPEG (статичные изображения).
Кроме того, изначально перед Саблевски не стояла задача создать «убийцу PNG». Специализирующийся на разработке игр программист, по собственному признанию, «возился с идеей создания простой схемы сжатия, похожей на MPEG, но с вменяемым форматом файла» и внезапно пришел к QOI.
Тем не менее, проект привлек внимание программистов-энтузиастов, которые моментально предложили целый ряд изменений, направленных на улучшение нового формата. Сам Саблевски в комментариях на Github признается, что не ожидал такого интереса к собственной разработке, которую он называет «до глупости простой» (stupidly simple): «Сказать, что я удивлен тем количеством внимания, которое этому уделяется, было бы преуменьшением».
Особенности метода сжатия
Как объясняет Саблевски в своем блоге, QOI кодирует и декодирует изображение в один проход, то есть каждый пиксель (минимальный элемент растрового изображения) обрабатывается алгоритмом единожды. Закодирован пиксель может быть четырьмя разными способами, в зависимости от параметров его «соседа».
В случае, когда текущий пиксель отличается от предшествующего, но незначительно, то в укороченной форме записывается разница между ними в цветовой составляющей.
Алгоритм предполагает формирование и поддержание в актуальном состоянии массива из 64 последних проанализированных пикселей. Если анализируемый пиксель совпадает с одним из «запомненных» кодировщиком, то сохраняется соответствующий ему индекс.
Когда оптимизировать входной поток данных не представляется возможным (три предыдущих способа не применимы), записывается полное значение цвета в формате RGBA.
Предложенный алгоритм имеет линейную сложность, поэтому его производительность не зависит от объема входных данных, то есть в данном случае – размера изображения.