2008-08-07 6 views
14

Ich habe eine Bild/Video-Transformation Technik namens diskrete Cosinus-Transformation implementiert. Diese Technik wird bei der MPEG-Videokodierung verwendet. Ich basierte meinen Algorithmus auf den Ideen unter folgenden URL präsentiert:Videokompression: Was ist eine diskrete Kosinustransformation?

http://vsr.informatik.tu-chemnitz.de/~jan/MPEG/HTML/mpeg_tech.html

Jetzt kann ich einen 8x8 Abschnitt eines Schwarz-Weiß-Bild verwandeln, wie zum Beispiel:

 
0140 0124 0124 0132 0130 0139 0102 0088 
0140
0143 0126 0126 0133 0134 0138 0081 0082 
0148 0126 0128 0136 0137 0134 0079 0130 
0147 0128 0126 0137 0138 0145 0132 0144 
0147 0131
0142 0135 0122 0137 0140 0138 0143 0112 
0140 0138 0125 0137 0140 0140 0148 0143 

In diesen einem Bild mit allen wichtigen Informationen oben rechts. Der transformierte Block sieht so aus:

 
1041 0039 -023 0044 0027 0000 0021 -019 
-050 0044 -029 0000 0009 -014 0032 -010 
0000 0000 0000 0000 -018 0010 -017 0000 
0014 -019 0010 0000 0000 0016 -012 0000 
0010 -010 0000 0000 0000 0000 0000 0000 
-016 0021 -014 0010 0000 0000 0000 0000 
0000 0000 0000 0000 0000 0000 0000 0000 
0000 0000 -010 0013 -014 0010 0000 0000 

Jetzt muss ich wissen, wie kann ich diese Transformation nutzen? Ich möchte andere 8x8-Blöcke in demselben Bild (oder einem anderen Bild) erkennen, die eine gute Übereinstimmung darstellen.

Auch, was gibt mir diese Transformation? Warum sind die oben rechts im konvertierten Bild gespeicherten Informationen wichtig?

Antwort

1

Wenn ich mich richtig erinnere, ermöglicht Ihnen diese Matrix, die Daten in einer komprimierten Datei zu speichern.

Wenn Sie weiter unten lesen, finden Sie das Zick-Zack-Muster der Daten aus dieser endgültigen Matrix zu lesen. Die wichtigsten Daten befinden sich in der oberen linken Ecke und am wenigsten wichtig in der unteren rechten Ecke. Wenn Sie also irgendwann aufhören zu schreiben und den Rest nur als 0 betrachten, erhalten Sie eine verlustreiche Annäherung an das Bild, auch wenn dies nicht der Fall ist.

Die Anzahl der weggeworfenen Werte erhöht die Komprimierung auf Kosten der Bildtreue.

Aber ich bin sicher, dass jemand anderes Ihnen eine bessere Erklärung geben kann.

14

Das Ergebnis einer DCT ist eine Transformation der ursprünglichen Quelle in die Frequenzdomäne. Der obere linke Eintrag speichert die "Amplitude", die "Basis" -Frequenz und die Frequenz nimmt sowohl entlang der horizontalen als auch der vertikalen Achse zu. Das Ergebnis der DCT ist normalerweise eine Sammlung von Amplituden bei den üblicheren niedrigeren Frequenzen (der obere linke Quadrant) und weniger Einträge bei den höheren Frequenzen. Wie Lassevk erwähnt, ist es üblich, diese höheren Frequenzen einfach zu Null, da sie in der Regel sehr kleine Teile der Quelle darstellen. Dies führt jedoch zu einem Informationsverlust. Um die Komprimierung zu vervollständigen, ist es üblich, eine verlustfreie Komprimierung über die DCT-Quelle zu verwenden. Dies ist der Punkt, an dem die Komprimierung einsetzt, da alle Nullenfolgen zu fast nichts gepackt werden.

Ein möglicher Vorteil der Verwendung der DCT, um ähnliche Regionen zu finden, besteht darin, dass Sie eine Übereinstimmung des ersten Durchgangs bei niederfrequenten Werten (obere linke Ecke) vornehmen können. Dies verringert die Anzahl der Werte, mit denen Sie übereinstimmen müssen. Wenn Sie Übereinstimmungen mit niedrigen Frequenzwerten finden, können Sie die höheren Frequenzen vergleichen.

hoffe, das hilft

1

ich eine Kopie von Digital Video Compression Aufnehmen würde empfehlen - es ist eine wirklich gute Übersicht über Kompressionsalgorithmen für Bilder und Videos.

4

Ich habe alles über DCT von The Data Compression Book gelernt. Neben einer großartigen Einführung in das Gebiet der Datenkomprimierung hat es ein Kapitel über die verlustbehaftete Bildkomprimierung, die JPEG und die DCT einführt.

1

Anthony Cramps Antwort sah gut aus.Wie er erwähnt, transformiert die DCT die Daten in den Frequenzbereich. Die DCT wird stark in der Videokompression verwendet, da das menschliche visuelle System weniger empfindlich auf Hochfrequenzänderungen reagieren muss. Daher führt das Nullstellen der höheren Frequenzwerte zu einer kleineren Datei, mit geringer Auswirkung auf die Wahrnehmung der Videoqualität durch einen Menschen.

In Bezug auf die Verwendung der DCT, um Bilder zu vergleichen, denke ich, der einzige wirkliche Vorteil ist, wenn Sie die höheren Frequenzdaten wegschneiden und daher eine kleinere Menge von Daten zu suchen/übereinstimmen haben. Etwas wie Harr-Wavelets kann bessere Ergebnisse bei der Bildanpassung liefern.

2

Die Konzepte, die diesen Transformationen zugrunde liegen, lassen sich leichter erkennen, wenn man zuerst einen eindimensionalen Fall betrachtet. Das Bild here zeigt eine Rechteckwelle zusammen mit mehreren der ersten Terme einer unendlichen Reihe. Betrachten Sie es, beachten Sie, dass, wenn die Funktionen für die Begriffe addiert werden, beginnen sie, sich der Form der Rechteckwelle anzunähern. Je mehr Begriffe Sie addieren, desto besser ist die Annäherung. Um jedoch von einer Annäherung an das genaue Signal zu kommen, müssen Sie eine unendliche Anzahl von Termen summieren. Der Grund dafür ist, dass die Rechteckwelle diskontinuierlich ist. Wenn Sie an eine Rechteckwelle als Funktion der Zeit denken, geht sie in der Zeit von -1 auf 1 über. Um so etwas darzustellen, bedarf es einer unendlichen Reihe. Sehen Sie sich die Handlung der Serienbegriffe noch einmal an. Der erste ist rot, der zweite gelb. Aufeinanderfolgende Begriffe haben mehr "auf und ab" Übergänge. Diese sind von der zunehmenden Häufigkeit jedes Begriffs. Wenn man mit der Rechteckwelle als Funktion der Zeit und jedem Serienglied eine Funktion der Frequenz hält, gibt es zwei äquivalente Darstellungen: eine Funktion der Zeit und eine Funktion der Frequenz (1/Zeit).

In der realen Welt gibt es keine Rechteckwellen. Nichts passiert in der Zeit Null. Audiosignale belegen beispielsweise den Bereich 20 Hz bis 20 kHz, wobei Hz 1/Zeit ist. Solche Dinge können mit endlichen Reihen dargestellt werden.

Für Bilder, die Mathematik sind die gleichen, aber zwei Dinge sind unterschiedlich. Erstens ist es zweidimensional. Zweitens macht der Begriff der Zeit keinen Sinn. Im 1D-Sinn ist die Rechteckwelle lediglich eine Funktion, die einen numerischen Wert für ein Argument gibt, von dem wir sagten, es sei Zeit. Ein (statisches) Bild ist eine Funktion, die einen numerischen Wert für jedes Zeilenpaar, Spalten-Indices, liefert. Mit anderen Worten, das Bild ist eine Funktion eines 2D-Raums, der ein rechteckiger Bereich ist. Eine solche Funktion kann in ihrer räumlichen Häufigkeit dargestellt werden. Um zu verstehen, welche räumliche Frequenz vorliegt, betrachten Sie ein 8-Bit-Graustufenbild und ein Paar benachbarter Pixel. Der steilste Übergang, der im Bild auftreten kann, reicht von 0 (sagen wir schwarz) bis 255 (sagen wir weiß) über die Entfernung von 1 Pixel. Dies entspricht direkt dem höchsten (letzten) Term einer Seriendarstellung.

Eine zweidimensionale Fourier (oder Cosinus) -Transformation des Bildes führt zu einem Array von Werten derselben Größe wie das Bild, das die gleiche Information nicht als Funktion des Raums, sondern als Funktion von 1/Raum darstellt. Die Information wird von der niedrigsten zur höchsten Frequenz entlang der Diagonalen von der höchsten Zeilen- und Spaltenindizes des Ursprungs angeordnet. Ein Beispiel ist here.

Für die Bildkomprimierung können Sie ein Bild transformieren, einige höhere Terme verwerfen und die verbleibenden zurück in ein Bild umwandeln, das weniger Details aufweist als das Original. Obwohl es in ein Bild der gleichen Größe zurück transformiert wird (wobei die entfernten Terme durch Null ersetzt werden), nimmt es im Frequenzbereich weniger Platz ein.

Eine andere Möglichkeit, es zu betrachten, ist das Reduzieren eines Bildes auf eine kleinere Größe. Wenn Sie zum Beispiel versuchen, die Größe eines Bildes zu reduzieren, indem Sie drei von vier Pixeln in einer Reihe und drei von vier Reihen wegwerfen, haben Sie ein Array von 1/4 der Größe, aber das Bild wird schrecklich aussehen. In den meisten Fällen wird dies mit einem 2D-Interpolator erreicht, der neue Pixel erzeugt, indem rechteckige Gruppen der größeren Bildpixel gemittelt werden. Die Interpolation wirkt sich dabei ähnlich aus, indem sie Terme in der Frequenzdomäne wegwirft, nur ist sie viel schneller zu berechnen.

Um mehr Dinge zu tun, werde ich auf eine Fourier-Transformation als ein Beispiel beziehen. Eine gute Diskussion des Themas wird zeigen, wie die Fourier-Cosinus-Transformation zusammenhängt. Die Fourier-Transformation eines Bildes kann nicht direkt als solche betrachtet werden, da sie aus komplexen Zahlen besteht. Es ist bereits in zwei Arten von Informationen unterteilt, die realen und imaginären Teile der Zahlen. Normalerweise sehen Sie Bilder oder Diagramme von diesen. Aber es ist (normalerweise) sinnvoller, die komplexen Zahlen in ihre Größe und ihren Phasenwinkel zu trennen. Dies nimmt einfach eine komplexe Zahl auf der komplexen Ebene und schaltet auf Polarkoordinaten um.

Denken Sie für das Audiosignal an die kombinierten Funktionen sin und cosine, die in ihren Argumenten eine zusätzliche Größe verwenden, um die Funktion hin und her zu verschieben (als Teil der Signaldarstellung). Für ein Bild beschreibt die Phaseninformation, wie jeder Term der Reihe in Bezug auf die anderen Terme im Frequenzraum verschoben ist. In Bildern sind die Kanten (hoffentlich) so deutlich, dass sie durch die niedrigst frequenten Terme im Frequenzbereich gut charakterisiert sind. Dies geschieht nicht, weil sie abrupte Übergänge sind, sondern weil sie z. viel schwarzer Bereich neben viel hellerem Bereich. Betrachten Sie eine eindimensionale Scheibe einer Kante. Die Graustufe ist Null, geht dann nach oben und bleibt dort. Visualisiere die Sinuswelle, die der erste Approximationsterm wäre, wo sie den Mittelpunkt des Signalübergangs bei sin (0) kreuzt. Der Phasenwinkel dieses Ausdrucks entspricht einer Verschiebung im Bildraum. Eine gute Illustraion davon ist verfügbar here. Wenn Sie versuchen, Formen zu finden und eine Referenzform zu erstellen, ist dies eine Möglichkeit, sie zu erkennen.