2010-08-24 8 views
8

Ich versuche, eine Gaußsche Unschärfe mit der Verwendung von FFT zu implementieren und könnte hier das folgende Rezept finden.Gaussian Unschärfe mit FFT

Das bedeutet, dass die Fourier-Transformation des Bildes zu nehmen und die Filter, die (komplexe) Ergebnisse multiplizieren, und dann wird die inverse Transformation Fourier nehmen.

Ich habe einen Kern K bekam, eine 7x7 Matrix und ein Bild I, eine 512x512-Matrix.

Ich verstehe nicht, wie man K mit I multipliziert. Ist der einzige Weg das zu tun, indem ich K so groß mache wie ich (512x512)?

Antwort

15

Ja, Sie müssen K so groß wie ich machen, indem Sie es mit Nullen auffüllen. Auch nach dem Auffüllen, aber bevor Sie die FFT des Kernels nehmen, müssen Sie es mit einem Umlauf umwandeln, so dass das Zentrum des Kernels (die Spitze des Gaußschen) bei (0,0) ist. Andernfalls wird Ihr gefiltertes Bild übersetzt. Alternativ können Sie das resultierende gefilterte Bild übersetzen, sobald Sie fertig sind.

Ein weiterer Punkt: für kleine Kernel, die nicht die FFT verwenden, kann tatsächlich schneller sein. Ein 2D-Gauß-Kernel ist trennbar, dh Sie können ihn in zwei 1D-Kernel für x und y aufteilen. Dann können Sie anstelle einer 2D-Faltung zwei 1D-Faltungen in x- und y-Richtung in der räumlichen Domäne ausführen. Für kleinere Kernel, die am Ende schneller sein können als die Faltung im Frequenzbereich mit der FFT.

2

Wenn Sie mit Pixel-Shader komfortabel sind und wenn FFT ist nicht Ihr Hauptziel hier, aber Faltung mit Gaußsche Unschärfe-Kernel ist, - dann kann ich mein Tutorial on what convolution is

Grüße empfehlen.