Weighted Moving Average Opencv


Die unheimliche Art und Weise, wie ein gleitender Durchschnitt den Trend von einer Masse von verwirrenden Messungen freisetzt, lässt sich sehen, indem man den 10 Tage gleitenden Durchschnitt zusammen mit den ursprünglichen täglichen Gewichten, die als kleine Diamanten gezeigt werden, darstellt. Die bisherigen gleitenden Mittelwerte haben für alle Tage im Mittel gleichwertige Bedeutung. Das muss nicht so sein. Wenn Sie darüber nachdenken, macht es nicht viel Sinn, vor allem, wenn youre daran interessiert, mit einem längerfristigen gleitenden Durchschnitt zu glätten zufällige Beulen in den Trend. Angenommen, youre mit einem 20 Tage gleitenden Durchschnitt. Warum sollte Ihr Gewicht vor fast drei Wochen gleichermaßen relevant sein, um den aktuellen Trend als Ihr Gewicht an diesem Morgen Verschiedene Formen der gewichteten gleitenden Durchschnitte wurden entwickelt, um diesen Einwand zu lösen. Anstatt nur die Messungen für eine Folge von Tagen aufzuaddieren und durch die Anzahl der Tage zu teilen, wird in einem gewichteten gleitenden Durchschnitt jede Messung zunächst mit einem Gewichtungsfaktor multipliziert, der sich von Tag zu Tag unterscheidet. Die endgültige Summe wird nicht durch die Anzahl der Tage geteilt, sondern durch die Summe aller Gewichtungsfaktoren. Wenn größere Gewichtungsfaktoren für neuere Tage und kleinere Faktoren für Messungen weiter zurück in der Zeit verwendet werden, wird der Trend mehr auf neue Änderungen ansprechen, ohne die Glättung eines gleitenden Durchschnitts zu opfern. Ein ungewichteter gleitender Durchschnitt ist einfach ein gewichteter gleitender Durchschnitt mit allen Gewichtsfaktoren gleich 1. Sie können beliebige Gewichtsfaktoren verwenden, die Sie mögen, aber ein bestimmter Satz mit dem jawbreaking monicker Exponential Smoothed Moving Average hat sich in Anwendungen von Luftverteidigungsradar als nützlich erwiesen Zum Handel der Chicago Schweinebauchmarkt. Wir können es auch an unseren Bäuchen arbeiten. Dieser Graph vergleicht die Gewichtungsfaktoren für einen exponentiell geglätteten 20 Tage gleitenden Durchschnitt mit einem einfachen gleitenden Durchschnitt, der jeden Tag gleichmäßig gewichtet. Exponentielle Glättung gibt die heutige Messung zweimal die Bedeutung, die der einfache Durchschnitt würde es zuweisen, gestern Messung ein wenig weniger als das, und jeden aufeinander folgenden Tag weniger als sein Vorgänger mit Tag 20 trägt nur 20 so viel zum Ergebnis wie mit einem einfachen gleitenden Durchschnitt. Die Gewichtungsfaktoren in einem exponentiell geglätteten gleitenden Durchschnitt sind aufeinanderfolgende Potenzen einer Zahl, die Glättungskonstante genannt wird. Ein exponentiell geglättetes gleitendes Mittel mit einer Glättungskonstanten von 1 ist identisch mit einem einfachen gleitenden Durchschnitt, da 1 bis zu einer beliebigen Leistung 1 beträgt. Glättungskonstanten kleiner 1 gewichten jüngere Daten stärker, wobei die Vorspannung zu den jüngsten Messungen als Glättung zunimmt Konstant auf Null ab. Wenn die Glättungskonstante 1 übersteigt, werden ältere Daten stärker gewichtet als die jüngsten Messungen. Dieses Diagramm zeigt die Gewichtungsfaktoren, die sich aus unterschiedlichen Werten der Glättungskonstante ergeben. Man beachte, wie die Gewichtungsfaktoren alle 1 sind, wenn die Glättungskonstante gleich 1 ist. Wenn die Glättungskonstante zwischen 0,5 und 0,9 liegt, fällt das Gewicht, das an alte Daten gegeben wird, so schnell weg, verglichen mit neueren Messungen, dass es keine Notwendigkeit gibt, den gleitenden Durchschnitt zu beschränken Eine bestimmte Anzahl von Tagen können wir alle Daten, die wir haben, direkt zurück an den Anfang, und lassen Sie die Gewichtungsfaktoren aus der Glättung konstant berechnet automatisch verwerfen die alten Daten, da es irrelevant für die aktuelle trend. Hi, das geht Zu einem sehr einfachen Artikel, aber Sie finden es sehr hilfreich. Es geht um Hintergrund-Extraktion aus einem Video. Angenommen, Sie sind Video von Footage von Verkehr gegeben, kann eine Sache wie diese sein. Verkehr in Indien. Und Sie werden gebeten, einen ungefähren Hintergrund zu finden. Oder so etwas. Hintergrund-Extraktion kommt wichtig in der Objektverfolgung. Wenn Sie bereits ein Bild von der nackten Hintergrund, dann ist es einfach. Aber in vielen Fällen haben Sie nicht ein solches Bild und so, müssen Sie eine zu erstellen. Das ist, wo Running Average kommt praktisch. (Ich dachte darüber nach, wenn ein Mann eine Frage in SOF gefragt hat.) Die Funktion, die wir hier verwenden, um Running Average zu finden, ist cv2.accumulateWeighted (). Wenn wir z. B. ein Video anschauen, halten wir jedes Einzelbild an diese Funktion weiter, und die Funktion hält die Mittelwerte aller Frames, die ihr nach der folgenden Beziehung zugeführt werden, fest: src ist nichts anderes als unser Quellbild. Es kann Graustufen - oder Farbbild und entweder 8-Bit - oder 32-Bit-Gleitkomma sein. Dst ist das Ausgabe - oder Akkumulatorbild mit denselben Kanälen wie das Quellbild und es ist entweder ein 32-Bit - oder ein 64-Bit-Gleitkomma. Auch sollten wir es zuerst auf einen Wert deklarieren, der als Anfangswert genommen wird. Alpha ist das Gewicht des eingegebenen Bildes. Laut Docs regelt alpha die Aktualisierungsgeschwindigkeit (wie schnell der Akkumulator 8220forgets8221 um frühere Bilder handelt). In einfachen Worten, wenn Alpha ein höherer Wert ist, versucht das durchschnittliche Bild auch sehr schnelle und kurze Änderungen in den Daten zu erfassen. Wenn es niedriger Wert ist, wird der Durchschnitt träge und es wird nicht betrachten schnelle Änderungen in den Eingabebildern. Ich werde es ein wenig mit Hilfe von Bildern am Ende des Artikels erklären. In oben Code habe ich zwei Mittelwerte gesetzt, eine mit höheren Alpha-Wert und eine andere mit niedrigeren Alpha-Wert, so können Sie verstehen, Wirkung von Alpha. Zuerst werden beide auf den Anfangsrahmen des Captures gesetzt. Und in Schleife erhalten sie aktualisiert. Sie können einige Resultate in der SOF Verbindung sehen, die ich bereits zur Verfügung stellte. (Ich habe die Ergebnisse hier, können Sie den Code und Alpha-Wert dort): Ich habe meine Webcam und gespeichert Original-Frame und laufenden Durchschnitt zu einem bestimmten Zeitpunkt. Dieses ist ein Rahmen von einem typischen Verkehrsvideo, das von einer stationären Kamera genommen wird. Wie Sie sehen können, geht ein Auto auf die Straße, und die Person versucht, die Straße zu einem bestimmten Zeitpunkt zu überqueren. Aber sehen Sie den laufenden Durchschnitt zu diesem Zeitpunkt. Es gibt keine Person und Auto in diesem Bild (Eigentlich ist es da, haben einen engen Blick, dann werden Sie es sehen, und die Person ist klarer als Auto, da Auto bewegt sich sehr schnell und über das Bild, es hat nicht viel Wirkung auf den Durchschnitt, aber Person ist dort für eine lange Zeit, da er langsam und bewegt sich über die Straße.) Jetzt müssen wir sehen, die Wirkung von Alpha auf diese images. Smoothing Bilder Die Erklärung unten gehört zum Buch Computer Vision: Algorithmen Und Anwendungen von Richard Szeliski und LearningOpenCV Smoothing. Auch Unschärfe genannt. Ist eine einfache und häufig verwendete Bildverarbeitungsoperation. Es gibt viele Gründe für Glättung. In diesem Tutorial konzentrieren wir uns auf Glättung, um das Rauschen zu reduzieren (andere Verwendungen werden in den folgenden Tutorials zu sehen sein). Um einen Glättungsvorgang durchzuführen, setzen wir einen Filter auf unser Bild. Die am häufigsten verwendeten Filter sind linear. In dem ein Ausgangspixelwert (d. h.) als gewichtete Summe von Eingangspixelwerten (d. h.) bestimmt wird: Es hilft, einen Filter als ein Fenster von Koeffizienten zu visualisieren, die über das Bild gleiten. Es gibt viele Arten von Filtern, hier werden wir die am häufigsten verwendeten: Normalized Box Filter Dieser Filter ist der einfachste von jedem Output-Pixel ist der Mittelwert der Kernel-Nachbarn (alle von ihnen mit gleichem Gewicht beitragen) Der Kernel ist unten: Gaussian Filter Wahrscheinlich der nützlichste Filter (wenn auch nicht der schnellste). Die Gaußsche Filterung wird durchgeführt, indem jeder Punkt in dem Eingangsarray mit einem Gaußschen Kernel gefaltet wird und dann alle Summen addiert werden, um das Ausgangsarray zu erzeugen. Um das Bild klarer zu machen, denken Sie daran, wie ein 1D-Gaußscher Kernel aussieht. Angenommen, dass ein Bild 1D ist, können Sie feststellen, dass das Pixel in der Mitte das größte Gewicht hat. Das Gewicht seiner Nachbarn nimmt ab, wenn der räumliche Abstand zwischen ihnen und dem mittleren Pixel zunimmt. Denken Sie daran, dass ein 2D-Gaussian dargestellt werden kann als: Median Filter Der Medianfilter durchlaufen jedes Element des Signals (in diesem Fall das Bild) und ersetzen jedes Pixel durch den Median seiner benachbarten Pixel (die sich in einer quadratischen Nachbarschaft um das ausgewertete Pixel befinden ). Bilateraler Filter Bisher haben wir einige Filter, die Hauptziel ist es, ein Eingangsbild zu glätten erklärt. Doch manchmal lösen die Filter nicht nur das Rauschen, sondern glätten auch die Kanten. Um dies zu vermeiden (zumindest in einem gewissen Ausmaß), können wir einen bilateralen Filter verwenden. In analoger Weise wie der Gaußsche Filter berücksichtigt das zweiseitige Filter auch die benachbarten Pixel mit Gewichten, die jedem von ihnen zugewiesen sind. Diese Gewichte haben zwei Komponenten, wobei die erste die gleiche Gewichtung ist, die von dem Gaußschen Filter verwendet wird. Die zweite Komponente berücksichtigt die Intensitätsdifferenz zwischen den benachbarten Pixeln und der ausgewerteten. Für eine genauere Erläuterung können Sie diesen Link überprüfen. Was bedeutet dieses Programm? Lädt ein Bild Gibt 4 verschiedene Filterarten an (erklärt in Theorie) und zeigt die gefilterten Bilder nacheinander Erläuterung Let8217s überprüfen die OpenCV-Funktionen, die nur das Glättungsverfahren betreffen, da die Rest ist bereits bekannt. Normalisierter Blockfilter: OpenCV bietet die Funktion Unschärfe, um eine Glättung mit diesem Filter durchzuführen. Wir geben 4 Argumente an (mehr Details, siehe Referenz): src. Quellbild dst. Zielbild Größe (w, h). Definiert die Größe des zu verwendenden Kernels (von Breite w Pixel und Höhe h Pixel) Punkt (-1, -1). Gibt an, wo sich der Ankerpunkt (das ausgewertete Pixel) in Bezug auf die Nachbarschaft befindet. Wenn es einen negativen Wert gibt, dann wird die Mitte des Kerns als der Ankerpunkt betrachtet. Es wird von der Funktion GaussianBlur ausgeführt: Hier verwenden wir 4 Argumente (weitere Details finden Sie in der OpenCV-Referenz):

Comments