JPEG

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 5 november 2021; kontroller kräver 7 redigeringar .
JPEG
Förlängning .jpg, .jpeg, .JPG, .JPEG, .jpeeller.JPE
MIME -typ bild/jpeg
Signatur 0xFF 0xD8
publiceras 18 september 1992
Formattyp Grafiskt format
Utvecklad i JPEG 2000 , JPEG-LS , JPEG XR , MotionJPEG
Standard(er) ISO/IEC 10918
Hemsida jpeg.org/jpeg/ ​(  engelska)
 Mediafiler på Wikimedia Commons

JPEG (uttalas jpeg [1] , eng .  Joint Photographic Experts Group , efter namnet på utvecklarorganisationen ) är ett av de populära rastergrafikformaten som används för att lagra fotografier och liknande bilder. Filer som innehåller JPEG-data har vanligtvis tilläggen (suffix) .jpg (mest populärt), .jfif , .jpe eller .jpeg . MIME -typen är image/jpeg.

JPEG-algoritmen låter dig komprimera en bild med både förlustfri och förlustfri (förlustfri JPEG-komprimeringsläge). Bilder med en linjär storlek på högst 65535 × 65535 pixlar stöds.

År 2010, för att bevara information om digitala format som var populära i början av 2000-talet för eftervärlden, lade forskare från PLANETS-projektet instruktioner för att läsa JPEG-formatet i en speciell kapsel, som placerades i ett speciellt förråd i de schweiziska alperna [2] .

Omfattning

JPEG-algoritmen är mest effektiv för att komprimera fotografier och målningar som innehåller realistiska scener med mjuka övergångar i ljusstyrka och färg. JPEG används mest inom digital fotografering och för att lagra och överföra bilder via Internet .

JPEG-formatet i förlustkomprimeringsläge är till liten nytta för att komprimera ritningar, text och teckengrafik, där en skarp kontrast mellan intilliggande pixlar leder till märkbara artefakter . Det är tillrådligt att spara sådana bilder i förlustfria format som JPEG-LS , TIFF , GIF , PNG eller använda JPEG-komprimeringsläget förlustfritt.

JPEG (liksom andra förlustformat komprimering ) är inte lämpliga för att komprimera bilder under flerstegsbehandling, eftersom förvrängningar kommer att införas i bilderna varje gång mellanliggande bearbetningsresultat sparas.

JPEG bör inte användas i fall där ens minimal förlust är oacceptabel, till exempel vid komprimering av astronomiska eller medicinska bilder. I sådana fall kan det förlustfria JPEG-komprimeringsläget som tillhandahålls av JPEG-standarden (som dock inte stöds av de flesta populära codecs ) eller JPEG-LS- komprimeringsstandarden rekommenderas .

Komprimering

När bilden är komprimerad konverteras den från RGB-färgrymden till YCbCr . JPEG-standarden (ISO / IEC 10918-1) reglerar inte valet av YCbCr, vilket tillåter andra typer av transformation (till exempel med antalet komponenter [3] som skiljer sig från tre), och komprimering utan konvertering (direkt till RGB) JFIF-specifikationen (JPEG File Interchange Format, föreslagen 1991 av C-Cube Microsystems, och nu de facto-standarden) inbegriper användningen av RGB-> YCbCr-konvertering.

Efter RGB->YCbCr-konverteringen, för Cb- och Cr-bildkanalerna som ansvarar för färg, kan "decimering" (subsampling [4] ) utföras, vilket innebär att varje block med 4 pixlar (2x2) av Y-ljusstyrkakanalen tilldelas genomsnittliga Cb- och Cr-värden (decimeringsschema "4:2:0" [5] ). Samtidigt, för varje 2x2 block, istället för 12 värden (4 Y, 4 Cb och 4 Cr), används endast 6 (4 Y och en genomsnittlig Cb och Cr vardera). Om det finns högre krav på kvaliteten på bilden som återställs efter komprimering, kan förtunning endast utföras i en riktning - vertikalt ("4:4:0"-schema) eller horisontellt ("4:2:2"), eller inte utföras alls ("4:4:4").

Standarden tillåter också decimering med medelvärdesberäkning av Cb och Cr, inte för ett 2x2-block, utan för fyra på varandra följande (vertikalt eller horisontellt) pixlar, det vill säga för 1x4, 4x1-block ("4:1:1"-schema), samt 2x4 och 4x2 (schema "4:1:0"). Det är också möjligt att använda olika typer av decimering för Cb och Cr, men i praktiken används sådana scheman ytterst sällan.

Vidare är ljusstyrkekomponenten Y och komponenterna som ansvarar för färgen Cb och Cr uppdelade i block om 8x8 pixlar. Varje sådant block utsätts för en diskret cosinustransform (DCT) . De resulterande DCT-koefficienterna kvantiseras (olika kvantiseringsmatriser används vanligtvis för Y, Cb och Cr) och packas med användning av kör- och Huffman-koder . JPEG-standarden tillåter också användning av mycket effektivare aritmetisk kodning , men på grund av patentrestriktioner (patentet för den aritmetiska QM-kodaren som beskrivs i JPEG-standarden tillhör IBM ), i praktiken används den sällan. Det populära libjpeg- biblioteket i de senaste versionerna innehåller stöd för aritmetisk kodning, men att titta på bilder komprimerade med den här metoden kan vara problematiskt eftersom många tittare inte stöder avkodning av dem.

Matriserna som används för att kvantisera DCT-koefficienterna lagras i JPEG-filens rubrik. Vanligtvis är de byggda på ett sådant sätt att högfrekventa koefficienter utsätts för starkare kvantisering än lågfrekventa. Detta leder till förgrovning av fina detaljer i bilden. Ju högre kompressionsförhållande, desto starkare kvantisering av alla koefficienter.

När du sparar en bild som en JPEG-fil får kodaren en kvalitetsparameter i någon godtycklig enhet, såsom 1 till 100 eller 1 till 10. Ett högre antal betyder vanligtvis bättre kvalitet (och en större komprimerad fil). Det finns dock ingen sådan parameter i själva JPEG-filen, och kvaliteten på den rekonstruerade bilden bestäms av kvantiseringsmatriserna, typen av decimering av färgskillnadskomponenter och noggrannheten i matematiska operationer både på kodar- och avkodarsidan. I det här fallet, även när du använder högsta kvalitet (motsvarande en kvantiseringsmatris som endast består av enheter och frånvaron av decimering av färgskillnadskomponenter), kommer den rekonstruerade bilden inte exakt att matcha den ursprungliga, som är associerad både med den ändliga noggrannheten av DCT och med behovet av att avrunda värdena för Y , Cb, Cr och DCT-koefficienter till närmaste heltal. Lossless JPEG-komprimeringsläget, som inte använder DCT, ger en exakt matchning mellan de återställda och originalbilderna, men dess låga effektivitet (komprimeringsförhållandet överstiger sällan 2) och bristen på stöd från mjukvaruutvecklare bidrog inte till populariteten för Lossless JPEG.

Olika JPEG-komprimeringsscheman

JPEG-standarden tillhandahåller två huvudsakliga sätt att representera kodad data.

Det vanligaste, som stöds av de flesta av de tillgängliga codecs , är en sekventiell (sekventiell JPEG) datarepresentation, som involverar sekventiell genomgång av den kodade bilden med ett bitdjup på 8 bitar per komponent (eller 8 bitar per pixel för svartvit gråskala bilder) block för block från vänster till höger, uppifrån och ned. Ovan beskrivna operationer utförs på varje kodat bildblock, och kodningsresultaten placeras i utgångsströmmen i form av en enda "skanning", det vill säga en array av kodad data som motsvarar den sekventiellt skickade ("skannade") bild. Baslinje- eller "baslinje"-kodningsmoden tillåter endast en sådan representation (och Huffman-kodning av de kvantiserade DCT-koefficienterna). Det utökade (utökade) läget, tillsammans med det sekventiella, tillåter också progressiv (progressiv JPEG) datarepresentation, kodning av bilder med ett bitdjup på 12 bitar per komponent/pixel (komprimering av sådana bilder enligt JFIF-specifikationen stöds inte), och aritmetisk kodning av kvantiserade DCT-koefficienter.

I fallet med progressiv JPEG skrivs den komprimerade datan till utgångsströmmen som en uppsättning skanningar, som var och en beskriver hela bilden i ökande detalj. Detta uppnås antingen genom att i varje skanning inte registrera en komplett uppsättning DCT-koefficienter, utan bara några av dem: först - lågfrekvent, i nästa skanning - högfrekvent (metoden "spektralval", det vill säga spektrala sampel ), eller genom successiv, från scan till scan, förfining av DCT-koefficienter ("successive approximation"-metod, det vill säga successiva approximationer). Denna progressiva representation av data är särskilt användbar när du överför komprimerade bilder med låghastighetskommunikationskanaler, eftersom den låter dig se hela bilden efter att ha överfört en liten del av JPEG-filen.

Båda beskrivna scheman (både sekventiell och progressiv JPEG) är baserade på DCT och tillåter i grunden inte att erhålla en återställd bild som är absolut identisk med den ursprungliga. Standarden tillåter dock också komprimering som inte använder DCT, utan är byggd på basis av en linjär prediktor (förlustfri, det vill säga "förlustfri", JPEG), som garanterar en fullständig, bit-för-bit, matchning mellan original och återställda bilder. Samtidigt når komprimeringsförhållandet för fotografiska bilder sällan 2, men den garanterade frånvaron av distorsion i vissa fall är efterfrågad. Märkbart högre kompressionsförhållanden kan erhållas med JPEG-LS- kompressionsmetoden som beskrivs av ISO/IEC 14495-1 , som, trots likheten i namn, inte är direkt relaterad till JPEG ISO/IEC 10918-1 (ITU T.81 Recommendation) ) standard (ITU T.87 rekommendation).

Syntax och struktur

En JPEG-fil innehåller en sekvens av markörer , som var och en börjar med en 0xFF-byte, som anger början av markören, och en identifierarbyte. Vissa markörer består endast av detta par av byte, medan andra innehåller ytterligare data som består av ett två-byte fält med längden på informationsdelen av markören (inklusive längden på detta fält, minus de två byten i början av markören 0xFF och identifierare) och själva data. Denna filstruktur låter dig snabbt hitta en markör med nödvändiga data (till exempel längden på linjen, antalet rader och antalet färgkomponenter i den komprimerade bilden).

Grundläggande JPEG-markörer [6]
Markör bytes Längd Ändamål Kommentarer
SÅ JAG 0xFFD8 Nej Bildstart
SOF0 0xFFC0 variabel storlek Frame start (grundläggande, DCT) Indikerar att bilden kodades i basläge med DCT- och Huffman-kod . Markören innehåller antalet rader och bildradens längd (tvåbytefält med en offset på 5 respektive 7 relativt markörens början), antalet komponenter (bytefält med en offset på 9 i förhållande till början av markören) är antalet bitar per komponent strikt 8 (bytefält med en offset på 4 i förhållande till startmarkören), liksom förhållandet mellan komponenter (till exempel 4:2:0) .
SOF1 0xFFC1 variabel storlek Start av bildruta (utökad, DCT, Huffman-kod) Indikerar att bilden kodades i utökat läge med DCT- och Huffman-kod. Markören innehåller antalet linjer och linjelängden på bilden, antalet komponenter, antalet bitar per komponent (8 eller 12) och förhållandet mellan komponenterna (t.ex. 4:2:0).
SOF2 0xFFC2 variabel storlek Start av bildruta (progressiv, DCT, Huffman-kod) Indikerar att bilden kodades i progressivt läge med hjälp av DCT- och Huffman-kod. Markören innehåller antalet linjer och linjelängden på bilden, antalet komponenter, antalet bitar per komponent (8 eller 12) och förhållandet mellan komponenterna (t.ex. 4:2:0).
DHT 0xFFC4 variabel storlek Innehåller Huffman-bord Anger ett eller flera Huffman-bord.
DQT 0xFFDB variabel storlek Innehåller kvantiseringstabeller Anger en eller flera kvantiseringstabeller.
DRI 0xFFDD 4 bytes Anger längden på omstartsintervallet Anger avståndet mellan RST-markörer n i makroblock. I frånvaro av en DRI är förekomsten av RST-markörer n i den kodade dataströmmen olaglig och anses vara ett fel. Om RST-markörer n inte används under kodning, används DRI-markören antingen inte alls, eller så anges repetitionsintervallet i den som 0.
SOS 0xFFDA variabel storlek Starta skanning Början av den första eller nästa skanningen av bilden med bypassriktningen från vänster till höger uppifrån och ned. Om grundläggande kodningsläge användes, används en skanning. Vid användning av progressiva lägen används flera skanningar. SOS-markören separerar mellan de informativa (huvudet) och kodade (faktiskt komprimerade data) delarna av bilden.
RST n 0xFFDn _ Nej omstart Omstartsmarkörer används för att segmentera entropikodarkodad data. I varje segment avkodas data oberoende, vilket gör det möjligt att parallellisera avkodningsproceduren. Om den kodade datan skadas under överföring eller lagring av en JPEG-fil, tillåter användningen av omstartsmarkörer dig att begränsa förlusten (makroblock från oskadade segment kommer att återställas korrekt). Infogas vid varje r: te makroblock, där r  är DRI-omstartsintervallet för markören. Används inte i frånvaro av DRI-markör. n , låg 3 bitar av kodmarkör, cykler 0 till 7.
APP n 0xFFen _ variabel storlek Ställs in efter applikation Till exempel använder EXIF ​​för en JPEG-fil APP1-markören för att lagra metadata i en TIFF -baserad struktur .
COM 0xFFFE variabel storlek Kommentar Innehåller texten i kommentaren.
EOI 0xFFD9 Nej Slutet på den kodade delen av bilden.

Fördelar och nackdelar

Nackdelarna med JPEG-komprimering inkluderar uppkomsten av karakteristiska artefakter på återställda bilder vid höga komprimeringsförhållanden : bilden är utspridda i block med storleken 8x8 pixlar (denna effekt är särskilt märkbar i bildområden med jämna ljusförändringar), i områden med hög rumslig frekvens (till exempel på kontrastkonturer och bildkanter) artefakter uppträder i form av brushalos. JPEG-standarden (ISO/IEC 10918-1, bilaga K, klausul K.8) tillhandahåller användning av speciella filter för att undertrycka blockartefakter, men i praktiken används sådana filter, trots sin höga effektivitet, praktiskt taget inte.

Men trots bristerna har JPEG blivit mycket utbredd på grund av det ganska höga (i förhållande till de alternativ som fanns vid tidpunkten för dess uppkomst) komprimeringsförhållandet, stöd för fullfärgsbildkomprimering och relativt låg beräkningskomplexitet .

JPEG-komprimeringshastighet

För att påskynda komprimeringsprocessen enligt JPEG-standarden används traditionellt parallellisering av beräkningar, särskilt vid beräkning av DCT. Historiskt sett beskrevs ett av de första försöken att påskynda komprimeringsprocessen med detta tillvägagångssätt i en artikel från 1993 av Kasperovich och Babkin [7] , som föreslog en original DCT-approximation som möjliggör effektiv parallellisering av beräkningar med 32-bitars generella ändamål. register över Intel 80386-processorer . Mer kraftfulla datorsystem som dök upp senare använde SIMD- tillägg av x86-arkitekturprocessorinstruktionsuppsättningen . Betydligt bättre resultat kan uppnås genom system som använder datorkapaciteten hos grafikacceleratorer ( NVIDIA CUDA och AMD FireStream-teknologier ) för att organisera parallell beräkning inte bara för DCT utan också för andra stadier av JPEG-komprimering (färgrymdskonvertering, körnivå, statistisk kodning, etc.). ), och för varje block av 8x8 kodad eller avkodad bild. Artikeln [8] presenterade implementeringen av parallellisering av alla stadier av JPEG-algoritmen med hjälp av CUDA-teknik, vilket avsevärt ökade hastigheten för komprimering och avkodning enligt JPEG-standarden.

Se även

Anteckningar

  1. Oxford Dictionary . Hämtad 11 november 2014. Arkiverad från originalet 11 november 2014.
  2. Emma Woollacott. Digital ark syftar till att bevara döda  dataformat . TG Daily (21 maj 2010). Hämtad 1 september 2016. Arkiverad från originalet 6 juni 2017.
  3. I enlighet med GOST 34.003-90 inom området informationsteknologi är denna term maskulin
  4. ISO/IEC 10918-1 : 1993(E) s.28 (länk ej tillgänglig) . Arkiverad från originalet den 22 augusti 2011. 
  5. Kerr, Douglas A. "Chrominance Subsampling in Digital Images" . Hämtad 27 maj 2010. Arkiverad från originalet 24 februari 2021.
  6. ISO/IEC 10918-1 : 1993(E) s.36 (länk ej tillgänglig) . Arkiverad från originalet den 22 augusti 2011. 
  7. Kasperovich, LV, Babkin, VF "Snabb diskret cosinustransformationsapproximation för JPEG-bildkomprimering" . Hämtad 3 oktober 2017. Arkiverad från originalet 15 juni 2018.
  8. "Att använda CUDA-teknik för att snabbt komprimera JPEG-bilder" . Hämtad 3 december 2012. Arkiverad från originalet 30 mars 2013.

Länkar