Waarom digitale compressie ?

IP Camera

Een 5 megapixel IP camera heeft een beeldsensor met 2592 x 1944 pixels (hxv).
Eén afbeelding bevat - 5.038.848 – afgerond 5 miljoen pixels in rood, groen of blauw.

Zetten we de pixelwaarde om in een 8-bit getal, dan is de afbeelding 5 miljoen bytes of 5 Megabyte (5 MB).

Verwerkt de camera 25 beelden per seconde, dan vergroten het aantal bits tot een volume van 125 Megabyte/s (MB/s) of 1024 megabit per seconde.

Is dat veel ?

Een harde schijf met capaciteit van 4 TB  (4.000.000 MB) is aan dit tempo in minder dan 9 uur volgeschreven (8u53m).
Eén camera met slechts 9 uur beeldopname ?
Wij streven naar 16 camera’s en een dagenlange opname !

 

CVBS camera

Het analoge composiet video signaal in kleur bestaat uit een luminantie signaal en de kleurencomponent in een draaggolf van 4,43 MHz.
Het signaal bemonsteren aan de dubbele snelheid vereist een bemonsteringsfrequentie van 8,86 MHz (8.860.000 Hz) ofwel 8.860.000 samples per seconde.

Met 8 bits per sample is de bitrate 70,88 Mega bit per seconde, afgerond 70 Mbit/s (Mbps); omgerekend is dat 8,86 Megabyte per seconde (MB/s)

Is dat veel ?

Met de email provider Gmail kan je een bijlage versturen met een bestandsgrootte van maximaal 25 MB.
Via email kan je dus een filmpje van 2,8 seconden doorsturen.
Wij streven naar live streaming van 9 camera's tegelijk aan 25 beelden per seconde.

Beide voorbeelden tonen aan dat digitale beeldcompressie noodzakelijk is om de beelddata vlot te kunnen verwerken in streaming en in opslag.

 

JPEG beeldcompressie

JPEG is een compressietechniek die de grootte van het bestand (file size) enorm verkleint met behoud van een maximale beeldkwaliteit.

JPEG is een lossy beeldcompressie. Dit betekent dat een deel van de beeldinformatie verloren gaat bij het comprimeren.
De beelddata die verloren gaat is echter die informatie die we het minst missen.

JPEG compressie blokschema 1080

JPEG beeldcompressie volgt een aantal stappen die we verder uitdiepen.

Kleurendomein transformatie (Colour Space Transformation)

RGB naar YCrCb

De eerste stap is de kleurenconversie.
De RGB waarden worden omgezet naar Y Cb Cr in een lineaire transformatie.

Aangezien het menselijk oog veel gevoeliger is voor variaties in helderheid dan voor variaties in kleur,
kan een videosysteem geoptimaliseerd worden door meer bandbreedte te besteden aan de luma-component (Y) dan aan de kleurverschil-componenten (Cb en Cr).

De luma component Y, geeft de waarde weer van de lichtintensiteit, en is de som van R + G + B.
De chroma componenten Cb bevat de helft aan blauw, minder rood en minder groen.
De component Cr bevat de helft aan rood, minder groen en minder blauw.

Chroma sub-sampling

Een volgende stap is een chroma sub-sampling.

Chroma subsampling reduceert de kleurinformatie door er slechts een deel van te behouden.

Elke Y heeft een Cb en Cr.
In een 4:2:2 chroma sub-sampling behouden we slechts de helft van het aantal Cb en Cr's.
De hoeveelheid te verwerken data daalt met een derde.

In een 4:2:0 chroma sub-sampling behouden we slechts één op vier CB/Cr's
en daalt de te verwerken hoeveelheid data met de helft.

Chroma sub-sampling is een lossy beeldcompressietechniek.
Het weglaten van de minder belangrijke beeldinformatie leidt tot een grote reductie van de te verwerken gegevens.

Het camerabeeld wordt door de beeldsensor omgezet naar een matrix met data voor Y, naar een datagrid voor Cb en een puntenraster voor Cr.

***  JPEG beeldcompressie start vanaf hier

 

Blokken

JPEG DCT zoom detail

JPEG compressie vertrekt vanaf de de datagrid die door de beeldprocessor in de camera werd omgezet naar datagrids voor Y, CB en Cr.
De compressie voor Y, Cb of Cr is gelijkaardig. In ons voorbeeld volgen we decompressie van de Y component.

JPEG compressie neemt de volledige data grid en groepeert de data matrix in blokken van 8 op 8.

JPEG DCT 8x8 block

De afbeelding hierboven toont één zo'n grid. De grijswaarden visualiseren de Y-waarden.
De luma Y-waarden variëren tussen 16 voor zwart en 235 voor wit (8-bit).

Noot : we vertrekken van een 8x8 datagrid.
JPEG kent ook varianten die na een 4:2:2 chroma sub-sampling een grid van 16x16 nemen
en bij de 4:2:0 sub-sampling overgaan tot een grid van 16x16.

Nivellering

JPEG input block 128 shifted block

Elk makro blok bevat 64 waarden voor de intensiteit Y, variërend van de waarde 0  tot 253 (8-bit) waarbij zwart gelijk is aan 16 en wit gelijks is aan 235.

Door alle waarden te verminderen met 128, creëren we een nulpunt.
De waarden van de intensiteit Y variëren nu tussen [-128 en 127].

Discrete cosinus transformatie

(zie ook DCT Wiskunde)

DCT Auv sigma 8x8

De volgende stap transformaren we alle cijfers met een discrete cosinus transformatie.

De discrete cosinustransformatie (DCT) is een transformatietechniek uit de numerieke wiskunde.

De transformatie zet een rij data om in een som van cosinussen met verschillende frequenties.

JPEG Shifted DCT2 coefficients

De waarden linksboven is veel groter dan alle andere waarden en wordt de DC-coëfficiënt genoemd.
Het is de som van alle 64 cijfers in de matrix.
De overige 63 waarden, met de kleinste in de hoek rechts onderaan, zijn de AC-coëfficiënten.
De waarden linksonder is de kleinste waarde. Het is de som van alle 64 cijfers maximaal gedeeld door 64 cijfers (vermenigvuldig met 64 cijfers <1)

Kwantisatie

JPEG coefficients table quantized

Vervolgens bewerken we de cosinus getransformeerde waarden met een kwantisatietabel.

Deze tabel is een gestandaardiseerd en bevat getallen die overeenkomen met een kwaliteit van compressie.

Bij de kwantisatie delen we elke element (coëfficient van vorige DCT) uit de linker tabel door het corresponderende element uit de kwantisatietabel.
Bij de deling ronden we het getal af naar het dichtstbijzijnde geheel getal.

Het resultaat van de bewerking is dat de waarden verkleinen naar kleine getallen (1 tot 2 digits) die in digitale vorm weinig plaats innemen.
De waarden die ontstonden door de som van cosinussen met hoge frequentie worden herleid tot 0.

JPEG is een lossy beeldcompressie. Dit komt door de afronding naar het dichtstbijzijnde geheel getal.

Zigzag

JPEG DCT zigzag

Na deze kwantisatie bevat het blok rechts en onderaan véél nullen voor de regio’s met een hoge ruimtelijke frequentie.

Het 8x8x blok lezen we in de vorm van een slang waarbij alle nullen achteraan worden geordend.

Run-Length encoding

Met run-length encoding coderen we een string als een code.
Twintig nullen achter elkaar … 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 … wordt dan ‘repeat(0, 20)’

Entropy encoding of Huffmann coding.

Vervolgens encoderen we de meest frequente waarden met minder bits en de minder frequente waarden met meer bits.
Entropy encoding of Huffmann coding.

Noot :Run-length en Huffman zijn loss-less compressie methodes (er gaat géén data verloren).

 

Decodering

Bij de decodering van het beeld, voeren we al deze stappen in omgekeerde richting uit.
De discrete cosinus transformatie type 2 wordt omgekeerd : DCT type 3.

Omdat bepaalde informatie is verloren gegaan door afrondingen in de kwantisatie,
is de gereconstrueerde afbeelding niet meer identiek aan het origineel.

Bijna zo goed als het origineel als een redelijke compressie niveau wordt gebruikt.
Bijna zo goed als het origineel, bekeken vanop een afstand.
Zoomen we in op het digitale beeld dan ontdek je de gekartelde overgangen.

 

Compressie randverschijnselen duiken op bij een hoge compressie graad.

JPEG heeft de grootste moeite met scherpe overgangen, zoals bij de letters op een nummerplaat.

De hoge frequentie component in de scherpe contrasterende lijn van de letter worden te sterk gecomprimeerd.

 

Brengt het iets op ?

 

JPEG DCT grey

Beeldwaarden worden gemanipuleerd en afgerond tot nul om ze te kunnen verwaarlozen.
Maar even zo vaak is de beelinformatie in de 8x8 grid uniform in helderheid.

[50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,50, 50, 50, 50, 50, 50,50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50,50, 50, 50, 50, 50, 50,50, 50, 50, 50, 50, 50, 50, 50, 50, 50]

64 grijze vakjes met waarde 50 noteren we digitaal als :

[50+63x0].