Friday 13 October 2017

Gleitender Durchschnitt Opencv


Im noch Hacking zusammen ein Buch Scannen Skript, und fürs Erste, alles was ich brauche ist in der Lage sein, automatisch zu erkennen, eine Seite zu drehen. Das Buch füllt 90 des Schirmes (Im using eine cruddy Webcam für die Bewegungsabfragung), also, wenn ich eine Seite drehe, ist die Bewegungsrichtung grundsätzlich in der gleichen Richtung. Ich habe ein Motion-Tracking-Skript, aber Derivate sind immer mich nirgendwo: Es erkennt die durchschnittliche Bewegung der durchschnittlichen Mitte aller Boxen, die extrem ineffizient ist. Wie würde ich über Erkennung solcher Bewegungen schnell und genau (d. H. Innerhalb einer Schwelle) Im mit Python zu gehen, und ich beabsichtige, mit ihm zu bleiben, wie mein ganzes Framework auf Python basiert. Und Hilfe wird geschätzt, so vielen Dank im Voraus. Cheers. Hi, wird dies ein sehr einfacher Artikel, aber Sie werden es sehr hilfreich finden. 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. Außerdem 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):

No comments:

Post a Comment