JPEG - JPEG

JPEG
Logo w formacie JPEG.svg
Felis silvestris silvestris mały stopniowy spadek jakości.png
Zdjęcie żbika europejskiego o rosnącej jakości, od lewej do prawej
Rozszerzenie nazwy pliku .jpg, .jpeg, .jpe
.jif, .jfif,.jfi
Rodzaj mediów internetowych
obraz/jpeg
Kod typu JPEG
Jednolity identyfikator typu (UTI) public.jpeg
magiczny numer ff d8 ff
Opracowany przez Joint Photographic Experts Group , IBM , Mitsubishi Electric , AT&T , Canon Inc. , ITU-T Study Group 16
Pierwsze wydanie 18 września 1992 ; 29 lat temu ( 18.09.1992 )
Rodzaj formatu Stratny format kompresji obrazu
Standard ITU-T T.81, ITU-T T.83, ITU-T T.84, ITU-T T.86, ISO/IEC 10918
Strona internetowa www .jpeg .org / JPEG /
Ciągle zróżnicowana kompresja JPEG (od Q=100 do Q=1) dla tomografii komputerowej jamy brzusznej

JPEG lub JPG ( / P ɛ ɡ / Jay -PEG ) jest powszechnie stosowaną metodą kompresji stratnej do zdjęć cyfrowych , w szczególności dla tych obrazów wytwarzanych przez fotografii cyfrowej . Stopień kompresji można regulować, umożliwiając wybór kompromisu między rozmiarem pamięci a jakością obrazu . JPEG zazwyczaj osiąga kompresję 10:1 z niewielką zauważalną utratą jakości obrazu. Od czasu wprowadzenia w 1992 r. JPEG jest najczęściej używanym standardem kompresji obrazu na świecie i najczęściej używanym formatem obrazu cyfrowego , z kilkoma miliardami obrazów JPEG produkowanych każdego dnia od 2015 r.

Określenie „JPEG” jest initialism / akronimem dla Joint Photographic Experts Group , która stworzyła standard w roku 1992. Podstawą do JPEG jest dyskretna transformata kosinusowa (DCT), technika kompresji stratnej obrazu, który został po raz pierwszy zaproponowany przez Nasir Ahmed w 1972. JPEG był w dużej mierze odpowiedzialny za rozpowszechnianie obrazów cyfrowych i zdjęć cyfrowych w Internecie, a później w mediach społecznościowych .

Kompresja JPEG jest używana w wielu formatach plików graficznych . JPEG/ Exif to najpopularniejszy format obrazu używany przez aparaty cyfrowe i inne urządzenia do przechwytywania obrazów fotograficznych; wraz z JPEG/ JFIF jest to najpopularniejszy format przechowywania i przesyłania obrazów fotograficznych w sieci WWW . Te odmiany formatu często nie są rozróżniane i nazywane są po prostu JPEG.

MIME typu nośnika dla JPEG image / jpeg , z wyjątkiem starszych Internet Explorer wersji, która zapewnia typ MIME obrazu / pjpeg Podczas przesyłania obrazów JPEG. Pliki JPEG mają zazwyczaj rozszerzenie pliku z .jpglub .jpeg. JPEG/JFIF obsługuje maksymalny rozmiar obrazu 65 535 x 65 535 pikseli, czyli do 4 gigapikseli. W 2000 roku grupa JPEG wprowadziła format mający być następcą, JPEG 2000 , ale nie była w stanie zastąpić oryginalnego JPEG jako dominującego standardu obrazu.

Historia

Tło

Oryginalna specyfikacja JPEG opublikowana w 1992 r. wdraża procesy z różnych wcześniejszych prac badawczych i patentów cytowanych przez CCITT (obecnie ITU-T , za pośrednictwem ITU-T Study Group 16 ) i Joint Photographic Experts Group. Główną podstawą algorytmu stratnej kompresji JPEG jest dyskretna transformata kosinusowa (DCT), która została po raz pierwszy zaproponowana przez Nasira Ahmeda jako technika kompresji obrazu w 1972 roku. Ahmed opracował praktyczny algorytm DCT z T. Natarajanem z Kansas State University i KR Rao z University of Texas w Arlington w roku 1973. Ich nasienny 1974 papier jest cytowany w specyfikacji JPEG, wraz z kilku późniejszych prac naukowych, które czynił dalsze prace na DCT, w tym 1977 papierze Wen-Hsiung Chen, CH Smitha i SC Fralick opisanego szybki algorytm DCT, a także artykuł NJ Narasinha i SC Fralick z 1978 roku oraz artykuł BG Lee z 1984 roku. Specyfikacja przytacza również artykuł Wen-Hsiung Chen i WK Pratt z 1984 roku jako wpływ na jego algorytm kwantyzacji oraz artykuł Davida A. Huffmana z 1952 roku dotyczący algorytmu kodowania Huffmana .

Specyfikacja JPEG przytacza patenty kilku firm. Następujące patenty stanowiły podstawę algorytmu kodowania arytmetycznego .

  • IBM
    • US Patent 4,652,856 - 4 lutego 1986 - Kottappuram MA Mohiuddin i Jorma J. Rissanen - Wieloalfabetowy kod arytmetyczny bez mnożenia
    • Patent USA 4,905,297 - 27 lutego 1990 - G. Langdon, JL Mitchell, WB Pennebaker i Jorma J. Rissanen - koder i dekoder arytmetyczny
    • US Patent 4,935,882 - 19 czerwca 1990 - WB Pennebaker i JL Mitchell - Adaptacja prawdopodobieństwa dla koderów arytmetycznych
  • Mitsubishi Electric
    • JP H02202267  ( 1021672 ) – 21 stycznia 1989 – Toshihiro Kimura, Shigenori Kino, Fumitaka Ono, Masayuki Yoshida – System kodowania
    • JP H03247123  ( 2-46275 ) – 26 lutego 1990 – Fumitaka Ono, Tomohiro Kimura, Masayuki Yoshida i Shigenori Kino – Aparatura do kodowania i metoda kodowania

Specyfikacja JPEG przytacza również trzy inne patenty IBM. Inne firmy cytowane jako posiadacze patentów to AT&T (dwa patenty) i Canon Inc. Na liście nie ma patentu USA nr 4 698 672 , zgłoszonego przez Wen-Hsiung Chen z Compression Labs i Daniela J. Klenke w październiku 1986 r. Patent opisuje oparty na DCT algorytm kompresji obrazu, a później stał się przyczyną kontrowersji w 2002 roku (patrz Kontrowersje patentowe poniżej). Jednak specyfikacja JPEG przytaczała dwa wcześniejsze prace badawcze Wen-Hsiung Chen, opublikowane w 1977 i 1984 roku.

Standard JPEG

„JPEG” to skrót od Joint Photographic Experts Group, nazwy komitetu, który stworzył standard JPEG, a także inne standardy kodowania zdjęć. „Wspólne” oznaczało ISO TC97 WG8 i CCITT SGVIII. Założona w 1986 roku grupa opracowała pod koniec lat 80. standard JPEG. Spośród kilku zbadanych technik kodowania transformacyjnego wybrali dyskretną transformatę kosinusową (DCT), ponieważ była to zdecydowanie najbardziej wydajna praktyczna technika kompresji. Grupa opublikowała standard JPEG w 1992 roku.

W 1987 roku ISO TC 97 przemianowano na ISO/IEC JTC1, a w 1992 roku CCITT na ITU-T. Obecnie po stronie JTC1 JPEG jest jedną z dwóch podgrup Wspólnego Komitetu Technicznego ISO / IEC 1 , Podkomitetu 29, Grupy Roboczej 1 ( ISO/IEC JTC 1/SC 29 /WG 1) – zatytułowanej jako Kodowanie zdjęć . Po stronie ITU-T odpowiednim organem jest ITU-T SG16. Pierwotna grupa JPEG została zorganizowana w 1986 r., wydając w 1992 r. pierwszy standard JPEG, który został zatwierdzony we wrześniu 1992 r. jako zalecenie ITU-T T.81, a w 1994 r. jako ISO/IEC 10918-1 .

Standard JPEG określa kodek , który definiuje sposób kompresji obrazu do strumienia bajtów i dekompresowania z powrotem do obrazu, ale nie określa formatu pliku używanego do zawierania tego strumienia. Standardy Exif i JFIF określają powszechnie używane formaty plików do wymiany obrazów skompresowanych w formacie JPEG.

Standardy JPEG są formalnie nazywane technologiami informacyjnymi — kompresja cyfrowa i kodowanie nieruchomych obrazów o ciągłych tonach . ISO/IEC 10918 składa się z następujących części:

Kompresja cyfrowa i kodowanie nieruchomych obrazów o płynnych przejściach tonalnych – Części
Część Norma ISO/IEC Zalecenie ITU-T Data pierwszej publicznej premiery Ostatnia poprawka Tytuł Opis
Część 1 ISO/IEC 10918-1:1994 T.81 (09/92) 18 września 1992 Wymagania i wytyczne
Część 2 ISO/IEC 10918-2:1995 T.83 (11/94) 11 listopada 1994 Testy zgodności Zasady i kontrole zgodności oprogramowania (do Części 1).
Część 3 ISO/IEC 10918-3:1997 T.84 (07/96) 3 lipca 1996 r. 1 kwietnia 1999 Rozszerzenia Zestaw rozszerzeń poprawiających część 1, w tym Still Picture Interchange File Format (SPIFF).
Część 4 ISO/IEC 10918-4:1999 T.86 (06/98) 18 czerwca 1998 r. 29 czerwca 2012 r. Rejestracja profili JPEG, profili SPIFF, znaczników SPIFF, przestrzeni kolorów SPIFF, znaczników APPn, typów kompresji SPIFF i Urzędów Rejestracji (REGAUT) metody rejestrowania niektórych parametrów używanych do rozszerzania JPEG
Część 5 ISO/IEC 10918-5:2013 T.871 (05/11) 14 maja 2011 Format wymiany plików JPEG (JFIF) Popularny format, który był de facto formatem plików obrazów zakodowanych w standardzie JPEG. W 2009 r. Komitet JPEG formalnie powołał Grupę Ad Hoc w celu standaryzacji JFIF jako JPEG Część 5.
Część 6 ISO/IEC 10918-6:2013 T.872 (06/12) cze 2012 Zastosowanie do systemów druku Określa podzbiór funkcji i narzędzi aplikacji do wymiany obrazów zakodowanych zgodnie z normą ISO/IEC 10918-1 do drukowania.
Część 7 ISO/IEC 10918-7:2019 T.873 (05/19) Maj 2019 Kompresja cyfrowa i kodowanie nieruchomych obrazów o ciągłych tonach Zapewnia oprogramowanie referencyjne dla technologii kodowania określonej w zaleceniu ITU-T T.81 – ISO/IEC 10918-1. Chociaż implementacje referencyjne zapewniają również koder, testowanie zgodności procesu kodowania wykracza poza zakres niniejszej Specyfikacji.

Ecma International TR /98 określa format wymiany plików JPEG (JFIF); pierwsze wydanie ukazało się w czerwcu 2009 r.

Kontrowersje patentowe

W 2002 r. firma Forgent Networks zapewniła, że ​​posiada i będzie egzekwować prawa patentowe dotyczące technologii JPEG, wynikające z patentu zgłoszonego 27 października 1986 r. i przyznanego 6 października 1987 r.: Patent US 4 698 672 przez Compression Labs' Wen- Hsiung Chen i Daniel J. Klenke. Podczas gdy Forgent nie posiadał wówczas Compression Labs, Chen później sprzedał Compression Labs firmie Forgent, zanim Chen zaczął pracować dla Cisco . Doprowadziło to do tego, że Forgent nabył prawo własności do patentu. Ogłoszenie Forgenta z 2002 roku wywołało furię przypominającą próby Unisys dochodzenia swoich praw do standardu kompresji obrazów GIF.

Komitet JPEG zbadał roszczenia patentowe w 2002 roku i był zdania, że ​​zostały one unieważnione przez stan techniki , co podzielali różni eksperci. Patent opisuje algorytm kompresji obrazu oparty na dyskretnej transformacji kosinusowej (DCT), technice stratnej kompresji obrazu, która wywodzi się z artykułu Nasira Ahmeda, T. Natarajana i KR Rao z 1974 roku . Wen-Hsiung Chen dalej rozwinął swoją technikę DCT, opisując szybki algorytm DCT w artykule z 1977 r. z CH Smith i SC Fralick. Specyfikacja JPEG z 1992 r. przytacza zarówno artykuły Ahmeda z 1974 r., jak i Chen z 1977 r. dla algorytmu DCT, a także artykuł Chena i WK Pratta z 1984 r. dla algorytmu kwantyzacji . Compression Labs zostało założone przez Chen i było pierwszą firmą, która skomercjalizowała technologię DCT. Zanim Chen złożył w 1986 roku w firmie Klenke swój patent na algorytm kompresji obrazu oparty na DCT, większość tego, co później stało się standardem JPEG, zostało już sformułowane w wcześniejszej literaturze. Przedstawiciel JPEG, Richard Clark, również twierdził, że sam Chen zasiadał w jednym z komitetów JPEG, ale Forgent zaprzeczył temu twierdzeniu.

W latach 2002-2004 Forgent był w stanie uzyskać około 105 milionów dolarów, udzielając licencji na swój patent około 30 firmom. W kwietniu 2004 roku Forgent pozwał 31 innych firm w celu wyegzekwowania dalszych opłat licencyjnych. W lipcu tego samego roku konsorcjum 21 dużych firm komputerowych złożyło pozew o unieważnienie patentu. Ponadto Microsoft wytoczył osobny pozew przeciwko firmie Forgent w kwietniu 2005 r. W lutym 2006 r. Urząd Patentów i Znaków Towarowych Stanów Zjednoczonych zgodził się ponownie zbadać patent JPEG firmy Forgent na wniosek Public Patent Foundation . 26 maja 2006 r. USPTO uznało patent za nieważny na podstawie stanu techniki. USPTO stwierdziło również, że Forgent znał stan techniki, ale celowo unikał poinformowania Urzędu Patentowego. To sprawia, że ​​wszelkie apele o przywrócenie patentu są bardzo mało prawdopodobne.

Forgent posiada również podobny patent przyznany przez Europejski Urząd Patentowy w 1994 r., choć nie jest jasne, na ile jest on wykonalny.

W dniu 27 października 2006 roku wydaje się, że wygasł 20-letni okres obowiązywania patentu amerykańskiego, aw listopadzie 2006 roku Forgent zgodził się zrezygnować z egzekwowania roszczeń patentowych przeciwko stosowaniu standardu JPEG.

Jednym z wyraźnych celów komitetu JPEG jest to, aby ich standardy (w szczególności ich metody bazowe) można było wdrożyć bez opłat licencyjnych, i zapewnili odpowiednie prawa licencyjne dla swojego standardu JPEG 2000 od ponad 20 dużych organizacji.

Począwszy od sierpnia 2007 r. inna firma, Global Patent Holdings, LLC, twierdziła, że ​​jej patent (patent USA 5,253,341 ) wydany w 1993 r. jest naruszany przez pobieranie obrazów JPEG ze strony internetowej lub za pośrednictwem poczty e-mail. Jeśli nie zostanie unieważniony, patent ten może dotyczyć dowolnej witryny internetowej wyświetlającej obrazy JPEG. Patent był ponownie rozpatrywany przez Urząd Patentów i Znaków Towarowych USA od 2000 do 2007 roku; w lipcu 2007 r. Urząd Patentowy unieważnił wszystkie pierwotne zastrzeżenia patentu, ale stwierdził, że dodatkowe zastrzeżenie zaproponowane przez Global Patent Holdings (zastrzeżenie 17) jest ważne. Global Patent Holdings następnie złożyła szereg pozwów w oparciu o roszczenie 17 swojego patentu.

W pierwszych dwóch procesach sądowych po ponownym rozpatrzeniu sprawy, oba wniesione w Chicago, Illinois, Global Patent Holdings pozwał Green Bay Packers , CDW , Motorolę , Apple , Orbitz , Officemax , Caterpillar , Kraft i Peapod jako pozwanych. Trzeci Pozew został złożony w dniu 5 grudnia 2007 roku w Południowej Florydzie przeciwko ADT Security Services , AutoNation , Florida Crystals Corp., HearUSA, MovieTickets.com , Ocwen Financial Corp. i opon Brytanii i czwartego pozwu w dniu 8 stycznia 2008 roku, w południowej Florydzie przeciwko Boca Raton Resort & Club . Piąty pozew został złożony przeciwko Global Patent Holdings w Nevadzie. Pozew ten został złożony przez Zappos.com , Inc., któremu rzekomo groziło Global Patent Holdings, i domagało się orzeczenia sądowego, że patent „341 jest nieważny i nie został naruszony.

Global Patent Holdings wykorzystał również patent '341 do pozwania lub grożenia otwartym krytykom szerokich patentów na oprogramowanie, w tym Gregory'emu Aharonianowi i anonimowemu operatorowi bloga internetowego znanego jako " Patent Troll Tracker ". 21 grudnia 2007 r. prawnik patentowy Vernon Francissen z Chicago zwrócił się do Urzędu Patentów i Znaków Towarowych Stanów Zjednoczonych o ponowne zbadanie jedynego pozostałego roszczenia patentu '341 na podstawie nowego stanu techniki.

W dniu 5 marca 2008 r. Urząd Patentów i Znaków Towarowych Stanów Zjednoczonych zgodził się ponownie zbadać patent '341, stwierdzając, że nowy stan techniki podniósł nowe istotne pytania dotyczące ważności patentu. W świetle ponownego rozpatrzenia sprawy oskarżeni w czterech z pięciu toczących się spraw sądowych złożyli wnioski o zawieszenie (wstrzymanie) swoich spraw do czasu zakończenia przeglądu patentu '341 przez Urząd Patentów i Znaków Towarowych Stanów Zjednoczonych. 23 kwietnia 2008 r. sędzia, który przewodniczył dwóm procesom w Chicago, Illinois uwzględnił wnioski w tych sprawach. W dniu 22 lipca 2008 r. Urząd Patentowy wydał pierwszą „Powództwo z urzędu” drugiego ponownego rozpatrzenia, uznając roszczenie za nieważne na dziewiętnastu odrębnych podstawach. W dniu 24 listopada 2009 r. wydano zaświadczenie o ponownym zbadaniu, które anulowało wszystkie roszczenia.

Począwszy od 2011 r. i kontynuując od początku 2013 r., podmiot znany jako Princeton Digital Image Corporation z siedzibą we wschodnim Teksasie zaczął pozywać wiele firm za domniemane naruszenie patentu USA 4 813 056 . Princeton twierdzi, że standard kompresji obrazu JPEG narusza patent '056 i pozwał wiele stron internetowych, sprzedawców detalicznych, producentów aparatów i urządzeń oraz sprzedawców. Patent był pierwotnie własnością i był przypisany do General Electric. Patent wygasł w grudniu 2007 r., ale Princeton pozwał wiele firm za „przeszłe naruszenia” tego patentu. (Zgodnie z amerykańskim prawem patentowym właściciel patentu może pozwać za „przeszłe naruszenie” do sześciu lat przed złożeniem pozwu, więc Princeton teoretycznie może pozywać firmy do grudnia 2013 r.) Od marca 2013 r. w Princeton toczyło się postępowanie sądowe. New York i Delaware przeciwko ponad 55 firmom. Zaangażowanie General Electric w proces nie jest znane, chociaż akta sądowe wskazują, że w 2009 roku przyznał patent Princeton i zachowuje pewne prawa do patentu.

Typowe zastosowanie

Algorytm kompresji JPEG działa najlepiej na zdjęciach i obrazach z płynnymi zmianami tonów i kolorów. Najlepiej nadaje się do obrazów kolorowych iw skali szarości, ale nie do obrazów binarnych . W przypadku korzystania z Internetu, gdzie zmniejszenie ilości danych wykorzystywanych do obrazu jest ważne dla responsywnej prezentacji, zalety kompresji JPEG sprawiają, że JPEG jest popularny. JPEG/Exif jest również najpopularniejszym formatem zapisywanym przez aparaty cyfrowe.

Jednak JPEG nie jest dobrze dostosowany do rysunków liniowych i innych tekstowych lub ikonicznych grafik, gdzie ostre kontrasty między sąsiednimi pikselami mogą powodować zauważalne artefakty. Takie obrazy są lepiej zapisywane w bezstratnym formacie graficznym, takim jak TIFF , GIF lub PNG , i chociaż standard JPEG obejmuje tryb kodowania bezstratnego, tryb ten nie jest obsługiwany w wielu produktach ze względu na niższość schematu kompresji w porównaniu z innymi bezstratnymi formaty. W tym celu ISO opracowało własny format plików o nazwie JPEG-LS .

Ponieważ JPEG jest stratną metodą kompresji, która zmniejsza wierność obrazu, nie nadaje się do dokładnego odtwarzania danych obrazowania (takich jak niektóre aplikacje do obrazowania naukowego i medycznego oraz niektóre prace związane z przetwarzaniem obrazu technicznego ). Pliki JPEG również nie nadają się do wielokrotnej edycji, ponieważ część jakości obrazu jest tracona za każdym razem, gdy obraz jest ponownie skompresowany – szczegóły można znaleźć w sekcji utrata generacji cyfrowej . Aby zapobiec utracie informacji o obrazie podczas edycji sekwencyjnej i powtarzalnej, pierwszą edycję można zapisać w formacie bezstratnym, następnie edytować w tym formacie, a następnie opublikować jako JPEG do dystrybucji.

Kompresja JPEG

JPEG wykorzystuje stratną formę kompresji opartą na dyskretnej transformacji kosinusowej (DCT). Ta matematyczna operacja przekształca każdą ramkę/pole źródła wideo z domeny przestrzennej (2D) na domenę częstotliwości (inaczej domenę transformacji). Model percepcyjny oparty luźno na ludzkim systemie psychowizualnym odrzuca informacje o wysokiej częstotliwości, tj. ostre przejścia w intensywności i odcieniu koloru . W dziedzinie transformacji proces redukcji informacji nazywa się kwantyzacją. Mówiąc prościej, kwantyzacja jest metodą optymalnego zmniejszania dużej skali liczbowej (z różnymi wystąpieniami każdej liczby) do mniejszej, a domena przekształcenia jest wygodną reprezentacją obrazu, ponieważ współczynniki wysokiej częstotliwości, które przyczyniają się mniej do ogólnego obrazu niż inne współczynniki, są charakterystycznie małymi wartościami o wysokiej ściśliwości. Skwantowane współczynniki są następnie sekwencjonowane i bezstratnie pakowane w wyjściowy strumień bitów . Prawie wszystkie implementacje oprogramowania JPEG umożliwiają użytkownikowi kontrolę nad współczynnikiem kompresji (a także innymi opcjonalnymi parametrami), pozwalając użytkownikowi na kompromis między jakością obrazu a mniejszym rozmiarem pliku. W aplikacjach wbudowanych (takich jak miniDV, który wykorzystuje podobny schemat kompresji DCT), parametry są wstępnie wybierane i ustalane dla aplikacji.

Metoda kompresji jest zwykle stratna, co oznacza, że ​​niektóre oryginalne informacje o obrazie zostają utracone i nie można ich przywrócić, co może mieć wpływ na jakość obrazu. Istnieje opcjonalny tryb bezstratny zdefiniowany w standardzie JPEG. Jednak ten tryb nie jest powszechnie obsługiwany w produktach.

Istnieje również progresywny format JPEG z przeplotem , w którym dane są kompresowane w wielu przejściach z coraz większą szczegółowością. Jest to idealne rozwiązanie w przypadku dużych obrazów, które będą wyświetlane podczas pobierania przez wolne połączenie, umożliwiając rozsądny podgląd po otrzymaniu tylko części danych. Jednak obsługa progresywnych plików JPEG nie jest uniwersalna. Kiedy progresywne JPEG są odbierane przez programy, które ich nie obsługują (takich jak wersjach Internet Explorer przed Windows 7 ) wyświetlaczach oprogramowania obrazie dopiero po całkowitym pobraniu.

Edycja bezstratna

Szereg zmian w obrazie JPEG można wykonać bezstratnie (to znaczy bez rekompresji i związanej z tym utraty jakości), o ile rozmiar obrazu jest wielokrotnością 1 bloku MCU (minimalnej jednostki kodowanej) (zwykle 16 pikseli w obu kierunkach, dla podpróbkowania kolorów 4:2:0 ). Narzędzia, które to realizują, obejmują:

  • jpegtran i jego graficzny interfejs użytkownika, Jpegcrop.
  • IrfanView przy użyciu "JPG Lossless Crop (PlugIn)" i "JPG Lossless Rotation (PlugIn)", które wymagają zainstalowania wtyczki JPG_TRANSFORM.
  • Przeglądarka obrazów FastStone korzystająca z funkcji „Lossless Crop to File” i „JPEG Lossless Rotate”.
  • XnViewMP przy użyciu "bezstratnych transformacji JPEG".
  • ACDSee obsługuje bezstratne obracanie (ale nie bezstratne przycinanie) dzięki opcji „Wymuś bezstratne operacje JPEG”.

Bloki można obracać co 90 stopni, odwracać w osi poziomej, pionowej i ukośnej oraz przesuwać na obrazie. Nie wszystkie bloki z oryginalnego obrazu muszą być użyte w zmodyfikowanym.

Górna i lewa krawędź obrazu JPEG muszą leżeć na granicy bloku 8 × 8 pikseli, ale dolna i prawa krawędź nie muszą tego robić. Ogranicza to możliwe bezstratne operacje przycinania , a także zapobiega odwracaniu i obracaniu obrazu, którego dolna lub prawa krawędź nie leży na granicy bloku dla wszystkich kanałów (ponieważ krawędź kończyłaby się na górze lub na lewo, gdzie – jak wspomniano – granica bloku jest obowiązkowa).

Obroty, w których szerokość i wysokość obrazu nie są wielokrotnością 8 lub 16 (w zależności od podpróbkowania chrominancji), nie są bezstratne. Obracanie takiego obrazu powoduje przeliczenie bloków, co skutkuje utratą jakości.

W przypadku korzystania z bezstratnego przycinania, jeśli dolna lub prawa strona obszaru przycinania nie znajduje się na granicy bloku, pozostałe dane z częściowo wykorzystanych bloków będą nadal znajdować się w przyciętym pliku i można je odzyskać. Możliwa jest również transformacja między formatem bazowym a progresywnym bez utraty jakości, ponieważ jedyną różnicą jest kolejność umieszczania współczynników w pliku.

Co więcej, kilka obrazów JPEG można bezstratnie połączyć, o ile zostały zapisane z tą samą jakością, a krawędzie pokrywają się z granicami bloków.

Pliki JPEG

Format znany jako „JPEG Interchange Format” (JIF) jest określony w załączniku B normy. Jednak ten „czysty” format plików jest rzadko używany, przede wszystkim z powodu trudności w programowaniu koderów i dekoderów, które w pełni realizują wszystkie aspekty standardu oraz z powodu pewnych niedociągnięć standardu:

  • Definicja przestrzeni kolorów
  • Rejestracja podpróbkowania składników
  • Definicja proporcji pikseli .

W celu rozwiązania tych problemów opracowano kilka dodatkowych standardów. Pierwszym z nich, wydanym w 1992 roku, był format JPEG File Interchange Format (lub JFIF), a następnie w ostatnich latach format plików obrazów Exchangeable (Exif) i profile kolorów ICC . Oba te formaty wykorzystują rzeczywisty układ bajtów JIF, składający się z różnych znaczników , ale dodatkowo wykorzystują jeden z punktów rozszerzeń standardu JIF, a mianowicie znaczniki aplikacji : JFIF używa APP0, a Exif używa APP1. W obrębie tych segmentów pliku, które zostały pozostawione do wykorzystania w przyszłości w standardzie JIF i nie są przez niego odczytywane, standardy te dodają określone metadane.

Zatem pod pewnymi względami JFIF jest okrojoną wersją standardu JIF, ponieważ określa pewne ograniczenia (takie jak nie zezwalanie na wszystkie różne tryby kodowania), podczas gdy pod innymi względami jest rozszerzeniem JIF ze względu na dodanie metadane. Dokumentacja oryginalnego standardu JFIF stwierdza:

JPEG File Interchange Format to minimalny format pliku, który umożliwia wymianę strumieni bitów JPEG między różnymi platformami i aplikacjami. Ten minimalny format nie obejmuje żadnych zaawansowanych funkcji znajdujących się w specyfikacji TIFF JPEG ani żadnego formatu pliku specyficznego dla aplikacji. Nie powinno, ponieważ jedynym celem tego uproszczonego formatu jest umożliwienie wymiany skompresowanych obrazów JPEG.

Pliki obrazów, które wykorzystują kompresję JPEG, są powszechnie nazywane „plikami JPEG” i są przechowywane w wariantach formatu obrazu JIF. Większość urządzeń do przechwytywania obrazów (takich jak aparaty cyfrowe), które wyprowadzają pliki JPEG, w rzeczywistości tworzy pliki w formacie Exif, który jest standardem stosowanym przez branżę aparatów do wymiany metadanych. Z drugiej strony, ponieważ standard Exif nie zezwala na profile kolorów, większość programów do edycji obrazów przechowuje JPEG w formacie JFIF, a także zawiera segment APP1 z pliku Exif, aby uwzględnić metadane w sposób prawie zgodny; standard JFIF jest interpretowany dość elastycznie.

Ściśle mówiąc, standardy JFIF i Exif są niekompatybilne, ponieważ każdy określa, że ​​jego segment znacznika (odpowiednio APP0 lub APP1) pojawia się jako pierwszy. W praktyce większość plików JPEG zawiera segment znacznika JFIF, który poprzedza nagłówek Exif. Pozwala to starszym czytelnikom poprawnie obsługiwać segment JFIF w starszym formacie, podczas gdy nowsi czytelnicy również dekodują kolejny segment Exif, mniej rygorystycznie wymagając, aby pojawił się jako pierwszy.

Rozszerzenia nazw plików JPEG

Najpopularniejszymi rozszerzeniami nazw plików z kompresją JPEG są .jpgi .jpeg, chociaż .jpe, .jfifi .jifsą również używane. Możliwe jest również osadzanie danych JPEG w plikach innych typów – pliki zakodowane w formacie TIFF często osadzają obraz JPEG jako miniaturę obrazu głównego; a pliki MP3 mogą zawierać okładkę JPEG w tagu ID3v2 .

Profil kolorów

Wiele plików JPEG zawiera profil kolorów ICC ( przestrzeń kolorów ). Powszechnie używane profile kolorów obejmują sRGB i Adobe RGB . Ponieważ te przestrzenie kolorów wykorzystują transformację nieliniową, zakres dynamiczny 8-bitowego pliku JPEG wynosi około 11 stopni ; patrz krzywa gamma .

Składnia i struktura

Obraz JPEG składa się z sekwencji segmentów , z których każdy zaczyna się od znacznika , z których każdy zaczyna się od bajtu 0xFF, po którym następuje bajt wskazujący rodzaj znacznika. Niektóre znaczniki składają się tylko z tych dwóch bajtów; po innych następują dwa bajty (wysoki, a potem niski), wskazujący długość danych ładunku specyficznych dla znacznika, które następują. (Długość obejmuje dwa bajty dla długości, ale nie dwa bajty dla znacznika.) Po niektórych znacznikach następują dane zakodowane entropijnie ; długość takiego markera nie obejmuje danych zakodowanych entropijnie. Zauważ, że kolejne bajty 0xFF są używane jako bajty wypełniające dla celów wypełniania , chociaż to wypełnianie bajtów powinno zawsze mieć miejsce tylko dla znaczników bezpośrednio po danych skanowania zakodowanych entropijnie (szczegóły w sekcji B1.1.2 i E.1.2 specyfikacji JPEG; w szczególności „We wszystkich przypadkach, w których znaczniki są dołączane po skompresowanych danych, opcjonalne bajty wypełnienia 0xFF mogą poprzedzać znacznik”).

W danych zakodowanych entropijnie, po dowolnym bajcie 0xFF, bajt 0x00 jest wstawiany przez koder przed następnym bajtem, tak że nie ma znacznika, w którym żaden nie jest zamierzony, co zapobiega błędom ramek. Dekodery muszą pominąć ten bajt 0x00. Ta technika, zwana wypychaniem bajtów (patrz specyfikacja JPEG, sekcja F.1.2.3) jest stosowana tylko do danych zakodowanych entropijnie, a nie do danych ładunku znacznika. Zauważ jednak, że dane zakodowane entropijnie mają kilka własnych znaczników; w szczególności znaczniki resetowania (0xD0 do 0xD7), które są używane do izolowania niezależnych fragmentów danych zakodowanych entropijnie, aby umożliwić równoległe dekodowanie, a kodery mogą swobodnie wstawiać te znaczniki resetowania w regularnych odstępach czasu (chociaż nie wszystkie kodery to robią).

Popularne znaczniki JPEG
Krótkie imię Bajty Ładunek Nazwa Uwagi
WIĘC JA 0xFF, 0xD8 Żaden Początek obrazu
SOF0 0xFF, 0xC0 zmienny rozmiar Początek ramki (bazowy DCT) Wskazuje, że jest to podstawowy plik JPEG oparty na DCT i określa szerokość, wysokość, liczbę komponentów i podpróbkowanie komponentów (np. 4:2:0).
SOF2 0xFF, 0xC2 zmienny rozmiar Początek ramki (progresywny DCT) Wskazuje, że jest to progresywny JPEG oparty na DCT i określa szerokość, wysokość, liczbę komponentów i podpróbkowanie komponentów (np. 4:2:0).
DHT 0xFF, 0xC4 zmienny rozmiar Zdefiniuj tabele Huffmana Określa jedną lub więcej tabel Huffmana.
DQT 0xFF, 0xDB zmienny rozmiar Zdefiniuj tabele kwantyzacji Określa jedną lub więcej tabel kwantyzacji.
DRI 0xFF, 0xDD 4 bajty Zdefiniuj interwał restartu Określa odstęp między znacznikami RST n , w minimalnych jednostkach zakodowanych (MCU). Po tym znaczniku następują dwa bajty wskazujące stały rozmiar, dzięki czemu można go traktować jak każdy inny segment o zmiennej wielkości.
SOS 0xFF, 0xDA zmienny rozmiar Rozpoczęcie skanowania Rozpoczyna skanowanie obrazu od góry do dołu. W bazowych obrazach DCT JPEG zazwyczaj występuje jeden skan. Progresywne obrazy DCT JPEG zwykle zawierają wiele skanów. Ten znacznik określa, który wycinek danych będzie zawierał, i bezpośrednio po nim następuje dane zakodowane entropijnie.
RST n 0xFF, 0xD n ( n = 0..7) Żaden Uruchom ponownie Wstawiono co r makrobloków, gdzie r jest interwałem restartu ustawionym przez znacznik DRI. Nie używane, jeśli nie było znacznika DRI. Dolne trzy bity cyklu kodu znacznika o wartości od 0 do 7.
APLIKACJA n 0xFF, 0xE n zmienny rozmiar Specyficzne dla aplikacji Na przykład plik Exif JPEG używa znacznika APP1 do przechowywania metadanych, ułożonych w strukturę opartą na TIFF .
COM 0xFF, 0xFE zmienny rozmiar Komentarz Zawiera komentarz tekstowy.
EOI 0xFF, 0xD9 Żaden Koniec obrazu

Istnieją inne znaczniki początku klatki , które wprowadzają inne rodzaje kodowania JPEG.

Ponieważ kilku dostawców może używać tego samego typu markera APP n , markery specyficzne dla aplikacji często zaczynają się od normy lub nazwy dostawcy (np. „Exif” lub „Adobe”) lub innego ciągu identyfikującego.

Przy znaczniku restartu zmienne predykcyjne między blokami są resetowane, a strumień bitów jest synchronizowany z granicą bajtów. Znaczniki ponownego uruchomienia zapewniają środki do odzyskania po błędzie strumienia bitów, takim jak transmisja przez zawodną sieć lub uszkodzenie pliku. Ponieważ przebiegi makrobloków między znacznikami restartu mogą być dekodowane niezależnie, przebiegi te mogą być dekodowane równolegle.

Przykład kodeka JPEG

Chociaż plik JPEG można zakodować na różne sposoby, najczęściej odbywa się to za pomocą kodowania JFIF. Proces kodowania składa się z kilku kroków:

  1. Reprezentacja kolorów obrazu przekształca się Y'C B, C, R , składający się z jednego luma składnik (Y "), reprezentujący jasności i dwa chrominancji składników, (C, B i C, R ), co stanowi kolor. Ten krok jest czasami pomijany.
  2. Rozdzielczość danych chrominancji jest zmniejszona, zwykle o współczynnik 2 lub 3. Odzwierciedla to fakt, że oko jest mniej wrażliwe na drobne szczegóły koloru niż na drobne szczegóły jasności.
  3. Obraz jest podzielony na bloki 8×8 pikseli, a dla każdego bloku dane Y, CB i CR podlegają dyskretnej transformacji kosinusowej (DCT). DCT jest podobny do transformaty Fouriera w tym sensie, że wytwarza pewnego rodzaju przestrzenne widmo częstotliwości.
  4. Amplitudy składowych częstotliwości są kwantowane. Wzrok ludzki jest znacznie bardziej wrażliwy na małe zmiany koloru lub jasności na dużych obszarach niż na siłę zmian jasności o wysokiej częstotliwości. Dlatego moduły składowych o wysokiej częstotliwości są przechowywane z mniejszą dokładnością niż składowe o niskiej częstotliwości. Ustawienie jakości kodera (na przykład 50 lub 95 w skali od 0 do 100 w bibliotece Independent JPEG Group) wpływa na stopień zmniejszenia rozdzielczości każdego składnika częstotliwości. Jeśli używane jest ustawienie zbyt niskiej jakości, komponenty o wysokiej częstotliwości są całkowicie odrzucane.
  5. Otrzymane dane dla wszystkich bloków 8×8 są dodatkowo kompresowane za pomocą bezstratnego algorytmu, wariantu kodowania Huffmana .

Proces dekodowania odwraca te kroki, z wyjątkiem kwantyzacji, ponieważ jest nieodwracalna. W pozostałej części tej sekcji bardziej szczegółowo opisano procesy kodowania i dekodowania.

Kodowanie

Wiele opcji standardu JPEG nie jest powszechnie używanych i jak wspomniano powyżej, większość programów graficznych używa prostszego formatu JFIF podczas tworzenia pliku JPEG, który między innymi określa metodę kodowania. Oto krótki opis jednej z bardziej powszechnych metod kodowania po zastosowaniu do wejścia, które ma 24 bity na piksel (po osiem z czerwonego, zielonego i niebieskiego). Ta konkretna opcja to stratna metoda kompresji danych .

Transformacja przestrzeni kolorów

Najpierw obraz powinien zostać przekonwertowany z RGB na inną przestrzeń kolorów o nazwie Y′C B C R (lub nieformalnie YCbCr). Składa się z trzech części Y „C B i C. R : w Y” reprezentuje komponent jasność piksela i C B i C R elementy reprezentujące chrominancji (rozdzielone na składniki niebieskie i czerwone). Jest to zasadniczo ta sama przestrzeń kolorów, jaka jest używana przez cyfrową telewizję kolorową, a także cyfrowe wideo, w tym wideo DVD , i jest podobna do sposobu, w jaki kolor jest reprezentowany w analogowym wideo PAL i MAC (ale nie przez analogowy NTSC , który wykorzystuje przestrzeń kolorów YIQ ). Y'C B C R przestrzeń konwersję koloru pozwala na większą kompresję, bez znacznego wpływu na odczuwalnej jakości obrazu (lub większej odczuwalnej jakości obrazu w tym samym kompresji). Kompresja jest bardziej wydajna, ponieważ informacja o jasności, która jest ważniejsza dla ostatecznej percepcyjnej jakości obrazu, jest ograniczona do jednego kanału. To ściślej odpowiada percepcji koloru w ludzkim układzie wzrokowym. Transformacja kolorów poprawia również kompresję poprzez statystyczną dekorelację .

Szczególnie konwersja do Y'C B, C, R jest określony w normie JFIF i powinna być wykonana otrzymanego JPEG mieć maksymalną zgodność. Jednak niektóre implementacje JPEG w trybie „najwyższej jakości” nie stosują tego kroku i zamiast tego przechowują informacje o kolorze w modelu kolorów RGB, w którym obraz jest przechowywany w oddzielnych kanałach dla składowych jasności czerwonej, zielonej i niebieskiej. Powoduje to mniej wydajną kompresję i prawdopodobnie nie będzie używane, gdy rozmiar pliku jest szczególnie ważny.

Próbkowanie w dół

Ze względu na gęstość receptorów wrażliwych na kolor i jasność w ludzkim oku, ludzie widzą znacznie więcej szczegółów w jasności obrazu (składnik Y') niż w odcieniu i nasyceniu kolorów obrazu (Cb i składniki Cr). Korzystając z tej wiedzy, można zaprojektować kodery, aby skuteczniej kompresować obrazy.

Przekształcenie w Y'C B C R kolorowy model umożliwia następny etap, który zwykle jest zmniejszenie rozdzielczości przestrzennej składników Cb i Cr (nazywany „ downsampling z ” lub „barwy Podpróbkowanie”). Proporcje, w jakich zwykle odbywa się próbkowanie w dół dla obrazów JPEG, to 4:4:4 (brak próbkowania w dół), 4:2:2 (redukcja o współczynnik 2 w kierunku poziomym) lub (najczęściej) 4:2: 0 (redukcja o współczynnik 2 zarówno w kierunku poziomym, jak i pionowym). W pozostałej części procesu kompresji Y', Cb i Cr są przetwarzane oddzielnie iw bardzo podobny sposób.

Podział bloków

Po podpróbkowaniu każdy kanał musi zostać podzielony na bloki 8×8. W zależności od podpróbkowania chrominancji daje to bloki Minimum Coded Unit (MCU) o rozmiarze 8×8 (4:4:4 – bez podpróbkowania), 16×8 (4:2:2) lub najczęściej 16×16 (4: 2:0). W kompresji wideo MCU nazywane są makroblokami .

Jeśli dane dla kanału nie reprezentują całkowitej liczby bloków, koder musi wypełnić pozostały obszar niekompletnych bloków jakąś formą danych fikcyjnych. Wypełnianie krawędzi stałym kolorem (na przykład czarnym) może powodować artefakty dzwonienia wzdłuż widocznej części granicy; powtarzanie pikseli krawędzi jest powszechną techniką, która redukuje (ale niekoniecznie eliminuje) takie artefakty, można też zastosować bardziej wyrafinowane techniki wypełniania krawędzi.

Dyskretna transformata cosinus

Podobraz 8×8 ​​pokazany w 8-bitowej skali szarości

Następnie każdy blok 8x8 każdego składnika (Y, Cb, Cr) jest konwertowany na reprezentację w dziedzinie częstotliwości , przy użyciu znormalizowanej, dwuwymiarowej dyskretnej transformacji kosinusowej typu II (DCT), patrz cytat 1 w dyskretnej transformacji kosinusowej . DCT jest czasami określany jako „DCT typu II” w kontekście rodziny transformacji, jak w dyskretnej transformacji kosinusowej , a odpowiedni odwrotność (IDCT) jest oznaczana jako „DCT typu III”.

Na przykład jeden taki podobraz 8×8 ​​8-bitowy może mieć postać:

Przed obliczeniem DCT bloku 8×8, jego wartości są przesuwane z zakresu dodatniego na wyśrodkowany na zero. W przypadku obrazu 8-bitowego każdy wpis w oryginalnym bloku mieści się w zakresie . Środek zakresu (w tym przypadku wartość 128) jest odejmowany od każdego wpisu, aby uzyskać zakres danych wyśrodkowany na zero, tak że zmodyfikowany zakres to . Ten krok zmniejsza wymagania dotyczące zakresu dynamicznego na kolejnym etapie przetwarzania DCT.

Ten krok daje następujące wartości:

DCT przekształca blok 8x8 wartości wejściowych na liniową kombinację tych 64 wzorów. Wzorce są określane jako dwuwymiarowe funkcje podstawowe DCT , a wartości wyjściowe są określane jako współczynniki transformacji . Indeks poziomy to , a indeks pionowy to .

Następnym krokiem jest wzięcie dwuwymiarowego DCT, który jest podany przez:

gdzie

  • jest poziomą częstotliwością przestrzenną , dla liczb całkowitych .
  • jest pionową częstotliwością przestrzenną dla liczb całkowitych .
  • jest normalizującym współczynnikiem skali, aby transformacja była ortonormalna
  • to wartość piksela we współrzędnych
  • jest współczynnikiem DCT we współrzędnych

Jeśli wykonamy to przekształcenie na naszej powyższej macierzy, otrzymamy (w zaokrągleniu do najbliższych dwóch cyfr poza przecinkiem):

Zwróć uwagę na wpis w lewym górnym rogu o dość dużej wielkości. Jest to współczynnik DC (zwany także składową stałą), który określa podstawowy odcień całego bloku. Pozostałe 63 współczynniki to współczynniki AC (zwane również składowymi przemiennymi). Zaletą DCT jest jego tendencja do agregowania większości sygnału w jednym rogu wyniku, jak widać powyżej. Kolejny etap kwantyzacji uwydatnia ten efekt, jednocześnie zmniejszając całkowity rozmiar współczynników DCT, co skutkuje sygnałem, który można łatwo i efektywnie skompresować na etapie entropii.

DCT tymczasowo zwiększa głębię bitową danych, ponieważ współczynniki DCT 8-bitowego/komponentowego obrazu zajmują do 11 lub więcej bitów (w zależności od wierności obliczeń DCT). Może to zmusić kodek do tymczasowego używania 16-bitowych liczb do przechowywania tych współczynników, podwajając w tym momencie rozmiar reprezentacji obrazu; wartości te są zazwyczaj redukowane z powrotem do wartości 8-bitowych w kroku kwantyzacji. Tymczasowe zwiększenie rozmiaru na tym etapie nie jest problemem w przypadku większości implementacji JPEG, ponieważ zazwyczaj tylko bardzo mała część obrazu jest przechowywana w pełnej postaci DCT w dowolnym momencie podczas procesu kodowania lub dekodowania obrazu.

Kwantyzacja

Ludzkie oko jest dobre w dostrzeganiu niewielkich różnic jasności na stosunkowo dużym obszarze, ale nie jest tak dobre w rozróżnianiu dokładnej siły zmienności jasności o wysokiej częstotliwości. Pozwala to na znaczne zmniejszenie ilości informacji w składowych wysokoczęstotliwościowych. Odbywa się to po prostu dzieląc każdy składnik w domenie częstotliwości przez stałą dla tego składnika, a następnie zaokrąglając do najbliższej liczby całkowitej. Ta operacja zaokrąglania jest jedyną stratną operacją w całym procesie (inną niż podpróbkowanie chrominancji), jeśli obliczenia DCT są wykonywane z wystarczająco dużą precyzją. W wyniku tego zazwyczaj jest tak, że wiele składowych o wyższej częstotliwości jest zaokrąglanych do zera, a wiele pozostałych staje się małymi liczbami dodatnimi lub ujemnymi, których reprezentacja zajmuje znacznie mniej bitów.

Elementy macierzy kwantyzacji kontrolują stopień kompresji, przy czym większe wartości powodują większą kompresję. Typowa macierz kwantyzacji (dla jakości 50% określonej w oryginalnym standardzie JPEG) jest następująca:

Kwantowane współczynniki DCT są obliczane za pomocą

gdzie są nieskwantowane współczynniki DCT; jest powyższą macierzą kwantyzacji; i jest skwantowanymi współczynnikami DCT.

Użycie tej macierzy kwantyzacji z powyższą macierzą współczynników DCT daje w wyniku:

Po lewej: ostateczny obraz składa się z szeregu podstawowych funkcji. Po prawej: każda z funkcji bazowych DCT, z której składa się obraz, oraz odpowiadający jej współczynnik ważenia. Środek: funkcja bazowa, po pomnożeniu przez współczynnik: ten składnik jest dodawany do końcowego obrazu. Dla jasności makroblok 8×8 w tym przykładzie jest powiększony 10x przy użyciu interpolacji dwuliniowej.

Na przykład, używając -415 (współczynnik DC) i zaokrąglając do najbliższej liczby całkowitej

Zauważ, że większość elementów podbloku o wyższych częstotliwościach (tj. te z częstotliwością przestrzenną x lub y większą niż 4) jest skwantowanych do wartości zerowych.

Kodowanie entropijne

Zygzakowe porządkowanie komponentów obrazu JPEG

Kodowanie entropijne to specjalna forma bezstratnej kompresji danych . Polega ona na ułożeniu komponentów obrazu w porządku „ zygzakowatym ” przy użyciu algorytmu kodowania długości serii (RLE), który grupuje razem podobne częstotliwości, wstawia zera kodujące długość, a następnie używa kodowania Huffmana na tym, co pozostało.

Standard JPEG umożliwia również, ale nie wymaga, dekoderów do obsługi kodowania arytmetycznego, które jest matematycznie lepsze od kodowania Huffmana. Jednak ta funkcja była rzadko używana, ponieważ była historycznie objęta patentami wymagającymi licencji licencyjnych, a także dlatego, że kodowanie i dekodowanie jest wolniejsze w porównaniu z kodowaniem Huffmana. Kodowanie arytmetyczne zwykle zmniejsza pliki o około 5–7%.

Poprzedni skwantowany współczynnik DC jest używany do przewidywania bieżącego skwantowanego współczynnika DC. Różnica między nimi jest zakodowana, a nie rzeczywista wartość. Kodowanie 63 skwantowanych współczynników AC nie wykorzystuje takiego różnicowania predykcji.

Sekwencja zygzakowa dla powyższych skwantowanych współczynników jest pokazana poniżej. (Pokazany format ma na celu ułatwienie zrozumienia/przeglądania.)

−26
-3 0
-3 -2 -6
2 -4 1 -3
1 1 5 1 2
-1 1 -1 2 0 0
0 0 0 -1 -1 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0
0 0 0 0
0 0 0
0 0
0

Jeśli i- ty blok jest reprezentowany przez , a pozycje w każdym bloku są reprezentowane przez , gdzie i , wówczas dowolny współczynnik w obrazie DCT może być reprezentowany jako . Tak więc w powyższym schemacie, kolejność kodowania pikseli (na ı -tego bloku) są , , , , , , , i tak dalej.

Podstawowe procesy sekwencyjnego kodowania i dekodowania JPEG

Ten tryb kodowania nazywany jest sekwencyjnym kodowaniem linii bazowej . Baseline JPEG obsługuje również kodowanie progresywne . Podczas gdy kodowanie sekwencyjne koduje współczynniki pojedynczego bloku na raz (w sposób zygzakowaty), kodowanie progresywne koduje podobnie rozmieszczoną partię współczynników wszystkich bloków za jednym razem (tzw. scan ), a następnie następną partię współczynników wszystkich bloków , i tak dalej. Na przykład, jeśli obraz jest podzielony na N 8×8 bloków , wtedy 3-skanowe kodowanie progresywne koduje składową DC dla wszystkich bloków (tj. dla wszystkich w pierwszym skanie). Po tym następuje drugi skan, który koduje (zakładając jeszcze cztery komponenty) do , nadal w sposób zygzakowaty. W tym momencie sekwencja współczynników to: ), po której następują pozostałe współczynniki wszystkich bloków w ostatnim skanie.

Po zakodowaniu wszystkich współczynników o podobnej pozycji, następną pozycją do zakodowania jest ta występująca jako następna w zygzakowatym przejściu, jak pokazano na powyższym rysunku. Stwierdzono, że bazowe progresywne kodowanie JPEG zwykle zapewnia lepszą kompresję w porównaniu z bazowym sekwencyjnym JPEG ze względu na możliwość korzystania z różnych tabel Huffmana (patrz poniżej) dostosowanych do różnych częstotliwości przy każdym „skanie” lub „przejściu” (co obejmuje podobne współczynniki pozycjonowane), choć różnica nie jest zbyt duża.

W dalszej części artykułu zakłada się, że wygenerowany wzorzec współczynników wynika z trybu sekwencyjnego.

Aby zakodować powyższy wygenerowany wzór współczynników, JPEG używa kodowania Huffmana. Standard JPEG zapewnia ogólne tabele Huffmana, chociaż kodery mogą również dynamicznie generować tabele Huffmana zoptymalizowane pod kątem rzeczywistych rozkładów częstotliwości w kodowanych obrazach.

Proces kodowania skwantowanych danych zygzakowatych rozpoczyna się od kodowania run-length, gdzie:

  • x jest niezerowym, skwantowanym współczynnikiem AC.
  • RUNLENGTH to liczba zer poprzedzających ten niezerowy współczynnik AC.
  • ROZMIAR to liczba bitów wymaganych do reprezentowania x .
  • AMPLITUDE to bitowa reprezentacja x .

Kodowanie długości serii działa poprzez zbadanie każdego niezerowego współczynnika AC x i określenie, ile zer pojawiło się przed poprzednim współczynnikiem AC. Dzięki tym informacjom tworzone są dwa symbole:

Symbol 1 Symbol 2
(DŁUGOŚĆ, ROZMIAR) (AMPLITUDA)

Zarówno RUNLENGTH, jak i SIZE opierają się na tym samym bajcie, co oznacza, że ​​każdy zawiera tylko cztery bity informacji. Wyższe bity dotyczą liczby zer, podczas gdy niższe bity oznaczają liczbę bitów potrzebnych do zakodowania wartości x .

Ma to bezpośredni wpływ na to, że Symbol 1 jest w stanie przechowywać tylko informacje dotyczące pierwszych 15 zer poprzedzających niezerowy współczynnik AC. Jednak JPEG definiuje dwa specjalne słowa kodowe Huffmana. Jeden służy do przedwczesnego kończenia sekwencji, gdy pozostałe współczynniki wynoszą zero (nazywane „End-of-Block” lub „EOB”), a drugi, gdy ciąg zer przekracza 15 przed osiągnięciem niezerowego współczynnika AC. W takim przypadku, gdy napotkano 16 zer przed danym niezerowym współczynnikiem AC, Symbol 1 jest zakodowany jako (15, 0)(0).

Cały proces trwa do momentu osiągnięcia „EOB” – oznaczonego (0, 0).

Mając to na uwadze, sekwencja z wcześniejszej staje się:

  • (0, 2)(-3);(1, 2)(-3);(0, 1)(-2);(0, 2)(-6);(0, 1)(2);( 0, 1)(-4);(0,1)(1);(0,2)(-3);(0,1)(1);(0,1)(1);
  • (0, 2)(5);(0, 1)(1);(0, 1)(2);(0, 1)(-1);(0, 1)(1);(0, 1 )(-1);(0, 1)(2);(5, 1)(-1);(0, 1)(-1);(0, 0);

(Pierwsza wartość w macierzy, −26, to współczynnik DC; nie jest kodowana w ten sam sposób. Patrz wyżej).

Stąd obliczenia częstotliwości są dokonywane na podstawie wystąpień współczynników. W naszym przykładowym bloku większość skwantowanych współczynników to małe liczby, które nie są bezpośrednio poprzedzone współczynnikiem zerowym. Te częstsze przypadki będą reprezentowane przez krótsze słowa kodowe.

Współczynnik kompresji i artefakty

Ten obraz pokazuje piksele, które różnią się między obrazem nieskompresowanym a tym samym obrazem JPEG skompresowanym z ustawieniem jakości 50. Ciemniejszy oznacza większą różnicę. Zwróć uwagę zwłaszcza na zmiany zachodzące w pobliżu ostrych krawędzi i mające kształt podobny do bloku.
Oryginalny obraz
Na powiększonym obrazie widoczne są skompresowane kwadraty 8×8 wraz z innymi wizualnymi artefaktami kompresji stratnej .

Uzyskany stopień kompresji może być zmieniany w zależności od potrzeb poprzez mniej lub bardziej agresywne stosowanie dzielników stosowanych w fazie kwantyzacji. Kompresja dziesięć do jednego zwykle daje obraz, którego nie można odróżnić wzrokiem od oryginału. Zwykle możliwy jest stopień kompresji 100:1, ale w porównaniu z oryginałem będzie on wyglądał na wyraźnie zniekształcony . Odpowiedni poziom kompresji zależy od przeznaczenia obrazu.

Obraz zewnętrzny
ikona obrazu Ilustracja zajętości na krawędzi

Osoby korzystające z sieci WWW mogą być zaznajomione z nieprawidłowościami znanymi jako artefakty kompresji, które pojawiają się w obrazach JPEG, które mogą przybierać postać szumu wokół kontrastujących krawędzi (zwłaszcza krzywych i narożników) lub obrazów „klockowatych”. Wynika to z etapu kwantyzacji algorytmu JPEG. Są one szczególnie widoczne przy ostrych narożnikach pomiędzy kontrastującymi kolorami (dobrym przykładem jest tekst, ponieważ zawiera wiele takich narożników). Analogiczne artefakty w wideo MPEG są określane jako szum komarów , jako wynikowy "zajętość krawędzi" i fałszywe kropki, które zmieniają się w czasie, przypominają roje komarów wokół obiektu.

Te artefakty można zredukować, wybierając niższy poziom kompresji; można ich całkowicie uniknąć, zapisując obraz w bezstratnym formacie pliku, chociaż spowoduje to większy rozmiar pliku. Obrazy utworzone za pomocą programów do śledzenia promieni mają zauważalne kształty blokowe na terenie. Pewne artefakty kompresji o niskiej intensywności mogą być dopuszczalne podczas zwykłego przeglądania obrazów, ale można je uwydatnić, jeśli obraz jest następnie przetwarzany, co zwykle skutkuje nieakceptowalną jakością. Rozważ poniższy przykład, demonstrujący wpływ stratnej kompresji na etap przetwarzania wykrywania krawędzi .

Obraz Kompresja bezstratna Kompresja stratna
Oryginał Bezstratne koło.png sylwester.jpg
Przetwarzane przez
wykrywacz krawędzi Canny
Bezstratne-koło-canny.png Lossy-circle-canny.png

Niektóre programy pozwalają użytkownikowi na zmianę stopnia kompresji poszczególnych bloków. W obszarach obrazu, w których występuje mniej artefaktów, stosowana jest silniejsza kompresja. W ten sposób można ręcznie zmniejszyć rozmiar pliku JPEG przy mniejszej utracie jakości.

Ponieważ etap kwantyzacji zawsze powoduje utratę informacji, standard JPEG jest zawsze kodekiem kompresji stratnej. (Informacje są tracone zarówno podczas kwantyzacji, jak i zaokrąglania liczb zmiennoprzecinkowych.) Nawet jeśli macierz kwantyzacji jest macierzą jedynek , informacje nadal będą tracone w kroku zaokrąglania.

Rozszyfrowanie

Dekodowanie w celu wyświetlenia obrazu polega na wykonaniu wszystkich powyższych czynności w odwrotnej kolejności.

Pobranie macierzy współczynników DCT (po ponownym dodaniu różnicy współczynników DC)

i biorąc z powyższego iloczyn wejścia za wejście z macierzą kwantyzacji otrzymujemy

która bardzo przypomina oryginalną macierz współczynników DCT dla lewej górnej części.

Następnym krokiem jest wzięcie dwuwymiarowego odwrotnego DCT (dwuwymiarowy DCT typu III), który jest określony wzorem:

gdzie

  • to rząd pikseli, dla liczb całkowitych .
  • to kolumna pikseli, dla liczb całkowitych .
  • jest zdefiniowany jak powyżej, dla liczb całkowitych .
  • jest zrekonstruowanym przybliżonym współczynnikiem we współrzędnych
  • to zrekonstruowana wartość piksela we współrzędnych

Zaokrąglenie danych wyjściowych do wartości całkowitych (ponieważ oryginał miał wartości całkowite) daje w wyniku obraz z wartościami (nadal przesuniętymi w dół o 128)

Widoczne są niewielkie różnice między obrazem oryginalnym (na górze) a zdekompresowanym (na dole), co najłatwiej widać w lewym dolnym rogu.

i dodawanie 128 do każdego wpisu

To jest zdekompresowany podobraz. Ogólnie rzecz biorąc, proces dekompresji może generować wartości poza pierwotnym zakresem wejściowym . W takim przypadku dekoder musi przyciąć wartości wyjściowe, aby utrzymać je w tym zakresie, aby zapobiec przepełnieniu podczas przechowywania zdekompresowanego obrazu z oryginalną głębią bitową.

Zdekompresowany obraz podrzędny można porównać z oryginalnym podobrazem (patrz również obrazy po prawej stronie), biorąc pod uwagę różnicę (oryginalny - nieskompresowany) w wyniku następujących wartości błędów:

ze średnim błędem bezwzględnym około 5 wartości na piksel (tj .).

Błąd jest najbardziej widoczny w lewym dolnym rogu, gdzie lewy dolny piksel staje się ciemniejszy niż piksel bezpośrednio po prawej stronie.

Wymagana precyzja

Zgodność kodowania i dekodowania, a tym samym wymagania dotyczące precyzji, są określone w normie ISO/IEC 10918-2, tj. części 2 specyfikacji JPEG. Specyfikacje te wymagają, na przykład, aby (przekształcone w przód) współczynniki DCT utworzone z obrazu testowanej implementacji JPEG miały błąd mieszczący się w dokładności jednego kubełka kwantyzacji w porównaniu ze współczynnikami odniesienia. W tym celu norma ISO/IEC 10918-2 zapewnia strumienie testowe, jak również współczynniki DCT, do których należy dekodować strumień kodu.

Podobnie norma ISO/IEC 10918-2 definiuje precyzję kodera w kategoriach maksymalnego dopuszczalnego błędu w domenie DCT. Jest to o tyle niezwykłe, że wiele innych standardów definiuje tylko zgodność z dekoderem i wymaga jedynie od kodera wygenerowania poprawnego składniowo strumienia kodu.

Obrazy testowe znalezione w normie ISO/IEC 10918-2 to (pseudo) losowe wzorce, aby sprawdzić najgorsze przypadki. Ponieważ norma ISO/IEC 10918-1 nie definiuje przestrzeni kolorów, a także nie obejmuje transformacji JFIF YCbCr do RGB (obecnie ISO/IEC 10918-5), precyzja tej ostatniej transformacji nie może być testowana przez normę ISO/IEC 10918-2.

W celu obsługi 8-bitowej precyzji na wyjściową składową piksela, dekwantyzacja i odwrotne transformacje DCT są zazwyczaj implementowane z co najmniej 14-bitową precyzją w zoptymalizowanych dekoderach.

Efekty kompresji JPEG

Powtarzająca się kompresja obrazu (losowe opcje jakości)

Artefakty kompresji JPEG dobrze wtapiają się w fotografie ze szczegółowymi, niejednorodnymi teksturami, umożliwiając wyższy współczynnik kompresji. Zwróć uwagę, jak wyższy współczynnik kompresji najpierw wpływa na tekstury o wysokiej częstotliwości w lewym górnym rogu obrazu i jak kontrastujące linie stają się bardziej rozmyte. Bardzo wysoki współczynnik kompresji poważnie wpływa na jakość obrazu, chociaż ogólne kolory i kształt obrazu są nadal rozpoznawalne. Jednak precyzja kolorów cierpi mniej (dla ludzkiego oka) niż precyzja konturów (oparta na luminancji). Uzasadnia to fakt, że obrazy powinny być najpierw transformowane w modelu kolorów oddzielającym luminancję od informacji chromatycznej, przed podpróbkowaniem płaszczyzn chromatycznych (co może również wykorzystywać kwantyzację o niższej jakości), aby zachować precyzję płaszczyzny luminancji przy większej ilości bitów informacji .

Przykładowe zdjęcia

Wizualny wpływ kompresji jpeg w Photoshopie na obraz 4480x4480 pikseli

Aby uzyskać informacje, poniższy nieskompresowany 24-bitowy obraz bitmapy RGB (73 242 piksele) wymagałby 219 726 bajtów (z wyłączeniem wszystkich innych nagłówków informacji). Podane poniżej rozmiary plików zawierają wewnętrzne nagłówki informacji JPEG i niektóre metadane . W przypadku obrazów o najwyższej jakości (Q=100) wymagane jest około 8,25 bitów na piksel koloru. W przypadku obrazów w skali szarości wystarczy minimum 6,5 bitów na piksel (porównywalna jakość informacji o kolorze Q=100 wymaga około 25% więcej zakodowanych bitów). Najwyższa jakość obrazu poniżej (Q=100) jest zakodowana przy dziewięciu bitach na piksel koloru, obraz średniej jakości (Q=25) używa jednego bitu na piksel koloru. W większości zastosowań współczynnik jakości nie powinien spaść poniżej 0,75 bita na piksel (Q=12,5), co pokazuje obraz o niskiej jakości. Obraz w najniższej jakości wykorzystuje tylko 0,13 bita na piksel i wyświetla bardzo słabe kolory. Jest to przydatne, gdy obraz będzie wyświetlany w znacznie zmniejszonym rozmiarze. Metoda tworzenia lepszych macierzy kwantyzacji dla danej jakości obrazu przy użyciu PSNR zamiast współczynnika Q jest opisana w Minguillón i Pujol (2001).

Uwaga: Powyższe obrazy nie są obrazami testowymi IEEE / CCIR / EBU  , a ustawienia kodera nie są określone ani dostępne.
Obraz Jakość Rozmiar (w bajtach) Stopień sprężania Komentarz
Przykład JPEG JPG RIP 100.jpg Najwyższa jakość (Q = 100) 81,447 2,7:1 Niezwykle drobne artefakty
Przykład JPEG JPG RIP 050.jpg Wysoka jakość (Q = 50) 14 679 15:1 Początkowe oznaki artefaktów podobrazów
Przykład JPEG JPG RIP 025.jpg Średnia jakość (Q = 25) 9407 23:1 Silniejsze artefakty; utrata informacji o wysokiej częstotliwości
Przykład JPEG JPG RIP 010.jpg Niska jakość (Q = 10) 4787 46:1 Poważna utrata wysokich częstotliwości prowadzi do oczywistych artefaktów na granicach podobrazów („makroblokowanie”)
Przykład JPEG JPG RIP 001.jpg Najniższa jakość (Q = 1) 1523 144:1 Ekstremalna utrata koloru i szczegółów; liście są prawie nie do poznania.

Zdjęcie średniej jakości zajmuje tylko 4,3% przestrzeni dyskowej wymaganej dla nieskompresowanego obrazu, ale ma niewielką zauważalną utratę szczegółów lub widocznych artefaktów. Jednak po przekroczeniu pewnego progu kompresji skompresowane obrazy wykazują coraz bardziej widoczne defekty. Zobacz artykuł na temat teorii zniekształceń szybkości, aby uzyskać matematyczne wyjaśnienie tego efektu progowego. Szczególnym ograniczeniem JPEG pod tym względem jest jego nienakładająca się struktura transformacji 8x8 bloków. Bardziej nowoczesne projekty, takie jak JPEG 2000 i JPEG XR, wykazują bardziej wdzięczną degradację jakości w miarę zmniejszania się zużycia bitów — dzięki zastosowaniu transformacji o większym zasięgu przestrzennym dla współczynników o niższych częstotliwościach oraz zastosowaniu zachodzących na siebie funkcji bazowych transformacji.

Bezstratna dalsza kompresja

Od 2004 do 2008 roku pojawiły się nowe badania nad sposobami dalszej kompresji danych zawartych w obrazach JPEG bez modyfikowania reprezentowanego obrazu. Ma to zastosowanie w scenariuszach, w których oryginalny obraz jest dostępny tylko w formacie JPEG, a jego rozmiar musi zostać zmniejszony w celu archiwizacji lub transmisji. Standardowe narzędzia do kompresji ogólnego przeznaczenia nie mogą znacząco skompresować plików JPEG.

Zazwyczaj takie schematy wykorzystują ulepszenia naiwnego schematu kodowania współczynników DCT, który nie uwzględnia:

  • Korelacje między wielkościami sąsiednich współczynników w tym samym bloku;
  • Korelacje między wielkościami tego samego współczynnika w sąsiednich blokach;
  • Korelacje między wielkościami tego samego współczynnika/bloku w różnych kanałach;
  • Współczynniki DC wzięte razem przypominają wersję oryginalnego obrazu w zmniejszonej skali pomnożoną przez współczynnik skalowania. Można zastosować dobrze znane schematy bezstratnego kodowania obrazów o ciągłych tonach , uzyskując nieco lepszą kompresję niż kodowany przez Huffmana DPCM używany w JPEG.

W JPEG istnieją już pewne standardowe, ale rzadko używane opcje poprawiające wydajność kodowania współczynników DCT: opcja kodowania arytmetycznego i opcja kodowania progresywnego (która daje niższe szybkości transmisji bitów, ponieważ wartości dla każdego współczynnika są kodowane niezależnie, a każdy współczynnik ma znacząco różne dystrybucja). Nowoczesne metody poprawiły te techniki poprzez zmianę kolejności współczynników w celu zgrupowania współczynników o większej wielkości razem; wykorzystanie sąsiednich współczynników i bloków do przewidywania nowych wartości współczynników; dzielenie bloków lub współczynników pomiędzy niewielką liczbę niezależnie kodowanych modeli na podstawie ich statystyk i sąsiednich wartości; a ostatnio przez dekodowanie bloków, przewidywanie kolejnych bloków w domenie przestrzennej, a następnie kodowanie ich w celu wygenerowania predykcji dla współczynników DCT.

Zazwyczaj takie metody mogą kompresować istniejące pliki JPEG od 15 do 25 procent, a w przypadku plików JPEG skompresowanych przy ustawieniach niskiej jakości mogą przynieść poprawę nawet o 65%.

Swobodnie dostępne narzędzie o nazwie packJPG jest oparte na artykule z 2007 roku „Improved Redundancy Reduction for JPEG Files”. Artykuł z 2016 r. zatytułowany „JPEG na sterydach” wykorzystujący bibliotekę ISO libjpeg pokazuje, że obecne techniki, stratne lub nie, mogą sprawić, że JPEG będzie prawie tak wydajny jak JPEG XR ; mozjpeg używa podobnych technik. JPEG XL to nowy format pliku, który może bezstratnie ponownie kodować JPEG z wydajną konwersją wsteczną do JPEG.

Formaty pochodne

Do stereoskopowego 3D

Stereoskopowy JPEG

Przykład stereoskopowego pliku .JPS

JPEG Stereoscopic (JPS, rozszerzenie .jps) to oparty na JPEG format obrazów stereoskopowych . Ma szereg konfiguracji przechowywanych w polu znacznika JPEG APP3, ale zwykle zawiera jeden obraz o podwójnej szerokości, reprezentujący dwa obrazy o identycznej wielkości w trybie zezowatym (tj. lewa ramka po prawej stronie obrazu i odwrotnie) układ obok siebie. Ten format pliku można wyświetlać jako JPEG bez specjalnego oprogramowania lub przetwarzać w celu renderowania w innych trybach.

Format wieloobrazowy JPEG

JPEG Multi-Picture Format (MPO, rozszerzenie .mpo) to oparty na JPEG format do przechowywania wielu obrazów w jednym pliku. Zawiera dwa lub więcej plików JPEG połączonych razem. Definiuje również segment znacznika JPEG APP2 do opisu obrazu. Różne urządzenia używają go do przechowywania obrazów 3D, takich jak Fujifilm FinePix Real 3D W1 , HTC Evo 3D , kamera rozszerzająca JVC GY-HMZ1U AVCHD/MVC, Nintendo 3DS , Sony PlayStation 3 , Sony PlayStation Vita , Panasonic Lumix DMC-TZ20 , DMC- TZ30 , DMC-TZ60 , DMC-TS4 (FT4) i Sony DSC-HX7V. Inne urządzenia używają go do przechowywania „obrazów podglądu”, które można wyświetlić na telewizorze.

W ciągu ostatnich kilku lat, ze względu na rosnące wykorzystanie obrazów stereoskopowych, społeczność naukowa włożyła wiele wysiłku w opracowanie algorytmów kompresji obrazów stereoskopowych.

JPEG XT

JPEG XT (ISO/IEC 18477) został opublikowany w czerwcu 2015 r.; rozszerza podstawowy format JPEG o obsługę wyższych głębi bitowych liczb całkowitych (do 16 bitów), obrazowanie o wysokim zakresie dynamiki i kodowanie zmiennoprzecinkowe, kodowanie bezstratne i kodowanie kanału alfa. Rozszerzenia są wstecznie kompatybilne z podstawowym formatem plików JPEG/JFIF i 8-bitowym obrazem z kompresją stratną. JPEG XT wykorzystuje rozszerzalny format plików oparty na JFIF. Warstwy rozszerzające służą do modyfikowania 8-bitowej warstwy podstawowej JPEG i przywracania obrazu o wysokiej rozdzielczości. Istniejące oprogramowanie jest kompatybilne w przód i może odczytywać strumień binarny JPEG XT, chociaż dekoduje tylko podstawową warstwę 8-bitową.

Niezgodne standardy JPEG

Joint Photography Experts Group jest również odpowiedzialna za niektóre inne formaty noszące nazwę JPEG, w tym JPEG 2000 , JPEG XR i JPEG XS .

JPEG XL

JPEG XL to kolejny format o lepszej wydajności kompresji i bardziej nowoczesnych funkcjach w porównaniu do JPEG. Został zaprojektowany tak, aby przewyższyć wydajność kompresji nieruchomych obrazów wykazywaną przez HEVC HM, Daala i WebP i w przeciwieństwie do poprzednich prób zastąpienia JPEG, aby zapewnić bezstratną, bardziej wydajną opcję transportu i przechowywania rekompresji dla tradycyjnych obrazów JPEG. Format nie jest bezpośrednio zgodny z dekoderami JPEG: należy wykonać krok transkodowania, aby przywrócić tradycyjny strumień bitów JPEG.

Realizacje

Bardzo ważną implementacją kodeka JPEG była darmowa biblioteka programistyczna libjpeg firmy Independent JPEG Group. Po raz pierwszy została opublikowana w 1991 roku i była kluczem do sukcesu standardu. Najnowsze wersje wprowadzają własne rozszerzenia, które łamią kompatybilność ABI z poprzednimi wersjami . W wielu znanych projektach programistycznych libjpeg został zastąpiony przez libjpeg-turbo , który oferuje wyższą wydajność, kompatybilność z SIMD i kompatybilność wsteczną z oryginalnymi wersjami libjpeg.

W marcu 2017 r. Google wypuścił projekt open source Guetzli , który wymienia znacznie dłuższy czas kodowania na mniejszy rozmiar pliku (podobnie jak Zopfli dla PNG i innych bezstratnych formatów danych).

ISO/IEC Joint Photography Experts Group utrzymuje referencyjną implementację oprogramowania, która może kodować zarówno podstawowe pliki JPEG (ISO/IEC 10918-1 i 18477-1), jak i rozszerzenia JPEG XT (ISO/IEC 18477 części 2 i 6-9), a także JPEG-LS (ISO/IEC 14495).

Zobacz też

Bibliografia

Zewnętrzne linki