Как работят форматите на изображенията и как WebP ги подобрява

Дълбокото обучение е бъдещето: как да тренирате по различен начин и какви възможности ще имате

Все още имаме някои неща в подготовка на Google I/O. Един от тях е "новият" имиджев кодек за Web: WebP (Web - Picture, те не са си счупили главите с името). Казвам „ново“, защото вече е съществувало много преди, но не боли да му дадете рецензия.

форматите

Първото нещо е да разберем защо Google полага тези усилия. Имаме три основни кодека или формата: JPEG, PNG и GIF, датиращи съответно от 1991, 1996 и 1987 г. Много неща се промениха оттогава, но въпреки това тези кодеци все още работят. относно.

JPEG е най-използваният не само в Интернет, но и извън него. Най-голямото предимство, което има, е неговият капацитет за компресия, който може да достигне до 100: 1 (100KB изображение, съхранявано в 1KB файл). Но разбира се, тази мощна компресия има своите недостатъци: загуба на качество. По-късно ще видим защо това се случва, но съм сигурен, че артефактите, изкривяването на JPG са познати на всички нас.

Тогава имаме GIF формат. Форматът наистина е доста лош: въпреки че компресията е без загуби, имаме проблем и това е, че можем да представим само 256 цвята. За да ви даде представа, нормалният екран представлява милиони цветове. Резултатът е, че GIF не е с качествен формат и всъщност се използва само за прости лога и анимации (единственият, който ги позволява).

И накрая, има PNG. Това е формат без загуби, който поддържа прозрачност. Проблемът е, че не достига компресия толкова висока, колкото JPEG, така че се използва само с малки изображения и с малко цветове.

WebP обединява предимствата на PNG, GIF и JPEG в един формат.

В крайна сметка имаме три различни формата и всеки един превъзхожда в поле, в което останалите нямат какво да правят: JPEG за малки файлове, PNG за високо качество и прозрачност и GIF за анимации.

WebP има за цел да обедини всички тези предимства в един файл. Той има компресия със загуби за намаляване на размера на файла, без загуби за поддържане на качеството (и все още по-малки файлове от PNG), поддържа прозрачност и анимации. Крайният формат, хайде. Как го правят в Google?

Как работят кодеците за изображения?

За да разберем малко защо е необходима WebP, трябва да видим как работят кодеците за изображения. Забележете, че ще направя няколко опростявания, за да се разбере по-добре.

На първо място, нека запомним, че изображението не е нищо повече от поредица от точки или пиксели, където всяка позиция има количествата червено, зелено и синьо, които съставят цвета на пиксела.

Загубата на качествена компресия на изображението се основава на два принципа (най-важният, има много повече). Основното е, че човешкото око не е в състояние да различи много леки промени в цвета. И второто, че е по-кратко да се запази серия от точки като функция. Например, какво е по-кратко за запазване, петдесет точки от права или нейната функция (y = ax + b в случай, че някой не си спомня)?

Не можем да открием малките промени в цвета, така че защо да ги запазваме?

Изглежда, че казаното от мен не е свързано, но всъщност е така. Казахме, че изображението не е нищо повече от поредица от точки, така че можем да представим тези точки в графика и след това да изградим функция, която апроксимира тези точки.

Тази функция излиза с много много малки върхове. Почакайте, не казахме ли, че такива малки промени не се откриват от окото? Е, лесно ни е: нека се отървем от тези шипове. Нека "изравним" функцията. Това ще го направи по-кратък и ще го запазим по-лесно. Можете да видите диаграма на това, което се случва на следващото изображение.

В JPEG това (повече или по-малко) е това, което се нарича процес на квантуване. Въпросът е какво се случва, ако преминем към „изравняване“ на функцията? Че губим подробности. Цветовете са буквално по-плоски: губим контраст. Всеки пиксел прилича много повече на останалите и затова се появяват артефакти. Преувеличавам много, ето какво се случва в реалното изображение, ако преминем компресията: