Pull to refresh

Нужен ли нам такой формат?.. и немного статистики

Reading time 5 min
Views 2.9K
Несколько месяцев в свободное время занимался разработкой нового формата изображений.

Акценты сделаны на:
1. Сжатие без потерь
2. Хорошая векторизация одноцветных объектов
3. Более быстрое ДЕкодирование, чем у других форматов
4. Несколько шаблонов кодирования при едином шаблоне декодирования в зависимости от того, что нужно 1, 2, 3 или что-то среднее
5. Сжатие любых векторных изображений (с потерями, но можно указать до какого масштаба необходима абсолютная точность)
6. Стилизация (главным образом для придания уникальности изображению + видеоэффекты и т.д.)
7. Также возможна прогрессивность (отображение по ходу загрузки) при установке неполного сжатия или в 27% случаев
8. Имитация рисования изображения
9. Добавление возможностей с обратной совместимостью


А вот подробная презентация формата:











На таких масштабах габаритов в среднем на занятое место PNG можно записать те же изображения в качестве 43% JPG, а на VRP – в качестве 44% JPG.

Теперь на графике (линии тренда полиноминальны, 2-й степени, штриховые линии — экстраполяция моего скудного мозга):



VRP меньше BMP(почти несжатое) от 1Б до 350 Б и от ~7КБ, то есть сжатие работает.

VRP при размере несжатого изображения:

от 1 Б до 250 Б: оптимален
от 250 Б до 1 КБ: приемлем
от 1 КБ до 7 КБ: не оптимален
от 7 КБ до 400 КБ: возможно приемлем
от 400 КБ: возможно оптимален

Теперь сравним VRP(без потерь) и растровые форматы, поддерживающие сжатие с потерями (но погрешность не более ±10/256 в среднем на пиксель на канал — спасибо за идею Griboks) — для каждого формата были испытаны различные шаблоны (чтобы все изображения в этом формате удовлетворяли условию — сжатие с потерями прошло успешно лишь у JPG, остальные форматы удовлетворяют условию лишь без потерь)





Линии тренда логарифмичны, форматы по возрастанию размера:
JPEG 80% качества субдискретизация 4:2:2
VectoRabbitPicture без потерь
JPEG 2000 без потерь
JPEG XR без потерь
WebP без потерь

Также были проанализированы:
HEIF: не поддерживаются изображения до 64х64 и цвета искажаются в любом случае
DjVu: в любом случае выходят большие потери
*область применимости данного анализа – слабо видимые потери качества и небольшие изображения













При автоматической трассировке из растра результат получается с потерями. В VRP хотя бы нет потерь вплоть до масштаба в 100%.

И как видно на графике, при этом, иконки, пиктограммы и несложные логотипы в SVG (и почти в любых других векторных форматах) ещё и заведомо в несколько раз будут больше VRP.

Также, так как VRP – формат без потерь при масштабах до 100%, из того же файла есть возможность получать абсолютно такие же результаты как у PNGА при наличии дополнительного времени даже смешивать разные результаты! Также, при выборе результатов от VRP на это уйдёт меньше времени, чем у растровых форматов

Более быстрое декодирование


Я считаю, что за счёт аппаратного ускорения и в случае лёгкого сжатия, так как данные хранятся в векторном виде, а не о каждом пикселе отдельно и не требуется интерполяция (PNG), примитивов меньше и они кодированы не на человеческом языке, а специально для декодера (SVG) будет более быстрая отрисовка изображения (уже после того, как файл был скачан). Это очень важно при больших фото и слабых устройствах, а также для будущих планов развития формата.

Несколько шаблонов кодирования при едином шаблоне декодирования в зависимости от того, что сильнее нужно из перечисленного или что-то среднее.

Сжатие любых векторных изображений с потерями, но можно указать любой процент потерь









Линия VRP указывает где находятся другие векторные форматы (по размеру и сколько нужно потерять, чтобы быть в плюсе относительно формата):



Не ждите, изображение справа не прогрузится лучше)

Стилизация изображенийдля придания уникальности изображению и создания видеоэффектов. Для стилизации есть несколько революционных возможностей:

a) Выбор как сильно стилизовать (от 1 до 100)
b) Сколько цветов использовать (все, 2млн, …, 512, 64, 8) — от этого сильно разнится результат и не только цветами
c) Выбор формы элемента (круг, треугольник, квадрат, сердечко, кошка…)
d) Размер полигонов (от 0.5 до 1)
e) Размер дополнений к полигонам и нужны ли они (от 0 до 1)
*Для стилизации изображение должно быть в формате VRP



Вот несколько результатов с разными настройками:

Над изображением настройки (a,b,c,d,e). Везде без интерполяции



Автоматический алгоритм не сможет идентифицировать картинку и будет считать её оригинальной, даже если не сильно стилизовать:
5 параметров (a,b,c,d,e) с совершенно разными значениями плюс несколько вариантов интерполяции (как на входе, так и на выходе) дают бесконечное количество вариантов и даже разные стилизации будут считаться оригинальной картинкой без претензий в нарушении авторских прав.

Также это можно использовать как видеоэффект, основанный на статичном кадре или наборе кадров из видео, когда какие-то параметры плавно меняются и каждый результат записывается как кадр.

Прогрессивность


Обычно на сайтах картинка грузится сверху вниз или иногда качество вырастает по мере загрузки
В формате VRP так невозможно, но в 27% случаях либо в 100% случаях при выборе шаблона «Быстрейшая прорисовка» во время сохранения, при прогрузке будет улучшаться не качество, а цветность, т.е. картинку сразу видно и можно понять что на ней, плюсом последние стадии прогрузки глазу будут практически незаметны.

Иллюстрации в оригинальной презентации. (скачивайте и смотрите через F5 в PowerPoint)

Имитация рисования изображения

Иллюстрация в оригинальной презентации. (скачивайте и смотрите через F5 в PowerPoint)

Формат можно будет легко дополнить.

Развитие формата и добавление новых возможностей с полной обратной совместимостью


Программы, не поддерживающие новую версию формата всё равно смогут открывать файлы, за исключением новых возможностей. Программы, поддерживающие новую версию формата будут открывать и все старые версии формата, а также если в конкретном случае не будут использованы новые функции — файл сразу станет старейшей версии и будет меньше весить.

Имеющиеся недостатки


В основном все недостатки можно устранить, но на это нужно время и средства.

Пока что медленное конвертирование и сжатие, из-за неоптимизированности алгоритма, использования устаревшего языка программирования и неадаптированности под x64, из-за чего обработка картинок из более 1000 пикселей пока занимает неприемлемое время. Это точно можно устранить, но на это нужно много человеко-часов.

Сжатие вектора, прогрессивность, имитация рисования точно можно сделать, но пока не полностью реализовано

Более быстрое декодирование пока не доказано

Планы развития


  • Устранить недостатки
  • Реализовать всё до конца
  • Улучшить отображение и сжатие насколько это возможно
  • Добавить поддержку прозрачности
  • Разработать на основе этого формата, формат и алгоритмы для анимации и видео со всеми теми же возможностями

Монетизация


Монетизировать как формат, так и сервисы, предоставляющие услуги на основе алгоритма можно совершенно различными способами. Из самых очевидных:

  • Приём спонсирования на создание и поддержание открытого формата и бесплатным предоставлением для программ на его основе
  • Продажа лицензий на использование формата в видео/фотоаппаратах/принтерах
  • Продажа программ, реализующих интерфейс для работы с форматом и всеми возможностями алгоритма
  • Создание платной библиотеки для использования формата и сервисов на его основе
  • Продать готовый рабочий продукт крупной компании

Вот собственно почти и всё. Скоро добавлю ещё несколько таблиц.
Жду ваших комментариев — нужен ли такой формат? Почему да? Почему нет? Где я может ошибся? Кто готов инвестировать? Кто готов купить работающий прототип?
Tags:
Hubs:
+3
Comments 35
Comments Comments 35

Articles