Zweiter Teil:
Jedes Raster- Bild kann in Form einer zweidimensionalen Matrixdargestellt werden. Wenn es um Farben geht, kann die Idee weiterentwickelt werden, indem man das Bild in Form einer dreidimensionalen Matrixbetrachtet, in der zusĂ€tzliche Dimensionen zur Speicherung von Daten fĂŒr jede der Farben verwendet werden.
Wenn wir die resultierende Farbe als Kombination der sogenannten PrimĂ€rfarben (Rot, GrĂŒn und Blau) betrachten, definieren wir in unserer dreidimensionalen Matrix drei Ebenen: die erste fĂŒr die rote Farbe, die zweite fĂŒr die grĂŒne und die letzte fĂŒr die blaue.
Wir nennen jeden Punkt in dieser Matrix Pixel (Bildelement). Jeder Pixel enthĂ€lt Informationen ĂŒber die IntensitĂ€t (in der Regel in Form eines numerischen Wertes) jeder Farbe. Zum Beispiel, ein roter Pixel bedeutet, dass er 0 grĂŒnes, 0 blaues und maximal rotes Licht enthĂ€lt. Ein Pixel in Rosa kann durch eine Kombination aus drei Farben hergestellt werden. Unter Verwendung eines Zahlenbereichs von 0 bis 255 wird ein rosa Pixel definiert als Rot = 255, GrĂŒn = 192 und Blau = 203.
Der Artikel wurde mit UnterstĂŒtzung von EDISON veröffentlicht.Wir entwickeln , sowie beschĂ€ftigen wir uns mit .
Alternativen zur Kodierung von Farbbildern
Es gibt viele andere Modelle zur Darstellung der Farben, aus denen das Bild besteht. Zum Beispiel kann eine indizierte Palette verwendet werden, bei der nur ein Byte zur Darstellung jedes Pixels benötigt wird, anstelle von drei, die bei der Verwendung des RGB-Modells erforderlich sind. In einem solchen Modell kann eine 2D-Matrix anstelle einer 3D-Matrix zur Darstellung jeder Farbe verwendet werden. Dies spart Speicher, bietet jedoch eine geringere Farbpalette.

RGB
Zum Beispiel, sehen Sie sich das Bild unten an. Das erste Gesicht ist vollstĂ€ndig gefĂ€rbt. Die anderen sind die roten, grĂŒnen und blauen Ebenen (die IntensitĂ€t der entsprechenden Farben wird in Graustufen angezeigt).

Wir sehen, dass die Rottöne im Original an den gleichen Stellen vorkommen, an denen die hellsten Teile des zweiten Gesichts sichtbar sind. WĂ€hrend der Beitrag der blauen Farbe hauptsĂ€chlich nur in den Augen von Mario (letztes Gesicht) und in den Elementen seiner Kleidung sichtbar ist. Achten Sie darauf, wo alle drei FarbflĂ€chen den geringsten Einfluss haben (die dunkelsten Teile der Bilder) â das sind die Schnurrhaare von Mario.
FĂŒr die Speicherung der IntensitĂ€t jeder Farbe ist eine bestimmte Anzahl von Bits erforderlich â dieser Betrag wird genannt Farbtiefe. Angenommen, es werden 8 Bits (basierend auf dem Wert von 0 bis 255) fĂŒr eine FarbflĂ€che verwendet. Dann haben wir eine Farbtiefe von 24 Bit (8 Bit * 3 FlĂ€chen R/G/B).
Ein weiteres Merkmal eines Bildes ist die Auflösung, die die Menge an Pixeln in einer Dimension darstellt. Oft wird es als Breite à Höheangegeben, wie unten im Beispielbild 4 mal 4.

Ein weiteres Merkmal, mit dem wir bei der Arbeit mit Bildern/Videos zu tun haben, ist das SeitenverhĂ€ltnis, das die ĂŒbliche proportionale Beziehung zwischen der Breite und der Höhe eines Bildes oder Pixels beschreibt.
Wenn gesagt wird, dass ein Film oder Bild die GröĂe 16 zu 9 hat, bezieht man sich normalerweise auf das SeitenverhĂ€ltnis des Displays (DAR â von Display-SeitenverhĂ€ltnis). Manchmal können jedoch unterschiedliche Formen einzelner Pixel auftreten â in diesem Fall sprechen wir von dem PixelverhĂ€ltnis (PAR â von Pixel-SeitenverhĂ€ltnis).


FĂŒr die Hausfrau zur Kenntnisnahme: DVD entspricht DAR 4 zu 3
Obwohl die tatsĂ€chliche Auflösung der DVD 704Ă480 betrĂ€gt, bleibt sie dennoch im SeitenverhĂ€ltnis 4:3, da PAR den Wert 10:11 hat (704Ă10 / 480Ă11).
Und schlieĂlich können wir das Video als eine Sequenz von n Bildern ĂŒber einen Zeitraum Zeitdefinieren, das als zusĂ€tzliche Dimension betrachtet werden kann. Und n das ist dann die Bildfrequenz oder die Anzahl der Bilder pro Sekunde (FPS â von Frames pro Sekunde).

Die Anzahl der Bits pro Sekunde, die zur Anzeige von Video erforderlich sind, ist die Bitrate â Bitrate = Breite * Höhe * Farbtiefe * Bilder pro Sekunde.
Zum Beispiel benötigt ein Video mit 30 Bildern pro Sekunde, 24 Bits pro Pixel und einer Auflösung von 480Ă240 82.944.000 Bits pro Sekunde oder 82,944 Mbit/s (30x480x240x24) â aber nur, wenn keine Komprimierungsmethoden verwendet werden.
Wenn die Bitrate
fast konstant ist , wird sie alskonstante Bitrate CBR (konstante Bitrate â von ). Aber sie kann auch variieren, in diesem Fall nennt man sievariable Bitrate variabler Ăbertragungsrate (VBR â von variable Bitrate).
Dieses Diagramm zeigt ein begrenztes VBR, wenn nicht zu viele Bits bei einem vollstÀndig dunklen Bild verbraucht werden.

UrsprĂŒnglich entwickelten Ingenieure eine Methode, um die wahrgenommene Bildfrequenz eines Videodisplays zu verdoppeln, ohne zusĂ€tzliche Bandbreite zu verwenden. Diese Methode ist bekannt als interlaced video; im Wesentlichen sendet sie die HĂ€lfte des Bildschirms im ersten "Frame" und die andere HĂ€lfte im nĂ€chsten "Frame".
Derzeit erfolgt die Visualisierung von Szenen hauptsĂ€chlich unter Verwendung von Progressive Scan-Technologie. Dies ist eine Methode zur Anzeige, Speicherung oder Ăbertragung bewegter Bilder, bei der alle Linien jedes Frames nacheinander gezeichnet werden.

Nun, wir wissen jetzt, wie ein Bild in digitaler Form dargestellt wird, wie seine Farben strukturiert sind, wie viele Bits pro Sekunde benötigt werden, um Video anzuzeigen, je nach konstanter (CBR) oder variabler (VBR) Ăbertragungsrate. Wir haben das vorgegebene Auflösungsformat unter Verwendung einer bestimmten Bildwiederholfrequenz gelernt und uns mit vielen anderen Begriffen wie interlaced video, PAR und einigen anderen vertraut gemacht.
Entfernung von Redundanz
Es ist bekannt, dass unverĂ€ndertes Video nicht praktikabel ist. Ein einstĂŒndiges Video mit 720p Auflösung und 30 Frames pro Sekunde wĂŒrde 278 GB benötigen. Dies ergibt sich aus der Multiplikation von 1280 x 720 x 24 x 30 x 3600 (Breite, Höhe, Bits pro Pixel, FPS und Zeit in Sekunden).
Verwendung verlustfreien Kompressionsalgorithmen, wie DEFLATE (verwendet in PKZIP, Gzip und PNG), wird nicht zu einer signifikanten Reduzierung der benötigten Bandbreite fĂŒhren. Es mĂŒssen andere Methoden zur Videokompression gefunden werden.
Dazu können die Eigenschaften unseres Sehens genutzt werden. Wir unterscheiden Helligkeit besser als Farben. Sie können sich selbst davon ĂŒberzeugen, indem Sie dieses Bild betrachten.
Farbe, Helligkeit und unsere Augen
Unsere Augen sind empfindlicher gegenĂŒber Helligkeit als gegenĂŒber Farbe. Sie können dies selbst feststellen, indem Sie auf die linke BildhĂ€lfte schauen.

Wenn Sie nicht sehen, dass in der linken HÀlfte des Bildes die Farben der Quadrate sind A und B In der Tat sind sie gleich, und das ist normal. Unser Gehirn lenkt unsere Aufmerksamkeit mehr auf Licht-Schatten als auf Farbe. Auf der rechten Seite zwischen den markierten Quadraten gibt es eine Verbindung derselben Farbe - deshalb erkennen wir (d.h. unser Gehirn) leicht, dass es sich dort tatsÀchlich um dieselbe Farbe handelt.
Lassen Sie uns (vereinfacht) untersuchen, wie unsere Augen funktionieren. Das Auge ist ein komplexes Organ, bestehend aus vielen Teilen. Doch am meisten interessieren uns die Zapfen und StÀbchen. Das Auge enthÀlt etwa 120 Millionen StÀbchen und 6 Millionen Zapfen.
Betrachten wir die Wahrnehmung von Farbe und Helligkeit als separate Funktionen bestimmter Teile des Auges (in Wirklichkeit ist es etwas komplizierter, aber wir werden es vereinfachen). Die StĂ€bchen sind hauptsĂ€chlich fĂŒr die Helligkeit verantwortlich, wĂ€hrend die Zapfen fĂŒr die Farbe verantwortlich sind. Die Zapfen unterteilen sich in drei Typen, je nach dem enthaltenen Pigment: S-Zapfen (blau), M-Zapfen (grĂŒn) und L-Zapfen (rot).
Da wir deutlich mehr StĂ€bchen (Helligkeit) als Zapfen (Farbe) haben, lĂ€sst sich schlussfolgern, dass wir besser in der Lage sind, ĂbergĂ€nge zwischen Dunkelheit und Licht zu unterscheiden als Farben.
Funktionen der Kontrastempfindlichkeit
Forscher der experimentellen Psychologie und vieler anderer Bereiche haben viele Theorien zur menschlichen Wahrnehmung entwickelt. Eine davon nennt sich Funktionen der Kontrastempfindlichkeit. Sie sind mit rĂ€umlichem und zeitlichem Licht verbunden. Kurz gesagt, es geht darum, wie viele Ănderungen erforderlich sind, bevor der Beobachter sie bemerkt. Beachten Sie, dass das Wort âFunktionâ im Plural steht. Dies liegt daran, dass wir die Funktionen der Kontrastempfindlichkeit nicht nur fĂŒr SchwarzweiĂbilder, sondern auch fĂŒr Farbbilder messen können. Die Ergebnisse dieser Experimente zeigen, dass unsere Augen in den meisten FĂ€llen empfindlicher fĂŒr Helligkeit als fĂŒr Farbe sind.
Da bekannt ist, dass wir empfindlicher fĂŒr die Helligkeit eines Bildes sind, kann man versuchen, diesen Fakt zu nutzen.
Farbraummodell
Wir haben ein bisschen verstanden, wie man mit farbigen Bildern unter Verwendung des RGB-Schemas arbeitet. Es gibt auch andere Modelle. Es gibt ein Modell, das Helligkeit von Farbigkeit trennt und bekannt ist als YCbCr. Ăbrigens gibt es auch andere Modelle, die eine Ă€hnliche Trennung vornehmen, aber wir werden nur dieses betrachten.
In diesem Farbmodell Y â handelt es sich um eine Darstellung der Helligkeit, und es werden zwei FarbkanĂ€le verwendet: Cb (gesĂ€ttigtes Blau) und Cr (gesĂ€ttigtes Rot). YCbCr kann aus RGB gewonnen werden, ebenso ist eine Umwandlung möglich. Mit diesem Modell können wir Farbbilder erstellen, wie unten zu sehen ist:

Umwandlung zwischen YCbCr und RGB
Manche mögen einwenden: Wie ist es möglich, alle Farben zu erhalten, wenn GrĂŒn nicht verwendet wird?
Um diese Frage zu beantworten, wandeln wir RGB in YCbCr um. Wir nutzen die Koeffizienten, die im Standard BT.601, empfohlen vom Gremium ITU-R, festgelegt wurden. Dieses Gremium definiert Standards fĂŒr digitales Video. Zum Beispiel: Was ist 4K? Wie sollten Bildfrequenz, Auflösung und Farbmodell sein?
Zuerst berechnen wir die Helligkeit. Wir verwenden die von der ITU vorgeschlagenen Konstanten und ersetzen die RGB-Werte.
Y = 0.299R + 0.587G + 0.114B
Nachdem wir die Helligkeit erhalten haben, trennen wir blau und rot:
Cb = 0.564(B â Y)
Cr = 0.713(R â Y)
Und wir können auch zurĂŒckwandeln und sogar GrĂŒn mit YCbCr erzeugen:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y â 0.344Cb â 0.714Cr
In der Regel verwenden Displays (Monitore, Fernseher, Bildschirme usw.) nur das RGB-Modell. Aber dieses Modell kann unterschiedlich organisiert werden:

Farbsubsampling
Mit einem Bild, das als Kombination aus Helligkeit und Farbigkeit dargestellt wird, können wir die höhere Empfindlichkeit des menschlichen Sehvermögens fĂŒr Helligkeit im Vergleich zur Farbigkeit nutzen, wenn wir selektiv Informationen entfernen. Farbunterabtastung ist eine Methode zur Bildkodierung, die eine geringere Auflösung fĂŒr die Farbigkeit als fĂŒr die Helligkeit verwendet.

Wie sehr ist es zulÀssig, die Auflösung der Farbigkeit zu reduzieren?! Es gibt bereits einige Schemen, die beschreiben, wie man Auflösung und Verschmelzung verarbeitet (Endfarbe = Y + Cb + Cr).
Diese Schemen sind bekannt als Unterabtastungssysteme und werden in Form eines 3-fachen VerhĂ€ltnisses ausgedrĂŒckt â a:x:y, das die Anzahl der Abtastungen von Helligkeits- und Farbunterschiedssignalen definiert.
a â der Referenzwert fĂŒr die horizontale Abtastung (normalerweise 4)
x â die Anzahl der Abtastungen der Farbigkeit in der ersten Zeile der Pixel (horizontale Auflösung im VerhĂ€ltnis zu a)
y â die Anzahl der Ănderungen der Abtastungen der Farbigkeit zwischen der ersten und der zweiten Zeile der Pixel.
Eine Ausnahme bildet 4:1:0, die eine Abtastung der Farbigkeit in jedem Block von Helligkeitsauflösung 4 auf 4 gewÀhrleistet.
Allgemeine Schemen, die in modernen Codecs verwendet werden:
- 4:4:4 (ohne Subsampling)
- 4:2:2
- 4:1:1
- 4:2:0
- 4:1:0
- 3:1:1
YCbCr 4: 2: 0 â Beispiel fĂŒr eine ZusammenfĂŒhrung
Hier ist ein zusammengefĂŒhrter Bildausschnitt mit YCbCr 4:2:0. Beachten Sie, dass wir nur 12 Bit pro Pixel verwenden.
So sieht dasselbe Bild aus, das mit den Haupttypen der Farbsampling kodiert wurde. Die obere Reihe zeigt das endgĂŒltige YCbCr, die untere Reihe zeigt die Farbauflösung. Sehr ansehnliche Ergebnisse, wenn man die geringen QualitĂ€tsverluste berĂŒcksichtigt.

Erinnern Sie sich, dass wir 278 GB Speicherplatz fĂŒr eine einstĂŒndige Videodatei mit 720p Auflösung und 30 Bildern pro Sekunde berechnet haben? Wenn wir YCbCr 4:2:0 verwenden, wird die GröĂe halbiert â auf 139 GB. Bis jetzt ist das immer noch weit von einem akzeptablen Ergebnis entfernt.
Sie können ein YCbCr-Histogramm mit FFmpeg selbst erstellen. In diesem Bild ĂŒberwiegt Blau gegenĂŒber Rot, was auf dem Histogramm gut zu erkennen ist.

Farbe, Helligkeit, Farbpalette â VideoĂŒbersicht
Ich empfehle dieses groĂartige Video anzusehen. Es erklĂ€rt, was Helligkeit ist und bringt alles auf den Punkt. Ă© ĂŒber Helligkeit und Farbe.
Typen von Frames
Lassen Sie uns weitermachen. Versuchen wir, die zeitliche Redundanz zu beseitigen. Aber zuerst lassen Sie uns einige grundlegende Begriffe definieren. Angenommen, wir haben einen Film mit 30 Bildern pro Sekunde, hier sind die ersten 4 Bilder:

Wir können viele Wiederholungen in den Frames sehen: Zum Beispiel der blaue Hintergrund, der sich von Frame zu Frame nicht Àndert. Um dieses Problem zu lösen, können wir sie abstrakt in drei Frame-Typen klassifizieren.
I-Frame (IInter Frame)
Ein I-Frame (Referenzframe, SchlĂŒsselbild, interner Frame) ist autonom. UnabhĂ€ngig davon, was visualisiert werden muss, ist der I-Frame im Wesentlichen ein statisches Bild. Der erste Frame ist normalerweise ein I-Frame, wir werden jedoch regelmĂ€Ăig auch I-Frames unter denen sehen, die nicht die ersten Frames sind.

P-Frame (PPredicted Frame)
Ein P-Frame (vorhergesagter Frame) nutzt den Vorteil, dass das aktuelle Bild fast immer mit dem vorherigen Frame reproduziert werden kann. Im zweiten Frame besteht die einzige VerÀnderung darin, dass der Ball nach vorne rollt. Wir können Frame 2 einfach erhalten, indem wir Frame 1 leicht Àndern und nur die Unterschiede zwischen diesen Frames verwenden. Um Frame 2 zu erstellen, beziehen wir uns auf den vorhergehenden Frame 1.
â 
B-Bild (Bi-prÀdiktives Bild)
Und wie wĂ€re es mit Links nicht nur zu vergangenen, sondern auch zu zukĂŒnftigen Bildern, um eine noch bessere Kompression zu gewĂ€hrleisten?! Das ist im Wesentlichen das B-Bild (bidirektionales Bild).
â
â 
Zwischenausgabe
Diese Bildtypen werden verwendet, um die beste Kompression zu gewĂ€hrleisten. Wir werden uns im nĂ€chsten Abschnitt ansehen, wie das funktioniert. WĂ€hrenddessen bemerken wir, dass das I-Bild am meisten Speicherplatz benötigt, das P-Bild jedoch deutlich gĂŒnstiger ist, und dass das B-Bild die kostengĂŒnstigste Option fĂŒr Videos darstellt.

Zeitliche Redundanz (interframe Vorhersage)
Lassen Sie uns untersuchen, welche Möglichkeiten wir haben, zeitliche Wiederholungen zu minimieren. Diese Art von Redundanz lösen wir durch gegenseitige Vorhersagemethoden.
Wir versuchen, so wenige Bits wie möglich zur Kodierung der Bildsequenzen 0 und 1 zu verwenden.

Wir können subtrahieren, indem wir einfach Bild 1 von Bild 0 abziehen. Wir erhalten Bild 1, indem wir die Differenz zwischen ihm und dem vorherigen Bild verwenden und tatsÀchlich nur den resultierenden Rest kodieren.

Aber was ist, wenn ich Ihnen sage, dass es noch eine bessere Methode gibt, die noch weniger Bits verwendet?! Lassen Sie uns zunĂ€chst Bild 0 in ein klares Raster aus Blöcken unterteilen. Dann versuchen wir, die Blöcke aus Bild 0 mit Bild 1 abzugleichen. Anders ausgedrĂŒckt, wir bewerten die Bewegung zwischen den Bildern.
Aus Wikipedia â Blockbasierte Bewegungskompensation
Die blockbasierte Bewegungskompensation unterteilt das aktuelle Bild in nicht ĂŒberlappende Blöcke, und der Bewegungskompensationsvektor gibt an, woher die Blöcke kommen (ein weit verbreiteter Irrtum ist, dass das vorherige Bild in nicht ĂŒberlappende Blöcke unterteilt wird, und die Bewegungskompensationsvektoren angeben, wohin diese Blöcke gehen. TatsĂ€chlich ist es umgekehrt: nicht das vorherige Bild wird analysiert, sondern das folgende; es wird ermittelt, wo die Blöcke herkommen und nicht, wohin sie sich bewegen). In der Regel ĂŒberlappen sich die Ausgangsblöcke im ursprĂŒnglichen Bild. Einige Video-Komprimierungsalgorithmen stellen das aktuelle Bild aus Teilen nicht nur eines, sondern gleich mehrerer zuvor ĂŒbertragenen Bilder zusammen.

Im Evaluierungsprozess sehen wir, dass sich die Kugel von (x=0, y=25) nach (x=6, y=26) bewegt, die Werte x und y definieren die Bewegungsrichtung. Ein weiterer Schritt, den wir unternehmen können, um die Bits zu erhalten, besteht darin, nur die Differenz der Bewegungsvektoren zwischen der letzten Position des Blocks und der prognostizierten Position zu kodieren, sodass der endgĂŒltige Bewegungsvektor (x=6-0=6, y=26-25=1) sein wird.
In einer realen Situation wĂŒrde dieser Ball in n Blöcke unterteilt werden, aber das Ă€ndert nichts am Wesentlichen.
Objekte im Bild bewegen sich in drei Dimensionen, daher kann der Ball beim Bewegen visuell kleiner (oder gröĂer, wenn er sich auf den Betrachter zubewegt) erscheinen. Es ist normal, dass es keine perfekte Ăbereinstimmung zwischen den Blöcken gibt. Hier sehen wir eine kombinierte Ansicht unserer SchĂ€tzung und der realen Szene.

Aber wir sehen, dass bei der Anwendung der Bewegungsbewertung die Daten zum Kodieren deutlich weniger sind als bei der Verwendung einer einfacheren Methode zur Berechnung der Delta-Werte zwischen den Frames.

Wie wird die echte Bewegungskompensation aussehen?
Diese Methode wird sofort auf alle Blöcke angewendet. Oft wird unser hypothetischer bewegender Ball sofort in mehrere Blöcke aufgeteilt.

Sie können diese Konzepte selbst ausprobieren, indem Sie .
Um die Bewegungsvektoren zu sehen, können Sie ein Video mit externer Vorhersage erstellen mithilfe von .

Alternativ können Sie auch (es ist kostenpflichtig, aber es gibt eine kostenlose Testversion, die nur die ersten zehn Frames begrenzt).

RĂ€umliche Redundanz (interne Vorhersage)
Wenn wir jedes Frame im Video analysieren, entdecken wir zahlreiche miteinander verbundene Bereiche.

Lassen Sie uns dieses Beispiel durchgehen. Diese Szene besteht hauptsĂ€chlich aus blauen und weiĂen Farben.

Dies ist der I-Frame. Wir können die vorherigen Frames zur Vorhersage nicht verwenden, aber wir können ihn komprimieren. Lassen Sie uns die Auszeichnung des roten Blocks kodieren. Wenn wir uns seine Nachbarn ansehen, stellen wir fest, dass es um ihn herum einige Farbtrends gibt.

Wir nehmen an, dass die Farben im Frame vertikal verlaufen. Das bedeutet, dass die Farben unbekannter Pixel Werte ihrer Nachbarn enthalten werden.

Diese Vorhersage kann auch falsch sein. Aus diesem Grund mĂŒssen wir diese Methode (interne Vorhersage) anwenden und dann die tatsĂ€chlichen Werte subtrahieren. Dadurch erhalten wir einen Restblock, was zu einer viel kompakteren Matrix im Vergleich zum Original fĂŒhren wird.

Wenn Sie an internen Vorhersagen arbeiten möchten, können Sie mit ffmpeg Videos mit Makroblöcken und deren Vorhersagen erstellen. Um die Bedeutung jeder Blockfarbe zu verstehen, mĂŒssen Sie sich mit der ffmpeg-Dokumentation vertraut machen.

Alternativ können Sie den Intel Video Pro Analyzer verwenden (wie ich bereits erwĂ€hnt habe, gibt es in der kostenlosen Testversion eine Begrenzung auf die ersten 10 Frames, aber das sollte fĂŒr die ersten Schritte ausreichen).

Zweiter Teil:
Quelle: habr.com



