Fouriertransformation

Busi

Mitglied
Hallo,

hier eine Frage zur Fouriertransformation.

Ich wäre an eine Umsetztung der diskreten Fouriertransformation interessiert. Aber damit sich jetzt keiner hinstezt und seine alten programme durchforstet, mir reicht die Formel. (Tippen kann ich noch, glaube ich).

Und zwar habe ich das Probem das ich nichts einheitliches finde, oder aber mir nichts Einheitlich vorkommt.

c_{k}=\frac{1}{n}*\sum_{j=0}^{n-1}v_{j}*e^{i\frac{2\pi*k*j}{n}}

Das habe ich, aber ich bin mir seit gestern einfach nicht mehr sicher ob das noch Stimmt.

c_{k} = Fouriertransformierter Vector

Also wenn ihr Codeschnipsel habt, oder aber Ideen, Anregungn oder Koorekturen, bitte zu mir.
 
Hallo,

was genau willst du denn machen? Wir haben mal in Bildverarbeitung die Fourierkoeffizienten einer Umrisslinie bestimmt, um diese dann aus den gekürzten Fourierkoeffizienten (gekürzt bedeutet, die Fourierkoeffizienten der Größe nach zu sortieren und dann nur die n- größten zu verwenden und den Rest auf 0 setzen) wieder zu bestimmen. Schau mal die Funktion an, die bekommt eine Umrisslinie als Vector von 2D Punkten (also Komplex) und gibt die komplexwertigen Fourierdeskriptoren wieder zurück:

Java:
	private Vector<Point> getFourierDesciptors(Vector<Point> countour) {
		Vector<Point> fd = new Vector<Point>();
		final double doublePI = 2 * Math.PI;

		for (int u = 0; u < countour.size(); u++) {
			Point fd_val = new Point(0, 0, 0);
			double phi = (doublePI * u) / countour.size();
			for (int k = 0; k < countour.size(); k++) {
				Point p = countour.get(k);
				phi *= k;
				fd_val.addX(p.getX() * Math.cos(phi) + p.getY() * Math.sin(phi));
				fd_val.addY(p.getY() * Math.cos(phi) - p.getX() * Math.sin(phi));
			}
			fd.add(fd_val);
		}
		return fd;
	}

Wenn du ImageJ zur Verfügung hast kannst du ja mal folgendes Plugin ausprobieren und evtl. die IImplementierung nachvollziehen:
Code:
http://people.fh-landshut.de/~skreyer/FD_Calculator.java
Zugehöriges Binärbild:
http://people.fh-landshut.de/~skreyer/Pfeil_binary.bmp

Gruß,
RedWing

P.S. übrigens die Methode getFourierContour verwandelt die Fouriertransformatoren wieder zurück in eine Umrisslinie, und stellt somit die Inverse DFT dar.
 
Hallo,

Danke erst mal für die Hilfe. Ich habe mein Problem heute durch pruen zufall gelöst. Für mich ging es nur ums verständnis. Der Code wen due mitgeliefert hast, ist aber für den nächsten schritt recht interessant. Danke Nochmals.

Für dich als atwort, und für alle anderen die es durch zufall hierherverschlagen hat. Ich hatte das problem das die diskrete Fouriertransformation in der Einen Quelle so und un der anderen So beschrieben wird. grundsätzlich gab es zwei Ansätze.

Omega=e^i*(2*pi*k*j)/n
und
Omega=e^-i*(2*pi*k*j)/n
wobei je nach quelle immer verschieden erzählt wurde weches für die hin, und welches für die Rücktransformation genutzt werden sollte.

Heute bin ich durch puren zufall über die Lösung gestolpert. Ich habe ein Buch gesehen, das ich nicht kaufen wollte (Fouriertransformation für Fussgänger). Keine Stunde später hatte ich das Buch in der Hand weil ein Kumpel es sich gekauft hatte. Ich dachte mir es kann ja, nun da es zur Verfügung steht, nicht schaden mal reinzuschauen und da fand ich das:
... An dieser Stelle eine kleine Warnung. Häufig findet man sanstatt Omega=e^-i*(2*pi*k*j)/n und Omega=e^i*(2*pi*k*j)/n auch definitionsgleicungenmit positiven Exponenten für die Hintransformation und mit negativen Exponenten für die Rücktransformation ...
Es geht also beides, man mus sich dann nur an die gewählte art halten. Wer es nicht glaubt oder selber mal nachschlagen möchte hier die Quelle

Fouriertransformation für Fussgänger
Tilman Butz
Teuberverlag
Auflage 4
Seite 97 mitte (+-2)

Damit binich glücklich und ich werde das Thema als erledigt abhaken.
 
Zurück