Ich fand eine elegantere Lösung für diese Frage. Die von Ihnen benötigte Funktion wird bereits von OpenCV bereitgestellt. Dies funktioniert bei 3-Kanal - oder 1-Kanal-Graustufenbildern: Methode convertScaleAbs skaliert Arrayelemente, berechnet absolute Werte und konvertiert die Ergebnisse in 8-Bit-Ganzzahlen ohne Vorzeichen: dst (i) saturatecastabs (src (i) alphabeta) convertScaleAbs (InputArray src , OutputArray dst, Doppel-alpha1, Doppel-Beta0) Beispiel-Code geantwortet Ihre unentschlossene Art und Weise ein gleitender Durchschnitt freut sich der Trend aus einer Masse von verwirrenden Messungen kann durch die Darstellung der 10 Tage in Bewegung gesehen werden Durchschnitt zusammen mit dem ursprünglichen täglichen Gewichte, als kleine Diamanten gezeigt. 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 ist. Glättungskonstanten kleiner 1 gewichten jüngere Daten stärker, wobei die Vorspannung zu den jüngsten Messungen als Glättung ansteigt 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 es für eine lange Zeit, da er langsam und bewegt sich über die Straße.) Nun müssen wir sehen, die Wirkung von Alpha auf diese Bilder.
Comments
Post a Comment