MF_deconvolve MD_deconvolve ME_deconvolve
FunktionRäumliche Entfaltung (Dekonvolution), Kanten-Schärfung
Syntax C/C++#include <MFstd.h>
void MF_deconvolve( fMatrix Y, fMatrix Flt, fMatrix X, fMatrix Rsp, ui ht, ui len );
C++ MatObj#include <OptiVec.h>
void matrix<T>::deconvolve( matrix<T> Flt, const matrix<T>& MX, const matrix<T> Rsp);
void matrix<T>::deconvolve( matrix<T>* Flt, const matrix<T>& MX, const matrix<T> Rsp);
Pascal/Delphiuses MFstd;
procedure MF_deconvolve( MY, MFlt, MX, MRsp:fMatrix; ht, len:UIntSize );
BeschreibungMX wird als Ergebnis einer hypothetischen Faltung eines "wahren" Profils mit einer Response-Funktion MRsp angenommen. Eine Dekonvolution wird versucht und in MY gespeichert. Ein Filter MFlt wird ebenfalls berechnet. Falls mehr als eine Bild-Matrix mit derselben MRsp zu schärfen ist , benutze man MF_deconvolve nur einmal und verwende den so erhaltenen Filter MFlt, um weitere Matrizen durch Aufrufe von MF_filter zu entfalten. Die Response-Funktion muß in der für MF_convolve beschriebenen Weise in MRsp angeordnet werden.

Ebenso wie für MF_convolve müssen auch hier MX, MY, MRsp und MFlt alle dieselben Dimensionen aufweisen, die wiederum ganzzahlige Potenzen von 2 zu sein haben. MX darf durch MY überschrieben werden und MRsp durch MFlt, aber MX und MFlt sowie MY und MRsp müssen jeweils voneinander verschieden sein.

Mathematisch ist MFlt der Element für Element berechnete Kehrwert der Fourier-Transformierten von MRsp. Falls die Fourier-Transformierte von MRsp Elemente gleich Null enthält, bedeutet dies, daß jegliche Information für die betreffende Raum-Frequenz verloren und keine Rekonstruktion möglich ist. Das beste, was man in dieser Situation noch tun kann, ist, diesen Informationsverlust zu akzeptieren und nur bis zu denjenigen Raumfrequenzen zu schärfen, für die noch etwas übrig ist, um es zu rekonstruieren.
Es ist daher anzuraten, diese Funktion nicht "blind" zu gebrauchen, sondern die Fourier-Transformierte vonf MRsp zu inspizieren und auf der Basis des jeweiligen Anwendungs-Zweckes zu entscheiden, was zu tun ist. Wer diese Funktion trotzdem als solche anwenden möchte, der sollte die automatische Editierung des Filters ausnutzen, die in MF_deconvolve eingebaut ist. Hierdurch wird MFlt gleich Null (anstelle von Unendlich) gesetzt für diejenigen Frequenzen, an denen jegliche Information verloren ist. Die Schwelle für diese implizite Editierung kann durch Aufruf von VF_setRspEdit gesetzt werden. Um die aktuell eingestellte Editier-Schwelle zu erfahren, rufe man VF_getRspEdit. (Diese beiden Funktionen werden von den ein- und zwei-dimensionalen FFT-Routinen gemeinsam genutzt und sind in FUNKREF.HTM beschrieben.)

Diese Dekonvolution basiert auf der stillschweigenden Annahme, daß MX in beiden Dimensionen periodisch ist; ist dies nicht der Fall, vergleiche man die Beschreibung von VF_convolve bezüglich der Vermeidung von Rand-Effekten.

FehlerbehandlungFalls entweder len oder ht nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf MF_deconvolve basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab.
Falls mittels VF_setRspEdit Trunc.Re = Trunc.Im = 0 spezifiziert wurde, können SING-Fehler auftreten, die durch Setzen von MFlt zu ±HUGE_VAL für die betreffende Raumfrequenz behandelt werden. Bei der Multiplikation mit der Fourier-Transformierten von MX kann dies aber zu unbehandeltem Fließkomma-Überlauf führen (dann nämlich, wenn die angenommene Übertragungsfunktion falsch war und doch noch Information vorhanden ist für Raumfrequenzen, wo keine mehr erwartet wurde).
Bezüglich spezieller Versionen mit den Präfixen MFl_ und MFs_ vergleiche man Kap. 4.8 von http://www.optivec.de/vecfuncs/.
QuerverweisMF_convolve,   MF_FFT,   Kap. 12

MatrixLib Inhaltsverzeichnis  OptiVec Home