Heim >Backend-Entwicklung >Python-Tutorial >Können Strides die Effizienz von gleitenden Durchschnittsfiltern in der Bildverarbeitung verbessern?
Verwendung von Schritten für einen effizienten gleitenden Durchschnittsfilter
In letzter Zeit haben schrittbasierte Ansätze wegen ihrer Effizienz bei der Implementierung von gleitenden Durchschnittsfiltern an Aufmerksamkeit gewonnen. In diesem Zusammenhang untersuchen wir, wie Fortschritte genutzt werden können, um die Leistung solcher Filter zu verbessern und dabei über die traditionelleren Faltungsmethoden hinauszugehen. Konkret konzentrieren wir uns auf die Implementierung eines mit 8 Nachbarn verbundenen gleitenden Durchschnittsfilters, der die umgebenden 9 Pixel für jedes Fokuspixel berücksichtigt.
Mithilfe von Schritten können wir eine Ansicht des ursprünglichen Arrays erstellen, die der oberen Zeile von entspricht Der Filterkernel. Durch Anwenden einer Rolloperation entlang der vertikalen Achse können wir die mittlere Zeile des Kernels erhalten und sie der ursprünglich erstellten Ansicht hinzufügen. Dieser Vorgang wird wiederholt, um die unterste Zeile des Kernels zu erhalten, und die Summe dieser Zeilen wird dann durch die Filtergröße dividiert, um den Durchschnitt für jedes Pixel zu berechnen.
Um diesen Ansatz zu veranschaulichen, betrachten Sie die folgende Implementierung:
import numpy, scipy filtsize = 3 a = numpy.arrange(100).reshape((10, 10)) b = numpy.lib.stride_tricks.as_strided(a, shape=(a.size, filtsize), strides=(a.itemsize, a.itemsize)) for i in range(0, filtsize - 1): if i > 0: b += numpy.roll(b, -(pow(filtsize, 2) + 1) * i, 0) filtered = (numpy.sum(b, 1) / pow(filtsize, 2)).reshape((a.shape[0], a.shape[1]))
Allgemeiner ausgedrückt ermöglicht die Definition einer Funktion, die die Rollfensteroperation entlang bestimmter Dimensionen ausführt, die effiziente Implementierung von Filtern mit gleitendem Durchschnitt auch in mehrdimensionalen Arrays. Es ist jedoch wichtig zu beachten, dass schrittbasierte Ansätze zwar in bestimmten Fällen Vorteile bieten, bei komplexen mehrdimensionalen Filteraufgaben jedoch spezielle Funktionen wie die vom Modul scipy.ndimage bereitgestellten möglicherweise dennoch eine überlegene Leistung bieten.
Das obige ist der detaillierte Inhalt vonKönnen Strides die Effizienz von gleitenden Durchschnittsfiltern in der Bildverarbeitung verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!