Wprowadzono format kompresji obrazu QOI

Wprowadzono nowy, lekki, bezstratny format kompresji obrazu – QOI (Quite OK Image), który umożliwia bardzo szybką kompresję obrazów w przestrzeniach barwnych RGB i RGBA. Porównując wydajność z formatem PNG, jednowątkowa referencyjna implementacja formatu QOI w języku C, która nie wykorzystuje instrukcji SIMD i optymalizacji montażu, jest 20–50 razy szybsza pod względem szybkości kodowania niż biblioteki libpng i stb_image oraz 3 -4 razy większa prędkość dekodowania. Pod względem wydajności kompresji QOI w większości testów jest bliski libpng (w niektórych testach jest nieco lepszy, w innych gorszy), ale ogólnie zauważalnie wyprzedza stb_image (wzrost do 20%).

Referencyjna implementacja QOI w C to tylko 300 linii kodu. Kod źródłowy jest rozpowszechniany na licencji MIT. Dodatkowo pasjonaci przygotowali implementacje koderów i dekoderów w językach Go, Zig i Rust. Projekt rozwija Dominic Szablewski, twórca gier z doświadczeniem w tworzeniu biblioteki do dekodowania wideo MPEG1. Wykorzystując format QOI autor chciał pokazać, że możliwe jest stworzenie efektywnej i prostej alternatywy dla nadmiernie skomplikowanych, współczesnych formatów kodowania obrazu.

Wydajność QOI jest niezależna od rozdzielczości i charakteru zakodowanego obrazu (O(n)). Kodowanie i dekodowanie odbywa się w jednym przebiegu – każdy piksel jest przetwarzany tylko raz i może zostać zakodowany na jeden z 4 sposobów, wybieranych w zależności od wartości poprzednich pikseli. Jeśli następny piksel pokrywa się z poprzednim, licznik powtórzeń tylko się zwiększa. Jeśli piksel pasuje do jednej z wartości w buforze 64 ostatnich pikseli, wówczas wartość jest zastępowana przez 6-bitowe przesunięcie w stosunku do poprzedniego piksela. Jeżeli kolor poprzedniego piksela jest nieco inny, różnica jest wskazywana w krótkiej formie (krótkie kodowanie różnic w składowych kolorów mieszczących się w 2,4, 5 i XNUMX bitach). Jeśli optymalizacja nie ma zastosowania, podawana jest pełna wartość RGB.

Źródło: opennet.ru

Dodaj komentarz