Diskrete (inverse) Haar (2D) -Transformationsimplementierungen


7

Ich interessiere mich für Implementierungen der Haar-Transformation und ihrer Umkehrung, so dass sie bei ihrer Komposition immer zur Identitätsoperation führen. Meine Eingaben sind diskrete Ordnungszahlen innerhalb eines bestimmten Bereichs - und ich brauche die Ausgabe der Haar-Transformation, um ähnlich diskrete Ordnungszahlen (oder Festkommazahlen) zu sein.

Ich habe auf der Basis gearbeitet, dass, wenn mein Eingangssignal gleichmäßig verteilte Abtastwerte im Bereich und mein transformiertes Signal besteht, mein ursprüngliches Signal im Prinzip perfekt von der wiedergegeben werden sollte inverses Haar.0..(2n1)

Ich habe mich mit dieser (Matlab) -Implementierung unter Verwendung von GNU Octave beschäftigt:

http://people.sc.fsu.edu/~jburkardt/m_src/haar/haar.html

Was Werte mit doppelter Genauigkeit verwendet ... zwingt mich, round () zu verwenden, um eine diskrete Darstellung der transformierten Daten zu erstellen, damit die transformierte Darstellung in denselben Zustandsraum wie das Original passt. Es war nicht überraschend, dass ich round () erneut für die Ausgabe der inversen Transformation verwenden musste.

Es wird wahrscheinlich nicht überraschen, dass round (haar_2d_inverse (round (haar_2d (signal)))) für die meisten Signalwerte nicht ganz die Identitätsfunktion ist ... Anekdotisch gibt es typischerweise einige Out-by-One-Fehler in der rekonstruiertes Signal - das ungefähr symmetrisch erscheint (+1 oder -1 bei einer kleinen Anzahl der rekonstruierten Abtastwerte) und dies scheint fast unabhängig von der Wahl von n zu sein.

Ich würde gerne wissen, ob es "bessere" Implementierungen von haar_2d und haar_2d_inverse gibt, die für ordinale Stichproben funktionieren. Sind die Anomalien die Folge der Haar-Implementierung selbst oder die Art und Weise, wie ich round () in der Zwischenphase angewendet habe? Wenn letzteres der Fall ist, kann ich dies durch Skalieren vor dem Runden korrigieren?


Scheint, als würden Sie eine Festkomma-Mathematik benötigen, anstatt zu versuchen, sie mit Gleitkomma zu approximieren.
Datageist

Ich vermute, Sie haben Recht - Datageist - aber diese Abhängigkeit von Root-2 ist relevant und könnte dies schwierig machen. Ich bin überrascht, dass ich mit einer Google-Suche keine Beispielimplementierung finden kann.
aSteve

Antworten:


1

Ich denke, in 2D Haar ist nicht erforderlich, wenn die Transformation gleichzeitig in beide Richtungen angewendet wird. Es hätte die Form von , was nur eine Festpunktimplementierung erfordert, wobei der Q-Punkt basierend auf der Anzahl der Ebenen ausgewählt wird. Ich hatte dies verwendet, um Haar in C für eingebettete Systeme zu implementieren, und es funktioniert ohne Rundungs- / Kürzungsfehler.2a+b+c+d2

Hinweis:
Mein Repräsentant ist nicht 50, also als Antwort posten. Wenn jemand es zu den Kommentaren verschieben kann, wäre es gut.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.