Friday 10 November 2017

Umzug Durchschnitt Opencv


Die Bildfilterung kann je nach Effekt in zwei Gruppierungen gruppiert werden: Tiefpassfilter (Glättung) Tiefpassfilterung (aka Glättung) wird eingesetzt, um das räumliche Frequenzrauschen aus einem digitalen Bild zu entfernen. Die Tiefpaßfilter verwenden gewöhnlich einen bewegten Fensteroperator, der ein Pixel des Bildes zu einem Zeitpunkt beeinflußt und seinen Wert durch irgendeine Funktion eines lokalen Bereichs (Fensters) von Pixeln ändert. Der Bediener bewegt sich über das Bild, um alle Pixel im Bild zu beeinflussen. Hochpassfilter (Kantenerkennung, Schärfen) Ein Hochpassfilter kann verwendet werden, um ein Bild schärfer zu machen. Diese Filter betonen feine Details im Bild - das Gegenteil des Tiefpaßfilters. Hochpass-Filter funktioniert in der gleichen Weise wie Tiefpass-Filterung verwendet es nur einen anderen Faltungs-Kernel. Beim Filtern eines Bildes wird jedes Pixel von seinen Nachbarn beeinflusst, und der Nettoeffekt der Filterung verschiebt Informationen um das Bild herum. In diesem Kapitel, verwenden Sie dieses Bild: Bogotobogo Website-Suche: Bogotobogo Website-Suche: Mittlere Filterung ist einfach zu implementieren. Es wird als eine Methode zum Glätten von Bildern verwendet, wodurch der Betrag der Intensitätsänderung zwischen einem Pixel und dem nächsten verringert wird, was das Reduzieren von Rauschen in Bildern verursacht. Die Idee der mittleren Filterung ist einfach, jeden Pixelwert in einem Bild mit dem mittleren (durchschnittlichen) Wert seiner Nachbarn zu ersetzen, einschließlich selbst. Dies hat die Wirkung, Pixelwerte zu eliminieren, die ihrer Umgebung nicht repräsentativ sind. Die mittlere Filterung wird üblicherweise als Faltungsfilter betrachtet. Wie andere Windungen basiert es um einen Kern, der die Form und Größe der Nachbarschaft darstellt, die bei der Berechnung des Mittelwerts abgetastet werden soll. Oft wird ein 3-facher 3-Quadrat-Kernel verwendet, wie unten gezeigt: Der mf ist der mittlere Filter: Der Filter2 () ist definiert als: Y filter2 (h, X) filtert die Daten in X mit dem zweidimensionalen FIR-Filter in der Matrix h. Es berechnet das Ergebnis, Y, mit zweidimensionaler Korrelation und gibt den zentralen Teil der Korrelation zurück, der die gleiche Größe wie X hat. Er gibt den durch den Formparameter angegebenen Teil von Y zurück. Form ist ein String mit einem dieser Werte: voll. Gibt die vollständige zweidimensionale Korrelation zurück. In diesem Fall ist Y größer als X. gleich. (Default) Gibt den zentralen Teil der Korrelation zurück. In diesem Fall ist Y die gleiche Größe wie X. gültig. Gibt nur die Teile der Korrelation zurück, die ohne nullgepolsterte Kanten berechnet werden. In diesem Fall ist Y kleiner als X. Nun wollen wir den im vorigen Abschnitt definierten Kernel mit filter2 () anwenden: Wir können sehen, dass das gefilterte Bild (rechts) im Vergleich zum ursprünglichen Eingang (links) . Wie bereits erwähnt, kann das Tiefpassfilter verwendet werden. Lass es testen Zuerst, um die Eingabe ein wenig schmutzig zu machen, spritzen wir etwas Pfeffer und Salz auf das Bild und wenden dann den mittleren Filter an: Es hat eine gewisse Wirkung auf das Salz - und Pfeffergeräusch, aber nicht viel. Es hat sie nur verschwommen gemacht. Wie wäre es mit dem Versuch, die Matlabs eingebaute Median Filter Bogotobogo Website Suche: Bogotobogo Website Suche: Median Filter - medfilt2 () Hier ist das Skript: Viel besser. Anders als der vorherige Filter, der gerade Mittelwert verwendet, dieses Mal haben wir Median verwendet. Median-Filterung ist eine nichtlineare Operation, die häufig in der Bildverarbeitung verwendet wird, um Salz - und Pfeffergeräusche zu reduzieren. Beachten Sie auch, dass das medfilt2 () 2-D-Filter ist, also funktioniert es nur für Graustufenbild. Für Lärm entfernen für RGB-Bild, gehen Sie bitte bis zum Ende dieses Kapitels: Entfernen von Rauschen im RGB-Bild. Matlab bietet eine Methode zur Erstellung eines vordefinierten 2-D-Filters. Sein fspecial (): h fspecial (Typ) erzeugt einen zweidimensionalen Filter h des angegebenen Typs. Es gibt h als Korrelationskernel zurück, welches die entsprechende Form ist, um mit imfilter () zu verwenden. Der Typ ist ein String mit einem dieser Werte: Matlab Bild - und Videobearbeitung OpenCV 3 - Bildvideobearbeitung OpenCV 3 Bild - und Videoverarbeitung mit PythonCamera Kalibrierung Mit OpenCV Kameras gibt es schon seit langer Zeit. Doch mit der Einführung der billigen Pinhole-Kameras im späten 20. Jahrhundert wurden sie zu einem gemeinsamen Vorkommen in unserem Alltag. Leider kommt diese Billigkeit mit ihrem Preis: erhebliche Verzerrung. Zum Glück sind das Konstanten und mit einer Kalibrierung und einigen Neuabstufungen können wir das korrigieren. Darüber hinaus können Sie bei der Kalibrierung auch die Beziehung zwischen den Camera8217s natürlichen Einheiten (Pixel) und den realen Welteinheiten (zB Millimeter) bestimmen. Für die Verzerrung berücksichtigt OpenCV die radialen und tangentialen Faktoren. Für den radialen Faktor verwendet man die folgende Formel: Für einen alten Pixelpunkt an Koordinaten im Eingabebild ist also seine Position auf dem korrigierten Ausgabebild. Das Vorhandensein der radialen Verzerrung manifestiert sich in Form des Effekts 8220barrel8221 oder 8220fisch-eye8221. Tangentiale Verzerrung tritt auf, weil die Bildaufnahmelinsen nicht perfekt parallel zur Abbildungsebene sind. Es kann über die Formeln korrigiert werden: So haben wir fünf Verzerrungsparameter, die in OpenCV als eine Zeilenmatrix mit 5 Spalten dargestellt werden: Jetzt für die Geräteumwandlung verwenden wir die folgende Formel: Der Prozess der Bestimmung dieser beiden Matrizen ist die Kalibrierung. Die Berechnung dieser Parameter erfolgt durch grundlegende geometrische Gleichungen. Die verwendeten Gleichungen hängen von den gewählten Kalibrierobjekten ab. Derzeit unterstützt OpenCV drei Arten von Objekten für die Kalibrierung: Klassisches Schwarz-Weiß-Schachbrett Symmetrisches Kreismuster Asymmetrisches Kreismuster Grundsätzlich müssen Sie Schnappschüsse dieser Muster mit Ihrer Kamera machen und OpenCV finden. Jedes gefundene Muster ergibt eine neue Gleichung. Um die Gleichung zu lösen, benötigt man mindestens eine vorgegebene Anzahl von Muster-Schnappschüssen, um ein gut gelegtes Gleichungssystem zu bilden. Diese Zahl ist höher für das Schachbrettmuster und weniger für die Kreise. Zum Beispiel erfordert das Schachbrettmuster in der Theorie mindestens zwei Schnappschüsse. Allerdings haben wir in der Praxis eine gute Menge an Lärm in unseren Eingabebildern, so dass für gute Ergebnisse werden Sie wahrscheinlich mindestens 10 gute Schnappschüsse des Eingangsmusters in verschiedenen Positionen benötigen. Die Beispielanwendung wird: Ermitteln Sie die Verzerrungsmatrix Bestimmen Sie die Kameramatrix Nehmen Sie die Eingabe von der Kamera-, Video - und Bilddateiliste auf Lesen Sie die Konfiguration aus der XMLYAML-Datei Speichern Sie die Ergebnisse in die XMLYAML-Datei Berechnen Sie den Neuprojektionsfehler. Quellcode Sie können auch den Quellcode finden Samplecpptutorialcodecalib3dcameracalibration Ordner der OpenCV-Quellbibliothek oder laden Sie es von hier aus. Das Programm hat ein einziges Argument: den Namen seiner Konfigurationsdatei. Wenn keiner gegeben wird, dann wird es versuchen, die mit dem Namen 8220default. xml8221 zu öffnen. Heres eine Beispiel-Konfigurationsdatei im XML-Format. In der Konfigurationsdatei können Sie die Kamera als Eingabe, eine Videodatei oder eine Bildliste verwenden. Wenn Sie sich für die letzte entscheiden, müssen Sie eine Konfigurationsdatei erstellen, in der Sie die zu verwendenden Bilder auflisten. Hier ist ein Beispiel dafür. Der wichtigste Teil zu erinnern ist, dass die Bilder müssen mit dem absoluten Pfad oder die relative aus Ihrem application8217s Arbeitsverzeichnis angegeben werden. Sie können das alles im oben genannten Beispielverzeichnis finden. Die Anwendung startet mit dem Lesen der Einstellungen aus der Konfigurationsdatei. Obwohl dies ein wichtiger Teil davon ist, hat es nichts mit dem Thema dieses Tutorials zu tun: Kamera-Kalibrierung. Deshalb habe ich mich dafür entschieden, den Code für diesen Teil hier nicht zu posten. Technischer Hintergrund, wie Sie dies tun können, finden Sie in der Datei Input und Output mit XML und YAML Dateien Tutorial. Erläuterung Für diesen I8217ve wurde ein einfacher OpenCV-Klassen-Eingabevorgang verwendet. Nach dem Lesen der Datei I8217ve eine zusätzliche Nachbearbeitungsfunktion, die die Gültigkeit der Eingabe überprüft. Nur wenn alle Eingaben gut sind, dann ist goodInput Variable wahr. Holen Sie sich die nächste Eingabe, wenn es scheitert oder wir haben genug von ihnen - kalibrieren. Danach haben wir eine große Schleife, wo wir die folgenden Operationen durchführen: das nächste Bild aus der Bildliste, Kamera oder Videodatei erhalten. Wenn dies fehlschlägt oder wir genügend Bilder haben, führen wir den Kalibriervorgang durch. Im Falle eines Bildes treten wir aus der Schleife heraus und sonst werden die verbleibenden Frames unverändert (wenn die Option gesetzt ist) über den Wechsel vom DETECTION-Modus zum CALIBRATED. Für einige Kameras müssen wir das Eingabebild umdrehen. Hier machen wir das auch Finden Sie das Muster in der aktuellen Eingabe. Die oben erwähnte Bildung der Gleichungen zielt darauf ab, große Muster in der Eingabe zu finden: Im Falle des Schachbrettes sind dies Ecken der Quadrate und für die Kreise, gut, die Kreise selbst. Die Position von diesen wird das Ergebnis bilden, das in den pointBuf-Vektor geschrieben wird. Je nach Art des Eingabemusters verwenden Sie entweder die findChessboardCorners oder die findCirclesGrid Funktion. Für beide von ihnen passieren Sie das aktuelle Bild und die Größe des Boards und you8217ll bekommen die Positionen der Muster. Außerdem geben sie eine boolesche Variable zurück, die angibt, ob das Muster in der Eingabe gefunden wurde (wir müssen nur die Bilder berücksichtigen, wo dies wahr ist). Immer wieder bei Kameras nehmen wir nur Kamerabilder auf, wenn eine Eingangsverzögerungszeit verstrichen ist. Dies geschieht, um dem Benutzer zu erlauben, das Schachbrett herum zu bewegen und verschiedene Bilder zu bekommen. Ähnliche Bilder ergeben sich in ähnlichen Gleichungen, und ähnliche Gleichungen am Kalibrierungsschritt bilden ein schlechtes Problem, so dass die Kalibrierung fehlschlägt. Für quadratische Bilder sind die Positionen der Ecken nur annähernd. Wir können dies durch den Aufruf der cornerSubPix-Funktion verbessern. Es wird ein besseres Kalibrierergebnis liefern. Danach fügen wir dem imagePoints-Vektor ein gültiges Input-Ergebnis hinzu, um alle Gleichungen in einen einzigen Container zu sammeln. Schließlich werden wir für die Visualisierungsrückmeldung die gefundenen Punkte auf dem Eingabebild mit der Funktion findChessboardCorners zeichnen. Zeigen Sie den Status und das Ergebnis für den Benutzer sowie die Befehlszeilensteuerung der Anwendung an. Dieser Teil zeigt Textausgabe auf dem Bild. Wenn wir die Kalibrierung durchlaufen haben und die Kamera8217s Matrix mit den Verzerrungskoeffizienten bekommt, können wir das Bild mit der Undistort-Funktion korrigieren: Dann warten wir auf eine Eingabetaste und wenn dies der Fall ist, schalten wir die Verzerrungsentfernung, wenn es g ist, beginnen wir wieder die Erkennung Prozess, und schließlich für die ESC-Taste beenden wir die Anwendung: Zeigen Sie die Verzerrung Entfernung für die Bilder zu. Wenn Sie mit einer Bildliste arbeiten, ist es nicht möglich, die Verzerrung innerhalb der Schleife zu entfernen. Deshalb musst du das nach der Schleife machen. Wenn wir das jetzt nutzen, erweitern wir die Undistort-Funktion, die in der Tat erstmals initUndistortRectifyMap aufruft, um Transformationsmatrizen zu finden und dann die Transformation mit der Remap-Funktion durchführt. Denn nach erfolgreicher Kalibrierung muss die Kartenberechnung nur einmal durchgeführt werden, indem Sie diese erweiterte Form verwenden, können Sie Ihre Anwendung beschleunigen: Die Kalibrierung und Speicherung Da die Kalibrierung nur einmal pro Kamera durchgeführt werden muss, ist es sinnvoll, sie nach einem zu speichern Erfolgreiche Kalibrierung. Auf diese Weise können Sie diese Werte einfach in Ihr Programm laden. Aus diesem Grund machen wir zunächst die Kalibrierung, und wenn es gelingt, speichern wir das Ergebnis in eine OpenCV-Stil XML oder YAML-Datei, abhängig von der Erweiterung, die Sie in der Konfigurationsdatei geben. Deshalb haben wir in der ersten Funktion nur diese beiden Prozesse aufgeteilt. Weil wir viele der Kalibriervariablen speichern wollen, erstellen wir diese Variablen hier und geben diese an die Kalibrier - und Sparfunktion weiter. Wiederum zeige ich nicht den Spartteil, der mit der Kalibrierung wenig gemein hat. Entdecken Sie die Quelldatei, um herauszufinden, wie und was: Wir machen die Kalibrierung mit Hilfe der calibrateCamera Funktion. Es hat folgende Parameter: Das Objekt punktiert. Dies ist ein Vektor von Point3f Vektor, der für jedes Eingabebild beschreibt, wie das Muster aussehen soll. Wenn wir ein planares Muster haben (wie ein Schachbrett), dann können wir einfach alle Z-Koordinaten auf Null setzen. Dies ist eine Sammlung der Punkte, an denen diese wichtigen Punkte vorhanden sind. Weil wir ein einzelnes Muster für alle eingegebenen Bilder verwenden, können wir das nur einmal berechnen und es für alle anderen Eingabeansichten multiplizieren. Wir berechnen die Eckpunkte mit der Funktion calcBoardCornerPositions als: Und dann multiplizieren Sie es mit: die Bildpunkte. Dies ist ein Vektor von Point2f-Vektor, der für jedes Eingabebild Koordinaten der wichtigen Punkte enthält (Ecken für Schachbrett und Zentren der Kreise für das Kreismuster). Wir haben das bereits von findChessboardCorners oder findCirclesGrid Funktion gesammelt. Wir müssen es nur weitergeben. Die Größe des Bildes, das von der Kamera, der Videodatei oder den Bildern aufgenommen wurde. Die Kameramatrix Wenn wir die feste Seitenverhältnis-Option verwendet haben, müssen wir die Null setzen: Die Verzerrungskoeffizientenmatrix. Initialisieren mit Null. Für alle Ansichten berechnet die Funktion Rotations - und Translationsvektoren, die die Objektpunkte (die im Modellkoordinatenraum angegeben sind) zu den Bildpunkten (im Weltkoordinatenraum angegeben) verwandeln. Die 7-ten und 8-ten Parameter sind der Ausgangsvektor von Matrizen, die in der i-ten Position den Rotations - und Translationsvektor für den i-ten Objektpunkt zum i-ten Bildpunkt enthalten. Das letzte Argument ist die Flagge. Sie müssen hier Optionen angeben, wie das Seitenverhältnis für die Brennweite fixieren, null tangentiale Verzerrung annehmen oder den Hauptpunkt regeln. Die Funktion gibt den durchschnittlichen Reprojektionsfehler zurück. Diese Zahl gibt eine gute Schätzung der Genauigkeit der gefundenen Parameter. Dies sollte so nahe wie möglich an Null liegen. Angesichts der Intrins-, Verzerrungs-, Rotations - und Translationsmatrizen können wir den Fehler für eine Ansicht berechnen, indem wir mit den projectPoints den Objektpunkt zum Bildpunkt transformieren. Dann berechnen wir die absolute Norm zwischen dem, was wir mit unserer Transformation und dem Eckkreis-Algorithmus gefunden haben. Um den durchschnittlichen Fehler zu finden, berechnen wir das arithmetische Mittel der für alle Kalibrierbilder berechneten Fehler. Lassen Sie es dieses Eingang Schachbrett Muster, das eine Größe von 9 X 6 hat. I8217ve verwendet eine AXIS IP-Kamera, um ein paar Schnappschüsse der Karte zu erstellen und gespeichert es in VID5-Verzeichnis. I8217ve legte dies in den imagesCameraCalibration Ordner mein Arbeitsverzeichnis und erstellt die folgende VID5.XML Datei, die beschreibt, welche Bilder zu verwenden: Dann übergeben BilderCameraCalibrationVID5VID5.XML als Eingabe in der Konfigurationsdatei. Hier wird ein Schachbrettmuster gefunden, das während der Laufzeit der Applikation gefunden wurde: Nach dem Auftragen der Verzerrungsentfernung erhalten wir: Das gleiche funktioniert für dieses asymmetrische Kreismuster, indem man die Eingangsbreite auf 4 und die Höhe auf 11 setzt. Dieses Mal I8217ve verwendet einen Live-Kamera-Feed, indem er spezifiziert Seine ID (822018221) für die Eingabe. Hier wie man ein erkanntes Muster aussieht: In beiden Fällen in der angegebenen Ausgabe XMLYAML Datei finden Sie die Kamera - und Verzerrungskoeffizienten Matrizen: Fügen Sie diese Werte als Konstanten zu Ihrem Programm hinzu, rufen Sie die initUndistortRectifyMap und die Remap-Funktion auf, um Verzerrungen zu entfernen und verzerrungsfrei zu genießen Eingänge für billige und qualitativ hochwertige Kameras. Sie können hier eine Laufzeitinstanz auf dem YouTube beobachten. Hilfe und Feedback Sie haben nicht gefunden, was Sie gesucht haben Stellen Sie eine Frage zum QA Forum. Wenn Sie denken, dass etwas fehlt oder falsch in der Dokumentation ist, fügen Sie bitte einen Fehlerbericht hinzu. Motionsanalyse und Objektverfolgung calcOpticalFlowPyrLK Berechnet einen optischen Fluss für einen spärlichen Feature-Set mit der iterativen Lucas-Kanade-Methode mit Pyramiden. C: void calcOpticalFlowPyrLK (InputArray prevImg InputArray nextImg InputArray prevPts InputOutputArray nextPts OutputArray-Status OutputArray err. Größe winSize Größe (21,21), int maxLevel 3, TermCriteria-Kriterien TermCriteria :: COUNTTermCriteria :: EPS, 30, 0,01), int Flags 0, double minEigThreshold 1e-4) Python: cv2. CalcOpticalFlowPyrLK (prevImg, nextImg, prevPt. NextPts.-Nr. err. WinSize. MaxLevel. Kriterien Flags minEigThreshold) rarr nextPts, status, err C: void cvCalcOpticalFlowPyrLK (const CvArr prev. Const CvArr curr CvArr prevpyr CvArr currpyr CvPoint2D32f prevfeatures CvPoint2D32f currfeatures int count CvSize winsize int-Ebene char-Status float trackerror CvTermCriteria-Kriterien int Flags) Python: cv. CalcOpticalFlowPyrLK (prev, curr, prevPyr, currPyr, prevFeatures, winSize, Level, Kriterien, Flags, guessesNone) - gt (currFeatures, status, trackerror) prevImg 8211 erstes 8-Bit-Eingabebild oder Pyramide, konstruiert von buildOpticalFlowPyramid (). NextImg 8211 zweites eingabebild oder pyramide der gleichen größe und der gleichen typ wie prevImg. PrevPts 8211 vector von 2D punkten, für die der flow gefunden werden muss punktkoordinaten müssen single-precision floating-point nummern sein NextPts 8211-Ausgangsvektor von 2D-Punkten (mit einfach-präzisen Gleitkomma-Koordinaten), die die berechneten neuen Positionen von Eingangsmerkmalen im zweiten Bild enthalten, wenn das OPTFLOWUSEINITIALFLOW-Flag übergeben wird, muss der Vektor die gleiche Größe wie in der Eingabe haben. Status 8211 Ausgabestatusvektor (von unsignierten Zeichen) wird jedes Element des Vektors auf 1 gesetzt, wenn der Fluss für die entsprechenden Merkmale gefunden wurde, andernfalls wird er auf 0 gesetzt. Fehler 8211 Ausgangsvektor der Fehler jedes Element des Vektors ist Auf einen Fehler für das entsprechende Merkmal setzen, Typ des Fehlermaßes kann in Flags-Parameter gesetzt werden, wenn der Flow nicht gefunden wurde, dann ist der Fehler nicht definiert (verwenden Sie den Status-Parameter, um solche Fälle zu finden). WinSize 8211 Größe des Suchfensters auf jeder Pyramidenebene. MaxLevel 8211 0-basierte maximale Pyramiden-Level-Nummer, wenn auf 0 gesetzt, Pyramiden werden nicht verwendet (einstufig), wenn auf 1 gesetzt, zwei Ebenen verwendet werden, und so weiter, wenn Pyramiden an den Eingang übergeben werden, wird der Algorithmus so viele Ebenen wie verwenden Pyramiden haben aber nicht mehr als maxLevel. Kriterien 8211-Parameter, die die Beendigungskriterien des iterativen Suchalgorithmus angeben (nach der angegebenen maximalen Anzahl von Iterationenkriterien. maxCount oder wenn sich das Suchfenster um weniger als Kriterien bewegt. Entwicklungsflags 8211 OPTFLOWUSEINITIALFLOW verwendet erste Schätzungen, die in nextPts gespeichert sind, wenn das Flag Ist nicht gesetzt, dann wird prevPts auf nextPts kopiert und gilt als die anfängliche Schätzung. OPTFLOWLKGETMINEIGENVALS verwenden minimale Eigenwerte als Fehlermaß (siehe minEigThreshold Beschreibung), wenn das Flag nicht gesetzt ist, dann L1 Abstand zwischen Patches um das Original und einen verschobenen Punkt , Geteilt durch die Anzahl der Pixel in einem Fenster, wird als Fehlermaß verwendet. MinEigThreshold 8211 Der Algorithmus berechnet den minimalen Eigenwert einer 2x2 Normalmatrix der optischen Strömungsgleichungen (diese Matrix wird als räumliche Gradientenmatrix in Bouguet00 bezeichnet), dividiert durch Anzahl der Pixel in einem Fenster, wenn dieser Wert kleiner als minEigThreshold ist, dann wird ein entsprechendes Feature herausgefiltert und seine Strömung wird nicht verarbeitet, so dass es möglich ist, schlechte Punkte zu entfernen und einen Performance-Boost zu erhalten. Die Funktion implementiert eine spärliche iterative Version des Lucas-Kanade-optischen Flusses in Pyramiden. Siehe Bouguet00. Die Funktion wird mit der TBB-Bibliothek parallelisiert. Ein Beispiel mit dem Lucas-Kanade-Optik-Flow-Algorithmus finden Sie unter opencvsourcecodesamplescpplkdemo. cpp (Python) Ein Beispiel mit dem Lucas-Kanade Optical Flow Algorithmus finden Sie unter opencvsourcecodesamplespython2lktrack. py (Python) Ein Beispiel mit dem Lucas-Kanade Tracker für Homographie Matching finden Sie unter opencvsourcecodesamplespython2lkhomography. py buildOpticalFlowPyramid Konstruiert die Bildpyramide, die an calcOpticalFlowPyrLK () übergeben werden kann. C: int buildOpticalFlowPyramid (InputArray img. OutputArrayOfArrays Pyramide Größe winSize int maxLevel bool mitDerivatives true, int pyrBorder BORDERREFLECT101, int derivBorder BORDERCONSTANT, bool tryReuseInputImage true) Python: cv2. BuildOpticalFlowPyramid (img, winSize, maxLevel. pyramide mitDerivativen pyrBorder. derBorder tryReuseInputImage) rarr retval, pyramide img 8211 8-bit Eingabebild. Pyramide 8211 Ausgangspyramide. WinSize 8211 Fenstergröße des optischen Flussalgorithmus. Muss nicht weniger sein als winSize Argument von calcOpticalFlowPyrLK (). Es wird benötigt, um erforderliche Polsterung für Pyramidenstufen zu berechnen. MaxLevel 8211 0-basierte maximale Pyramidenstufennummer. MitDerivaten 8211 setzen auf Vorgänge für die Pyramidenebene vorberechnen. Wenn die Pyramide ohne die Gradienten konstruiert wird, berechnet calcOpticalFlowPyrLK () sie intern. PyrBorder 8211 der Randmodus für Pyramidenschichten. DerBorder 8211 der Randmodus für Gradienten. TryReuseInputImage 8211 setzen ROI des Eingabebildes in die Pyramide, wenn möglich. Sie können falsch passieren, um das Datenkopieren zu erzwingen. Anzahl der Ebenen in der konstruierten Pyramide. Kann kleiner sein als maxLevel. CalcOpticalFlowFarneback Berechnet einen dichten optischen Fluss mit dem Gunnar Farneback8217s Algorithmus. C: void calcOpticalFlowFarneback (InputArray prev. InputArray als nächstes InputOutputArray fließt doppelte Pyraleale int Ebenen int winsize int intratoren int polyn Doppelpolysigma int Flags C: void cvCalcOpticalFlowFarneback (const CvArr prev. Const CvArr next CvArr flow Doppelte Pyrale, int Ebenen, int winsize, int-iterationen int polyn, doppelte polysigma, int flags) Python: cv2. CalcOpticalFlowFarneback (prev, next, pyrscale, Levels, Winsize, Iterationen, Polyn, Polysigma, Flags Flow) Rarr Flow Prev 8211 erste 8-Bit Einkanal-Eingangsbild. Nächstes 8211 zweites Eingabebild der gleichen Größe und der gleiche Typ wie prev. Fluß 8211 berechnetes Flußbild, das die gleiche Größe wie prev und Typ CV32FC2 hat. Pyrscale 8211-Parameter, Angabe der Bildskala (lt1) zum Erstellen von Pyramiden für jedes Bild pyrscale0.5 bedeutet eine klassische Pyramide, wobei jede nächste Schicht zweimal kleiner als die vorherige ist. Ebenen 8211 Anzahl der Pyramidenschichten einschließlich der anfänglichen Bildstufen1 bedeutet, dass keine zusätzlichen Schichten erzeugt werden und nur die Originalbilder verwendet werden. Winsize 8211 durchschnittliche Fenstergröße größere Werte erhöhen die Algorithmus Robustheit auf Bildrauschen und geben mehr Chancen für eine schnelle Bewegungserkennung, sondern liefern mehr verschwommenes Bewegungsfeld. Iterationen 8211 Anzahl der Iterationen der Algorithmus auf jeder Pyramidenebene. Polyn 8211 Größe der Pixel Nachbarschaft verwendet, um Polynom-Erweiterung in jedem Pixel größere Werte zu finden bedeutet, dass das Bild wird mit glatteren Oberflächen angenähert werden, was einen robusteren Algorithmus und mehr verschwommenes Bewegungsfeld, in der Regel Polyn 5 oder 7. Polysigma 8211 Standardabweichung der Gaussian, der verwendet wird, um die Derivate zu reduzieren, die als Grundlage für die Polynomausdehnung für Polyn5 verwendet werden. Sie können polysigma1.1 setzen. Für polyn7 Ein guter Wert wäre polysigma1.5. Flags 8211 Betriebsflags, die eine Kombination aus folgendem sein können: OPTFLOWUSEINITIALFLOW verwendet den Eingangsfluss als anfängliche Strömungsannäherung. OPTFLOWFARNEBACKGAUSSIAN verwendet den Gaußschen Filter anstelle eines Kastenfilters der gleichen Größe für die optische Flussschätzung in der Regel, diese Option gibt z genaueren Durchfluss als bei einem Kastenfilter, auf Kosten der niedrigeren Geschwindigkeit normalerweise, winsize für ein Gaußscher Fenster sollte eingestellt werden Ein größerer Wert, um das gleiche Maß an Robustheit zu erreichen. Die Funktion findet einen optischen Fluss für jedes Prev-Pixel unter Verwendung des Farneback2003-Algorithmus, so dass ein Beispiel, das den von Gunnar Farneback beschriebenen optischen Flussalgorithmus verwendet, bei opencvsourcecodesamplescppfback. cpp (Python) gefunden werden kann. Ein Beispiel, das den von Gunnar Farneback beschriebenen optischen Flussalgorithmus verwendet, kann sein Gefunden bei opencvsourcecodesamplespython2optflow. py estimateRigidTransform Berechnet eine optimale affine Transformation zwischen zwei 2D-Punkt-Sets. C: Mat estimateRigidTransform (InputArray src. InputArray dst. Bool fullAffine) Python: cv2. EstimateRigidTransform (src, dst, fullAffine) rarr retval src 8211 Erster Eingang 2D Punkt gesetzt gespeichert in std :: Vektor oder Mat. Oder ein in Mat. Dst 8211 Zweiter Eingang 2D Punkt Satz der gleichen Größe und der gleiche Typ wie A. oder ein anderes Bild. FullAffine 8211 Wenn es wahr ist, findet die Funktion eine optimale affine Transformation ohne zusätzliche Einschränkungen (6 Freiheitsgrade). Andernfalls beschränkt sich die Klasse der Transformationen auf Kombinationen von Translation, Rotation und einheitlicher Skalierung (5 Freiheitsgrade). Die Funktion findet eine optimale affine Transformation Ab (eine 2 x 3 Gleitkomma-Matrix), die am besten die affine Transformation zwischen: Zwei Punkt-Sets Zwei Rasterbilder annähert. In diesem Fall findet die Funktion zunächst einige Features im src-Bild und findet die entsprechenden Features im dst-Bild. Danach wird das Problem auf den ersten Fall reduziert. Im Falle von Punktmengen wird das Problem wie folgt formuliert: Sie müssen einen 2x2 Matrix A und 2x1 Vektor b finden, so dass: wo srci und dsti die i-ten Punkte in src und dst sind. In der Tat werden FastAtan2 () und Phase () verwendet, so dass der berechnete Winkel in Grad gemessen wird und den vollen Bereich 0..360 abdeckt. Außerdem wird die Maske gefüllt, um Pixel anzuzeigen, wo der berechnete Winkel gültig ist. (Python) Ein Beispiel für die Durchführung einer Motion-Template-Technik finden Sie unter opencvsourcecodesamplespython2motempl. py calcGlobalOrientation Berechnet eine globale Bewegungsorientierung in einer ausgewählten Region. C: double calcGlobalOrientation (InputArray Orientierung InputArray Maske InputArray mhi doppelter Zeitstempel Doppelte Dauer) Python: cv2. CalcGlobalOrientation (Orientierung, Maske, Mhi, Zeitstempel, Dauer) rarr retval C: double cvCalcGlobalOrientation (const CvArr Orientierung const cvArr Maske const CvArr mhi doppelte Zeitstempel doppelte Dauer) Python: cv. CalcGlobalOrientation (Orientierung, Maske, Mhi, Zeitstempel, Dauer) rarr Schwimmer Orientierung 8211 Bewegungsgradient Orientierungsbild berechnet durch die Funktion calcMotionGradient (). Maske 8211 Maskenbild. Es kann eine Verbindung einer gültigen Gradientenmaske sein, die auch von calcMotionGradient () berechnet wird. Und die Maske einer Region, deren Richtung berechnet werden muss. Mhi 8211 Bewegungshistoriebild berechnet durch updateMotionHistory (). Zeitstempel 8211 Zeitstempel an updateMotionHistory () übergeben. Dauer 8211 Maximale Laufzeit einer Bewegungsspur in Millisekunden, an updateMotionHistory () übergeben. Die Funktion berechnet eine mittlere Bewegungsrichtung im ausgewählten Bereich und gibt den Winkel zwischen 0 Grad und 360 Grad zurück. Die mittlere Richtung wird aus dem gewichteten Orientierungshistogramm berechnet, wo eine neuere Bewegung ein größeres Gewicht hat und die Bewegung in der Vergangenheit aufgetreten ist, hat ein kleineres Gewicht, wie in mhi aufgezeichnet. SegmentMotion Splittet ein Bewegungsverlauf in ein paar Teile, die separaten unabhängigen Bewegungen entsprechen (z. B. linke Hand, rechte Hand). C: void segmentMotion (InputArray mhi. OutputArray segmask. vektorltRectgtamp boundingRects doppelter Zeitstempel double segThresh) boundingRects, double timestamp, double segThresh) titlePermalink zu dieser Definition Python: cv2. Segmentmotion (mhi, timestamp, segThresh segmask) rarr segmask, boundingRects C: CvSeq cvSegmentMotion (const CvArr mhi. CvArr segmask. CvMemStorage Speicher Doppelte Zeitstempel Doppel-Segthresh) Python: cv. Segmentmotion (mhi, segmask, speicher, timestamp, segthresh) rarr boundingRects mhi 8211 Bewegungshistoriebild. Segmask 8211 Bild, wo die gefundene Maske gespeichert werden sollte, Einkanal-, 32-Bit-Gleitkomma. BoundingRects 8211 Vector mit ROIs von bewegten verbundenen Komponenten. Zeitstempel 8211 Aktuelle Zeit in Millisekunden oder anderen Einheiten. SegThresh 8211 Segmentierungsschwelle, die empfohlen wird, gleich dem Intervall zwischen dem Bewegungsverlauf 8220steps8221 oder größer zu sein. Die Funktion findet alle Bewegungssegmente und markiert sie in Segmaske mit individuellen Werten (1,2.). Es berechnet auch einen Vektor mit ROIs von bewegten verbundenen Komponenten. Danach kann die Bewegungsrichtung für jede Komponente mit calcGlobalOrientation () mit der extrahierten Maske der jeweiligen Komponente berechnet werden. Findet eine Objektmitte, Größe und Ausrichtung. C: RotatedRect CamShift (InputArray probImage, Rectamp-Fenster TermCriteria-Kriterien) Python: cv2. CamShift (probImage, window, Kriterien) rarr retval, Fenster C: int cvCamShift (const CvArr probimage CvRect-Fenster CvTermCriteria-Kriterien CvConnectedComp comp. CvBox2D-Box NULL) Python: cv. CamShift (probimage, window, criteria) - gt (int, comp, box) Manchmal kann das Hintergrundbild sehr verschwommen sein, da es die durchschnittlichen Hintergrundstatistiken enthält. BackgroundSubtractorMOG Klasse HintergrundSubtraktorMOG. Öffentlicher BackgroundSubtraktor Gaussian Mixture-basierter BackgroundForeground Segmentationsalgorithmus. Die Klasse implementiert den in P. KadewTraKuPong und R. Bowden beschriebenen Algorithmus, ein verbessertes adaptives Hintergrundmischungsmodell für die Echtzeit-Tracking mit Schattenerkennung. Proc. 2. Europäischer Workshop zu fortgeschrittenen Video-basierten Überwachungssystemen, 2001: personal. ee. surrey. ac. ukPersonalR. Bowdenpublicationsavbs01avbs01.pdf BackgroundSubtractorMOG :: BackgroundSubtractorMOG C: BackgroundSubtractorMOG. HintergrundSubtraktorMOG () C: BackgroundSubtractorMOG. BackgroundSubtractorMOG (int Geschichte, int nmixtures, double backgroundRatio. Double noiseSigma 0) Python: cv2. BackgroundSubtractorMOG (Geschichte, nmixtures, backgroundRatio. NoiseSigma) rarr ltBackgroundSubtraktorMOG objectgt Geschichte 8211 Länge der Geschichte. Nmixtures 8211 Anzahl der Gaußmischungen. BackgroundRatio 8211 Hintergrundverhältnis. NoiseSigma 8211 Geräuschstärke. Der Standardkonstruktor setzt alle Parameter auf Standardwerte. BackgroundSubtractorMOG :: operator () Aktualisiert das Hintergrundmodell und gibt die Vordergrundmaske zurück C: void BackgroundSubtractorMOG. Operator () (InputArray Bild. OutputArray fgmask. Double learningRate 0) BackgroundSubtractorMOG2 Gaussian Mixture-basierter BackgroundForeground Segmentationsalgorithmus. Klasse BackgroundSubtractorMOG2. Public BackgroundSubtractor Hier sind wichtige Mitglieder der Klasse, die den Algorithmus steuern, den du nach dem Konstruieren der Klasseninstanz einstellen kannst: Maximal zulässige Anzahl der Gemischkomponenten. Die tatsächliche Zahl wird dynamisch pro Pixel bestimmt. Schwelle, die festlegt, ob die Komponente signifikant genug ist, um in das Hintergrundmodell aufgenommen zu werden (entspricht TB1-cf aus dem Papier, welches Papier). Cf0.1 gt TB0.9 ist Standard. Für alpha0.001. Es bedeutet, dass der Modus für ca. 105 Frames existieren sollte, bevor es als Vordergrund betrachtet wird. Schwelle für die quadratische Mahalanobis-Distanz, die hilft, zu entscheiden, wann eine Probe in der Nähe der vorhandenen Komponenten liegt (entspricht Tg). Wenn es sich nicht um eine Komponente handelt, wird eine neue Komponente generiert. 3 sigma gt Tg339 ist Standard. Ein kleinerer Tg-Wert erzeugt mehr Komponenten. Ein höherer Tg-Wert kann zu einer kleinen Anzahl von Komponenten führen, aber sie können zu groß werden. Anfangsabweichung für die neu erzeugten Komponenten. Es beeinflusst die Geschwindigkeit der Anpassung. Der Parameterwert basiert auf Ihrer Schätzung der typischen Standardabweichung von den Bildern. OpenCV nutzt 15 als vernünftigen Wert. Parameter zur weiteren Steuerung der Varianz. Parameter zur weiteren Steuerung der Varianz. Komplexitätsreduktionsparameter Dieser Parameter definiert die Anzahl der benötigten Samples, um zu beweisen, dass die Komponente existiert. CT0.05 ist ein Standardwert für alle Samples. Durch die Einstellung von CT0 bekommst du einen Algorithmus, der dem Standard StaufferampGrimson Algorithmus sehr ähnlich ist. Der Wert für die Markierung von Schattenpixeln in der Ausgabe-Vordergrundmaske. Der Standardwert ist 127. Schattenschwelle. Der Schatten wird erkannt, wenn das Pixel eine dunklere Version des Hintergrunds ist. Tau ist eine Schwelle, die definiert, wie viel dunkler der Schatten sein kann. Tau 0,5 bedeutet, dass, wenn ein Pixel mehr als zweimal dunkler ist, dann ist es kein Schatten. Siehe Prati, Mikic, Trivedi, Cucchiarra, Erkennung beweglicher Schatten. . IEEE PAMI, 2003. Die Klasse implementiert die Gaußsche Mischung Modell Hintergrund Subtraktion beschrieben in: Z. Zivkovic, Verbesserte adaptive Gausian Mischung Modell für Hintergrund Subtraktion. Internationale Konferenz Pattern Recognition, UK, August 2004, zoranzPublicationszivkovic2004ICPR. pdf. Der Code ist sehr schnell und führt auch Schattenerkennung durch. Die Anzahl der Gausssian-Komponenten wird pro Pixel angepasst. Z. Zivkovic, F. van der Heijden, Effiziente Adaptive Density Estimapion pro Bild Pixel für die Aufgabe des Hintergrunds Subtraktion. Pattern Recognition Briefe, Bd. 27, nein 7, Seiten 773-780, 2006. Der Algorithmus ähnlich dem Standard StaufferampGrimson-Algorithmus mit zusätzlicher Auswahl der Anzahl der Gaußschen Komponenten auf Basis von: Z. Zivkovic, F. van der Heijden, Rekursives, unbeaufsichtigtes Lernen von endlichen Mischungsmodellen, IEEE Trans . Auf Pattern Analysis und Machine Intelligence, Bd. 26, Nr.5, Seiten 651-656, 2004. BackgroundSubtractorMOG2 :: BackgroundSubtractorMOG2 C: BackgroundSubtractorMOG2. BackgroundSubtractorMOG2 () C: BackgroundSubtractorMOG2. BackgroundSubtractorMOG2 (int history, float varThreshold, bool bShadowDetection true) Geschichte 8211 Länge des Verlaufs. VarThreshold 8211 Threshold auf dem quadratischen Mahalanobis Abstand zu entscheiden, ob es durch das Hintergrundmodell gut beschrieben wird (siehe Cthr). Dieser Parameter wirkt sich nicht auf die Hintergrundaktualisierung aus. Ein typischer Wert könnte 4 Sigma sein, das heißt, varThreshold4416 (siehe Tb). BShadowDetection 8211 Parameter, der festlegt, ob die Schattenerkennung aktiviert werden soll (true oder false). BackgroundSubtractorMOG2 :: operator () Aktualisiert das Hintergrundmodell und berechnet die Vordergrundmaske C: void BackgroundSubtractorMOG2. Operator () (InputArray Bild. OutputArray fgmask. Double learningRate -1) BackgroundSubtractorMOG2 :: getBackgroundImage Gibt Hintergrundbild zurück C: void BackgroundSubtractorMOG2. GetBackgroundImage (OutputArray backgroundImage)

No comments:

Post a Comment