Kreisförmige und lineare Faltung


7

Was ist der Unterschied zwischen kreisförmiger und linearer Faltung? Wann würde ich einen über den anderen wählen? Welche Art von Faltung sollte ich bei der Bildverarbeitung wählen, bei der ein Filter auf ein Bild mit einer Maske angewendet wird?


Ich empfehle, dass Sie die Moderatoren bitten, diese Frage auf die Signalverarbeitungssite dsp.SE
Dilip Sarwate

Vielleicht können Sie mit der Mathematica Demo Regards

mmm, verstehe aber ... Ich habe immer gelesen, dass die Kreisfaltung verwendet wird, um mit endlicher Unterstützung zu signalisieren, aber auch, wenn das Signal periodisch ist. Ich verstehe das nicht, weil ein Signal mit endlicher Unterstützung nicht immer Periodizität hat, z. B. Bilder
Juan

Antworten:


7

Wenn Sie einen , der aus den Elementen , werden sie in der Reihenfolge linear , beginnend mit und endend mit .dd1,d2,...dNd1dN

Stellen Sie sich vor, der Datenvektor wird durch einen Zettel dargestellt, in dem die Elemente der Reihe nach geschrieben sind. Stellen Sie sich nun vor, Sie würden den Zettel zu einem Kreis formen, indem Sie das Ende (wo geschrieben ist) bis zum Anfang (wo geschrieben ist) berühren . Faltung das ist kreisförmige Faltung. In der Praxis sind lineare Faltung und kreisförmige Faltung nahezu gleich, wobei der Unterschied zu Beginn und am Ende der linearen Faltung auftritt. Bei der linearen Faltung nehmen Sie an, dass es vor und nach Ihren Daten (dh wir nehmen an, dass " " und " " 0 sind), während wir bei der kreisförmigen Faltung die Daten umbrechen, um sie periodisch zu machen (dh " "dNdNd1d0dN+1d0dN und " " ist gleich ).dN+1d1

Die gleichen Prinzipien gelten für mehrdimensionale Arrays. Für die lineare Faltung gibt es für jede Achse einen bestimmten Anfang und ein bestimmtes Ende, wobei vorher und nachher Nullen angenommen werden. Bei einer kreisförmigen Faltung werden die Daten in jeder Achse umschlossen.

When would I choose one over the other?

Mit wenigen sehr seltenen Ausnahmen "wählen" wir keine kreisförmige Faltung. Wir wollen fast immer eine lineare Faltung. Der Grund dafür, dass kreisförmige Faltungen genauso häufig auftreten wie sie, liegt darin, dass Faltungen über FFTs (FFT, Multiplikation, inverse FFT) kreisförmige Faltungen sind, nicht linear.


Wenn ich eine lineare Faltung ohne Auffüllen von Nullen verwendet habe, lautet der Name des Problems in der Grenze Aliasing? und eine andere Frage Was hat eine beste Leistung (rechnerisch) linear oder kreisförmig?
Juan

Bei der linearen Faltung müssen Sie nicht mit Nullen auffüllen - dies hängt davon ab, wie Sie die Berechnung durchführen. Bei der kreisförmigen Faltung werden Nullen aufgefüllt, damit die gleichen Ergebnisse wie bei der linearen Faltung erzielt werden.
Jim Clay

Für kleine Faltungskerne hat die lineare Faltung die beste Leistung. Bei großen Faltungskernen bietet die zirkuläre Faltung über FFTs die beste Leistung. Es ist jedoch kompliziert, mit Nullen aufzufüllen, um die richtige Antwort zu erhalten.
Jim Clay

Jetzt bin ich verwirrt, weil Sie in der folgenden Antwort sagen: "Wenn Sie die fehlenden Werte mit Nullen füllen, bleiben Sie in linearer Faltung", aber Sie sagen: "Bei linearer Faltung müssen Sie nicht wirklich mit Nullen auffüllen"
Juan

Sie können den Faltungskern entweder linear oder kreisförmig kürzen. Es ist ein separates Thema. Die Nullpolsterung dient nur zur kreisförmigen Faltung.
Jim Clay

6

Wenn Sie Faltung in Bildern implementieren, müssen Sie sich um Grenzwerte kümmern, da Ihre Faltungsmaske irgendwann aus dem zu verarbeitenden Bild "herauskommt". Abhängig davon, wie Sie die fehlenden Werte füllen, wird bestimmt, ob Sie eine zirkuläre Faltung implementieren oder nicht:

  • Wenn Sie die fehlenden Werte mit Nullen füllen, bleiben Sie in linearer Faltung
  • Wenn Sie die fehlenden Werte nach Periodizität füllen, verwenden Sie wahrscheinlich eine zirkuläre Faltung.

Beachten Sie, dass Sie, wenn Sie die Faltung in der Fourier-Domäne implementieren, keine andere Wahl haben als die zirkuläre Faltung, da der FFT-Algorithmus Ihre Bilder implizit periodisiert.

- BEARBEITEN -

Die Faltung wird häufig im Fourier-Bereich implementiert (=> zirkuläre Faltung), da sie dank des FFT-Algorithmus in den meisten Fällen erheblich schneller ist. Es gibt schnelle lineare Faltungsalgorithmen, die jedoch normalerweise dem trennbaren Kernel-Fall vorbehalten sind, in dem Sie das Bild horizontal und vertikal getrennt filtern können, was auch weniger Operationen ergibt als eine naive 2D-Implementierung.


3
+1. Sie können das Bild mit genügend Nullen auffüllen, um diese Fourier- "Periodisierung" zu vermeiden.
Andrey Rubshtein

Was ist der eine oder andere Vorteil?
Juan

Rundkonv. ist dank der FFT schneller. Siehe die bearbeitete Antwort.
Sansuiso

Jetzt bin ich verwirrt, weil Sie in der folgenden Antwort sagen: "Bei linearer Faltung müssen Sie nicht mit Nullen auffüllen", aber Sie sagen: "Wenn Sie die fehlenden Werte mit Nullen füllen, bleiben Sie in linearer Faltung"
Juan

Ich denke, der erste Teil von Jim Clays Kommentar ist richtig: Lineare Faltung vermeidet normalerweise explizites Auffüllen mit Nullen, aber es ist ein Implementierungsartefakt (wenn Sie nicht nach Grenzen suchen, müssen Sie ein großes Bild zuweisen und Auffüllen verwenden). FFT-basierte Ansätze verwenden möglicherweise Auffüllen für i) schnellere Ausführung (da es für einige gute Bildgrößen noch schnellere Algorithmen gibt) oder ii) für das Zoomen von Bildern (dies entspricht einer Sinusinterpolation). Die kreisförmige Faltung (einschließlich der FFT-basierten Faltung) beruht nicht auf einer Polsterung an sich.
Sansuiso
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.