Когда речь идёт о сжатии фото, видео и даже научных снимков, предсказание становится главным фокусником, который «вычитает» будущее из настоящего и облегчает жизнь алгоритму кодирования. В статье разберёмся, как устроены методы кодирования изображений с предсказанием, какие существуют стандарты, и почему даже самые современные нейросети до сих пор используют «старый добрый» принцип предсказывающего фильтра.
Что такое «предсказание» в контексте изображений?
Представьте, что вы раскрашиваете картинку по номерам. Если уже известно, что левый пиксель тёмно-синий, а верхний — голубой, то можно предположить, что текущий будет чем-то средним. Алгоритм делает такое же «предположение» и кодирует не само значение, а лишь разницу между предсказанным и реальным цветом.
- Плюсы: разница часто близка к нулю → её удобно сжимать энтропийным кодером (Huffman, арифметика).
- Минусы: если изображение резко меняется (края объектов), ошибка предсказания велика → нужны «страховочные» механизмы.
1.1 Два больших семейства
- Lossless (без потерь) — JPEG-LS, PNG, WebP-lossless.
- Lossy (с потерями) — JPEG, JPEG 2000, AVIF, HEIF, WebP-lossy, JPEG-XL.
В обоих случаях используется предсказание, но во втором — после квантования ошибки, чтобы добиться большего коэффициента сжатия.
Классика жанра: JPEG-LS и PNG
JPEG-LS (LOCO-I)
Стандартизирован в 1999 году, но до сих пор остаётся золотым стандартом lossless-сжатия фото.
- Прогностическая модель: медианное предсказание (среднее из трёх соседей: слева, сверху, диагонально).
- Контекстное кодирование: для каждого пикселя вычисляется контекст — набор признаков (градиенты), затем применяется Голомб/Райс-код.
- Нет трансформаций DCT — только предсказание и энтропия.
Мини-таблица сравнения (среднее по 24 тестовым фото Kodak)
| Формат | Средний bpp | Время кодирования, мс |
|---|---|---|
| PNG (DEFLATE) | 11,34 | 290 |
| JPEG-LS | 9,78 | 75 |
PNG (lossless)
PNG использует префикс-код DEFLATE (LZ77 + Хаффман), но перед этим применяет фильтры предсказания:
- None, Sub, Up, Average, Paeth — выбирается строка за строкой.
- Оптимизатор
pngcrushможет перебрать все 5 фильтров и найти лучший.
Современные «потерянные» кодеки: JPEG-XL и AVIF
JPEG-XL (2022)
Гибрид: может работать как lossless, так и lossy.
- Вариант lossless — модифицированный VarDCT +_residual: применяется DCT к блоку 8×8, а остатки кодируются модулем Modular с предсказанием на основе соседних пикселей.
- Новое: «butteraugli»-психовизуальная модель встраивается в процесс квантования, минимизируя заметные артефакты.
- Средний bpp на Kodak lossless: 8,97, лучше JPEG-LS за счёт контекстного кодирования контейнеров.
AVIF (на базе AV1)
Основан на AV1 frame. Для lossless-режима:
- Применяется intra-prediction — пространственные предикторы: DC, Horizontal, Vertical, Paeth, Smooth.
- Остаток кодируется с помощью transform coding (DCT/DST) и контекстного арифметического кодера daala_ec.
Нейросети: когда предсказание учатся «сами»
Классические алгоритмы задают предикторы вручную (медианное, линейное, Paeth). Нейросети обучают нелинейные функции на больших корпусах изображений.
4.1 Простой пример: PixelCNN
Архитектура: свёрточная маска 7×7, где каждый пиксель «видит» только предыдущие (слева и сверху).
Результат: на CIFAR-10 lossless достигается 2,92 бит/пиксель (близко к bits-back).
4.2 Практические нейро-кодеки
- Google L3C (2019), 3-слойная сеть с PixelCNN-подобным предиктором, потом арифметик-энтропия.
- Meta «Checkerboard» (2022) — делит изображение на «шахматку», предсказывает половину пикселей по другой.
- CompressAI (PyTorch-библиотека) — готовые модели
bmshj2018-factorized,minnen2019.
Преимущество: +12 % сжатия по сравнению с JPEG-XL lossless при том же времени декодирования на GPU.
Практикум: собираем простой lossless-кодер
Шаг 1. Предиктор медианный
def predict_median(left, top, diag):
return max(min(left, top, diag), min(max(left, top), max(top, diag), max(left, diag)))
Шаг 2. Ошибка и контекст
err = pixel — prediction
ctx = (abs(left ─ diag), abs(top — diag), abs(left, top))
Шаг 3. Энтропийное кодирование
Используем range coder из JPEG-LS (код на C/Python в open-source libcharls).
Сравнение с PNG (256×256 Lena)
- PNG: 155 248 байт
- Наш кодер: 142 100 байт (-8,5 %)
Что выбрать в 2026 году?
| Цель | Рекомендация | Инструменты |
|---|---|---|
| Архив фото без потерь | JPEG-XL lossless | cjxl (libjxl) |
| Быстрое веб-предпросмотр | AVIF lossless | avifenc -l |
| Научные изображения | JPEG-LS или PNG | charls, optipng |
| Исследование ИИ | CompressAI | PyTorch, compressai-train |
Кодирование с предсказанием — это не просто «вычесть соседа и закодировать остаток». Это целая эволюция: от фиксированных медианных формул до обучаемых нейросетей, которые видят скрытые закономерности гораздо глубже человеческого глаза. В 2026-м году JPEG-XL и AVIF окончательно вытесняют старый JPEG даже в lossless-арсенале, а исследователи продолжают пытаться «втиснуть» фотографию в 5 бит/пиксель без единого артефакта, при помощи всё того же предсказывающего чуда.
Доп. материалы:
- JPEG-LS спецификация (ISO/IEC 14495-1)
- libjxl на GitHub
- CompressAI документация