🌀 2D-Bild-FFT
Berechne die 2D-Fourier-Transformation eines Bildes und filtere es im Frequenzbereich. Sieh dir das logarithmische Betragsspektrum an, wende Tiefpass-, Hochpass-, Bandpass- oder Notch-Filter an und beobachte die Rekonstruktion.
Über diese Simulation
Dies führt eine echte Radix-2-Cooley-Tukey-FFT im Browser aus — zunächst entlang jeder Zeile, dann entlang jeder Spalte — und verwandelt ein kleines Testbild in sein 2D-Frequenzspektrum. Die dominante Frequenz und die nach der Filterung erhaltene Energie werden live aus diesem Spektrum berechnet, und das Maskieren eines Teils davon vor der inversen Transformation demonstriert das Faltungstheorem: Multiplikation im Frequenzraum entspricht der Faltung im Ortsraum.
🔬 Was gezeigt wird
Drei verknüpfte Ansichten: das räumliche Testmuster, sein logarithmisches Betragsfrequenzspektrum nach fftshift (sodass der Gleichanteil bei Frequenz null in der Mitte liegt), und die Rekonstruktion, nachdem deine gewählte Filtermaske einen Teil des Spektrums auf null gesetzt hat und dieses invers zurück in ein Bild transformiert wurde.
🎮 Bedienung
Wähle ein Quellmuster (Streifen, Kreis, Schachbrett, ein „F“-Glyph oder Zufallsrauschen) und einen Frequenzfilter — Tiefpass behält nur die Mitte und verwischt, Hochpass entfernt die Mitte und lässt Kanten übrig, Bandpass behält einen Ring, und Notch löscht die dominante Spitze, um periodische Streifen zu entfernen. Filterradius und Bandbreite steuern die Maskengröße, Phase anzeigen wechselt zum Phasenspektrum, und Bildgröße wechselt zwischen 64×64 und einer langsameren, aber schärferen 128×128-Transformation.
💡 Wusstest du schon?
Eine direkte 2D-diskrete Fourier-Transformation kostet O(N⁴) Operationen für ein N×N-Bild, aber sie in N eindimensionale FFTs entlang der Zeilen und dann der Spalten aufzuteilen — genau das, was diese Simulation tut — reduziert das auf O(N² log N), derselbe Trick, der JPEG-artige Kompression und MRT-Rekonstruktion schnell genug für den Alltagsgebrauch macht.
Häufig gestellte Fragen
Warum ist das Spektrum zentriert, statt den hellen Punkt in der Ecke zu haben?
Die rohe FFT-Ausgabe platziert den Gleichanteil (DC) bei Index [0,0], wobei sich der Frequenzinhalt um die Ränder des Arrays herum fortsetzt. Die Simulation wendet vor dem Zeichnen einen fftshift an und vertauscht die Quadranten, sodass der DC-Term in der Mitte liegt und die Frequenz in alle Richtungen nach außen zunimmt, passend zur üblichen Darstellung von Spektren.
Was ist der Unterschied zwischen Tiefpass-, Hochpass- und Notch-Filterung?
Tiefpass behält Frequenzen innerhalb eines gewählten Radius um die Mitte und setzt den Rest auf null, wodurch das Bild durch Verwerfen feiner Details verwischt wird. Hochpass macht das Gegenteil und behält nur den äußeren Hochfrequenzring, wodurch Kanten hervorgehoben werden. Notch entfernt stattdessen einen dünnen Ring um die stärkste Frequenzspitze des Bildes, ideal, um sich wiederholende Streifenmuster zu entfernen, ohne sonst etwas zu verwischen.
Warum sinkt die erhaltene Energie, wenn ich den Filterradius verkleinere?
Die erhaltene Energie ist der Anteil des gesamten quadrierten Betrags des Spektrums, der innerhalb deiner Filtermaske erhalten bleibt. Ein kleiner Tiefpassradius behält nur den DC-Term und einige niedrige Frequenzen und verwirft den größten Teil der Spektrumsenergie — genau deshalb erzeugt aggressive Tiefpassfilterung eine so stark verwischte Rekonstruktion.
Was zeigt das Phasenspektrum eigentlich?
Das Umschalten von Phase anzeigen ersetzt den Betrag jedes Pixels durch den Winkel seines komplexen FFT-Koeffizienten, umgerechnet in Graustufen. Die Phase kodiert, wo das Muster jeder Frequenz im Bild liegt, statt wie stark es ist — nur die Phase zwischen zwei Bildern zu vertauschen reicht aus, damit das Ergebnis strukturell wie der Phasenspender aussieht, nicht wie der Betragsspender.
Warum ergibt das Streifenmuster ein Spektrum mit nur wenigen hellen Punkten?
Ein reines sinusförmiges Streifenmuster besteht per Definition aus einer einzigen räumlichen Frequenz, sodass seine FFT fast vollständig null ist, außer einem symmetrischen Paar heller Spitzen bei plus und minus dieser Frequenz, plus dem DC-Term in der Mitte. Natürliche Bilder erzeugen weit stärker verteilte Spektren, da sie viele Frequenzen und Orientierungen gleichzeitig mischen.
Häufig gestellte Fragen
Was stellt die Mitte eines 2D-FFT-Bildes dar?
Die Mitte (nach dem üblichen FFT-Shift) stellt den Gleichanteil bzw. die Nullfrequenz-Komponente dar — die durchschnittliche Helligkeit des gesamten Bildes. Helle Bereiche nahe der Mitte entsprechen sich langsam ändernden (niederfrequenten) Inhalten wie glatten Hintergründen, während helle Bereiche an den Rändern schnellen Veränderungen wie feinen Texturen und scharfen Kanten entsprechen.
Warum zeigt die FFT eines natürlichen Bildes typischerweise ein helles Kreuzmuster?
Viele Fotografien enthalten starke horizontale und vertikale Kanten (Türrahmen, Horizonte, Textzeilen), die energiereiche Komponenten entlang der horizontalen und vertikalen Frequenzachsen erzeugen. Zusätzlich behandelt die FFT das Bild als periodische Kachel, und Unstetigkeiten an den Bildrändern erzeugen künstliche Hochfrequenzkomponenten entlang der Achsen.
Wie wird die Filterung im Frequenzbereich durchgeführt?
Multipliziere die FFT des Bildes mit einer Filtermaske (Einsen im Durchlassbereich, Nullen im Sperrbereich, oder ein sanfter Übergang), und wende dann die inverse FFT an, um zum Ortsraum zurückzukehren. Das ist rechnerisch äquivalent zur Faltung im Ortsraum, aber dank des Faltungstheorems für große Kernel viel schneller.
Was ist der Unterschied zwischen FFT-Betrag und -Phase?
Das Betragsspektrum sagt dir, welche räumlichen Frequenzen vorhanden sind und mit welcher Stärke. Das Phasenspektrum kodiert, wo diese Frequenzkomponenten im Bild liegen. Vertauscht man den Betrag eines Bildes mit dem eines anderen und behält dabei die Phase bei, entsteht ein Bild, das wie das Bild aussieht, dessen Phase verwendet wurde — ein Beweis dafür, dass die Phase den Großteil der strukturellen Information trägt.
Wie nutzt die JPEG-Kompression die Frequenzanalyse?
JPEG teilt das Bild in 8×8-Pixel-Blöcke und wendet auf jeden die diskrete Kosinustransformation an (eine Verwandte der FFT). Die resultierenden Koeffizienten werden quantisiert — gröbere Quantisierung für hochfrequente Koeffizienten, für die das menschliche Auge weniger empfindlich ist — und entropiekodiert. Die Dekompression kehrt den Prozess um und gewinnt eine Annäherung an das Originalbild zurück.
Sieh dir ein Bild, sein 2D-Fourier-Betragsspektrum und das Ergebnis der Filterung im Frequenzbereich an. Eine echte Radix-2-FFT läuft auf Zeilen und dann Spalten; Tiefpass verwischt, Hochpass behält Kanten, und ein Notch entfernt periodische Streifen.
3D · Three.js-/WebGL-Renderer · Ziel 60 FPS · läuft vollständig clientseitig, keine Installation nötig