Jak działa format JPEG

Obrazy JPEG są wszechobecne w naszym cyfrowym życiu, ale za tym płaszczem świadomości kryją się algorytmy, które usuwają szczegóły niewidoczne dla ludzkiego oka. Rezultatem jest najwyższa jakość wizualna w najmniejszym rozmiarze pliku - ale jak dokładnie to wszystko działa? Zobaczmy, czego dokładnie nie widzą nasze oczy!

Jak działa format JPEG

Łatwo jest przyjąć za pewnik możliwość wysłania zdjęcia znajomemu i nie martwić się o to, z jakiego urządzenia, przeglądarki lub systemu operacyjnego korzysta – ale nie zawsze tak było. Na początku lat 1980. komputery mogły przechowywać i wyświetlać obrazy cyfrowe, ale istniało wiele konkurencyjnych pomysłów na najlepszy sposób, aby to zrobić. Nie można po prostu wysłać obrazu z jednego komputera do drugiego i mieć nadzieję, że zadziała.

Aby rozwiązać ten problem, w 1986 roku zebrano komitet ekspertów z całego świata pod nazwą „Wspólna Grupa Ekspertów Fotograficznych” (Joint Photographic Experts Group, JPEG), założona w ramach wspólnych prac Międzynarodowej Organizacji Normalizacyjnej (ISO) i Międzynarodowej Komisji Elektrotechnicznej (IEC), dwóch międzynarodowych organizacji normalizacyjnych z siedzibą w Genewie (Szwajcaria).

Grupa ludzi o nazwie JPEG stworzyła standard kompresji obrazu cyfrowego JPEG w 1992 roku. Każdy, kto korzystał z Internetu, prawdopodobnie spotkał się z obrazami zakodowanymi w formacie JPEG. Jest to najczęstszy sposób kodowania, wysyłania i przechowywania obrazów. Od stron internetowych, przez pocztę e-mail, po media społecznościowe, JPEG jest używany miliardy razy dziennie — prawie za każdym razem, gdy oglądamy lub wysyłamy obraz online. Bez plików JPEG sieć byłaby mniej jasna, wolniejsza i prawdopodobnie zawierałaby mniej zdjęć kotów!

Ten artykuł dotyczy dekodowania obrazu JPEG. Innymi słowy, o tym, co jest potrzebne do przekonwertowania skompresowanych danych przechowywanych na komputerze na obraz, który pojawia się na ekranie. Warto o tym wiedzieć nie tylko dlatego, że jest to ważne dla zrozumienia technologii, z której korzystamy na co dzień, ale także dlatego, że ujawniając poziomy kompresji, lepiej poznamy percepcję i wzrok, a także jakie szczegóły są dla naszych oczu najważniejsze. wrażliwy na.

Poza tym granie obrazami w ten sposób jest bardzo interesujące.

Jak działa format JPEG

Patrząc wewnątrz pliku JPEG

Na komputerze wszystko jest przechowywane jako sekwencja liczb binarnych. Zwykle te bity, zera i jedynki, są pogrupowane w ósemki, tworzące bajty. Kiedy otwierasz obraz JPEG na komputerze, coś (przeglądarka, system operacyjny, cokolwiek) musi zdekodować bajty, przywracając oryginalny obraz jako listę kolorów, które można wyświetlić.

Jeśli pobierzesz to słodkie zdjęcie kota i otwórz go w edytorze tekstu, zobaczysz kilka pomieszanych znaków.

Jak działa format JPEG
Tutaj używam Notepad ++ do sprawdzenia zawartości pliku, ponieważ popularne edytory tekstu, takie jak Notatnik z systemu Windows, zepsują plik binarny po jego zapisaniu i nie będzie pasował do formatu JPEG.

Otwarcie obrazu w edytorze tekstu powoduje dezorientację komputera, podobnie jak dezorientuje się mózg, gdy pocierasz oczy i zaczynasz widzieć kolorowe plamy!

Te plamy, które widzisz, są znane jako fosfenyi nie są wynikiem ekspozycji na bodziec świetlny ani halucynacji generowanych przez umysł. Występują, ponieważ mózg myśli, że wszelkie sygnały elektryczne w nerwach wzrokowych przenoszą informacje o świetle. Mózg musi przyjąć takie założenia, ponieważ nie ma sposobu, aby wiedzieć, czy sygnał jest dźwiękiem, wizją, czy czymś innym. Wszystkie nerwy w ciele przekazują dokładnie te same impulsy elektryczne. Kiedy wywierasz nacisk na oczy, wysyłasz sygnały, które nie są wizualne, ale aktywują receptory w oku, co twój mózg interpretuje – w tym przypadku nieprawidłowo – jako coś wizualnego. Dosłownie widać presję!

Zabawne jest myślenie o tym, jak komputery są podobne do mózgu, ale jest to również użyteczna analogia, ilustrująca, jak bardzo znaczenie danych – czy to przenoszonych przez ciało przez nerwy, czy przechowywanych w komputerze – zależy od tego, jak są interpretowane. Wszystkie dane binarne składają się z zer i jedynek, podstawowych elementów zdolnych do przenoszenia wszelkiego rodzaju informacji. Komputer często zgaduje, jak je zinterpretować, korzystając ze wskazówek, takich jak rozszerzenia plików. Teraz sprawiamy, że interpretuje je jako tekst, ponieważ tego właśnie oczekuje edytor tekstu.

Aby zrozumieć, jak dekodować JPEG, musimy zobaczyć same oryginalne sygnały - dane binarne. Można to zrobić za pomocą edytora szesnastkowego lub bezpośrednio w nim strona internetowa oryginalnego artykułu! Znajduje się tam obrazek, obok którego w polu tekstowym wszystkie jego bajty (oprócz nagłówka) są przedstawione w postaci dziesiętnej. Możesz je zmienić, a skrypt przekoduje i utworzy nowy obraz w locie.

Jak działa format JPEG

Możesz się wiele nauczyć, bawiąc się tym edytorem. Na przykład, czy możesz powiedzieć, w jakiej kolejności są przechowywane piksele?

W tym przykładzie dziwne jest to, że zmiana niektórych cyfr w ogóle nie wpływa na obraz, a jeśli np. zamienisz liczbę 17 na 0 w pierwszym wierszu, to zdjęcie zostanie całkowicie zniszczone!

Jak działa format JPEG

Inne zmiany, takie jak zmiana 7 w linii 1988 na 254, zmieniają kolor, ale tylko kolejne piksele.

Jak działa format JPEG

Być może najdziwniejsze jest to, że niektóre liczby zmieniają nie tylko kolor, ale także kształt obrazu. Zmień 70 w linii 12 na 2 i spójrz na górny rząd obrazu, aby zobaczyć, co mam na myśli.

Jak działa format JPEG

I bez względu na to, jakiego obrazu JPEG używasz, zawsze znajdziesz te tajemnicze szachy podczas edycji bajtów.

Bawiąc się edytorem, trudno jest wymyślić, jak odtworzyć zdjęcie z tych bajtów, ponieważ kompresja JPEG składa się z trzech różnych technologii, które są stosowane sekwencyjnie w poziomach. Przestudiujemy każdą z nich osobno, aby odkryć tajemnicze zachowanie, które obserwujemy.

Trzy poziomy kompresji JPEG:

  1. Podpróbkowanie kolorów.
  2. Dyskretna transformata kosinusowa i dyskretyzacja.
  3. Kodowanie długości serii, delta и Huffman

Aby dać wyobrażenie o skali kompresji, zauważ, że powyższy obraz przedstawia 79 819 liczb, czyli około 79 KB. Gdybyśmy mieli przechowywać go bez kompresji, potrzebowalibyśmy trzech liczb dla każdego piksela - dla składowej czerwonej, zielonej i niebieskiej. Dałoby to 917 700 numerów, czyli ok. 917 Kb. W wyniku kompresji JPEG końcowy plik zmniejszył się ponad 10-krotnie!

W rzeczywistości ten obraz można skompresować znacznie bardziej. Poniżej znajdują się dwa obrazy obok siebie - zdjęcie po prawej zostało skompresowane do 16 KB, czyli 57 razy mniej niż wersja nieskompresowana!

Jak działa format JPEG

Jeśli przyjrzysz się uważnie, zobaczysz, że te obrazy nie są identyczne. Oba to zdjęcia z kompresją JPEG, ale prawy jest znacznie mniejszy. Wygląda też trochę gorzej (spójrz na kolorowe kwadraty tła). Dlatego JPEG jest również nazywany kompresją stratną; podczas procesu kompresji obraz zmienia się i traci niektóre szczegóły.

1. Podpróbkowanie kolorów

Oto obraz z zastosowanym tylko pierwszym poziomem kompresji.

Jak działa format JPEG
(wersja interaktywna w oryginalny artykuły). Usunięcie jednej liczby niszczy wszystkie kolory. Jeśli jednak usunie się dokładnie sześć liczb, ma to niewielki lub żaden wpływ na obraz.

Teraz liczby są trochę łatwiejsze do rozszyfrowania. To prawie prosta lista kolorów, każdy bajt zmienia dokładnie jeden piksel, ale to już połowa rozmiaru nieskompresowanego obrazu (który w tak zmniejszonym rozmiarze zająłby ok. 300 KB). Zgadnij dlaczego?

Widać, że te liczby nie reprezentują standardowych składowych czerwonej, zielonej i niebieskiej, ponieważ jeśli zastąpimy wszystkie liczby zerami, otrzymamy zielony obraz (nie biały).

Jak działa format JPEG

Dzieje się tak, ponieważ te bajty oznaczają Y (jasność),

Jak działa format JPEG

Cb (względny niebieski),

Jak działa format JPEG

i Cr (względne zaczerwienienie) zdjęcia.

Jak działa format JPEG

Dlaczego nie użyć RGB? W końcu tak działa większość nowoczesnych ekranów. Monitor może wyświetlać dowolny kolor, w tym czerwony, zielony i niebieski, z różną intensywnością dla każdego piksela. Biel uzyskuje się, włączając wszystkie trzy z pełną jasnością, a czerń je wyłączając.

Jak działa format JPEG

Jest to również bardzo podobne do działania ludzkiego oka. Receptory koloru w naszych oczach nazywane są „szyszki“, i są podzielone na trzy typy, z których każdy jest bardziej wrażliwy na kolory czerwony, zielony lub niebieski [czopki typu S są wrażliwe na fioletowo-niebieski (S z angielskiego. Short - widmo krótkofalowe), Typ M - w zielono-żółtej (M z angielskiego. Medium - fala średnia) i typ L - w żółto-czerwonej (L z angielskiego. Long - long-wave) części widma. Obecność tych trzech rodzajów czopków (i pręcików wrażliwych na szmaragdowo zieloną część widma) daje osobie widzenie kolorów. / około. tłumacz]. Kije, inny rodzaj fotoreceptorów w naszych oczach, jest w stanie wykryć zmiany jasności, ale jest znacznie bardziej wrażliwy na kolor. Nasze oczy mają około 120 milionów pręcików i tylko 6 milionów czopków.

Dlatego nasze oczy zauważają zmiany jasności znacznie lepiej niż zmiany koloru. Jeśli oddzielisz kolor od jasności, możesz usunąć trochę koloru i nikt niczego nie zauważy. Podpróbkowanie chrominancji to proces przedstawiania składowych koloru obrazu w rozdzielczości niższej niż składowe luminancji. W powyższym przykładzie każdy piksel ma dokładnie jedną składową Y, a każda pojedyncza grupa czterech pikseli ma dokładnie jedną składową Cb i jedną składową Cr. Dlatego obraz zawiera cztery razy mniej informacji o kolorze niż oryginał.

Przestrzeń kolorów YCbCr jest używana nie tylko w plikach JPEG. Został wynaleziony w 1938 roku na potrzeby programów telewizyjnych. Nie każdy ma kolorowy telewizor, więc oddzielenie koloru i jasności pozwoliło wszystkim uzyskać ten sam sygnał, a telewizory bez koloru używały tylko składnika jasności.

Dlatego usunięcie jednego numeru z edytora całkowicie niszczy wszystkie kolory. Komponenty są przechowywane w postaci YYYY Cb Cr (w rzeczywistości niekoniecznie w tej kolejności - kolejność przechowywania jest określona w nagłówku pliku). Usunięcie pierwszej liczby spowoduje, że pierwsza wartość Cb zostanie zinterpretowana jako Y, Cr jako Cb i generalnie uzyskamy efekt domina, zamieniając wszystkie kolory obrazu.

Specyfikacja JPEG nie wymaga użycia YCbCr. Ale w większości plików jest używany, ponieważ daje lepszą jakość obrazu po podpróbkowaniu w porównaniu do RGB. Ale nie musisz wierzyć mi na słowo. Przekonaj się w poniższej tabeli, jak wyglądałoby podpróbkowanie każdego pojedynczego komponentu zarówno w trybie RGB, jak i YCbCr.

Jak działa format JPEG
(wersja interaktywna w oryginalny artykuły).

Usunięcie niebieskiego nie jest tak zauważalne jak czerwonego czy zielonego. To z powodu sześciu milionów czopków w twoich oczach, około 64% jest wrażliwych na czerwień, 32% na zieleń i 2% na niebieski.

Najlepiej widać podpróbkowanie składowej Y (lewy dolny róg). Nawet niewielka zmiana jest zauważalna.

Konwersja obrazu z RGB na YCbCr nie zmniejsza rozmiaru pliku, ale ułatwia znalezienie mniej zauważalnych szczegółów, które można usunąć. Kompresja stratna występuje w drugim etapie. Opiera się na idei prezentacji danych w bardziej kompresowalnej formie.

2. Dyskretna transformata kosinusowa i dyskretyzacja

Ten poziom kompresji w większości definiuje istotę formatu JPEG. Po przekonwertowaniu kolorów na YCbCr komponenty są kompresowane pojedynczo, więc od teraz możemy skupić się tylko na komponencie Y. A tak wyglądają bajty komponentu Y po zastosowaniu tego poziomu.

Jak działa format JPEG
(wersja interaktywna w oryginalny artykuły). W wersji interaktywnej kliknięcie piksela powoduje przewinięcie edytora do linii, która go reprezentuje. Spróbuj usunąć liczby z końca lub dodać kilka zer do określonej liczby.

Na pierwszy rzut oka wygląda to na bardzo złą kompresję. Na obrazie jest 100 000 pikseli, a potrzeba 102 400 liczb, aby wskazać ich jasność (komponenty Y) - to gorsze niż całkowity brak kompresji!

Należy jednak pamiętać, że większość z tych liczb to zero. Co więcej, wszystkie te zera na końcu linii można usunąć bez zmiany obrazu. Pozostało około 26 000 numerów, czyli prawie 4 razy mniej!

Ten poziom zawiera sekret schematów szachowych. W przeciwieństwie do innych efektów, które widzieliśmy, pojawienie się tych wzorów nie jest usterką. Są budulcem całego obrazu. Każda linia edytora zawiera dokładnie 64 liczby, współczynniki dyskretnej transformacji kosinusowej (DCT) odpowiadające intensywnościom 64 unikalnych wzorców.

Wzory te są tworzone na podstawie wykresu cosinusa. Oto jak wyglądają niektóre z nich:

Jak działa format JPEG
8 z 64 szans

Poniżej znajduje się obraz przedstawiający wszystkie 64 wzory.

Jak działa format JPEG
(wersja interaktywna w oryginalny artykuły).

Wzory te mają szczególne znaczenie, ponieważ stanowią podstawę obrazów 8x8. Jeśli nie jesteś zaznajomiony z algebrą liniową, oznacza to, że z tych 8 wzorów można uzyskać dowolny obraz 8x64. DCT to proces dzielenia obrazów na bloki 8x8 i przekształcania każdego bloku w kombinację tych 64 współczynników.

Fakt, że dowolny obraz może składać się z 64 określonych wzorów, wydaje się magiczny. Jest to jednak to samo, co powiedzenie, że dowolne miejsce na Ziemi można opisać dwiema liczbami – szerokością i długością geograficzną [wskazującymi półkule / ok. tłumacz]. Często myślimy o powierzchni Ziemi jako dwuwymiarowej, więc potrzebujemy tylko dwóch liczb. Obraz 8x8 ma 64 wymiary, więc potrzebujemy 64 liczb.

Nie jest jeszcze jasne, w jaki sposób pomaga nam to pod względem kompresji. Jeśli potrzebujemy 64 liczb do przedstawienia obrazu 8x8, dlaczego miałoby to być lepsze niż przechowywanie 64 składowych luminancji? Robimy to z tego samego powodu, dla którego zamieniliśmy trzy liczby RGB na trzy liczby YCbCr: pozwala nam to usunąć subtelne szczegóły.

Trudno jest dokładnie zobaczyć, jakie szczegóły są usuwane na tym etapie, ponieważ JPEG stosuje DCT do bloków 8x8. Jednak nikt nie zabrania nam stosować go do całego obrazu. Oto jak wygląda DCT dla komponentu Y po zastosowaniu do całego obrazu:

Jak działa format JPEG

Ponad 60 000 numerów można usunąć od końca praktycznie bez zauważalnych zmian na zdjęciu.

Jak działa format JPEG

Zauważ jednak, że jeśli wyzerujemy pierwsze pięć liczb, różnica będzie oczywista.

Jak działa format JPEG

Liczby na początku reprezentują zmiany o niskiej częstotliwości w obrazie, a nasze oczy wychwytują je najlepiej. Liczby pod koniec oznaczają zmiany o wysokiej częstotliwości, które są trudniejsze do zauważenia. Aby „zobaczyć to, czego oko nie widzi”, możemy wyizolować te szczegóły o wysokiej częstotliwości, wyzerowując pierwsze 5000 liczb.

Jak działa format JPEG

Widzimy wszystkie obszary obrazu, w których następuje największa zmiana z piksela na piksel. Oczy kota, jego wąsy, koc frotte i cienie w lewym dolnym rogu wyróżniają się. Możesz pójść dalej, wyzerowując pierwsze 10 000 liczb:

Jak działa format JPEG

20 000:

Jak działa format JPEG

40 000:

Jak działa format JPEG

60 000:

Jak działa format JPEG

Te szczegóły o wysokiej częstotliwości są usuwane przez JPEG na etapie kompresji. Konwersja kolorów na współczynniki DCT jest bezstratna. Straty powstają na etapie próbkowania, gdzie usuwane są wartości o wysokiej częstotliwości lub bliskie zeru. Gdy obniżysz jakość zapisywania JPEG, program zwiększa próg liczby wartości do usunięcia, co zmniejsza rozmiar pliku, ale powoduje, że obraz jest bardziej rozpikselowany. Tak więc obraz w pierwszej sekcji, który był 57 razy mniejszy, wyglądał tak. Każdy blok 8x8 reprezentował znacznie mniejszą liczbę współczynników DCT w porównaniu z wersją o wyższej jakości.

Możesz zrobić coś tak fajnego, jak stopniowe przesyłanie strumieniowe obrazów. Możesz wyświetlić rozmyty obraz, który staje się coraz bardziej szczegółowy w miarę pobierania większej liczby współczynników.

Tutaj, dla zabawy, co się stanie, gdy użyjesz tylko 24 000 liczb:

Jak działa format JPEG

Lub tylko 5000:

Jak działa format JPEG

Bardzo niewyraźne, ale rozpoznawalne!

3. Kodowanie długości przebiegów, delta i Huffmana

Do tej pory wszystkie etapy kompresji były stratne. Przeciwnie, ostatni etap przebiega bez strat. Nie usuwa informacji, ale znacznie zmniejsza rozmiar pliku.

Jak skompresować coś bez odrzucania informacji? Wyobraź sobie, jak opisalibyśmy prosty czarny prostokąt o wymiarach 700 x 437.

JPEG wykorzystuje do tego 5000 liczb, ale można osiągnąć znacznie lepsze wyniki. Czy możesz sobie wyobrazić schemat kodowania, który opisuje taki obraz w jak najmniejszej liczbie bajtów?

Minimalny schemat, który mogłem wymyślić, wykorzystuje cztery: trzy dla koloru i czwarty dla liczby pikseli tego koloru. Pomysł przedstawiania powtarzających się wartości w tak skompresowany sposób nazywa się kodowaniem run-length. Jest bezstratny, ponieważ możemy odzyskać zakodowane dane w ich pierwotnej postaci.

Rozmiar pliku JPEG z czarnym prostokątem jest znacznie większy niż 4 bajty - pamiętaj, że na poziomie DCT kompresja dotyczy bloków o wielkości 8x8 pikseli. Dlatego potrzebujemy co najmniej jednego współczynnika DCT na każde 64 piksele. Potrzebujemy go, ponieważ zamiast przechowywać pojedynczy współczynnik DCT, po którym następują 63 zera, kodowanie długości serii pozwala nam przechowywać pojedynczą liczbę i oznaczać „wszystkie inne są zerami”.

Kodowanie delta to technika, w której każdy bajt zawiera różnicę w stosunku do pewnej wartości, a nie wartość bezwzględną. Dlatego edycja niektórych bajtów zmienia kolor wszystkich pozostałych pikseli. Na przykład zamiast przechowywania

12 13 14 14 14 13 13 14

Moglibyśmy zacząć od 12, a potem po prostu zapisać, ile dodać lub odjąć, aby otrzymać następną liczbę. Ta sekwencja w kodowaniu delta ma postać:

12 1 1 0 0 -1 0 1

Przekonwertowane dane nie są mniejsze niż dane oryginalne, ale łatwiej je skompresować. Zastosowanie kodowania delta przed kodowaniem długości serii może bardzo pomóc, przy jednoczesnym zachowaniu bezstratnej kompresji.

Kodowanie delta jest jedną z niewielu technik stosowanych poza blokami 8x8. Spośród 64 współczynników DCT jeden jest po prostu stałą funkcją falową (jednolity kolor). Reprezentuje średnią jasność każdego bloku dla składowych luminancji lub średni odcień błękitu dla składowych Cb i tak dalej. Pierwsza wartość każdego bloku DCT jest nazywana wartością DC, a każda wartość DC jest kodowana delta w stosunku do poprzednich. Dlatego zmiana jasności pierwszego bloku wpłynie na wszystkie bloki.

Pozostaje ostatnia zagadka: w jaki sposób zmiana liczby pojedynczej całkowicie psuje cały obraz? Dotychczas stopnie kompresji nie miały takich właściwości. Odpowiedź leży w nagłówku JPEG. Pierwsze 500 bajtów zawiera metadane dotyczące obrazu - szerokość, wysokość itp., i jak dotąd z nimi nie pracowaliśmy.

Bez nagłówka prawie niemożliwe (cóż, bardzo trudne) jest zdekodowanie pliku JPEG. Będzie to wyglądać tak, jakbym próbował opisać ci obraz i zaczynałem wymyślać słowa, aby przekazać moje wrażenie. Opis będzie prawdopodobnie bardzo zwięzły, ponieważ mogę wymyślać słowa o dokładnie takim znaczeniu, jakie chcę przekazać, ale dla wszystkich innych nie będą one miały sensu.

Brzmi głupio, ale tak właśnie się dzieje. Każdy obraz JPEG jest kompresowany za pomocą specyficznych dla niego kodów. Słownik kodów jest przechowywany w nagłówku. Ta technika nazywa się „kodem Huffmana”, a słownik nazywa się tablicą Huffmana. W nagłówku tablica oznaczona jest dwoma bajtami - 255 a następnie 196. Każda składowa koloru może mieć swoją własną tablicę.

Zmiany w tabeli drastycznie wpłyną na każdy obraz. Dobrym przykładem jest zmiana z 15 na 1 w 12. linii.

Jak działa format JPEG

Dzieje się tak, ponieważ tablice określają, w jaki sposób mają być odczytywane poszczególne bity. Do tej pory pracowaliśmy tylko z liczbami binarnymi w postaci dziesiętnej. Ale to ukrywa przed nami fakt, że jeśli chcesz zapisać liczbę 1 w bajcie, to będzie wyglądać jak 00000001, ponieważ każdy bajt musi mieć dokładnie osiem bitów, nawet jeśli tylko jeden z nich jest potrzebny.

Jest to potencjalnie duża strata miejsca, jeśli masz dużo małych liczb. Kod Huffmana to technika, która pozwala nam złagodzić wymaganie, że każda liczba musi zajmować osiem bitów. Oznacza to, że jeśli widzisz dwa bajty:

234 115

Wtedy, w zależności od tabeli Huffmana, mogą to być trzy liczby. Aby je wyodrębnić, musisz najpierw podzielić je na pojedyncze bity:

11101010 01110011

Następnie zwracamy się do stołu, aby zrozumieć, jak je pogrupować. Na przykład może to być pierwsze sześć bitów (111010) lub 58 w systemie dziesiętnym, następnie pięć bitów (10011) lub 19, a na koniec ostatnie cztery bity (0011) lub 3.

Dlatego bardzo trudno jest zrozumieć bajty na tym etapie kompresji. Bajty nie reprezentują tego, czym się wydają. Nie będę wchodził w szczegóły pracy z tabelą w tym artykule, ale Materiały w tej sprawie w Internecie jest wystarczający.

Jedną z fajnych sztuczek, które możesz zrobić dzięki tej wiedzy, jest oddzielenie nagłówka od pliku JPEG i przechowywanie go osobno. W rzeczywistości okazuje się, że tylko ty możesz odczytać plik. Facebook robi to, aby jeszcze bardziej zmniejszyć liczbę plików.

Co jeszcze można zrobić, to nieco zmienić tabelę Huffmana. Dla innych będzie to wyglądać jak zepsuty obraz. I tylko ty będziesz znać magiczną opcję, aby to naprawić.

Podsumowując: co jest potrzebne do zdekodowania JPEG? Niezbędny:

  1. Wyodrębnij tabele Huffmana z nagłówka i zdekoduj bity.
  2. Wyodrębnij dyskretne współczynniki transformacji kosinusowej dla każdego składnika koloru i luminancji dla każdego bloku 8x8 przez odwrotne przekształcenie kodowania długości serii i delta.
  3. Połącz cosinusy na podstawie współczynników, aby uzyskać wartości pikseli dla każdego bloku 8x8.
  4. Skaluj składowe koloru, jeśli przeprowadzono podpróbkowanie (ta informacja znajduje się w nagłówku).
  5. Konwertuj wynikowe wartości YCbCr dla każdego piksela na RGB.
  6. Przenieś obraz na ekran!

Poważna praca za zwykłe oglądanie zdjęcia z kotem! Jednak podoba mi się to, że pokazuje, jak bardzo skoncentrowana jest na człowieku technologia JPEG. Opiera się na cechach naszej percepcji, co pozwala osiągnąć znacznie lepszą kompresję niż konwencjonalne technologie. A teraz, rozumiejąc, jak działa JPEG, możesz sobie wyobrazić, jak te technologie można przenieść do innych obszarów. Na przykład kodowanie delta w wideo może spowodować znaczne zmniejszenie rozmiaru pliku, ponieważ często istnieją całe obszary, które nie zmieniają się z klatki na klatkę (na przykład tło).

Kod użyty w artykule, jest otwarty i zawiera instrukcje dotyczące zastępowania obrazów własnymi.

Źródło: www.habr.com

Dodaj komentarz