203 lines
12 KiB
HTML
203 lines
12 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html>
|
|
<head>
|
|
<title>2D-Transformation - Bildkompression mittels Wavelet-Transformation</title>
|
|
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
|
<meta name='keywords' content='Wavelet-Kompression, Wavelet-Transformation, Applet' />
|
|
<link rel='stylesheet' type='text/css' href='stylesheet.css' media='all' />
|
|
</head>
|
|
|
|
<body>
|
|
<table class="nav">
|
|
<tr>
|
|
<td style="text-align: left"><a href="wavelet-transformation.html">« Wavelet-Transformation</a></td>
|
|
<td style="text-align: center"><a href="index.html">Inhaltsverzeichnis</a></td>
|
|
<td style="text-align: right"><a href="fehler.html">Fehlermaß und Kompressionsgrad »</a></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>2D-Wavelet-Transformation mittels Haar-Wavelet</h2>
|
|
|
|
<h3 id="transformation">Transformation</h3>
|
|
<p>
|
|
Die zu transformierenden Daten werden in jedem Schritt in nebeneinander stehende 2-Tupel aufgeteilt und anschließend Mittelwert und Abweichung berechnet. Bei der Standard-Dekomposition werden erst alle Zeilen und danach alle Spalten transformiert, was die Implementierung stark vereinfacht. Dagegen wird bei der Nonstandard-Dekomposition die Transformation von Zeilen und Spalten abwechselnd vorgenommen, was bedingt, dass das Bild gleich viele Spalten und Zeilen haben muss. Allerdings ist dieses Verfahren effizienter, da es weniger Zuweisungen braucht.
|
|
</p>
|
|
|
|
<table>
|
|
<tr>
|
|
<td class="matrixcaption">Original-Matrix </td>
|
|
<td colspan="2" class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td>10</td><td>14</td><td>7</td><td>5</td></tr>
|
|
<tr><td>16</td><td>12</td><td>13</td><td>19</td></tr>
|
|
<tr><td>14</td><td>12</td><td>1</td><td>5</td></tr>
|
|
<tr><td>8</td><td>2</td><td>3</td><td>3</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td colspan="2" class="matrixtext">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td class="matrixcaption" style="padding-top: 1em;">Standard-Dekomposition </td>
|
|
<td class="matrixcaption" style="padding-top: 1em;">Nonstandard-Dekomposition</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="matrixcaption">1. Schritt</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr class="active"><td class="highlighted">12</td><td class="highlighted">6</td><td>-2</td><td>1</td></tr>
|
|
<tr><td>14</td><td>16</td><td>2</td><td>-3</td></tr>
|
|
<tr><td>13</td><td>3</td><td>1</td><td>-2</td></tr>
|
|
<tr><td>5</td><td>3</td><td>3</td><td>0</td></tr>
|
|
</table>
|
|
</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr class="active"><td class="highlighted">12</td><td class="highlighted">6</td><td>-2</td><td>1</td></tr>
|
|
<tr><td>14</td><td>16</td><td>2</td><td>-3</td></tr>
|
|
<tr><td>13</td><td>3</td><td>1</td><td>-2</td></tr>
|
|
<tr><td>5</td><td>3</td><td>3</td><td>0</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td colspan="2" class="matrixtext">
|
|
Der erste Schritt bei Standard- und Nonstandard-Dekomposition ist gleich: Es werden zunächst die Zeilen transformiert.<br />
|
|
Beispiel: Die erste Zeile <span class="matrixcontent">[10 14 7 5]</span> wird in 2-Tupel aufgeteilt von denen jeweils Mittelwert und Abweichung berechnet werden. Das Tupel <span class="matrixcontent">[10 14]</span> ergibt als Mittelwert (10+14)/2=<span class="highlighted">12</span>, das Tupel <span class="matrixcontent">[7 5]</span> den Mittelwert <span class="highlighted">6</span>. Als Abweichung ergibt sich für <span class="matrixcontent">[10 14]</span> (10-14)/2=-2 und für <span class="matrixcontent">[7 5]</span> (7-5)/2=1.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="matrixcaption">2. Schritt</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td class="active highlighted">9</td><td class="active">3</td><td>-2</td><td>1</td></tr>
|
|
<tr><td>15</td><td>-1</td><td>2</td><td>-3</td></tr>
|
|
<tr><td>8</td><td>5</td><td>1</td><td>-2</td></tr>
|
|
<tr><td>4</td><td>1</td><td>3</td><td>0</td></tr>
|
|
</table>
|
|
</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td class="active highlighted">13</td><td>11</td><td>0</td><td>-1</td></tr>
|
|
<tr><td class="active highlighted">9</td><td>3</td><td>2</td><td>-1</td></tr>
|
|
<tr><td class="active">-1</td><td>-5</td><td>-2</td><td>2</td></tr>
|
|
<tr><td class="active">4</td><td>0</td><td>-1</td><td>-1</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td colspan="2" class="matrixtext">
|
|
Bei der Standard-Dekomposition werden im Weiteren nur noch die Mittelwerte der Zeilen transformiert, während bei der Nonstandard-Dekomposition die ganze Spalte transformiert wird.<br />
|
|
Beispiel: Bei der Standard-Dekomposition wird nur noch das Tupel der Mittelwerte <span class="matrixcontent">[<span class="highlighted">12 6</span>]</span> aus der ersten Zeile zu Mittelwert (12+6)/2=<span class="highlighted">9</span> und Abweichung (12-6)/2=3 umgeformt. Bei der Nonstandard-Dekomposition wird die erste Spalte <span class="matrixcontent">[12 14 13 5]</span> zu <span class="matrixcontent">[<span class="highlighted">13</span> <span class="highlighted">9</span> -1 4]</span> transformiert.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="matrixcaption">3. Schritt</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td class="active highlighted">12</td><td>1</td><td>0</td><td>-1</td></tr>
|
|
<tr><td class="active highlighted">6</td><td>3</td><td>2</td><td>-1</td></tr>
|
|
<tr><td class="active">-3</td><td>2</td><td>-2</td><td>2</td></tr>
|
|
<tr><td class="active">2</td><td>2</td><td>-1</td><td>-1</td></tr>
|
|
</table>
|
|
</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td class="active highlighted">12</td><td class="active">1</td><td>0</td><td>-1</td></tr>
|
|
<tr><td>6</td><td>3</td><td>2</td><td>-1</td></tr>
|
|
<tr><td>-3</td><td>2</td><td>-2</td><td>2</td></tr>
|
|
<tr><td>2</td><td>2</td><td>-1</td><td>-1</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td colspan="2" class="matrixtext">
|
|
Nachdem bei der Standard-Dekomposition alle Zeilen umgeformt worden sind, werden nun sämtliche Spalten transformiert. Bei der Nonstandard-Dekomposition wird nun der zweite Schritt der Zeilentransformation durchgeführt, d.h. es wird nur noch die vordere Hälfte jeder Zeile verwendet.<br />
|
|
Beispiel: Aus der ersten Spalte <span class="matrixcontent">[9 15 8 4]</span> werden in der Standard-Dekomposition die Werte <span class="matrixcontent">[<span class="highlighted">12 6</span> -3 2]</span>. Die Nonstandard-Dekomposition ergibt für die vordere Hälfte erste Zeile <span class="matrixcontent">[13 11]</span> die Werte <span class="matrixcontent">[<span class="highlighted">12</span> 1]</span>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="matrixcaption">4. Schritt</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td class="active highlighted">9</td><td>2</td><td>1</td><td>-1</td></tr>
|
|
<tr><td class="active">3</td><td>-1</td><td>-1</td><td>0</td></tr>
|
|
<tr><td>-3</td><td>2</td><td>-2</td><td>2</td></tr>
|
|
<tr><td>2</td><td>2</td><td>-1</td><td>-1</td></tr>
|
|
</table>
|
|
</td>
|
|
<td class="matrixcell">
|
|
<table class="matrixtable">
|
|
<tr><td class="active highlighted">9</td><td>2</td><td>1</td><td>-1</td></tr>
|
|
<tr><td class="active">3</td><td>-1</td><td>-1</td><td>0</td></tr>
|
|
<tr><td>-3</td><td>2</td><td>-2</td><td>2</td></tr>
|
|
<tr><td>2</td><td>2</td><td>-1</td><td>-1</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td colspan="2" class="matrixtext">
|
|
Die letzte Umformung ist für beide Verfahren gleich: Die ersten beiden Werte jeder Spalte werden transformiert. Daraus ergibt sich der absolute Mittelwert <span class="highlighted">9</span> der Matrix. Alle anderen Werte sind die berechneten Abweichungen von diesem absoluten Mittelwert.<br />
|
|
Man kann erkennen, dass die Beträge der Werte durch die Transformation deutlich abgenommen haben. Während der ursprüngliche Mittelwert 9 war, liegt er bei der umgeformten Matrix etwas über 2.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
Bei der Transformation entsteht eine Matrix, die genau die gleiche Dimension hat, wie das ursprüngliche Bild (allerdings normalerweise mit Fließkommawerten). Die umgeformte Matrix hat die Eigenschaft, dass nicht mehr jedes Pixel für sich allein beschrieben ist, sondern die Farbe eines Pixels sich aus sehr vielen Werten der Matrix zusammensetzt. Kleinere Werte verändern das Motiv nicht so stark wie große Werte. Deshalb kann man sie wegfallen lassen um die Anzahl der zu speichernden Elemente zu verringern, ohne dass die Information des Bildes stark verfälscht wird.
|
|
</p>
|
|
|
|
<h3 id="basisfunktionen">Basisfunktionen und Rekonstruktion</h3>
|
|
<p>
|
|
Bilddaten, die durch eine n×m-Matrix definiert sind, liegen in einem n×m-dimensionalen Raum. Dieser Raum lässt sich durch ebenso viele linear unabhängige Basisfunktionen aufspannen. Die Bilddaten kann man durch Linearkombinationen dieser Basisfunktionen ausdrücken.<br />
|
|
Bei der hier vorgestellten Methode werden zweidimensionale Haar-Wavelets als Basisfunktionen benutzt. Das Standard- und das Nonstandard-Dekompositions-Verfahren haben verständlicherweise unterschiedliche Basisfunktionen, da die Rekonstruktion die Umkehrfunktion der Transformation ist.
|
|
</p>
|
|
|
|
<div class="figure">
|
|
<img src="grafiken/2d-basisfunktionen.gif" alt="Zweidimensionale Basisfunktionen für ein 4×4-Bild" /><br />
|
|
Zweidimensionale Basisfunktionen für ein 4×4-Bild bei Standard- (links) und Nonstandard-Rekonstruktion (rechts)
|
|
</div>
|
|
|
|
<div>
|
|
Bei der Rekonstruktion werden die Elemente der transformierten Daten mit den Basisfunktionen mutlipliziert und anschließend addiert. Im obigen Beispiel würde bei der Standard-Rekonstruktion wie bei der Nonstandard-Rekonstruktion wieder die ursprüngliche Matrix
|
|
<table class="matrixtable" style="margin-left: 10%;">
|
|
<tr><td>10</td><td>14</td><td>7</td><td>5</td></tr>
|
|
<tr><td>16</td><td>12</td><td>13</td><td>19</td></tr>
|
|
<tr><td>14</td><td>12</td><td>1</td><td>5</td></tr>
|
|
<tr><td>8</td><td>2</td><td>3</td><td>3</td></tr>
|
|
</table>
|
|
entstehen, da keine Kompression angewendet wurde.
|
|
</div>
|
|
|
|
<h3 id="normalisierung">Normalisierung und Orthogonalisierung</h3>
|
|
<p>
|
|
Um die Größe der Daten zu reduzieren, müssen Informationen beim Speichern weggelassen werden. Um unwichtigere Elemente entfernen zu können, müssen die Werte der transformierten Matrix nach ihrem Informationsgehalt sortiert werden.<br />
|
|
Eine Normierung der Koeffizienten ermöglicht eine Vergleichbarkeit zwischen den Werten bezogen auf ihre Energie. Das bedeutet, dass, wenn die Elemente der transformierten Matrix normiert wurden, die Koeffizienten mit größerem Einfluss auf das Signal auch einen größeren Betrag haben als Koeffizienten, die nur wenig Einfluss haben.<br />
|
|
Aus der Gleichung
|
|
</p>
|
|
<div class="formel">
|
|
<img src="grafiken/signalzerlegung.gif" alt="Signalzerlegung" />
|
|
</div>
|
|
<p>
|
|
ergibt sich, dass mit einer orthonormalen Basis ein zu komprimierendes Signal in seine Komponenten zerlegt werden und anschließend wieder eindeutig rekonstruiert werden kann.<br />
|
|
Um diese Eigenschaften nutzen zu können, muss die verwendete Basis normiert werden und orthogonal sein, wie es bei den benutzten Haar-Wavelets der Fall ist. <span class="verweis">[3]</span>
|
|
</p>
|
|
|
|
<table class="nav">
|
|
<tr>
|
|
<td style="text-align: left"><a href="wavelet-transformation.html">« Wavelet-Transformation</a></td>
|
|
<td style="text-align: center"><a href="index.html">Inhaltsverzeichnis</a></td>
|
|
<td style="text-align: right"><a href="fehler.html">Fehlermaß und Kompressionsgrad »</a></td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|
|
|