JPEG

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 5. november 2021; checks kræver 7 redigeringer .
JPEG
Udvidelse .jpg, .jpeg, .JPG, eller .JPEG_.jpe.JPE
MIME -type billede/jpeg
Underskrift 0xFF 0xD8
offentliggjort 18. september 1992
Formattype Grafisk format
Udviklet i JPEG 2000 , JPEG-LS , JPEG XR , MotionJPEG
Standard(er) ISO/IEC 10918
Internet side jpeg.org/jpeg/ ​(  engelsk)
 Mediefiler på Wikimedia Commons

JPEG (udtales jpeg [1] , eng .  Joint Photographic Experts Group , efter navnet på udviklerorganisationen ) er et af de populære rastergrafikformater , der bruges til at gemme fotografier og lignende billeder. Filer, der indeholder JPEG-data, har normalt filtypenavnene (suffikser) .jpg (mest populær), .jfif , .jpe eller .jpeg . MIME -typen er image/jpeg.

JPEG-algoritmen giver dig mulighed for at komprimere et billede med både tabsfri og tabsfri (tabsfri JPEG-komprimeringstilstand). Billeder med en lineær størrelse på højst 65535 × 65535 pixels understøttes.

I 2010 lagde forskere fra PLANETS-projektet instruktioner til læsning af JPEG-formatet i en speciel kapsel, som blev placeret i et særligt depot i de schweiziske alper, for at bevare information om digitale formater, der var populære i begyndelsen af ​​det 21. århundrede. [2] .

Omfang

JPEG-algoritmen er mest effektiv til at komprimere fotografier og malerier, der indeholder realistiske scener med jævne overgange i lysstyrke og farve. JPEG er mest udbredt i digital fotografering og til lagring og overførsel af billeder via internettet .

JPEG-formatet i komprimeringstilstand med tab er kun til lidt nytte til at komprimere tegninger, tekst og tegngrafik, hvor en skarp kontrast mellem tilstødende pixels fører til mærkbare artefakter . Det er tilrådeligt at gemme sådanne billeder i tabsfrie formater såsom JPEG-LS , TIFF , GIF , PNG , eller bruge Lossless JPEG-komprimeringstilstanden.

JPEG (såvel som andre tabsgivende komprimeringsformater ) er ikke egnet til at komprimere billeder under flertrinsbehandling, da der vil blive indført forvrængninger i billederne, hver gang mellembehandlingsresultater gemmes.

JPEG bør ikke bruges i tilfælde, hvor selv minimale tab er uacceptabelt, såsom ved komprimering af astronomiske eller medicinske billeder. I sådanne tilfælde kan den Lossless JPEG-komprimeringstilstand, der leveres af JPEG-standarden (som dog ikke understøttes af de fleste populære codecs ), eller JPEG-LS- komprimeringsstandarden, anbefales .

Kompression

Når det er komprimeret, konverteres billedet fra RGB-farverummet til YCbCr . JPEG-standarden (ISO / IEC 10918-1) regulerer ikke valget af YCbCr, og tillader andre typer transformation (for eksempel med antallet af komponenter [3] forskelligt fra tre) og komprimering uden konvertering (direkte til RGB) , dog involverer JFIF-specifikationen (JPEG File Interchange Format, foreslået i 1991 af C-Cube Microsystems, og nu de facto-standarden) brugen af ​​RGB-> YCbCr-konvertering.

Efter RGB->YCbCr-konverteringen kan der for de Cb- og Cr-billedkanaler, der er ansvarlige for farve, udføres "decimering" (subsampling [4] ), hvilket betyder, at hver blok på 4 pixels (2x2) af Y-lysstyrkekanalen tildeles gennemsnitlige Cb- og Cr-værdier (decimeringsskema "4:2:0" [5] ). På samme tid, for hver 2x2 blok, i stedet for 12 værdier (4 Y, 4 Cb og 4 Cr), bruges kun 6 (4 Y og en gennemsnitlig Cb og Cr hver). Hvis der er højere krav til kvaliteten af ​​billedet, der gendannes efter komprimering, kan udtynding kun udføres i én retning - lodret ("4:4:0"-skema) eller vandret ("4:2:2") eller ikke udføres overhovedet ("4:4:4").

Standarden tillader også decimering med gennemsnit af Cb og Cr ikke for en 2x2 blok, men for fire på hinanden følgende (lodret eller vandret) pixels, det vil sige for 1x4, 4x1 blokke ("4:1:1" skema), samt 2x4 og 4x2 (skema "4:1:0"). Det er også muligt at bruge forskellige typer af decimering for Cb og Cr, men i praksis bruges sådanne skemaer yderst sjældent.

Ydermere er lysstyrkekomponenten Y og de komponenter, der er ansvarlige for farven Cb og Cr, opdelt i blokke på 8x8 pixels. Hver sådan blok udsættes for en diskret cosinustransformation (DCT) . De resulterende DCT-koefficienter kvantiseres (forskellige kvantiseringsmatricer bruges generelt til Y, Cb og Cr) og pakkes ved hjælp af run- og Huffman-koder . JPEG-standarden tillader også brugen af ​​meget mere effektiv aritmetisk kodning , men på grund af patentrestriktioner (patentet for den aritmetiske QM-koder, der er beskrevet i JPEG-standarden tilhører IBM ), bruges den i praksis sjældent. Det populære libjpeg- bibliotek i nyere versioner inkluderer understøttelse af aritmetisk kodning, men visning af billeder komprimeret ved hjælp af denne metode kan være problematisk, fordi mange seere ikke understøtter afkodning af dem.

De matricer, der bruges til at kvantisere DCT-koefficienterne, er gemt i JPEG-filens header. Normalt er de bygget på en sådan måde, at højfrekvente koefficienter udsættes for stærkere kvantisering end lavfrekvente. Dette fører til forgrovning af fine detaljer i billedet. Jo højere kompressionsforholdet er, jo stærkere er kvantiseringen af ​​alle koefficienter.

Når du gemmer et billede som en JPEG-fil, får koderen en kvalitetsparameter i en eller anden vilkårlig enhed, såsom 1 til 100 eller 1 til 10. Et højere tal betyder normalt bedre kvalitet (og en større komprimeret fil). Der er dog ikke en sådan parameter i selve JPEG-filen, og kvaliteten af ​​det rekonstruerede billede bestemmes af kvantiseringsmatricerne, typen af ​​decimering af farveforskellekomponenter og nøjagtigheden af ​​matematiske operationer både på koder- og dekodersiden. I dette tilfælde, selv når du bruger den højeste kvalitet (svarende til en kvantiseringsmatrix, der kun består af enheder og fravær af decimering af farveforskellekomponenter), vil det rekonstruerede billede ikke nøjagtigt matche det originale, hvilket er forbundet med både den endelige nøjagtighed af DCT og med behovet for at afrunde værdierne af Y , Cb, Cr og DCT koefficienter til det nærmeste heltal. Lossless JPEG-komprimeringstilstanden, som ikke bruger DCT, giver et nøjagtigt match mellem de gendannede og originale billeder, men dens lave effektivitet (komprimeringsforholdet overstiger sjældent 2) og manglen på support fra softwareudviklere bidrog ikke til Lossless' popularitet JPEG.

Forskellige JPEG-komprimeringsskemaer

JPEG-standarden giver to hovedmåder til at repræsentere kodede data.

Den mest almindelige, understøttet af de fleste af de tilgængelige codecs , er en sekventiel (sekventiel JPEG) datarepræsentation, som involverer sekventiel gennemgang af det kodede billede med en bitdybde på 8 bits pr. komponent (eller 8 bits pr. pixel for sorte og hvide gråtoner). billeder) blok for blok fra venstre mod højre, top til bund. De ovenfor beskrevne operationer udføres på hver kodet billedblok, og kodningsresultaterne placeres i outputstrømmen i form af en enkelt "scanning", det vil sige et array af kodede data svarende til de sekventielt beståede ("scannede") billede. Basislinje- eller "basislinje"-kodningstilstanden tillader kun en sådan repræsentation (og Huffman-kodning af de kvantiserede DCT-koefficienter). Den udvidede (udvidede) tilstand, sammen med den sekventielle, tillader også progressiv (progressiv JPEG) datarepræsentation, kodning af billeder med en bitdybde på 12 bit pr. komponent/pixel (komprimering af sådanne billeder af JFIF-specifikationen understøttes ikke), og aritmetisk kodning af kvantiserede DCT-koefficienter.

I tilfælde af progressiv JPEG skrives de komprimerede data til outputstrømmen som et sæt scanninger, der hver især beskriver hele billedet i stigende detaljer. Dette opnås enten ved at optage i hver scanning ikke et komplet sæt af DCT-koefficienter, men kun nogle af dem: først - lavfrekvent, i de næste scanninger - højfrekvent (metoden "spektral udvælgelse", det vil sige spektrale prøver ), eller ved successiv, fra scanning til scanning, forfining af DCT-koefficienter ("successive approximation"-metoden, det vil sige successive approksimationer). Denne progressive repræsentation af data er især nyttig, når du sender komprimerede billeder ved hjælp af kommunikationskanaler med lav hastighed, da den giver dig mulighed for at få et overblik over hele billedet efter overførsel af en lille del af JPEG-filen.

Begge beskrevne skemaer (både sekventiel og progressiv JPEG) er baseret på DCT og tillader grundlæggende ikke at opnå et gendannet billede, der er helt identisk med det originale. Standarden tillader dog også komprimering, der ikke bruger DCT, men er bygget på basis af en lineær prædiktor (tabsfri, dvs. "tabsfri", JPEG), som garanterer en fuldstændig, bit-for-bit, match mellem originale og restaurerede billeder. Samtidig når kompressionsforholdet for fotografiske billeder sjældent 2, men det garanterede fravær af forvrængning er i nogle tilfælde efterspurgt. Mærkbart højere kompressionsforhold kan opnås ved brug af JPEG-LS kompressionsmetoden beskrevet af ISO/IEC 14495-1 , som på trods af ligheden i navne ikke er direkte relateret til JPEG ISO/IEC 10918-1 (ITU T.81 Recommendation) ) standard (ITU T.87 anbefaling).

Syntaks og struktur

En JPEG-fil indeholder en sekvens af markører , som hver begynder med en 0xFF-byte, der angiver begyndelsen af ​​markøren, og en identifikatorbyte. Nogle markører består kun af dette par af bytes, mens andre indeholder yderligere data, der består af et to-byte felt med længden af ​​informationsdelen af ​​markøren (inklusive længden af ​​dette felt, minus de to bytes i begyndelsen af ​​markøren 0xFF og identifikator) og selve dataene. Denne filstruktur giver dig mulighed for hurtigt at finde en markør med de nødvendige data (for eksempel længden af ​​linjen, antallet af linjer og antallet af farvekomponenter i det komprimerede billede).

Grundlæggende JPEG-markører [6]
Markør bytes Længde Formål Kommentarer
SÅ JEG 0xFFD8 Ingen Billedstart
SOF0 0xFFC0 variabel størrelse Rammestart (grundlæggende, DCT) Angiver, at billedet blev kodet i basistilstand ved hjælp af DCT- og Huffman-kode . Markøren indeholder antallet af linjer og længden af ​​billedlinjen (to-byte felter med en offset på henholdsvis 5 og 7 i forhold til begyndelsen af ​​markøren), antallet af komponenter (byte felt med en offset på 9 i forhold til begyndelsen af ​​markøren), er antallet af bits pr. komponent strengt taget 8 (bytefelt med en offset på 4 i forhold til begyndelsesmarkøren), såvel som forholdet mellem komponenter (f.eks. 4:2:0) .
SOF1 0xFFC1 variabel størrelse Start af ramme (udvidet, DCT, Huffman-kode) Angiver, at billedet blev kodet i udvidet tilstand ved hjælp af DCT- og Huffman-kode. Markøren indeholder antallet af linjer og linjelængden af ​​billedet, antallet af komponenter, antallet af bits pr. komponent (8 eller 12) og forholdet mellem komponenterne (f.eks. 4:2:0).
SOF2 0xFFC2 variabel størrelse Start af ramme (progressiv, DCT, Huffman-kode) Angiver, at billedet blev kodet i progressiv tilstand ved hjælp af DCT- og Huffman-kode. Markøren indeholder antallet af linjer og linjelængden af ​​billedet, antallet af komponenter, antallet af bits pr. komponent (8 eller 12) og forholdet mellem komponenterne (f.eks. 4:2:0).
DHT 0xFFC4 variabel størrelse Indeholder Huffman borde Angiver en eller flere Huffman-tabeller.
DQT 0xFFDB variabel størrelse Indeholder kvantiseringstabeller Angiver en eller flere kvantiseringstabeller.
DRI 0xFFDD 4 bytes Angiver længden af ​​genstartsintervallet Angiver afstanden mellem RST-markører n i makroblokke. I mangel af en DRI er forekomsten af ​​RST-markører n i den kodede datastrøm ulovlig og betragtes som en fejl. Hvis RST-markører n ikke bruges under kodning, bruges DRI-markøren enten slet ikke, eller gentagelsesintervallet i den er angivet som 0.
SOS 0xFFDA variabel størrelse Start scanning Begyndelsen af ​​den første eller næste scanning af billedet med bypass-retningen fra venstre mod højre fra top til bund. Hvis grundlæggende indkodningstilstand blev brugt, bruges en scanning. Ved brug af progressive tilstande bruges flere scanninger. SOS-markøren adskiller mellem de informative (header) og kodede (faktisk komprimerede data) dele af billedet.
RST n 0xFFDn _ Ingen genstart Genstartsmarkører bruges til at segmentere entropi-encoder-kodede data. I hvert segment afkodes dataene uafhængigt, hvilket gør det muligt at parallelisere afkodningsproceduren. Hvis de kodede data beskadiges under transmission eller lagring af en JPEG-fil, giver brugen af ​​genstartsmarkører dig mulighed for at begrænse tabet (makroblokke fra ubeskadigede segmenter vil blive gendannet korrekt). Indsat ved hver r'te makroblok, hvor r  er DRI-genstartsintervallet for markøren. Bruges ikke i mangel af en DRI-markør. n , lav 3 bit kodemarkør, cykler 0 til 7.
APP n 0xFFen _ variabel størrelse Indstillet efter applikation For eksempel bruger EXIF ​​af en JPEG-fil APP1-markøren til at gemme metadata i en TIFF - baseret struktur .
COM 0xFFFE variabel størrelse Kommentar Indeholder teksten til kommentaren.
EOI 0xFFD9 Ingen Slut på den kodede del af billedet.

Fordele og ulemper

Ulemperne ved JPEG-komprimering omfatter udseendet af karakteristiske artefakter på gendannede billeder ved høje kompressionsforhold : billedet er spredt i blokke på 8x8 pixels i størrelse (denne effekt er især mærkbar i billedområder med jævne ændringer i lysstyrke), i områder med høj rumlig frekvens (for eksempel på kontrastkonturer og grænser af billedet) artefakter vises i form af støjhaloer. JPEG-standarden (ISO/IEC 10918-1, Annex K, paragraf K.8) giver mulighed for brug af specielle filtre til at undertrykke blokartefakter, men i praksis bruges sådanne filtre, trods deres høje effektivitet, praktisk talt ikke.

På trods af manglerne er JPEG imidlertid blevet meget udbredt på grund af det ret høje (i forhold til de alternativer, der eksisterede på tidspunktet for dets fremkomst) kompressionsforhold, understøttelse af fuldfarve billedkomprimering og relativt lave beregningskompleksitet .

JPEG-komprimeringshastighed

For at fremskynde komprimeringsprocessen i henhold til JPEG-standarden anvendes traditionelt parallelisering af beregninger, især ved beregning af DCT. Historisk set blev et af de første forsøg på at fremskynde komprimeringsprocessen ved hjælp af denne tilgang beskrevet i en artikel fra 1993 af Kasperovich og Babkin [7] , som foreslog en original DCT-tilnærmelse, der gør effektiv parallelisering af beregninger mulig ved brug af 32-bit generelle formål. registre over Intel 80386-processorer . Mere kraftfulde computersystemer, der dukkede op senere, brugte SIMD - udvidelser af x86-arkitekturprocessorinstruktionssættet . Betydeligt bedre resultater kan opnås med ordninger, der bruger computeregenskaberne fra grafikacceleratorer ( NVIDIA CUDA og AMD FireStream-teknologier ) til at organisere parallel computing ikke kun for DCT, men også for andre stadier af JPEG-komprimering (farverumskonvertering, run-level, statistisk kodning osv.). ), og for hver blok af 8x8 kodet eller afkodet billede. Artiklen [8] præsenterede implementeringen af ​​parallelisering af alle stadier af JPEG-algoritmen ved hjælp af CUDA-teknologi, som markant øgede hastigheden af ​​kompression og afkodning i henhold til JPEG-standarden.

Se også

Noter

  1. Oxford Dictionary . Hentet 11. november 2014. Arkiveret fra originalen 11. november 2014.
  2. Emma Woollacott. Digital ark har til formål at bevare døde  dataformater . TG Daily (21. maj 2010). Hentet 1. september 2016. Arkiveret fra originalen 6. juni 2017.
  3. I overensstemmelse med GOST 34.003-90 inden for informationsteknologi er dette udtryk maskulint
  4. ISO/IEC 10918-1 : 1993(E) s.28 (link ikke tilgængeligt) . Arkiveret fra originalen den 22. august 2011. 
  5. Kerr, Douglas A. "Chrominance Subsampling in Digital Images" . Hentet 27. maj 2010. Arkiveret fra originalen 24. februar 2021.
  6. ISO/IEC 10918-1 : 1993(E) s.36 (link ikke tilgængeligt) . Arkiveret fra originalen den 22. august 2011. 
  7. Kasperovich, LV, Babkin, VF "Hurtig diskret cosinustransformationstilnærmelse til JPEG-billedkomprimering" . Hentet 3. oktober 2017. Arkiveret fra originalen 15. juni 2018.
  8. "Brug af CUDA-teknologi til hurtigt at komprimere JPEG-billeder" . Hentet 3. december 2012. Arkiveret fra originalen 30. marts 2013.

Links